IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   Eggdrop, NeoStats, BNC (https://www.ircforumlari.net/eggdrop-neostats-bnc/)
-   -   Eggdrop ile ilgili (https://www.ircforumlari.net/eggdrop-neostats-bnc/1071782-eggdrop-ile-ilgili.html)

Xadd1 07 Kasım 2025 15:29

Eggdrop ile ilgili
 
Merhaba sizden ricam

herhangi bir komutu kanalda yasaklamak istiyorum .

Yardımcı olursanız sevinirim.

Mesela dj kanalında .kickradyo komutunu yetkili op sop hop lar hariç yasaklamak istiyorum.

kanalı +m yada resticted yaparakta olur ama tcl olarak nasıl yapabiliriz

SNOOPY 07 Kasım 2025 17:16

Cevap: Eggdrop ile ilgili
 
Kod:

# kickradyo_protect.tcl
# Kullanım: bu dosyayı eggdrop'un script dizinine koyup yükleyin (source ile).
# Varsayılan izinli liste: ops, sop, hop veya 'allowed_kicks' listesinde olan nickler

# ---- Ayarlar ----
# Bu listeye ayrıca izin vermek istediğiniz özel nickleri ekleyin
set allowed_kicks {Nick1 Nick2 BotAdmin}

# Eğer true yaparsanız yetkisiz kullananları uyarır (mesaj),
# eğer "kick_on_violation" true ise o kullanıcıyı kanaldan atar.
set kick_on_violation false
set ban_on_violation false  ;# true yaparsanız +b ekleme de yapılır (örnek gösterim)

# ---- Yetki kontrol proc'u ----
proc _kr_check_privs {nick uhost chan} {
    # Bu proc, nick'in yetkili olup olmadığını döndürür (1/0).
    # Birkaç yöntem dener: 1) eggdrop'un dahili fonksiyonları 2) allowed_kicks listesi
    # NOT: eggdrop kurulumunuza göre `chanop` ya da `isop` fonksiyonları farklı olabilir.
    # Eğer hata verirse, catch ile güvenle fallback'a düşer.

    # 1) Eğer botun kendi takibiyle kanal operatörü ise
    if {[catch {chanop $chan $nick} res] == 0} {
        if {$res} { return 1 }
    }

    # 2) Bazı eggdroplarda isop/is_chanop benzeri fonksiyon olabilir
    if {[catch {isop $nick $chan} res2] == 0} {
        if {$res2} { return 1 }
    }

    # 3) Fallback: allowed_kicks listesinde mi?
    global allowed_kicks
    if {[lsearch -nocase $allowed_kicks $nick] >= 0} {
        return 1
    }

    # Yetkili değilse 0 döner
    return 0
}

# ---- Public mesaj bağlama ----
# Bu bind, kanalda birisi ".kickradyo" yazdığında çalışır.
# Bind pattern: ^\.kickradyo( |$)  -> komutun başta olması ve parametre opsiyonel
bind pub - {^\.kickradyo( |$)} _kr_handle_pub

proc _kr_handle_pub {nick uhost hand chan text} {
    # nick = gönderen, uhost = user@host, chan = #kanal, text = tüm mesaj
    if {[_kr_check_privs $nick $uhost $chan]} {
        # Yetkili: hiçbir şey yapma, diğer botlar/komutlar devam etsin.
        return
    }

    # Yetkisiz kullanıcı: uyar, ve opsiyonel olarak kick/ban uygula
    putquick "PRIVMSG $chan :$nick: Bu komutu kullanma yetkiniz yok."
    putquick "NOTICE $nick :Bu komut yalnızca kanal yetkililerine açıktır."

    global kick_on_violation ban_on_violation
    if {$kick_on_violation} {
        # Kick (neden yazısı isteğe bağlı)
        putquick "KICK $chan $nick :Yetkisiz .kickradyo kullanımı"
    }
    if {$ban_on_violation} {
        # Basit bir +b ekleme örneği (hostmask daha uygun olur)
        # Burada uhost değişkenini doğrudan kullanıyoruz (örnek), kendi network'unuz için düzenleyin.
        set mask "*!*@$uhost"
        putquick "MODE $chan +b $mask"
    }

    # İsteğe bağlı: komutun başka botlara ulaşmasını engellemek isterseniz
    # dönüş ile diğer bindlerin çalışmasını önlemeye çalışabilirsiniz. (eggdrop sürümüne göre farklılık gösterir)
    # Bazı kurulumlarda "return -code 1" vs. "return" davranışı değişir. Genelde return ile yeterli olur.
    return
}

Kod daha önceden elimde vardı istediğine göre eklemeleri yaptım. Kod bana ait değil ve denemesini yapmadım olmazsa yaz düzeltme yaparız

Xadd1 07 Kasım 2025 18:55

Cevap: Eggdrop ile ilgili
 
hiçbirşey olmadı snoopy . normal kullanılıyor komut yasaklamadı

SNOOPY 07 Kasım 2025 21:09

Cevap: Eggdrop ile ilgili
 
Kod:

# Yasaklanacak komutlar
set yasak_komutlar {.kickradyo .djal .voiceal}

# Manuel izinli kullanıcılar
set allowed_users {AdminNick Deneme}

# Log dosyası ve boyut limiti (1 MB = 1048576 bayt)
set komut_log_dosya "komut_koruma.log"
set komut_log_limit 1048576

# ============================================
# -- Yetki kontrolü --
proc is_authorized_user {nick hand chan} {
    global allowed_users
    if {[matchattr $hand o|o $chan]} { return 1 }  ;# kanal op
    if {[matchattr $hand m|m]} { return 1 }        ;# global master
    if {[matchattr $hand h|h $chan]} { return 1 }  ;# halfop
    if {[lsearch -nocase $allowed_users $nick] != -1} { return 1 }
    return 0
}

# ============================================
# -- Log dosyası boyutu kontrolü --
proc kontrol_log_boyutu {} {
    global komut_log_dosya komut_log_limit
    if {[file exists $komut_log_dosya]} {
        set boyut [file size $komut_log_dosya]
        if {$boyut > $komut_log_limit} {
            set eski "${komut_log_dosya}_old.log"
            catch {file delete -force $eski}
            catch {file rename -force $komut_log_dosya $eski}
            putlog "komut_koruma_dj.tcl >> Log dosyası limiti aştı ($boyut bayt) — eski log yedeklendi: $eski"
        }
    }
}

# ============================================
# -- Yasaklı komut loglama prosedürü --
proc logla_yasakli_komut {chan nick uhost text} {
    global komut_log_dosya

    # Boyut kontrolü yap
    kontrol_log_boyutu

    set zaman [strftime "%d.%m.%Y %H:%M:%S"]
    set satir "$zaman [string toupper $chan] >> $nick ($uhost) yasaklı komutu denedi: $text"

    # Bot loguna da yaz
    putlog $satir

    # Dosyaya yaz
    if {[catch {set f [open $komut_log_dosya "a+"]} err]} {
        putlog "HATA: Log dosyasına yazılamadı ($komut_log_dosya): $err"
        return
    }
    puts $f $satir
    close $f
}

# ============================================
# -- Mesaj dinleyici --
bind pubm - "*" kontrol_pub_mesaj

proc kontrol_pub_mesaj {nick uhost hand chan text} {
    global yasak_komutlar

    # Sadece #dj kanalında çalışsın
    if {$chan ne "#dj"} { return 0 }

    # Başta boşluk varsa temizle
    set text [string trimleft $text]

    foreach cmd $yasak_komutlar {
        # Büyük/küçük harf duyarsız kontrol
        if {[string match -nocase "${cmd}*" $text]} {
            if {![is_authorized_user $nick $hand $chan]} {
                putquick "NOTICE $nick :$cmd komutunu kullanma yetkiniz yok!"
                putquick "PRIVMSG $chan :$nick bu komutu kullanamaz!"
                logla_yasakli_komut $chan $nick $uhost $text

                # Yetkisiz kullanıcıyı atmak istersen aşağıdaki satırı aktif et:
                # putquick "KICK $chan $nick :Yetkisiz komut kullanımı ($cmd)"

                break
            }
        }
    }
    return 0
}

putlog "komut_koruma_dj.tcl yüklendi - #dj kanalında aktif (log: komut_koruma.log, limit: 1MB)"

Bir de bunu dener misin TCL ekledin mi conf'a.

Log dosyasına sınır koyma fikri için @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] a teşekkürler

Kod:

# Log dosyası ve boyut limiti (1 MB = 1048576 bayt)
set komut_log_dosya "komut_koruma.log"
set komut_log_limit 1048576


Xadd1 08 Kasım 2025 06:24

Cevap: Eggdrop ile ilgili
 
tcl olarakta ekledim confada ekledim ama
olmadi snoopy. hicbi tepkime yok. telnetten
-n ile calistirdiginda hata varmi diye bakiyorum ama
hatada yok. tepkide yok kanalda.

SNOOPY 08 Kasım 2025 11:29

Cevap: Eggdrop ile ilgili
 
Kod:

# === Ayarlar ===
set yasak_komutlar {.kickradyo .djal .voiceal}
set allowed_users {AdminNick Deneme}
set komut_log_dosya "komut_koruma.log"
set komut_log_limit 1048576  ;# 1 MB

# === Yetki kontrolü ===
proc is_authorized_user {nick hand chan} {
    global allowed_users
    if {$hand eq "*"} { return 0 }  ;# Userlist'te yoksa handle koruması

    # op / master / halfop kontrolü
    if {[matchattr $hand o|o $chan]} { return 1 }
    if {[matchattr $hand m|m]} { return 1 }
    if {[matchattr $hand h|h $chan]} { return 1 }

    # Manuel izinli kullanıcılar
    if {[lsearch -nocase $allowed_users $nick] != -1} { return 1 }

    return 0
}

# === Log dosyası kontrolü ===
proc kontrol_log_boyutu {} {
    global komut_log_dosya komut_log_limit
    if {[file exists $komut_log_dosya]} {
        set boyut [file size $komut_log_dosya]
        if {$boyut > $komut_log_limit} {
            set eski "${komut_log_dosya}.old"
            catch {file delete -force $eski}
            catch {file rename -force $komut_log_dosya $eski}
            putlog "komut_koruma_dj.tcl >> Log dosyası limit aştı ($boyut byte) — eski log yedeklendi: $eski"
        }
    }
}

# === Log yazıcı ===
proc logla_yasakli_komut {chan nick uhost text} {
    global komut_log_dosya
    kontrol_log_boyutu

    set zaman [strftime "%d.%m.%Y %H:%M:%S"]
    set satir "$zaman [string toupper $chan] >> $nick ($uhost) yasaklı komutu denedi: $text"

    putlog $satir
    if {[catch {set f [open $komut_log_dosya "a+"]} err]} {
        putlog "HATA: Log dosyasına yazılamadı ($komut_log_dosya): $err"
        return
    }
    puts $f $satir
    close $f
}

# === Mesaj dinleyici ===
bind pubm - "*" kontrol_pub_mesaj

proc kontrol_pub_mesaj {nick uhost hand chan text} {
    global yasak_komutlar

    # sadece #dj kanalında aktif
    if {![string match -nocase "#dj" $chan]} { return 0 }

    set text [string trimleft $text]

    foreach cmd $yasak_komutlar {
        if {[string match -nocase "${cmd}*" $text]} {
            if {![is_authorized_user $nick $hand $chan]} {
                putquick "NOTICE $nick :❌ $cmd komutunu kullanma yetkiniz yok!"
                putquick "PRIVMSG $chan :$nick bu komutu kullanamaz!"
                logla_yasakli_komut $chan $nick $uhost $text

                # Eğer atmak istiyorsan şu satırı aktif et:
                # putquick "KICK $chan $nick :Yetkisiz komut kullanımı ($cmd)"
                break
            }
        }
    }
    return 0
}

putlog "✅ komut_koruma_dj.tcl yüklendi — #dj kanalında aktif (yasaklı komutlar: .kickradyo, .djal, .voiceal)"

Bu hali ile dener misin

Xadd1 08 Kasım 2025 12:38

Cevap: Eggdrop ile ilgili
 
tesekkur ederim snoopy
gayet basarili. :cokcool:


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 08:13.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk