#orignal author teduh edit by gerREH #
#add channel .chanset #channel +horoskop #
setudef flag horoskop
namespace eval teduh {
# command char, yang di pakai untuk public & private message binds
set horoskop(command_char) "!"
# binds yang anda mau , contoh ("satu dua empat")
set horoskop(binds) "zodiak"
# kalo kamu mau bind semua signs, contoh !virgo daripada !horoskop virgo dll, set ke 1
set horoskop(bind_signs) 1
# set di atas 0 , heading akan jadi bold
set horoskop(bold_headers) 0
#ini cuma banner header keluar sebelum data horoskop. set ke "" untuk mendisable kan.
set horoskop(header) "Daily Update Horoskop from Astaga.com"
# satu lagi banner footer
set horoskop(footer) "Daily Update Horoskop from Astaga.com"
# nilai di atas 0 akan memperbolehkan user untuk dapat private-message dengan bot yang mana bot akan merespon user request
set horoskop(private_messages) 1
# setelah berapa lama untuk timeoutnya?
set horoskop(timeout) 30
# panjang baris yg harus di pisah, kalo tidak di pisa nanti terlalu panjang
set horoskop(split_length) 435
# seperator yg di perlukan untuk memisahkan antara header, set ke "\n" untuk memisahkan.
set horoskop(seperator) "\n"
# flood protecksi - set 0 utk mengignore
set horoskop(ignore) 1
# berapa barus yg di butuh kan utk menditeksi kalo user ngeflood?
set horoskop(flood) 2:10
}
# script di mulai au au au
namespace eval teduh {
variable horoskop
set horoskop(valid_symbols) "aquarius pisces aries taurus gemini cancer leo virgo libra scorpio sagitarius capricorn"
set horoskop(version) "teduh:astaga horoskop-Ver 1.1"
}
# bind the binds
foreach bind [split ${teduh::horoskop(binds)} " "] { bind pub -|- "${teduh::horoskop(command_char)}$bind" teduh::horoskop:public }
# bind private messages if wanted
if {$teduh::horoskop(private_messages) > 0} {
foreach bind [split ${teduh::horoskop(binds)} " "] { bind msg -|- "${teduh::horoskop(command_char)}$bind" teduh::horoskop:private }
}
# bind the signs if wanted
if {$teduh::horoskop(bind_signs) > 0} {
foreach valid_symbol [split $teduh::horoskop(valid_symbols) " "] {
bind pubm -|- "*${teduh::horoskop(command_char)}${valid_symbol}" teduh::horoskop:public
if {$teduh::horoskop(private_messages) > 0} {
bind msgm -|- "*${teduh::horoskop(command_char)}${valid_symbol}" teduh::horoskop:private
}
}
}
# toel toel astaga.com untuk data $input
namespace eval teduh {
proc horoskop {input} {
global tcl_platform
set query "http://astaga.com/astrologi/index.php?cat="
set input [string tolower $input]
# see if it was a !sign bind
if {[string match $teduh::horoskop(command_char)* $input] == 1} {
regsub "^$teduh::horoskop(command_char)" $input "" input
}
# help me sayang, biar kita selamat .
if {[string match help $input] == 1} {
return "Commands: !leo !virgo !taurus !capricorn !aries !gemini !sagitarius !pisces dll."
}
# web-browser yang di pakai untuk konek
# coba pakai ini ahhhh "TCL/8.4 (Unix; Linux/2.6.11) http/2.4.5" di compie gue
set ua "TCL/[info tclversion] ([string totitle $tcl_platform(platform)]; $tcl_platform(os)/$tcl_platform(osVersion)) http/[package provide http]"
# ngecek permintaan user apa dia ngetik nya bener or gak
foreach zodiac [split $teduh::horoskop(valid_symbols) " "] {
if {[string match $input $zodiac] == 1} {
set http [::http::config -useragent $ua]
set http [::http::geturl "${query}${input}#as" -timeout [expr $teduh::horoskop(timeout) * 1000]]
}
}
if {[info exists http] == 1} {
set html [::http::data $http]
} else {
return "Oi, '$input' bukan kamu ketik wrong sign tuh. Ketik 'help' untuk informasi lebih lanjut."
}
if {[info exists html] == 0} {
return "sabar ya.. lagi rada error."
}
# kali ini kita coba mempermudah menguraikan htlm nya
regsub -all "\n" $html "" html
regsub -all {(?:|)} $html "" html
# penguraian html di mulai
regexp -nocase {
(.+?)
} $html » sign
regexp -nocase {(.+?) .*} $html » horoscope
regexp -nocase {Asmara\s*:\s*(.+?) .*} $html » asmara
regexp -nocase {Keuangan\s*:\s*(.+?) .*} $html » keuangan
regexp -nocase {Pekerjaan\s*:\s*(.+?) .*} $html » pekerjaan
regexp -nocase {Kiss-o-rama\s*:\s*(.+?) | .*} $html » kissorama
# menampil data ke channel or private message tergantung setingan anda di atas
set output "" ; set bold ""
if {$teduh::horoskop(bold_headers) > 0} { set bold "\002" }
if {[info exists sign] == 0} { set sign [string totitle $input] }
if {[info exists horoscope] == 1} {
append output "${bold}${sign}${bold} » ${horoscope}${teduh::horoskop(seperator)}"
} else {
append output "${bold}${sign}${bold} » sabar ya.. lagi rada error..${teduh::horoskop(seperator)}"
return $output
}
if {[info exists asmara] == 1} {
append output "${bold}$sign » Asmara:${bold} ${asmara}${teduh::horoskop(seperator)}"
}
if {[info exists keuangan] == 1} {
append output "${bold}$sign » Keuangan:${bold} ${keuangan}${teduh::horoskop(seperator)}"
}
if {[info exists pekerjaan] == 1} {
append output "${bold}$sign » Pekerjaan:${bold} ${pekerjaan}${teduh::horoskop(seperator)}"
}
if {[info exists kissorama] == 1} {
append output "${bold}$sign » Kiss-o-Rama:${bold} ${kissorama}${teduh::horoskop(seperator)}"
}
regsub {(?:\s*|\n|$teduh::horoskop(seperator))$} $output {} output
return $output
}
# menampilkan permintaan ke channel
proc horoskop:public {nick uhand handle chan input} {
if {[lsearch -exact [channel info $chan] +horoskop] != -1} {
if {[horoskop:flood $nick $uhand]} {
return 0
}
if {$teduh::horoskop(header) != ""} {
putserv "PRIVMSG $chan :$teduh::horoskop(header)"
}
foreach line [teduh::horoskop:split_output [teduh::horoskop $input]] {
putserv "PRIVMSG $chan :$line"
}
if {$teduh::horoskop(footer) != ""} {
putserv "PRIVMSG $chan :$teduh::horoskop(footer)"
}
}
}
# menampilkan permintaan ke private messages
proc horoskop:private {nick uhand handle input} {
if {$teduh::horoskop(private_messages) > 0} {
if {[horoskop:flood $nick $uhand]} {
return -1
}
if {$teduh::horoskop(header) != ""} {
putserv "PRIVMSG $nick :$teduh::horoskop(header)"
}
foreach line [teduh::horoskop:split_output [teduh::horoskop $input]] {
putserv "PRIVMSG $nick :$line"
}
}
}
# memisahkan \n ke setiap barus untuk output nya.
proc horoskop:split_output {input} {
set parsed_output [set parsed_current {}]
if {[string match "\n" $teduh::horoskop(seperator)] == 1} {
regsub "\n\s*$" $input "" input
foreach newline [split $input "\n"] {
foreach line [teduh::horoskop:wordwrap $newline] {
lappend parsed_output $line
}
}
} else {
regsub "$teduh::horoskop(seperator)\s*$" $input "" input
foreach line [teduh::horoskop:wordwrap $input] {
lappend parsed_output $line
}
}
return $parsed_output
}
# dari http://forum.egghelp.org/viewtopic.php?t=6690
# mengurangi baris yang panjang, dan menyingkat baris tsb sebelum baris menjadi panjang
proc horoskop:wordwrap {str {splitChr { }}} {
set out [set cur {}]
set i 0
set len $teduh::horoskop(split_length)
regsub -all "\002" $str "" str
foreach word [split [set str][set str ""] $splitChr] {
if {[incr i [string len $word]] > $len} {
regsub -all "" $cur "\002" cur
lappend out [join $cur $splitChr]
set cur [list $word]
set i [string len $word]
} else {
lappend cur $word
}
incr i
}
regsub -all "" $cur "\002" cur
lappend out [join $cur $splitChr]
}
# flood protecksi di mulai
proc horoskop:flood_init {} {
if {$teduh::horoskop(ignore) < 1} {
return 0
}
global horoskop_flood horoskop_flood_array
if {![string match *:* $teduh::horoskop(flood)]} {
putlog "$teduh::horoskop(version): variable horoskop(flood) setingan anda salah coba di cek lagi."
return 0
}
set horoskop_flood(flood_num) [lindex [split $teduh::horoskop(flood) :] 0]
set horoskop_flood(flood_time) [lindex [split $teduh::horoskop(flood) :] 1]
set i [expr ${horoskop_flood(flood_num)} - 1]
while {$i >= 0} {
set horoskop_flood_array($i) 0
incr i -1
}
} ; horoskop:flood_init
proc horoskop:flood {nick uhand} {
if {$teduh::horoskop(ignore) < 1} {
return 0
}
global horoskop_flood horoskop_flood_array
if {${horoskop_flood(flood_num)} == 0} {
return 0
}
set i [expr ${horoskop_flood(flood_num)} - 1]
while {$i >= 1} {
set horoskop_flood_array($i) $horoskop_flood_array([expr $i - 1])
incr i -1
}
set horoskop_flood_array(0) [unixtime]
if {[expr [unixtime] - $horoskop_flood_array([expr ${horoskop_flood(flood_num)} - 1])] <= ${horoskop_flood(flood_time)}} {
putlog "$teduh::horoskop(version): flood detected from ${nick}."
newignore [join [maskhost *!*[string trimleft $uhand ~]]] $teduh::horoskop(version) flood $teduh::horoskop(ignore)
return 1
} else {
return 0
}
}
}
putlog " Astaga loaded."
# EOF