Tekil Mesaj gösterimi
Alt 17 Ağustos 2026, 20:45   #1
KivanC Editör
✓
W r i t e r
KivanC - ait Kullanıcı Resmi (Avatar)

Standart Spamfilter Yönetim Paneli (menü/bar)

🛡️ mIRC Spamfilter Yönetim Scripti:

IRCop/Admin'ler için sunucu spamfilter'larını (ban/block/gline/kill/zline) komut satırına raw yazmadan, menüler ve pencereler üzerinden yönetmeyi sağlayan bir mIRC scripti.

✨ Özellikler
📋 Menü Entegrasyonu
Menü çubuğuna eklenen "Spamfilter Yönetimi" alt menüsünden tüm işlemlere tek tıkla erişim.

🖥️ Tam Yönetim Paneli:

Listbox tabanlı bir pencerede tüm kayıtlı filtreleri görüntüler; listeden bir satır seçip doğrudan Düzenle veya Sil yapabilirsin — kelimeyi elle yazmaya gerek yok.

➕ Dialog ile Kolay Ekleme:

Tip (ban/block/gline/kill/zline) ve etki alanı (c/ch/p/t/d/all/cch) açılır kutulardan (combobox) seçiliyor — yazım hatası imkansız. Kelime, tip, etki ve açıklama tek pencerede giriliyor.

✏️ Gerçek Düzenleme:

Panelden seçilen kayıt otomatik olarak ekleme formuna dolduruluyor, düzenleyip kaydettiğinde eski kayıt silinip yenisi ekleniyor.

🗑️ Onaylı Silme:

Tekli silme işlemlerinde "emin misiniz?" onayı var; yanlışlıkla filtre silmeyi engelliyor.

🔍 Arama

Liste penceresinde anlık filtreleme ile kelime/pattern arama.

📊 İstatistik

Tip bazlı sayım: kaç ban, block, gline, kill, zline kaydı olduğunu tek komutla gösteriyor.

💾 Dışa / İçe Aktarma

Tüm filtreleri .txt dosyasına yedekleyip başka bir sunucuya veya oturuma taşıyabiliyorsun.

⚠️ Toplu Temizleme

Tüm kayıtları silen komut çift onay istiyor (yanlışlıkla tüm listeyi silmeyi engellemek için).

❓ Yardım Komutu

/sfilter_yardim ile tüm komutların kısa açıklamalı listesi.

🗂️ Yerel Hash Tablosu

Eklenen/silinen/düzenlenen her kayıt local hash'te tutuluyor, panel her işlemden sonra otomatik yenileniyor — sunucuya sürekli stats s sorma zorunluluğu yok.

HTML-Kodu

/sfilter_ekle        - Hızlı ekleme (dialog)
/sfilter_sil         - Kelime yazarak silme
/sfilter_listele     - Sunucudan güncel listeyi çeker
/sfilter_bul         - Arama
/sfilter_istatistik  - Tip bazlı sayım
/sfilter_export      - Dışa aktar
/sfilter_import      - İçe aktar
/sfilter_temizle     - Tümünü sil (çift onaylı)
/sfilter_panel       - Tam yönetim paneli

HTML-Kodu

menu menubar {
  -
  Spamfilter Yönetimi
  .Spamfilter Paneli:/dialog -m sfilter_panel sfilter_panel
  .-
  .Hızlı Ekle:/dialog -m sfilter_ekle sfilter_ekle
  .Listele (Sunucudan):/sfilter_listele
  .İstatistik:/sfilter_istatistik
  .Dışa Aktar:/sfilter_export
  .İçe Aktar:/sfilter_import
  .Tümünü Temizle:/sfilter_temizle
  .Yardım:/sfilter_yardim
  -
}

; ================= DEĞİŞKENLER / HASH =================
on *:start:{
  if (!$hget(sfilters)) { hmake sfilters 100 }
}

; ================= EKLEME / DÜZENLEME DIALOG =================
dialog sfilter_ekle {
  title "Spamfilter Ekle / Düzenle"
  size -1 -1 220 150
  option dbu

  text "Kelime / Pattern:", 1, 10 10 200 10
  edit "", 2, 10 20 200 20

  text "Tip:", 3, 10 45 100 10
  combo 4, 10 55 100 60, drop

  text "Etki Alanı:", 5, 120 45 90 10
  combo 6, 120 55 90 60, drop

  text "Açıklama:", 7, 10 80 200 10
  edit "", 8, 10 90 200 20

  button "Kaydet", 9, 30 120 70 20, ok
  button "İptal", 10, 120 120 70 20, cancel
}

