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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 344 - (show annotations)
Mon Jul 29 17:29:40 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 3920 byte(s)
chore: eslint autofix
1 import BaseEvent from '../../utils/structures/BaseEvent';
2 import { GuildMember, Interaction, MessageEmbed } from 'discord.js';
3 import DiscordClient from '../../client/Client';
4 import InteractionOptions from '../../types/InteractionOptions';
5 import AutoCompleteOptions from '../../types/AutoCompleteOptions';
6
7 export default class InteractionCreateEvent extends BaseEvent {
8 constructor() {
9 super('interactionCreate');
10 }
11
12 async run(client: DiscordClient, interaction: Interaction) {
13 if (!interaction.guild || !interaction.channel || interaction.channel.type === 'DM') {
14 if (interaction.isRepliable())
15 await interaction.reply({
16 content: 'You cannot use this bot on DMs.',
17 ephemeral: true
18 });
19
20 return;
21 }
22
23 if (interaction.isCommand() || interaction.isContextMenu()) {
24 await client.setMessage(interaction);
25
26 const { commandName } = interaction;
27
28 const command = await client.commands.get(commandName);
29
30 if (command && ((interaction.isCommand() && command.supportsInteractions) || (interaction.isContextMenu() && command.supportsContextMenu))) {
31 const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
32
33 if (!allowed) {
34 await interaction.reply({
35 embeds: [
36 new MessageEmbed()
37 .setColor('#f14a60')
38 .setDescription(":x: You don't have permission to run this command.")
39 ],
40 ephemeral: true
41 });
42
43 return;
44 }
45
46 const options = {
47 cmdName: commandName,
48 options: interaction.options,
49 isInteraction: true
50 } as InteractionOptions;
51
52 await command.execute(client, interaction, options);
53 (global as any).lastCommand = commandName;
54 }
55 }
56 else if (interaction.isAutocomplete()) {
57 await client.setMessage(interaction);
58
59 const { commandName } = interaction;
60
61 const command = await client.commands.get(commandName);
62
63 if (command && command.supportsInteractions) {
64 const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
65
66 if (!allowed) {
67 return;
68 }
69
70 if (!(await command.perms(client, interaction))) {
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 (global as any).lastCommand = commandName;
84 }
85 }
86 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 if (!(await command.perms(client, interaction))) {
102 return;
103 }
104
105 await command.default(client, interaction);
106 }
107 }
108 }
109 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26