/[sudobot]/trunk/src/events/interaction/InteractionCreateEvent.ts
ViewVC logotype

Annotation of /trunk/src/events/interaction/InteractionCreateEvent.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 81 - (hide annotations)
Mon Jul 29 17:28:31 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 3713 byte(s)
Added punishment appeal contact system
1 rakin 51 import BaseEvent from '../../utils/structures/BaseEvent';
2     import { GuildMember, Interaction, Message, MessageEmbed } from 'discord.js';
3     import DiscordClient from '../../client/Client';
4     import CommandOptions from '../../types/CommandOptions';
5     import InteractionOptions from '../../types/InteractionOptions';
6 rakin 64 import AutoCompleteOptions from '../../types/AutoCompleteOptions';
7 rakin 51
8     export default class InteractionCreateEvent extends BaseEvent {
9     constructor() {
10     super('interactionCreate');
11     }
12    
13     async run(client: DiscordClient, interaction: Interaction) {
14 rakin 67 if (!interaction.guild || !interaction.channel || interaction.channel.type === 'DM') {
15     if (interaction.isRepliable())
16     await interaction.reply({
17     content: 'You cannot use this bot on DMs.',
18     ephemeral: true
19     });
20    
21     return;
22     }
23 rakin 81
24 rakin 51 if (interaction.isCommand()) {
25     await client.setMessage(interaction);
26    
27     const { commandName } = interaction;
28    
29     const command = await client.commands.get(commandName);
30    
31     if (command && command.supportsInteractions) {
32 rakin 58 const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
33    
34 rakin 51 if (!allowed) {
35     await interaction.reply({
36     embeds: [
37     new MessageEmbed()
38     .setColor('#f14a60')
39     .setDescription(":x: You don't have permission to run this command.")
40     ],
41     ephemeral: true
42     });
43    
44     return;
45     }
46    
47 rakin 55 const options = {
48 rakin 51 cmdName: commandName,
49     options: interaction.options,
50     isInteraction: true
51 rakin 55 } as InteractionOptions;
52    
53     if (!await client.cooldown.start(interaction, options))
54     return;
55    
56     await command.run(client, interaction, options);
57 rakin 81 (global as any).lastCommand = commandName;
58 rakin 51 }
59     }
60 rakin 64 else if (interaction.isAutocomplete()) {
61     await client.setMessage(interaction);
62    
63     const { commandName } = interaction;
64    
65     const command = await client.commands.get(commandName);
66    
67     if (command && command.supportsInteractions) {
68     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
69    
70     if (!allowed) {
71     return;
72     }
73    
74     const options = {
75     cmdName: commandName,
76     options: interaction.options,
77     isInteraction: true,
78     optionName: interaction.options.getFocused(true).name,
79     query: interaction.options.getFocused(true).value.toString()
80     } as AutoCompleteOptions;
81    
82     await command.autoComplete(client, interaction, options);
83 rakin 81 (global as any).lastCommand = commandName;
84 rakin 64 }
85     }
86 rakin 81 else {
87     if (!(global as any).commandName)
88     return;
89    
90     await client.setMessage(interaction);
91    
92     const command = await client.commands.get((global as any).commandName);
93    
94     if (command && command.supportsInteractions) {
95     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
96    
97     if (!allowed) {
98     return;
99     }
100    
101     await command.default(client, interaction);
102     }
103     }
104 rakin 51 }
105     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26