64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
![]() |
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);
|
||
|
}
|
||
|
}
|