mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-16 14:11:50 +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);
|
await this.messages.insert(data);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e?.code === "ER_DUP_ENTRY") {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB";
|
||||||
import { SavePinsToDBCmd } from "./commands/SavePinsToDB";
|
import { SavePinsToDBCmd } from "./commands/SavePinsToDB";
|
||||||
import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts";
|
import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts";
|
||||||
import { ConfigSchema, MessageSaverPluginType } from "./types";
|
import { ConfigSchema, MessageSaverPluginType } from "./types";
|
||||||
|
import { Queue } from "../../Queue";
|
||||||
|
|
||||||
const defaultOptions: PluginOptions<MessageSaverPluginType> = {
|
const defaultOptions: PluginOptions<MessageSaverPluginType> = {
|
||||||
config: {
|
config: {
|
||||||
|
@ -44,5 +45,6 @@ export const MessageSaverPlugin = zeppelinGuildPlugin<MessageSaverPluginType>()(
|
||||||
beforeLoad(pluginData) {
|
beforeLoad(pluginData) {
|
||||||
const { state, guild } = pluginData;
|
const { state, guild } = pluginData;
|
||||||
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
|
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 { 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({
|
export const MessageCreateEvt = messageSaverEvt({
|
||||||
event: "messageCreate",
|
event: "messageCreate",
|
||||||
|
@ -17,7 +28,17 @@ export const MessageCreateEvt = messageSaverEvt({
|
||||||
return;
|
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;
|
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;
|
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) {
|
async listener(meta) {
|
||||||
const ids = meta.args.messages.map(m => m.id);
|
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 * as t from "io-ts";
|
||||||
import { BasePluginType, typedGuildCommand, typedGuildEventListener } from "knub";
|
import { BasePluginType, typedGuildCommand, typedGuildEventListener } from "knub";
|
||||||
import { GuildSavedMessages } from "../../data/GuildSavedMessages";
|
import { GuildSavedMessages } from "../../data/GuildSavedMessages";
|
||||||
|
import { Queue } from "../../Queue";
|
||||||
|
|
||||||
export const ConfigSchema = t.type({
|
export const ConfigSchema = t.type({
|
||||||
can_manage: t.boolean,
|
can_manage: t.boolean,
|
||||||
|
@ -11,6 +12,7 @@ export interface MessageSaverPluginType extends BasePluginType {
|
||||||
config: TConfigSchema;
|
config: TConfigSchema;
|
||||||
state: {
|
state: {
|
||||||
savedMessages: GuildSavedMessages;
|
savedMessages: GuildSavedMessages;
|
||||||
|
queue: Queue;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue