actually fixed it

This commit is contained in:
Erik 2022-09-16 19:37:44 +03:00
parent ae0f251d5e
commit 449a6dc408
Signed by untrusted user: Navy.gif
GPG Key ID: 811EC0CD80E7E5FB
2 changed files with 12 additions and 17 deletions

View File

@ -108,6 +108,10 @@ class InteractionWrapper {
// return this.client.localeLoader.format(language, index, parameters, code); // return this.client.localeLoader.format(language, index, parameters, code);
// } // }
get id() {
return this.interaction.id;
}
get guildId() { get guildId() {
return this.interaction.guildId; return this.interaction.guildId;
} }

View File

@ -1,6 +1,5 @@
const { Infraction } = require('../interfaces/'); const { Infraction } = require('../interfaces/');
const { Collection } = require('@discordjs/collection'); const { Collection } = require('@discordjs/collection');
const { MessageType } = require('discord.js');
const Arguments = ['users', 'bots', 'humans', 'contains', 'startswith', 'endswith', 'emojis', 'reactions', 'text', 'invites', 'links', 'emojis', 'reactions', 'images', 'attachments']; const Arguments = ['users', 'bots', 'humans', 'contains', 'startswith', 'endswith', 'emojis', 'reactions', 'text', 'invites', 'links', 'emojis', 'reactions', 'images', 'attachments'];
const twoWeeks = 2 * 7 * 24 * 60 * 60 * 1000; const twoWeeks = 2 * 7 * 24 * 60 * 60 * 1000;
@ -30,7 +29,7 @@ class PruneInfraction extends Infraction {
hyperlink: opts.hyperlink hyperlink: opts.hyperlink
}); });
this.channel = opts.target; // this.channel = opts.target;
} }
} }
@ -41,27 +40,18 @@ class PruneInfraction extends Infraction {
// +1 to so we can avoid deleting the command interaction // +1 to so we can avoid deleting the command interaction
let messages = await this.fetchMessages(message, amount < 100 ? amount + 1 : amount); //Collection, not array. let messages = await this.fetchMessages(message, amount < 100 ? amount + 1 : amount); //Collection, not array.
if (messages.size === 0) return this._fail('C_PRUNE_NOTFETCHED'); if (messages.size === 0) return this._fail('C_PRUNE_NOTFETCHED');
this.client.logger.debug(`Pruning ${messages.size} in ${this.guild.name}`);
const hasOld = messages.some((m) => m.createdTimestamp >= Date.now() + twoWeeks); //I hope Node.js can handle these large of numbers.. e_e (2 weeks) const hasOld = messages.some((m) => m.createdTimestamp >= Date.now() + twoWeeks); //I hope Node.js can handle these large of numbers.. e_e (2 weeks)
const hasUndeletable = messages.some((m) => !m.deletable); const hasUndeletable = messages.some((m) => !m.deletable);
this.client.logger.debug(`Has old: ${hasOld} (${messages.filter((m) => m.createdTimestamp >= Date.now() + twoWeeks).size}), has undeletable: ${hasUndeletable} (${messages.filter((m) => !m.deletable).size})`);
// Deleting the interaction before it receives a response will cause an error // Deleting the interaction before it receives a response will cause an error
const ownLastMessage = messages.filter((m) => m.author.id === this.client.user.id && m.type === MessageType.ChatInputCommand) messages = messages.filter((m) => m.deletable && m.interaction?.id !== this.messageId);
.sort((a, b) => b.createdTimestamp - a.createdTimestamp)
.first();
messages = messages.filter((m) => m.deletable && m.id !== ownLastMessage?.id); // && m.type !== MessageType.ChatInputCommand);
this.client.logger.debug(`After deletable filter ${messages.filter((m) => m.deletable).size}`);
if (messages.size === 0) return this._fail('C_PRUNE_NOTDELETABLE'); if (messages.size === 0) return this._fail('C_PRUNE_NOTDELETABLE');
this.client.logger.debug(messages.map((m) => m.author.bot));
const filtered = await this.filterMessages(messages); const filtered = await this.filterMessages(messages);
this.client.logger.debug(`After filter: ${filtered.size}, pre filter: ${messages.size}, old: ${filtered.filter((m) => m.createdTimestamp >= Date.now() + twoWeeks).size}`);
if (filtered.size === 0) return this._fail('C_PRUNE_NOFILTERRESULTS'); if (filtered.size === 0) return this._fail('C_PRUNE_NOFILTERRESULTS');
const deleted = await this.deleteMessages(filtered); const deleted = await this.deleteMessages(filtered);
this.client.logger.debug(`Deleted ${deleted} messages`);
if (deleted === 0) return this._fail('C_PRUNE_NODELETE'); if (deleted === 0) return this._fail('C_PRUNE_NODELETE');
await this.handle(); await this.handle();
@ -79,7 +69,7 @@ class PruneInfraction extends Infraction {
const bulkDelete = async (messages) => { const bulkDelete = async (messages) => {
try { try {
const deleteThese = messages.splice(0, 100); const deleteThese = messages.splice(0, 100);
const result = await this.channel.bulkDelete(deleteThese, true); //Filtering old just incase, d.js uses Snowflake times instead of our Client's timestamp. const result = await this.target.bulkDelete(deleteThese, true); //Filtering old just incase, d.js uses Snowflake times instead of our Client's timestamp.
if (result && result.size > 0) amount += result.size; if (result && result.size > 0) amount += result.size;
} catch (error) { } catch (error) {
this.client.logger.error(error.stack); this.client.logger.error(error.stack);
@ -186,14 +176,15 @@ class PruneInfraction extends Infraction {
async fetchMessages(message, amount) { async fetchMessages(message, amount) {
let fetched = new Collection(); let fetched = new Collection();
const msgMgr = this.channel.messages; const msgMgr = this.target.messages;
const after = this.arguments.after?.value || null; const after = this.arguments.after?.value || null;
const fetch = async (lastMessage, amount) => { const fetch = async (lastMessage, amount) => {
const messages = await msgMgr.fetch({ const messages = await msgMgr.fetch({
limit: amount > 100 ? 100 : amount, limit: amount > 100 ? 100 : amount,
before: lastMessage, before: lastMessage,
after after,
cache: true // So deleted messages get logged
}); });
fetched = fetched.concat(messages); fetched = fetched.concat(messages);
@ -215,10 +206,10 @@ class PruneInfraction extends Infraction {
async verify() { async verify() {
const me = await this.guild.resolveMember(this.client.user); const me = await this.guild.resolveMember(this.client.user);
const perms = this.channel.permissionsFor(me); const perms = this.target.permissionsFor(me);
if (perms.missing('ViewChannel', 'ReadMessageHistory').length) return this._fail('C_PRUNE_MISSING_ACCESS'); if (perms.missing('ViewChannel', 'ReadMessageHistory').length) return this._fail('C_PRUNE_MISSING_ACCESS');
if (perms.missing('ManageMessages').length) return this._fail('C_PRUNE_INSUFFICIENTPERMISSIONS'); if (perms.missing('ManageMessages').length) return this._fail('C_PRUNE_INSUFFICIENTPERMISSIONS');
if (!this.channel.messages) return this._fail('C_PRUNE_NON_TEXTCHANNEL'); if (!this.target.messages) return this._fail('C_PRUNE_NON_TEXTCHANNEL');
return super._verify(); return super._verify();