![]() |
![]() |
![]() |
#1 |
![]()
Üyelik tarihi: 27 Ocak 2015
Bulunduğu yer: Denizli Mesajlar: 136 WEB Sitesi: www.AlemTR.com IRC Sunucusu: www.AlemTR.com İlgi Alanı: Alınan Beğeni: 69 |
![]()
sanırım biri daha evvel böyle birşey yazmıştı burada ama gördüğüm mirc script miydi? yoksa Tcl mi doğrusu hatırlamıyorum.
kodun yapması beklenen iş: oper botunuzun gördüğü sunucu girişlerinden kullanıcı hostu/IP'sini sorgulatmak, alınan şehir bilgisine göre o şehir isminde bir kanal var ise sunucuda ( ayar kısmındaki açıklamaları okuyunuz.) oraya o kullanıcıyı sajoin'lemek. yok sunucudaki hiçbir şehir kanalıyla eşleşmiyen bir şehirdense bilgisi o zaman onları başka bir yerlere sajoin'lemek. (ayar kısmında belirtildi.) Önemli Uyarılar : * bu kod yapısı gereği, Tcl8.5.x ve üstü sürümlerce desteklenen,bu üst sürümlerde yer alan komutları kullanmaktadır. Tcl8.4.x yada daha alt sürümlerde kod çalışmaz,tanımadığı/desteklemediği bu komutlar nedeniyle hata atar. * kod'da veri alımında kullanılan site API'si verileri JSON formatındadır .. bu formatta alınan veriler tcllib json paketinin getirdiği komutlarla Tcl dict ( Tcl list )'e çevrilerek istenen veri alımı sağlanmıştır. ki bu site için ya xml ya JSON formatı seçilebilirdi. xml seçseydim o zamanda tDom paketi ve onun getireceği komutlarla yazmam gerekirdi. (ki bu tDom ayrı bir projedir ne Tcl ne tcllib içinde yer almaz ayrıca proje adresinden alınıp kurulması/derlenmesi gerekir.) * site kodlarından regexp vs kullanılarak çekilemez miydi? diye sorulacaksa ,cevabı -> hayır çekilemezdi. çünkü site kodları javascript kullanıyor. ve alınmak istenen veriyi gizliyor. o nedenle de API kullanmaktan başka daha kullanışlı bir seçenek yok..tu... uzun lafın kısası ,bu script için en az Tcl8.5 sürümü ve tcllib zorunludur. Kod:
# http paketi gerekir. package require http # tcllib json paketi gerekir. # git clone https://github.com/tcltk/tcllib.git && cd tcllib && ./configure && make install package require json # kullanıcı sehri eşleşirse bu kanallara gönderilecek... # sunucunuzdaki #şehir kanallarını/kullanıcın çekilmesini istediğiniz kanalları, # aralarına boşluk bırakarak girin. set sehirknl "#adana #istanbul #bursa #samsun #ankara #samsun" # şehir bilgisi yukarıdaki sunucunuzdaki #şehir kanallarından hiçbiriyle # eşleşmeyen kullanılar,hangi kanallara çekilecek: # birden fazlaysa, örnekteki şekilde giriniz. set defknl[list #ana-kanal #bir-digeri] # ayar sonu # önemli uyarılar: # Tcl8.5.x ve üstü sürümlerle çalışır. (daha alt sürümlerle *çalışmaz*) # botun oper yetkilerine sahip olması gerekir. bind raw * NOTICE client_connect proc client_connect {from key text} { if {[string match "*!*@*" $from]} { return } if {![string match -nocase "*client connecting*" $text]} { return 0 } regexp {^\W+([^\:]+)\:([^\(]+)\(([^@]+)@([^\\W+]+)\)$} $text - port nick ident host if {[regexp {^([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})$} $host]} { set target $host } else { set target [dnslookup $host ipchk] } set ipsite "http://ip-api.com/json/" ::http::config -useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5" set token [::http::geturl $ipsite$target -timeout [expr {6*1000}]] set data [json::json2dict [::http::data $token]] ::http::cleanup $token set sehir [dict get $data city] foreach n [split $::sehirknl " "] { if {[string match -nocase "#$sehir" $n]} { putquick "sajoin $nick #$sehir" } else { putquick "sajoin $nick $::defknl" } } return 0 } proc ipchk {bir iki uc} { if {$uc} { return $bir } else { putcmdlog "Hata $iki çözülemedi..." return $iki } } putlog "ok..." Kod:
can't find package json while executing "package require json" (file "t.tcl" line 8) ![]() Aynı Dünyada Yaşamamalı Cellatlar Ve Çocuklar . Ya Ölmeli Cellatlar,Yada Hiç Doğmamalı Çocuklar...! |
![]() |
Alıntı
|
Etiketler |
#şehir, oto, sajoin, tcl |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
Seçenekler | |
Stil | |
|
|
![]() |
||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
SAJOIN komutunu X kişiye kullanmayı yasaklamak. | Entrance | Unreal - Parça Kodlar | 1 | 19 Mayıs 2016 01:42 |
Operlere (SAJOIN - SAPART) yetkisi vermek. | Entrance | Unreal - Parça Kodlar | 0 | 07 Mart 2015 13:39 |
CR de Sajoin Hakkında | Goemon | ConferenceRoom | 0 | 05 Mart 2015 11:28 |
SAJOIN komutunu belirtilen rumuzlara açmak. | Entrance | Unreal - Parça Kodlar | 1 | 16 Şubat 2015 13:01 |
Girişte Nickin Ülke/Şehir/ISP Gösterme | Toprak | Hazır Kodlar | 0 | 11 Şubat 2015 22:07 |