/[sudobot]/trunk/src/utils/structures/BaseCommand.ts
ViewVC logotype

Diff of /trunk/src/utils/structures/BaseCommand.ts

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 56 by rakin, Mon Jul 29 17:28:24 2024 UTC revision 207 by rakin, Mon Jul 29 17:29:01 2024 UTC
# Line 1  Line 1 
1  import { CommandInteraction, CommandInteractionOption, Interaction, Message, MessageEditOptions, MessageOptions, MessagePayload, WebhookEditMessageOptions } from 'discord.js';  import { ModalSubmitInteraction } from 'discord-modals';
2    import { PermissionResolvable, AutocompleteInteraction, CommandInteraction, CommandInteractionOption, ContextMenuInteraction, Interaction, Message, MessageEditOptions, MessageOptions, MessagePayload, WebhookEditMessageOptions, SelectMenuInteraction, ButtonInteraction, GuildMember } from 'discord.js';
3  import DiscordClient from '../../client/Client';  import DiscordClient from '../../client/Client';
4    import AutoCompleteOptions from '../../types/AutoCompleteOptions';
5  import CommandOptions from '../../types/CommandOptions';  import CommandOptions from '../../types/CommandOptions';
6  import InteractionOptions from '../../types/InteractionOptions';  import InteractionOptions from '../../types/InteractionOptions';
7    
8  export default abstract class BaseCommand {  export default abstract class BaseCommand {
9      supportsInteractions: boolean = false;      supportsInteractions: boolean = false;
10      supportsLegacy: boolean = true;      supportsLegacy: boolean = true;
11        supportsContextMenu: boolean = false;
12      coolDown?: number;      coolDown?: number;
13        ownerOnly: boolean = false;
14        permissions: PermissionResolvable[] = [];
15        
16      constructor(private name: string, private category: string, private aliases: Array<string>) {      constructor(private name: string, private category: string, private aliases: Array<string>) {
17    
18      }      }
19    
20      getName(): string {      getName(): string {
# Line 24  export default abstract class BaseComman Line 29  export default abstract class BaseComman
29          return this.aliases;          return this.aliases;
30      }      }
31    
32      async deferReply(msg: Message | CommandInteraction, options: MessageOptions | string | MessagePayload | WebhookEditMessageOptions, edit: boolean = false): Promise<Message | CommandInteraction> {      async autoComplete(client: DiscordClient, interaction: AutocompleteInteraction, options: AutoCompleteOptions): Promise <void> {
33    
34        }
35    
36        async default(client: DiscordClient, interaction: Interaction): Promise <void> {
37            
38        }
39    
40        async modalSubmit(client: DiscordClient, interaction: ModalSubmitInteraction): Promise <void> {
41            
42        }
43    
44        async deferReply(msg: Message | CommandInteraction | ContextMenuInteraction, options: MessageOptions | string | MessagePayload | WebhookEditMessageOptions, edit: boolean = false): Promise<Message | CommandInteraction> {
45          if (msg instanceof Message) {          if (msg instanceof Message) {
46              return await msg[edit ? 'edit' : 'reply'](options as (MessageOptions & MessageEditOptions));              return await msg[edit ? 'edit' : 'reply'](options as (MessageOptions & MessageEditOptions));
47          }          }
# Line 32  export default abstract class BaseComman Line 49  export default abstract class BaseComman
49          return (await msg.editReply(options as string | MessagePayload | WebhookEditMessageOptions)) as Message;          return (await msg.editReply(options as string | MessagePayload | WebhookEditMessageOptions)) as Message;
50      }      }
51    
52        async perms(client: DiscordClient, message: Message | Interaction) {
53            let member: GuildMember | null = null;
54    
55            if (message.member && !(message.member instanceof GuildMember)) {
56                try {
57                    member = (await message.guild?.members.fetch(message.member!.user.id)) ?? null;
58                }
59                catch (e) {
60                    console.log(e);
61                    return false;
62                }
63            }
64            else {
65                member = message.member;
66            }
67    
68            for await (let permission of this.permissions) {
69                if (!member?.permissions.has(permission, true)) {                
70                    if (message instanceof Interaction && !message.isRepliable())
71                        return;
72        
73                    await message.reply({
74                        embeds: [
75                            {
76                                description: ":x: You don't have enough permissions to run this command.",
77                                color: 0xf14a60
78                            }
79                        ]
80                    });
81        
82                    return false;
83                }
84            }
85    
86            return true;
87        }
88    
89        async execute(client: DiscordClient, message: Message | Interaction, options: CommandOptions | InteractionOptions) {
90            if (!(await this.perms(client, message))) {
91                return;
92            }
93    
94            await this.run(client, message, options);
95        }
96    
97      abstract run(client: DiscordClient, message: Message | Interaction, options: CommandOptions | InteractionOptions): Promise<void>;      abstract run(client: DiscordClient, message: Message | Interaction, options: CommandOptions | InteractionOptions): Promise<void>;
 }  
98    }

Legend:
Removed from v.56  
changed lines
  Added in v.207

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26