|
No_FeaR Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. |
Telegram için, yapmış olduğum botu, TCL çevirip buraya da vermek istedim.. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Umarım kullanan olur. Türkçe karakter sorunu mIRC üzerinde yok.
Ancak sunucum olmadığı için, mIRC üzerinden denedim. mIRC üzerinde bir sorun yok..
Web'i dediğim gibi deneyemedim.. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Umarım beğenirsiniz..
Uzun aradan sonra bir TCL tasarladım umarım beğenirsiniz.. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Kod: Kodu kopyalamak için üzerine çift tıklayın! namespace eval PlakaOyun {
variable kanal "#Plaka"
variable puan_degeri 10
variable bekleme_suresi 5
variable zaman_asimi 30
variable admin_nick "No_FeaR"
variable puan_dosyasi "scripts/plaka.puan"
variable oyun_durumu 0
variable aktif_plaka ""
variable aktif_sehir ""
variable timer_id ""
variable cevap_bekleniyor 0
# TEKRARSIZ SORU ICIN DEGISKENLER
variable son_sorulanlar {}
variable hatirlama_limiti 10
# ŞEHİR LİSTESİ
variable sehirler {
"01" "Adana" "02" "Adıyaman" "03" "Afyon" "04" "Ağrı"
"05" "Amasya" "06" "Ankara" "07" "Antalya" "08" "Artvin"
"09" "Aydın" "10" "Balıkesir" "11" "Bilecik" "12" "Bingöl"
"13" "Bitlis" "14" "Bolu" "15" "Burdur" "16" "Bursa"
"17" "Çanakkale" "18" "Çankırı" "19" "Çorum" "20" "Denizli"
"21" "Diyarbakır" "22" "Edirne" "23" "Elazığ" "24" "Erzincan"
"25" "Erzurum" "26" "Eskişehir" "27" "Gaziantep" "28" "Giresun"
"29" "Gümüşhane" "30" "Hakkari" "31" "Hatay" "32" "Isparta"
"33" "Mersin" "34" "İstanbul" "35" "İzmir" "36" "Kars"
"37" "Kastamonu" "38" "Kayseri" "39" "Kırklareli" "40" "Kırşehir"
"41" "Kocaeli" "42" "Konya" "43" "Kütahya" "44" "Malatya"
"45" "Manisa" "46" "Maraş" "47" "Mardin" "48" "Muğla"
"49" "Muş" "50" "Nevşehir" "51" "Niğde" "52" "Ordu"
"53" "Rize" "54" "Sakarya" "55" "Samsun" "56" "Siirt"
"57" "Sinop" "58" "Sivas" "59" "Tekirdağ" "60" "Tokat"
"61" "Trabzon" "62" "Tunceli" "63" "Şanlıurfa" "64" "Uşak"
"65" "Van" "66" "Yozgat" "67" "Zonguldak" "68" "Aksaray"
"69" "Bayburt" "70" "Karaman" "71" "Kırıkkale" "72" "Batman"
"73" "Şırnak" "74" "Bartın" "75" "Ardahan" "76" "Iğdır"
"77" "Yalova" "78" "Karabük" "79" "Kilis" "80" "Osmaniye"
"81" "Düzce"
}
# KOMUTLAR
bind pub - !basla PlakaOyun::baslat
bind pub - !dur PlakaOyun::durdur
bind pub - !puan PlakaOyun::puan_goster
bind pub - !top10 PlakaOyun::top10_goster
bind pubm - * PlakaOyun::cevap_kontrol
# GIRIS UYARISI
bind join - * PlakaOyun::karsilama
# HEX KODLU GARANTI TEMIZLEME
# Bu fonksiyon dosya formatindan ve kullanici encodinginden bagimsiz calisir.
proc temizle {text} {
# 1. Adim: Once renk kodlarini ve kalin yazilari temizle (Ctrl+K vb.)
regsub -all {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\003} $text "" text
# 2. Adim: UTF-8 Karakterleri Byte Kodlariyla Yakala ve ASCII yap
# (Kullanici sunucuya UTF-8 gonderiyorsa burasi yakalar)
set utf8_map[list \
\xc4\xb1 i \
\xc4\xb0 i \
\xc3\xbc u \
\xc3\x9c u \
\xc5\x9f s \
\xc5\x9e s \
\xc3\xb6 o \
\xc3\x96 o \
\xc3\xa7 c \
\xc3\x87 c \
\xc4\x9f g \
\xc4\x9e g \
]
set text [string map $utf8_map $text]
# 3. Adim: ANSI (ISO-8859-9) Karakterleri Byte Kodlariyla Yakala ve ASCII yap
# (Script ANSI kayitliysa veya kullanici ANSI ise burasi yakalar)
set ansi_map[list \
\xfd i \
\xdd i \
\xfc u \
\xdc u \
\xfe s \
\xde s \
\xf6 o \
\xd6 o \
\xe7 c \
\xc7 c \
\xf0 g \
\xd0 g \
]
set text [string map $ansi_map $text]
# 4. Adim: Standart harfleri kucult ve kalanlari temizle
set text [string tolower $text]
# Ekstra guvenlik icin I ve i donusumu
set text [string map { "ı" "i" "İ" "i" } $text]
return [string trim $text]
}
proc karsilama {nick host hand chan} {
variable kanal
variable admin_nick
if {$chan != $kanal} { return }
if {$nick == $::botnick} { return }
puthelp "NOTICE $nick :Bu Bot ve TCL No_FeaR Tarafından tasarlanmıştır."
}
proc baslat {nick host hand chan arg} {
variable oyun_durumu
variable kanal
variable admin_nick
variable son_sorulanlar
if {$chan != $kanal} { return }
if {$nick != $admin_nick && ![isop $nick $chan]} { return }
if {$oyun_durumu == 1} { putserv "PRIVMSG $chan :Oyun zaten aktif."; return }
set oyun_durumu 1
set son_sorulanlar {}
putserv "PRIVMSG $chan :\002PLAKA OYUNU BASLADI!\002 (Cevaplarda Turkce karakter kullanabilirsiniz.)"
soru_sor
}
proc durdur {nick host hand chan arg} {
variable oyun_durumu
variable kanal
variable admin_nick
if {$chan != $kanal} { return }
if {$nick != $admin_nick && ![isop $nick $chan]} { return }
set oyun_durumu 0
foreach t [utimers] {
if {[string match "*PlakaOyun::*" [lindex $t 1]]} { killutimer [lindex $t 2] }
}
putserv "PRIVMSG $chan :\002Oyun bitti.\002"
}
proc soru_sor {} {
variable sehirler
variable aktif_plaka
variable aktif_sehir
variable kanal
variable cevap_bekleniyor
variable zaman_asimi
variable timer_id
variable oyun_durumu
variable son_sorulanlar
variable hatirlama_limiti
if {$oyun_durumu == 0} { return }
set toplam [llength $sehirler]
while {1} {
set rand_index [expr {int(rand() * ($toplam / 2)) * 2}]
set secilen_plaka [lindex $sehirler $rand_index]
if {[lsearch -exact $son_sorulanlar $secilen_plaka] == -1} {
set aktif_plaka $secilen_plaka
set aktif_sehir [lindex $sehirler [expr $rand_index + 1]]
lappend son_sorulanlar $aktif_plaka
if {[llength $son_sorulanlar] > $hatirlama_limiti} {
set son_sorulanlar [lreplace $son_sorulanlar 0 0]
}
break
}
}
set cevap_bekleniyor 1
putserv "PRIVMSG $kanal :\002SORU:\002 \00312$aktif_plaka\003 plakasi hangi ilimize aittir?"
set timer_id [utimer $zaman_asimi PlakaOyun::zaman_doldu]
}
proc cevap_kontrol {nick host hand chan text} {
variable kanal
variable aktif_sehir
variable cevap_bekleniyor
variable timer_id
variable bekleme_suresi
variable puan_degeri
if {$chan != $kanal || $cevap_bekleniyor == 0} { return }
# Gelen cevabi ve dogru cevabi HEX filtresinden gecirip esitle
set temiz_cevap [temizle $text]
set temiz_hedef [temizle $aktif_sehir]
# DEBUG (Sorun olursa bu satirin basindaki # isaretini kaldirip .log dosyasina bakabilirsin)
# putlog "DEBUG: Gelen($temiz_cevap) == Hedef($temiz_hedef)"
if {[string match *$temiz_hedef* $temiz_cevap] && [string length $temiz_hedef] == [string length $temiz_cevap]} {
set cevap_bekleniyor 0
foreach t [utimers] {
if {[string match "*PlakaOyun::*" [lindex $t 1]]} { killutimer [lindex $t 2] }
}
puan_ekle $nick $puan_degeri
putserv "PRIVMSG $kanal :\00303TEBRIKLER $nick!\003 Dogru cevap: \002$aktif_sehir\002 ($puan_degeri Puan)"
utimer $bekleme_suresi PlakaOyun::soru_sor
}
}
proc zaman_doldu {} {
variable kanal
variable aktif_sehir
variable cevap_bekleniyor
variable bekleme_suresi
set cevap_bekleniyor 0
putserv "PRIVMSG $kanal :\002SURE DOLDU!\002 Cevap: \004$aktif_sehir\004 idi."
utimer $bekleme_suresi PlakaOyun::soru_sor
}
proc puan_ekle {nick puan} {
variable puan_dosyasi
array set skorlar {}
if {[file exists $puan_dosyasi]} {
set f [open $puan_dosyasi r]
array set skorlar [read $f]
close $f
}
if {[info exists skorlar($nick)]} {
incr skorlar($nick) $puan
} else {
set skorlar($nick) $puan
}
set f [open $puan_dosyasi w]
puts $f [array get skorlar]
close $f
}
proc puan_goster {nick host hand chan arg} {
variable puan_dosyasi
array set skorlar {}
if {[file exists $puan_dosyasi]} {
set f [open $puan_dosyasi r]
array set skorlar [read $f]
close $f
}
if {[info exists skorlar($nick)]} {
putserv "PRIVMSG $chan :$nick, puanin: \002$skorlar($nick)\002"
} else {
putserv "PRIVMSG $chan :$nick, puanin yok."
}
}
proc top10_goster {nick host hand chan arg} {
variable puan_dosyasi
if {![file exists $puan_dosyasi]} {
putserv "PRIVMSG $chan :Liste bos."
return
}
set f [open $puan_dosyasi r]
array set skorlar [read $f]
close $f
set liste {}
foreach {oyuncu p} [array get skorlar] {
lappend liste[list $oyuncu $p]
}
set sirali [lsort -integer -decreasing -index 1 $liste]
putserv "PRIVMSG $chan :\002--- TOP 10 ---\002"
set sayac 1
foreach item $sirali {
if {$sayac > 10} break
putserv "PRIVMSG $chan :$sayac. [lindex $item 0] - [lindex $item 1]"
incr sayac
}
}
}
putlog "Plaka Tahmin Oyun Bot TCL No_FeaR Yüklendi.." Eggdrop1.6.18 sürümü içindir.. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Ekran Görüntüsü ; [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] |
Not;
1. Owner Tanımlaması (Sahip Tanıtma)
Botunuz olası bir çalışmaması durumunda TCL dosyasındaki owner nick ile bot.conf /tcl dosyasındaki owner nick aynı olmalıdır.
Örnek:
No_FeaR olarak ayarladıysanız, her iki dosyada da aynı şekilde No_FeaR yazmalıdır.
Botu kendinize tanıtmak için:
|
| Alıntı: |
|
/msg BotAdı hello
|
komutunu özelden gönderin.
2. Oyun Kanalı Ayarı
Botun oyun komutlarını doğru algılaması için TCL dosyasında belirttiğiniz kanal ile conf dosyasında botun bulunduğu kanal mutlaka aynı olmalıdır.
Yani bot hangi kanalda oyun oynatacaksa iki dosyada da o kanal aynı şekilde yazılmış olmalıdır.