From 31e5cf7fc5c7cd0c6ca3b1f3b9410a88b95d8273 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 16 Apr 2025 20:33:09 +0700 Subject: [PATCH] fix(bots/discord): replace use of deprecated `options.ephemeral` in replies --- bots/discord/src/commands/admin/eval.ts | 4 ++-- bots/discord/src/commands/admin/reload.ts | 3 ++- bots/discord/src/commands/admin/stop.ts | 3 ++- bots/discord/src/commands/fun/coinflip.ts | 3 ++- bots/discord/src/commands/fun/reply.ts | 4 ++-- bots/discord/src/commands/moderation/cure.ts | 3 ++- bots/discord/src/commands/support/train/chat.ts | 4 ++-- .../src/commands/support/train/context-menu.ts | 4 ++-- .../discord/interactionCreate/chatCommand.ts | 3 ++- .../interactionCreate/contextMenuCommand.ts | 3 ++- .../interactionCreate/correctResponse.ts | 11 ++++++++--- .../discord/interactionCreate/trainMessage.ts | 9 ++++----- bun.lock | 9 +++++---- package.json | 3 ++- patches/discord.js@14.18.0.patch | 17 +++++++++++++++++ 15 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 patches/discord.js@14.18.0.patch diff --git a/bots/discord/src/commands/admin/eval.ts b/bots/discord/src/commands/admin/eval.ts index 9205a63..64e1019 100644 --- a/bots/discord/src/commands/admin/eval.ts +++ b/bots/discord/src/commands/admin/eval.ts @@ -2,7 +2,7 @@ import { unlinkSync, writeFileSync } from 'fs' import { join } from 'path' import { inspect } from 'util' import { createContext, runInContext } from 'vm' -import { ApplicationCommandOptionType } from 'discord.js' +import { ApplicationCommandOptionType, MessageFlags } from 'discord.js' import { AdminCommand } from '$/classes/Command' import { createSuccessEmbed } from '$/utils/discord/embeds' @@ -85,8 +85,8 @@ export default new AdminCommand({ }) await trigger.reply({ - ephemeral: true, embeds: [embed], + flags: MessageFlags.Ephemeral, files, }) diff --git a/bots/discord/src/commands/admin/reload.ts b/bots/discord/src/commands/admin/reload.ts index d7e66e9..9093613 100644 --- a/bots/discord/src/commands/admin/reload.ts +++ b/bots/discord/src/commands/admin/reload.ts @@ -1,4 +1,5 @@ import { AdminCommand } from '$/classes/Command' +import { type CommandInteraction, MessageFlags } from 'discord.js' export default new AdminCommand({ name: 'reload', @@ -10,7 +11,7 @@ export default new AdminCommand({ logger.debug('Invalidating previous config...') context.config.invalidate() - if ('deferReply' in trigger) await trigger.deferReply({ ephemeral: true }) + if ((trigger as CommandInteraction).deferReply) await trigger.deferReply({ flags: MessageFlags.Ephemeral }) logger.info('Reinitializing API client to reload configuration...') await api.client.ws.setOptions( diff --git a/bots/discord/src/commands/admin/stop.ts b/bots/discord/src/commands/admin/stop.ts index e4dd6c7..f67dcd2 100644 --- a/bots/discord/src/commands/admin/stop.ts +++ b/bots/discord/src/commands/admin/stop.ts @@ -1,4 +1,5 @@ import { AdminCommand } from '$/classes/Command' +import { MessageFlags } from 'discord.js' export default new AdminCommand({ name: 'stop', @@ -9,7 +10,7 @@ export default new AdminCommand({ logger.fatal('Stopping bot...') trigger.reply({ content: 'Stopping... (I will go offline once done)', - ephemeral: true, + flags: MessageFlags.Ephemeral, }) if (!api.client.disconnected) api.client.disconnect() diff --git a/bots/discord/src/commands/fun/coinflip.ts b/bots/discord/src/commands/fun/coinflip.ts index ec0b341..e112299 100644 --- a/bots/discord/src/commands/fun/coinflip.ts +++ b/bots/discord/src/commands/fun/coinflip.ts @@ -1,4 +1,4 @@ -import { EmbedBuilder } from 'discord.js' +import { EmbedBuilder, MessageFlags } from 'discord.js' import Command from '$/classes/Command' import { applyCommonEmbedStyles } from '$/utils/discord/embeds' @@ -18,6 +18,7 @@ export default new Command({ const reply = await trigger .reply({ embeds: [embed.toJSON()], + flags: MessageFlags.Ephemeral, }) .then(it => it.fetch()) diff --git a/bots/discord/src/commands/fun/reply.ts b/bots/discord/src/commands/fun/reply.ts index 69a3def..1acf341 100644 --- a/bots/discord/src/commands/fun/reply.ts +++ b/bots/discord/src/commands/fun/reply.ts @@ -1,5 +1,5 @@ import CommandError, { CommandErrorType } from '$/classes/CommandError' -import { ApplicationCommandOptionType, Message } from 'discord.js' +import { ApplicationCommandOptionType, Message, MessageFlags } from 'discord.js' import { ModerationCommand } from '../../classes/Command' export default new ModerationCommand({ @@ -40,7 +40,7 @@ export default new ModerationCommand({ await trigger.reply({ content: 'OK!', - ephemeral: true, + flags: MessageFlags.Ephemeral, }) }, }) diff --git a/bots/discord/src/commands/moderation/cure.ts b/bots/discord/src/commands/moderation/cure.ts index 15b144e..5534be6 100644 --- a/bots/discord/src/commands/moderation/cure.ts +++ b/bots/discord/src/commands/moderation/cure.ts @@ -1,6 +1,7 @@ import { ModerationCommand } from '$/classes/Command' import { createSuccessEmbed } from '$/utils/discord/embeds' import { cureNickname } from '$/utils/discord/moderation' +import { MessageFlags } from 'discord.js' export default new ModerationCommand({ name: 'cure', @@ -18,7 +19,7 @@ export default new ModerationCommand({ await cureNickname(member) await interaction.reply({ embeds: [createSuccessEmbed(null, `Cured nickname for ${member.toString()}`)], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) }, }) diff --git a/bots/discord/src/commands/support/train/chat.ts b/bots/discord/src/commands/support/train/chat.ts index 45ae34c..4644ad6 100644 --- a/bots/discord/src/commands/support/train/chat.ts +++ b/bots/discord/src/commands/support/train/chat.ts @@ -2,7 +2,7 @@ import Command from '$/classes/Command' import CommandError, { CommandErrorType } from '$/classes/CommandError' import { createSuccessEmbed } from '$/utils/discord/embeds' import type { ConfigMessageScanResponseLabelConfig } from 'config.schema' -import type { FetchMessageOptions, MessageResolvable } from 'discord.js' +import { type FetchMessageOptions, MessageFlags, type MessageResolvable } from 'discord.js' import { config } from '../../../context' const msRcConfig = config.messageScan?.humanCorrections?.allow @@ -70,7 +70,7 @@ export default new Command({ `The provided message has been trained as \`${label}\`. Thank you for your contribution!`, ), ], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) }, }) diff --git a/bots/discord/src/commands/support/train/context-menu.ts b/bots/discord/src/commands/support/train/context-menu.ts index cb343cd..6315a1d 100644 --- a/bots/discord/src/commands/support/train/context-menu.ts +++ b/bots/discord/src/commands/support/train/context-menu.ts @@ -1,7 +1,7 @@ import Command from '$/classes/Command' import CommandError, { CommandErrorType } from '$/classes/CommandError' import type { ConfigMessageScanResponseLabelConfig } from 'config.schema' -import { type APIStringSelectComponent, ComponentType } from 'discord.js' +import { type APIStringSelectComponent, ComponentType, MessageFlags } from 'discord.js' import { config } from '../../../context' const msRcConfig = config.messageScan?.humanCorrections?.allow @@ -44,7 +44,7 @@ export default new Command({ type: ComponentType.ActionRow, }, ], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) }, }) diff --git a/bots/discord/src/events/discord/interactionCreate/chatCommand.ts b/bots/discord/src/events/discord/interactionCreate/chatCommand.ts index 3ae139e..89da0f5 100644 --- a/bots/discord/src/events/discord/interactionCreate/chatCommand.ts +++ b/bots/discord/src/events/discord/interactionCreate/chatCommand.ts @@ -1,6 +1,7 @@ import CommandError from '$/classes/CommandError' import { createStackTraceEmbed } from '$utils/discord/embeds' import { on, withContext } from '$utils/discord/events' +import { MessageFlags } from 'discord.js' withContext(on, 'interactionCreate', async (context, interaction) => { if (!interaction.isChatInputCommand()) return @@ -20,7 +21,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => { await interaction[interaction.replied ? 'followUp' : 'reply']({ embeds: [err instanceof CommandError ? err.toEmbed() : createStackTraceEmbed(err)], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) // 100 and up are user errors diff --git a/bots/discord/src/events/discord/interactionCreate/contextMenuCommand.ts b/bots/discord/src/events/discord/interactionCreate/contextMenuCommand.ts index e98aa56..359e16b 100644 --- a/bots/discord/src/events/discord/interactionCreate/contextMenuCommand.ts +++ b/bots/discord/src/events/discord/interactionCreate/contextMenuCommand.ts @@ -1,6 +1,7 @@ import CommandError from '$/classes/CommandError' import { createStackTraceEmbed } from '$utils/discord/embeds' import { on, withContext } from '$utils/discord/events' +import { MessageFlags } from 'discord.js' withContext(on, 'interactionCreate', async (context, interaction) => { if (!interaction.isContextMenuCommand()) return @@ -20,7 +21,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => { logger.error(`Error while executing command ${interaction.commandName}:`, err) await interaction[interaction.replied ? 'followUp' : 'reply']({ embeds: [err instanceof CommandError ? err.toEmbed() : createStackTraceEmbed(err)], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) } }) diff --git a/bots/discord/src/events/discord/interactionCreate/correctResponse.ts b/bots/discord/src/events/discord/interactionCreate/correctResponse.ts index 5792a23..2850d66 100644 --- a/bots/discord/src/events/discord/interactionCreate/correctResponse.ts +++ b/bots/discord/src/events/discord/interactionCreate/correctResponse.ts @@ -3,7 +3,12 @@ import { handleUserResponseCorrection } from '$/utils/discord/messageScan' import { createErrorEmbed, createStackTraceEmbed, createSuccessEmbed } from '$utils/discord/embeds' import { on, withContext } from '$utils/discord/events' -import type { ButtonInteraction, StringSelectMenuInteraction, TextBasedChannel } from 'discord.js' +import { + type ButtonInteraction, + MessageFlags, + type StringSelectMenuInteraction, + type TextBasedChannel, +} from 'discord.js' import { eq } from 'drizzle-orm' // No permission check required as it is already done when the user reacts to a bot response @@ -26,7 +31,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => { if (!response) return void (await interaction.reply({ content: "I don't recall having sent this response, so I cannot correct it.", - ephemeral: true, + flags: MessageFlags.Ephemeral, })) try { @@ -91,7 +96,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => { logger.error('Failed to handle correct response interaction:', e) await interaction.reply({ embeds: [createStackTraceEmbed(e)], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) } }) diff --git a/bots/discord/src/events/discord/interactionCreate/trainMessage.ts b/bots/discord/src/events/discord/interactionCreate/trainMessage.ts index 917ba10..0cfda78 100644 --- a/bots/discord/src/events/discord/interactionCreate/trainMessage.ts +++ b/bots/discord/src/events/discord/interactionCreate/trainMessage.ts @@ -1,7 +1,6 @@ import { createErrorEmbed, createStackTraceEmbed, createSuccessEmbed } from '$utils/discord/embeds' import { on, withContext } from '$utils/discord/events' - -import type { TextBasedChannel } from 'discord.js' +import { MessageFlags, type TextBasedChannel } from 'discord.js' withContext(on, 'interactionCreate', async (context, interaction) => { const { @@ -28,7 +27,7 @@ withContext(on, 'interactionCreate', async (context, interaction) => { 'Thank you for your contribution! Unfortunately, the message could not be found.', ), ], - ephemeral: true, + flags: MessageFlags.Ephemeral, })) const selectedLabel = interaction.values[0]! @@ -40,13 +39,13 @@ withContext(on, 'interactionCreate', async (context, interaction) => { `Thank you for your contribution! The selected message is being trained as \`${selectedLabel}\`. 🎉`, ), ], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) } catch (e) { logger.error('Failed to handle train message interaction:', e) await interaction.reply({ embeds: [createStackTraceEmbed(e)], - ephemeral: true, + flags: MessageFlags.Ephemeral, }) } }) diff --git a/bun.lock b/bun.lock index f09a920..78a3500 100644 --- a/bun.lock +++ b/bun.lock @@ -25,7 +25,7 @@ }, "apis/websocket": { "name": "@revanced/bot-websocket-api", - "version": "1.0.0-dev.10", + "version": "1.0.1", "dependencies": { "@revanced/bot-shared": "workspace:*", "@sapphire/async-queue": "^1.5.5", @@ -40,7 +40,7 @@ }, "bots/discord": { "name": "@revanced/discord-bot", - "version": "1.0.0-dev.36", + "version": "1.1.0", "dependencies": { "@discordjs/builders": "^1.10.1", "@discordjs/rest": "^2.4.3", @@ -74,8 +74,8 @@ "name": "@revanced/bot-shared", "version": "0.1.0", "dependencies": { - "bson": "^6.8.0", - "chalk": "^5.3.0", + "bson": "^6.10.3", + "chalk": "^5.4.1", "tracer": "^1.3.0", "valibot": "^0.30.0", }, @@ -88,6 +88,7 @@ "lefthook", ], "patchedDependencies": { + "discord.js@14.18.0": "patches/discord.js@14.18.0.patch", "@semantic-release/npm@12.0.1": "patches/@semantic-release%2Fnpm@12.0.1.patch", "drizzle-kit@0.22.8": "patches/drizzle-kit@0.22.8.patch", }, diff --git a/package.json b/package.json index 774699c..8c22be7 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "patchedDependencies": { "@semantic-release/npm@12.0.1": "patches/@semantic-release%2Fnpm@12.0.1.patch", "drizzle-kit@0.22.8": "patches/drizzle-kit@0.22.8.patch", - "decancer@3.2.4": "patches/decancer@3.2.4.patch" + "decancer@3.2.4": "patches/decancer@3.2.4.patch", + "discord.js@14.18.0": "patches/discord.js@14.18.0.patch" } } diff --git a/patches/discord.js@14.18.0.patch b/patches/discord.js@14.18.0.patch new file mode 100644 index 0000000..5071ec6 --- /dev/null +++ b/patches/discord.js@14.18.0.patch @@ -0,0 +1,17 @@ +# Make Message#reply work with { flags: MessageFlags.Ephemeral } in typings +# So our Command system doesn't break +diff --git a/typings/index.d.mts b/typings/index.d.mts +index 645b870..fa93158 100644 +--- a/typings/index.d.mts ++++ b/typings/index.d.mts +@@ -6764,8 +6764,8 @@ export interface MessageCreateOptions extends BaseMessageOptionsWithPoll { + stickers?: readonly StickerResolvable[]; + flags?: + | BitFieldResolvable< +- Extract, +- MessageFlags.SuppressEmbeds | MessageFlags.SuppressNotifications ++ Extract, ++ MessageFlags.SuppressEmbeds | MessageFlags.SuppressNotifications | MessageFlags.Ephemeral + > + | undefined; + } \ No newline at end of file