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.

89 lines (88 loc) 2.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), Object.defineProperty(exports, "MessageSearcher", { enumerable: !0, get: function() { return MessageSearcher; } }); const e = require("@sapphire/result"); let MessageSearcher = class MessageSearcher { offsetID; lastLimit = 0; constructor(){} async *search(e, t, s = 100) { let r = await this.fetch(e, s); if (r.isErr()) return; let a = r.unwrap(); if (0 !== a.length) for(; a.length > 0;){ let r = a.shift(); if (r.author.id === t && (yield r), 0 === a.length) { let r = await this.fetchTillUser(e, t, s); if (r.isErr()) break; a.push(...r.unwrap()); } } } async getAproximateMessageCount(t) { return e.Result.fromAsync(async ()=>{ let s = await t.messages.search({ channels: [ t.id ], authors: [ t.client.user.id ], limit: 25, sortBy: "timestamp", sortOrder: "desc" }); return e.Result.ok(s.total); }); } async fetchTillUser(t, s, r = 100) { return e.Result.fromAsync(async ()=>{ let a = await this.fetch(t, r); if (a.isErr()) return e.Result.err("No messages found"); let i = a.unwrap(); if (0 === i.length) return e.Result.err("No messages found"); let l = i.filter((e)=>e.author.id === s); return l.length > 0 ? e.Result.ok(l) : this.fetchTillUser(t, s, r); }); } async fetch(t, s = 100) { return e.Result.fromAsync(async ()=>{ if ([ "DM", "GROUP_DM" ].includes(t.type)) { let r = await t.messages.fetch({ limit: s, before: this.offsetID }); return 0 === r.size ? e.Result.ok([]) : (this.offsetID = r.lastKey(), e.Result.ok([ ...r.values() ])); } { s = 25; let r = await t.messages.search({ channels: [ t.id ], authors: [ t.client.user.id ], limit: s, offset: this.lastLimit, sortBy: "timestamp", sortOrder: "desc" }); return 0 === r.total ? e.Result.ok([]) : 0 === r.messages.size ? (this.lastLimit += s, this.fetch(t, s)) : (this.lastLimit += s, e.Result.ok([ ...r.messages.values() ])); } }); } };