aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Bots Discord

Discord Anti Raid : protection contre les arrivées massives et le spam

Le moment le plus redouté pour un serveur Discord en pleine croissance, c'est quand des dizaines de faux comptes affluent en quelques minutes et noient les salons sous des liens d'invitation et des insultes. Un système discord anti raid bien conçu est précisément ce qui arrête cela : il détecte les arrivées massives, le spam de liens et les attaques coordonnées en quelques secondes, sans attendre l'intervention d'un humain. Dans ce guide, nous construisons une protection anti-raid en couches, de zéro, avec discord.js v14 — du filtre d'ancienneté de compte au mode de verrouillage (lockdown) automatique.

À quoi ressemble un raid ? (Modèle de menace)

Avant d'écrire des défenses, clarifiez ce contre quoi vous vous protégez. Un raid typique porte au moins l'un de ces trois signaux :

  • Une vague d'arrivées : un grand nombre de comptes rejoignant le serveur en quelques secondes.
  • Des comptes neufs/clonés : des utilisateurs créés il y a quelques heures, sans avatar, avec un schéma de nom commun.
  • Du spam de contenu : le même lien d'invitation (discord.gg/...) ou une URL malveillante déversés dans les salons.

Une bonne défense surveille ces trois signaux séparément et se durcit à mesure qu'ils s'accumulent. Se fier à une seule règle est une erreur : ne regarder que l'âge du compte revient à punir de vrais nouveaux venus ; ne regarder que le spam de messages, c'est laisser la vague entrer.

Intents et permissions requis

Un bot anti-raid doit voir à la fois les événements d'arrivée et le contenu des messages. Dans le Discord Developer Portal, activez les intents privilégiés Server Members Intent et Message Content Intent, et accordez au rôle du bot les permissions Kick Members, Ban Members et Moderate Members.

const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
});

Le rôle du bot doit se situer au-dessus des rôles des membres qu'il modérera ; sinon, les appels kick et ban échouent silencieusement.

Première couche : le filtre d'ancienneté de compte

La plupart des bots de raid sont des comptes fraîchement produits en masse. Dans l'événement guildMemberAdd, examinez la date de création du compte et traitez automatiquement ceux qui passent sous un seuil choisi. Gardez un seuil raisonnable — une valeur trop agressive refoule de vrais nouveaux utilisateurs à la porte.

const MIN_ACCOUNT_AGE = 7 * 24 * 60 * 60 * 1000; // 7 jours

client.on('guildMemberAdd', async (member) => {
  const age = Date.now() - member.user.createdTimestamp;
  if (age < MIN_ACCOUNT_AGE) {
    await member.kick('Compte trop recent (anti-raid)').catch(() => {});
  }
});

Préférer un kick à un ban automatique est plus sûr : en cas de faux positif, l'utilisateur peut simplement revenir. Pour une approche plus douce, au lieu d'expulser, attribuez aux nouveaux membres un rôle de « quarantaine » et laissez-les en approbation manuelle.

Deuxième couche : attraper la vague d'arrivées

C'est ici que vit la vraie logique discord anti raid : même quand les comptes pris isolément paraissent normaux, une rafale d'arrivées dans une courte fenêtre est le raid. Mesurez le débit d'arrivées avec une fenêtre glissante et verrouillez le serveur automatiquement dès que le seuil est franchi. Élever le niveau de vérification de Discord est le verrouillage le plus rapide — il empêche instantanément les nouveaux comptes de publier.

const { GuildVerificationLevel } = require('discord.js');

const joins = [];
const WINDOW = 10_000;   // 10 secondes
const THRESHOLD = 5;     // 5+ arrivees en 10s = raid

client.on('guildMemberAdd', async (member) => {
  const now = Date.now();
  joins.push(now);
  while (joins.length && now - joins[0] > WINDOW) joins.shift();

  if (joins.length >= THRESHOLD) {
    await member.guild.setVerificationLevel(
      GuildVerificationLevel.High,
      'Anti-raid: vague d arrivees soudaine',
    ).catch(() => {});
    // prevenir les moderateurs, verrouiller les salons, etc.
  }
});

