3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-15 05:41:51 +00:00

MessageSaver: use a queue, add more logging for duplicate IDs

This commit is contained in:
Dragory 2021-08-20 21:00:53 +03:00
parent ebe224885e
commit 7054412640
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
4 changed files with 37 additions and 6 deletions

View file

@ -213,7 +213,7 @@ export class GuildSavedMessages extends BaseGuildRepository {
await this.messages.insert(data);
} catch (e) {
if (e?.code === "ER_DUP_ENTRY") {
console.warn(`Tried to insert duplicate message ID: ${data.id}`);
console.trace(`Tried to insert duplicate message ID: ${data.id}`);
return;
}

View file

@ -5,6 +5,7 @@ import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB";
import { SavePinsToDBCmd } from "./commands/SavePinsToDB";
import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts";
import { ConfigSchema, MessageSaverPluginType } from "./types";
import { Queue } from "../../Queue";
const defaultOptions: PluginOptions<MessageSaverPluginType> = {
config: {
@ -44,5 +45,6 @@ export const MessageSaverPlugin = zeppelinGuildPlugin<MessageSaverPluginType>()(
beforeLoad(pluginData) {
const { state, guild } = pluginData;
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.queue = new Queue();
},
});

View file

@ -1,5 +1,16 @@
import { Message } from "discord.js";
import { Message, Snowflake } from "discord.js";
import { messageSaverEvt } from "../types";
import { SECONDS } from "../../../utils";
const recentlyCreatedMessages: Snowflake[] = [];
const recentlyCreatedMessagesToKeep = 100;
setInterval(() => {
const toDelete = recentlyCreatedMessages.length - recentlyCreatedMessagesToKeep;
if (toDelete > 0) {
recentlyCreatedMessages.splice(0, toDelete);
}
}, 60 * SECONDS);
export const MessageCreateEvt = messageSaverEvt({
event: "messageCreate",
@ -17,7 +28,17 @@ export const MessageCreateEvt = messageSaverEvt({
return;
}
await meta.pluginData.state.savedMessages.createFromMsg(meta.args.message);
meta.pluginData.state.queue.add(async () => {
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}`,
);
return;
}
recentlyCreatedMessages.push(meta.args.message.id);
await meta.pluginData.state.savedMessages.createFromMsg(meta.args.message);
});
},
});
@ -35,7 +56,9 @@ export const MessageUpdateEvt = messageSaverEvt({
return;
}
await meta.pluginData.state.savedMessages.saveEditFromMsg(meta.args.newMessage as Message);
meta.pluginData.state.queue.add(async () => {
await meta.pluginData.state.savedMessages.saveEditFromMsg(meta.args.newMessage as Message);
});
},
});
@ -50,7 +73,9 @@ export const MessageDeleteEvt = messageSaverEvt({
return;
}
await meta.pluginData.state.savedMessages.markAsDeleted(msg.id);
meta.pluginData.state.queue.add(async () => {
await meta.pluginData.state.savedMessages.markAsDeleted(msg.id);
});
},
});
@ -61,6 +86,8 @@ export const MessageDeleteBulkEvt = messageSaverEvt({
async listener(meta) {
const ids = meta.args.messages.map(m => m.id);
await meta.pluginData.state.savedMessages.markBulkAsDeleted(ids);
meta.pluginData.state.queue.add(async () => {
await meta.pluginData.state.savedMessages.markBulkAsDeleted(ids);
});
},
});

View file

@ -1,6 +1,7 @@
import * as t from "io-ts";
import { BasePluginType, typedGuildCommand, typedGuildEventListener } from "knub";
import { GuildSavedMessages } from "../../data/GuildSavedMessages";
import { Queue } from "../../Queue";
export const ConfigSchema = t.type({
can_manage: t.boolean,
@ -11,6 +12,7 @@ export interface MessageSaverPluginType extends BasePluginType {
config: TConfigSchema;
state: {
savedMessages: GuildSavedMessages;
queue: Queue;
};
}