From d3ed6405db75af67527a246f82859e03e784632f Mon Sep 17 00:00:00 2001 From: Isaac Date: Tue, 26 Oct 2021 16:58:06 +0100 Subject: [PATCH] fix: #250 by deferring then editing the reply --- src/commands/add.js | 8 ++++---- src/commands/blacklist.js | 12 ++++++------ src/commands/close.js | 16 ++++++++-------- src/commands/help.js | 2 +- src/commands/new.js | 12 ++++++------ src/commands/panel.js | 6 +++--- src/commands/remove.js | 8 ++++---- src/commands/settings.js | 14 +++++++------- src/commands/stats.js | 2 +- src/commands/survey.js | 4 ++-- src/commands/tag.js | 4 ++-- src/commands/topic.js | 4 ++-- src/listeners/interactionCreate.js | 20 +++++++++++--------- src/modules/commands/manager.js | 8 ++++---- 14 files changed, 61 insertions(+), 59 deletions(-) diff --git a/src/commands/add.js b/src/commands/add.js index b6afbd0..6060af7 100644 --- a/src/commands/add.js +++ b/src/commands/add.js @@ -41,7 +41,7 @@ module.exports = class AddCommand extends Command { const t_row = await this.client.tickets.resolve(channel.id, interaction.guild.id); if (!t_row) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -56,7 +56,7 @@ module.exports = class AddCommand extends Command { const member = interaction.options.getMember(default_i18n('commands.add.options.member.name')); if (!member) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -69,7 +69,7 @@ module.exports = class AddCommand extends Command { } if (t_row.creator !== interaction.member.id && !await this.client.utils.isStaff(interaction.member)) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -81,7 +81,7 @@ module.exports = class AddCommand extends Command { }); } - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) diff --git a/src/commands/blacklist.js b/src/commands/blacklist.js index 29c7997..1aff88f 100644 --- a/src/commands/blacklist.js +++ b/src/commands/blacklist.js @@ -65,7 +65,7 @@ module.exports = class BlacklistCommand extends Command { const type = member_or_role instanceof Role ? 'role' : 'member'; if (type === 'member' && await this.client.utils.isStaff(member_or_role)) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -78,7 +78,7 @@ module.exports = class BlacklistCommand extends Command { } blacklist[type + 's'].push(member_or_role.id); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -97,7 +97,7 @@ module.exports = class BlacklistCommand extends Command { const index = blacklist[type + 's'].findIndex(element => element === member_or_role.id); if (index === -1) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -110,7 +110,7 @@ module.exports = class BlacklistCommand extends Command { } blacklist[type + 's'].splice(index, 1); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -125,7 +125,7 @@ module.exports = class BlacklistCommand extends Command { } case default_i18n('commands.blacklist.options.show.name'): { if (blacklist.members.length === 0 && blacklist.roles.length === 0) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) @@ -138,7 +138,7 @@ module.exports = class BlacklistCommand extends Command { } else { const members = blacklist.members.map(id => `**·** <@${id}>`); const roles = blacklist.roles.map(id => `**·** <@&${id}>`); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) diff --git a/src/commands/close.js b/src/commands/close.js index a026cce..97a78bf 100644 --- a/src/commands/close.js +++ b/src/commands/close.js @@ -53,7 +53,7 @@ module.exports = class CloseCommand extends Command { if (time) { if (!await this.client.utils.isStaff(interaction.member)) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -69,7 +69,7 @@ module.exports = class CloseCommand extends Command { try { period = ms(time); } catch { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -89,7 +89,7 @@ module.exports = class CloseCommand extends Command { }); if (tickets.count === 0) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -100,7 +100,7 @@ module.exports = class CloseCommand extends Command { ephemeral: true }); } else { - await interaction.reply({ + await interaction.editReply({ components: [ new MessageActionRow() .addComponents( @@ -193,7 +193,7 @@ module.exports = class CloseCommand extends Command { if (ticket) { t_row = await this.client.tickets.resolve(ticket, interaction.guild.id); if (!t_row) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -207,7 +207,7 @@ module.exports = class CloseCommand extends Command { } else { t_row = await this.client.db.models.Ticket.findOne({ where: { id: interaction.channel.id } }); if (!t_row) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -221,7 +221,7 @@ module.exports = class CloseCommand extends Command { } if (t_row.creator !== interaction.member.id && !await this.client.utils.isStaff(interaction.member)) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -233,7 +233,7 @@ module.exports = class CloseCommand extends Command { }); } - await interaction.reply({ + await interaction.editReply({ components: [ new MessageActionRow() .addComponents( diff --git a/src/commands/help.js b/src/commands/help.js index eed7c8a..6aae2b5 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -34,7 +34,7 @@ module.exports = class HelpCommand extends Command { : command.description; return `**\`/${command.name}\` ·** ${description}`; }); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) diff --git a/src/commands/new.js b/src/commands/new.js index 8bec13e..9fde687 100644 --- a/src/commands/new.js +++ b/src/commands/new.js @@ -58,7 +58,7 @@ module.exports = class NewCommand extends Command { ], ephemeral: true }; - await i ? i.editReply(response) : interaction.reply(response); + await i ? i.editReply(response) : interaction.editReply(response); } else { const list = tickets.rows.map(row => { if (row.topic) { @@ -81,7 +81,7 @@ module.exports = class NewCommand extends Command { ], ephemeral: true }; - await i ? i.editReply(response) : interaction.reply(response); + await i ? i.editReply(response) : interaction.editReply(response); } } else { try { @@ -98,7 +98,7 @@ module.exports = class NewCommand extends Command { ], ephemeral: true }; - await i ? i.editReply(response) : interaction.reply(response); + await i ? i.editReply(response) : interaction.editReply(response); } catch (error) { const response = { components: [], @@ -112,7 +112,7 @@ module.exports = class NewCommand extends Command { ], ephemeral: true }; - await i ? i.editReply(response) : interaction.reply(response); + await i ? i.editReply(response) : interaction.editReply(response); } } }; @@ -120,7 +120,7 @@ module.exports = class NewCommand extends Command { const categories = await this.client.db.models.Category.findAndCountAll({ where: { guild: interaction.guild.id } }); if (categories.count === 0) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -133,7 +133,7 @@ module.exports = class NewCommand extends Command { } else if (categories.count === 1) { create(categories.rows[0]); // skip the category selection } else { - await interaction.reply({ + await interaction.editReply({ components: [ new MessageActionRow() .addComponents( diff --git a/src/commands/panel.js b/src/commands/panel.js index 03ef9ae..0be0198 100644 --- a/src/commands/panel.js +++ b/src/commands/panel.js @@ -75,7 +75,7 @@ module.exports = class PanelCommand extends Command { const thumbnail = interaction.options.getString(default_i18n('commands.panel.options.thumbnail.name')); if (just_type && categories.length > 1) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -98,7 +98,7 @@ module.exports = class PanelCommand extends Command { }); if (invalid_category) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -196,7 +196,7 @@ module.exports = class PanelCommand extends Command { } } - interaction.reply({ + interaction.editReply({ content: `✅ ${panel_channel}`, ephemeral: true }); diff --git a/src/commands/remove.js b/src/commands/remove.js index 85de1da..1660395 100644 --- a/src/commands/remove.js +++ b/src/commands/remove.js @@ -41,7 +41,7 @@ module.exports = class RemoveCommand extends Command { const t_row = await this.client.tickets.resolve(channel.id, interaction.guild.id); if (!t_row) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -56,7 +56,7 @@ module.exports = class RemoveCommand extends Command { const member = interaction.options.getMember(default_i18n('commands.remove.options.member.name')); if (!member) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -69,7 +69,7 @@ module.exports = class RemoveCommand extends Command { } if (t_row.creator !== interaction.user.id && !await this.client.utils.isStaff(interaction.member)) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -81,7 +81,7 @@ module.exports = class RemoveCommand extends Command { }); } - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) diff --git a/src/commands/settings.js b/src/commands/settings.js index 4959b57..d4cdd47 100644 --- a/src/commands/settings.js +++ b/src/commands/settings.js @@ -233,7 +233,7 @@ module.exports = class SettingsCommand extends Command { roles }); await this.client.commands.updatePermissions(interaction.guild); - interaction.reply({ + interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -249,7 +249,7 @@ module.exports = class SettingsCommand extends Command { const channel = this.client.channels.cache.get(interaction.options.getString(default_i18n('commands.settings.options.categories.options.delete.options.id.name'))); if (channel) channel.delete(); await category.destroy(); - interaction.reply({ + interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -258,7 +258,7 @@ module.exports = class SettingsCommand extends Command { ephemeral: true }); } else { - interaction.reply({ + interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -272,7 +272,7 @@ module.exports = class SettingsCommand extends Command { case default_i18n('commands.settings.options.categories.options.edit.name'): { const category = await this.client.db.models.Category.findOne({ where: { id: interaction.options.getString(default_i18n('commands.settings.options.categories.options.delete.options.id.name')) } }); if (!category) { - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -304,7 +304,7 @@ module.exports = class SettingsCommand extends Command { if (roles !== null) category.set('roles', roles.replace(/\s/g, '').split(',')); if (survey !== null) category.set('survey', survey); await category.save(); - interaction.reply({ + interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -316,7 +316,7 @@ module.exports = class SettingsCommand extends Command { } case default_i18n('commands.settings.options.categories.options.list.name'): { const categories = await this.client.db.models.Category.findAll({ where: { guild: interaction.guild.id } }); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) @@ -343,7 +343,7 @@ module.exports = class SettingsCommand extends Command { if (log_messages !== null) settings.set('log_messages', log_messages); if (success_colour !== null) settings.set('success_colour', success_colour.toUpperCase()); await settings.save(); - interaction.reply({ + interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) diff --git a/src/commands/stats.js b/src/commands/stats.js index 79a832d..a759b73 100644 --- a/src/commands/stats.js +++ b/src/commands/stats.js @@ -90,6 +90,6 @@ module.exports = class StatsCommand extends Command { embeds.push(global_embed); } - await interaction.reply({ embeds }); + await interaction.editReply({ embeds }); } }; diff --git a/src/commands/survey.js b/src/commands/survey.js index 86be0a7..3ca0956 100644 --- a/src/commands/survey.js +++ b/src/commands/survey.js @@ -90,7 +90,7 @@ module.exports = class SurveyCommand extends Command { `${survey.name}.html` ); - return await interaction.reply({ + return await interaction.editReply({ ephemeral: true, files: [attachment] }); @@ -98,7 +98,7 @@ module.exports = class SurveyCommand extends Command { const surveys = await this.client.db.models.Survey.findAll({ where: { guild: interaction.guild.id } }); const list = surveys.map(s => `❯ **\`${s.name}\`**`); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) diff --git a/src/commands/tag.js b/src/commands/tag.js index 7bbf00b..6fbec73 100644 --- a/src/commands/tag.js +++ b/src/commands/tag.js @@ -46,7 +46,7 @@ module.exports = class TagCommand extends Command { const arg = args.find(arg => arg.name === $1); return arg ? arg.value : $; }); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) @@ -56,7 +56,7 @@ module.exports = class TagCommand extends Command { }); } catch { const list = Object.keys(settings.tags).map(t => `❯ **\`${t}\`**`); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) diff --git a/src/commands/topic.js b/src/commands/topic.js index 7fa6139..e04115f 100644 --- a/src/commands/topic.js +++ b/src/commands/topic.js @@ -36,7 +36,7 @@ module.exports = class TopicCommand extends Command { const t_row = await this.client.db.models.Ticket.findOne({ where: { id: interaction.channel.id } }); if (!t_row) { - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -70,7 +70,7 @@ module.exports = class TopicCommand extends Command { ] }); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) diff --git a/src/listeners/interactionCreate.js b/src/listeners/interactionCreate.js index c1449c3..a09e737 100644 --- a/src/listeners/interactionCreate.js +++ b/src/listeners/interactionCreate.js @@ -17,13 +17,15 @@ module.exports = class InteractionCreateEventListener extends EventListener { async execute(interaction) { this.client.log.debug(interaction); + await interaction.deferReply(); + const settings = await this.client.utils.getSettings(interaction.guild.id); const i18n = this.client.i18n.getLocale(settings.locale); const blacklisted = settings.blacklist.members.includes[interaction.user.id] || interaction.member?.roles.cache?.some(role => settings.blacklist.roles.includes(role)); if (blacklisted) { - return interaction.reply({ + return interaction.editReply({ content: i18n('blacklisted'), ephemeral: true }); @@ -34,7 +36,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { if (!cat_row) { this.client.log.warn('Could not find a category with the ID given by a panel interaction'); - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -55,7 +57,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { if (tickets.count >= cat_row.max_per_member) { if (cat_row.max_per_member === 1) { - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -76,7 +78,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { return `<#${row.id}>`; } }); - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -91,7 +93,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { } else { try { const t_row = await this.client.tickets.create(interaction.guild.id, interaction.user.id, id); - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.success_colour) @@ -104,7 +106,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { }); } catch (error) { this.client.log.error(error); - return interaction.reply({ + return interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -141,7 +143,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { this.client.log.info(`${interaction.user.tag} has claimed "${interaction.channel.name}" in "${interaction.guild.name}"`); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) @@ -191,7 +193,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { this.client.log.info(`${interaction.user.tag} has released "${interaction.channel.name}" in "${interaction.guild.name}"`); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.colour) @@ -228,7 +230,7 @@ module.exports = class InteractionCreateEventListener extends EventListener { } else if (interaction.customId.startsWith('ticket.close')) { // handle ticket close button const t_row = await this.client.db.models.Ticket.findOne({ where: { id: interaction.channel.id } }); - await interaction.reply({ + await interaction.editReply({ components: [ new MessageActionRow() .addComponents( diff --git a/src/modules/commands/manager.js b/src/modules/commands/manager.js index 9bb637f..125141a 100644 --- a/src/modules/commands/manager.js +++ b/src/modules/commands/manager.js @@ -165,7 +165,7 @@ module.exports = class CommandManager { if (!bot_permissions.has(required_bot_permissions)) { const perms = required_bot_permissions.map(p => `\`${p}\``).join(', '); if (bot_permissions.has('EMBED_LINKS')) { - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor('ORANGE') @@ -174,7 +174,7 @@ module.exports = class CommandManager { ] }); } else { - await interaction.reply({ content: i18n('bot.missing_permissions.description', perms) }); + await interaction.editReply({ content: i18n('bot.missing_permissions.description', perms) }); } return; } @@ -182,7 +182,7 @@ module.exports = class CommandManager { const missing_permissions = command.permissions instanceof Array && !interaction.member.permissions.has(command.permissions); if (missing_permissions) { const perms = command.permissions.map(p => `\`${p}\``).join(', '); - return await interaction.reply({ + return await interaction.editReply({ embeds: [ new MessageEmbed() .setColor(settings.error_colour) @@ -199,7 +199,7 @@ module.exports = class CommandManager { } catch (e) { this.client.log.warn(`An error occurred whilst executing the ${command.name} command`); this.client.log.error(e); - await interaction.reply({ + await interaction.editReply({ embeds: [ new MessageEmbed() .setColor('ORANGE')