alias -l sfilter_dolgu {
  did -a sfilter_ekle 4 ban
  did -a sfilter_ekle 4 block
  did -a sfilter_ekle 4 gline
  did -a sfilter_ekle 4 kill
  did -a sfilter_ekle 4 zline

  did -a sfilter_ekle 6 all
  did -a sfilter_ekle 6 c
  did -a sfilter_ekle 6 ch
  did -a sfilter_ekle 6 p
  did -a sfilter_ekle 6 t
  did -a sfilter_ekle 6 d
  did -a sfilter_ekle 6 cch
}

on *:dialog:sfilter_ekle:init:0: {
  sfilter_dolgu
  ; Eğer düzenleme modundaysak (global %sf.edit.eski doluysa) alanları doldur
  if (%sf.edit.eski != $null) {
    did -o sfilter_ekle 2 1 %sf.edit.eski
    var %d1 = $hget(sfilters,%sf.edit.eski)
    if (%d1 != $null) {
      did -o sfilter_ekle 8 1 $gettok(%d1,3,32-)
      combo_sec sfilter_ekle 4 $gettok(%d1,1,32)
      combo_sec sfilter_ekle 6 $gettok(%d1,2,32)
    }
  }
  else {
    did -c sfilter_ekle 4 1
    did -c sfilter_ekle 6 1
  }
}

alias -l combo_sec {
  var %dlg = $1, %id = $2, %val = $3, %i = 1
  while ($did(%dlg,%id,%i) != $null) {
    if ($did(%dlg,%id,%i) == %val) { did -c %dlg %id %i | return }
    inc %i
  }
}

on *:dialog:sfilter_ekle:sclick:9: {
  var %sf.kelime = $did(sfilter_ekle,2)
  var %sf.tip = $did(sfilter_ekle,4)
  var %sf.etki = $did(sfilter_ekle,6)
  var %sf.aciklama = $did(sfilter_ekle,8)

  if (%sf.kelime == $null) { echo -a [Spamfilter] Hata: Kelime/pattern boş bırakılamaz. | halt }
  if (%sf.aciklama == $null) { %sf.aciklama = No reason given }

  if ($input(%sf.kelime kelimesini kaydetmek istediğinize emin misiniz? $+ $crlf $+ Tip: %sf.tip - Etki: %sf.etki,yn,Spamfilter Onay) == $false) {
    echo -a [Spamfilter] İşlem iptal edildi.
    halt
  }

  ; Düzenleme modundaysak eski kaydı önce sil
  if (%sf.edit.eski != $null) {
    /spamfilter del %sf.edit.eski
    hdel sfilters %sf.edit.eski
  }

  /spamfilter add %sf.tip * %sf.kelime %sf.etki 0 %sf.aciklama
  hadd sfilters %sf.kelime %sf.tip %sf.etki %sf.aciklama
  echo -a [Spamfilter] Kaydedildi: %sf.kelime (Tip: %sf.tip / Etki: %sf.etki)

  unset %sf.edit.eski
  if ($dialog(sfilter_panel)) { sfilter_panel_doldur }
}

on *:dialog:sfilter_ekle:close:0: { unset %sf.edit.eski }

; ================= YÖNETİM PANELİ (listbox) =================
dialog sfilter_panel {
  title "Spamfilter Yönetim Paneli"
  size -1 -1 280 200
  option dbu

  list 1, 10 10 260 130, hsbar vsbar
  button "Ekle", 2, 10 145 60 20
  button "Düzenle", 3, 75 145 60 20
  button "Sil", 4, 140 145 60 20
  button "Yenile (Sunucu)", 5, 205 145 65 20
  text "Toplam: 0", 6, 10 170 200 10
  button "Kapat", 7, 205 170 65 20, cancel
}

on *:dialog:sfilter_panel:init:0: { sfilter_panel_doldur }

