| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- #########################################################################
- ## BlackTools - The Ultimate Channel Control Script ##
- ## One TCL. One smart Eggdrop ##
- #########################################################################
- ############################# QUOTE TCL #############################
- #########################################################################
- ## ##
- ## BlackTools : http://blacktools.tclscripts.net ##
- ## Bugs report : http://www.tclscripts.net/ ##
- ## GitHub page : https://github.com/tclscripts/BlackToolS-TCL ##
- ## Online Help : irc://irc.undernet.org/tcl-help ##
- ## #TCL-HELP / UnderNet ##
- ## You can ask in english or romanian ##
- ## ##
- #########################################################################
- proc quote:announce {chans} {
- global black
- set channels ""
- foreach chan $chans {
- if {[validchan $chan]} {
- lappend channels $chan
- }
- }
- if {$channels != ""} {
- quote:time $channels 0
- }
- }
- proc quote:time {channels counter} {
- global black
- set chan [lindex $channels $counter]
- set cc [expr $counter + 1]
- if {$chan != ""} {
- quoteofday:show $chan
- }
- if {[lindex $channels $cc] == ""} {
- return
- } else {
- quote:time $channels $cc
- }
- }
- proc quoteofday:show {chan} {
- global black botnick
- if {[info exists black(lastaction:$chan)]} {
- set unixtime [unixtime]
- if {[setting:get $chan quote-showtime] != ""} {
- set return_time [time_return_minute [setting:get $chan quote-showtime]]
- } else {
- set return_time [time_return_minute $black(quote:msgtime)]
- }
- set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
- if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
- return
- }
- } else { return }
- set getlang [string tolower [setting:get $chan lang]]
- if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp_dir "$black(tempdir)/quote_temp.$timestamp"
- set day [clock format [clock seconds] -format {%d}]
- set file [open $black(quote_file) "r"]
- set temp [open $temp_dir "a"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string match -nocase $enc_chan $chan]} {
- set quote [join [lrange [split $line] 6 end]]
- set gettime [lindex [split $line] 4]
- set getday [clock format $gettime -format %d]
- if {$getday == $day} {
- puts $temp $quote
- }
- }
- }
- close $temp
- close $file
- set file [open $temp_dir "r"]
- set data [read -nonewline $file]
- close $file
- if {$data != ""} {
- if {![info exists black(quoteshow:$chan)]} {
- set black(quoteshow:$chan) 0
- }
- set lines [split $data "\n"]
- set line [lindex $lines $black(quoteshow:$chan)]
- if {$line == ""} {
- set black(quoteshow:$chan) 0
- set line [lindex $lines $black(quoteshow:$chan)]
- }
- set black(quoteshow:$chan) [expr $black(quoteshow:$chan) + 1]
- set encoded [encoding convertfrom utf-8 $line]
- set replace(%msg%) $encoded
- set text [black:color:set "" $black(say.$getlang.quote.16)]
- set reply [join $text]
- set text2 [black:color:set "" $black(say.$getlang.quote.12)]
- set reply2 [join $text2]
- set message [string map [array get replace] $reply]
- if {[onchan $botnick $chan]} {
- if {[regexp {[~]} $message]} {
- set split_message [split $message "~"]
- puthelp "PRIVMSG $chan :$reply2"
- foreach mes $split_message {
- set encoded [encoding convertto utf-8 $mes]
- puthelp "PRIVMSG $chan :\"[join $encoded]\""
- }
- } else {
- set encoded [encoding convertto utf-8 $message]
- puthelp "PRIVMSG $chan :$reply2 [join $encoded]"
- }
- }
- }
- file delete $temp_dir
- }
- proc quote:process {nick host hand chan chan1 type who quote arg next} {
- global black
- set cmd_status [btcmd:status $chan $hand "q" 0]
- if {$cmd_status == "1"} {
- return
- }
- if {[setting:get $chan quote]} {
- set show_who $who
- if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
- return
- }
- if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
- return
- }
- set split_host [split $host ":"]
- if {[lindex $split_host 1] == "chan"} {
- set host [lindex $split_host 1]
- set charbind [lindex $split_host 0]
- } else {
- set charbind "$host"
- }
- switch $who {
- list {
- if {($black(quote:usage) == "1" && [matchattr $hand nmo|MAOV $chan]) || $black(quote:usage) == "0"} {
- array set nicklist [list]
- set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
- if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp "$black(tempdir)/quote_temp.$timestamp"
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- set read_type [lindex [split $line] 1]
- if {[string match -nocase $enc_chan $chan]} {
- set msg_num [lindex [split $line] 2]
- set by_who [lindex [split $line] 3]
- set time [lindex [split $line] 4]
- set time [clock format $time -format %D]
- set quote [join [lrange [split $line] 6 end]]
- lappend nicklist($msg_num) "$quote :: $black(say.$getlang.quote.15) $by_who :: $black(say.$getlang.quote.20) \002$time\002"
- }
- }
- close $file
- set tempwrite [open $temp w]
- foreach msg [lsort -integer -increasing [array names nicklist]] {
- puts $tempwrite "$msg [join $nicklist($msg)]"
- }
- close $tempwrite
- set file [open $temp "r"]
- set w [read -nonewline $file]
- close $file
- set data [split $w "\n"]
- file delete $temp
- module:getinfo $nick $charbind $hand $chan $chan1 $type $data "quote" "0" $next
- }
- }
- del {
- if {($black(quote:usage) == "1" && [matchattr $hand nmo|MAOV $chan]) || $black(quote:usage) == "0"} {
- if {![regexp {^[0-9]} $next]} {
- switch $type {
- 0 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr "quote"
- }
- 1 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "quote"
- }
- 2 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "quote"
- }
- }
- return
- }
- set ret [find:q:num $next $chan]
- if {$ret == 0} {
- blacktools:tell $nick $host $hand $chan $chan1 quote.13 $next
- return
- }
- set file [open $black(quote_file) "r"]
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp "$black(tempdir)/quote_temp.$timestamp"
- set tempwrite [open $temp w]
- while {[gets $file line] != -1} {
- set read_num [lindex [split $line] 2]
- set read_chan [lindex [split $line] 0]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string equal $next $read_num] && [string equal -nocase $enc_chan $chan]} {
- continue
- } else {
- puts $tempwrite $line
- }
- }
- close $tempwrite
- close $file
- file rename -force $temp $black(quote_file)
- blacktools:tell $nick $charbind $hand $chan $chan1 quote.10 $next
- }
- }
- default {
- if {[llength [split $arg]] > 1} {
- set ret_num [quote:add $nick $host $chan $who $quote]
- blacktools:tell $nick $charbind $hand $chan $chan1 quote.1 $ret_num
- }
- if {[llength [split $arg]] == 1} {
- quote:show $nick $host $hand $chan $chan1 $type $show_who
- }
- if {[llength [split $arg]] == 0} {
- quote:rand $nick $host $hand $chan $chan1 $type $show_who
- }
- }
- }
- }
- }
- proc quote:rand {nick host hand chan chan1 type who} {
- global black
- set total [quote:total $chan]
- set length [llength $total]
- if {$length > 0} {
- set random [expr int(rand()*$length)]
- set quote [lindex $total $random]
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set num [lindex [split $line] 2]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string equal -nocase $chan $enc_chan] && [string equal -nocase $quote $num]} {
- set readquote [join [lrange [split $line] 6 end]]
- set encoded [encoding convertfrom utf-8 $readquote]
- continue
- }
- }
- }
- close $file
- set split_encoded [split $encoded "~"]
- foreach enc $split_encoded {
- blacktools:tell $nick $host $hand $chan $chan1 quote.3 "$quote $enc"
- }
- }
- proc quote:show {nick host hand chan chan1 type who} {
- global black
- set quote_numbers ""
- set find_num 0
- set found_quote 0
- set show_who $who
- if {[regexp {^[0-9]} $who]} {
- set quote_num $who
- set find_num 1
- } else {
- set quote_list [quote:count $who $chan]
- set length [llength $quote_list]
- if {$length > 0} {
- set found_quote 1
- }
- set random [expr int(rand()*$length)]
- set quote [lindex $quote_list $random]
- set split_quote [split $quote ":"]
- set quote_num [lindex $split_quote 0]
- set quote_show [lindex $split_quote 1]
- foreach q $quote_list {
- set q_split [split $q ":"]
- set q_num [lindex $q_split 0]
- if {$quote_num != $q_num} {
- lappend quote_numbers \#$q_num
- }
- }
- if {$found_quote == "0"} {
- blacktools:tell $nick $host $hand $chan $chan1 quote.11 none
- return
- }
- }
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set num [lindex [split $line] 2]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string equal -nocase $chan $enc_chan] && [string equal -nocase $quote_num $num]} {
- set found_quote 1
- set readquote [join [lrange [split $line] 6 end]]
- set encoded [encoding convertfrom utf-8 $readquote]
- continue
- }
- }
- close $file
- if {$found_quote == "0"} {
- blacktools:tell $nick $host $hand $chan $chan1 quote.11 none
- return
- }
- if {$find_num == "0"} {
- blacktools:tell:h $nick $host $hand $chan $chan1 quote.4 "$quote_show/$length $show_who"
- }
- set split_encoded [split $encoded "~"]
- foreach enc $split_encoded {
- blacktools:tell $nick $host $hand $chan $chan1 quote.17 "$quote_num $enc"
- }
- if {$quote_numbers != ""} {
- blacktools:tell $nick $host $hand $chan $chan1 quote.18 [join $quote_numbers]
- }
- }
- proc quote:total {chan} {
- global black
- set nums ""
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string equal -nocase $chan $enc_chan]} {
- set read_num [lindex [split $line] 2]
- lappend nums $read_num
- }
- }
- close $file
- return $nums
- }
- proc quote:count {who chan} {
- global black
- set q_count 0
- set return ""
- set found_nick 0
- set found_quote 0
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set read_who [lindex [split $line] 5]
- set read_who [string map { "<" ""
- ">" ""
- "@" ""
- "+" ""
- } $read_who]
-
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- set read_who [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $read_who]
- if {[string equal -nocase $chan $enc_chan] && [string match -nocase $read_who $who]} {
- set found_nick 1
- set q_count [expr $q_count + 1]
- set num [lindex [split $line] 2]
- set return "$return $num:$q_count"
- }
- }
- close $file
- if {$found_nick == "0"} {
- set file [open $black(quote_file) "r"]
- while {[gets $file line] != -1} {
- set read_chan [lindex [split $line] 0]
- set readquote [color:filter [lrange [split $line] 6 end]]
- set enc_chan [encoding convertfrom utf-8 $read_chan]
- if {[string equal -nocase $chan $enc_chan] && ([lsearch -exact $readquote $who] > -1)} {
- set found_quote 1
- set q_count [expr $q_count + 1]
- set num [lindex [split $line] 2]
- set return "$return $num:$q_count"
- }
- }
- close $file
- }
- return $return
- }
-
- proc quote:add {nick host chan who quote} {
- global black
- set temp_num 0
- set num 0
- set time [unixtime]
-
- while {$temp_num == 0} {
- set get [find:q:num $num $chan]
- if {$get == "$num"} {
- set num [expr $num + 1]
- } else { set temp_num 1 }
- }
- set file [open $black(quote_file) a]
- set enc_chan [encoding convertto utf-8 $chan]
- set encoded [encoding convertto utf-8 $quote]
- puts $file "$enc_chan QUOTE $num $nick $time $who $encoded"
- close $file
- return $num
- }
- ##############
- #########################################################################
- ## END ##
- #########################################################################
|