From 8da47e53e6a2c67a56c8505ee090fb0a67d727ed Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Thu, 19 Aug 2021 00:49:06 +0300 Subject: [PATCH] Ugly workaround/hotfix for message fetching --- backend/src/Queue.ts | 8 ++++---- backend/src/plugins/MessageSaver/saveMessagesToDB.ts | 3 ++- .../ReactionRoles/commands/ClearReactionRolesCmd.ts | 3 ++- .../ReactionRoles/commands/InitReactionRolesCmd.ts | 3 ++- .../util/applyReactionRoleReactionsToMessage.ts | 3 ++- backend/src/plugins/Slowmode/util/onMessageCreate.ts | 3 ++- .../Starboard/events/StarboardReactionAddEvt.ts | 7 +++---- backend/src/plugins/Utility/commands/SourceCmd.ts | 3 ++- backend/src/utils/hotfixMessageFetch.ts | 12 ++++++++++++ 9 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 backend/src/utils/hotfixMessageFetch.ts diff --git a/backend/src/Queue.ts b/backend/src/Queue.ts index b8445f12..ddedc56a 100644 --- a/backend/src/Queue.ts +++ b/backend/src/Queue.ts @@ -28,11 +28,11 @@ export class Queue { return this.queue.length + (this.running ? 1 : 0); } - public add(fn: TQueueFunction): Promise { - const promise = new Promise(resolve => { + public add(fn: TQueueFunction): Promise { + const promise = new Promise(resolve => { this.queue.push(async () => { - await fn(); - resolve(); + const result = await fn(); + resolve(result); }); if (!this.running) this.next(); diff --git a/backend/src/plugins/MessageSaver/saveMessagesToDB.ts b/backend/src/plugins/MessageSaver/saveMessagesToDB.ts index db7e9b9d..da62188d 100644 --- a/backend/src/plugins/MessageSaver/saveMessagesToDB.ts +++ b/backend/src/plugins/MessageSaver/saveMessagesToDB.ts @@ -1,6 +1,7 @@ import { Message, Snowflake, TextChannel, ThreadChannel } from "discord.js"; import { GuildPluginData } from "knub"; import { MessageSaverPluginType } from "./types"; +import { hotfixMessageFetch } from "../../utils/hotfixMessageFetch"; export async function saveMessagesToDB( pluginData: GuildPluginData, @@ -15,7 +16,7 @@ export async function saveMessagesToDB( let thisMsg: Message; try { - thisMsg = await channel.messages.fetch(id as Snowflake); + thisMsg = await hotfixMessageFetch(channel, id as Snowflake); if (!thisMsg) { failed.push(id); diff --git a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts index 229b8fbe..35ddfed7 100644 --- a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts @@ -3,6 +3,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { isDiscordAPIError } from "../../../utils"; import { reactionRolesCmd } from "../types"; +import { hotfixMessageFetch } from "../../../utils/hotfixMessageFetch"; export const ClearReactionRolesCmd = reactionRolesCmd({ trigger: "reaction_roles clear", @@ -23,7 +24,7 @@ export const ClearReactionRolesCmd = reactionRolesCmd({ let targetMessage: Message; try { - targetMessage = await args.message.channel.messages.fetch(args.message.messageId as Snowflake); + targetMessage = await hotfixMessageFetch(args.message.channel, args.message.messageId); } catch (err) { if (isDiscordAPIError(err) && err.code === 50001) { sendErrorMessage(pluginData, msg.channel, "Missing access to the specified message"); diff --git a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts index dba3db59..e3a126fe 100644 --- a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts @@ -5,6 +5,7 @@ import { canUseEmoji, isDiscordAPIError, isValidEmoji, noop, trimPluginDescripti import { canReadChannel } from "../../../utils/canReadChannel"; import { reactionRolesCmd, TReactionRolePair } from "../types"; import { applyReactionRoleReactionsToMessage } from "../util/applyReactionRoleReactionsToMessage"; +import { hotfixMessageFetch } from "../../../utils/hotfixMessageFetch"; const CLEAR_ROLES_EMOJI = "❌"; @@ -40,7 +41,7 @@ export const InitReactionRolesCmd = reactionRolesCmd({ let targetMessage; try { - targetMessage = await args.message.channel.messages.fetch(args.message.messageId as Snowflake).catch(noop); + targetMessage = await hotfixMessageFetch(args.message.channel, args.message.messageId); } catch (e) { if (isDiscordAPIError(e)) { sendErrorMessage(pluginData, msg.channel, `Error ${e.code} while getting message: ${e.message}`); diff --git a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts index 327ac207..1ed9c17b 100644 --- a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts +++ b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts @@ -5,6 +5,7 @@ import { LogType } from "../../../data/LogType"; import { isDiscordAPIError, sleep } from "../../../utils"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { ReactionRolesPluginType } from "../types"; +import { hotfixMessageFetch } from "../../../utils/hotfixMessageFetch"; const CLEAR_ROLES_EMOJI = "❌"; @@ -25,7 +26,7 @@ export async function applyReactionRoleReactionsToMessage( let targetMessage; try { - targetMessage = await channel.messages.fetch(messageId as Snowflake); + targetMessage = await hotfixMessageFetch(channel, messageId as Snowflake); } catch (e) { if (isDiscordAPIError(e)) { if (e.code === 10008) { diff --git a/backend/src/plugins/Slowmode/util/onMessageCreate.ts b/backend/src/plugins/Slowmode/util/onMessageCreate.ts index 78f8c92b..2ad8968f 100644 --- a/backend/src/plugins/Slowmode/util/onMessageCreate.ts +++ b/backend/src/plugins/Slowmode/util/onMessageCreate.ts @@ -11,6 +11,7 @@ import { LogsPlugin } from "../../Logs/LogsPlugin"; import { BOT_SLOWMODE_PERMISSIONS } from "../requiredPermissions"; import { SlowmodePluginType } from "../types"; import { applyBotSlowmodeToUserId } from "./applyBotSlowmodeToUserId"; +import { hotfixMessageFetch } from "../../../utils/hotfixMessageFetch"; export async function onMessageCreate(pluginData: GuildPluginData, msg: SavedMessage) { if (msg.is_bot) return; @@ -49,7 +50,7 @@ export async function onMessageCreate(pluginData: GuildPluginData null); + const message = await hotfixMessageFetch(args.message.channel, args.message.messageId); if (!message) { sendErrorMessage(pluginData, cmdMessage.channel, "Unknown message"); return; diff --git a/backend/src/utils/hotfixMessageFetch.ts b/backend/src/utils/hotfixMessageFetch.ts new file mode 100644 index 00000000..b0859fd6 --- /dev/null +++ b/backend/src/utils/hotfixMessageFetch.ts @@ -0,0 +1,12 @@ +import { GuildChannel, Message, TextChannel, ThreadChannel } from "discord.js"; +import { Queue } from "../Queue"; +import { sleep } from "../utils"; + +const queue = new Queue(); + +export function hotfixMessageFetch(channel: TextChannel | ThreadChannel, messageId: string): Promise { + return queue.add(async () => { + await sleep(3000); + return channel.messages.fetch(messageId); + }); +}