From a396779cd5b0c7bd6d8bb153c8a99be696a1bafa Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Sat, 4 Sep 2021 20:16:44 +0300 Subject: [PATCH] Add debug code for duplicate message saving --- .../MessageSaver/MessageSaverPlugin.ts | 3 +++ .../MessageSaver/events/SaveMessagesEvts.ts | 27 ++++++++++++------- backend/src/plugins/MessageSaver/types.ts | 1 + 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts index c8a603e1..724f0a15 100644 --- a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts +++ b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts @@ -21,6 +21,8 @@ const defaultOptions: PluginOptions = { ], }; +let debugId = 0; + export const MessageSaverPlugin = zeppelinGuildPlugin()({ name: "message_saver", showInDocs: false, @@ -45,5 +47,6 @@ export const MessageSaverPlugin = zeppelinGuildPlugin()( beforeLoad(pluginData) { const { state, guild } = pluginData; state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); + state.debugId = ++debugId; }, }); diff --git a/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts b/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts index 42a6b982..a2549820 100644 --- a/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts +++ b/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts @@ -1,14 +1,21 @@ import { Constants, Message, MessageType, Snowflake } from "discord.js"; import { messageSaverEvt } from "../types"; import { SECONDS } from "../../../utils"; +import moment from "moment-timezone"; -const recentlyCreatedMessages: Snowflake[] = []; +const recentlyCreatedMessages: Map = new Map(); const recentlyCreatedMessagesToKeep = 100; setInterval(() => { - const toDelete = recentlyCreatedMessages.length - recentlyCreatedMessagesToKeep; - if (toDelete > 0) { - recentlyCreatedMessages.splice(0, toDelete); + let toDelete = recentlyCreatedMessages.size - recentlyCreatedMessagesToKeep; + for (const key of recentlyCreatedMessages.keys()) { + if (toDelete === 0) { + break; + } + + recentlyCreatedMessages.delete(key); + + toDelete--; } }, 60 * SECONDS); @@ -34,13 +41,15 @@ export const MessageCreateEvt = messageSaverEvt({ return; } - if (recentlyCreatedMessages.includes(meta.args.message.id)) { - console.warn( - `Tried to save duplicate message from messageCreate event: ${meta.args.message.guildId} / ${meta.args.message.channelId} / ${meta.args.message.id}`, - ); + // FIXME: Remove debug code + if (recentlyCreatedMessages.has(meta.args.message.id)) { + const context = `${meta.pluginData.state.debugId} / ${meta.args.message.guildId} / ${meta.args.message.channelId} / ${meta.args.message.id}`; + const timestamp = moment(recentlyCreatedMessages.get(meta.args.message.id)!).format("HH:mm:ss.SSS"); + // tslint:disable-next-line:no-console + console.warn(`Tried to save duplicate message from messageCreate event: ${context} / saved at: ${timestamp}`); return; } - recentlyCreatedMessages.push(meta.args.message.id); + recentlyCreatedMessages.set(meta.args.message.id, Date.now()); await meta.pluginData.state.savedMessages.createFromMsg(meta.args.message); }, diff --git a/backend/src/plugins/MessageSaver/types.ts b/backend/src/plugins/MessageSaver/types.ts index 28495da3..694a0b0a 100644 --- a/backend/src/plugins/MessageSaver/types.ts +++ b/backend/src/plugins/MessageSaver/types.ts @@ -12,6 +12,7 @@ export interface MessageSaverPluginType extends BasePluginType { config: TConfigSchema; state: { savedMessages: GuildSavedMessages; + debugId: number; }; }