Documentation

Tout ce qu'il faut savoir pour installer Protector, le configurer et tirer parti de ses systèmes. Dans Discord, la commande /informations donne aussi un guide interactif de chaque module.

Sommaire

Démarrage rapide

  1. Ajoute le bot à ton serveur depuis le bouton « Ajouter à Discord » de l'accueil.
  2. Place le rôle « Protector » tout en haut de ta liste de rôles. C'est essentiel : un rôle ne peut jamais agir sur un rôle situé au-dessus de lui. Sans ça, certaines actions (anti-nuke, restauration, sanctions) échoueront.
  3. Lance /autoconfig : choisis ta langue et un niveau de protection (1 = léger, 2 = standard, 3 = strict). Protector active et règle tous les modules, crée un salon de logs et un portail de vérification.

C'est suffisant pour être protégé. Tu peux ensuite tout ajuster à la main.

Configuration

La commande /config ouvre un panneau interactif (un seul message, privé). Chaque module a un bouton pour l'activer/désactiver, des formulaires pour les seuils et durées, et des menus pour choisir les salons et rôles. Tout est enregistré instantanément, serveur par serveur.

Le bouton 🌐 Langue change la langue du serveur (français ou anglais). La commande /informations bascule la langue rien que pour toi, le temps de lire.

⚠️ Seuls les membres ayant la permission Gérer le serveur peuvent ouvrir et modifier la configuration.

Systèmes de protection

Anti-raid

Détecte un afflux anormal d'arrivées sur une courte période et passe le serveur en lockdown : il élève le niveau de vérification et expulse ou bannit les comptes trop récents pendant la durée du raid. Réglable : seuil et fenêtre d'arrivées, âge minimum du compte, action, durée.

Anti-spam

Bloque le flood, les messages identiques répétés, les mentions de masse et les liens d'invitation. Il gère aussi les applications ajoutées à un profil (apps utilisateur) : en cas de spam, l'auteur est expulsé, l'app bannie si possible et les messages supprimés. Un spam du même message dans plusieurs salons alerte aussi l'équipe Protector.

Anti-nuke & restauration

Si un membre ou un bot enchaîne des actions destructrices en masse (suppression de salons/rôles, bans en rafale, webhooks), Protector le neutralise, prévient le propriétaire, puis restaure la structure depuis une sauvegarde récente : salons, rôles, permissions, positions, nom et icône, et il relie automatiquement ta configuration aux salons recréés.

La sanction est graduée pour les humains : une blacklist globale n'est appliquée qu'au-delà d'un certain nombre d'actions destructrices. En-dessous, c'est une sanction locale et une restauration. Un bot raideur, lui, est toujours blacklisté.

Anti-phishing, anti-webhook, anti-bot

Filtre NSFW

Analyse le texte (liste de mots tolérante aux contournements comme « p.o.r.n » ou le leet, sans bloquer les mots innocents) et les images (analyse locale). Tu peux autoriser des salons précis et choisir l'action (supprimer, ou supprimer + timeout).

Score de risque

À chaque arrivée, Protector calcule une note de 0 à 100 en combinant l'âge du compte, la réputation réseau (déjà blacklisté ailleurs ?), l'avatar par défaut et la ressemblance pseudo/avatar avec des raiders connus. Le badge est journalisé ; une action automatique au-delà d'un score élevé est possible (désactivée par défaut).

Surveillance du staff

Quand un rôle à permissions sensibles est attribué à un compte jugé à risque (trop récent, présent depuis peu), Protector alerte le propriétaire et retire le rôle si possible.

Vérification

Les nouveaux membres sont mis en quarantaine : ils ne voient que le salon de vérification. Deux modes au choix dans /config → Vérification :

Tu peux aussi définir un rôle ajouté automatiquement après la vérification. Mise en place : /verification-setup role:<rôle de quarantaine> channel:<salon de vérif>.

Modération & casier

