forked from Galactic/galactic-bot
modstats command
This commit is contained in:
parent
47f50758f6
commit
23d63a86e8
83
src/structure/components/commands/administration/Modstats.js
Normal file
83
src/structure/components/commands/administration/Modstats.js
Normal file
@ -0,0 +1,83 @@
|
||||
const { MessageAttachment } = require("discord.js");
|
||||
const { SlashCommand } = require("../../../interfaces");
|
||||
|
||||
class ModstatsCommand extends SlashCommand {
|
||||
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'modstats',
|
||||
description: 'Aggregate moderation statistics',
|
||||
module: 'administration',
|
||||
guildOnly: true,
|
||||
memberPermissions: ['MANAGE_GUILD'],
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
options: [
|
||||
{
|
||||
name: ['after', 'before'],
|
||||
description: ['Count actions AFTER this date', 'Count actions BEFORE this date, can also be "now"'],
|
||||
type: 'DATE',
|
||||
dependsOn: ['before', 'after']
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async execute(invoker, opts) {
|
||||
|
||||
const now = Date.now();
|
||||
const { guild } = invoker;
|
||||
const query = { guild: guild.id };
|
||||
const result = {
|
||||
totals: {},
|
||||
time: {
|
||||
gathered: now,
|
||||
rangeStart: null,
|
||||
rangeEnd: now
|
||||
} };
|
||||
|
||||
if (opts.after && opts.before) {
|
||||
query.timestamp = {
|
||||
$gt: opts.after.valueOf(),
|
||||
$lt: opts.before.valueOf()
|
||||
};
|
||||
}
|
||||
|
||||
const data = await this.client.mongodb.infractions.find(query, { projection: { executor: 1, type: 1 } });
|
||||
for (const log of data) {
|
||||
if (log.executor === guild.me.id) continue;
|
||||
if (!result[log.executor]) {
|
||||
const user = await this.client.resolveUser(log.executor);
|
||||
result[log.executor] = { name: user.tag };
|
||||
}
|
||||
if (!result[log.executor][log.type]) result[log.executor][log.type] = 0;
|
||||
result[log.executor][log.type]++;
|
||||
}
|
||||
|
||||
for (const user of Object.keys(result)) {
|
||||
if (['time', 'totals'].includes(user)) continue;
|
||||
|
||||
let sum = 0;
|
||||
if (!result.totals.sum) result.totals.sum = 0;
|
||||
|
||||
for (const type of Object.keys(result[user])) {
|
||||
if (type === 'name') continue;
|
||||
|
||||
if (!result.totals[type]) result.totals[type] = 0;
|
||||
sum += result[user][type];
|
||||
result.totals[type] += result[user][type];
|
||||
|
||||
}
|
||||
|
||||
result[user].sum = sum;
|
||||
result.totals.sum += sum;
|
||||
|
||||
}
|
||||
|
||||
const attachment = new MessageAttachment(Buffer.from(JSON.stringify(result, null, 4)), `modstats-${guild.name}-${now}.json`);
|
||||
return invoker.reply({ files: [attachment] });
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ModstatsCommand;
|
Loading…
Reference in New Issue
Block a user