Allow !clean to delete messages not already saved

If a message is found that is not stored, we save it and then bulk delete
This commit is contained in:
Dark 2021-06-17 02:10:23 +02:00
parent 421f6defaa
commit 2700f4e389
No known key found for this signature in database
GPG key ID: 384C4B4F5B1E25A8
2 changed files with 22 additions and 10 deletions

View file

@ -159,6 +159,12 @@ export class GuildSavedMessages extends BaseGuildRepository {
return this.create({ ...data, ...overrides });
}
async createFromMessages(messages: Message[], overrides = {}) {
for (const msg of messages) {
await this.createFromMsg(msg, overrides);
}
}
async markAsDeleted(id) {
await this.messages
.createQueryBuilder("messages")

View file

@ -121,11 +121,20 @@ export const CleanCmd = utilityCmd({
}
while (messagesToClean.length < args.count) {
const potentialMessagesToClean = await pluginData.state.savedMessages.getLatestByChannelBeforeId(
targetChannel.id,
beforeId,
args.count,
);
const potentialMessages = await targetChannel.messages.fetch({
before: beforeId,
limit: args.count,
});
if (potentialMessages.size === 0) break;
const existingStored = await pluginData.state.savedMessages.getMultiple(potentialMessages.keyArray());
const alreadyStored = existingStored.map(stored => stored.id);
const messagesToStore = potentialMessages
.array()
.filter(potentialMsg => !alreadyStored.includes(potentialMsg.id));
await pluginData.state.savedMessages.createFromMessages(messagesToStore);
const potentialMessagesToClean = await pluginData.state.savedMessages.getMultiple(potentialMessages.keyArray());
if (potentialMessagesToClean.length === 0) break;
const filtered: SavedMessage[] = [];
@ -150,12 +159,9 @@ export const CleanCmd = utilityCmd({
const withoutOverflow = filtered.slice(0, remaining);
messagesToClean.push(...withoutOverflow);
beforeId = potentialMessagesToClean[potentialMessagesToClean.length - 1].id;
beforeId = potentialMessages.lastKey()!;
if (
foundId ||
moment.utc(potentialMessagesToClean[potentialMessagesToClean.length - 1].posted_at).valueOf() < timeCutoff
) {
if (foundId || moment.utc(potentialMessages.last()!.createdTimestamp).valueOf() < timeCutoff) {
break;
}
}