| | Antibad - Gelişmiş Badnick Korumasi. (2026) AntiBad — BadNick Koruma & Kanal Güvenlik Botu (mIRC)
Kanallarınızı istenmeyen/zararlı nicklerden otomatik koruyan, hafif ve tamamen özelleştirilebilir bir mIRC güvenlik scripti.
🔧 Özellikler
🛡️ Otomatik BadNick Koruması — Join/nick değişikliğinde anlık kontrol, regex tabanlı esnek eşleştirme
🌐 Uzaktan Liste Güncelleme — Kural listesi GitHub üzerinden otomatik çekilir, !bad reload ile anında yenilenir
💾 Kalıcı Depolama — Whitelist, geçmiş ve loglar diske kaydedilir; script yeniden başlasa bile kaybolmaz
📴 Çevrimdışı Yedek — İnternet/GitHub'a erişilemezse son çekilen liste diskten kullanılmaya devam eder
🔍 Periyodik Tam Tarama — Kanaldaki tüm kullanıcıları belirli aralıklarla otomatik tarar
⚙️ 4 Farklı Aksiyon Modu — kick, kill, ban, warn (sadece izleme/bildirim)
✅ Whitelist Desteği — Joker karakterli (Guest*) istisna tanımlama
🔁 Tekrarlayan İhlal Takibi — Aynı IP'den gelen tekrar ihlaller operlere otomatik bildirilir
🔐 Tek Seferlik Admin Girişi — !bad login <parola> ile hem NickServ identify hem de parola doğrulanır; bir kez giriş yapan admin oturum boyunca (nick değişse bile) tekrar login olmadan komutları kullanabilir
📊 Durum Paneli — !bad status ile anlık bot durumu, kural/whitelist sayısı tek bakışta
! HTML-Kodu bad login <parola> | !bad logout
!bad on/off | !bad status
!bad scan | !bad scan on/off
!bad reload | !bad action kick/kill/ban/warn
!bad add <regex> | !bad del <regex> | !bad list
!bad allow/deny <nick> | !bad whitelist
!bad history <nick> | !bad clearhistory <nick>
!bad log | !bad opers | !bad whoauth | !bad save ; HTML-Kodu ============================================================
; AntiBad vFinal++ (LOGIN SİSTEMLİ)
; BadNick Koruması + Tarama + Whitelist + Geçmiş Uyarı
; Kalıcı Depolama + Tek Seferlik Identify+OperPass Girişi
; Bot Nick : AntiBad
; Nick Pass: deneme123
; Oper Pass: deneme123
; ============================================================
on *:START: {
.timer 1 2 AntiBad.Init
}
alias AntiBad.Init {
set %AntiBad.botnick AntiBad
set %AntiBad.nickpass deneme123
set %AntiBad.operpass deneme123
set %AntiBad.badlist.host raw.githubusercontent.com
set %AntiBad.badlist.path /example/badnicks/main/list.txt
set %AntiBad.enabled 1
set %AntiBad.action kick
set %AntiBad.scan.interval 300
set %AntiBad.scan.enabled 1
set %AntiBad.scan.cooldown 10
set %AntiBad.data.dir $+($scriptdir,AntiBadData,\)
if (!$isdir(%AntiBad.data.dir)) mkdir $qt(%AntiBad.data.dir)
hmake AntiBad.badlist 2000
hmake AntiBad.whitelist 300
hmake AntiBad.history 1000
hmake AntiBad.opers 100
hmake AntiBad.log 500
hmake AntiBad.auth 100
hmake AntiBad.pendingauth 50
AntiBad.LoadState
echo -a AntiBad vFinal++ yüklendi.
AntiBad.FetchList
if (%AntiBad.scan.enabled) AntiBad.StartScan
}
; ==================== KALICI DEPOLAMA ====================
; Not: auth/pendingauth kasıtlı olarak kaydedilmez — girişler oturuma özeldir,
; script yeniden başladığında herkes tekrar !bad login yapmalıdır.
alias AntiBad.LoadState {
if ($isfile($+(%AntiBad.data.dir,badlist.hsh))) hload AntiBad.badlist $qt($+(%AntiBad.data.dir,badlist.hsh))
if ($isfile($+(%AntiBad.data.dir,whitelist.hsh))) hload AntiBad.whitelist $qt($+(%AntiBad.data.dir,whitelist.hsh))
if ($isfile($+(%AntiBad.data.dir,history.hsh))) hload AntiBad.history $qt($+(%AntiBad.data.dir,history.hsh))
if ($isfile($+(%AntiBad.data.dir,log.hsh))) hload AntiBad.log $qt($+(%AntiBad.data.dir,log.hsh))
echo -a AntiBad: kayıtlı veriler yüklendi (whitelist: $hget(AntiBad.whitelist).size $+ , badlist yedek: $hget(AntiBad.badlist).size $+ )
}
alias AntiBad.SaveState {
hsave AntiBad.badlist $qt($+(%AntiBad.data.dir,badlist.hsh))
hsave AntiBad.whitelist $qt($+(%AntiBad.data.dir,whitelist.hsh))
hsave AntiBad.history $qt($+(%AntiBad.data.dir,history.hsh))
hsave AntiBad.log $qt($+(%AntiBad.data.dir,log.hsh))
}
on *:UNLOAD: {
sockclose AntiBad.sock
.timerAntiBadScan off
AntiBad.SaveState
}
; ==================== WEB'DEN LİSTE ÇEKME ====================
alias AntiBad.FetchList {
sockclose AntiBad.sock
unset %AntiBad.listready
unset %AntiBad.headersdone
sockopen AntiBad.sock %AntiBad.badlist.host 443
}
on *:SOCKOPEN:AntiBad.sock: {
if ($sockerr) {
echo -a AntiBad: bağlantı hatası → $sock($sockname).wsmsg $+ . Yerel yedek liste kullanılıyor (kural sayısı: $hget(AntiBad.badlist).size $+ ).
return
}
sockwrite -n $sockname GET %AntiBad.badlist.path HTTP/1.1
sockwrite -n $sockname Host: %AntiBad.badlist.host
sockwrite -n $sockname Connection: close
sockwrite -n $sockname $crlf
}
on *:SOCKREAD:AntiBad.sock: {
if ($sockerr) {
echo -a AntiBad: okuma hatası → $sock($sockname).wsmsg
return
}
var %d, %new = 0
while (1) {
sockread %d
if ($sockerr) break
if ($sockbr == 0) break
if ($regex(%d,/^HTTP\/1\.[01] 200/)) { set %AntiBad.listready 1 | continue }
if (!%AntiBad.headersdone) {
if (%d == $null) set %AntiBad.headersdone 1
continue
}
if (%AntiBad.listready && %AntiBad.headersdone && $regex(%d,/^[^#\s].+/)) {
hadd -m AntiBad.badlist $md5(%d) %d
inc %new
}
}
}
on *:SOCKCLOSE:AntiBad.sock: {
unset %AntiBad.listready
unset %AntiBad.headersdone
echo -a Badnick listesi güncellendi → $hget(AntiBad.badlist).size kural
AntiBad.SaveState
}
; ==================== TEK NOKTADAN EŞLEŞTİRME ====================
alias AntiBad.Match {
var %n = $1, %i = 1
while ($hget(AntiBad.badlist,%i).item) {
var %p = $hget(AntiBad.badlist,%i)
if ($regex(%n,/ $+ %p $+ /i)) return %p
inc %i
}
return $null
}
; ==================== BADNICK KONTROL ====================
on *:JOIN:#: {
if (%AntiBad.enabled) AntiBad.Check $nick $chan
}
on *:NICK: {
; oturum kimliğini yeni nick'e taşı (yeniden login gerekmesin)
if ($hget(AntiBad.auth,$nick)) {
hadd -m AntiBad.auth $newnick $hget(AntiBad.auth,$nick)
hdel AntiBad.auth $nick
}
if (%AntiBad.enabled) AntiBad.Check $newnick
}
on *:QUIT: {
if ($hget(AntiBad.auth,$nick)) hdel AntiBad.auth $nick
if ($hget(AntiBad.pendingauth,$nick)) hdel AntiBad.pendingauth $nick
}
alias AntiBad.Check {
if ($AntiBad.IsWhitelisted($1)) return
var %n = $1, %c = $2
var %p = $AntiBad.Match(%n)
if (%p) {
AntiBad.Action %n %c %p
AntiBad.RecordHistory %n
}
}
alias AntiBad.Action {
var %n = $1, %c = $2, %p = $3
if (%AntiBad.action == kick) {
if (%c) kick %c %n BadNick: %p
else .raw KILL %n :BadNick: %p
}
elseif (%AntiBad.action == kill) .raw KILL %n :BadNick: %p
elseif (%AntiBad.action == ban) {
if (%c) {
mode %c +b *!*@ $+ $address(%n,2)
kick %c %n BadNick
}
}
elseif (%AntiBad.action == warn) {
; sadece logla ve operlere bildir, kick/ban yapma
}
AntiBad.Log BADNICK %n → %p (aksiyon: %AntiBad.action)
}
; ==================== WHITELIST ====================
alias AntiBad.IsWhitelisted {
if ($hfind(AntiBad.whitelist,$1,0,w).item) return $true
return $false
}
; ==================== TEKRAR EDEN İHLAL (Sadece Uyarı) ====================
alias AntiBad.RecordHistory {
var %n = $1
var %ip = $address(%n,2)
if (!%ip) return
var %key = $md5(%ip)
var %count = $hget(AntiBad.history,%key)
if (!%count) %count = 0
inc %count
hadd -m AntiBad.history %key %count
if (%count >= 2) AntiBad.WarnOpers %n %ip %count
}
alias AntiBad.WarnOpers {
var %n = $1, %ip = $2, %count = $3
var %msg = [BADNICK UYARI] %n (IP: %ip) → %count $+ . ihlal
var %i = 1
while ($hget(AntiBad.opers,%i).item) {
var %op = $hget(AntiBad.opers,%i).item
if ($comchan(%op,0)) notice %op %msg
inc %i
}
AntiBad.Log REPEAT %n → %count $+ . ihlal (IP: %ip)
}
; ==================== TARAMA SİSTEMİ ====================
alias AntiBad.StartScan {
.timerAntiBadScan 0 %AntiBad.scan.interval AntiBad.FullScan
echo -a Otomatik tarama aktif (her %AntiBad.scan.interval sn)
}
alias AntiBad.FullScan {
if (!%AntiBad.enabled) return
if ($timer(AntiBadScanCooldown)) { echo -a AntiBad: tarama zaten yeni tamamlandı, kısa süre bekleyin. | return }
.timerAntiBadScanCooldown 1 %AntiBad.scan.cooldown echo -a AntiBad: tarama tekrar kullanılabilir.
echo -a [TARAMA] Başladı...
var %total = 0, %caught = 0, %i = 1
while ($chan(%i)) {
var %c = $chan(%i), %j = 1
while ($nick(%c,%j)) {
var %n = $nick(%c,%j)
if (%n != $me && !$AntiBad.IsWhitelisted(%n)) {
inc %total
var %p = $AntiBad.Match(%n)
if (%p) {
AntiBad.Action %n %c %p
AntiBad.RecordHistory %n
inc %caught
}
}
inc %j
}
inc %i
}
echo -a [TARAMA] Bitti → %total nick / %caught badnick
AntiBad.Log SCAN %total tarandı / %caught yakalandı
}
; ==================== OPER / ADMIN TANIMA (botun kendisi) ====================
raw 381:*: {
hadd -m AntiBad.opers $me $ctime
AntiBad.Log OPER-SUCCESS $me
}
; ==================== IDENTIFY & OPERPASS TAKİBİ (botun kendisi) ====================
on *:NOTICE:*: {
if ($nick == NickServ) {
if (Password accepted isin $1-) AntiBad.Log IDENTIFY-SUCCESS $target
elseif ((incorrect isin $1-) || (wrong isin $1-) || (failed isin $1-)) {
AntiBad.Log IDENTIFY-FAIL $target → $1-
}
}
}
on *:INPUT:*: {
if ($1 == /oper) AntiBad.Log OPER-ATTEMPT $me → $2
}
; ==================== ADMIN GİRİŞİ (Tek Seferlik Identify + OperPass) ====================
; Kullanım: !bad login <operpass>
; 1) Girilen parola %AntiBad.operpass ile karşılaştırılır.
; 2) Doğruysa kullanıcı WHOIS edilir; NickServ'e identify olup olmadığı (hesap adı) kontrol edilir.
; 3) İkisi de geçerse kullanıcı AntiBad.auth tablosuna eklenir ve bir daha login istenmez
; (nick değiştirse bile oturumu korunur, sadece QUIT/disconnect'te düşer).
alias AntiBad.HandleLogin {
var %who = $1, %pass = $2
if (!%pass) { notice %who Kullanım: !bad login <operpass> | return }
if ($hget(AntiBad.auth,%who)) { notice %who Zaten giriş yapmışsınız. | return }
if (%pass != %AntiBad.operpass) {
AntiBad.Log LOGIN-FAIL %who → yanlış parola
notice %who Parola hatalı.
return
}
hadd -m AntiBad.pendingauth %who $ctime
notice %who Parola doğru, NickServ kimliğiniz kontrol ediliyor...
whois %who
}
raw 330:*: {
; :sunucu 330 benimnick hedefnick hesapadi :is logged in as
var %target = $2, %account = $3
if ($hget(AntiBad.pendingauth,%target)) {
hdel AntiBad.pendingauth %target
hadd -m AntiBad.auth %target $ctime
notice %target AntiBad: Giriş başarılı ( $+ %account $+ hesabıyla identify onaylandı). Artık !bad komutlarını kullanabilirsiniz.
AntiBad.Log LOGIN-SUCCESS %target ( $+ %account $+ )
}
}
raw 318:*: {
; End of /WHOIS — buraya kadar 330 gelmediyse identify olmamış demektir
var %target = $2
if ($hget(AntiBad.pendingauth,%target)) {
hdel AntiBad.pendingauth %target
notice %target AntiBad: Giriş reddedildi — NickServ'e identify olmamışsınız. Önce nick'inizi identify edin, sonra tekrar deneyin.
AntiBad.Log LOGIN-FAIL %target → identify yok
}
}
raw 401:*: {
; No such nick — pending kaydını temizle
var %target = $2
if ($hget(AntiBad.pendingauth,%target)) hdel AntiBad.pendingauth %target
}
; ==================== LOG ====================
alias AntiBad.Log {
var %msg = $asctime(HH:nn:ss) [ $+ $1 $+ ] $2-
hadd -m AntiBad.log $ctime %msg
echo -s %msg
}
; ==================== KOMUTLAR ====================
on *:TEXT:!bad*:*: {
; login/logout, staff olma şartı aranmadan herkese açık
if ($2 == login) { AntiBad.HandleLogin $nick $3 | return }
if ($2 == logout) {
if ($hget(AntiBad.auth,$nick)) {
hdel AntiBad.auth $nick
notice $nick Çıkış yapıldı.
}
else notice $nick Zaten giriş yapılmamış.
return
}
if (!$AntiBad.IsStaff($nick)) {
notice $nick Yetkiniz yok. Giriş yapmak için: !bad login <operpass>
return
}
if ($2 == on) {
set %AntiBad.enabled 1
notice $nick AntiBad AKTİF
}
elseif ($2 == off) {
set %AntiBad.enabled 0
notice $nick AntiBad PASİF
}
elseif ($2 == scan && $3 == on) {
set %AntiBad.scan.enabled 1
AntiBad.StartScan
notice $nick Otomatik tarama AÇIK
}
elseif ($2 == scan && $3 == off) {
set %AntiBad.scan.enabled 0
.timerAntiBadScan off
notice $nick Otomatik tarama KAPALI
}
elseif ($2 == scan) {
notice $nick Manuel tarama başlatılıyor...
AntiBad.FullScan
}
elseif ($2 == reload) {
hfree AntiBad.badlist
hmake AntiBad.badlist 2000
AntiBad.FetchList
notice $nick Liste yeniden çekiliyor...
}
elseif ($2 == action) {
if ($istok(kick kill ban warn,$3,32)) {
set %AntiBad.action $3
notice $nick Aksiyon → $3
}
else notice $nick Geçersiz aksiyon. Seçenekler: kick, kill, ban, warn
}
elseif ($2 == list) {
notice $nick Badnick kural sayısı: $hget(AntiBad.badlist).size
}
elseif ($2 == add && $3) {
hadd -m AntiBad.badlist $md5($3-) $3-
notice $nick Eklendi: $3-
AntiBad.SaveState
}
elseif ($2 == del && $3) {
hdel AntiBad.badlist $md5($3-)
notice $nick Silindi: $3-
AntiBad.SaveState
}
elseif ($2 == allow && $3) {
hadd -m AntiBad.whitelist $3 $ctime
notice $nick $3 whitelist'e eklendi
AntiBad.SaveState
}
elseif ($2 == deny && $3) {
hdel AntiBad.whitelist $3
notice $nick $3 whitelist'ten çıkarıldı
AntiBad.SaveState
}
elseif ($2 == whitelist) {
notice $nick Whitelist ($hget(AntiBad.whitelist).size):
var %i = 1
while ($hget(AntiBad.whitelist,%i).item) {
notice $nick → $hget(AntiBad.whitelist,%i).item
inc %i
}
}
elseif ($2 == history && $3) {
var %ip = $iif($address($3,2),$address($3,2),$3)
var %count = $hget(AntiBad.history,$md5(%ip))
notice $nick $3 → $iif(%count,%count,0) ihlal
}
elseif ($2 == clearhistory && $3) {
var %ip = $iif($address($3,2),$address($3,2),$3)
hdel AntiBad.history $md5(%ip)
notice $nick $3 geçmişi temizlendi
}
elseif ($2 == log) {
notice $nick Son 8 log:
var %i = $hget(AntiBad.log).size
var %end = $calc(%i - 7)
if (%end < 1) %end = 1
while (%i >= %end) {
notice $nick $hget(AntiBad.log,$hget(AntiBad.log,%i).item)
dec %i
}
}
elseif ($2 == opers) {
notice $nick Bilinen Operler:
var %i = 1
while ($hget(AntiBad.opers,%i).item) {
notice $nick → $hget(AntiBad.opers,%i).item
inc %i
}
}
elseif ($2 == whoauth) {
notice $nick Giriş yapmış adminler ($hget(AntiBad.auth).size):
var %i = 1
while ($hget(AntiBad.auth,%i).item) {
notice $nick → $hget(AntiBad.auth,%i).item
inc %i
}
}
elseif ($2 == status) {
notice $nick — AntiBad Durum —
notice $nick Durum: $iif(%AntiBad.enabled,AKTİF,PASİF) | Aksiyon: %AntiBad.action
notice $nick Otomatik tarama: $iif(%AntiBad.scan.enabled,AÇIK,KAPALI) (her %AntiBad.scan.interval sn)
notice $nick Badnick kuralı: $hget(AntiBad.badlist).size | Whitelist: $hget(AntiBad.whitelist).size | Giriş yapmış admin: $hget(AntiBad.auth).size
}
elseif ($2 == save) {
AntiBad.SaveState
notice $nick Veriler diske kaydedildi.
}
else {
notice $nick AntiBad Komutları:
notice $nick !bad login <operpass> | !bad logout
notice $nick !bad on/off | !bad status | !bad scan | !bad scan on/off
notice $nick !bad reload | !bad action kick/kill/ban/warn
notice $nick !bad list | !bad add <regex> | !bad del <regex>
notice $nick !bad allow/deny <nick> | !bad whitelist
notice $nick !bad history <nick> | !bad clearhistory <nick>
notice $nick !bad log | !bad opers | !bad whoauth | !bad save
}
}
; Zaten IRCOp olan veya @/&/~ yetkisi olan kişiler ek login yapmadan da kullanabilir;
; login sistemi IRCOp olmayan ama parolayı bilen adminler için ek bir yol sağlar.
alias AntiBad.IsStaff {
if ($hfind(AntiBad.opers,$1,0).item) return $true
if ($left($usermode($1),1) isin @&~) return $true
if ($hget(AntiBad.auth,$1)) return $true
return $false
}
; Bağlanınca otomatik identify + oper
on *:CONNECT: {
.timer 1 3 ns identify %AntiBad.nickpass
.timer 1 6 oper %AntiBad.botnick %AntiBad.operpass
}
________________
"Sevilmenin kıymeti bilinmiyorsa, Uzaklaşmak En güzeli ki üzülen sen olmayasın" |