Wip commit
This commit is contained in:
		
							
								
								
									
										81
									
								
								src/utils.rs
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								src/utils.rs
									
									
									
									
									
								
							@@ -1,51 +1,21 @@
 | 
			
		||||
use poise::{
 | 
			
		||||
    serenity_prelude as serenity,
 | 
			
		||||
    serenity_prelude::{
 | 
			
		||||
        builder::CreateApplicationCommands,
 | 
			
		||||
        http::CacheHttp,
 | 
			
		||||
        interaction::MessageFlags,
 | 
			
		||||
        model::id::{GuildId, UserId},
 | 
			
		||||
        CreateInteractionResponseMessage,
 | 
			
		||||
    },
 | 
			
		||||
    CreateReply,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    consts::{CNC_GUILD, SUBSCRIPTION_ROLES},
 | 
			
		||||
    Data, Error,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub async fn register_application_commands(
 | 
			
		||||
    ctx: &serenity::Context,
 | 
			
		||||
    framework: &poise::Framework<Data, Error>,
 | 
			
		||||
    guild_id: Option<GuildId>,
 | 
			
		||||
) -> Result<(), serenity::Error> {
 | 
			
		||||
    let mut commands_builder = CreateApplicationCommands::default();
 | 
			
		||||
    let commands = &framework.options().commands;
 | 
			
		||||
    for command in commands {
 | 
			
		||||
        if let Some(slash_command) = command.create_as_slash_command() {
 | 
			
		||||
            commands_builder.add_application_command(slash_command);
 | 
			
		||||
        }
 | 
			
		||||
        if let Some(context_menu_command) = command.create_as_context_menu_command() {
 | 
			
		||||
            commands_builder.add_application_command(context_menu_command);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    let commands_builder = poise::serenity_prelude::json::Value::Array(commands_builder.0);
 | 
			
		||||
 | 
			
		||||
    if let Some(guild_id) = guild_id {
 | 
			
		||||
        ctx.http.create_guild_application_commands(guild_id.0, &commands_builder).await?;
 | 
			
		||||
    } else {
 | 
			
		||||
        ctx.http.create_global_application_commands(&commands_builder).await?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
use crate::consts::{CNC_GUILD, SUBSCRIPTION_ROLES};
 | 
			
		||||
 | 
			
		||||
pub async fn check_subscription(cache_http: impl CacheHttp, user_id: impl Into<UserId>) -> bool {
 | 
			
		||||
    if let Some(subscription_guild) = *CNC_GUILD {
 | 
			
		||||
        let guild_member = GuildId(subscription_guild).member(cache_http, user_id).await;
 | 
			
		||||
        let guild_member = GuildId::new(subscription_guild).member(cache_http, user_id).await;
 | 
			
		||||
 | 
			
		||||
        if let Ok(member) = guild_member {
 | 
			
		||||
            for role in member.roles {
 | 
			
		||||
                if SUBSCRIPTION_ROLES.contains(role.as_u64()) {
 | 
			
		||||
                if SUBSCRIPTION_ROLES.contains(&role.get()) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -70,39 +40,14 @@ pub async fn check_guild_subscription(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Sends the message, specified via [`crate::CreateReply`], to the interaction initial response
 | 
			
		||||
/// endpoint
 | 
			
		||||
pub fn send_as_initial_response(
 | 
			
		||||
    data: poise::CreateReply<'_>,
 | 
			
		||||
    f: &mut serenity::CreateInteractionResponseData,
 | 
			
		||||
) {
 | 
			
		||||
    let poise::CreateReply {
 | 
			
		||||
        content,
 | 
			
		||||
        embeds,
 | 
			
		||||
        attachments: _, // serenity doesn't support attachments in initial response yet
 | 
			
		||||
        components,
 | 
			
		||||
        ephemeral,
 | 
			
		||||
        allowed_mentions,
 | 
			
		||||
        reply: _,
 | 
			
		||||
    } = data;
 | 
			
		||||
pub fn reply_to_interaction_response_message(
 | 
			
		||||
    reply: CreateReply,
 | 
			
		||||
) -> CreateInteractionResponseMessage {
 | 
			
		||||
    let mut builder = CreateInteractionResponseMessage::new().embeds(reply.embeds);
 | 
			
		||||
 | 
			
		||||
    if let Some(content) = content {
 | 
			
		||||
        f.content(content);
 | 
			
		||||
    }
 | 
			
		||||
    f.set_embeds(embeds);
 | 
			
		||||
    if let Some(allowed_mentions) = allowed_mentions {
 | 
			
		||||
        f.allowed_mentions(|f| {
 | 
			
		||||
            *f = allowed_mentions.clone();
 | 
			
		||||
            f
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if let Some(components) = components {
 | 
			
		||||
        f.components(|f| {
 | 
			
		||||
            f.0 = components.0;
 | 
			
		||||
            f
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if ephemeral {
 | 
			
		||||
        f.flags(MessageFlags::EPHEMERAL);
 | 
			
		||||
    if let Some(components) = reply.components {
 | 
			
		||||
        builder = builder.components(components)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    builder
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user