/[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 393 - (hide annotations)
Mon Jul 29 17:29:59 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 4644 byte(s)
style: add license comments (#77)

* style: add license commits

* fix: shebang errors
1 rakin 393 /**
2     * This file is part of SudoBot.
3     *
4     * Copyright (C) 2021-2022 OSN Inc.
5     *
6     * SudoBot is free software; you can redistribute it and/or modify it
7     * under the terms of the GNU Affero General Public License as published by
8     * the Free Software Foundation, either version 3 of the License, or
9     * (at your option) any later version.
10     *
11     * SudoBot is distributed in the hope that it will be useful, but
12     * WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU Affero General Public License for more details.
15     *
16     * You should have received a copy of the GNU Affero General Public License
17     * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18     */
19    
20 rakin 51 import BaseEvent from '../../utils/structures/BaseEvent';
21 rakin 344 import { GuildMember, Interaction, MessageEmbed } from 'discord.js';
22 rakin 51 import DiscordClient from '../../client/Client';
23     import InteractionOptions from '../../types/InteractionOptions';
24 rakin 64 import AutoCompleteOptions from '../../types/AutoCompleteOptions';
25 rakin 51
26     export default class InteractionCreateEvent extends BaseEvent {
27     constructor() {
28     super('interactionCreate');
29     }
30    
31     async run(client: DiscordClient, interaction: Interaction) {
32 rakin 67 if (!interaction.guild || !interaction.channel || interaction.channel.type === 'DM') {
33     if (interaction.isRepliable())
34     await interaction.reply({
35     content: 'You cannot use this bot on DMs.',
36     ephemeral: true
37     });
38    
39     return;
40     }
41 rakin 81
42 rakin 125 if (interaction.isCommand() || interaction.isContextMenu()) {
43 rakin 51 await client.setMessage(interaction);
44    
45     const { commandName } = interaction;
46    
47     const command = await client.commands.get(commandName);
48    
49 rakin 125 if (command && ((interaction.isCommand() && command.supportsInteractions) || (interaction.isContextMenu() && command.supportsContextMenu))) {
50 rakin 58 const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
51    
52 rakin 51 if (!allowed) {
53     await interaction.reply({
54     embeds: [
55     new MessageEmbed()
56     .setColor('#f14a60')
57     .setDescription(":x: You don't have permission to run this command.")
58     ],
59     ephemeral: true
60     });
61    
62     return;
63     }
64    
65 rakin 55 const options = {
66 rakin 51 cmdName: commandName,
67     options: interaction.options,
68     isInteraction: true
69 rakin 55 } as InteractionOptions;
70    
71 rakin 207 await command.execute(client, interaction, options);
72 rakin 81 (global as any).lastCommand = commandName;
73 rakin 51 }
74     }
75 rakin 64 else if (interaction.isAutocomplete()) {
76     await client.setMessage(interaction);
77    
78     const { commandName } = interaction;
79    
80     const command = await client.commands.get(commandName);
81    
82     if (command && command.supportsInteractions) {
83     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
84    
85     if (!allowed) {
86     return;
87     }
88    
89 rakin 207 if (!(await command.perms(client, interaction))) {
90     return;
91     }
92    
93 rakin 64 const options = {
94     cmdName: commandName,
95     options: interaction.options,
96     isInteraction: true,
97     optionName: interaction.options.getFocused(true).name,
98     query: interaction.options.getFocused(true).value.toString()
99     } as AutoCompleteOptions;
100    
101     await command.autoComplete(client, interaction, options);
102 rakin 81 (global as any).lastCommand = commandName;
103 rakin 64 }
104     }
105 rakin 81 else {
106     if (!(global as any).commandName)
107     return;
108    
109     await client.setMessage(interaction);
110    
111     const command = await client.commands.get((global as any).commandName);
112    
113     if (command && command.supportsInteractions) {
114     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
115    
116     if (!allowed) {
117     return;
118     }
119 rakin 207
120     if (!(await command.perms(client, interaction))) {
121     return;
122     }
123 rakin 81
124     await command.default(client, interaction);
125     }
126     }
127 rakin 51 }
128     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26