3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-10 12:25:02 +00:00
zeppelin/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts
2021-09-04 20:29:34 +03:00

102 lines
3.1 KiB
TypeScript

import { Constants, Message, MessageType, Snowflake } from "discord.js";
import { messageSaverEvt } from "../types";
import { SECONDS } from "../../../utils";
import moment from "moment-timezone";
const recentlyCreatedMessages: Map<Snowflake, [debugId: number, timestamp: number]> = new Map();
const recentlyCreatedMessagesToKeep = 100;
setInterval(() => {
let toDelete = recentlyCreatedMessages.size - recentlyCreatedMessagesToKeep;
for (const key of recentlyCreatedMessages.keys()) {
if (toDelete === 0) {
break;
}
recentlyCreatedMessages.delete(key);
toDelete--;
}
}, 60 * SECONDS);
const AFFECTED_MESSAGE_TYPES: MessageType[] = ["DEFAULT", "REPLY", "APPLICATION_COMMAND"];
export const MessageCreateEvt = messageSaverEvt({
event: "messageCreate",
allowBots: true,
allowSelf: true,
async listener(meta) {
if (!AFFECTED_MESSAGE_TYPES.includes(meta.args.message.type)) {
return;
}
// Don't save partial messages
if (meta.args.message.partial) {
return;
}
// Don't save the bot's own messages
if (meta.args.message.author.id === meta.pluginData.client.user?.id) {
return;
}
// FIXME: Remove debug code
if (recentlyCreatedMessages.has(meta.args.message.id)) {
const ourDebugId = meta.pluginData.state.debugId;
const oldDebugId = recentlyCreatedMessages.get(meta.args.message.id)![0];
const context = `${ourDebugId} : ${oldDebugId} / ${meta.pluginData.guild.id} : ${meta.args.message.guildId} / ${meta.args.message.channelId} / ${meta.args.message.id}`;
const timestamp = moment(recentlyCreatedMessages.get(meta.args.message.id)![1]).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.set(meta.args.message.id, [meta.pluginData.state.debugId, Date.now()]);
await meta.pluginData.state.savedMessages.createFromMsg(meta.args.message);
},
});
export const MessageUpdateEvt = messageSaverEvt({
event: "messageUpdate",
allowBots: true,
allowSelf: true,
async listener(meta) {
if (meta.args.newMessage.type !== "DEFAULT" && meta.args.newMessage.type !== "REPLY") {
return;
}
if (meta.args.oldMessage?.partial) {
return;
}
await meta.pluginData.state.savedMessages.saveEditFromMsg(meta.args.newMessage as Message);
},
});
export const MessageDeleteEvt = messageSaverEvt({
event: "messageDelete",
allowBots: true,
allowSelf: true,
async listener(meta) {
const msg = meta.args.message as Message;
if (msg.type != null && meta.args.message.type !== "DEFAULT" && meta.args.message.type !== "REPLY") {
return;
}
await meta.pluginData.state.savedMessages.markAsDeleted(msg.id);
},
});
export const MessageDeleteBulkEvt = messageSaverEvt({
event: "messageDeleteBulk",
allowBots: true,
allowSelf: true,
async listener(meta) {
const ids = meta.args.messages.map(m => m.id);
await meta.pluginData.state.savedMessages.markBulkAsDeleted(ids);
},
});