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