Aller au contenu

Sanctions

Le module sanctions remplace un plugin de bannissement classique : il gère les bans, bans IP, mutes, kicks et warns, tient un casier par joueur et applique automatiquement des paliers selon le score de warns. Ses options sont dans config/sanctions.yml, ses commandes dans commands/sanctions.yml.

Plusieurs commandes acceptent des arguments globaux, placés n’importe où dans la ligne :

Argument Effet Commandes
-silent Pas d’annonce publique (seul le staff est prévenu) ban, tempban, unban, ipban, iptempban, ipunban, mute, tempmute, kick, warn
-template=<nom> Choisit le modèle d’écran de ban (bans/<nom>.txt) ban, tempban, ipban
-soft / -hard Force un mute doux ou strict mute, tempmute
-D Mute différé : il commence à la prochaine connexion du joueur mute, tempmute

-silent sur un ban demande cobaltstaff.bans.silent (cobaltstaff.ipban.silent pour un ban IP), -template demande cobaltstaff.bans.template-overwrite (ou cobaltstaff.ipban.template-overwrite), -soft/-hard demande cobaltstaff.mutes.override-softhard.

Les durées acceptent 30s, 10m, 2h, 7d, 2w, 1M, 1y, la forme 7 DAY et les mélanges comme 1d12h. perm, permanent ou -1 signifient « définitif ». Elles s’affichent sous une forme lisible, par exemple « 2 j 3 h ».

Un warn a une gravité qui rapporte des points. La somme des points des warns actifs forme le score du joueur ; chaque palier atteint déclenche des actions.

/warn [gravité] <joueur> [raison] [-silent]

Sans gravité, un menu de choix s’ouvre. Gravités par défaut :

Gravité Points Expire après
LEGER 1 2 semaines
MOYEN 2 1 mois
GRAVE 4 3 mois
CRITIQUE 6 jamais

Chaque gravité peut avoir une raison par défaut (warn sans raison), autoriser ou non le remplacement de cette raison, et définir l’item affiché dans le menu.

Paliers par défaut :

Score Action Annulation si le warn est retiré
3 mute 1 h unmute
5 ban 1 jour unban
8 ban 7 jours unban
12 ban définitif unban

Chaque palier est une liste d’actions (format hooks) avec une rollback-command, lancée si le warn est supprimé ou si son appel est accepté. Le label du palier est montré au joueur (« 4/5 points, prochain : ban 1 jour »).

Le mode de déclenchement se choisit avec warnings.threshold-mode :

Chaque warn relance tous les paliers atteints par le score actuel.

D’autres actions peuvent être liées à chaque warn (warnings.actions, filtrables par gravité). Le joueur est prévenu à la connexion de ses warns non lus (ou à chaque connexion avec always-notify: true).

  • /warns get <joueur> et /warns gerer <joueur> : liste et gestion (expirer, supprimer).
  • /meswarns : le joueur consulte ses propres warns et peut faire appel.
  • /warns appels : appels en attente.
Commande Usage
/ban <joueur> <raison> [-silent] [-template=<modèle>]
/tempban <joueur> <durée> <raison> [-silent] [-template=<modèle>]
/ban prolonger, /ban reduire <joueur> <durée>
/unban <joueur> <raison> [-silent]
/bans gerer Bans en cours (menu)
  • Raisons fixes (bans.fixed-reasons) : dès qu’une raison est définie, la raison libre est remplacée par un choix (/ban <joueur> <raison>), et un menu s’ouvre sans raison. Chaque raison fixe précise le type (PERM_BAN ou TEMP_BAN), la durée, le modèle d’écran, l’item et sa description.
  • Alerte de connexion : quand un joueur banni tente de se connecter, le staff ayant cobaltstaff.bans.notifications est prévenu (au plus une fois par minute et par joueur par défaut).
  • Plafonds : la durée d’un tempban est limitée par les permissions cobaltstaff.bans.tempban.limit.<durée>, celle d’une prolongation par cobaltstaff.bans.extendban.limit.<durée> (voir Permissions).

Les écrans de déconnexion sont des fichiers texte MiniMessage dans bans/. Quatre modèles sont fournis : permanent, temporaire, ip-permanent, ip-temporaire. Ajoutez les vôtres (bans/<nom>.txt) et choisissez-les avec -template=<nom> ou dans les raisons fixes.

Variable Contenu
%target% Joueur banni
%issuer% Staff à l’origine
%reason% Raison
%duration% Durée totale
%remaining% Temps restant
%expiration% Date de fin (« jamais » si définitif)
%date% Date de la sanction
%id% Numéro de la sanction
%ip% IP visée (bans IP)
/ipban <joueur|ip|plage> <raison> [-silent] [-template=<modèle>]
/iptempban <joueur|ip|plage> <durée> <raison> [-silent]
/ipunban <joueur|ip|plage> [raison] [-silent]
/checkip <joueur>
/ipbans [-players]

