| | 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" |