Files
shadowbot/src/commands/moderation/link.rs
T
Puechberty Arthur e0f40e9190 feat(moderation): add commands for anti-raid reset, mute role setting, spam overrides, strikes management, and timeout toggling
- Implemented `resetantiraide` command to reset anti-raid protections to default settings.
- Added `set_muterole` command to define the mute role when timeout mode is disabled.
- Created `spam` command to manage spam moderation channel overrides (allow, deny, reset).
- Developed `strikes` command to display and modify strike rules for various triggers.
- Introduced `timeout` command to toggle the use of Discord timeout for mutes.

feat(outils): add piconly command to manage photo-only channels

- Implemented `piconly` command to define or remove channels where only photos can be sent.
- Added functionality to enforce photo-only rules in designated channels.

feat(roles): add ancien and noderank commands for role management

- Created `ancien` command to set up a role for members after a specified delay.
- Implemented `noderank` command to manage protected roles that are not removed by derank actions.
2026-04-10 15:04:10 +02:00

104 lines
2.9 KiB
Rust

use serenity::builder::CreateEmbed;
use serenity::model::prelude::*;
use serenity::prelude::*;
use crate::commands::automod_service::pool;
use crate::commands::common::{parse_channel_id, send_embed};
use crate::db;
pub async fn handle_link_override(ctx: &Context, msg: &Message, args: &[&str]) {
let Some(guild_id) = msg.guild_id else {
return;
};
let Some(action) = args.first() else {
send_embed(
ctx,
msg,
CreateEmbed::new()
.title("Link")
.description("Usage: +link <allow/deny/reset> [#salon]")
.color(0xED4245),
)
.await;
return;
};
let channel_id = args
.get(1)
.and_then(|raw| parse_channel_id(raw))
.unwrap_or(msg.channel_id);
let Some(pool) = pool(ctx).await else {
return;
};
let bot_id = ctx.cache.current_user().id.get() as i64;
let guild_id_raw = guild_id.get() as i64;
let channel_id_raw = channel_id.get() as i64;
let description = if action.eq_ignore_ascii_case("allow") {
let _ = db::set_moderation_channel_override(
&pool,
bot_id,
guild_id_raw,
channel_id_raw,
"link",
"allow",
)
.await;
format!("AntiLink desactive dans <#{}>.", channel_id.get())
} else if action.eq_ignore_ascii_case("deny") {
let _ = db::set_moderation_channel_override(
&pool,
bot_id,
guild_id_raw,
channel_id_raw,
"link",
"deny",
)
.await;
format!("AntiLink force dans <#{}>.", channel_id.get())
} else if action.eq_ignore_ascii_case("reset") {
let _ = db::remove_moderation_channel_override(
&pool,
bot_id,
guild_id_raw,
channel_id_raw,
"link",
)
.await;
format!("Override antilink supprime dans <#{}>.", channel_id.get())
} else {
return;
};
send_embed(
ctx,
msg,
CreateEmbed::new()
.title("Link Override")
.description(description)
.color(0x57F287),
)
.await;
}
pub struct LinkCommand;
pub static COMMAND_DESCRIPTOR: LinkCommand = LinkCommand;
impl crate::commands::command_contract::CommandSpec for LinkCommand {
fn metadata(&self) -> crate::commands::command_contract::CommandMetadata {
crate::commands::command_contract::CommandMetadata {
name: "link",
category: "moderation",
params: "<allow/deny/reset> [#salon]",
description: "Definit l override antilink pour un salon (allow, deny, reset).",
examples: &["+link allow #general", "+link deny #regles", "+link reset"],
default_aliases: &["linkch"],
allow_in_dm: false,
default_permission: 8,
}
}
}