Compare commits
	
		
			1 Commits
		
	
	
		
			jellywx/gu
			...
			jellywx/ma
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e2bf23f194 | 
							
								
								
									
										38
									
								
								src/commands/command_macro/install.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/commands/command_macro/install.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
use poise::serenity_prelude::CommandType;
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    commands::autocomplete::macro_name_autocomplete, models::command_macro::guild_command_macro,
 | 
			
		||||
    Context, Error,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Add a macro as a slash-command to this server. Enables controlling permissions per-macro.
 | 
			
		||||
#[poise::command(
 | 
			
		||||
    slash_command,
 | 
			
		||||
    rename = "install",
 | 
			
		||||
    guild_only = true,
 | 
			
		||||
    default_member_permissions = "MANAGE_GUILD",
 | 
			
		||||
    identifying_name = "install_macro"
 | 
			
		||||
)]
 | 
			
		||||
pub async fn install_macro(
 | 
			
		||||
    ctx: Context<'_>,
 | 
			
		||||
    #[description = "Name of macro to install"]
 | 
			
		||||
    #[autocomplete = "macro_name_autocomplete"]
 | 
			
		||||
    name: String,
 | 
			
		||||
) -> Result<(), Error> {
 | 
			
		||||
    let guild_id = ctx.guild_id().unwrap();
 | 
			
		||||
 | 
			
		||||
    if let Some(command_macro) = guild_command_macro(&ctx, &name).await {
 | 
			
		||||
        guild_id
 | 
			
		||||
            .create_application_command(&ctx.discord(), |a| {
 | 
			
		||||
                a.kind(CommandType::ChatInput)
 | 
			
		||||
                    .name(command_macro.name)
 | 
			
		||||
                    .description(command_macro.description.unwrap_or_else(|| "".to_string()))
 | 
			
		||||
            })
 | 
			
		||||
            .await?;
 | 
			
		||||
        ctx.send(|r| r.ephemeral(true).content("Macro installed. Go to Server Settings 🠚 Integrations 🠚 Reminder Bot to configure permissions.")).await?;
 | 
			
		||||
    } else {
 | 
			
		||||
        ctx.send(|r| r.ephemeral(true).content("No macro found with that name")).await?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
use crate::{Context, Error};
 | 
			
		||||
 | 
			
		||||
pub mod delete;
 | 
			
		||||
pub mod install;
 | 
			
		||||
pub mod list;
 | 
			
		||||
pub mod migrate;
 | 
			
		||||
pub mod record;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
mod autocomplete;
 | 
			
		||||
pub mod autocomplete;
 | 
			
		||||
pub mod command_macro;
 | 
			
		||||
pub mod info_cmds;
 | 
			
		||||
pub mod moderation_cmds;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/hooks.rs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/hooks.rs
									
									
									
									
									
								
							@@ -1,9 +1,14 @@
 | 
			
		||||
use poise::serenity_prelude::model::channel::Channel;
 | 
			
		||||
use poise::{
 | 
			
		||||
    serenity_prelude::model::channel::Channel, ApplicationCommandOrAutocompleteInteraction,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use crate::{consts::MACRO_MAX_COMMANDS, models::command_macro::RecordedCommand, Context, Error};
 | 
			
		||||
 | 
			
		||||
async fn macro_check(ctx: Context<'_>) -> bool {
 | 
			
		||||
async fn recording_macro_check(ctx: Context<'_>) -> bool {
 | 
			
		||||
    if let Context::Application(app_ctx) = ctx {
 | 
			
		||||
        if let ApplicationCommandOrAutocompleteInteraction::ApplicationCommand(_) =
 | 
			
		||||
            app_ctx.interaction
 | 
			
		||||
        {
 | 
			
		||||
            if let Some(guild_id) = ctx.guild_id() {
 | 
			
		||||
                if ctx.command().identifying_name != "finish_macro" {
 | 
			
		||||
                    let mut lock = ctx.data().recording_macros.write().await;
 | 
			
		||||
@@ -35,6 +40,7 @@ async fn macro_check(ctx: Context<'_>) -> bool {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    true
 | 
			
		||||
}
 | 
			
		||||
@@ -89,5 +95,5 @@ async fn check_self_permissions(ctx: Context<'_>) -> bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn all_checks(ctx: Context<'_>) -> Result<bool, Error> {
 | 
			
		||||
    Ok(macro_check(ctx).await && check_self_permissions(ctx).await)
 | 
			
		||||
    Ok(recording_macro_check(ctx).await && check_self_permissions(ctx).await)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -117,6 +117,7 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
 | 
			
		||||
                    command_macro::record::record_macro(),
 | 
			
		||||
                    command_macro::run::run_macro(),
 | 
			
		||||
                    command_macro::migrate::migrate_macro(),
 | 
			
		||||
                    command_macro::install::install_macro(),
 | 
			
		||||
                ],
 | 
			
		||||
                ..command_macro::macro_base()
 | 
			
		||||
            },
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,7 @@ pub struct RawCommandMacro {
 | 
			
		||||
    pub commands: Value,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get a macro by name form a guild.
 | 
			
		||||
pub async fn guild_command_macro(
 | 
			
		||||
    ctx: &Context<'_>,
 | 
			
		||||
    name: &str,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user