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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/src/events/interaction/InteractionCreate.ts revision 55 by rakin, Mon Jul 29 17:28:24 2024 UTC trunk/src/events/interaction/InteractionCreateEvent.ts revision 393 by rakin, Mon Jul 29 17:29:59 2024 UTC
# Line 1  Line 1 
1    /**
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';  import BaseEvent from '../../utils/structures/BaseEvent';
21  import { GuildMember, Interaction, Message, MessageEmbed } from 'discord.js';  import { GuildMember, Interaction, MessageEmbed } from 'discord.js';
22  import DiscordClient from '../../client/Client';  import DiscordClient from '../../client/Client';
 import CommandOptions from '../../types/CommandOptions';  
23  import InteractionOptions from '../../types/InteractionOptions';  import InteractionOptions from '../../types/InteractionOptions';
24    import AutoCompleteOptions from '../../types/AutoCompleteOptions';
25    
26  export default class InteractionCreateEvent extends BaseEvent {  export default class InteractionCreateEvent extends BaseEvent {
27      constructor() {      constructor() {
# Line 10  export default class InteractionCreateEv Line 29  export default class InteractionCreateEv
29      }      }
30    
31      async run(client: DiscordClient, interaction: Interaction) {      async run(client: DiscordClient, interaction: Interaction) {
32          if (interaction.isCommand()) {          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);              await client.setMessage(interaction);
44    
45              const { commandName } = interaction;              const { commandName } = interaction;
46    
47              const command = await client.commands.get(commandName);              const command = await client.commands.get(commandName);
             const allowed = await client.auth.verify(interaction.member! as GuildMember, commandName);  
48    
49              if (command && command.supportsInteractions) {              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) {                  if (!allowed) {
53                      await interaction.reply({                      await interaction.reply({
54                          embeds: [                          embeds: [
# Line 38  export default class InteractionCreateEv Line 68  export default class InteractionCreateEv
68                      isInteraction: true                      isInteraction: true
69                  } as InteractionOptions;                  } as InteractionOptions;
70    
71                  if (!await client.cooldown.start(interaction, options))                  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;                      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.run(client, interaction, options);                  await command.default(client, interaction);
125              }              }
126          }          }
127      }      }

Legend:
Removed from v.55  
changed lines
  Added in v.393

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26