Un ban IP vise une adresse, la dernière adresse connue d’un joueur ou une plage CIDR (IPv4 et IPv6). Avant d’appliquer le ban, CobaltStaff montre la liste des joueurs touchés (d’après leur dernière IP connue) et demande une confirmation, au chat ou dans un menu (ipbans.confirmation: CHAT | GUI | DISABLED).

/mute <joueur> <raison> [-soft|-hard] [-D] [-silent]
/tempmute <joueur> <durée> <raison> [-soft|-hard] [-D] [-silent]
/mute prolonger <joueur> <durée> /mute reduire <joueur> <durée>
/unmute <joueur> [raison]
  • Mute strict : le joueur est prévenu et ses messages sont refusés.
  • Mute doux : le joueur ne sait pas qu’il est muet ; il voit ses messages, mais personne d’autre ne les reçoit. Le comportement par défaut se règle avec mutes.default-soft-mutes.
  • Mute différé (-D) : si le joueur est hors ligne, le mute ne commence qu’à sa prochaine connexion, pour qu’il purge toute sa durée.
  • Commandes bloquées : pendant un mute, les messages privés et commandes de discussion listés dans mutes.blocked-commands sont refusés (commandes de plusieurs mots acceptées, par exemple cmi msg).
  • /mutes gerer, /mesmutes, /mutes appels : menus de gestion, mutes personnels et appels.
/kick <joueur> [raison] [-silent]

Des raisons prédéfinies (kicks.reasons) ouvrent un menu de choix quand aucune raison n’est tapée ; une seule raison est appliquée directement. kicks.fixed-reason: true interdit la raison libre.

/sanction <joueur>

Ce menu propose des motifs prêts à l’emploi. Chaque motif enchaîne une ou plusieurs étapes (WARN avec une gravité, MUTE ou BAN avec une durée, KICK). Motifs fournis :

Motif Étapes
Insultes warn MOYEN
Spam / flood warn LEGER
Pub mute 1 jour + warn MOYEN
Arnaque warn GRAVE
Grief warn GRAVE
Cheat ban définitif
Menaces warn CRITIQUE

La raison par défaut d’un motif peut être modifiée dans le menu (sanction-menu.reason-editable). Le menu est aussi accessible depuis la gestion d’un report et depuis la fiche joueur.

/infractions <joueur> alias /casier, /history
/infractions top [ban|mute|warn|kick|all]

Le casier rassemble toutes les sanctions d’un joueur, de la plus récente à la plus ancienne, avec leur statut (en cours, expirée, levée, appel accepté…). Les autres modules y ajoutent leurs lignes (reports reçus, enquêtes). Les types affichés et leurs icônes se règlent dans infractions.types ; /infractions top affiche les joueurs les plus sanctionnés (28 par défaut).

Les warns, mutes et bans peuvent faire l’objet d’un appel, depuis les menus :

  1. Le joueur ouvre ses sanctions (/meswarns, /mesmutes) et dépose un appel avec une raison — permission cobaltstaff.<type>.appeals.create. Un staff peut déposer un appel pour un autre joueur (…appeals.create.other), utile pour un joueur banni.

  2. Le staff ayant cobaltstaff.<type>.appeals.notifications est prévenu.

  3. Un staff accepte (…appeals.approve) ou refuse (…appeals.reject) l’appel, avec une raison si resolve-reason-enabled est actif.

  4. Si l’appel est accepté : le warn est annulé (et les paliers déclenchés sont annulés), le mute ou le ban est levé (unmute-on-approve, unban-on-approve). Des commandes supplémentaires peuvent être lancées (on-approved-commands, on-rejected-commands).

<type> vaut warnings, mutes ou bans. La raison d’appel peut être imposée parmi une liste (fixed-reason, reasons).

Avec announce: true, chaque ban, mute, kick et warn est annoncé à tous les joueurs, sauf avec -silent. Le staff reçoit toujours une notification (permissions cobaltstaff.<type>.notifications).

Commande Effet
/cobaltstaff import litebans [gravité] Importe bans, mutes, kicks, warns et l’historique des pseudos et IP depuis LiteBans. Ré-exécutable sans doublon.
/bans migrer Importe les bans du serveur vanilla.
/ipbans migrer Importe les bans IP du serveur vanilla.

L’import LiteBans demande cobaltstaff.bans.migrate. LiteBans n’ayant pas de gravité, les warns importés reçoivent la gravité passée en argument, ou import.litebans.warn-severity (par défaut LEGER).

Permission Effet
cobaltstaff.bans.bypass Ne peut pas être banni
cobaltstaff.mutes.bypass Ne peut pas être rendu muet
cobaltstaff.kicks.bypass Ne peut pas être kické
cobaltstaff.warnings.bypass Ne peut pas être warn