######################################################################### ## BlackTools - The Ultimate Channel Control Script ## ## One TCL. One smart Eggdrop ## ######################################################################### ########################### GUESTNICK 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 guestnickpublic {nick host hand chan arg} { global black lastbind set who [lindex [split $arg] 0] set modul "guestnick" set type 0 set chan1 $chan set gnick [join [lrange [split $arg] 1 end]] set number [lindex [split $arg] 1] if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} { set who [lindex [split $arg] 1] set gnick [join [lrange [split $arg] 2 end]] set number [lindex [split $arg] 2] } set return [blacktools:mychar $lastbind $hand] if {$return == "0"} { return } guestnick:process $nick $host $hand $chan $chan1 $who $gnick $type $number $modul } proc guestnick:process {nick host hand chan chan1 who gnick type number modul} { global black set num 0 set temp_num 0 set cmd_status [btcmd:status $chan $hand "guestnick" 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 } if {![validchan $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul return } switch $who { on { setting:set $chan +guestnick "" blacktools:tell $nick $host $hand $chan $chan1 guestnick.1 none } off { setting:set $chan -guestnick "" blacktools:tell $nick $host $hand $chan $chan1 guestnick.2 none } add { if {$gnick == ""} { switch $type { 0 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick" } 1 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick" } 2 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick" } } return } set findword [prot:findword $chan "GUESTNICK" $gnick] if {$findword == "1"} { blacktools:tell $nick $host $hand $chan $chan1 gl.wordexists $gnick return } while {$temp_num == 0} { set get [find:num $num $chan "GUESTNICK"] if {$get == "$num"} { set num [expr $num + 1] } else { set temp_num 1 } } set file [open $black(add_file) a] set enc_chan [encoding convertto utf-8 $chan] puts $file "$enc_chan GUESTNICK $num $gnick" close $file blacktools:tell $nick $host $hand $chan $chan1 guestnick.3 "$gnick $num" } del { if {![regexp {^[0-9]} $number]} { switch $type { 0 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick" } 1 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick" } 2 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick" } } return } set ret [find:num $number $chan "GUESTNICK"] if {$ret == 0} { blacktools:tell $nick $host $hand $chan $chan1 guestnick.5 $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] set read_chan [lindex [split $line] 0] set enc_chan [encoding convertfrom utf-8 $read_chan] if {[string equal $number $read_num] && [string equal $read_type "GUESTNICK"] && [string equal $enc_chan $chan]} { continue } else { puts $tempwrite $line } } close $tempwrite close $file file rename -force $temp $black(add_file) blacktools:tell $nick $host $hand $chan $chan1 guestnick.4 $number } list { array set nicklist [list] set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}] set temp "$black(tempdir)/nick_temp.$timestamp" set file [open $black(add_file) "r"] set w [read -nonewline $file] close $file set data [split $w "\n"] foreach line $data { 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] && [string match -nocase $read_type "GUESTNICK"]} { set msg_num [lindex [split $line] 2] set message [lrange [split $line] 3 end] lappend nicklist($msg_num) $message } } 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 $host $hand $chan $chan1 $type $data "guestnick" "0" $number } default { switch $type { 0 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick" } 1 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick" } 2 { blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick" } } } } } proc guestnick:module {nick host hand chan} { global black if {![validchan $chan]} { return } if {[setting:get $chan guestnick]} { if {[info exists black(turnOnFlood:$chan)]} { return } set getlang [string tolower [setting:get $chan lang]] if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" } set method [setting:get $chan guestnick-msgmethod] if {$method == ""} { set method $black(guestnick:msgmethod) } set file [open $black(add_file) r] while {[gets $file line] != -1} { set read_chan [lindex [split $line] 0] set read_type [lindex [split $line] 1] set read_msg [lrange [split $line] 3 end] if {[string equal -nocase $read_chan $chan] && [string equal -nocase $read_type "GUESTNICK"] && [string match -nocase $read_msg $nick]} { set replace(%nick%) $nick set replace(%chan%) $chan set message [setting:get $chan guestnick-message] if {$message == ""} { set message $black(say.$getlang.guestnick.10) } set message [string map [array get replace] $message] switch [string tolower $method] { chan { putserv "PRIVMSG $chan :$message" } privmsg { putserv "PRIVMSG $nick :$message" } notice { putserv "NOTICE $nick :$message" } } } } close $file } } ############## ######################################################################### ## END ## #########################################################################