Implement lockdown management in automod system
- Added functionality to activate and deactivate lockdowns via the automod worker, responding to specific job names. - Enhanced the anti-raid join handler to apply a verification role when lockdown is active and the anti-raid action is set to VERIFY. - Updated the automod configuration to ensure default rules are created if missing, improving the setup process for new guilds. - Introduced new API endpoints for managing cases and warnings, allowing for soft deletion and reason updates. - Enhanced the moderation dashboard to include warnings management, improving user experience in moderation tasks. - Updated localization files to reflect new features and improve user guidance in both English and German.
This commit is contained in:
@@ -164,14 +164,20 @@ export const slowmodeCommandData = applyCommandDescription(
|
||||
export const lockCommandData = applyCommandDescription(
|
||||
new SlashCommandBuilder()
|
||||
.setName('lock')
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageChannels),
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageChannels)
|
||||
.addBooleanOption((o) =>
|
||||
applyOptionDescription(o.setName('server'), 'moderation.lock.options.server')
|
||||
),
|
||||
'moderation.lock.description'
|
||||
);
|
||||
|
||||
export const unlockCommandData = applyCommandDescription(
|
||||
new SlashCommandBuilder()
|
||||
.setName('unlock')
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageChannels),
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageChannels)
|
||||
.addBooleanOption((o) =>
|
||||
applyOptionDescription(o.setName('server'), 'moderation.unlock.options.server')
|
||||
),
|
||||
'moderation.unlock.description'
|
||||
);
|
||||
|
||||
|
||||
@@ -456,18 +456,31 @@ const lockCommand: SlashCommand = {
|
||||
async execute(interaction, context) {
|
||||
const locale = await getGuildLocale(context.prisma, interaction.guildId);
|
||||
if (!(await ensureMod(interaction, PermissionFlagsBits.ManageChannels, locale))) return;
|
||||
if (interaction.channel?.type === ChannelType.GuildText) {
|
||||
await interaction.channel.permissionOverwrites.edit(interaction.guild!.roles.everyone, {
|
||||
const serverWide = interaction.options.getBoolean('server') ?? false;
|
||||
const guild = interaction.guild!;
|
||||
|
||||
if (serverWide) {
|
||||
for (const channel of guild.channels.cache.values()) {
|
||||
if (channel.type !== ChannelType.GuildText && channel.type !== ChannelType.GuildAnnouncement) {
|
||||
continue;
|
||||
}
|
||||
await channel.permissionOverwrites.edit(guild.roles.everyone, {
|
||||
SendMessages: false
|
||||
});
|
||||
}
|
||||
} else if (interaction.channel?.type === ChannelType.GuildText) {
|
||||
await interaction.channel.permissionOverwrites.edit(guild.roles.everyone, {
|
||||
SendMessages: false
|
||||
});
|
||||
}
|
||||
|
||||
const modCase = await createCase(context, {
|
||||
guildId: interaction.guildId!,
|
||||
targetUserId: interaction.user.id,
|
||||
moderatorId: interaction.user.id,
|
||||
...auditFrom(interaction),
|
||||
action: 'LOCK',
|
||||
reason: 'Channel locked'
|
||||
reason: serverWide ? 'Server locked' : 'Channel locked'
|
||||
});
|
||||
await replySuccessCase(interaction, locale, modCase.caseNumber);
|
||||
}
|
||||
@@ -478,18 +491,31 @@ const unlockCommand: SlashCommand = {
|
||||
async execute(interaction, context) {
|
||||
const locale = await getGuildLocale(context.prisma, interaction.guildId);
|
||||
if (!(await ensureMod(interaction, PermissionFlagsBits.ManageChannels, locale))) return;
|
||||
if (interaction.channel?.type === ChannelType.GuildText) {
|
||||
await interaction.channel.permissionOverwrites.edit(interaction.guild!.roles.everyone, {
|
||||
const serverWide = interaction.options.getBoolean('server') ?? false;
|
||||
const guild = interaction.guild!;
|
||||
|
||||
if (serverWide) {
|
||||
for (const channel of guild.channels.cache.values()) {
|
||||
if (channel.type !== ChannelType.GuildText && channel.type !== ChannelType.GuildAnnouncement) {
|
||||
continue;
|
||||
}
|
||||
await channel.permissionOverwrites.edit(guild.roles.everyone, {
|
||||
SendMessages: null
|
||||
});
|
||||
}
|
||||
} else if (interaction.channel?.type === ChannelType.GuildText) {
|
||||
await interaction.channel.permissionOverwrites.edit(guild.roles.everyone, {
|
||||
SendMessages: null
|
||||
});
|
||||
}
|
||||
|
||||
const modCase = await createCase(context, {
|
||||
guildId: interaction.guildId!,
|
||||
targetUserId: interaction.user.id,
|
||||
moderatorId: interaction.user.id,
|
||||
...auditFrom(interaction),
|
||||
action: 'UNLOCK',
|
||||
reason: 'Channel unlocked'
|
||||
reason: serverWide ? 'Server unlocked' : 'Channel unlocked'
|
||||
});
|
||||
await replySuccessCase(interaction, locale, modCase.caseNumber);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user