Allow filtering !mutes with --age
This commit is contained in:
parent
838448153b
commit
05bf5b4f25
1 changed files with 41 additions and 20 deletions
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue