Eggdrop Tcl bind Komutları: Botunuzu Olaylara Bağlamanın Temeli
İçindekiler
- bind Komutunun Yapısı
- Prosedür Parametreleri
- pub ve pubm: Kanal Mesajları
- msg: Özel Mesajlar
- join, part, sign: Giriş ve Çıkışlar
- time ve cron: Zamanlanmış İşler
- dcc: Partyline Komutları
- Bayrak Kısıtlamaları
- Çıktı Komutları: putserv, puthelp, putquick
- Bind'leri Görmek ve Kaldırmak
- Gerçek Bir Senaryo: Basit Bir Komut Seti
- Sık Yapılan Hatalar
- Bind'leri Düzenli Tutmak
- Sonuç
Bir Eggdrop scriptinin nasıl çalıştığını anlamak istiyorsanız önce bind komutunu anlamanız gerekir. Bind, botu belirli olaylara bağlayan köprüdür: "Kanalda biri !selam yazdığında şu prosedürü çalıştır", "Biri kanala girdiğinde şunu yap", "Her saat başı şu mesajı gönder" gibi. Bu rehberde Eggdrop bind komutunun yapısını ve en sık kullanılan bind türlerini örneklerle anlatıyoruz.
bind Komutunun Yapısı
bind tür bayraklar tetikleyici prosedür
- tür: Hangi olaya bağlanılacağı (pub, msg, join, time...).
- bayraklar: Olayı kimlerin tetikleyebileceği.
-herkes anlamına gelir. - tetikleyici: Komut adı, maske veya zaman kalıbı; türe göre değişir.
- prosedür: Olay gerçekleştiğinde çağrılacak Tcl prosedürünün adı.
Basit bir örnek:
bind pub - !selam pub_selam
proc pub_selam {nick uhost hand chan text} {
putserv "PRIVMSG $chan :Merhaba $nick!"
}
Kanalda biri !selam yazdığında bot "Merhaba Ayse!" diye cevap verir. Bu scripti yüklemeyi Tcl script yükleme yazımızda anlattık.
Prosedür Parametreleri
Her bind türü, prosedüre belirli sırada belirli parametreler gönderir. Prosedürünüz bu parametreleri doğru sayıda kabul etmelidir; aksi hâlde "wrong # args" hatası alırsınız.
| Tür | Prosedüre gönderilen parametreler |
|---|---|
| pub | nick uhost hand chan text |
| pubm | nick uhost hand chan text |
| msg | nick uhost hand text |
| msgm | nick uhost hand text |
| join | nick uhost hand chan |
| part | nick uhost hand chan msg |
| sign | nick uhost hand chan reason |
| nick | nick uhost hand chan newnick |
| kick | nick uhost hand chan target reason |
| mode | nick uhost hand chan mode target |
| time | minute hour day month year |
| dcc | hand idx text |
Parametrelerin anlamları:
- nick: Olayı tetikleyen kişinin nicki.
- uhost: kullanıcı@host bilgisi.
- hand: Kullanıcının bottaki kayıt adı (handle). Tanınmıyorsa
*olur. - chan: Olayın gerçekleştiği kanal.
- text: Mesajın komuttan sonraki kısmı.
- idx: Partyline bağlantısının kimlik numarası.
Parametre listesi Eggdrop'un doc/tcl-commands.doc belgesinde her bind türü için ayrıntılı olarak verilir. Script yazarken bu belgeyi açık tutmanızı öneririz.
pub ve pubm: Kanal Mesajları
pub, kanal mesajının ilk kelimesi tetikleyiciyle eşleştiğinde çalışır:
bind pub - !kurallar pub_kurallar
pubm ise mesajın tamamını, kanal adıyla birlikte bir maskeyle karşılaştırır:
bind pubm - "#kanal *merhaba*" pubm_merhaba
Bu örnek, #kanal'da içinde "merhaba" geçen her mesajda tetiklenir. Maskenin başındaki * ise bütün kanalları kapsar. pubm, kelime filtreleri ve otomatik cevaplar için kullanışlıdır ama her mesajda çalıştığı için dikkatli kullanılmalıdır.
msg: Özel Mesajlar
bind msg - yardim msg_yardim
proc msg_yardim {nick uhost hand text} {
puthelp "PRIVMSG $nick :Komutlar: !kurallar, !seen nick"
}
Kullanıcı bota /msg Bot yardim yazdığında çalışır.
join, part, sign: Giriş ve Çıkışlar
bind join - "#kanal *" join_karsila
proc join_karsila {nick uhost hand chan} {
if {[isbotnick $nick]} { return }
puthelp "NOTICE $nick :#kanal'a hos geldin!"
}
join ve part bind'lerinde tetikleyici "#kanal nick!user@host" biçiminde bir maskedir. "* *" bütün kanallardaki bütün girişleri yakalar. isbotnick kontrolü, botun kendi girişinde tetiklenmemesini sağlar. Karşılama scriptleri için karşılama scripti yazımıza bakın.
time ve cron: Zamanlanmış İşler
time bind'i dakika, saat, gün, ay ve yıl alanlarından oluşan bir maskeyle çalışır:
bind time - "00 * * * *" saatbasi_duyuru
Bu bind her saatin başında (dakika 00) tetiklenir. Güncel Eggdrop sürümleri ayrıca Unix crontab biçimini kullanan cron bind türünü de destekler; bu, karmaşık zamanlamaları yazmayı kolaylaştırır. Kısa süreli gecikmeler için ise bind yerine timer kullanılır; ayrıntılar timer ve utimer yazımızda.
dcc: Partyline Komutları
bind dcc m duyuru dcc_duyuru
proc dcc_duyuru {hand idx text} {
foreach chan [channels] {
puthelp "PRIVMSG $chan :Duyuru: $text"
}
putdcc $idx "Duyuru gonderildi."
return 1
}
Bu örnek, partyline'a .duyuru komutunu ekler. m bayrağı, komutu yalnızca master yetkisine sahip kullanıcıların kullanabileceğini belirtir. return 1, komutun partyline log'una kaydedilmesini sağlar.
Bayrak Kısıtlamaları
Bind'deki bayrak alanı, olayı kimlerin tetikleyebileceğini belirler:
| Yazım | Anlamı | |
|---|---|---|
- veya `-\ | -` | Herkes |
o | Global op bayrağı olanlar | |
| `-\ | o` | Kanal op bayrağı olanlar |
| `o\ | o` | Global veya kanal op bayrağı olanlar |
n | Yalnızca sahipler |
Bayraklar hakkında ayrıntılı bilgi için kullanıcı bayrakları yazımıza bakın. Prosedür içinde daha ayrıntılı kontrol için matchattr komutu kullanılır:
if {![matchattr $hand o|o $chan]} { return }
Çıktı Komutları: putserv, puthelp, putquick
Bot IRC'ye mesaj gönderirken üç farklı kuyruk kullanır:
- putquick: En yüksek öncelik; mod değişiklikleri gibi acil işler için.
- putserv: Normal öncelik; genel mesajlar için.
- puthelp: Düşük öncelik; yardım metinleri gibi acil olmayan mesajlar için.
Bu kuyruklar, botun sunucuya çok hızlı mesaj gönderip "Excess Flood" ile düşmesini önler. Kalabalık kanallarda uzun çıktılar için puthelp kullanmak iyi bir alışkanlıktır.
Bind'leri Görmek ve Kaldırmak
.binds
.binds pub
Bir bind'i kaldırmak için unbind komutu kullanılır; bind ile aynı parametreleri alır:
unbind pub - !selam pub_selam
Gerçek Bir Senaryo: Basit Bir Komut Seti
Bir kanal için üç komut istediğinizi düşünelim: !kurallar herkes tarafından kullanılabilsin ve kuralları göstersin, !duyur yalnızca kanal op'ları tarafından kullanılsın ve verilen metni kanal konusuna eklesin, botun sahibine özel mesajla durum yazıldığında ise kanaldaki kişi sayısı bildirilsin. Bu üç ihtiyaç; bir pub -, bir pub -|o ve bir msg n bind'iyle karşılanır. Her biri kendi küçük prosedürünü çağırır. Bu şekilde görevleri küçük, tek işe odaklı prosedürlere bölmek, scriptinizi hem okunabilir hem de hata ayıklaması kolay hâle getirir. Bir komut bozulduğunda yalnızca onun prosedürüne bakmanız yeterli olur.
Sık Yapılan Hatalar
- Parametre sayısı yanlış: pub prosedürü beş parametre almalıdır; dört yazarsanız hata alırsınız.
- Tetikleyici büyük-küçük harf: pub tetikleyicileri genellikle büyük-küçük harf duyarsızdır; maskeli türlerde dikkatli olun.
- Kullanıcı metnini güvensiz kullanmak:
textparametresinieval,execveya köşeli parantezli ifadelerde doğrudan kullanmayın. - Bot kendi olayını tetikliyor: join gibi bind'lerde
isbotnickkontrolü ekleyin.
Bind'leri Düzenli Tutmak
Script büyüdükçe bind satırları dosyanın farklı yerlerine dağılabilir. İyi bir alışkanlık, bütün bind'leri dosyanın başında, ayarların hemen altında bir arada toplamaktır. Böylece scripti açan biri, scriptin hangi olaylara tepki verdiğini tek bakışta görür. Prosedür adlarının başına scriptinize özgü kısa bir önek eklemek de başka scriptlerle isim çakışmasını önler. İki farklı script aynı isimde bir prosedür tanımlarsa sonra yüklenen öncekinin üzerine yazar ve ilk script sessizce bozulur; bu tür hataları bulmak saatler alabilir.
Sonuç
bind komutu, Eggdrop scriptlerinin temel yapı taşıdır. Hangi olayın hangi prosedürü çağıracağını tanımlar, bayraklarla kimin tetikleyebileceğini sınırlar. Bind türlerini ve parametrelerini öğrendikten sonra kendi komutlarınızı yazmak çok kolaylaşır. Hemen uygulamaya geçmek için ilk Tcl scriptiniz rehberimize göz atın.
IRC sorunun mu var? Kanalda birlikte çözelim.
💬 Kanala BağlanSıkça Sorulan Sorular
bind komutu ne işe yarar?
Belirli bir olay gerçekleştiğinde (bir mesaj, bir giriş, bir zaman) hangi Tcl prosedürünün çalışacağını tanımlar.
pub ile pubm arasındaki fark nedir?
pub, mesajın ilk kelimesi bir komutla eşleştiğinde tetiklenir. pubm ise mesajın tamamını bir maskeyle karşılaştırır ve joker karakter destekler.
Bind'i yalnızca op'ların kullanması için nasıl kısıtlarım?
bind komutundaki bayrak alanına o veya -|o gibi bir değer yazarak yalnızca ilgili bayrağa sahip kullanıcıların tetiklemesini sağlayabilirsiniz.


