refactor: réorganiser les modules et améliorer la lisibilité du code

This commit is contained in:
Puechberty Arthur
2026-04-10 09:02:29 +02:00
parent 4d92be1ad5
commit 3d89df5251
5 changed files with 74 additions and 70 deletions
+4 -4
View File
@@ -186,12 +186,12 @@ pub mod renew;
pub mod reroll; pub mod reroll;
#[path = "infos/role.rs"] #[path = "infos/role.rs"]
pub mod role; pub mod role;
#[path = "roles/rolemenu.rs"]
pub mod rolemenu;
#[path = "logs/rolelog.rs"] #[path = "logs/rolelog.rs"]
pub mod rolelog; pub mod rolelog;
#[path = "infos/rolemembers.rs"] #[path = "infos/rolemembers.rs"]
pub mod rolemembers; pub mod rolemembers;
#[path = "roles/rolemenu.rs"]
pub mod rolemenu;
#[path = "moderation/sanctions.rs"] #[path = "moderation/sanctions.rs"]
pub mod sanctions; pub mod sanctions;
#[path = "outils/say.rs"] #[path = "outils/say.rs"]
@@ -210,14 +210,14 @@ pub mod set_modlogs;
pub mod shadowbot; pub mod shadowbot;
#[path = "infos/showpics.rs"] #[path = "infos/showpics.rs"]
pub mod showpics; pub mod showpics;
#[path = "salons_vocal/slowmode.rs"]
pub mod slowmode;
#[path = "outils/snipe.rs"] #[path = "outils/snipe.rs"]
pub mod snipe; pub mod snipe;
#[path = "bot/stream.rs"] #[path = "bot/stream.rs"]
pub mod stream; pub mod stream;
#[path = "outils/suggestion.rs"] #[path = "outils/suggestion.rs"]
pub mod suggestion; pub mod suggestion;
#[path = "salons_vocal/slowmode.rs"]
pub mod slowmode;
#[path = "roles/sync.rs"] #[path = "roles/sync.rs"]
pub mod sync; pub mod sync;
#[path = "moderation/tempban.rs"] #[path = "moderation/tempban.rs"]
+28 -23
View File
@@ -12,7 +12,7 @@ use serenity::model::prelude::*;
use serenity::prelude::*; use serenity::prelude::*;
use crate::commands::alias::resolve_alias; use crate::commands::alias::resolve_alias;
use crate::commands::common::{add_list_fields, truncate_text}; use crate::commands::common::truncate_text;
use crate::db::{ use crate::db::{
DbPoolKey, get_help_aliases_enabled, get_help_perms_enabled, get_help_type, DbPoolKey, get_help_aliases_enabled, get_help_perms_enabled, get_help_type,
list_command_aliases, list_command_aliases,
@@ -529,29 +529,34 @@ fn build_help_embed(
let page = &HELP_PAGES[page_index]; let page = &HELP_PAGES[page_index];
let lines = help_page_content(page, alias_map, state.aliases_enabled, state.perms_enabled); let lines = help_page_content(page, alias_map, state.aliases_enabled, state.perms_enabled);
let mut embed = CreateEmbed::new() let header = format!(
.title(format!("Aide · {}", page.title)) "Page {}/{} · mode `{}` · aliases {} · perms {}\n{}",
.description(format!( page_index + 1,
"Page {}/{} · mode `{}` · aliases {} · perms {}\n{}", HELP_PAGES.len(),
page_index + 1, state.layout.as_str(),
HELP_PAGES.len(), if state.aliases_enabled {
state.layout.as_str(), "activés"
if state.aliases_enabled { } else {
"activés" "désactivés"
} else { },
"désactivés" if state.perms_enabled {
}, "activées"
if state.perms_enabled { } else {
"activées" "désactivées"
} else { },
"désactivées" page.description,
}, );
page.description,
))
.color(0x5865F2);
embed = add_list_fields(embed, &lines, "Commandes"); let commands_intro = "\n\n**Commandes**\n";
embed let available = 4096usize
.saturating_sub(header.chars().count())
.saturating_sub(commands_intro.chars().count());
let commands_block = truncate_text(&lines.join("\n"), available);
CreateEmbed::new()
.title(format!("Aide · {}", page.title))
.description(format!("{}{}{}", header, commands_intro, commands_block))
.color(0x5865F2)
} }
fn help_components(owner_id: UserId, page_index: usize, state: &HelpState) -> Vec<CreateActionRow> { fn help_components(owner_id: UserId, page_index: usize, state: &HelpState) -> Vec<CreateActionRow> {
+32 -32
View File
@@ -83,10 +83,7 @@ fn parse_toggle_role_id(custom_id: &str) -> Option<RoleId> {
} }
fn parse_role_id_input(raw: &str) -> Option<RoleId> { fn parse_role_id_input(raw: &str) -> Option<RoleId> {
let cleaned = raw let cleaned = raw.trim().trim_start_matches("<@&").trim_end_matches('>');
.trim()
.trim_start_matches("<@&")
.trim_end_matches('>');
cleaned.parse::<u64>().ok().map(RoleId::new) cleaned.parse::<u64>().ok().map(RoleId::new)
} }
@@ -183,10 +180,7 @@ fn message_has_role_button(message: &Message, role_id: RoleId) -> bool {
for row in &message.components { for row in &message.components {
for component in &row.components { for component in &row.components {
if let ActionRowComponent::Button(button) = component { if let ActionRowComponent::Button(button) = component {
if let ButtonKind::NonLink { if let ButtonKind::NonLink { custom_id, .. } = &button.data {
custom_id, ..
} = &button.data
{
if custom_id == &wanted { if custom_id == &wanted {
return true; return true;
} }
@@ -406,24 +400,23 @@ pub async fn handle_component_interaction(ctx: &Context, component: &ComponentIn
} }
if action == "addrole" { if action == "addrole" {
let modal = let modal = CreateModal::new(modal_custom_id("addrole", target), "Ajouter un bouton role")
CreateModal::new(modal_custom_id("addrole", target), "Ajouter un bouton role") .components(vec![
.components(vec![ CreateActionRow::InputText(
CreateActionRow::InputText( CreateInputText::new(InputTextStyle::Short, "Label du bouton", "label")
CreateInputText::new(InputTextStyle::Short, "Label du bouton", "label") .required(true)
.required(true) .max_length(80),
.max_length(80), ),
), CreateActionRow::InputText(
CreateActionRow::InputText( CreateInputText::new(InputTextStyle::Short, "Role ID ou mention", "role_id")
CreateInputText::new(InputTextStyle::Short, "Role ID ou mention", "role_id") .required(true),
.required(true), ),
), CreateActionRow::InputText(
CreateActionRow::InputText( CreateInputText::new(InputTextStyle::Short, "Style", "style")
CreateInputText::new(InputTextStyle::Short, "Style", "style") .required(false)
.required(false) .placeholder("secondary | primary | success | danger"),
.placeholder("secondary | primary | success | danger"), ),
), ]);
]);
let _ = component let _ = component
.create_response(&ctx.http, CreateInteractionResponse::Modal(modal)) .create_response(&ctx.http, CreateInteractionResponse::Modal(modal))
@@ -444,8 +437,12 @@ pub async fn handle_modal_interaction(ctx: &Context, modal: &ModalInteraction) -
}; };
if modal.user.id.get() != target.owner_id { if modal.user.id.get() != target.owner_id {
respond_modal_ephemeral(ctx, modal, "Seul l'auteur du panneau peut soumettre ce formulaire.") respond_modal_ephemeral(
.await; ctx,
modal,
"Seul l'auteur du panneau peut soumettre ce formulaire.",
)
.await;
return true; return true;
} }
@@ -508,8 +505,7 @@ pub async fn handle_modal_interaction(ctx: &Context, modal: &ModalInteraction) -
if edited { if edited {
respond_modal_ephemeral(ctx, modal, "Embed du rolemenu mis a jour.").await; respond_modal_ephemeral(ctx, modal, "Embed du rolemenu mis a jour.").await;
} else { } else {
respond_modal_ephemeral(ctx, modal, "Impossible de mettre a jour l'embed cible.") respond_modal_ephemeral(ctx, modal, "Impossible de mettre a jour l'embed cible.").await;
.await;
} }
return true; return true;
@@ -589,10 +585,14 @@ impl crate::commands::command_contract::CommandSpec for RolemenuCommand {
params: "[message_id]", params: "[message_id]",
summary: "Cree ou modifie un menu de roles", summary: "Cree ou modifie un menu de roles",
description: "Ouvre un panneau interactif (boutons + modales) pour construire un embed de roles et des boutons auto-roles.", description: "Ouvre un panneau interactif (boutons + modales) pour construire un embed de roles et des boutons auto-roles.",
examples: &["+rolemenu", "+rolemenu 123456789012345678", "+help rolemenu"], examples: &[
"+rolemenu",
"+rolemenu 123456789012345678",
"+help rolemenu",
],
default_aliases: &["rmenu"], default_aliases: &["rmenu"],
allow_in_dm: false, allow_in_dm: false,
default_permission: 8, default_permission: 8,
} }
} }
} }
+7 -7
View File
@@ -85,7 +85,11 @@ pub async fn handle_slowmode(ctx: &Context, msg: &Message, args: &[&str]) {
if seconds == 0 { if seconds == 0 {
format!("Mode lent desactive sur <#{}>.", target.get()) format!("Mode lent desactive sur <#{}>.", target.get())
} else { } else {
format!("Mode lent de {}s applique sur <#{}>.", seconds, target.get()) format!(
"Mode lent de {}s applique sur <#{}>.",
seconds,
target.get()
)
} }
} else { } else {
"Echec de mise a jour du mode lent (verifie le type de salon et les permissions)." "Echec de mise a jour du mode lent (verifie le type de salon et les permissions)."
@@ -114,14 +118,10 @@ impl crate::commands::command_contract::CommandSpec for SlowmodeCommand {
params: "<duree> [salon]", params: "<duree> [salon]",
summary: "Change le mode lent d'un salon", summary: "Change le mode lent d'un salon",
description: "Modifie la duree du mode lent sur un salon texte (maximum 6 heures).", description: "Modifie la duree du mode lent sur un salon texte (maximum 6 heures).",
examples: &[ examples: &["+slowmode 10s", "+slowmode 2m #general", "+slowmode off"],
"+slowmode 10s",
"+slowmode 2m #general",
"+slowmode off",
],
default_aliases: &["sm"], default_aliases: &["sm"],
allow_in_dm: false, allow_in_dm: false,
default_permission: 8, default_permission: 8,
} }
} }
} }
+3 -4
View File
@@ -16,10 +16,9 @@ use crate::commands::{
online, owner, perms, pic, ping, playto, prefix, raidlog, rename, renew, reroll, role, rolelog, online, owner, perms, pic, ping, playto, prefix, raidlog, rename, renew, reroll, role, rolelog,
rolemembers, rolemenu, sanctions, say, server, serverinfo, set, set_boostembed, set_modlogs, rolemembers, rolemenu, sanctions, say, server, serverinfo, set, set_boostembed, set_modlogs,
shadowbot, showpics, slowmode, snipe, stream, suggestion, sync, tempban, tempcmute, tempmute, shadowbot, showpics, slowmode, snipe, stream, suggestion, sync, tempban, tempcmute, tempmute,
temprole, tempvoc, temprole, tempvoc, tempvoc_cmd, theme, ticket, ticket_member, tickets, unban, unbanall, unbl,
tempvoc_cmd, theme, ticket, ticket_member, tickets, unban, unbanall, unbl, uncmute, unhide, uncmute, unhide, unhideall, unlock, unlockall, unmassiverole, unmute, unmuteall, unowner,
unhideall, unlock, unlockall, unmassiverole, unmute, unmuteall, unowner, untemprole, user, untemprole, user, viewlogs, vocinfo, voicekick, voicelog, voicemove, warn, watch,
viewlogs, vocinfo, voicekick, voicelog, voicemove, warn, watch,
}; };
use crate::commands::{alladmins, allbots, allperms, botadmins}; use crate::commands::{alladmins, allbots, allperms, botadmins};
use crate::db::{DbPoolKey, upsert_message_observed}; use crate::db::{DbPoolKey, upsert_message_observed};