| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- #########################################################################
- ## BlackTools - The Ultimate Channel Control Script ##
- ## One TCL. One smart Eggdrop ##
- #########################################################################
- ######################## AUTOBROADCAST TCL ##########################
- #########################################################################
- ## ##
- ## BlackTools : http://blacktools.tclscripts.net ##
- ## Bugs report : http://www.tclscripts.net/ ##
- ## Online Help : irc://irc.undernet.org/tcl-help ##
- ## #TCL-HELP / UnderNet ##
- ## You can ask in english or romanian ##
- ## ##
- #########################################################################
- proc broadcastpublic:module {nick host hand chan arg} {
- global black sdir lastbind
- set chan1 "$chan"
- set type 0
- set who [lindex [split $arg] 0]
- set message [join [lrange [split $arg] 1 end]]
- set number [lindex [split $arg] 1]
- set return [blacktools:mychar $lastbind $hand]
- if {$return == "0"} {
- return
- }
- broadcast:process $nick $host $hand $chan $chan1 $who $message $number $type
- }
- proc broadcast:process {nick host hand chan chan1 who message number type} {
- global botnick black username
- set cmd_status [btcmd:status $chan $hand "bt" 0]
- if {$cmd_status == "1"} {
- return
- }
- 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 show_message $message
- set btnum 0
- set lin 0
- set temp_num 0
- set sdir $black(status_file)
- if {$who == ""} {
- switch $type {
- 0 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
- }
- 1 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
- }
- 2 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
- }
- }
- return
- }
- switch [string tolower $who] {
- on {
- set type1 "broadcastpublic:show ON"
- foreach tmr [timers] {
- if {[string match "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.3 none
- return
- }
- }
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.4 none
- set file [open $sdir "r"]
- set database [read -nonewline $file]
- close $file
- set data [split $database "\n"]
- foreach line $data {
- set lin [expr $lin +1]
- set who [lindex [split $line] 0]
- set stats [lindex [split $line] 1]
- if {[string match -nocase "broadcastpublic:show" $who]} {
- if {$line != ""} {
- set num [expr $lin - 1]
- set delete [lreplace $data $num $num]
- set files [open $sdir "w"]
- puts $files [join $delete "\n"]
- close $files
- }
- }
- }
- set file [open $sdir "r"]
- set data [read -nonewline $file]
- close $file
- if {$data == ""} {
- set files [open $sdir "w"]
- close $files
- }
- set file [open $sdir "a"]
- puts $file "$type1"
- close $file
- timer $black(bttime) broadcastpublic:show
- set broadcastpublic:show_running 1
- }
- off {
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.5 none
- set type1 "broadcastpublic:show OFF"
- foreach tmr [timers] {
- if {[string match -nocase "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
- killtimer [lindex $tmr 2]
- }
- }
- set file [open $sdir "r"]
- set database [read -nonewline $file]
- close $file
- set data [split $database "\n"]
- foreach line $data {
- set lin [expr $lin +1]
- set who [lindex [split $line] 0]
- set stats [lindex [split $line] 1]
- if {[string match -nocase "broadcastpublic:show" $who]} {
- if {$line != ""} {
- set num [expr $lin - 1]
- set delete [lreplace $data $num $num]
- set files [open $sdir "w"]
- puts $files [join $delete "\n"]
- close $files
- }
- }
- }
- set file [open $sdir "r"]
- set data [read -nonewline $file]
- close $file
- if {$data == ""} {
- set files [open $sdir "w"]
- close $files
- }
- set file [open $sdir "a"]
- puts $file "$type1"
- close $file
- if {[info exists broadcastpublic:show_running]} {
- unset broadcastpublic:show_running
- }
- }
- add {
- if {$message == ""} {
- switch $type {
- 0 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
- }
- 1 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
- }
- 2 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
- }
- }
- return
- }
- while {$temp_num == 0} {
- set get [find:num $btnum "-" "AUTOBROADCAST"]
- if {$get == "$btnum"} {
- set btnum [expr $btnum + 1]
- } else { set temp_num 1 }
- }
- set file [open $black(add_file) a]
- set encoded [encoding convertto utf-8 $message]
- puts $file "- AUTOBROADCAST $btnum $encoded"
- close $file
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.6 $btnum
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.1 $show_message
- }
- list {
- array set btlist [list]
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp "$black(tempdir)/bt_temp.$timestamp"
- set file [open $black(add_file) "r"]
- set w [read -nonewline $file]
- close $file
- set data [split $w "\n"]
- if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.8 none
- return
- }
- foreach line $data {
- set read_type [lindex [split $line] 1]
- if {[string equal -nocase $read_type "AUTOBROADCAST"]} {
- set msg_num [lindex [split $line] 2]
- set message [join [lrange [split $line] 3 end]]
- lappend btlist($msg_num) $message
- }
- }
- set tempwrite [open $temp "w"]
- foreach msg [lsort -integer -increasing [array names btlist]] {
- puts $tempwrite "$msg [join $btlist($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 $host $hand $chan $chan1 $type $data "autobroadcast" "0" $number
- }
- del {
- if {![regexp {^[0-9]} $number]} {
- switch $type {
- 0 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
- }
- 1 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
- }
- 2 {
- blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
- }
- }
- return
- }
- set ret [find:num $number "-" "AUTOBROADCAST"]
- if {$ret == 0} {
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.2 $number
- return
- }
- set file [open $black(add_file) "r"]
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp "$black(tempdir)/bt_temp.$timestamp"
- set tempwrite [open $temp w]
- while {[gets $file line] != -1} {
- set read_num [lindex [split $line] 2]
- set read_type [lindex [split $line] 1]
- if {[string equal $number $read_num] && [string equal $read_type "AUTOBROADCAST"]} {
- continue
- } else {
- puts $tempwrite $line
- }
- }
- close $tempwrite
- close $file
- file rename -force $temp $black(add_file)
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.11 $number
- }
- }
- }
- proc broadcastpublic:show {} {
- global black
- if {![info exists black(broadcast:count)]} {
- set black(broadcast:count) 0
- }
- set channels ""
- set line ""
- set file [open $black(add_file) "r"]
- set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
- set temp "$black(tempdir)/bt_temp.$timestamp"
- set tempwrite [open $temp w]
- while {[gets $file line] != -1} {
- set read_type [lindex [split $line] 1]
- if {[string equal $read_type "AUTOBROADCAST"]} {
- set read_message [lrange [split $line] 3 end]
- puts $tempwrite $read_message
- }
- }
- close $tempwrite
- close $file
- set file [open $temp "r"]
- set w [read -nonewline $file]
- close $file
- set data [split $w "\n"]
-
- if {$data != ""} {
- set line [lindex $data $black(broadcast:count)]
-
- if {$line == ""} {
- set black(broadcast:count) 0
- set line [lindex $data $black(broadcast:count)]
- }
- set black(broadcast:count) [expr $black(broadcast:count) +1]
-
- foreach chan [channels] {
- if {[validchan $chan] && [isdynamic $chan] && (![setting:get $chan silent])} {
- lappend channels $chan
- }
- }
- } else { file delete $temp }
- file delete $temp
- if {$channels != "" && $line != ""} {
- broadcast:act $channels 0 $line
- }
- timer $black(bttime) broadcastpublic:show
- }
- proc broadcast:act {channels counter line} {
- global black
- set split_line [split $line "~"]
- set chan [lindex $channels $counter]
- set cc [expr $counter + 1]
- set notshow 0
- if {$chan != ""} {
- if {[info exists black(lastaction:$chan)]} {
- set unixtime [unixtime]
- set return_time [time_return_minute $black(bttime)]
- set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
- if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
- set notshow 1
- }
- }
- if {$notshow == "0"} {
- foreach mes $split_line {
- set message [join [lrange [split $mes] 0 end]]
- set encoded [encoding convertfrom utf-8 $message]
- if {$black(bthow) == "1"} {
- puthelp "PRIVMSG $chan :\001ACTION [join $encoded]\001"
- } else {
- puthelp "PRIVMSG $chan :[join $encoded]"
- }
- }
- }
- }
- if {[lindex $channels $cc] == ""} {
- return
- } else {
- utimer 5 [list broadcast:act $channels $cc $line]
- }
- }
- ##############
- #########################################################################
- ## END ##
- #########################################################################
|