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:
parent
ebe224885e
commit
7054412640
4 changed files with 37 additions and 6 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue