diff --git a/src/data/GuildSavedMessages.ts b/src/data/GuildSavedMessages.ts index 8c9be921..47020569 100644 --- a/src/data/GuildSavedMessages.ts +++ b/src/data/GuildSavedMessages.ts @@ -2,6 +2,8 @@ import { Brackets, getRepository, Repository } from "typeorm"; import { BaseRepository } from "./BaseRepository"; import { ISavedMessageData, SavedMessage } from "./entities/SavedMessage"; import EventEmitter from "events"; +import { GuildChannel, Message } from "eris"; +import moment from "moment-timezone"; const CLEANUP_INTERVAL = 5 * 60 * 1000; @@ -20,6 +22,18 @@ export class GuildSavedMessages extends BaseRepository { setInterval(() => this.cleanup(), CLEANUP_INTERVAL); } + public msgToSavedMessageData(msg: Message): ISavedMessageData { + return { + attachments: msg.attachments, + author: { + username: msg.author.username, + discriminator: msg.author.discriminator + }, + content: msg.content, + embeds: msg.embeds + }; + } + async cleanup() { await this.messages .createQueryBuilder("messages") @@ -60,6 +74,7 @@ export class GuildSavedMessages extends BaseRepository { try { await this.messages.insert({ ...data, guild_id: this.guildId }); } catch (e) { + console.warn(e); return; } @@ -67,6 +82,23 @@ export class GuildSavedMessages extends BaseRepository { this.events.emit("create", [inserted]); } + async createFromMsg(msg: Message, overrides = {}) { + const savedMessageData = this.msgToSavedMessageData(msg); + const postedAt = moment.utc(msg.timestamp, "x").format("YYYY-MM-DD HH:mm:ss.SSS"); + + const data = { + id: msg.id, + guild_id: (msg.channel as GuildChannel).guild.id, + channel_id: msg.channel.id, + user_id: msg.author.id, + is_bot: msg.author.bot, + data: savedMessageData, + posted_at: postedAt + }; + + return this.create({ ...data, ...overrides }); + } + async markAsDeleted(id) { await this.messages .createQueryBuilder("messages") @@ -82,7 +114,7 @@ export class GuildSavedMessages extends BaseRepository { this.events.emit("delete", [deleted]); } - async edit(id, newData: ISavedMessageData) { + async saveEdit(id, newData: ISavedMessageData) { const oldMessage = await this.messages.findOne(id); const newMessage = { ...oldMessage, data: newData }; @@ -95,4 +127,9 @@ export class GuildSavedMessages extends BaseRepository { this.events.emit("edit", [newMessage, oldMessage]); } + + async saveEditFromMsg(msg: Message) { + const newData = this.msgToSavedMessageData(msg); + return this.saveEdit(msg.id, newData); + } } diff --git a/src/plugins/MessageSaver.ts b/src/plugins/MessageSaver.ts index cc08389f..de1404b6 100644 --- a/src/plugins/MessageSaver.ts +++ b/src/plugins/MessageSaver.ts @@ -1,26 +1,12 @@ 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; + protected savedMessages: 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 - }; + this.savedMessages = GuildSavedMessages.getInstance(this.guildId); } @d.event("messageCreate", "guild", false) @@ -30,34 +16,24 @@ export class MessageSaverPlugin extends Plugin { 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 - }); + await this.savedMessages.createFromMsg(msg); } @d.event("messageDelete", "guild", false) async onMessageDelete(msg: Message) { - const savedMessage = await this.messages.find(msg.id); - if (!savedMessage) return; + if (msg.type != null && msg.type !== 0) { + return; + } - await this.messages.markAsDeleted(msg.id); + await this.savedMessages.markAsDeleted(msg.id); } @d.event("messageUpdate", "guild", false) async onMessageUpdate(msg: Message) { - const savedMessage = await this.messages.find(msg.id); - if (!savedMessage) return; + if (msg.type !== 0) { + return; + } - const newData = this.msgToSavedMessageData(msg); - - await this.messages.edit(msg.id, newData); + await this.savedMessages.saveEditFromMsg(msg); } }