3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-18 15:00:00 +00:00
zeppelin/src/plugins/MessageSaver.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

import { Plugin, decorators as d } from "knub";
import { Message } from "eris";
import { GuildSavedMessages } from "../data/GuildSavedMessages";
import { ISavedMessageData } from "../data/entities/SavedMessage";
import moment from "moment-timezone";
export class MessageSaverPlugin extends Plugin {
protected messages: GuildSavedMessages;
onLoad() {
this.messages = GuildSavedMessages.getInstance(this.guildId);
}
protected msgToSavedMessageData(msg: Message): ISavedMessageData {
return {
attachments: msg.attachments,
author: {
username: msg.author.username,
discriminator: msg.author.discriminator
},
content: msg.content,
embeds: msg.embeds
};
}
@d.event("messageCreate", "guild", false)
async onMessageCreate(msg: Message) {
// Only save regular chat messages
if (msg.type !== 0) {
return;
}
const data: ISavedMessageData = this.msgToSavedMessageData(msg);
const postedAt = moment.utc(msg.timestamp, "x").format("YYYY-MM-DD HH:mm:ss.SSS");
await this.messages.create({
id: msg.id,
channel_id: msg.channel.id,
user_id: msg.author.id,
is_bot: msg.author.bot,
data,
posted_at: postedAt
});
}
@d.event("messageDelete", "guild", false)
async onMessageDelete(msg: Message) {
const savedMessage = await this.messages.find(msg.id);
if (!savedMessage) return;
await this.messages.markAsDeleted(msg.id);
}
@d.event("messageUpdate", "guild", false)
async onMessageUpdate(msg: Message) {
const savedMessage = await this.messages.find(msg.id);
if (!savedMessage) return;
const newData = this.msgToSavedMessageData(msg);
await this.messages.edit(msg.id, newData);
}
}