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

Discord Anti Raid: bescherming tegen massale joins en spam

Het minst geliefde moment voor een groeiende Discord-server is wanneer tientallen nepaccounts binnen enkele minuten binnenstromen en de kanalen bedelven onder uitnodigingslinks en scheldwoorden. Een goed opgezet discord anti raid-systeem is precies wat dit stopt: het vangt massale joins, linkspam en gecoördineerde aanvallen binnen seconden, zonder te wachten op een mens. In deze gids bouwen we een gelaagde anti-raid-opzet vanaf nul met discord.js v14 — van een accountleeftijdfilter tot een automatische lockdown-modus.

Hoe ziet een raid eruit? (Dreigingsmodel)

Voordat je verdedigingen schrijft, moet je duidelijk hebben waartegen je je verdedigt. Een typische raid draagt minstens één van drie signalen:

  • Een join-golf: een groot aantal accounts dat binnen seconden de server binnenkomt.
  • Nieuwe/sjabloon-accounts: gebruikers die een paar uur geleden zijn aangemaakt, zonder avatar, met een gedeeld naampatroon.
  • Inhoudsspam: dezelfde uitnodigingslink (discord.gg/...) of kwaadaardige URL die de kanalen overspoelt.

Een goede verdediging bewaakt deze drie signalen apart en verstrakt naarmate ze zich opstapelen. Vertrouwen op één regel is een fout: kijk je alleen naar accountleeftijd, dan straf je echte nieuwkomers; kijk je alleen naar berichtspam, dan is de golf al binnen.

Vereiste intents en permissies

Een anti-raid-bot moet zowel join-events als berichtinhoud kunnen zien. Schakel in het Discord Developer Portal de privileged intents Server Members Intent en Message Content Intent in, en geef de rol van de bot de permissies Kick Members, Ban Members en Moderate Members.

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

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

De rol van de bot moet boven de rollen staan van de leden die hij gaat modereren; anders falen kick- en ban-aanroepen stilletjes.

Eerste laag: het accountleeftijdfilter

De meeste raid-bots zijn vers in bulk geproduceerde accounts. Kijk in het guildMemberAdd-event naar het aanmaakmoment van het account en behandel automatisch iedereen onder een gekozen drempel. Houd de drempel redelijk — een te agressieve waarde houdt echte nieuwe gebruikers bij de deur tegen.

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

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

Een kick verkiezen boven een automatische ban is veiliger: bij een vals positief kan de gebruiker gewoon opnieuw joinen. Voor een zachtere aanpak wijs je nieuwe leden, in plaats van te kicken, een "quarantaine"-rol toe en laat je ze achter voor handmatige goedkeuring.

Tweede laag: de join-golf opvangen

Hier leeft de echte discord anti raid-logica: zelfs als afzonderlijke accounts normaal lijken, is een uitbarsting van joins in een kort venster de raid. Meet de join-snelheid met een schuivend venster en vergrendel de server automatisch zodra de drempel wordt overschreden. Het verhogen van Discords verificatieniveau is de snelste lockdown — het verhindert nieuwe accounts onmiddellijk om te posten.

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

const joins = [];
const WINDOW = 10_000;   // 10 seconden
const THRESHOLD = 5;     // 5+ joins in 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: plotselinge join-golf',
    ).catch(() => {});
    // waarschuw moderators, vergrendel kanalen, enz.
  }
});

Je kunt een timer instellen om de lockdown automatisch op te heffen (bijvoorbeeld na 10 minuten terugzetten), maar bij serieuze aanvallen is het veiliger om moderators hem handmatig te laten opheffen. Kalibreer de drempels op de normale join-snelheid van je server: vijf joins in tien seconden is een duidelijke anomalie in een kleine community, maar kan volkomen normaal zijn in een grote.

Derde laag: link- en uitnodigingsspam stoppen

Zelfs als accounts erdoorheen glippen, komt de echte schade in berichten: reclame-uitnodigingen en kwaadaardige links. Vang in het messageCreate-event uitnodigingslinks met een eenvoudige regex, verwijder het bericht en geef de afzender tijdelijk een timeout.

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, 'Uitnodigingsspam').catch(() => {});
  }
});

Pas dezelfde aanpak toe op berichtsnelheid: als een gebruiker 5+ berichten in 5 seconden stuurt, is dat ook een spamsignaal. Houd de recente bericht-tijdstempels van elke gebruiker bij in een Map en pas een timeout toe wanneer de drempel wordt overschreden. Vergeet niet vertrouwde rollen op een whitelist te zetten — moderators die door je eigen bot worden gedempt is een ongewenste komedie.

Discords ingebouwde wapens: AutoMod en verificatie

Je hoeft niet alle last bij de bot te leggen. Met Discords AutoMod kun je trefwoord-, spam- en uitnodigingsblokkeerregels definiëren vanuit de serverinstellingen (of de API) zonder code te schrijven; deze regels draaien voordat een bericht wordt verzonden, dus spam wordt geblokkeerd nog voordat je bot het event ziet. Vul het aan met deze ingebouwde instellingen:

  • Verificatieniveau: minstens "Medium" (5+ minuten lidmaatschap) filtert automatisch de meeste raid-bots.
  • Regelscreening (Rules Screening): dwingt nieuwe leden de regels te accepteren en weert eenvoudige bots.
  • Lidmaatschapsscreening / poortwachter-bot: een verificatierol met één klik vertraagt geautomatiseerde accounts.

De meest robuuste opzet is gelaagd: AutoMod en ingebouwde verificatie zijn de eerste zeef, terwijl je eigen bot de signalen toevoegt die Discord zelf niet bewaakt, zoals join-snelheid en accountleeftijd.

Veelgestelde vragen

Auto-ban, kick of een quarantaine-rol?

Dat hangt van de context af. Een permanente ban past alleen bij duidelijke aanvallen; gezien het risico op vals positief is een kick vergevingsgezinder. De meest flexibele methode is een quarantaine-rol: die isoleert de verdachte van elk kanaal maar houdt hem binnen, zodat een moderator de uiteindelijke beslissing neemt.

Hoe zorg ik dat ik echte nieuwe leden niet ten onrechte straf?

Kalibreer drempels op het normale verkeer van je eigen server en log elke automatische actie naar een logkanaal. De logs een paar weken volgen, valse positieven opmerken en dan de waarden bijstellen is de veiligste manier om de juiste balans te vinden. Verkies bij twijfel een timeout of quarantaine boven een regelrechte ban.

Als ik AutoMod heb, waarom dan nog een aparte bot?

AutoMod is uitstekend in berichtinhoud, maar meet geen join-snelheid, kijkt niet naar accountleeftijd en vergrendelt niet automatisch tijdens een golf. Een eigen bot vult precies die gaten; samen gebruikt is de verdediging veel sterker.

Wil je een gelaagd anti-raid-systeem voor je server? Laten we samen een opzet plannen met accountleeftijdfilter, automatische lockdown, link/spam-bescherming en een logpaneel — neem contact op.

Bu kategorideki tüm yazılar →

Devamı için