diff --git a/src/plugins/MessageSaver.ts b/src/plugins/MessageSaver.ts index 41005ed9..77e002b0 100644 --- a/src/plugins/MessageSaver.ts +++ b/src/plugins/MessageSaver.ts @@ -1,10 +1,28 @@ import { Plugin, decorators as d } from "knub"; -import { Message } from "eris"; +import { GuildChannel, Message, TextChannel } from "eris"; import { GuildSavedMessages } from "../data/GuildSavedMessages"; +import { successMessage } from "../utils"; export class MessageSaverPlugin extends Plugin { protected savedMessages: GuildSavedMessages; + getDefaultOptions() { + return { + permissions: { + manage: false + }, + + overrides: [ + { + level: ">=100", + permissions: { + manage: true + } + } + ] + }; + } + onLoad() { this.savedMessages = GuildSavedMessages.getInstance(this.guildId); } @@ -42,4 +60,40 @@ export class MessageSaverPlugin extends Plugin { const ids = messages.map(m => m.id); await this.savedMessages.markBulkAsDeleted(ids); } + + @d.command("save_messages_to_db", " ") + @d.permission("manage") + async saveMessageCmd(msg: Message, args: { channel: GuildChannel & TextChannel; ids: string[] }) { + await msg.channel.createMessage("Saving specified messages..."); + + const failed = []; + for (const id of args.ids) { + const savedMessage = await this.savedMessages.find(id); + if (savedMessage) continue; + + let thisMsg: Message; + + try { + thisMsg = await args.channel.getMessage(id); + + if (!thisMsg) { + failed.push(id); + continue; + } + + await this.savedMessages.createFromMsg(thisMsg, { is_permanent: true }); + } catch (e) { + failed.push(id); + } + } + + if (failed.length) { + const savedCount = args.ids.length - failed.length; + msg.channel.createMessage( + successMessage(`Saved ${savedCount} messages. The following messages could not be saved: ${failed.join(", ")}`) + ); + } else { + msg.channel.createMessage(successMessage(`Saved ${args.ids.length} messages!`)); + } + } }