/[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 67 - (hide annotations)
Mon Jul 29 17:28:27 2024 UTC (8 months, 2 weeks ago) by rakin
Original Path: trunk/src/events/interaction/InteractionCreate.ts
File MIME type: application/typescript
File size: 3055 byte(s)
Fixed issues
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    
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 51 }
58     }
59 rakin 64 else if (interaction.isAutocomplete()) {
60     await client.setMessage(interaction);
61    
62     const { commandName } = interaction;
63    
64     const command = await client.commands.get(commandName);
65    
66     if (command && command.supportsInteractions) {
67     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
68    
69     if (!allowed) {
70     return;
71     }
72    
73     const options = {
74     cmdName: commandName,
75     options: interaction.options,
76     isInteraction: true,
77     optionName: interaction.options.getFocused(true).name,
78     query: interaction.options.getFocused(true).value.toString()
79     } as AutoCompleteOptions;
80    
81     await command.autoComplete(client, interaction, options);
82     }
83     }
84 rakin 51 }
85     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26