İlk Eggdrop Tcl Scriptiniz: Sıfırdan Basit Bir Komut Botu Yazmak
İçindekiler
- Ne Yazacağız?
- Tcl'in Temelleri: Beş Dakikada
- 1. Dosyayı Oluşturun
- 2. Ayarları Tanımlayın
- 3. Kanal Bayrağı Tanımlayın
- 4. Komutları Bağlayın
- 5. Prosedürleri Yazın
- 6. Scripti Yükleyin ve Açın
- Kullanıcı Girdisini İşlemek
- Flood'a Karşı Basit Önlem
- Test ve Hata Ayıklama
- Sonraki Adımlar
- Neden Kendi Scriptinizi Yazmalısınız?
- Kod Yazım Alışkanlıkları
- Scripti Paylaşmak
- Sonuç
Hazır scriptleri kullanmak güzeldir, ama kendi scriptinizi yazmak bambaşka bir keyiftir. Botunuz tam olarak istediğiniz gibi davranır ve Eggdrop'un nasıl çalıştığını gerçekten anlamaya başlarsınız. Bu rehberde Eggdrop Tcl script yazma sürecini, hiç Tcl bilmeyen biri için sıfırdan küçük ama işe yarar bir script üzerinden anlatıyoruz.
Ne Yazacağız?
Örnek scriptimiz bir kanal için üç komut sunacak:
!kurallar: Kanal kurallarını gösterir.!zar: 1 ile 6 arasında rastgele bir sayı atar.!saat: Botun bulunduğu sunucunun saatini söyler.
Ayrıca script yalnızca bizim seçtiğimiz kanallarda çalışacak.
Tcl'in Temelleri: Beş Dakikada
Scripti yazmadan önce bilmeniz gereken birkaç temel kural:
- Komutlar boşlukla ayrılır:
set ad "Ayse"komutuaddeğişkenine "Ayse" değerini atar. - Değişkenler $ ile okunur:
$adifadesi "Ayse" değerini verir. - Köşeli parantez komut çalıştırır:
[rand 6]ifadesi rand komutunu çalıştırıp sonucunu yerine koyar. - Süslü parantez metni olduğu gibi tutar: Prosedür gövdeleri ve kod blokları süslü parantez içinde yazılır.
- Çift tırnak içinde değişkenler açılır:
"Merhaba $ad"ifadesi "Merhaba Ayse" olur.
Değişkenler ve listeler hakkında daha fazlası için Tcl değişkenler ve listeler yazımıza bakın.
1. Dosyayı Oluşturun
Botunuzun scripts klasöründe kanalkomut.tcl adlı bir dosya oluşturun. İlk satırlara scriptin ne yaptığını açıklayan yorumlar yazın:
# kanalkomut.tcl - Basit kanal komutlari
# Kullanim: .chanset #kanal +kanalkomut
Yorum yazmak iyi bir alışkanlıktır; birkaç ay sonra scripti açtığınızda ne yaptığını hemen hatırlarsınız.
2. Ayarları Tanımlayın
Kullanıcıların değiştirebileceği değerleri scriptin başında toplamak, scriptin bakımını kolaylaştırır:
set kk(kurallar) "1) Saygili olun 2) Reklam yasak 3) Flood yapmayin"
set kk(onek) "!"
kk adlı bir dizi (array) kullanarak bütün ayarları tek bir isim altında topladık. Bu sayede başka scriptlerin değişkenleriyle çakışma riski azalır.
3. Kanal Bayrağı Tanımlayın
Scriptin yalnızca seçtiğimiz kanallarda çalışması için kendi chanset bayrağımızı oluşturalım:
setudef flag kanalkomut
Bu satır sayesinde partyline'da .chanset #kanal +kanalkomut yazarak scripti istediğimiz kanalda açabiliriz. Chanset hakkında bilgi için chanset kanal ayarları yazımıza bakın.
4. Komutları Bağlayın
bind pub - !kurallar kk_kurallar
bind pub - !zar kk_zar
bind pub - !saat kk_saat
Her komut için bir bind pub satırı yazdık. Bind'in yapısını Tcl bind komutları yazımızda ayrıntılı anlattık.
5. Prosedürleri Yazın
proc kk_kurallar {nick uhost hand chan text} {
global kk
if {![channel get $chan kanalkomut]} { return 0 }
puthelp "PRIVMSG $chan :$kk(kurallar)"
return 1
}
proc kk_zar {nick uhost hand chan text} {
if {![channel get $chan kanalkomut]} { return 0 }
set sayi [expr {[rand 6] + 1}]
puthelp "PRIVMSG $chan :$nick zar atti: $sayi"
return 1
}
proc kk_saat {nick uhost hand chan text} {
if {![channel get $chan kanalkomut]} { return 0 }
set saat [clock format [clock seconds] -format "%H:%M"]
puthelp "PRIVMSG $chan :Sunucu saati: $saat"
return 1
}
Satır satır inceleyelim:
global kk: Prosedür içinde dışarıda tanımlanankkdizisini kullanabilmek için gereklidir. Tcl'de prosedürler kendi değişken alanlarına sahiptir.channel get $chan kanalkomut: Kanalda bizim bayrağımızın açık olup olmadığını kontrol eder. Kapalıysa prosedür hiçbir şey yapmadan çıkar.rand 6: 0 ile 5 arasında rastgele bir sayı verir; 1 ekleyerek 1-6 aralığına taşıdık.clock format: Zamanı istediğimiz biçimde yazdırır.puthelp: Mesajı düşük öncelikli kuyrukla gönderir; botun flood'a düşmesini önler.
6. Scripti Yükleyin ve Açın
eggdrop.conf'un sonuna ekleyin:
source scripts/kanalkomut.tcl
Partyline'da:
.rehash
.chanset #kanal +kanalkomut
Şimdi kanalda !zar yazarak deneyin.
Kullanıcı Girdisini İşlemek
Komutlara parametre eklemek de kolaydır. Örneğin !selamla Ayse yazıldığında Ayse'yi selamlayan bir komut:
bind pub - !selamla kk_selamla
proc kk_selamla {nick uhost hand chan text} {
if {![channel get $chan kanalkomut]} { return 0 }
set hedef [lindex [split $text] 0]
if {$hedef eq ""} {
puthelp "PRIVMSG $chan :Kullanim: !selamla nick"
return 0
}
puthelp "PRIVMSG $chan :$nick, $hedef kisisine selam gonderiyor!"
return 1
}
split metni kelimelere böler, lindex ilk kelimeyi alır. Kullanıcıdan gelen metni her zaman önce split ile listeye çevirip öyle işlemek, özel karakterlerin beklenmedik sorunlara yol açmasını önler. Kullanıcı girdisini asla eval veya köşeli parantezle doğrudan çalıştırmayın; bu, uzaktan kod çalıştırma açığına yol açar.
Flood'a Karşı Basit Önlem
Kalabalık bir kanalda biri !zar komutunu art arda yüzlerce kez kullanırsa bot da yüzlerce mesaj gönderir. Basit bir zaman kontrolü ekleyerek bunu önleyebilirsiniz: Her kullanıcının en son komutu ne zaman kullandığını bir dizide saklayın ve birkaç saniyeden kısa aralıklarla gelen istekleri yok sayın. Zamanlayıcılarla ilgili teknikler için timer ve utimer yazımıza bakın.
Test ve Hata Ayıklama
- Script yüklenirken hata alırsanız partyline'daki mesaj size satır ve sebep hakkında ipucu verir.
- Komut çalışmıyorsa
.binds pubile bind'in kayıtlı olup olmadığını kontrol edin. - Kanal bayrağını açmayı unutmuş olabilirsiniz:
.chaninfo #kanalçıktısında+kanalkomutgörünmelidir. - Prosedürün içine geçici
putlogsatırları ekleyerek hangi noktaya kadar çalıştığını görebilirsiniz.
Sonraki Adımlar
Bu küçük script, Eggdrop script yazmanın bütün temel parçalarını içeriyor: ayarlar, kanal bayrağı, bind'ler, prosedürler ve kullanıcı girdisi. Bundan sonra yapabilecekleriniz:
- Komutları yalnızca op'lara açmak için bayrak kısıtlaması eklemek,
- Verileri bir dosyada saklamak,
- Zamanlanmış duyurular eklemek,
- Kullanıcı girişlerinde karşılama mesajı göstermek.
Neden Kendi Scriptinizi Yazmalısınız?
İnternette binlerce hazır Eggdrop scripti bulunur ve çoğu işinizi görür. Ancak hazır scriptlerin önemli bir kısmı yıllar önce yazılmıştır, bakımı yapılmaz ve güncel Eggdrop sürümlerinde uyarı veya hata üretebilir. Bazıları ihtiyacınızdan çok daha fazlasını yapar ve botunuza gereksiz yük bindirir. Kendi küçük scriptinizi yazdığınızda ise kodun her satırını bilirsiniz; bir sorun çıktığında nereye bakacağınızı anında anlarsınız. Ayrıca güvenlik açısından da büyük bir avantajdır: Tanımadığınız birinin yazdığı ve kullanıcı girdisini nasıl işlediğini bilmediğiniz bir kodu botunuzda çalıştırmak yerine, kendi kontrolünüzdeki temiz bir kodu kullanırsınız.
Kod Yazım Alışkanlıkları
Script yazarken baştan edinilen birkaç alışkanlık uzun vadede çok zaman kazandırır. Girintileri tutarlı tutun; iki veya dört boşluk fark etmez ama her yerde aynı olsun. Prosedürlerinizin adlarına scriptinize özgü bir önek ekleyin; bu örnekte kk_ kullandık. Her prosedürün başına ne yaptığını anlatan tek satırlık bir yorum yazın. Ayarları dosyanın başında toplayın ki scripti kullanan biri kodu okumadan değiştirebilsin. Son olarak scriptinizin başına sürüm numarası ve son değişiklik tarihini not edin; scripti başkalarıyla paylaştığınızda hangi sürümün kullanıldığını takip etmek kolaylaşır.
Scripti Paylaşmak
Scriptiniz işe yaradığında onu başkalarıyla paylaşmak isteyebilirsiniz. Paylaşmadan önce kişisel bilgileri, kanal adlarını ve parolaları kodun içinden çıkarın; bunları ayar değişkenlerine taşıyın. Kısa bir kullanım açıklaması ve gereken Eggdrop sürümünü belirtin. Bir lisans seçmek de başkalarının kodunuzu nasıl kullanabileceğini netleştirir.
Sonuç
İlk Tcl scriptinizi yazmak, Eggdrop'un gerçek gücünü keşfetmenin başlangıcıdır. Küçük başlayın, her adımı test edin, kullanıcı girdisini güvenle işleyin ve kodunuzu yorumlarla açıklayın. Tcl'in veri yapılarını daha iyi anlamak için sıradaki rehberimiz Tcl değişkenler ve listeler.
IRC sorunun mu var? Kanalda birlikte çözelim.
💬 Kanala BağlanSıkça Sorulan Sorular
Tcl öğrenmek zor mu?
Hayır. Tcl'in söz dizimi küçük ve tutarlıdır. Eggdrop için gereken temel bilgiler birkaç günde öğrenilebilir.
Scriptimi test etmek için ayrı bir bota ihtiyacım var mı?
Zorunlu değil ama önerilir. Hatalı bir script canlı kanaldaki botun beklenmedik davranmasına yol açabilir.
Scriptim hata verdiğinde nereye bakmalıyım?
Partyline'daki Tcl hata mesajlarına ve log dosyasına bakın. Hata mesajı hangi prosedürde sorun olduğunu gösterir.


