Son dönemlerde TCL scriptingde de hazır tcllerin değil de bu şekilde iyi/kötü emek verilerek hazırlanmış TCL'lerin de artması beni sevindiriyor.. TCL scriptinge olan bu ilgi gerçekten bir "TCL sever" olarak beni mutlu ediyor.. Bunu yazan ve paylaşan arkadaşa tekrar teşeşkkürler, bu işler böyle başlar ve gelişir.. Şimdi bu kodu bizi eleştirelim (olumlu yönde, bişeyler öğrenmek adına..) Parça parça kodu ele almak istiyorum.. Kod: Kodu kopyalamak için üzerine çift tıklayın!
bind pub - !ban banned
#PROC
proc banned {nick uhand host chan text} {
if {![isop $nick $chan]} {return 0}
putquick "samode $chan +b $text"
putquick "privmsg $chan : $text Basariyla Banlandi $nick"
}
proc banned {nick uhand host chan text} { if {![isop $nick $chan]} {return 0} ;komutu yazana op değilse çalışma. Buraya kadar güzel. Şimdi gelelim $text değerine.. !ban kelimesinden sonra gelen bütün kelimeleri kapsar.. Yani diyelimki !ban ahmet mehmet hasan yazdık.. ahmet nickine ahmet!*@* şeklinde ban koyacaktır.. O halde geliştirmek için neler yapabiliriz.. Diyelimki ip ye ban atmasını istiyoruz, o halde yapmamız gereken şu: Nickin kanaldaki hostunu getchanhost komutunu kullanarak almaya çalışacaz.. biz $text değerinin bir den fazla kelime olma ihtimaline karşın, birinci kelimesini banlanacak nick olarak alalım.. bunun için ise lindex komutunu kullanacaz.. Şimdi örneklerle gösterelim.. [lindex $text 0] dediğimiz zaman $text değerinin ilk değerini alır.. şimdi sıra getchanhost ile bu ilk değerin (nickin) kanaldaki hostunu alalım.. [getchanhost [lindex $text 0] $chan] Böylece hostunu (
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
masikinin ASDKAKLS.KJASDJKA.ASDJAJD.IP kısmını almış bulunuyoruz..) Şimdi gelelim bunu banlamaya.. putquick "samode $chan +b $text" Burayı putquick "mode $chan +b *!*@[getchanhost [lindex $text 0] $chan]" Şekline çevirebiliriz.. Şimdi öğrenmek adına örneği genişletelim istiyorum.. Banlayınca kicklemekte lazım gelir
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Bu yüzden hani o $text değerindeki ilk ahmet değerinden sonrakileride kick nedeni olarak alalım.. yani bunu yazan kişi şöyle yazdı sayıyoruz : !ban ahmet sana yasak burası "sana yasak burası" kick sebebi sayıyoruz. Peki bunu nasıl alacaz? Bu kez bir başka komutla tanışıyoruz: lrange lrange komutu bir aralık için kullanılır (lindex değerler kümesinde bir tek değer içindi..) [lrange $text 1 end] bunu yazarsak (0 ilk değer içindi biz 1 kullandık) ikinci değerden başla en son değere kadar (en son değer dahil) al, demiş oluruz.. O halde öreniğimizde geçen !ban ahmet sana yasak burası koyu punta ile belirtiğim kısmı aldık.. Şimdi banladığımız kişiyi kickleyelim.. putquick "KICK $chan [lindex $text 0] [lrange $text 1 end]" Şeklinde kanaldan kickledik.. O halde kodumuzun son görünümüne bakıp bir kaç ileri adıma daha gidecez.. proc banned {nick uhand host chan text} { if {![isop $nick $chan]} {return 0} putquick "mode $chan +b *!*@[getchanhost [lindex $text 0] $chan]" putquick "KICK $chan [lindex $text 0] [lrange $text 1 end]" } Bu haliyle de kod hala yetersiz.. Geliştirmeye devam ediyoruz.. $text değerindeki ilk kelimeyi nick olarak algıla ve kanaldan hostunu al dedik.. Peki bu nick (ya da mask) kanalda değilse? İşte bunun için if kullanmamız gerekecek.. Burada hem if nasıl kullanılır onu görecez ve hem bir iki yeni komutla daha tanışacaz.. Ne dedik? kanalda değilse.. Bunu da onchan komutuyla anlıyoruz.. Genel kullanımı [onchan $nick $chan] şeklindedir.. Burada bizim nick dediğimiz değer [lindex $text 0] idi.. öyleyse komutumuz [onchan [lindex $text $chan] olmalıdır.. Şimdi bunu if içine sokalım.. if {[onchan lindex $text $chan]} { komut... Kullanım budur.. o halde kodun en son hali nedir? proc banned {nick uhand host chan text} { if {![isop $nick $chan]} {return 0} if {[onchan [lindex $text 0] $chan]} { putquick "mode $chan +b *!*@[getchanhost [lindex $text 0] $chan]" putquick "KICK $chan [lindex $text 0] [lrange $text 1 end]" } } Peki kanalda değilse? yani [onchan [lindex $text 0] $chan] değerinin olumsuz haliyse.. başına ! koyduğumuz hal yani.. ikinci bir if içine sokabiliriz veya bir kişi ya kanaldadır ya da değildir olacağı için bunların dışında manasına gelen else kullanabilir.. biz else kullanalım.. proc banned {nick uhand host chan text} { if {![isop $nick $chan]} {return 0} if {[onchan lindex $text $chan]} { putquick "mode $chan +b *!*@[getchanhost [lindex $text 0] $chan]" putquick "KICK $chan [lindex $text 0] [lrange $text 1 end]" } else { putquick "mode $chan +b [lindex $text 0]" } } Şeklinde oluyor.. Tabi bütün bunları geliştirmek çok daha mümkün.. Bu sadece bir başlangıç olsun.. Alttaki diğer kodları da bu şekilde göstermek isterdim ama tek post altında çok uzun bir döküman olacağından okunmak için cazip olmayabilir.. Onları da bu postun ardından gelecek sorulara göre diğer postlarda ben ve diğer arkadaşımlarımla açıklamaya çalışırız.. Umarım faydalı olmuştur..