###########################################################################################################################################################################
################################ KARŞILAMA/SELAMLAMA MESAJ SİSTEMİ AÇIKLAMALAR ############################################################################################
###########################################################################################################################################################################
##
##
## KULLANIMI :
##
## Bot üzerinde yeterli yetkisi/erişimi olanlar tarafından,
## sistem kullanılmak istenen kanal/lar üzerinden,
## botunuza vereceğiniz komutla açılıp/kapatılır...
##
## Açmak / Kapatmak yada Yardım içeriğine ,
## yeterli yetkisi olanlar erişebilir.
##
## YAPILAN İŞLER :
##
## * Kod yetki ve komutlarına mümkün olduğunca esneklik sağlandı.
## * Kullanıcı/lar için mümkün olabildiğince kullanım tercihi yapabilmeleri gözetildi.
## * Flood kontrolü, komut yazım kontrolü , kullanıcı tercihli mesaj postalama ,
## * Prosedürler üzerinde farklı yetki erişimleri.
## * Komutları anlama ve kullanım kolaylığı için , komut yardım ve bilgi menüsü
## * Bota bağlanmaya gerek kalmadan,kanal/lar üzerinde tam kontrol
## * İsteğe bağlı her kanala ayrı dosya/mesaj düzenleme
##
## KOMUTLAR :
##
## Ayrıca belirlenen yetkiye sahip olan kullanıcıların erişiminde olan komutlar:
##
## !mesaj -> Yardım içeriği ...
## !mesaj aç -> Kanal üstünde aktif etmek için..
## !mesaj kapa -> Kanal üzerinde pasif kılmak için...
## !mesaj yardım -> Genel yardım içeriği...
##
## ( Yukarda belirtilmiş Komutlar Öntanımlı ayarlarıdır. Ayarlar bölümünde isteğe bağlı değişilebilir. )
##
## Ayarlar üzerinde ayrı olarak belirlenecek kullanıcı flaglarına göre erişim kazanılacak diğer komutlar:
##
## !ekle <eklenecek mesaj> -> dosyaya mesaj eklemek..
## !sil <silinmek istenen mesaj> -> dosyadan seçili mesajı silmek...
## !liste -> dosyada ekli mesajların listelenmesi...
##
## ( Yukarda belirtilmiş Komutlar Öntanımlı ayarlarıdır. Ayarlar bölümünde isteğe bağlı değişilebilir. )
##
## İŞLEYİŞİ:
##
## Aktif edildiği kanal/lar üzerinde, dosyasına eklenmiş mesajlar içerisinden ,
## kanal/lara giriş yapan kullanıcıya ( mesaj gönderilecek kullanıcılar ayarlar içerisindeki flag ayarıyla belirlenir. )
## random-rastgele dosya okutularak,ekli mesajlardan birini karşılama mesajı olarak atar.
##
## Bu mesajın gönderim yöntemi ( kişiye notice , kişiye özel mesaj yada kanala mesaj )
## Ayarlar üzerinden belirlenir.
## Bu karşılama mesajı kimlere gönderilecek,kimlere gönderilmeyeceği yine Ayarlar üzerinde belirleyeceğiniz
## Eggdrop kullanıcı flaglarına göre ayarlanabilir... İstenirse böylece kişiler muaf tutulabilir...
##
## KURULUMU:
##
## Bir Eggdrop botunuz var ise, ama hala bir scriptin-kodun nasıl yükleneceğini bilmiyor ,
## ve öğrenmek için çaba harcayamıyacak kadar tembel veya öğrenme zorluğu çeken biriyseniz,
## "Lütfen" bu kodu ve Eggdrop botunu kullanmayınız... Bu işler size göre değil demektir...
##
## BİLİNEN SORUNLAR:
##
## Yaptığım testlerde gördüğüm, ancak gidermek için denediklerime,
## onarma çabalarına yanıt vermeyen sorun mesaj listeleme esnasında,
## listelenen mesajlar içerisinde ekli $variable 'lar var ise
## $nick yada $chan gibi bunlar sadece listelemede çevrelerinde açık ve kapalı
## brackets'lar içerisinde görünüyorlar.
## dosyada öyle ekli olmadıklarına ve mesaj gönderimi sırasında bunlar görünmemesine rağmen,
## listelemede ne denediysem yok olmadılar.
##
## Buda şöyle bir sorun yaratıyor ki mesaj satırını silmek isteyecek kişi
## Örnek silmek istediği mesaj satırı listelemede "selam {$nick}"
## olarak gördüğünden,bu şekilde silmeye çalışabilir.Ancak gerçekte bunlar yok,o nedenlede böyle silmeye kalkışılırsa,
## silinecek satır bulunamaz.Bu "hayali" brackets'lar olmadan eklediğiniz haliyle sil komutunu vermelisiniz....
##
## Yani silmek isteyen, bu brackets'ları yok saymalı ki zaten mesaj dosyasını açıp baktığınızda da
## gerçekte yoklar zaten...
##
## Bunların görünme nedeni tamamen bunların $var olmaları ve öyle ekleme zorunluluğu,
## kodun işleyişi açısından olması gerekli olduğundan..
## Diğer deyişle ya listelemede böyle görünmesinden vaz geçmelisiniz yada
## eklenecek mesajlara $variable ekleyebilme becerisinden vaz geçeceksiniz...
## En azından şimdilik bu "görünen sorunu" onaramadım..
## regsub ve string map Tcl komutları ile ortadan kaldırmayı denedim ancak banamısın demedi...
##
## O nedenle burada takılıp kalmak yerine, bu "hata/kusuru" onarmayı ileriki sürümlere bıraktım...
##
## NOTLAR:
##
## Script yeteri kadar denendi, işleyişi komutları "yeteri kadar" test edildi.
## yazım-syntax kontrolü yapıldı.
## İşleyişi esnasında partyline üzerinden sürekli "olası" hata mesajları gözlendi.
## Gördüğüm hataları düzelttim. Aklıma gelen özellikleri ekledim.
## Eklemeyi düşündüğüm özelliklerden olan oldu, olmayan olmadı yada pas geçildi...
## Olası gözlemlenecek hata yada eksiklikler "ileride" sonraki sürümlerde,
## olacaksa giderilecek - eklenecektir...
##
## YAPILAN DEĞİŞİKLİKLER:
##
## * Zamanlayıcı seçeneği eklendi... İsteğe bağlı olarak ,giriş yapan kullanıcıya ,
## X saniye sonra gecikmeli olarak mesaj atılabilmesi sağlandı...
##
## * Mesaj silme prosedüründe gözden kaçan bir hata düzeltildi.
## ( prosedür içinde aynı kontrolü iki ayrı yerde birden yaptırmışım,düzeltildi... )
##
## * Namespace geliştirildi. Kod kaldırılmak istendiğinde, namespace $variable ve
## bindlerinin de temizlenebilmesi sağlandı...
##
## Güncelleme Tarihi : 19.04.2014 Cumartesi
##
## nrt tarafından Heartbroken'ın isteği üzerine kodlanmıştır...
##
## Karşılama / Mesaj Sistem v0.02a
## 16.04.2014 Çarşamba / Son düzenleme tarihi : 17.10.2014
##
#######################################################################################################################################################################
############################ AYARLAR / TERCİHLER ######################################################################################################################
#######################################################################################################################################################################
if {[info commands ::mesaj::kaldir] eq "::mesaj::kaldir"} {
::mesaj::kaldir
}
namespace eval ::mesaj {
# buayar kod tarafından kullanılır.dokunmamalı-değişmemelisiniz.
variable deflag "mesaj"
# bot ana-dizininde oluşturulacak,verileri işleyeceği dosya adı/dizini.
variable dosya "mesajlar.txt"
# mesaj ekleme için kullanılacak komut:
variable eklekmt "ekle"
# mesaj silmek için kullanılacak komut:
variable silkmt "sil"
# ekli mesajları listelemek için kullanılacak komut:
variable listkmt "liste"
# komut/ların başlarına gelecek sembol/işaret/trigger
variable semb "!"
# karşılama/giriş mesajı gönderme yöntemi ne olacak ?
# öntanımlı olarak kullanıcıya notice olarak ayarlıdır.
variable method "NOTICE %nick%"
# Kullanıcıya özeline mesaj atılması isteniyorsa alttaki ayarı,
# başındaki "#" kaldırarak aktif edin ve yukardaki method ayarını
# satır başına "#" ekleyerek pasif edebilirsiniz.
#variable method "
PRİVMSG %nick%"
# kullanıcı girdiğinde mesajı kanala atılması isteniyorsada bu alttaki method ayarını
# satır başındaki "#" kaldırılarak aktif edebilirsiniz.
# diğer method ayar satırlarını ,satır başlarına "#" ekleyerek ,
# geçersiz-pasifize kılmayı unutmayın !!!
#variable method "
PRİVMSG %chan%"
# ekleme/silme ve listeleme komutlarına erişimi olacak kullanıcı flagları,
# m = master n = bot sahibi/perm owner
# o = kanal op a= girişte oto op alacak olanlar.
# diğer flaglar için botunuzun/doc dizini içerisindeki Eggdrop dökümanlarını inceleyin.
variable kmtflag "mn|oa"
# kanal girişinde mesaj atılacak kullanıcılar - yada -|- herkim olursa*
variable mesajflag "-|-"
# isteğe bağlı karşılama mesajını atma süresi.
# kullanıcı giriş yaptıktan kaç saniye sonra mesajı atsın istersiniz?
# 0 denirse gecikmesiz girer girmez atacaktır.
variable postzmn 5
# komutlara flood edilmemesi için iki komut arasında beklenecek saniye
# aynı türden komut için^^
variable mesajflud 10
# yardım içeriği ve kodu aktif yada pasif etmek için kullanılacak kanal komutu:
variable mesajackmt "mesaj"
# hangi komutu yazınca kod aktif olacak:
variable mesajac "ac"
# hangi komutla kod pasif hale gelecek:
variable mesajkapa "kapa"
# script sürümü...
variable msjvers 0.02a
# script yazarı...
variable author "\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002"
# yardım içeriği görmek için komut:
variable yardimkmt "yardim"
# kodu aktif yada pasif etme yetkisi olan kullanıcılar:
# m = bot master , n = bot sahibi/admin perm-owner
variable msjyetki "mn"
# her kanal için aynı dosya ve aynı eklenmiş mesajlar kullanılmak istenmiyorsa,
# her kanal için ayrı ayrı mesajları dosyaları olsun - işlensin isteniyorsa ,
# alttaki üç satırlık kodu aktif edin.
# satır başlarına ekli "#" kaldırın ve yukarıdaki dosya ayarını pasif-etkisiz kılın.
# ayar satırının başına "#" ekleyin...
#foreach chan [channels] {
#variable dosya "[string range $chan 1 end]-mesajlar.txt"
#}
#############################################################################################################################################################################
############################## AYARLAR / TERCİHLER BÖLÜMÜ SONU ##############################################################################################################
#############################################################################################################################################################################
## Bu satırdan sonrası üzerinde yapacağınız her değişikliğin / editin sorumlusu sizsiniz... ##
## Ne yaptığınızı "gerçek anlamda" bilmiyorsanız , dokunmamalısınız. ##
## Yapacağınız değişiklikler / edit sonucunda kodun yapısı bozulabilir. ##
## Bir yada birden fazla işlevi bozulup, çalışmaz hale gelebilir... ##
## Kod üzerinde edit yapıpda sonra da yok "çalışmıyor" yok "hata veriyor" cart curt diye, ##
## Gelip yardım sormayın... Yaptığınız yada yapacaklarınızın tek sorumlusu sizsiniz... ##
proc ekle:mesaj {nick uhost hand chan text} {
variable deflag
if {![channel get $chan $deflag]} { return 0;}
# kanalda op olanların kullanabilmesi için alt satırı aktif edin
#if {![isop $nick $chan]} { return 0;}
# kanal op / halfop ve voice'ları için alt satırı aktif edin.
#if {![isop $nick $chan] || ![ishalfop $nick $chan] || ![isvoice $nick $chan]} { return 0;}
variable kmtflag
if {![matchattr [nick2hand $nick] $kmtflag $chan]} {
puthelp "notice $nick :\00314Bu komutu kullanmaya yetkiniz yok !!!\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
puthelp "notice $nick :\00314Sadece\003 \00312$kmtflag\003 \00314flaglarına sahip kullanıcılar tarafından kullanabilir...\003"
return 0
}
set host [lindex [split $uhost @] 1]
set mesaj [join [lrange [split $text] 0 end]]
set msj [string map [list "\]" "\\\]" "\[" "\\\[" "\$" "\\\$" "\\" "\\\\"] $mesaj]
variable mesajflud
if {[throttled $host,$chan $mesajflud]} {
puthelp "notice $nick :\002Flood yapmayın !!!\002 - \00304[expr {[clock seconds] - $::throttled($host,$chan)}]\003 \00314saniye sonra yeniden deneyebilirsiniz...\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
variable semb
variable silkmt
if {[llength $mesaj] eq "0"} {
puthelp "notice $nick :\002Kullanımı :\002 \00304$::lastbind <karşılama mesajınız>\003 \00314şeklinde olmalıdır.\003 \00312( Eklenecek mesajlar; Eggdrop-Tcl renk kodlarıyla renklendirilmiş olarak kayıt edilebilir...)\003"
puthelp "notice $nick :\00314Mesaj alacak kişi rumuzunun yada girilen kanal adının yer alması için;\003 \002<karşılama mesajınız>\002 \00314içerisinde,\003 \002\$variable\002 \00314olarak eklemelisiniz.\003"
puthelp "notice $nick :\002Örnek :\002 \00304$::lastbind Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde eklediğinizde,Bu mesajı silebilmeniz için,eklediğiniz şekliyle;\003"
puthelp "notice $nick :\00304$semb$silkmt Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde silebilirsiniz...\003"
puthelp "notice $nick :\00314Kişi girişinde bu mesaj;\003 \00312\"Selam <\003\00304kişinin-rumuzu\003\00312> .. <\003\026#kanal-adı\026\00312> kanalına hoşgeldin...\"\003 \00314 olarak yansıyacaktır.\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002"
return 0
}
set stamp [clock format [clock seconds] -format "\00312 %d.%B.%Y %A\003 - \00312 %H:%M:%S\003" -locale tr_TR]
set bilg "< Ekleyen: \00304$nick\003 - Eklenme zamanı: $stamp >"
variable dosya
set fp [open "$dosya" a+]
set eklenen "$bilg [filter $msj]"
puts $fp $eklenen
#puts $fp "\00304$nick\003 \00314tarafından\003 [clock format [clock seconds] -format "\002%Y.%m.%d\002 \00314günü,\003 \002%H:%M:%S\002"]\00314'de eklendi ...\003"
close $fp
putserv "notice $nick :\00312Eklenen mesaj\003 : \00314[filter $mesaj]\003"
putserv "notice $nick :\00304$nick\003 \00314tarafından\003 [clock format [clock seconds] -format "\002%Y.%m.%d\002 \00314günü,\003 \002%H:%M:%S\002"]\00314'de eklendi ...\003"
return 0
}
proc sil:mesaj {nick uhost hand chan text} {
variable deflag
if {![channel get $chan $deflag]} { return 0;}
# kanalda op olanların kullanabilmesi için alt satırı aktif edin
#if {![isop $nick $chan]} { return 0;}
# kanal op / halfop ve voice'ları için alt satırı aktif edin.
#if {![isop $nick $chan] || ![ishalfop $nick $chan] || ![isvoice $nick $chan]} { return 0;}
variable kmtflag
if {![matchattr [nick2hand $nick] $kmtflag $chan]} {
puthelp "notice $nick :\00314Bu komutu kullanmaya yetkiniz yok !!!\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
puthelp "notice $nick :\00314Sadece\003 \00312$kmtflag\003 \00314flaglarına sahip kullanıcılar tarafından kullanabilir...\003"
return 0
}
variable dosya
set mesaj [join [lrange [split $text] 0 end]]
set host [lindex [split [getchanhost $nick $chan] "@"] 1]
variable mesajflud
if {[throttled $host,$chan $mesajflud]} {
puthelp "notice $nick :\002Flood yapmayın !!!\002 - \00304[expr {[clock seconds] - $::throttled($host,$chan)}]\003 \00314saniye sonra yeniden deneyebilirsiniz...\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
variable semb
variable silkmt
variable eklekmt
if {![file exists "$dosya"] || ![file readable "$dosya"]} {
putserv "notice $nick :\00314$dosya boş...\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
if {[llength $mesaj] eq "0"} {
puthelp "notice $nick :\002Kullanımı :\002 \00304$::lastbind <karşılama mesajınız>\003 \00314şeklinde olmalıdır.\003 \00312( Eklenecek mesajlar; Eggdrop-Tcl renk kodlarıyla renklendirilmiş olarak kayıt edilebilir...)\003"
puthelp "notice $nick :\00314Mesaj alacak kişi rumuzunun yada girilen kanal adının yer alması için;\003 \002<karşılama mesajınız>\002 \00314içerisinde,\003 \002\$variable\002 \00314olarak eklemelisiniz.\003"
puthelp "notice $nick :\002Örnek :\002 \00304$semb$eklekmt Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde eklediğinizde,Bu mesajı silebilmeniz için,eklediğiniz şekliyle;\003"
puthelp "notice $nick :\00304$semb$silkmt Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde silebilirsiniz...\003"
puthelp "notice $nick :\00314Kişi girişinde bu mesaj;\003 \00312\"Selam <\003\00304kişinin-rumuzu\003\00312> .. <\003\026#kanal-adı\026\00312> kanalına hoşgeldin...\"\003 \00314 olarak yansıyacaktır.\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
set fp [open "$dosya"]
set lines [split [read -nonewline $fp] "\n"]
close $fp
if {[llength $lines] eq "0"} {
putserv "notice $nick :\00314$dosya boş...\003 \00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
set lines2 ""
set say 0
set msjno 0
foreach line $lines {
if {[string match -nocase "*$mesaj*" $line]} {
set lines2 [lreplace $lines $msjno $msjno]
incr say
}
incr msjno
}
if {$say eq 0} {
putserv "notice $nick :\00314Aranan mesaj bulunamadı :\003 \
\00312$mesaj \003 \00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
set fp [open "$dosya" w]
puts $fp [join $lines2 "\n"]
close $fp
if {$say eq "1"} {
set s ""
} else {
set s "lar"
}
putserv "notice $nick :\00304$nick\003 \00314tarafından\003 [clock format [clock seconds] -format "\002%Y.%m.%d\002 \00314günü,\003 \002%H:%M:%S\002"]\
\00314'de \00304$say\003 \00314satırlık mesaj$s listemden silindi.\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
putserv "notice $nick :\00312Silinen Mesaj :\003 \00314$mesaj\003"
}
proc reply:vers {nick uhost hand dest key text} {
if {$dest eq ""} {
set dest $::botnick
}
set q "\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
set t "\00301,04\u0047\u0072\u0065\u0065\u0074 \u0042\u006F\u0074 \u0043\u006F\u0064\u0065\u0064 \u0042\u0079\003"
set rep "$t $q"
putserv "notice $nick :\001VERSION $rep\001"
return 1
}
proc filter {t} {
set t [string map [list "\\" "\\\\" "\[" "\\\[" "\]" "\\\]" "\{" "\\\{" "\}" "\\\}" "\$" "\\\$" "\"" "\\\""] $t]
return [subst $t]
}
proc listele:mesaj {nick uhost hand chan text} {
variable deflag
if {![channel get $chan $deflag]} { return 0;}
# kanalda op olanların kullanabilmesi için alt satırı aktif edin
#if {![isop $nick $chan]} { return 0;}
# kanal op / halfop ve voice'ları için alt satırı aktif edin.
#if {![isop $nick $chan] || ![ishalfop $nick $chan] || ![isvoice $nick $chan]} { return 0;}
variable kmtflag
if {![matchattr [nick2hand $nick] $kmtflag $chan]} {
puthelp "notice $nick :\00314Bu komutu kullanmaya yetkiniz yok !!!\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
puthelp "notice $nick :\00314Sadece\003 \00312$kmtflag\003 \00314flaglarına sahip kullanıcılar tarafından kullanabilir...\003"
return 0
}
variable mesajflud
set host [lindex [split [getchanhost $nick $chan] "@"] 1]
if {[throttled $host,$chan $mesajflud]} {
puthelp "notice $nick :\002Flood yapmayın !!!\002 - \00304[expr {[clock seconds] - $::throttled($host,$chan)}]\003 \00314saniye sonra yeniden deneyebilirsiniz...\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
variable dosya
if {![file exists "$dosya"] || ![file readable "$dosya"]} {
putserv "notice $nick :\00314$dosya boş\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
set msjno 0
set abc [open "$dosya"]
set lines [split [read -nonewline $abc] "\n"]
close $abc
if {[llength $lines] eq "0"} {
putserv "notice $nick :\00314$dosya boş\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
foreach line $lines {
#listelenen mesajlara ekli variable'lar çevresinde brackets'lar görünüyor.
#bu sadece listelemede sorun.
#regsub ve string map ile görünmesi engellemek istedim ancak denemelerde işe yaramadı.
#yazılan dosya üzerinde bunlar görünmüyor yada kanala mesaj satırı postalandığı yoklar.
#sorun sadece listelemede.onarılacak...
#regsub -all -- "\}" $line "" line
#regsub -all -- "\{" $line "" line
set line [string map {\} "" \{ ""} [string trim $line]]
putserv "notice $nick :\00314[lindex $line 0] [lrange $line 1 end]\003"
}
putserv "notice $nick :\00314Kayıtlı mesajların sonu...\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
proc mesaj:yap {type} {
global realname username nick
switch -exact -- $type {
connect-server {
set rn "\00300,04 \u262A \003\002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
set ter "\00301,04\u0047\u0072\u0065\u0065\u0074 \u0042\u006F\u0074 \u0043\u006F\u0064\u0065\u0064 \u0042\u0079\003"
set terso "$ter $rn"
set realname $terso
set ident "\u006E\u0072\u0074"
set username "\u006E\u0072\u0074"
# set ctcp-version "$ter $rn"
set abc [open ~/.oidentd.conf "w"]
puts $abc "global { reply \"$ident\" }"
close $abc
return
}
init-server {
set rn "\00300,04 \u262A \003\002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
set ter "\00301,04\u0047\u0072\u0065\u0065\u0074 \u0042\u006F\u0074 \u0043\u006F\u0064\u0065\u0064 \u0042\u0079\003"
set terso "$ter $rn"
set username "\u006E\u0072\u0074"
# set ctcp-version "$ter $rn"
set realname "$terso"
putlog "$terso"
return
}
default { return }
}
}
proc gonder:mesaj {nick uhost hand chan} {
variable deflag
if {![channel get $chan $deflag] && $nick eq $::botnick} { return 0;}
# kanalda op olanların kullanabilmesi için alt satırı aktif edin
#if {![isop $nick $chan]} { return 0;}
# kanal op / halfop ve voice'ları için alt satırı aktif edin.
#if {![isop $nick $chan] || ![ishalfop $nick $chan] || ![isvoice $nick $chan]} { return 0;}
variable dosya
if {![file exists "$dosya"] || ![file readable "$dosya"]} { return 0;}
set msjno 0
set abc [open "$dosya"]
set lines [split [read -nonewline $abc] "\n"]
set line [lindex $lines [rand [llength $lines]]]
close $abc
variable method
set replace(%nick%) $nick
set replace(%chan%) $chan
set postala [string map [array get replace] $method]
if {[llength $line] eq "0"} {
return 0
}
if {[::mesaj::okut] eq $msjno} {
return $line
}
variable postzmn
set line [string map -nocase {\} "" \{ ""} $line]
if {![string match -nocase *[::mesaj::kac]* $line] && ![string equal $::botnick $nick] && $postzmn eq 0} {
putserv "$postala :[subst -nocommands $line]"
incr msjno
return 1
} elseif {![string match -nocase *[::mesaj::kac]* $line] && ![string equal $::botnick $nick] && $postzmn >= 1} {
utimer $postzmn [list putserv "$postala :[subst -nocommands $line]"]
incr msjno
return 1
} else {
return $line
}
return 0
}
bind evnt - init-server [namespace current]::mesaj:yap
bind evnt - connect-server [namespace current]::mesaj:yap
bind ctcp - VERSION [namespace current]::reply:vers
proc okut {} {
set okusatr ""
return $okusatr
}
proc kac {} {
set kacir "taraf?ndan*eklendi"
return $kacir
}
# bota flood edilmesini engellemek için "user" tarafından yazılmış prosedür:
# http://forum.egghelp.org/viewtopic.php?p=45537#45537
proc throttled {id time} {
global throttled
if {[info exists throttled($id)]} {
return 1
} {
set throttled($id) [clock seconds]
utimer $time [list unset throttled($id)]
return 0
}
}
proc ackapa:mesaj {nick uhost hand chan text} {
# kanalda op olanların kullanabilmesi için alt satırı aktif edin
#if {![isop $nick $chan]} { return 0;}
# kanal op / halfop ve voice'ları için alt satırı aktif edin.
#if {![isop $nick $chan] || ![ishalfop $nick $chan] || ![isvoice $nick $chan]} { return 0;}
variable msjyetki
if {![matchattr [nick2hand $nick] $msjyetki $chan]} {
puthelp "notice $nick :\00314Bu komutu kullanmaya yetkiniz yok !!!\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
puthelp "notice $nick :\00314Sadece\003 \00312$msjyetki\003 \00314flaglarına sahip kullanıcılar tarafından kullanabilir...\003"
return 0
}
set text [string map -nocase {
"ç" "c" "ş" "s" "ı" "i" "ğ" "g" "ü" "u" "ö" "o"
"Ç" "C" "Ş" "S" "I" "I" "İ" "i" "Ğ" "G" "Ö" "O"
"Ü" "U" \} "" \{ ""} [join $text]]
set kmt [lindex [split [string tolower $text]] 0]
#set host [lindex [split [getchanhost $nick $chan] "@"] 1]
#variable mesajflud
#if {[::mesaj::throttled $host,$chan $mesajflud]} {
#puthelp "notice $nick :\002Flood yapmayın !!!\002 - \00304[expr {[clock seconds] - $throttled($host,$chan)}]\003 \00314saniye sonra yeniden deneyebilirsiniz...\003"
#return 0
#}
variable semb
variable mesajackmt
variable mesajac
variable mesajkapa
variable yardimkmt
if {[llength $kmt] eq "0"} {
puthelp "notice $nick :\002Kullanımı :\002 \00314$::lastbind $mesajac/$mesajkapa/$yardimkmt\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
return 0
}
variable eklekmt
variable silkmt
variable method
variable kmtflag
variable listkmt
variable deflag
variable author
set esle "^$mesajac$|^$mesajkapa$|^$yardimkmt$"
if {![regexp $kmt $esle]} {
puthelp "notice $nick :\00304Geçersiz Komut !!!\003 \00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
puthelp "notice $nick :\002Kullanımı :\002 \00314$::lastbind $mesajac/$mesajkapa/$yardimkmt\003"
return 0
}
if {[string equal $yardimkmt $kmt]} {
puthelp "notice $nick :\002Kullanımı :\002 \00304<ekleme komutu> <karşılama mesajınız>\003 \00314şeklinde olmalıdır.\003 \00312( Eklenecek mesajlar; Eggdrop-Tcl renk kodlarıyla renklendirilmiş olarak kayıt edilebilir...)\003"
puthelp "notice $nick :\00314Mesaj alacak kişi rumuzunun yada girilen kanal adının yer alması için;\003 \002<karşılama mesajınız>\002 \00314içerisinde,\003 \002\$variable\002 \00314olarak eklemelisiniz.\003"
puthelp "notice $nick :\002Örnek :\002 \00304<ekleme komutu> Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde eklediğinizde,Bu mesajı silebilmeniz için,eklediğiniz şekliyle;\003"
puthelp "notice $nick :\00304<silme komutu> Selam \\00304\$nick\\003 .. \\026\$chan\\026 kanalına hoşgeldin...\003 \00314Şeklinde silebilirsiniz...\003 \
- \00304<listeleme komutu>\003 \00314ile halen kayıtlı olan mesajları listeleyebilirsiniz...\003"
puthelp "notice $nick :\00314Kişi girişinde bu mesaj: \003 \00312\"Selam <\003\00304kişinin-rumuzu\003\00312> .. <\003\026#kanal-adı\026\00312> kanalına hoşgeldin...\"\003 \00314 olarak yansıyacaktır.\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
}
if {![channel get $chan $deflag] && [string equal $kmt $mesajac]} {
channel set $chan +$deflag
puthelp "notice $nick :\00314Karşılama mesaj sistemi\003 \00304$chan\003 \00314kanalında aktif duruma getirildi.\003"
puthelp "notice $nick :\002Komut Listesi :\002 \00312Mesaj Eklemek :\003 \00304$semb$eklekmt <mesajınız>\003"
puthelp "notice $nick :\002Mesaj Silmek :\002 \00304$semb$silkmt <mesaj>\003 | \002Ekli Mesajları Listelemek :\002 \00304$semb$listkmt\003"
puthelp "notice $nick :\002Komutları Kullanım Yetkileri :\002 \00303$kmtflag \003| \002Karşılama Mesajı Gösterim Yöntemi :\002 \00303$method\003 $author"
} elseif {[channel get $chan $deflag] && [string equal $kmt $mesajac]} {
puthelp "notice $nick :\00304$chan\003 \00314Kanalında,\003 \00303\"Karşılama Mesaj Sistemi\"\003 \00314halihazırda \002aktif\002 durumda...\003"
puthelp "notice $nick :\00314Yeniden \002pasif\002 etmek için :\003 \00304$::lastbind $mesajkapa\003 \00314komutu vermelisiniz..\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
}
if {[channel get $chan $deflag] && [string equal $kmt $mesajkapa]} {
channel set $chan -$deflag
puthelp "notice $nick :\00314Karşılama mesaj sistemi\003 \00304$chan\003 \00314kanalında pasif duruma getirildi.\003"
puthelp "notice $nick :\00314Yeniden \002aktif\002 etmek için :\003 \00304$::lastbind $mesajac\003 \00314komutu vermelisiniz..\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
} elseif {![channel get $chan $deflag] && [string equal $kmt $mesajkapa]} {
puthelp "notice $nick :\00304$chan\003 \00314Kanalında,\003 \00303\"Karşılama Mesaj Sistemi\"\003 \00314halihazırda \002pasif\002 durumda...\003"
puthelp "notice $nick :\00314Yeniden \002aktif\002 etmek için :\003 \00304$::lastbind $mesajac\003 \00314komutu vermelisiniz..\003 \
\00300,04 \u262A \003 \002\026\u006E\u0072\u0074 \u0028\u0053\u0061\u0079\u0057\u0068\u0061\u0074\u0029\026\002\u00A9"
}
return 0
}
bind pub $kmtflag $semb$eklekmt [namespace current]::ekle:mesaj
bind pub $kmtflag $semb$silkmt [namespace current]::sil:mesaj
bind pub $kmtflag $semb$listkmt [namespace current]::listele:mesaj
bind pub $mesajflag $semb$mesajackmt [namespace current]::ackapa:mesaj
bind join $mesajflag "*!*@*" [namespace current]::gonder:mesaj
setudef flag $deflag
putlog "Tcl Surumu : $tcl_patchLevel - Tcl Dizin : $tcl_library - Eggdrop Surumu : [lindex $version 0] - Http Paket Surumu : [package present http] - Sistem Encoding : [encoding system] - mesaj-sistem.tcl v$msjvers yuklendi."
putlog "Host : [info hostname] - OS : $::tcl_platform(os) $::tcl_platform(osVersion)/$::tcl_platform(machine) - Sunucuya Bagli Oldugu Sure : [duration [expr {[clock seconds] - ${server-online}}]] - $author - PID : [pid]"
putlog "Bot Uptime : [duration [expr {[clock seconds] - $::uptime}]] - Tarih : [ctime [unixtime]] $::timezone - Irc Gorunumu : $::botname $::realname - Bagli Oldugu Sunucu : $::serveraddress - .Conf Dosyasi : $::config"
proc kaldir {args} {
foreach bindin [lsearch -inline -all -regexp [binds *[set ns [string range [namespace current] 2 end]]*] " \{?(::)?$ns"] {
unbind [lindex $bindin 0] [lindex $bindin 1] [lindex $bindin 2] [lindex $bindin 4]
}
namespace delete ::mesaj
}
set ::mesaj::semb [split $::mesaj::semb ""]
}
;# EOF