Büyüyen bir Discord sunucusunun en sevilmediği anı, dakikalar içinde onlarca sahte hesabın akın edip kanalları davet linkleri ve küfürle doldurduğu andır. İyi kurulmuş bir discord anti raid sistemi tam burada devreye girer: toplu girişleri, link spam'ini ve koordineli saldırıları insan müdahalesi beklemeden saniyeler içinde yakalar ve durdurur. Bu rehberde discord.js v14 ile katmanlı bir anti-raid kurulumunu sıfırdan kuruyoruz — hesap yaşı filtresinden otomatik kilitlenme (lockdown) moduna kadar.
Bir raid neye benzer? (Tehdit modeli)
Önlem yazmadan önce neyi savunduğunu netleştir. Tipik bir raid üç işaretten en az birini taşır:
- Ani giriş dalgası: Saniyeler içinde çok sayıda hesabın sunucuya katılması.
- Yeni/şablon hesaplar: Birkaç saat önce açılmış, avatarsız, ortak isim deseni taşıyan kullanıcılar.
- İçerik spam'i: Aynı davet linkinin (
discord.gg/...) ya da kötü amaçlı bağlantının kanallara yağması.
İyi bir savunma bu üç sinyali ayrı ayrı izler ve birikince sertleşir. Tek bir kurala güvenmek hatalıdır: yalnızca hesap yaşına bakarsan gerçek yeni üyeleri cezalandırır, yalnızca mesaj spam'ine bakarsan dalga çoktan içeri girmiş olur.
Gerekli intent'ler ve izinler
Anti-raid botu hem giriş olaylarını hem de mesaj içeriğini görmek zorundadır. Discord Developer Portal'da Server Members Intent ve Message Content Intent privileged intent'lerini etkinleştir, botun rolüne Kick Members, Ban Members ve Moderate Members izinlerini ver.
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
Botun rolü, sunucu ayarlarında moderate edeceği üyelerin rollerinden daha yukarıda olmalı; aksi halde kick ve ban çağrıları sessizce başarısız olur.
İlk katman: hesap yaşı filtresi
Raid botlarının büyük kısmı toplu üretilmiş taze hesaplardır. guildMemberAdd olayında hesabın oluşturulma zamanına bakarak belirli bir eşiğin altındakileri otomatik karşıla. Eşiği makul tut — çok agresif bir değer gerçek yeni kullanıcıları kapıda vurur.
const MIN_ACCOUNT_AGE = 7 * 24 * 60 * 60 * 1000; // 7 gun
client.on('guildMemberAdd', async (member) => {
const age = Date.now() - member.user.createdTimestamp;
if (age < MIN_ACCOUNT_AGE) {
await member.kick('Hesap cok yeni (anti-raid)').catch(() => {});
}
});
Kick'i tamamen otomatik ban yerine tercih etmek daha güvenlidir: yanlış pozitif durumunda kullanıcı tekrar katılabilir. Daha yumuşak bir yaklaşım için kick yerine yeni üyeyi bir "karantina" rolüne atayıp manuel onaya bırakabilirsin.
İkinci katman: ani giriş dalgasını yakalamak
Asıl discord anti raid mantığı burada: tek tek hesaplar normal görünse bile, kısa sürede gelen yoğunluk raid'in kendisidir. Kayan zaman penceresiyle (sliding window) giriş hızını ölç; eşik aşılınca sunucuyu otomatik kilitle. Discord'un doğrulama seviyesini yükseltmek, yeni hesapların mesaj atmasını anında engelleyen en hızlı kilitleme yöntemidir.
const { GuildVerificationLevel } = require('discord.js');
const joins = [];
const WINDOW = 10_000; // 10 saniye
const THRESHOLD = 5; // 10 sn icinde 5+ giris = 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: ani giris dalgasi',
).catch(() => {});
// moderatorlere haber ver, kanallari kilitle, vs.
}
});
Kilidi otomatik açmak için bir zamanlayıcı kurabilirsin (örneğin 10 dakika sonra eski seviyeye dön), ancak ciddi saldırılarda kilidi manuel olarak moderatörlerin kaldırması daha güvenlidir. Eşik değerlerini sunucunun normal giriş hızına göre kalibre et: küçük bir toplulukta 10 saniyede 5 giriş bariz anomaliyken, büyük bir sunucuda normal olabilir.
Üçüncü katman: link ve davet spam'ini durdurmak
Hesaplar içeri sızsa bile, asıl zarar mesajlarla gelir: reklam davetleri ve kötü amaçlı bağlantılar. messageCreate olayında basit bir regex ile davet linklerini yakala, mesajı sil ve göndereni geçici olarak sustur (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, 'Davet spam').catch(() => {});
}
});
Aynı yaklaşımı mesaj hızına da uygula: bir kullanıcı 5 saniyede 5+ mesaj atıyorsa bu da spam sinyalidir. Her kullanıcı için son mesaj zaman damgalarını bir Map'te tutup eşik aşılınca timeout uygulayabilirsin. Whitelist (güvenilir roller) eklemeyi unutma; moderatörlerin kendi botun tarafından susturulması istenmeyen bir komedi olur.
Regex'i fazla genişletmemeye dikkat et: her bağlantıyı silmek meşru paylaşımları da engeller ve kullanıcıları bunaltır. Başlangıçta yalnızca davet linklerini ve bilinen kötü amaçlı kalıpları hedefle, ardından sunucunun ihtiyacına göre kuralları genişlet. Her silme ve timeout işlemini bir log kanalına da yansıt; böylece yanlış pozitifleri fark eder ve eşiklerini zamanla inceltirsin.
Discord'un yerleşik silahları: AutoMod ve doğrulama
Tüm yükü bota yıkmak zorunda değilsin. Discord'un AutoMod özelliği, sunucu ayarlarından (veya API'den) anahtar kelime, spam ve davet engelleme kurallarını kod yazmadan tanımlamanı sağlar; bu kurallar mesaj gönderilmeden önce çalışır, yani bot olayı görmeden spam zaten engellenir. Bunu şu yerleşik ayarlarla tamamla:
- Doğrulama seviyesi: En azından "Medium" (5+ dakika üyelik) raid botlarının çoğunu otomatik filtreler.
- Üyelik onay ekranı (Rules Screening): Yeni üyeleri kural kabulüne zorlar, basit botları eler.
- Onay kapısı (Membership Screening / kapıcı botu): Tek tıkla doğrulama rolü, otomatik hesapları yavaşlatır.
En sağlam kurulum katmanlıdır: AutoMod ve yerleşik doğrulama ilk süzgeçtir, özel botun ise giriş hızı ve hesap yaşı gibi Discord'un tek başına bakmadığı sinyalleri ekler.
Sık Sorulan Sorular
Otomatik ban mı, kick mi, yoksa karantina rolü mü?
Bağlama göre değişir. Kalıcı ban yalnızca net saldırılar için uygundur; yanlış pozitif riskini düşünürsek kick daha bağışlayıcıdır. En esnek yöntem karantina rolüdür: şüpheli üyeyi tüm kanallardan izole eder ama içeride tutar, böylece moderatör manuel karar verir.
Gerçek yeni üyeleri yanlışlıkla cezalandırmadan nasıl emin olurum?
Eşikleri kendi sunucunun normal trafiğine göre kalibre et ve her otomatik işlemi bir log kanalına yaz. Birkaç hafta logları izleyip yanlış pozitifleri görerek değerleri ayarlamak, doğru dengeyi bulmanın en güvenli yoludur. Şüpheli durumlarda doğrudan ban yerine timeout veya karantina tercih et.
AutoMod varken neden ayrı bir bota ihtiyacım var?
AutoMod mesaj içeriğinde mükemmeldir ama giriş hızını ölçmez, hesap yaşına bakmaz ve dalgada otomatik lockdown yapmaz. Özel bot tam da bu boşlukları doldurur; ikisi birlikte kullanıldığında savunma çok daha güçlü olur.
Sunucun için katmanlı bir anti-raid sistemi mi istiyorsun? Hesap yaşı filtresi, otomatik lockdown, link/spam koruması ve log paneliyle birlikte kurulumunu birlikte planlayalım — benimle iletişime geç.