Commandes classiques : /warn, /mute, /kick, /ban, /unmute, /unban, /tempban. Chaque sanction est enregistrée dans un casier par serveur, consultable avec /history. Les sanctions faites en dehors du bot (via le journal d'audit Discord) sont aussi captées. /lockdown et /unlock verrouillent/déverrouillent tout le serveur en cas d'urgence.

Signalements

Clic droit sur un message → Signaler le message : un formulaire envoie le message au salon de signalements du serveur, où le staff peut sanctionner ou ignorer. Clic droit sur un membre → Signaler l'utilisateur : un rapport (raison, liens, images) est envoyé à l'équipe Protector, qui peut l'examiner sans rejoindre ton serveur.

Journal d'évènements

Désactivé par défaut. Une fois activé, tu choisis les catégories à journaliser (messages, membres, modération, rôles, salons, serveur, vocal) et un salon par défaut ; chaque catégorie peut avoir son propre salon. Les logs sont envoyés via un webhook propre à chaque salon, détaillés (auteur, contenu du changement, permissions d'un salon créé, etc.).

Sauvegarde & restauration

Réservé au propriétaire, et indépendant des sauvegardes internes de l'anti-nuke. /backup create capture la structure complète (rôles, salons, permissions, derniers messages texte). /backup list et /backup delete gèrent tes sauvegardes. /restore affiche le contenu d'une sauvegarde, te laisse choisir de restaurer ou non les messages, puis restaure. Une sauvegarde automatique est créée à l'arrivée du bot.

Blacklist réseau & appels

Quand un utilisateur atteint un niveau d'infraction très élevé (ou lors d'un nuke confirmé), il est blacklisté globalement : banni de tous les serveurs que Protector protège, et bloqué s'il tente d'en rejoindre un. Il est prévenu en MP au préalable. La commande /appeal lui permet de contester ; l'équipe Protector approuve (levée de la blacklist) ou refuse. Le pouvoir de blacklist est réservé à l'équipe Protector — les administrateurs de serveur n'y ont pas accès.

Premium & Premium Plus

Tous les systèmes ci-dessus sont gratuits. Le premium ajoute des analyses en plus :

PalierCe qu'il ajoute
PremiumModération par IA sur les messages signalés (juge le contexte : haine codée, contournements, sarcasme) et analyse NSFW contextuelle plus fine.
Premium PlusAnalyse en temps réel de chaque message (menaces, haine, toxicité sévère) avec action automatique, et plus de slots de sauvegarde.

Le premium s'obtient via l'abonnement Discord. L'analyse par un service tiers (utilisée par ces options) reste activable par l'administrateur et est décrite dans la politique de confidentialité.

Webhook sortant Premium Plus

Protector peut envoyer chaque incident de sécurité vers votre propre serveur, en HTTPS, pour l'archiver, déclencher une alerte ou l'intégrer à vos outils. Chaque requête est signée cryptographiquement : vous pouvez prouver qu'elle vient bien de Protector et qu'elle n'a pas été modifiée en route.

Mise en place

Le propriétaire du serveur (et lui seul) configure l'endpoint :

CommandeRôle
/webhook set url:<https://…>Définit l'endpoint et affiche la clé de signature
/webhook keyRéaffiche la clé (message privé, masquée)
/webhook rotateRégénère la clé si elle a fuité — l'ancienne cesse immédiatement de fonctionner
/webhook testEnvoie un évènement de test
/webhook statusÉtat, dernier envoi, échecs consécutifs
/webhook disableCoupe l'envoi sans effacer la configuration

Contraintes de sécurité : l'URL doit être en HTTPS, et les adresses locales ou privées sont refusées (localhost, 127.x, 10.x, 192.168.x, 172.16–31.x, 169.254.x, .local). Après 20 échecs consécutifs, l'envoi se désactive automatiquement pour ne pas marteler un endpoint hors service.

Ce que Protector envoie

Une requête POST avec un corps JSON. Les en-têtes :

En-têteContenu
X-Protector-EventType d'évènement (ex. incident.nuke)
X-Protector-TimestampHorodatage Unix (secondes) de l'envoi
X-Protector-Signaturesha256=<signature hexadécimale>
Content-Typeapplication/json

Types d'évènements actuels : incident.raid, incident.nuke, incident.spam, incident.lockdown, et test.

Exemple de corps reçu :

{
  "type": "incident.nuke",
  "guild": {
    "id": "123456789012345678",
    "name": "Mon serveur",
    "member_count": 1250
  },
  "culprit_id": "987654321098765432",
  "adder_id": null,
  "description": "Actions destructrices en masse détectées…",
  "guild_id": "123456789012345678",
  "sent_at": "2026-07-31T02:14:07.512Z"
}

Aucun contenu de message privé n'est transmis : seuls l'identifiant du serveur, celui du ou des responsables, et le résumé de l'incident.

Vérifier la signature

La signature est un HMAC-SHA256 calculé sur la chaîne timestamp + "." + corps brut, avec votre clé secrète. Utilisez le corps brut (avant tout parsing JSON) : ré-encoder le JSON changerait les octets et invaliderait la signature.

Exemple en Node.js (Express) :

import express from 'express';
import { createHmac, timingSafeEqual } from 'node:crypto';

const SECRET = process.env.PROTECTOR_SECRET; // la clé donnée par /webhook set
const app = express();

// Important : on garde le corps BRUT pour vérifier la signature
app.post('/protector', express.raw({ type: 'application/json' }), (req, res) => {
  const ts  = req.get('X-Protector-Timestamp');
  const sig = (req.get('X-Protector-Signature') || '').replace('sha256=', '');
  const raw = req.body.toString('utf8');

  // 1) Rejeter les requêtes trop anciennes (protection contre le rejeu)
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return res.sendStatus(408);

  // 2) Comparer les signatures à temps constant
  const expected = createHmac('sha256', SECRET).update(`${ts}.${raw}`).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(sig);
  if (a.length !== b.length || !timingSafeEqual(a, b)) return res.sendStatus(401);

  const event = JSON.parse(raw);
  console.log('Incident reçu :', event.type, event.guild.name);
  res.sendStatus(200); // répondez 2xx, sinon Protector comptera un échec
});

app.listen(3000);

Exemple en Python (Flask) :

import hmac, hashlib, time
from flask import Flask, request

SECRET = "votre_cle"
app = Flask(__name__)

@app.post("/protector")
def protector():
    ts  = request.headers.get("X-Protector-Timestamp", "0")
    sig = request.headers.get("X-Protector-Signature", "").replace("sha256=", "")
    raw = request.get_data(as_text=True)

    if abs(time.time() - int(ts)) > 300:
        return "", 408

    expected = hmac.new(SECRET.encode(), f"{ts}.{raw}".encode(), hashlib.sha256).hexdigest()
    if not hmac.compare_digest(expected, sig):
        return "", 401

    print("Incident reçu :", request.json["type"])
    return "", 200

Bonnes pratiques

Permissions requises

Pour fonctionner pleinement, Protector a besoin des permissions de modération (gérer les salons, les rôles, les messages, expulser, bannir, voir le journal d'audit, gérer les webhooks). Le plus important : son rôle doit être tout en haut de la hiérarchie. Discord ne permet jamais à un rôle d'agir sur un rôle situé plus haut — c'est la cause n°1 des « action impossible ».

Liste des commandes

/autoconfigConfiguration automatique complète
/configPanneau de configuration interactif
/informationsGuide interactif de tous les systèmes
/verification-setupMet en place le portail de vérification
/warn /mute /kick /banSanctions de modération
/unmute /unban /tempbanLevée de sanction / ban temporaire
/historyCasier d'un membre
/lockdown /unlockVerrouillage d'urgence
/backup /restoreSauvegarde et restauration du serveur
/invitesQui a invité qui
/statsStatistiques de modération
/appealContester une blacklist
/supportInvitation vers le serveur support
Signaler le message / l'utilisateurMenus contextuels (clic droit)

FAQ

Protector est-il gratuit ?

Oui. Toute la protection, la modération et la gestion sont gratuites. Le premium n'ajoute que des analyses optionnelles.

L'anti-nuke dit « action impossible », pourquoi ?

Le rôle de Protector n'est pas assez haut. Place-le tout en haut de la liste des rôles et donne-lui les permissions de modération.

La restauration récupère-t-elle les messages ?

Elle peut recréer les derniers messages texte des salons (via webhook), si l'option est activée. Les autres contenus ne sont pas conservés.

Mes données sont-elles en sécurité ?

Protector ne stocke que le strict nécessaire et n'analyse les messages qu'en temps réel, sans les conserver. Détails dans la politique de confidentialité.