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.
Démarrage rapide
- Ajoute le bot à ton serveur depuis le bouton « Ajouter à Discord » de l'accueil.
- 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.
- 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.
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
- Anti-phishing : supprime les liens de scam (faux Nitro, vols de compte, domaines typosquattés) et sanctionne.
- Anti-webhook : quand un webhook poste du spam ou du phishing, c'est le webhook lui-même qui est supprimé.
- Anti-bot : les bots signalés comme malveillants sont bannis dès leur arrivée. Les bots de confiance peuvent être mis en whitelist.
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 :
- Bouton — un clic sur « Vérifier » débloque l'accès.
- Captcha image — à l'arrivée, un captcha est posté avec la mention du membre. Il recopie le code dans le salon ; bon code, son message et celui du bot sont supprimés et l'accès est débloqué.
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 :
| Palier | Ce qu'il ajoute |
|---|---|
| Premium | Modération par IA sur les messages signalés (juge le contexte : haine codée, contournements, sarcasme) et analyse NSFW contextuelle plus fine. |
| Premium Plus | Analyse 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 :
| Commande | Rôle |
|---|---|
/webhook set url:<https://…> | Définit l'endpoint et affiche la clé de signature |
/webhook key | Réaffiche la clé (message privé, masquée) |
/webhook rotate | Régénère la clé si elle a fuité — l'ancienne cesse immédiatement de fonctionner |
/webhook test | Envoie un évènement de test |
/webhook status | État, dernier envoi, échecs consécutifs |
/webhook disable | Coupe 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ête | Contenu |
|---|---|
X-Protector-Event | Type d'évènement (ex. incident.nuke) |
X-Protector-Timestamp | Horodatage Unix (secondes) de l'envoi |
X-Protector-Signature | sha256=<signature hexadécimale> |
Content-Type | application/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
- Répondez rapidement un code 2xx : au-delà de 8 secondes, l'envoi est considéré comme échoué. Traitez en arrière-plan si nécessaire.
- Rejetez les requêtes trop anciennes (fenêtre de 5 minutes recommandée) pour empêcher qu'une requête interceptée soit rejouée.
- Comparez à temps constant (
timingSafeEqual/compare_digest), jamais avec==. - Ne publiez jamais votre clé (dépôt Git, capture d'écran, ticket). En cas de doute :
/webhook rotate.
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 supportSignaler 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é.