alias -l sfilter_panel_doldur {
  did -r sfilter_panel 1
  var %i = 1, %tot = 0
  while ($hget(sfilters,%i).item != $null) { inc %i }
  var %keys = $hget(sfilters,0).item
  var %n = 1
  while (%n <= %keys) {
    var %k = $hget(sfilters,%n).item
    var %v = $hget(sfilters,%k)
    did -a sfilter_panel 1 %k $chr(9) $gettok(%v,1,32) $chr(9) $gettok(%v,2,32) $chr(9) $gettok(%v,3-,32)
    inc %tot
    inc %n
  }
  did -o sfilter_panel 6 1 Toplam: %tot
}

on *:dialog:sfilter_panel:sclick:2: { dialog -m sfilter_ekle sfilter_ekle }

on *:dialog:sfilter_panel:sclick:3: {
  var %sec = $did(sfilter_panel,1).sel
  if (%sec == $null) { echo -a [Spamfilter] Önce listeden bir kayıt seçin. | halt }
  var %satir = $did(sfilter_panel,1,%sec)
  %sf.edit.eski = $gettok(%satir,1,9)
  dialog -m sfilter_ekle sfilter_ekle
}

on *:dialog:sfilter_panel:sclick:4: {
  var %sec = $did(sfilter_panel,1).sel
  if (%sec == $null) { echo -a [Spamfilter] Önce listeden bir kayıt seçin. | halt }
  var %satir = $did(sfilter_panel,1,%sec)
  var %kelime = $gettok(%satir,1,9)
  if ($input(%kelime kalıbını silmek istediğinize emin misiniz?,yn,Silme Onayı) == $false) { halt }
  /spamfilter del %kelime
  hdel sfilters %kelime
  echo -a [Spamfilter] Silindi: %kelime
  sfilter_panel_doldur
}

on *:dialog:sfilter_panel:sclick:5: { sfilter_listele }

; ================= SİLME (klasik / hızlı) =================
alias sfilter_sil {
  var %sf.kelime = $$?="Silmek istediğiniz Spamfilter kelimesini / kalıbını yazın:"
  if (%sf.kelime == $null) { echo -a [Spamfilter] İşlem iptal edildi. | halt }
  if ($input(%sf.kelime kalıbını silmek istediğinize emin misiniz? Bu işlem geri alınamaz.,yn,Spamfilter Silme Onayı) == $false) {
    echo -a [Spamfilter] İşlem iptal edildi.
    halt
  }
  /spamfilter del %sf.kelime
  hdel sfilters %sf.kelime
  echo -a [Spamfilter] Silindi: %sf.kelime
  if ($dialog(sfilter_panel)) { sfilter_panel_doldur }
}

