| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- #########################################################################
- ## BlackTools - The Ultimate Channel Control Script ##
- ## One TCL. One smart Eggdrop ##
- #########################################################################
- ######################## AUTOBROADCAST 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 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 {
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.4 none
- set type1 "broadcastpublic:show ON"
- set file [open $black(status_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 who [lindex [split $line] 0]
- set stats [lindex [split $line] 1]]
- if {[string match -nocase "broadcastpublic:show" $who]} {
- continue
- } else {
- puts $tempwrite $line
- }
- }
- close $tempwrite
- close $file
- file rename -force $temp $black(status_file)
-
- set file [open $black(status_file) "a"]
- puts $file "$type1"
- close $file
- set scan_time [time_return_minute $black(bttime)]
- set black(broadcast:timer_start) $scan_time
- }
- off {
- blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.5 none
- set file [open $black(status_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 who [lindex [split $line] 0]
- set stats [lindex [split $line] 1]]
- if {[string match -nocase "broadcastpublic:show" $who]} {
- continue
- } else {
- puts $tempwrite $line
- }
- }
- close $tempwrite
- close $file
- file rename -force $temp $black(status_file)
-
- if {[info exists black(broadcast:timer_start)]} {
- unset black(broadcast:timer_start)
- }
- if {[info exists black(broadcast:counter)]} {
- unset black(broadcast:counter)
- }
- }
- 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 size [file size $black(add_file)]
- set data [split [read $file $size] \n]
- close $file
- 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 broadcast:check {} {
- global black
- set file [open $black(status_file) r]
- set size [file size $black(status_file)]
- set data [split [read $file $size] \n]
- close $file
- set broadcast_act 0
- if {$data != ""} {
- foreach line $data {
- set type [lindex [split $line] 0]
- set stats [lindex [split $line] 1]
- if {[string equal -nocase $type "broadcastpublic:show"] && [string equal -nocase $stats "ON"]} {
- set broadcast_act 1
- }
- }
- }
- return $broadcast_act
- }
- proc broadcastpublic:show {} {
- global black
- if {![info exists black(broadcast:count)]} {
- set black(broadcast:count) 0
- }
- set channels ""
- set file [open $black(add_file) r]
- set size [file size $black(add_file)]
- set data [split [read $file $size] \n]
- close $file
- 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]
- foreach line $data {
- 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
- 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
- }
- }
- 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
- }
- } else { 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 \[AUTO\] [join $encoded]\001"
- } else {
- puthelp "PRIVMSG $chan :\[AUTO\] [join $encoded]"
- }
- }
- }
- }
- if {[lindex $channels $cc] == ""} {
- return
- } else {
- utimer 5 [list broadcast:act $channels $cc $line]
- }
- }
- ##############
- #########################################################################
- ## END ##
- #########################################################################
|