mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-18 15:45:03 +00:00
added role removal mute overrides to automod and spam plugins
This commit is contained in:
parent
8bf47ff418
commit
fa7d5d0526
4 changed files with 48 additions and 17 deletions
|
@ -1148,6 +1148,8 @@ export class AutomodPlugin extends ZeppelinPlugin<TConfigSchema, ICustomOverride
|
||||||
extraNotes: [caseExtraNote],
|
extraNotes: [caseExtraNote],
|
||||||
};
|
};
|
||||||
const contactMethods = this.readContactMethodsFromAction(rule.actions.mute);
|
const contactMethods = this.readContactMethodsFromAction(rule.actions.mute);
|
||||||
|
const rolesToRemove = rule.actions.mute.remove_roles_on_mute;
|
||||||
|
const rolesToRestore = rule.actions.mute.restore_roles_on_mute;
|
||||||
|
|
||||||
let userIdsToMute = [];
|
let userIdsToMute = [];
|
||||||
if (
|
if (
|
||||||
|
@ -1165,7 +1167,14 @@ export class AutomodPlugin extends ZeppelinPlugin<TConfigSchema, ICustomOverride
|
||||||
|
|
||||||
if (userIdsToMute.length) {
|
if (userIdsToMute.length) {
|
||||||
for (const userId of userIdsToMute) {
|
for (const userId of userIdsToMute) {
|
||||||
await this.getMutes().muteUser(userId, duration, reason, { contactMethods, caseArgs });
|
await this.getMutes().muteUser(
|
||||||
|
userId,
|
||||||
|
duration,
|
||||||
|
reason,
|
||||||
|
{ contactMethods, caseArgs },
|
||||||
|
rolesToRemove,
|
||||||
|
rolesToRestore,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
actionsTaken.push("mute");
|
actionsTaken.push("mute");
|
||||||
|
|
|
@ -249,6 +249,8 @@ export const MuteAction = t.type({
|
||||||
duration: tNullable(tDelayString),
|
duration: tNullable(tDelayString),
|
||||||
notify: tNullable(t.string),
|
notify: tNullable(t.string),
|
||||||
notifyChannel: tNullable(t.string),
|
notifyChannel: tNullable(t.string),
|
||||||
|
remove_roles_on_mute: tNullable(t.union([t.boolean, t.array(t.string)])),
|
||||||
|
restore_roles_on_mute: tNullable(t.union([t.boolean, t.array(t.string)])),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const KickAction = t.type({
|
export const KickAction = t.type({
|
||||||
|
|
|
@ -153,6 +153,8 @@ export class MutesPlugin extends ZeppelinPlugin<TConfigSchema> {
|
||||||
muteTime: number = null,
|
muteTime: number = null,
|
||||||
reason: string = null,
|
reason: string = null,
|
||||||
muteOptions: MuteOptions = {},
|
muteOptions: MuteOptions = {},
|
||||||
|
removeRolesOnMuteOverride: boolean | string[] = null,
|
||||||
|
restoreRolesOnMuteOverride: boolean | string[] = null,
|
||||||
): Promise<MuteResult> {
|
): Promise<MuteResult> {
|
||||||
const lock = await this.locks.acquire(`mute-${userId}`);
|
const lock = await this.locks.acquire(`mute-${userId}`);
|
||||||
|
|
||||||
|
@ -178,26 +180,28 @@ export class MutesPlugin extends ZeppelinPlugin<TConfigSchema> {
|
||||||
// remove and store any roles to be removed/restored
|
// remove and store any roles to be removed/restored
|
||||||
const currentUserRoles = member.roles;
|
const currentUserRoles = member.roles;
|
||||||
const memberOptions: MemberOptions = {};
|
const memberOptions: MemberOptions = {};
|
||||||
|
const removeRoles = removeRolesOnMuteOverride ?? config.remove_roles_on_mute;
|
||||||
|
const restoreRoles = restoreRolesOnMuteOverride ?? config.restore_roles_on_mute;
|
||||||
let rolesToRestore = [];
|
let rolesToRestore = [];
|
||||||
|
|
||||||
// remove roles
|
// remove roles
|
||||||
if (!Array.isArray(config.remove_roles_on_mute)) {
|
if (!Array.isArray(removeRoles)) {
|
||||||
if (config.remove_roles_on_mute) {
|
if (removeRoles) {
|
||||||
memberOptions.roles = [];
|
memberOptions.roles = [];
|
||||||
await member.edit(memberOptions);
|
await member.edit(memberOptions);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memberOptions.roles = currentUserRoles.filter(x => !(<string[]>config.remove_roles_on_mute).includes(x));
|
memberOptions.roles = currentUserRoles.filter(x => !(<string[]>removeRoles).includes(x));
|
||||||
await member.edit(memberOptions);
|
await member.edit(memberOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set roles to be restored
|
// set roles to be restored
|
||||||
if (!Array.isArray(config.restore_roles_on_mute)) {
|
if (!Array.isArray(restoreRoles)) {
|
||||||
if (config.restore_roles_on_mute) {
|
if (restoreRoles) {
|
||||||
rolesToRestore = currentUserRoles;
|
rolesToRestore = currentUserRoles;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rolesToRestore = currentUserRoles.filter(x => (<string[]>config.restore_roles_on_mute).includes(x));
|
rolesToRestore = currentUserRoles.filter(x => (<string[]>restoreRoles).includes(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply mute role if it's missing
|
// Apply mute role if it's missing
|
||||||
|
|
|
@ -29,6 +29,8 @@ const BaseSingleSpamConfig = t.type({
|
||||||
count: t.number,
|
count: t.number,
|
||||||
mute: tNullable(t.boolean),
|
mute: tNullable(t.boolean),
|
||||||
mute_time: tNullable(t.number),
|
mute_time: tNullable(t.number),
|
||||||
|
remove_roles_on_mute: tNullable(t.union([t.boolean, t.array(t.string)])),
|
||||||
|
restore_roles_on_mute: tNullable(t.union([t.boolean, t.array(t.string)])),
|
||||||
clean: tNullable(t.boolean),
|
clean: tNullable(t.boolean),
|
||||||
});
|
});
|
||||||
type TBaseSingleSpamConfig = t.TypeOf<typeof BaseSingleSpamConfig>;
|
type TBaseSingleSpamConfig = t.TypeOf<typeof BaseSingleSpamConfig>;
|
||||||
|
@ -257,12 +259,19 @@ export class SpamPlugin extends ZeppelinPlugin<TConfigSchema> {
|
||||||
const muteTime = spamConfig.mute_time
|
const muteTime = spamConfig.mute_time
|
||||||
? convertDelayStringToMS(spamConfig.mute_time.toString())
|
? convertDelayStringToMS(spamConfig.mute_time.toString())
|
||||||
: 120 * 1000;
|
: 120 * 1000;
|
||||||
muteResult = await mutesPlugin.muteUser(member.id, muteTime, "Automatic spam detection", {
|
muteResult = await mutesPlugin.muteUser(
|
||||||
caseArgs: {
|
member.id,
|
||||||
modId: this.bot.user.id,
|
muteTime,
|
||||||
postInCaseLogOverride: false,
|
"Automatic spam detection",
|
||||||
|
{
|
||||||
|
caseArgs: {
|
||||||
|
modId: this.bot.user.id,
|
||||||
|
postInCaseLogOverride: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
spamConfig.remove_roles_on_mute,
|
||||||
|
spamConfig.restore_roles_on_mute,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the offending message IDs
|
// Get the offending message IDs
|
||||||
|
@ -379,12 +388,19 @@ export class SpamPlugin extends ZeppelinPlugin<TConfigSchema> {
|
||||||
if (spamConfig.mute && member) {
|
if (spamConfig.mute && member) {
|
||||||
const mutesPlugin = this.getPlugin<MutesPlugin>("mutes");
|
const mutesPlugin = this.getPlugin<MutesPlugin>("mutes");
|
||||||
const muteTime = spamConfig.mute_time ? convertDelayStringToMS(spamConfig.mute_time.toString()) : 120 * 1000;
|
const muteTime = spamConfig.mute_time ? convertDelayStringToMS(spamConfig.mute_time.toString()) : 120 * 1000;
|
||||||
await mutesPlugin.muteUser(member.id, muteTime, "Automatic spam detection", {
|
await mutesPlugin.muteUser(
|
||||||
caseArgs: {
|
member.id,
|
||||||
modId: this.bot.user.id,
|
muteTime,
|
||||||
extraNotes: [`Details: ${details}`],
|
"Automatic spam detection",
|
||||||
|
{
|
||||||
|
caseArgs: {
|
||||||
|
modId: this.bot.user.id,
|
||||||
|
extraNotes: [`Details: ${details}`],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
spamConfig.remove_roles_on_mute,
|
||||||
|
spamConfig.restore_roles_on_mute,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// If we're not muting the user, just add a note on them
|
// If we're not muting the user, just add a note on them
|
||||||
const casesPlugin = this.getPlugin<CasesPlugin>("cases");
|
const casesPlugin = this.getPlugin<CasesPlugin>("cases");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue