UNPKG

deleo

Version:

Deleo, a TypeScript-based CLI tool, simplifies Discord content management by enabling efficient deletion of messages in open DMs or specific channels.

67 lines (66 loc) 2.59 kB
"use strict"; var e, t; Object.defineProperty(exports, "__esModule", { value: !0 }), function _export(e, t) { for(var s in t)Object.defineProperty(e, s, { enumerable: !0, get: t[s] }); }(exports, { MessageDeleter: function() { return MessageDeleter; }, MessageDeleterEvents: function() { return e; } }); const s = _interop_require_default(require("events")), r = require("@sapphire/result"), a = require("../shared"), i = require("../shared/utils"), l = require("."); function _interop_require_default(e) { return e && e.__esModule ? e : { default: e }; } (t = e || (e = {})).Ready = "ready", t.Delete = "delete", t.FailedDelete = "failedDelete", t.Done = "done"; let MessageDeleter = class MessageDeleter extends s.default { options; deletedMessages; approximateTotal; constructor(e){ super(), this.options = e, this.deletedMessages = [], this.approximateTotal = 0; } async deleteMessage(e) { return r.Result.fromAsync(async ()=>{ let t = await (0, i.retry)(async ()=>{ await (0, i.sleep)(this.options.deleteDelay), await e.delete(); }); return t.isErr() ? r.Result.err(t.unwrapErr()) : r.Result.ok(); }); } async deleteChannelMessages(e) { return r.Result.fromAsync(async ()=>{ let t = new l.MessageSearcher(), s = t.search(e, e.client.user?.id, a.DEFAULT_SEARCH_LIMIT), n = await t.getAproximateMessageCount(e); n.isOk() && (this.approximateTotal = n.unwrap()), this.deletedMessages = []; let u = []; for(this.emit("ready", e);;){ let { value: e, done: t } = await s.next(); if (t || !e) break; if ([ "CALL", "RECIPIENT_ADD", "RECIPIENT_REMOVE", "CHANNEL_NAME_CHANGE", "CHANNEL_ICON_CHANGE", "THREAD_STARTER_MESSAGE", "GUILD_INVITE_REMINDER", "CONTEXT_MENU_COMMAND", "AUTO_MODERATION_ACTION", "ROLE_SUBSCRIPTION_PURCHASE" ].includes(e.type)) continue; let r = await this.deleteMessage(e); u.push(e), this.deletedMessages.push(e), r.isErr() ? this.emit("failedDelete", e, r.unwrapErr()) : this.emit("delete", e), await (0, i.sleep)(this.options.deleteDelay); } return this.emit("done", e, u), r.Result.ok(u); }); } };