ISon
## File, where the list of the !ison-ed users are stored.
set filename "nlist.txt"
# Channel to whom the stuff goes.
set nchan "#Channel"
# File exits ? if no then created!
if {![file exists $filename]} {
set fh [open $filename w]
puts -nonewline $fh ""
close $fh
}
## Don't change anything below, unless you know what you are doing!
# glob vars
set tell "notell"
set online ""
### raw 303 (ISON)
bind raw - 303 online:raw
### raw 325 (NS Id)
bind raw - 325 whois:idented
proc whois:idented {* 325 arg} {
global nchan
putserv "INVITE [lindex $arg 1] $nchan"
}
## ison is triggered
proc online:raw {* 303 arg} {
global online nchan tell
set nlist [getinfo]
string tolower $nlist
set arg [string trimleft [lrange $arg 1 end] ":"]
set arg [charfilter $arg]
if {$arg == ""} {
set online1 $online
if {$tell == "tell"} {
puthelp "PRIVMSG $nchan :Noone's online."
set tell "notell"
}
unset online
set online [qonreport 1 $arg $online1]
set quitted [qonreport 0 $online1 $online]
set quitted [charfilter $quitted]
set quitted [removespaces $quitted]
if {$quitted == ""} {
return
}
putserv "PRIVMSG $nchan: $quitted offline."
set online ""
} else {
if {$tell == "tell"} {
set arg [removespaces $arg]
set onchan [onlineon $arg]
set tell "notell"
set online $arg
puthelp "PRIVMSG $nchan :Online: $arg"
puthelp "PRIVMSG $nchan :Online total [llength $arg] of [llength $nlist]."
puthelp "PRIVMSG $nchan :On $nchan: [llength $onchan] of [llength $arg] online."
return
}
if {$online == ""} {
set arg [removespaces $arg]
set onchan [onlineon $arg]
set online $arg
puthelp "PRIVMSG $nchan :Online: $arg"
puthelp "PRIVMSG $nchan :Online total [llength $arg] of [llength $nlist]."
puthelp "PRIVMSG $nchan :On $nchan: [llength $onchan] of [llength $arg] online."
return
}
set foo [qonreport 0 $arg $online]
if {$foo != ""} {
set foo [charfilter $foo]
set foo [removespaces $foo]
set onchan [onlineon $arg]
append online " $foo"
puthelp "PRIVMSG $nchan :Online: $foo"
puthelp "PRIVMSG $nchan :Online total [llength $arg] of [llength $nlist]."
puthelp "PRIVMSG $nchan :On $nchan: [llength $onchan] of [llength $arg] online."
}
set online1 $online
unset online
set online [qonreport 1 $arg $online1]
set quitted [qonreport 0 $online1 $online]
set quitted [charfilter $quitted]
set quitted [removespaces $quitted]
if {$quitted == ""} {
return
}
putserv "PRIVMSG $nchan :$quitted offline."
}
}
### !ison
bind pub n !ison ison:pub
proc ison:pub {nick host hand chan arg} {
global nchan tell
if {[string tolower $chan] != [string tolower $nchan]} {
return
}
set tell "tell"
set nlist "[getinfo]"
putserv "ISON :$nlist"
}
### !addison <nickname(s)>
bind pub n !addison ison:addison
proc ison:addison {nick host hand chan arg} {
global nchan
if {[string tolower $chan] != [string tolower $nchan]} {
return
}
if {[lindex $arg 0] == ""} {
putserv "PRIVMSG $chan :$nick: Usage !addison <nickname(s)>"
return
}
set nlist [getinfo]
set dontsay [dupZZ $nlist $arg 0]
if {$dontsay == ""} {
set count [expr [llength $arg] + [llength $nlist]]
set arg [charfilter $arg]
set arg [removespaces $arg]
putserv "PRIVMSG $chan :$nick: Done. Successfully added $arg. Total ($count)."
writetof "$nlist $arg"
set tell "tell"
putserv "ISON :$nlist"
} else {
set dontsay [removespaces $dontsay]
set dontsay [charfilter $dontsay]
putserv "PRIVMSG $chan :There is a duplicate :$dontsay"
set nlist [getinfo]
set list ""
foreach bla $arg {
if {[lsearch $list $bla] == -1} {
lappend list $bla
}
}
set final [$nlist $list 1]
if {$final != ""} {
set count [expr [llength $final] + [llength $nlist]]
set final [removespaces $final]
set final [charfilter $final]
putserv "PRIVMSG $chan :$nick: Done. Successfully added $final. Total ($count)."
}
writetof "$nlist $final"
putserv "ISON :$nlist $final"
set tell "tell"
}
}
## !delison <nickname>
bind pub n !delison del_in_fd
proc del_in_fd {nick uhost hand chan arg} {
global nchan
if {[string tolower $chan] != [string tolower $nchan]} {
return
}
if {[llength $arg] != 1} {
puthelp "NOTICE $nick :Usage: !delison <nickname|phone number>"
return 0
}
set nicknames [getinfo]
set who [lindex $arg 0]
set who [charfilter $who]
if {[lsearch -exact $nicknames [lindex $arg 0]] == -1} {
puthelp "NOTICE $nick :Nickname $who not found in the database!"
return 0
}
regsub -all "\\\m$who\\\M" $nicknames "" nicknames
regsub -all {\s+} $nicknames { } nicknames
writetof $nicknames
puthelp "NOTICE $nick :Nickname $who erased from the database!"
}
## !list [nickname]
bind pub n !list list_out_of_fd
proc list_out_of_fd {nick uhost hand chan arg} {
global nchan
if {[string tolower $chan] != [string tolower $nchan]} {
return
}
if {[llength $arg] == 0} {
set nicknames [getinfo]
set nicknames [charfilter $nicknames]
set nicknames [removespaces $nicknames]
if {$nicknames == ""} {
puthelp "NOTICE $nick :No one is added in the database!"
} else {
puthelp "NOTICE $nick :Added in the database: $nicknames"
}
} elseif {[llength $arg] == 1} {
set nicknames [getinfo]
set nicknames [string tolower $nicknames]
if {[lsearch -exact $nicknames [lindex $arg 0]] == -1} {
puthelp "NOTICE $nick :[charfilter [lindex $arg 0]] not found in the database!"
} else {
puthelp "NOTICE $nick :[charfilter [lindex $arg 0]] is in the database!"
}
} else {
puthelp "NOTICE $nick :Usage: !list \[nickname\]"
}
}
## The proc
proc notify {} {
set nlist [getinfo]
putserv "ISON :$nlist"
if {![string match *notify* [utimers]]} { utimer 30 notify }
}
proc charfilter {x {y ""} } {
for {set i 0} {$i < [string length $x]} {incr i} {
switch -- [string index $x $i] {
"\"" {append y "\\\""}
"\\" {append y "\\\\"}
"\[" {append y "\\\["}
"\]" {append y "\\\]"}
"\}" {append y "\\\}"}
"\{" {append y "\\\{"}
default {append y [string index $x $i]}
}
}
return $y
}
proc getinfo {} {
global filename
set file [open $filename r]
set nlist ""
while {![eof $file]} {
set chast [gets $file]
if {$chast != ""} {
append nlist $chast
}
}
close $file
return $nlist
}
proc removespaces {arg} {
regsub {^\s+} $arg "" arg
return $arg
}
proc onlineon {arg} {
global nchan
set onchan ""
foreach tempchar $arg {
if {![onchan $tempchar $nchan]} {
# putserv "INVITE $tempchar $nchan"
putserv "WHOIS $tempchar"
} else {
append onchan " $tempchar"
}
}
return $onchan
}
proc qonreport {how arg online} {
set aq 0
set foo ""
foreach el $arg {
foreach el1 $online {
if {$el == $el1} {
set aq 1
}
}
if {$aq == $how} {
append foo " $el"
}
set aq 0
}
return $foo
}
proc writetof {what} {
global filename
set fh [open $filename w]
puts $fh $what
close $fh
}
proc dupZZ {where what how} {
set dontsay ""
foreach el1 $what {
if {[lsearch -exact $where $el1] != -1} {
if {$how == 0} {
append dontsay " $el1"
}
} else {
if {$how == 1} {
append dontsay " $el1"
}
}
}
return $dontsay
}
if {![string match *notify* [utimers]]} { utimer 30 notify }
putlog "ISON TCL by IRCHelp.UniBG.Net+LHG Crew ++/++ Counter by V1p3r#TCL Loaded !!!"