Pekala dün verdiğim meal.tcl'de şöyle bir sorun vardı..
bir kez !meal komutuyla okutmaya başladı mı bir daha meal.txt içindeki satırları sonuna dek okuyordu yani durdurma imkanı yoktu.
yukarda verdiğim meal.tcl kodunu aşağıdakiyle değişirseniz artık !durmeal komutuyla okutmayı durdurabileceksiniz."denendi"
meal.tcl'nin yeni hali:
Kod: Kodu kopyalamak için üzerine çift tıklayın!
# kanal komutları:
# !meal : kanala meal.txt'teki satırları okur.
# !meal nick|kanal : kanala yada nicke meal.txt'teki satırı okur.
# !durmeal : okutmayı durdurmak için ..
# NOT: sadece oplar,halfop ve voice sahipleri
# !meal nick|kanal komutlarından birini kullanabilir.
# bu komutla sunucudaki kanala yada belirlenen nickin
# özeline atacaktır.
# bu komutun kötüye kullanılmasından şikayetçiyseniz
# aşağıdaki kodlarda oynama yaparak bu özelliği
# kapatın-değiştirin.
# kodu yüklemek için :
# kodun işleyeceği kanalı ve satırları
# okuma aralık süresini (dakika cinsinden)
# ayarlayın.botunuzun conf'una
# source scripts/meal.tcl
# şeklinde kodu gösterin.
# bot/scripts/ dizini içine meal.txt dosyasını
# düzenleyip atmayı unutmayın..
# kodun işlemeye başlaması için
# .rehash yada .restart etmeyi unutmayın
#
# not: ilk verdiğim kodda !meal komutundan sonra
# işlem bir daha durduralamıyordu.
# meal.txt içindekileri sonuna dek okumadan durmuyordu.
# !durmeal komutu bu kodda eklendi denendi.
# bunla istendiğinde okuma işleminin durması sağlandı.
#############################################################
# kodun çalışmasını istediğiniz kanal
set mealkanal "#kanalınız"
# satırları okuma süresini ayarlayın(dakika)
set mealzaman "3"
# kanala post atmaya bu satırdan başlıyoruz
set mealsatir 0
# okumayı durdurmak için kullanıcaz.
setudef flag durmeal
# ayarlar bu kadar..kod başlıyor.
if { [info exists mealzaman] } { timer $mealzaman "timer:meal" }
set mealtxt "scripts/meal.txt"
bind pub - !meal oku:meal
proc oku:meal {nick host handle chan text} {
global mealkanal mealtxt mealsatir
catch {channel set $mealkanal -durmeal}
if { [isop $nick $mealkanal] || [ishalfop $nick $mealkanal] || [isvoice $nick $mealkanal] } {
if { [lindex $text 0] != "" } {
set satiroku [lindex $text 0]
} else {
set satiroku $mealkanal
}
set mealdosya [open $mealtxt r]
set mealoku [split [read $mealdosya] \n]
close $mealdosya
# durdurma işlemini kontrol ediyoruz.
if {![channel get $mealkanal durmeal]} {
putserv "PRIVMSG $satiroku :[lindex $mealoku $mealsatir] "
set mealsatir [expr $mealsatir + 1]
}
} else {
set mealdosya [open $mealtxt r]
set mealoku [split [read $mealdosya] \n]
close $mealdosya
if {![channel get $mealkanal durmeal]} {
putserv "PRIVMSG $nick :[lindex $mealoku $mealsatir] "
set mealsatir [expr $mealsatir + 1]
}
}
}
# bu kısım durdurma işlemi için
bind pub - !durmeal durmeal
proc durmeal {nick host handle chan text} {
global mealkanal mealtxt mealsatir
if { [isop $nick $mealkanal] || [ishalfop $nick $mealkanal] || [isvoice $nick $mealkanal] } {
catch {channel set $mealkanal +durmeal}
}
putserv "PRIVMSG $chan : $mealkanal kanalında meal okuma $nick tarafından durduruldu."
}
proc timer:meal {} {
global botnick mealkanal mealzaman mealtxt mealsatir
if { [onchan $botnick $mealkanal] && ![channel get $mealkanal durmeal] } {
set mealdosya [open $mealtxt r]
set mealoku [split [read $mealdosya] \n]
close $mealdosya
putserv "PRIVMSG $mealkanal :[lindex $mealoku $mealsatir] "
set mealsatir [expr $mealsatir + 1]
timer $mealzaman "timer:meal"
}
}
#bu kadar ... hadi geçmiş olsun :d
putlog "meal.tcl kullanıma hazır... "
#
#
böyle oldu umarım işinize yarar...