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
JavaScript
;
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);
});
}
};