; ================= LİSTELEME (sunucudan çek + hash'i güncelle) =================
alias sfilter_listele {
  if (!$window(@SpamFilters)) { window -en @SpamFilters }
  clear @SpamFilters
  echo @SpamFilters --- Aktif Spamfilter Listesi (Sunucu) ---
  echo @SpamFilters -----------------------------------------------
  /raw -q stats s
}

; NOT: Aşağıdaki ayrıştırma sunucu/ircd'ye göre değişir.
; Kendi sunucunuzun "stats s" (223) çıktı formatına göre $3- kısmını
; tip/kelime/etki alanlarına bölmeniz gerekebilir.
raw 223:*:{
  if ($window(@SpamFilters)) { echo @SpamFilters $3- }
  halt
}

raw 219:*:{
  if ($window(@SpamFilters)) {
    echo @SpamFilters -----------------------------------------------
    echo @SpamFilters --- Liste sonu ---
  }
  halt
}

; ================= ARAMA =================
alias sfilter_bul {
  var %sf.aranan = $$?="Aramak istediğiniz kelimeyi girin:"
  if (%sf.aranan == $null) { halt }
  if (!$window(@SpamFilters)) { window -en @SpamFilters }
  filter -wwt @SpamFilters @SpamFilters %sf.aranan
  echo -a [Spamfilter] "%sf.aranan" için filtrelenmiş sonuçlar @SpamFilters penceresinde.
}

; ================= İSTATİSTİK =================
alias sfilter_istatistik {
  var %toplam = $hget(sfilters,0).item
  if (%toplam == $null) { %toplam = 0 }
  var %ban = 0, %block = 0, %gline = 0, %kill = 0, %zline = 0
  var %i = 1
  while (%i <= %toplam) {
    var %k = $hget(sfilters,%i).item
    var %v = $gettok($hget(sfilters,%k),1,32)
    if (%v == ban) { inc %ban }
    elseif (%v == block) { inc %block }
    elseif (%v == gline) { inc %gline }
    elseif (%v == kill) { inc %kill }
    elseif (%v == zline) { inc %zline }
    inc %i
  }
  echo -a [Spamfilter] Toplam: %toplam | ban: %ban - block: %block - gline: %gline - kill: %kill - zline: %zline
}

; ================= DIŞA / İÇE AKTARMA =================
alias sfilter_export {
  var %dosya = $qt($mircdir $+ spamfilters_export.txt)
  if ($exists(%dosya)) { .remove %dosya }
  var %i = 1, %toplam = $hget(sfilters,0).item
  while (%i <= %toplam) {
    var %k = $hget(sfilters,%i).item
    write %dosya %k $chr(9) $hget(sfilters,%k)
    inc %i
  }
  echo -a [Spamfilter] %toplam kayıt dışa aktarıldı: %dosya
}

alias sfilter_import {
  var %dosya = $qt($mircdir $+ spamfilters_export.txt)
  if (!$exists(%dosya)) { echo -a [Spamfilter] Hata: %dosya bulunamadı. | halt }
  if ($input(Dosyadaki tüm kayıtları içe aktarıp sunucuya eklemek istediğinize emin misiniz?,yn,İçe Aktar Onayı) == $false) { halt }
  var %i = 1
  while ($read(%dosya,%i) != $null) {
    var %satir = $v1
    var %kelime = $gettok(%satir,1,9)
    var %veri = $gettok(%satir,2-,9)
    var %tip = $gettok(%veri,1,32)
    var %etki = $gettok(%veri,2,32)
    var %aciklama = $gettok(%veri,3-,32)
    /spamfilter add %tip * %kelime %etki 0 %aciklama
    hadd sfilters %kelime %tip %etki %aciklama
    inc %i
  }
  echo -a [Spamfilter] İçe aktarma tamamlandı ( $calc(%i - 1) kayıt).
  if ($dialog(sfilter_panel)) { sfilter_panel_doldur }
}

; ================= TÜMÜNÜ TEMİZLE =================
alias sfilter_temizle {
  if ($input(DİKKAT! Tüm spamfilter kayıtlarını silmek üzeresiniz. Bu işlem GERİ ALINAMAZ. Devam edilsin mi?,yn,Tehlikeli İşlem) == $false) { halt }
  if ($input(Son onay: gerçekten TÜM kayıtları silmek istiyor musunuz?,yn,Son Onay) == $false) { halt }
  var %i = 1, %toplam = $hget(sfilters,0).item
  while (%i <= %toplam) {
    var %k = $hget(sfilters,1).item
    /spamfilter del %k
    hdel sfilters %k
    inc %i
  }
  echo -a [Spamfilter] Tüm kayıtlar silindi.
  if ($dialog(sfilter_panel)) { sfilter_panel_doldur }
}

; ================= YARDIM =================
alias sfilter_yardim {
  echo -a --------------------------------------------------
  echo -a [Spamfilter] Kullanılabilir komutlar:
  echo -a /sfilter_ekle          - Hızlı ekleme (dialog)
  echo -a /sfilter_sil           - Kelime yazarak silme
  echo -a /sfilter_listele       - Sunucudan güncel listeyi çeker
  echo -a /sfilter_bul           - Liste penceresinde arama yapar
  echo -a /sfilter_istatistik    - Tip bazlı sayım gösterir
  echo -a /sfilter_export        - Kayıtları dosyaya aktarır
  echo -a /sfilter_import        - Dosyadan kayıtları yükler
  echo -a /sfilter_temizle       - TÜM kayıtları siler (çift onaylı)
  echo -a /dialog -m sfilter_panel sfilter_panel  - Tam yönetim paneli
  echo -a --------------------------------------------------
}
________________

"Sevilmenin kıymeti bilinmiyorsa, Uzaklaşmak En güzeli ki üzülen sen olmayasın"