Vous pouvez programmer une minuterie pour lever le verrou automatiquement (par exemple revenir en arrière après 10 minutes), mais lors d'attaques sérieuses, il est plus sûr que les modérateurs le lèvent manuellement. Calibrez les seuils sur le débit d'arrivées normal de votre serveur : cinq arrivées en dix secondes est une anomalie évidente dans une petite communauté, mais peut être parfaitement normal dans une grande.

Troisième couche : stopper le spam de liens et d'invitations

Même quand des comptes passent au travers, le vrai dommage arrive dans les messages : invitations publicitaires et liens malveillants. Dans l'événement messageCreate, repérez les liens d'invitation avec une simple regex, supprimez le message et appliquez un timeout temporaire à l'expéditeur.

const inviteRegex = /(discord\.gg|discord(?:app)?\.com\/invite)\/\w+/i;

client.on('messageCreate', async (message) => {
  if (message.author.bot || !message.inGuild()) return;

  if (inviteRegex.test(message.content)) {
    await message.delete().catch(() => {});
    await message.member.timeout(10 * 60 * 1000, 'Spam d invitation').catch(() => {});
  }
});

Appliquez la même approche au débit de messages : si un utilisateur envoie 5+ messages en 5 secondes, c'est aussi un signal de spam. Conservez les horodatages récents de chaque utilisateur dans une Map et appliquez un timeout lorsque le seuil est franchi. N'oubliez pas de mettre en liste blanche les rôles de confiance — voir des modérateurs réduits au silence par votre propre bot est une comédie indésirable.

Les armes intégrées de Discord : AutoMod et vérification

Vous n'avez pas à tout faire reposer sur le bot. L'AutoMod de Discord permet de définir des règles de blocage par mots-clés, anti-spam et anti-invitation depuis les paramètres du serveur (ou l'API) sans écrire de code ; ces règles s'exécutent avant l'envoi d'un message, donc le spam est bloqué avant même que votre bot ne voie l'événement. Complétez-le avec ces réglages intégrés :

  • Niveau de vérification : au moins « Medium » (5+ minutes d'adhésion) filtre automatiquement la plupart des bots de raid.
  • Écran de règles (Rules Screening) : oblige les nouveaux membres à accepter les règles, éliminant les bots simples.
  • Filtrage à l'adhésion / bot de portail : un rôle de vérification en un clic ralentit les comptes automatisés.

La configuration la plus robuste est en couches : l'AutoMod et la vérification intégrée sont le premier tamis, tandis que votre bot personnalisé ajoute les signaux que Discord ne surveille pas seul, comme le débit d'arrivées et l'âge du compte.

Questions fréquentes

Ban automatique, kick, ou rôle de quarantaine ?

Cela dépend du contexte. Un ban permanent ne convient qu'aux attaques évidentes ; vu le risque de faux positif, un kick est plus indulgent. La méthode la plus flexible est le rôle de quarantaine : il isole le suspect de tous les salons mais le garde à l'intérieur, afin qu'un modérateur prenne la décision finale.

Comment être sûr de ne pas punir à tort de vrais nouveaux membres ?

Calibrez les seuils sur le trafic normal de votre propre serveur et journalisez chaque action automatique dans un salon de logs. Observer les journaux pendant quelques semaines, repérer les faux positifs, puis ajuster les valeurs, est le moyen le plus sûr de trouver le bon équilibre. En cas de doute, préférez un timeout ou une quarantaine à un ban pur et simple.

Si j'ai AutoMod, pourquoi un bot séparé ?

AutoMod excelle sur le contenu des messages, mais il ne mesure pas le débit d'arrivées, ne regarde pas l'âge du compte et ne verrouille pas automatiquement pendant une vague. Un bot personnalisé comble exactement ces lacunes ; utilisés ensemble, la défense est bien plus solide.

Vous voulez un système anti-raid en couches pour votre serveur ? Planifions ensemble une configuration avec filtre d'ancienneté de compte, verrouillage automatique, protection liens/spam et panneau de logs — contactez-moi.

Bu kategorideki tüm yazılar →

Devamı için