Allow filtering !mutes with --age

This commit is contained in:
Dragory 2019-04-13 02:39:36 +03:00
parent 838448153b
commit 05bf5b4f25

View file

@ -114,9 +114,11 @@ export class MutesPlugin extends ZeppelinPlugin<IMutesPluginConfig> {
} }
} }
@d.command("mutes") @d.command("mutes", [], {
options: [{ name: "age", type: "delay" }],
})
@d.permission("can_view_list") @d.permission("can_view_list")
public async postMuteList(msg: Message) { public async muteListCmd(msg: Message, args: { age?: number }) {
const lines = []; const lines = [];
// Active, logged mutes // Active, logged mutes
@ -130,12 +132,25 @@ export class MutesPlugin extends ZeppelinPlugin<IMutesPluginConfig> {
return a.expires_at > b.expires_at ? 1 : -1; return a.expires_at > b.expires_at ? 1 : -1;
}); });
const caseIds = activeMutes.map(m => m.case_id).filter(v => !!v); let filteredMutes = activeMutes;
let hasFilters = false;
if (args.age) {
const cutoff = moment()
.subtract(args.age, "ms")
.format(DBDateFormat);
filteredMutes = filteredMutes.filter(m => m.created_at <= cutoff);
hasFilters = true;
}
let totalMutes = filteredMutes.length;
const caseIds = filteredMutes.map(m => m.case_id).filter(v => !!v);
const muteCases = caseIds.length ? await this.cases.get(caseIds) : []; const muteCases = caseIds.length ? await this.cases.get(caseIds) : [];
const muteCasesById = muteCases.reduce((map, c) => map.set(c.id, c), new Map()); const muteCasesById = muteCases.reduce((map, c) => map.set(c.id, c), new Map());
lines.push( lines.push(
...activeMutes.map(mute => { ...filteredMutes.map(mute => {
const user = this.bot.users.get(mute.user_id); const user = this.bot.users.get(mute.user_id);
const username = user ? `${user.username}#${user.discriminator}` : "Unknown#0000"; const username = user ? `${user.username}#${user.discriminator}` : "Unknown#0000";
const theCase = muteCasesById.get(mute.case_id); const theCase = muteCasesById.get(mute.case_id);
@ -159,25 +174,31 @@ export class MutesPlugin extends ZeppelinPlugin<IMutesPluginConfig> {
}), }),
); );
// Manually added mute roles // Manually added mute roles (but only if no filters have been specified)
const muteUserIds = activeMutes.reduce((set, m) => set.add(m.user_id), new Set()); if (!hasFilters) {
const manuallyMutedMembers = []; const muteUserIds = activeMutes.reduce((set, m) => set.add(m.user_id), new Set());
const muteRole = this.getConfig().mute_role; const manuallyMutedMembers = [];
const muteRole = this.getConfig().mute_role;
if (muteRole) { if (muteRole) {
this.guild.members.forEach(member => { this.guild.members.forEach(member => {
if (muteUserIds.has(member.id)) return; if (muteUserIds.has(member.id)) return;
if (member.roles.includes(muteRole)) manuallyMutedMembers.push(member); if (member.roles.includes(muteRole)) manuallyMutedMembers.push(member);
}); });
}
totalMutes += manuallyMutedMembers.length;
lines.push(
...manuallyMutedMembers.map(member => {
return `\`Manual mute\` **${member.user.username}#${member.user.discriminator}** (\`${member.id}\`)`;
}),
);
} }
lines.push( const message = hasFilters
...manuallyMutedMembers.map(member => { ? `Results (${totalMutes} total):\n\n${lines.join("\n")}`
return `\`Manual mute\` **${member.user.username}#${member.user.discriminator}** (\`${member.id}\`)`; : `Active mutes (${totalMutes} total):\n\n${lines.join("\n")}`;
}),
);
const message = `Active mutes (${activeMutes.length} total):\n\n${lines.join("\n")}`;
const chunks = chunkMessageLines(message); const chunks = chunkMessageLines(message);
for (const chunk of chunks) { for (const chunk of chunks) {
msg.channel.createMessage(chunk); msg.channel.createMessage(chunk);