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:
parent
421f6defaa
commit
2700f4e389
2 changed files with 22 additions and 10 deletions
|
@ -159,6 +159,12 @@ export class GuildSavedMessages extends BaseGuildRepository {
|
||||||
return this.create({ ...data, ...overrides });
|
return this.create({ ...data, ...overrides });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async createFromMessages(messages: Message[], overrides = {}) {
|
||||||
|
for (const msg of messages) {
|
||||||
|
await this.createFromMsg(msg, overrides);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async markAsDeleted(id) {
|
async markAsDeleted(id) {
|
||||||
await this.messages
|
await this.messages
|
||||||
.createQueryBuilder("messages")
|
.createQueryBuilder("messages")
|
||||||
|
|
|
@ -121,11 +121,20 @@ export const CleanCmd = utilityCmd({
|
||||||
}
|
}
|
||||||
|
|
||||||
while (messagesToClean.length < args.count) {
|
while (messagesToClean.length < args.count) {
|
||||||
const potentialMessagesToClean = await pluginData.state.savedMessages.getLatestByChannelBeforeId(
|
const potentialMessages = await targetChannel.messages.fetch({
|
||||||
targetChannel.id,
|
before: beforeId,
|
||||||
beforeId,
|
limit: args.count,
|
||||||
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;
|
if (potentialMessagesToClean.length === 0) break;
|
||||||
|
|
||||||
const filtered: SavedMessage[] = [];
|
const filtered: SavedMessage[] = [];
|
||||||
|
@ -150,12 +159,9 @@ export const CleanCmd = utilityCmd({
|
||||||
const withoutOverflow = filtered.slice(0, remaining);
|
const withoutOverflow = filtered.slice(0, remaining);
|
||||||
messagesToClean.push(...withoutOverflow);
|
messagesToClean.push(...withoutOverflow);
|
||||||
|
|
||||||
beforeId = potentialMessagesToClean[potentialMessagesToClean.length - 1].id;
|
beforeId = potentialMessages.lastKey()!;
|
||||||
|
|
||||||
if (
|
if (foundId || moment.utc(potentialMessages.last()!.createdTimestamp).valueOf() < timeCutoff) {
|
||||||
foundId ||
|
|
||||||
moment.utc(potentialMessagesToClean[potentialMessagesToClean.length - 1].posted_at).valueOf() < timeCutoff
|
|
||||||
) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue