/[sudobot]/branches/3.x/src/events/interaction/InteractionCreateEvent.ts
ViewVC logotype

Annotation of /branches/3.x/src/events/interaction/InteractionCreateEvent.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 577 - (hide annotations)
Mon Jul 29 18:52:37 2024 UTC (8 months ago) by rakinar2
File MIME type: application/typescript
File size: 4644 byte(s)
chore: add old version archive branches (2.x to 9.x-dev)
1 rakinar2 577 /**
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     import BaseEvent from '../../utils/structures/BaseEvent';
21     import { GuildMember, Interaction, MessageEmbed } from 'discord.js';
22     import DiscordClient from '../../client/Client';
23     import InteractionOptions from '../../types/InteractionOptions';
24     import AutoCompleteOptions from '../../types/AutoCompleteOptions';
25    
26     export default class InteractionCreateEvent extends BaseEvent {
27     constructor() {
28     super('interactionCreate');
29     }
30    
31     async run(client: DiscordClient, interaction: Interaction) {
32     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    
42     if (interaction.isCommand() || interaction.isContextMenu()) {
43     await client.setMessage(interaction);
44    
45     const { commandName } = interaction;
46    
47     const command = await client.commands.get(commandName);
48    
49     if (command && ((interaction.isCommand() && command.supportsInteractions) || (interaction.isContextMenu() && command.supportsContextMenu))) {
50     const allowed = await client.auth.verify(interaction.member! as GuildMember, command);
51    
52     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     const options = {
66     cmdName: commandName,
67     options: interaction.options,
68     isInteraction: true
69     } as InteractionOptions;
70    
71     await command.execute(client, interaction, options);
72     (global as any).lastCommand = commandName;
73     }
74     }
75     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     if (!(await command.perms(client, interaction))) {
90     return;
91     }
92    
93     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     (global as any).lastCommand = commandName;
103     }
104     }
105     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    
120     if (!(await command.perms(client, interaction))) {
121     return;
122     }
123    
124     await command.default(client, interaction);
125     }
126     }
127     }
128     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26