Browse Source

Add files via upload

Florian 8 years ago
parent
commit
cf2af934d6

+ 2053 - 0
BlackTools2.5/BlackTools/Commands/BT.AddCmds.tcl

@@ -0,0 +1,2053 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+############################   ADDCMDS 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                ##
+##					                               ##
+#########################################################################
+
+
+############################## Commands #################################
+
+
+############################## add ######################################
+
+proc publicadd {nick host hand chan arg} {
+global black lastbind
+	set level [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set args [lrange [split $arg] 1 end]
+	set handle ""
+	set uhost ""
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|MA $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 1]
+	set args [lrange [split $arg] 2 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	if {$args != ""} {
+foreach user $args {
+if {$user != ""} {
+if {![string is alnum $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.18 none
+	continue
+}
+	add:process $user $uhost $handle $level $hand $host $chan $chan1 $nick $type "add"
+			}
+		}
+	} else {  add:process "" $uhost $handle $level $hand $host $chan $chan1 $nick $type "add" }
+}
+
+########################## adduser ##################################
+
+proc adduserpublic {nick host hand chan arg} {
+global black lastbind
+	set level [lindex [split $arg] 0]
+	set args [lrange [split $arg] 1 end]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|AM $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 1]
+	set args [lrange [split $arg] 2 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$args != ""} {
+foreach user $args {
+if {$user != ""} {
+	set handle [nick2hand $user]
+if {![onchan $user $chan] && ![validuser $user]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan [split $user]
+	return
+}
+	set hosts [getchanhost $user $chan]
+	set uhost [return_mask $black(addusermask) $hosts $user]
+	add:process $user $uhost $handle $level $hand $host $chan $chan1 $nick $type "adduser"
+			}
+		}
+	} else { add:process "" "" "" $level $hand $host $chan $chan1 $nick $type "adduser" }
+}
+
+proc add:process {user uhost handle level hand host chan chan1 nick type cmd} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand $cmd 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 {[validuser $handle]} {
+	set user $handle
+}
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$cmd"
+		}
+	}
+	return
+}
+	set show_user $user
+	set time [unixtime]
+	set flags "nmo|NMOAVH"
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}	
+	
+if {$user != ""} {
+	set user [strip:all $user]
+	set replace(%user%) $show_user
+if {$uhost == ""} {
+	set uhost [string map [array get replace] $black(hostadd)]
+}
+if {[userlist] != ""} {
+foreach usr [userlist] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $uhost] && (![string match -nocase $usr $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.5 $usr
+	set user $usr
+	set show_user $usr
+			}
+		}
+	}
+}
+ 
+if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.6 [blacktools:getlevelname 3 $hand]
+	return
+}
+if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 4 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.7 [blacktools:getlevelname 4 $hand]
+	return
+}
+if {[matchattr $hand -|M $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.8 [blacktools:getlevelname 3 $hand]
+	return
+}
+if {[matchattr $hand n|- $chan] && [matchattr $user m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$show_user [blacktools:getlevelname 2 $hand]"
+	return
+}
+if {[matchattr $hand n|- $chan] && [matchattr $user o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$show_user [blacktools:getlevelname 8 $hand]"
+	return
+}
+if {[matchattr $hand m|- $chan] && [matchattr $user o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$show_user [blacktools:getlevelname 8 $hand]"
+	return
+}
+
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} { 
+	set flags "-|olM"
+if {[validuser $user]} { 
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user o|- $chan] && [matchattr $hand -|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user o|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSOHAMV $chan
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-SOHAMV $chan
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
+	set flags "-|olA"
+ if {[validuser $user]} { 	
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
+	set flags "m|-"
+if {[matchattr $hand n|- $chan]} {
+if {[validuser $user]} { 
+	chattr $user o-|-qolSHOAMV $chan
+	chattr $user $flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 2 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags 
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 2 $hand]"
+		}
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+	set flags "o|-"
+if {[matchattr $hand nmo|- $chan]} {
+if {[validuser $user]} { 
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags 
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
+		}
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	set flags "-|olO"
+if {[validuser $user]} { 
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
+	set flags "-|H"
+if {[validuser $user]} { 
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qHolSOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolHSOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
+	set flags "-|olV"
+if {[validuser $user]} { 	
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan	
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
+							
+				}
+			} else {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
+	return
+			}
+		}
+	}
+}
+
+############################## delacc ################################
+
+proc delaccpublic {nick host hand chan arg} {
+global black lastbind
+	set args [lrange [split $arg] 0 end]
+	set type 0
+	set chan1 "$chan"
+	set c [lindex [split $arg] 0]
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AM $c]} {
+	set chan "$c"
+	set args [lrange [split $arg] 1 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	foreach user $args {
+	delacc:process $nick $host $hand $chan $chan1 $user $type
+	}
+}
+
+proc delacc:process {nick host hand chan chan1 user type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "delacc" 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 {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delacc"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delacc"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
+	return
+}
+
+if {$user != ""} {
+	set show_user $user
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[matchattr $hand n|- $chan]} {
+if {[matchattr $user mo]} {
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} { 
+if {[matchattr $user m]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.2 $show_user
+} elseif {[matchattr $user o]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
+}
+		chattr $user -moag
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	return
+	}
+} elseif {[matchattr $hand m]} {
+if {[matchattr $user o]} {
+if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} { 
+	chattr $user -oag
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	return
+	}
+}
+	
+if {![matchattr $user -|OAMVH $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+
+if {[validuser $user]} { 
+	chattr $user -|-qolSgaOAMVHf $chan
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.1 $show_user
+			} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	}
+}
+
+############################## del #####################################
+
+proc delpublic {nick host hand chan arg} {
+global black lastbind
+	set args [lrange [split $arg] 0 end]
+	set type 0
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	del:process $nick $host $hand $chan $chan1 $args $type
+}
+
+proc del:process {nick host hand chan chan1 args type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "del" 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 {$args == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "del"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "del"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "del"
+		}
+	}
+	return
+} 
+
+foreach user $args {
+	set show_user $user
+if {$user != ""} {
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	continue
+}
+
+if {[validuser $user]} { 
+if {[matchattr $hand -|MA $chan]} {
+foreach c [channels] {
+	if {![string equal -nocase $c $chan]} {
+	if {[matchattr $user nmo|HAMOVSo $c]} {
+	blacktools:tell $nick $host $hand $chan $chan1 del.2 $show_user
+	continue
+			}
+		}
+	}
+}
+	deluser $user
+	notes:remove:ondelete $user
+	s:remove:ondelete $user
+	blacktools:tell $nick $host $hand $chan $chan1 del.1 $show_user
+			} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+		}
+	}
+}
+
+
+################################ addhost #############################
+
+proc addhostpublic {nick host hand chan arg} {
+global black lastbind
+	set user [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set hosts [lindex [split $arg] 1]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	addhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+}
+
+proc addhost:process {nick host hand chan chan1 user hosts type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "addhost" 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 found_it 0
+	set found_user ""
+	set show_user $user
+	set show_hosts $hosts
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "addhost"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "addhost"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "addhost"
+		}
+	}
+	return
+}
+
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+foreach u [userlist] {
+	set h [getuser $u hosts]
+foreach hs $h {
+if {[string match -nocase [split $hs] $hosts]} {
+	set found_it 1
+	set found_user $u
+		}
+	}
+}
+
+if {[validuser $user]} {
+if {$found_it == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $show_hosts"
+	return
+}
+	setuser $user HOSTS $hosts
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.2 "$show_user $show_hosts"
+	} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+############################### delhost ############################
+
+
+proc delhostpuplic {nick host hand chan arg} {
+global black lastbind
+	set user [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set hosts [lindex [split $arg] 1]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	delhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+}
+
+
+proc delhost:process {nick host hand chan chan1 user hosts type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "delhost" 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_user $user
+	set show_hosts $hosts
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delhost"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delhost"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delhost"
+		}
+	}
+	return
+}
+
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} {
+	set hhost [getuser $user hosts]
+foreach hhost $hhost {
+if {[string match -nocase [split $hhost] $hosts]} {
+	set foundhost 1
+	}
+}
+
+if {![info exists foundhost]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delhost.1 "$show_user $show_hosts"
+	return
+}
+	delhost $user $hosts
+	blacktools:tell $nick $host $hand $chan $chan1 delhost.2 "$show_user $show_hosts"
+		} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	}
+}
+
+############################### chuser ############################
+
+proc chuserpublic {nick host hand chan arg} {
+global black lastbind
+	set user [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set chandle [lindex [split $arg] 1]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	chuser:process $nick $host $hand $chan $chan1 $user $chandle $type
+}
+
+proc chuser:process {nick host hand chan chan1 user chandle type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "chuser" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set owner_user $user
+	set owner_chandle $chandle
+	set show_user $user
+	set show_chandle $chandle
+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 {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "chuser"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "chuser"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "chuser"
+		}
+	}
+	return
+}
+
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[matchattr $hand -|M $chan] && ![matchattr $user -|ASOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+	return
+}
+
+if {[validuser $chandle]} {
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
+return
+}
+
+if {[validuser $user]} {
+	chhandle $user $chandle
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.1 "$show_user $show_chandle"
+	} else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+############################ userlist #############################
+
+proc userlist:execute {hand host level chan chan1 nick type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "userlist" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set gl 0
+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 {$level == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "userlist"
+		}
+	}
+	return
+}
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} {
+    set flags "-|M"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+foreach user [wordwrap [join $list " "] 250 ,] {
+if {$list == ""} { set user "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 3 $hand] $user $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
+	set flags "-|A"
+	set numar [llength [userlist $flags $chan]]
+	set list [userlist $flags $chan]
+foreach user [wordwrap [join $list " "] 250 ,] {
+if {$list == ""} { set user "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 4 $hand] $user $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
+	set flags "-|H"
+	set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+foreach user [wordwrap [join $list " "] 250 ,] {
+if {$list == ""} { set user "N/A" } 
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 7 $hand] $user $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	set flags "-|O"
+    set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+foreach user [wordwrap [join $list " "] 250 ,] {
+if {$list == ""} { set user "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 5 $hand] $user $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
+if {[matchattr $hand nmo]} {
+	set gl 1
+	set bossflags "n|-"
+	set ownerflags "m|-"
+	set listbossowner [userlist $bossflags]
+	set listowner [userlist $ownerflags]
+foreach user $listbossowner {
+if {[lsearch -exact $listowner $user] > -1} {
+	set pos [lsearch -exact	$listowner $user]
+	set listowner [lreplace $listowner $pos $pos]
+	}
+}
+if {$listowner == ""} { set listowner "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 1 $hand] $listbossowner $gl
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 2 $hand] $listowner $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+if {[matchattr $hand nmo]} {
+	set gl 1
+	set bossflags "n|-"
+	set ownerflags "m|-"
+	set masterflags "o|-"
+	set listbossowner [userlist $bossflags]
+	set listowner [userlist $ownerflags]
+	set listmaster [userlist $masterflags]
+foreach user $listbossowner {
+if {[lsearch -exact $listmaster $user] > -1} {
+	set pos [lsearch -exact	$listmaster $user]
+	set listmaster [lreplace $listmaster $pos $pos]
+	}
+}
+foreach user $listowner {
+if {[lsearch -exact $listmaster $user] > -1} {
+	set pos [lsearch -exact	$listmaster $user]
+	set listmaster [lreplace $listmaster $pos $pos]
+	}
+}
+if {$listmaster == ""} { set listmaster "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 8 $hand] $listmaster $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
+set flags "-|V"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+foreach user [wordwrap [join $list " "] 250 ,] {
+if {$list == ""} { set user "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 6 $hand] $user $gl
+	}
+} elseif {[string equal -nocase $level "all"]} {
+array set flgc [list]	
+	set flags "-|MHAVO"
+	set list [userlist $flags $chan]
+	set numar [llength [userlist $flags $chan]]
+foreach user $list {
+if {[matchattr $user -|M $chan]} {
+	lappend flgc([blacktools:getlevelname 3 $hand]) $user
+} elseif {[matchattr $user -|A $chan]} { 
+	lappend flgc([blacktools:getlevelname 4 $hand]) $user
+} elseif {[matchattr $user -|O $chan]} {
+	lappend flgc([blacktools:getlevelname 5 $hand]) $user
+} elseif {[matchattr $user -|V $chan]} {
+	lappend flgc([blacktools:getlevelname 6 $hand]) $user
+} elseif {[matchattr $user -|H $chan]} {
+	lappend flgc([blacktools:getlevelname 7 $hand]) $user
+	}
+}
+
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.2 $numar
+foreach flw [array names flgc] {
+	foreach user [wordwrap [join $flgc($flw) " "] 250 ,] {
+	userlist:details $nick $host $hand $chan $chan1 $flw $user $gl
+				}
+			}
+		} else {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
+	return
+		}
+	}		
+}
+
+proc userlist:details {nick host hand chan chan1 access usernames gl} {
+	global black
+if {![info exists onchan]} {
+	set onchan ""
+}
+
+if {![info exists the_usernames]} {
+	set the_usernames ""
+}
+
+foreach user [split $usernames] {
+if {$host != "prv"} {
+	foreach n [chanlist $chan] {
+	set id [nick2hand $n]
+
+if {[string equal -nocase $id $user]} {
+	lappend the_usernames "$user/\002$n\002\[[userlist:check_mode $user $chan]\]"
+	lappend onchan $user
+			}
+		}
+	}
+if {[lsearch -exact [string tolower $onchan] [string tolower $user]] == -1} {
+	lappend the_usernames "$user\[[userlist:check_mode $user $chan]\]"
+	}
+}
+if {$usernames == "-"} {
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] $usernames"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] [join $the_usernames]"
+}
+
+proc userlist:check_mode {user chan} {
+	global black
+if {[matchattr $user a]} {
+	return "+o all"
+	}
+if {[matchattr $user g]} {
+	return "+v all"
+	}
+if {[matchattr $user -|a $chan]} {
+	return "+o"
+	}
+if {[matchattr $user -|g $chan]} {
+	return "+v"
+	}
+}
+
+
+proc publicuserlist {nick host hand chan arg} {
+global black lastbind
+	set level [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|MAOV $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 1]
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+	}
+}
+
+	userlist:execute $hand $host $level $chan $chan1 $nick $type
+}
+
+############################### info ############################
+
+proc infopublic {nick host hand chan arg} {
+global black lastbind
+	set user [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MASO $user] && ([lindex [split $arg] 1] == "")} {
+	set chan $user
+	info:process:chan $nick $host $hand $chan $chan1
+	return
+}
+
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo]} {
+	set chan "$user"
+	set user [lindex [split $arg] 1]
+}
+	info:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc info:process:info_return {nick host hand chan chan1 user} {
+	global black
+	set show_user $user
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	blacktools:tell $nick $host $hand $chan $chan1 info.11 "$show_user"
+if {[matchattr $hand nmo]} {
+foreach c [channels] {
+if {[matchattr $user -|H $c]} { 
+	set fl [blacktools:getlevelname 7 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|V $c]} { 
+	set fl [blacktools:getlevelname 6 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|O $c]} { 
+	set fl [blacktools:getlevelname 5 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|A $c]} {
+	set fl [blacktools:getlevelname 4 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|M $c]} {
+	set fl [blacktools:getlevelname 3 $hand]
+	lappend flg($fl) $c 
+	}
+}
+foreach cf [array names flg] {
+lappend exit \002[join $flg($cf) ", "]\002 ($cf)
+	}
+}
+
+if {![info exists exit]} { set exit "N/A"}
+
+	set lastseen [getuser $user LASTON $chan]
+	set hosts [getuser $user hosts]
+
+if {$lastseen == ""} {
+	set lastseen "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+if {[matchattr $hand mno]} {
+	set laston [getuser $user laston]
+	set lastseen [lindex $laston 0]
+	set lastchan [lindex $laston 1]
+if {$laston == ""} {
+	set lastseen "N/A"
+	set lastchan "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
+if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
+	}
+}
+
+proc info:process:chan {nick host hand chan chan1} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand "info" 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.nocmem $chan
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set status "OK"
+	set modes [channel get $chan chanmode]
+	set manager [userlist -|M $chan]
+	if {$manager == ""} { set manager "N/A" }
+	set topic [join [topic:return $chan]]
+	set url [setting:get $chan url]
+if {[setting:get $chan jointime] == ""} {
+	set jointime "N/A"
+	set jointime_2 "N/A"
+} else {
+	set jointime [clock format [setting:get $chan jointime] -format %D-%H:%M:%S]
+	set jointime_2 [return_time $getlang [expr [unixtime] - [setting:get $chan jointime]]]
+}
+
+	set joincount [setting:get $chan joincount]
+if {$joincount == ""} {set joincount 0}
+	set nr_user [llength [chanlist $chan]]
+	set nr_ban [llength [blacktools:banlist $chan]]
+	set nr_user_ac 0
+foreach user [chanlist $chan] {
+	set handle [nick2hand $user]
+if {[matchattr $handle -|OgaAHMNV $chan]} {
+	set nr_user_ac [expr $nr_user_ac + 1]
+	}
+}
+	set file [open $black(seen_file) "r"]
+	set database [read -nonewline $file]
+	set data [split $database "\n"]
+	close $file
+	set nr_seen [llength [lsearch -all [string tolower $data] [string tolower "* $chan *"]]]
+
+	blacktools:tell $nick $host $hand $chan $chan1 info.15 "$chan $modes"
+	blacktools:tell $nick $host $hand $chan $chan1 info.16 "$manager"
+
+if {[channel get $chan inactive]} {
+	set found_it 1
+if {[info exists black(abuse:$chan)]} {
+if {$black(abuse:$chan) == "1"} {
+	set status "$black(say.$getlang.info.29)"
+	} elseif {$black(abuse:$chan) == "3"} {
+	set status "$black(say.$getlang.info.27)"
+	} elseif {$black(abuse:$chan) == "2"} {
+	set status "$black(say.$getlang.info.28)"
+	} elseif {$black(abuse:$chan) == "4"} {
+	set status "$black(say.$getlang.info.26)"
+	} elseif {$black(abuse:$chan) == "5"} {
+	set status "$black(say.$getlang.info.35)"
+	}
+} else {
+	set status "$black(say.$getlang.info.22)"
+	}
+}
+if {![info exist found_it]} {
+if {![onchan $botnick $chan]} {
+	set found_it 1
+if {[info exists black(abuse:$chan)]} {
+if {$black(abuse:$chan) == "1"} {
+	set status "$black(say.$getlang.info.33)"
+	} elseif {$black(abuse:$chan) == "3"} {
+	set status "$black(say.$getlang.info.31)"
+	} elseif {$black(abuse:$chan) == "2"} {
+	set status "$black(say.$getlang.info.32)"
+	} elseif {$black(abuse:$chan) == "4"} {
+	set status "$black(say.$getlang.info.30)"
+	} elseif {$black(abuse:$chan) == "5"} {
+	set status "$black(say.$getlang.info.34)"
+	} 
+} else {
+	set status "$black(say.$getlang.info.23)"
+		}
+	}
+}
+
+if {![info exist found_it]} {
+if {![botisop $chan]} {
+	set status "$black(say.$getlang.info.24)"
+		}
+	}
+if {$status != "OK"} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.19 "$status"
+}
+if {$topic != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.17 "$topic"
+}
+if {$url != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.18 "$url"
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.20 "$jointime $jointime_2"
+
+	blacktools:tell $nick $host $hand $chan $chan1 info.21 "$joincount $nr_user $nr_user_ac $nr_ban $nr_seen"
+}
+
+proc info:process:host {nick host hand chan chan1 get_host} {
+	global black
+	set users ""
+foreach user [userlist] {
+foreach h [getuser $user hosts] {
+if {[string match -nocase $get_host $h]} {
+	set found_host 1
+	lappend users $user
+		}
+	}	
+}
+	set users [lsort -unique $users]
+	set user_num [llength $users]
+if {![info exists found_host]} {
+	return 0
+}
+if {$user_num == 1} {
+	info:process:info_return $nick $host $hand $chan $chan1 [join $users]
+	return 1
+}
+
+if {$user_num > 1 && $user_num < 11} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.12 "$user_num $users"
+	blacktools:tell $nick $host $hand $chan $chan1 info.14 none
+	return 1
+}
+
+if {$user_num > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.13 "$user_num"
+	return 1
+	}
+}
+
+proc info:process {nick host hand chan chan1 user type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "info" 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 getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set show_user $user
+	set time [ctime [unixtime]]
+	array set flg [list]
+
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "info"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "info"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "info"
+		}
+	}
+	return
+}
+
+if {[matchattr $hand nmo] && ($host == "prv") && (![regexp {^[&#]} $chan])} {
+foreach chan [channels] {
+if {[onchan $user $chan]} {
+	set handle [nick2hand $user]
+		}
+	}
+} else {
+if {[onchan $user $chan]} {
+	set handle [nick2hand $user]
+	}
+}
+
+if {[info exists handle]} {
+if {[validuser $handle]} {
+	set user $handle
+	}
+}
+
+if {[regexp {\*} $user]} {
+if {[matchattr $hand nmo]} {
+	set check [info:process:host $nick $host $hand $chan $chan1 $user]
+if {$check == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.hostnotexist $user
+		}
+	return
+	}
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none 
+	return
+}
+
+if {(![matchattr $user nmago|OwgaAHSMNV $chan]) && [matchattr $hand mno]} { 
+	info:process:info_return $nick $host $hand $chan $chan1 $user
+	return
+}
+
+if {![matchattr $user nmgao|OwgaAHSMNV $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none  
+	return
+}
+
+if {[matchattr $hand nmo|- $chan]} {
+foreach c [channels] {
+if {[matchattr $user -|H $c]} { 
+	set fl [blacktools:getlevelname 7 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|V $c]} { 
+	set fl [blacktools:getlevelname 6 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|O $c]} { 
+	set fl [blacktools:getlevelname 5 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|A $c]} {
+	set fl [blacktools:getlevelname 4 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|M $c]} {
+	set fl [blacktools:getlevelname 3 $hand]
+	lappend flg($fl) $c 
+	}
+}
+foreach cf [array names flg] {
+lappend exit \002[join $flg($cf) ", "]\002 ($cf)
+	}
+}
+
+if {![info exists exit]} { set exit "N/A"}
+
+	set cflags [chattr $user | $chan]
+if {[matchattr $user a]} {
+	set automode_gl "OP"
+} elseif {[matchattr $user g]} {
+	set automode_gl "VOICE"
+} else {
+	set automode_gl "N/A"
+}
+
+if {[matchattr $user -|V $chan]} { set flags [blacktools:getlevelname 6 $hand] } elseif {[matchattr $user -|O $chan]} { set flags [blacktools:getlevelname 5 $hand] } elseif {[matchattr $user -|A $chan]} { set flags [blacktools:getlevelname 4 $hand] } elseif {[matchattr $user -|H $chan]} { set flags [blacktools:getlevelname 7 $hand] } else { set flags "\002N/A\002" }
+if {[matchattr $user n|- $chan]} { set flags [blacktools:getlevelname 1 $hand] } elseif {[matchattr $user m|- $chan]} { set flags [blacktools:getlevelname 2 $hand] } elseif {[matchattr $user o|- $chan]} { set flags [blacktools:getlevelname 8 $hand]} elseif {[matchattr $user -|M $chan]} { set flags [blacktools:getlevelname 3 $hand] } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE" } 
+
+if {[matchattr $user -|a $chan]} {
+	set automode "OP"
+} elseif {[matchattr $user -|g $chan]} {
+	set automode "VOICE"
+} else {
+	set automode "N/A"
+}
+
+if {[matchattr $user -|q $chan]} {
+	set suspended 1
+} else {
+	set suspended 0
+}
+	set getflags [getflags $user $chan]
+if {![string equal -nocase $show_user $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.1 "$show_user\[[black:color 1 $hand $user]\] $flags"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.1 "$show_user $flags"
+}
+	
+if {$automode_gl != "N/A"} {
+if {[matchattr $user mnaog]} {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode_gl\[all\] $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode_gl\[all\] $user"	
+}
+} else {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode_gl\[all\] $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode_gl\[all\] $user"
+	}
+}
+		} else {
+if {[matchattr $user mno]} {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode $user"
+}
+	} else {
+if {$getflags != ""} {	
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode $user"
+			}
+		}	
+	}
+	set extra "CHANMODIF($chan)"
+	set get_chan $chan
+if {[matchattr $user mno]} {
+	set extra "CHANMODIF(GLOBAL)"
+	set get_chan "GLOBAL"
+}
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set read_user [lindex [split $line] 1]
+if {[string equal -nocase $read_chan $get_chan] && [string equal -nocase $read_user $user]} {
+	set read_time [lindex [split $line] 2]
+	
+if {[unixtime] > $read_time} {
+	set read_time [expr [unixtime] - $read_time]
+} else {
+	set read_time [expr $read_time - [unixtime]]
+}
+	set read_time [return_time_2 $getlang $read_time]
+	
+if {$read_time == 0} {
+	continue
+}
+	set split_readtime [split $read_time " "]
+	set days [lindex $split_readtime 0]
+	set the_time [lindex $split_readtime 1]
+	set read_level [lindex [split $line] 4]
+	set read_reason [lrange [split $line] 5 end]
+if {[string equal -nocase $get_chan "GLOBAL"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.9 "$read_time $read_level $read_reason"
+			} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.7 "$read_time $read_level $read_reason"
+			}
+		}
+	}
+
+if {[getuser $user INFO] != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.3 "[split [getuser $user INFO]]"
+}
+	set lastmodify [getuser $user XTRA $extra]
+if {$lastmodify != ""} {
+	set split_last [split $lastmodify ":"]
+	set lastmodif_time [lindex $split_last 0]
+	set lastmodif_time [clock format $lastmodif_time -format %D-%H:%M:%S]
+	set lastmodif_hand [join [lindex [split $split_last] 1]]
+} else {
+	set date [getuser $user XTRA LASTMODIFDATE]
+	set last [getuser $user XTRA LASTMODIFBY]
+	set lastmodif_time $date
+	set lastmodif_hand $last
+}
+
+if {($lastmodif_time == "") && ($lastmodif_hand == "")} {
+	set lastmodif_time "N/A"
+	set lastmodif_hand "N/A"
+}
+
+	set lastseen [getuser $user LASTON $chan]
+	set hosts [getuser $user hosts]
+
+if {$lastseen == ""} {
+	set lastseen "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.4 "$lastmodif_hand $lastmodif_time"
+if {[matchattr $hand mno]} {
+	set laston [getuser $user laston]
+	set lastseen [lindex $laston 0]
+	set lastchan [lindex $laston 1]
+if {$laston == ""} {
+	set lastseen "N/A"
+	set lastchan "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
+if {[matchattr $hand nmo|- $chan] || [string equal -nocase $user $hand]} {
+if {[getsettings $user] != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.36 [join [getsettings $user] " ; "]
+	}
+}
+if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
+	}
+}
+
+proc getsettings {user} {
+	global black
+	set output ""
+	set settings "lang OUTPUT_TYPE autoinvite mychan mychar OUTPUT_COLORS"
+foreach setting [string toupper $settings] {
+	set get [getuser $user XTRA $setting]
+if {$get != ""} {
+if {$setting == "OUTPUT_COLORS"} {
+	set setting "COLORS"
+}
+if {$setting == "OUTPUT_TYPE"} {
+	set setting "OUTPUT"
+	switch $get {
+	0 {
+	set get "NOTICE"
+	}
+	1 {
+	set get "CHAN"
+	}
+	2 {
+	set get "MSG"
+			}
+		}
+	}
+if {$setting == "AUTOINVITE"} {
+	switch $get {
+	1 {
+	set get "ON"
+		}
+	0 {
+	set get "OFF"
+					}
+				}
+			}
+	lappend output "$setting\[[join $get ","]\]"
+		}
+	}
+	return $output
+}
+
+proc getflags {user chan} {
+	global black
+	set flags ""
+if {[matchattr $user -|f $chan]} {	
+	lappend flags "f"
+}
+if {[matchattr $user -|w $chan]} {	
+	lappend flags "w"
+}
+if {[matchattr $user -|P $chan]} {	
+	lappend flags "P"
+}
+	return [join $flags ""]
+}
+
+################################# s ###############################
+
+proc spublic {nick host hand chan arg} {
+global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set user [lindex [split $arg] 0]
+	set suspend_time [lindex [split $arg] 1]
+	set suspend_reason [join [lrange [split $arg] 2 end]]
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_reason [join [lrange [split $arg] 1 end]]
+}
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo]} {
+	set chan "$user"
+	set user [lindex [split $arg] 1]
+	set suspend_time [lindex [split $arg] 2]
+	set suspend_reason [join [lrange [split $arg] 3 end]]
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_reason [join [lrange [split $arg] 2 end]]
+}
+
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	s:process $nick $host $hand $chan $chan1 $user $type $suspend_time $suspend_reason
+}
+
+proc s:process {nick host hand chan chan1 user type suspend_time suspend_reason} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "s" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set show_user $user
+	set suspend_time $suspend_time
+	set show_suspend_reason $suspend_reason
+	set flags "-|q"
+	set gl_flags "+q"
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set unixtime [unixtime]
+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 {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "s"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "s"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "s"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+if {[matchattr $user -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.1 $show_user
+	return
+}
+
+if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_time $black(s:default_time)
+}
+
+if {$suspend_reason == ""} {
+	set suspend_reason $black(say.$getlang.s.3)
+}
+	
+	set get_time [expr [time_return_minute $suspend_time] * 60]
+	set get_time [expr $unixtime + $get_time]
+
+if {[matchattr $hand n] && [matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+	}
+	return
+} elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+	}
+	return
+} elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+	}
+	return
+}
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand $chan $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.2 $show_user
+	}
+}
+
+proc s:process:add {nick hand chan chan1 user suspend_time bywho reason} {
+	global black username
+	set current_level [s:process:getlevel $bywho $chan]
+	set not_allowed 0
+	set found_timer 0
+	set found_entry 0
+	set lin 0
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+foreach line $data {
+	set lin [expr $lin + 1]
+	set get_channel [lindex [split $line] 0]
+	set get_username [lindex [split $line] 1]
+	set get_bywho [lindex [split $line] 3]
+if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
+	set found_entry 1
+	set get_level [lindex [split $line] 4]
+	set not_allowed [s:process:allow $get_level $current_level]
+	}
+}
+if {$not_allowed == "0" && $found_entry == 1} {
+	set num [expr $lin - 1]
+	set delete [lreplace $data $num $num]
+	set files [open $black(s_file) "w"]
+	puts $files [join $delete "\n"]
+	close $files
+
+	set file [open $black(s_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data == ""} {
+	set file [open $black(s_file) "w"]
+	close $file
+	}
+}
+
+if {$not_allowed == "1"} {
+	blacktools:tell $nick "" $hand $chan $chan1 s.4 $user
+	return 0
+} else {
+	set who "$chan $user $suspend_time $bywho $current_level $reason"
+	set file [open $black(s_file) "a"]
+	puts $file $who
+	close $file
+foreach tmr [timers] {
+if {[string match "*s:process:timer*" [join [lindex $tmr 1]]]} {
+	set found_timer 1
+	}	 
+}
+if {$found_timer == "0"} {
+	timer 1 s:process:timer
+}
+	return 1
+	}
+}
+
+proc s:process:getlevel {hand chan} {
+	global black
+if {[matchattr $hand n]} {
+	set current_flags "BOSS-OWNER"
+} elseif {[matchattr $hand m]} {
+	set current_flags "OWNER"
+} elseif {[matchattr $hand o]} { 
+	set current_flags "MASTER" 
+} elseif {[matchattr $hand -|M $chan]} { 
+	set current_flags "MANAGER"
+} elseif {[matchattr $hand -|A $chan]} { 
+	set current_flags "ADMIN"
+	}
+	return $current_flags
+}
+
+proc s:process:allow {get_level current_level} {
+	global black
+if {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "OWNER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "MANAGER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1
+	}
+	return 0
+}
+
+################################## us ################################
+
+proc uspublic {nick host hand chan arg} {
+global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set user [lindex [split $arg] 0]
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo]} {
+	set chan "$user"
+	set user [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	us:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc us:process {nick host hand chan chan1 user type} {
+global botnick black
+set cmd_status [btcmd:status $chan $hand "us" 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_user $user
+	set get_time [unixtime]
+	set flags "-|-q"
+	set gl_flags "-q"
+
+
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "us"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "us"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "us"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+if {![matchattr $user q|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.1 $show_user
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[matchattr $hand n] && [matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $chan $user $type2]
+} elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $chan $user $type2]
+}  elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $chan $user $type2]
+
+} else {
+	set type2 "0"
+	set inf [us:process:remove $chan $user $type]
+	setuser $user XTRA CHANMODIF($chan) $get_time:$hand
+}
+if {$inf == "1"} {
+if {$type2 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 us.3 $show_user
+		} else {
+	blacktools:tell $nick $host $hand $chan $chan1 us.2 $show_user
+		}	
+	}
+}
+
+proc us:process:remove {chan user type} {
+	global black
+	set flags "-|-q"
+	set gl_flags "-q"
+	set get_user [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $user]
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+if {$type == "1"} {
+	set i [lsearch -glob -nocase $data "* $get_user *"]
+} else {
+	set i [lsearch -glob -nocase $data "$chan $get_user *"]
+}
+if {$i > -1} {
+	set line [lindex $data $i]
+	set suspend_chan [lindex [split $line] 0]
+	set suspend_user [lindex [split $line] 1]
+if {[string equal -nocase $suspend_chan "GLOBAL"]} {
+if {$suspend_user != "" && $suspend_chan != ""} {
+	chattr $suspend_user $gl_flags
+}
+} else {
+if {$suspend_user != "" && $suspend_chan != ""} {
+	chattr $suspend_user $flags $suspend_chan
+			}
+		}
+	set delete [lreplace $data $i $i]
+	set file [open $black(s_file) "w"] 
+	puts $file [join $delete "\n"]
+	close $file
+	
+	set file [open $black(s_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data == ""} {
+	set file [open $black(s_file) "w"]
+	close $file
+		}
+	return 1
+	}
+return 0
+}
+
+############################# auto #################################
+
+proc auto:join {nick host hand chan} {
+	global black
+if {[matchattr $hand a|a $chan]} {
+pushmode $chan +o $nick
+}	
+
+if {[matchattr $hand g|g $chan]} {
+	pushmode $chan +v $nick
+	}	
+}
+
+proc autopublic {nick host hand chan arg} { 
+global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set user [lindex [split $arg] 1]
+	set option [lindex [split $arg] 0]
+	set global [lindex [split $arg] 2]
+if {[regexp {^[&#]} $option] && [matchattr $hand nmo|MA $option] && ![string equal -nocase $global "global"]} {
+	set chan "$option"
+	set user [lindex [split $arg] 2]
+	set option [lindex [split $arg] 1]
+	set global [lindex [split $arg] 3]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	auto:process $nick $host $hand $chan $chan1 $user $option $global $type 
+}
+
+proc auto:process {nick host hand chan chan1 user option global type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "auto" 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_user $user
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	
+}	
+
+if {$user == "" || ![regexp {^[+ -]} $option]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "auto"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "auto"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "auto"
+		}
+	}
+	return 0
+}
+
+set verify [string trim $option {"+","-"}]
+
+if {[string equal -nocase $verify "o"] || [string equal -nocase $verify "v"]} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none	
+	return	
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+	}
+}
+
+if {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+
+if {[string equal -nocase $option "+o"]} {
+if {[matchattr $user g]} {
+	chattr $user -g
+}
+	chattr $user +a
+	blacktools:tell $nick $host $hand $chan $chan1 auto.12 $show_user
+}
+
+if {[string equal -nocase $option "-o"]} {
+	chattr $user -a
+	blacktools:tell $nick $host $hand $chan $chan1 auto.20 $show_user
+}
+
+if {[string equal -nocase $option "+v"]} {
+if {[matchattr $user a]} {
+	chattr $user -a
+}
+	chattr $user +g
+	blacktools:tell $nick $host $hand $chan $chan1 auto.13 $show_user
+}
+
+if {[string equal -nocase $option "-v"]} {
+	chattr $user -g
+	blacktools:tell $nick $host $hand $chan $chan1 auto.21 $show_user
+}
+	return
+}
+
+if {![matchattr $user -|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+
+if {[string equal -nocase $option "+o"]} {
+if {[matchattr $user -|g $chan]} {
+	chattr $user -|-g $chan
+}
+	chattr $user -|a $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.10 $show_user
+}
+
+if {[string equal -nocase $option "-o"]} {
+	chattr $user -|-a $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.18 $show_user
+}
+
+if {[string equal -nocase $option "+v"]} {
+if {[matchattr $user -|a $chan]} {
+	chattr $user -|-a $chan
+}
+	chattr $user -|g $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.11 $show_user
+}
+
+if {[string equal -nocase $option "-v"]} {
+	chattr $user -|-g $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.19 $show_user
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 1800 - 0
BlackTools2.5/BlackTools/Commands/BT.BanCmds.tcl

@@ -0,0 +1,1800 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+############################   BANCMDS 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                ##
+##					                               ##
+#########################################################################
+
+
+################################ Commands ###################################
+
+################################ troll #####################################
+
+proc trollpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set tr [lindex [split $arg] 0]
+	set chan1 "$chan"
+	set type "0"
+if {[regexp {^[&#]} $tr] && [matchattr $hand nmo|MAO $tr]} {
+	set chan "$tr"
+	set tr [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $tr $nick $hand $host $chan $chan1 $type "1440" "troll" "" "0"
+}
+
+################################## vr #######################################
+
+proc vrpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set vr [lindex [split $arg] 0]
+	set chan1 "$chan"
+	set type "0"
+if {[regexp {^[&#]} $vr] && [matchattr $hand nmo|MAO $vr]} {
+	set chan "$vr"
+	set vr [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $vr $nick $hand $host $chan $chan1 $type $black(vr:bantime) "vr" "" "0"
+}
+
+################################# bot #####################################
+
+proc botpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set bot [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $bot] && [matchattr $hand nmo|MAO $bot]} {
+	set chan "$bot"
+	set bot [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $bot $nick "$hand:bot" $host $chan $chan1 $type $black(bot:bantime) "bot" "" "0"
+}
+
+#################################### n #################################
+
+proc npublic {nick host hand chan arg} {
+global botnick black lastbind
+	set badnick [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+	set nextbackchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	} else {
+if {[string match -nocase $chan $nextbackchan]} {
+if {[setting:get $c nextshortcmd]} {
+	set chan "$c"
+			}
+		}
+	}
+}
+	
+if {[setting:get $chan nextshortcmd]} {
+	nextpublic:process $nick $host $hand $chan $chan1 $badnick
+	return
+}
+
+if {[regexp {^[&#]} $badnick] && [matchattr $hand nmo|MAO $badnick]} {
+	set chan "$badnick"
+	set badnick [lindex [split $arg] 1]
+}
+
+if {[regexp {\*} $badnick]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "n"
+	return
+}
+if {$badnick == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "n"
+	return
+}
+	bancmds:process $badnick $badnick $nick $hand $host $chan $chan1 $type $black(n:bantime) "n" "" "0"
+}
+
+################################## dr #######################################
+
+proc drpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set drone [lindex [split $arg] 0]
+	set chan1 "$chan"
+	set type "0"
+if {[regexp {^[&#]} $drone] && [matchattr $hand nmo|MAO $drone]} {
+	set chan "$drone"
+	set drone [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $drone $nick $hand $host $chan $chan1 $type $black(dr:bantime) "dr" "" "0"
+}
+
+################################## id #################################
+
+proc idpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set badident [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $badident] && [matchattr $hand nmo|MAO $badident]} {
+	set chan "$badident"
+	set badident [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $badident $nick $hand $host $chan $chan1 $type $black(id:bantime) "id"	"" "0"
+}
+
+############################### spam ##################################
+
+proc spampublic {nick host hand chan arg} {
+global botnick black lastbind
+	set spammer [lindex [split $arg] 0]
+	set chan1 "$chan"
+	set type 0
+	set mask [lindex [split $arg] 0]
+	set handle [nick2hand $spammer]
+if {[regexp {^[&#]} $spammer] && [matchattr $hand nmo|MAO $spammer]} {
+	set chan "$spammer"
+	set spammer [lindex [split $arg] 1]
+	set mask [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $spammer $nick $hand $host $chan $chan1 $type $black(spam:bantime) "spam" "" "0"
+}
+
+
+
+################################## bw #################################
+
+proc bwpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set badw [lindex [split $arg] 0]	
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $badw] && [matchattr $hand nmo|MAO $badw]} {
+	set chan "$badw"
+	set badw [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $badw $nick $hand $host $chan $chan1 $type $black(bw:bantime) "bw" "" "0"
+}
+
+############################### black #################################
+
+proc blackpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set blackb [lindex [split $arg] 0]
+	set reason [join [lrange [split $arg] 1 end]]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $blackb] && [matchattr $hand nmo|MA $blackb]} {
+	set chan "$blackb"
+	set blackb [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	userhost:act $blackb $nick $hand $host $chan $chan1 $type "0" "black" $reason "0"
+}
+
+################################ b #####################################
+
+proc bpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set type 0
+	set gl 0
+	set link 0
+	set chan1 "$chan"
+	set level ""
+	set b [lindex [split $arg] 0]
+	set tm [lindex [split $arg] 1]
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+if {[regexp {^[&#]} $b] && [matchattr $hand nmo|MAO $b]} {
+	set chan $b
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return [blacktools:mychar $lastbind $hand]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+}
+if {[regexp {^[-]} $tm]} {
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 4 end]]
+	set tm [lindex [split $arg] 3]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+			} 
+	} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+	} else {
+	set reason [join [lrange [split $arg] 3 end]]
+		}
+	}
+} else {
+if {[regexp {^[-]} $tm]} {
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 3 end]]
+	set tm [lindex [split $arg] 2]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 3 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+			} 
+} elseif {[string equal -nocase "$global" "link"] && [matchattr $hand nm]} {
+	set link 1
+	set tm [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 3 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+		} 
+} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 1 end]]
+	} else {
+	set reason [join [lrange [split $arg] 2 end]]
+		}
+	}
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+	set nextbackchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	} else {
+if {[string match -nocase $chan $nextbackchan]} {
+if {[setting:get $c nextshortcmd]} {
+	set chan "$c"
+			}
+		}
+	}
+}
+	
+if {[setting:get $chan nextshortcmd]} {
+	noidlepublic:process $nick $host $hand $chan $chan1 $b 0
+	return
+}
+
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 b.6 none
+	return
+}
+if {$return_time == "-1"} {
+	set return_time $black(b:bantime)
+}
+if {[llength $level] > "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.invalidlevel [string map {"0" ""} $level]
+	return
+}
+if {$level != ""} {
+	userhost:act $b $nick "$hand:$level" $host $chan $chan1 $type $return_time "b" $reason $gl
+} else {
+if {$link == "1"} {
+	foreach c [link:chan:get $chan] {
+	userhost:act $b $nick "$hand" $host $c $chan1 $type $return_time "b" $reason "2"
+	}
+	userhost:act $b $nick "$hand" $host $chan $chan1 $type $return_time "b" $reason "2"
+	return
+}
+	userhost:act $b $nick "$hand" $host $chan $chan1 $type $return_time "b" $reason $gl
+	}
+}
+
+############################### stick #################################
+
+proc stickpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set stickb [lindex [split $arg] 0]
+	set tm [lindex [split $arg] 1]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 1 end]]
+} else {
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $stickb] && [matchattr $hand nmo|MA $stickb]} {
+	set chan "$stickb"
+	set stickb [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+} else {
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 2 end]] 
+	}
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $stickb]} {
+	blacktools:tell $nick $host $hand $chan $chan1 b.6 none
+	return
+}
+
+if {$return_time == "-1"} {
+	set return_time $black(stick:bantime)
+}
+	userhost:act $stickb $nick $hand $host $chan $chan1 $type $return_time "stick" $reason "0"
+}
+
+################################ ub ###################################
+
+proc ubpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set ban [lindex [split $arg] 0]
+	set why [lindex [split $arg] 1]
+	set type 0	
+	set chan1 "$chan"
+if {[regexp {^[&#]} $ban] && [matchattr $hand nmo|MAO $ban]} {
+	set chan "$ban"
+	set ban [lindex [split $arg] 1]
+	set why [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+if {[regexp {^[0-9]} $ban]} {
+	set cmd "ub:id"
+} else {
+	set cmd "ub"
+}
+
+if {[string equal -nocase $why "global"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "1" $cmd "" ""
+} elseif {[string equal -nocase $why "link"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "" "ub" "" "1"
+} else {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "" $cmd "" ""
+	}
+}
+
+proc ub:link {mask} {
+	global black
+	set chanban 0
+	set chanlink 0
+foreach chan [link:get] {
+	set chanlink [expr $chanlink + 1]
+foreach b [blacktools:banlist $chan] {
+	set bhost [lindex [split $b] 3]
+	set real_bhost [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $bhost]
+if {[string match -nocase $mask $real_bhost] || [string match -nocase $real_bhost $mask]} {
+	set chanban [expr $chanban + 1]
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	pushmode $chan -b $bhost
+}
+	blacktools:delban $real_bhost $chan "0" "0"
+			}
+		}
+	}
+	return "$chanlink $chanban"
+}
+
+proc ub:process {user mask nick hand host chan chan1 type gl cmd whois link} {
+	global black
+	
+	set split_cmd [split $cmd ":"]
+	set id [lindex $split_cmd 1]
+	set cmd [lindex $split_cmd 0]
+	set cmd_status [btcmd:status $chan $hand "$cmd" 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 {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return
+}
+	
+if {![validchan $chan] && $link != "1" && $gl != "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {$link != "1" && $gl != "1"} {
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+	}
+}
+	set show_mask $mask
+	set total_b 0
+	set rem_b 0
+
+if {![regexp {\*} $mask] && $whois != "1" && $id != "id"} {
+	putserv "USERHOST :$user"
+	bind RAW - 302 ub:get:host
+	set ::uuser $user
+	set ::unick $nick
+	set ::uhand $hand
+	set ::uhost $host
+	set ::uchan $chan
+	set ::uchan1 $chan1
+	set ::utype $type
+	set ::ugl $gl
+	set ::ucmd $cmd
+	set ::ulink $link
+return
+}
+
+if {$link == "1"} {
+	set return [ub:link $mask]
+	set chanlink [lindex $return 0]
+	set chanban [lindex $return 1]
+	blacktools:tell $nick $host $hand $chan $chan1 ub.7 "$chanban $chanlink"
+	return
+} 
+
+if {$gl != "1"} {
+if {[onchan $user $chan]} {
+	set mask "$user![getchanhost $user $chan]"
+	}
+}
+
+if {$gl != "1"} {
+if {(($mask == "*") || ($mask == "*!*@*")) && [matchattr $hand -|OA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.5 none
+	return
+}
+
+foreach b [blacktools:banlist $chan] {
+	set bhost [lindex [split $b] 3]
+	set real_bhost [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $bhost]
+	set btime [lindex [split $b] 5]
+	set num [lindex [split $b] 1]
+if {[string match -nocase $mask $real_bhost] || [string match -nocase $real_bhost $mask] || [string match -nocase $mask $num]} {
+	set bywho [lindex [split $b] 4]
+	set read_tr [lindex [split $b] 7]
+	set total_b [expr $total_b + 1]
+	set split_bywho [split $bywho ":"]
+	set level [lindex $split_bywho 1]
+	set check [blacktools:check:levelub $hand $chan $level]
+if {$check == "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nounban $bhost
+	continue
+}
+if {$btime == "0" && [matchattr $hand -|O $chan]} {
+	continue
+}
+if {([blacktools:sticky $mask $chan] == "1") && [matchattr $hand -|OA $chan]} {
+	continue
+}
+	set rem_b [expr $rem_b + 1]
+
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	pushmode $chan -b $bhost
+}
+	blacktools:delban $real_bhost $chan "0" "0"
+if {$read_tr == "2"} {
+	troll:del $real_bhost $chan
+			}
+			continue
+		}
+	}
+foreach b [banlist $chan] {
+	set bhost [lindex $b 0]
+	set btime [lindex $b 2]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set total_b [expr $total_b + 1]
+if {$btime == "0" && [matchattr $hand -|O $chan]} {
+	continue
+}
+if {[isbansticky $bhost] && [matchattr $hand -|OA $chan]} {
+	continue
+}
+	set rem_b [expr $rem_b + 1]
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	killchanban $chan $bhost
+	}
+}
+
+if {$total_b == "0"} {
+if {[ischanban $mask $chan]} {
+	if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $mask"
+} else {
+	putserv "MODE $chan -b $mask"
+}
+	blacktools:tell $nick $host $hand $chan $chan1 ub.6 none
+	return
+}
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.8 $show_mask
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.1 $show_mask
+}
+	} else {
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.9 "$rem_b $total_b $show_mask"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.2 "$rem_b $total_b $show_mask"
+			}
+		}		
+	} else {
+foreach b [blacktools:banlist:gl] {
+	set bhost [lindex [split $b] 3]
+	set num [lindex [split $b] 1]
+	set real_bhost [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $bhost]
+	set btime [lindex [split $b] 4]
+if {[string match -nocase $mask $real_bhost] || [string match -nocase $real_bhost $mask] || [string match -nocase $mask $num]} {
+	set total_b [expr $total_b + 1]
+	set rem_b [expr $rem_b + 1]
+	blacktools:delban $real_bhost $chan "1" "0"
+if {$gl == "1"} {
+	blacktools:ub:global $real_bhost [channels] 0
+}
+	continue
+		}
+	}
+	
+foreach b [banlist] {
+	set bhost [lindex $b 0]
+	set btime [lindex $b 2]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set total_b [expr $total_b + 1]
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	killban $bhost
+		}
+	}
+if {$total_b == "0"} {	
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.11 $show_mask
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.3 $show_mask
+}
+	} else {
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.10 "$total_b $show_mask"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.4 "$total_b $show_mask"
+			}
+		}
+	}
+}
+
+proc blacktools:ub:global {bhost channels num} {
+	global black
+	set chan [lindex $channels $num]
+	set incnum [expr $num + 1]
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	if {[lindex $channels $incnum] != ""} {
+	blacktools:ub:global $bhost $channels $incnum
+	}
+}
+
+################################ sb ###################################
+
+proc sbpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set bhost [lindex [split $arg] 0]
+	set what [lindex [split $arg] 1]
+	set chan1 "$chan"
+	set type 0
+if {[regexp {^[&#]} $bhost] && [matchattr $hand nmo|AOM $bhost]} {
+	set chan "$bhost"
+	set bhost [lindex [split $arg] 1]
+	set what [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+if {$bhost != ""} {
+if {[regexp {^[0-9]} $bhost]} {
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "2"
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {[onchan $bhost $chan]} {
+	set bhost "$bhost![getchanhost $bhost $chan]"
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "1"
+	return
+}
+
+if {[regexp {\*} $bhost]} {
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "1"
+	return
+}
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" ""
+
+	} else { sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" ""}
+}
+
+proc sb:process {bhost what nick hand host chan chan1 type cmd entry} {
+global botnick black tcldir
+	set cmd_status [btcmd:status $chan $hand "sb" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+
+	set gl_bans 0
+	set local_bans 0
+	set total_bans 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+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 {$bhost == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+
+if {$bhost == "-"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.hostnotexist "none"
+	return
+}
+
+if {($bhost != "") && ($entry == "")} {
+	putserv "USERHOST :$bhost"
+	bind RAW - 302 sb:get:host
+	set ::suser $bhost
+	set ::snick $nick
+	set ::shand $hand
+	set ::shost $host
+	set ::schan $chan
+	set ::schan1 $chan1
+	set ::stype $type
+	set ::scmd $cmd
+	return
+}
+
+if {[matchattr $hand mn]} {
+	sb:search $nick $host $hand $chan $chan1 $bhost "1" $entry
+	return
+}
+	sb:search $nick $host $hand $chan $chan1 $bhost "0" $entry
+}
+
+proc sb:search {nick host hand chan chan1 bhost gl entry} {
+	global black
+	set show_bhost $bhost
+	set gl_bans 0
+	set local_bans 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+foreach b [blacktools:banlist $chan] {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $mask]
+if {[string match -nocase $real_mask $bhost] || [string match -nocase $bhost $real_mask] || $bhost == $id} {
+	set local_bans [expr $local_bans + 1]
+	}
+}
+if {$gl == "1"} {
+	foreach b [blacktools:banlist:gl] {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $mask]
+if {[string match -nocase $real_mask $bhost] || [string match -nocase $bhost $real_mask] || $bhost == $id} {
+	set gl_bans [expr $gl_bans + 1]
+		}
+	}
+}
+	
+if {$gl_bans > "0"} {
+foreach b [blacktools:banlist:gl] {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $mask]
+if {[string match -nocase $real_mask $bhost] || [string match -nocase $bhost $real_mask] || $bhost == $id} {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set created [clock format $created -format %D-%H:%M:%S]
+	set breason [lrange [split $b] 9 end]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [lindex [split $b] 4]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.3 "$id $mask $bywho $created $expire $breason"
+} else { 
+	set expire $black(say.$getlang.banlist.13)
+	blacktools:tell $nick $host $hand $chan $chan1 sb.10 "$id $mask $bywho $created $expire $breason"
+			}
+		}
+	}
+}
+if {$local_bans > "0"} {
+foreach b [blacktools:banlist $chan] {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $mask]
+if {[string match -nocase $real_mask $bhost] || [string match -nocase $bhost $real_mask] || $bhost == $id} {
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set created [clock format $created -format %D-%H:%M:%S]
+	set breason [lrange [split $b] 9 end]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [lindex [split $b] 4]
+	set split_bywho [split $bywho ":"]
+	set handle [lindex $split_bywho 0]
+	set type [lindex $split_bywho 1]
+if {$type != "" && $type != "bot"} {
+	set bywho "$handle\([encoding convertfrom utf-8 $type]\)"
+} else { 
+	set bywho $handle 
+}
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.4 "$id $mask $bywho $created $expire $breason"
+} else { 
+	set expire $black(say.$getlang.banlist.13)
+	blacktools:tell $nick $host $hand $chan $chan1 sb.9 "$id $mask $bywho $created $expire $breason"
+			}
+		}
+	}
+}
+if {[expr $local_bans + $gl_bans] > 0} {
+	return
+} else {
+	set gl_bans 0
+	set local_bans 0
+}
+
+foreach b [banlist $chan] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set local_bans [expr $local_bans + 1]
+	}
+}
+if {$gl == "1"} {
+	foreach b [banlist] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set gl_bans [expr $gl_bans + 1]
+	}
+}
+if {[expr $local_bans + $gl_bans] == "0"} {
+if {$entry == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.11 $show_bhost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.2 $show_bhost
+}
+	return
+}
+if {[expr $local_bans + $gl_bans] > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.5 "none"
+	return
+	}
+} else {
+
+if {$local_bans == "0"} {
+if {$entry == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.11 $show_bhost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.2 $show_bhost
+}
+	return
+}
+if {$local_bans > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.5 "none"
+	return
+	}
+}
+if {$gl_bans > "0"} {
+foreach b [banlist] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set bywho [split [lindex $b 5]]
+	set created [clock format $created -format %D-%H:%M:%S]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.3 "- $mask $bywho $created $expire $breason"
+} else { 
+	set expire "NEVER" 
+	blacktools:tell $nick $host $hand $chan $chan1 sb.10 "- $mask $bywho $created $expire $breason"
+				}
+			}
+		}
+	}
+
+if {$local_bans > "0"} {
+foreach b [banlist $chan] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set bywho [split [lindex $b 5]]
+	set created [clock format $created -format %D-%H:%M:%S]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.4 "- $mask $bywho $created $expire $breason"
+} else { 
+	set expire "NEVER" 
+	blacktools:tell $nick $host $hand $chan $chan1 sb.9 "- $mask $bywho $created $expire $breason"
+				}
+			}
+		}
+	}	
+}
+
+################################### banlist ###################################
+
+proc banlistpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set user [lindex [split $arg] 0]
+	set next [lindex [split $arg] 1]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MAO $user]} {
+	set chan "$user"
+	set user [lindex [split $arg] 1]
+	set next [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	banlist:process $nick $host $hand $chan $chan1 $user $type "banlist" $next
+}
+
+
+proc banlist:process {nick host hand chan chan1 user type cmd next} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "banlist" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set i 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+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 {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+
+if {[matchattr $hand nm] && [string equal -nocase "global" $user]} {
+	set gl "1"
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [blacktools:banlist:gl] ""
+	return
+}
+
+if {[string match -nocase "all" $user]} {
+	set gl ""
+	set user ""
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [blacktools:banlist $chan] ""
+	return
+}
+
+if {[string match -nocase "other" $user]} {
+	set gl ""
+	set user ""
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [banlist $chan] ""
+	return
+}
+
+if {[onchan $user $chan] && ![validuser $user]} {
+	set handle $user
+	set user [nick2hand $user]
+} else {
+	set handle ""
+}
+
+if {![validuser $user] && (![string equal -nocase "all" $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+
+if {![matchattr $user nmo|OASMN $chan] && (![string equal -nocase "all" $user])} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+	return
+}	
+	set gl ""
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set file_temp "temp.$timestamp"
+if {![file exists $file_temp]} {
+	set file [open $file_temp w]
+	close $file
+}
+	set file [open $file_temp a]
+foreach b [blacktools:banlist $chan] {
+	set bywho [lindex [split $b] 4]
+	set split_bywho [split $bywho ":"]
+	set handz [join [lindex [split $split_bywho] 0]]
+	set type [lindex [split $split_bywho] 1]
+if {[string equal -nocase $handz $user]} {
+	set id [lindex [split $b] 1]
+	set mask [lindex [split $b] 3]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set breason [lrange [split $b] 9 end]
+if {$type != ""} {
+	puts $file "$id $mask $expire $created $bywho [join $breason]"
+			} else {
+	puts $file "$id $mask $expire $created $bywho [join $breason]"		
+			}
+		}
+	}
+	close $file
+
+	set file [open $file_temp r]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	banlist:getbans $nick $host $hand $chan $chan1 $user $handle $type $next $gl $data "1"
+	file delete $file_temp
+}
+
+proc banlist:remain {nick hand count chan chan1 type gl user userb prv} {
+	global black lastbind botnick
+if {$count == "0"} { return }
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+	if {[string equal $lastbind "*"]} { set charbind "" }
+if {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " }
+	set replace(%char%) $charbind
+	set replace(%counter%) $count
+	set replace(%user%) $user
+	set replace(%chan%) $chan
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.3)]
+} 
+if {$userb == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.8)]	
+} 
+if {$user == ""} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.14)]
+} 
+if {$prv == "prv"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.14)]
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.3)]
+} 
+	putserv "PRIVMSG $nick :[string map [array get replace] $msg]"
+	return
+}
+	switch $type {
+	0 {
+	putserv "NOTICE $nick :[string map [array get replace] $msg]"
+}
+	1 {
+	putserv "PRIVMSG $chan1 :[string map [array get replace] $msg]"	
+}
+	2 {
+	putserv "PRIVMSG $nick :[string map [array get replace] $msg]"
+	}
+}
+
+}
+
+proc banlist:getbans {nick host hand chan chan1 user handle type next gl banlist userb} {
+	global black
+	set show_user $user
+	set show_handle $handle
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getmethod [getuser $hand XTRA OUTPUT_TYPE]
+if {$getmethod == ""} { set getmethod "0" }
+	if {[string equal -nocase $next "-next"]} {
+if {[info exists black(morebans:$chan:$hand)]} {
+if {$black(morebans:$chan:$hand) >= $black(modul:nr:entries)} {
+for {set i $black(showbans:$chan:$hand)} { $i < [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)] } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+	set black(morebans:$chan:$hand) [expr $black(morebans:$chan:$hand) - $black(modul:nr:entries)]
+	banlist:remain $nick $hand $black(morebans:$chan:$hand) $chan $chan1 $getmethod $gl $user $userb $host
+	set black(showbans:$chan:$hand) [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)]
+	} else {
+if {$black(morebans:$chan:$hand) < 1} {
+	return
+}
+for {set i $black(showbans:$chan:$hand)} { $i <= [expr $black(showbans:$chan:$hand) +  $black(morebans:$chan:$hand)]} { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+	set black(morebans:$chan:$hand) [expr $black(morebans:$chan:$hand) - $black(showbans:$chan:$hand)]
+	}
+	foreach tmr [utimers] {
+if {[string match -nocase "*banlist:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 30 [list banlist:unset:more $chan $hand]
+if {$black(morebans:$chan:$hand) < 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
+	}
+}	
+	return
+}
+	set black(cbanlist:$chan:$hand) [llength $banlist]
+	set black(showbans:$chan:$hand) 0
+if {$black(cbanlist:$chan:$hand) > $black(modul:nr:entries)} {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.2 "$black(cbanlist:$chan:$hand)"
+}
+if {$user == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.6 "$black(cbanlist:$chan:$hand)"
+}
+if {$userb == "1" && $handle != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user\($show_handle\)"
+}
+if {$userb == "1" && $handle == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user"
+}
+
+	set black(morebans:$chan:$hand) [expr $black(cbanlist:$chan:$hand) - $black(modul:nr:entries)]
+	for {set i 0} { $i < $black(modul:nr:entries) } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+	}
+	set black(showbans:$chan:$hand) [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)]
+if {$black(morebans:$chan:$hand) > 0} {
+	banlist:remain $nick $hand $black(morebans:$chan:$hand) $chan $chan1 $getmethod $gl $user $userb $host
+}
+	foreach tmr [utimers] {
+if {[string match -nocase "*banlist:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 60 [list banlist:unset:more $chan $hand]
+} else {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.2 "$black(cbanlist:$chan:$hand)"
+}
+if {$user == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.6 "$black(cbanlist:$chan:$hand)"
+}
+if {$userb == "1" && $handle != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user\($show_handle\)"
+}
+if {$userb == "1" && $handle == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user"
+}
+for {set i 0} { $i < $black(modul:nr:entries) } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
+	}
+}
+
+proc banlist:unset:more {chan hand} {
+	global black
+if {[info exists black(morebans:$chan:$hand)]} {
+	unset black(morebans:$chan:$hand)
+}
+if {[info exists black(cbanlist:$chan:$hand)]} {
+	unset black(cbanlist:$chan:$hand)
+	}
+if {[info exists black(showbans:$chan:$hand)]} {
+	unset black(showbans:$chan:$hand)
+	}
+}
+
+proc show:bans {nick host hand chan chan1 gl b userb} {
+	global black
+if {$b == ""} { return }
+	set never_expire 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$userb == "1"} {
+	set id [lindex [split $b] 0]
+	set mask [lindex [split $b] 1]
+	set expire [lindex [split $b] 2]
+	set created [lindex [split $b] 3]
+	set bywho [lindex [split $b] 4]
+	set breason [lrange [split $b] 5 end]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+} else {
+	set id [lindex [split $b] 1]
+	set mask [lindex [split $b] 3]
+	set expire [lindex [split $b] 5]
+	set bywho [lindex [split $b] 4]
+	set created [lindex [split $b] 6]
+	set breason [lrange [split $b] 9 end]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+}
+	set split_bywho [split $bywho ":"]
+	set handle [lindex $split_bywho 0]
+	set type [lindex $split_bywho 1]
+if {$type != ""} {
+	set type "BAN([join [encoding convertfrom utf-8 $type]])"
+	set bywho "$handle"
+} else { 
+	set bywho $handle 
+	set type "BAN"
+}
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+} else {
+	set expire $black(say.$getlang.banlist.13)
+	set never_expire 1
+}
+	set created [clock format $created -format %D-%H:%M:%S]
+
+if {$never_expire == "0"} {
+if {$userb == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.9 "$id $type $mask $created $expire $breason"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.5 "$id $type $mask $bywho $created $expire $breason"
+	} else {
+if {$userb == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.12 "$id $type $mask $created $expire $breason"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.11 "$id $type $mask $bywho $created $expire $breason"
+	}        
+}
+
+################################ w ####################################
+
+proc wpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set wnick [lindex [split $arg] 0]
+	set type 0
+	set handle [nick2hand $wnick]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $wnick] && [matchattr $hand nmo|MAO $wnick]} {
+	set chan "$wnick"
+	set wnick [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+if {$wnick != ""} {
+	w:process $wnick $nick $hand $host $chan $chan1 $type
+	} else { w:process $wnick $nick $hand $host $chan $chan1 $type }
+}
+
+proc w:process {wnick nick hand host chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "w" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set handle [nick2hand $wnick]
+	set show_wnick $wnick
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+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 {$wnick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "w"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "w"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "w"
+		}
+	}
+	return 0
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {![onchan $wnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_wnick
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[isbotnick $wnick]} {
+	return
+}
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+}
+	set getreason [setting:get $chan w-reason]
+if {$getreason == ""} { 
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getreason $black(say.$getlang.w.5)
+	set len [llength $getreason] 
+    set random [expr int(rand()*$len)] 
+    set getreason [lindex $getreason $random]
+}
+
+if {[setting:get $chan showhandle]} {
+	set reason "($hand) $getreason"
+	} else { set reason "$getreason"
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	set counts [getuser $hand XTRA KICKS($chan)]
+if {$counts == ""} { set counts 0 }
+	set counts [expr $counts + 1]
+	setuser $hand XTRA KICKS($chan) $counts
+	set counts [getuser $hand XTRA KICKS_TODAY($chan)]
+if {$counts == ""} { set counts 0 }
+	set counts [expr $counts + 1]
+	setuser $hand XTRA KICKS_TODAY($chan) $counts
+if {[setting:get $chan showcount]} {
+	set reason "$reason - $kcount -" 
+} else {
+	set reason "$reason" 
+}
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $wnick $reason"
+} else {
+	putserv "KICK $chan $wnick :$reason"
+}
+	puthelp "PRIVMSG $wnick :[black:color:set $hand $black(say.$getlang.w.6)]"
+}
+
+################################### k #################################
+
+proc k:process {knick nick hand host reason chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "k" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set handle [nick2hand $knick]
+	set found_host ""
+	set kick_host 0
+	set found_access ""
+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 {$knick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "k"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "k"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "k"
+		}
+	}
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+if {[string match -nocase "*!*" $knick]} {
+	set kick_host 1
+	set finduser [finduser $knick]
+foreach user [chanlist $chan] {
+	set gethand [nick2hand $user]
+	set gethost "$user![getchanhost $user $chan]"
+if {[string match -nocase $knick $gethost]} {
+if {[matchattr $gethand $black(exceptflags) $chan]} {
+	lappend found_access $user
+	continue
+		}	
+	lappend found_host $user
+		}
+	}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+}
+
+if {$found_access != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 k.2 $found_access
+	return
+}
+
+if {![onchan $knick $chan] && $kick_host == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $knick
+	return
+}
+
+if {$kick_host == "1"} {
+if {$found_host == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 k.1 none
+	return
+	}
+}
+
+if {[isbotnick $knick]} {
+	return
+}
+
+if {$reason == ""} {
+if {[setting:get $chan k-reason] != ""} {
+	set reason [join [setting:get $chan k-reason]]
+	}
+}
+if {$reason == ""} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set reason1 "$black(say.$getlang.k.5)"
+	set len [llength $reason1] 
+    set random [expr int(rand()*$len)] 
+    set reason1 [lindex $reason1 $random]
+ } else { set reason1 "$reason" }
+if {[setting:get $chan showhandle]} {
+	set reason "($hand) $reason1"
+	} else { set reason "$reason1" 
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	set counts [getuser $hand XTRA KICKS($chan)]
+if {$counts == ""} { set counts 0 }
+	set counts [expr $counts + 1]
+	setuser $hand XTRA KICKS($chan) $counts
+	set counts [getuser $hand XTRA KICKS_TODAY($chan)]
+if {$counts == ""} { set counts 0 }
+	set counts [expr $counts + 1]
+	setuser $hand XTRA KICKS_TODAY($chan) $counts
+if {[setting:get $chan showcount]} {
+	set reason "$reason - $kcount -" 
+} else {
+	set reason "$reason" 
+}
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+if {$found_host != ""} {
+foreach f $found_host {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $f $reason"
+	}
+} else {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $knick $reason"
+	}
+} else {
+if {$found_host != ""} {
+	foreach f $found_host {
+	putserv "KICK $chan $f :$reason"
+	}
+} else {
+	putserv "KICK $chan $knick :$reason"
+		}
+	}
+}
+
+proc kpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set knick [lindex [split $arg] 0]
+	set type 0
+	set reason [join [lrange [split $arg] 1 end]]
+	set handle [nick2hand $knick]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $knick] && [matchattr $hand nmo|MAO $knick]} {
+	set chan "$knick"
+	set knick [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+if {$knick != ""} {	
+	k:process $knick $nick $hand $host $reason $chan $chan1 $type
+	} else {k:process $knick $nick $hand $host $reason $chan $chan1 $type}
+}
+
+################################## BanSTATS ################################
+
+proc banstats:module {nick host hand chan arg} {
+global black lastbind
+	set next [lindex [split $arg] 0]
+	set cmd ""
+	set type 0
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {[string equal -nocase $next "reset"] && [matchattr $hand nmo|M $chan]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 1]
+	set cmd "total"
+}
+if {[regexp {^[&#]} $next] && [matchattr $hand nmo|MAO $next]} {
+	set chan $next
+	set next [lindex [split $arg] 1]
+if {[string equal -nocase $next "reset"] && [matchattr $hand nmo|M $next]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 2]
+	set cmd "total"
+	}
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+	}
+}
+	banstats:process $nick $host $hand $chan $chan1 $cmd $type $next
+}
+
+proc topbans:reset {chan} {
+	global black
+if {![validchan $chan]} { return }
+	foreach user [userlist] {
+	set counts [getuser $user XTRA BANS($chan)]
+	set counts_k [getuser $user XTRA KICKS($chan)]
+if {$counts == ""} { 
+	continue
+ } else {
+	setuser $user XTRA BANS($chan) 0
+	setuser $user XTRA BANS_TODAY($chan) 0
+	}
+if {$counts_k == ""} {
+	continue
+			} else {
+	setuser $user XTRA KICKS($chan) 0
+	setuser $user XTRA KICKS_TODAY($chan) 0
+		}
+	}
+		foreach user [userlist $chan] {
+	set counts [getuser $user XTRA BANS($chan)]
+	set counts_k [getuser $user XTRA KICKS($chan)]
+if {$counts == ""} { 
+	continue
+ } else {
+	setuser $user XTRA BANS($chan) 0
+	setuser $user XTRA BANS_TODAY($chan) 0
+	}
+if {$counts_k == ""} {
+	continue
+			} else {
+	setuser $user XTRA KICKS($chan) 0
+	setuser $user XTRA KICKS_TODAY($chan) 0
+		}
+	}
+}
+
+proc banstats:process {nick host hand chan chan1 cmd type next} {
+global botnick black
+	set counter 0
+	set cmd_status [btcmd:status $chan $hand "banstats" 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 {$chan == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "banstats"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "banstats"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "banstats"
+	}
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {$cmd == "total"} {
+	set bans "BANS($chan)"
+} else {
+	set bans "BANS_TODAY($chan)"
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/topbans_temp.$timestamp"
+if {[string equal -nocase $cmd "reset"]} {
+	set reset [topbans:reset $chan]
+	blacktools:tell $nick $host $hand $chan $chan1 topbans.8 none
+	return
+}
+	array set topbanslist [list]
+
+foreach u [userlist] {
+	set totalbans [getuser $u XTRA $bans]
+if {$totalbans != "" && $totalbans != "0"} {
+	lappend topbanslist($totalbans) $u
+	}
+}
+foreach u [userlist $chan] {
+if {[matchattr $u $black(localflags) $chan]} {
+	set totalbans [getuser $u XTRA $bans]
+if {$totalbans != "" && $totalbans != "0"} {
+	lappend topbanslist($totalbans) $u
+		}
+	}
+}
+	set tempwrite [open $temp w]
+foreach u [lsort -integer -decreasing [array names topbanslist]] {
+	set counter [expr $counter + 1]
+	puts $tempwrite "[join $topbanslist($u) ","] $u $counter"
+}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	
+if {$data == ""} {
+if {$cmd == "total"} {
+	blacktools:tell $nick $host $hand $chan $chan1 topbans.10 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topbans.14 none
+}
+	return
+}
+if {$cmd == "total"} {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "topbans:total" "0" $next
+} else {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "topbans" "0" $next
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 3041 - 0
BlackTools2.5/BlackTools/Commands/BT.LocalCmds.tcl

@@ -0,0 +1,3041 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   LOCAL CMDS 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                ##
+##					                               ##
+#########################################################################
+
+
+################################ Commands ###################################
+
+################################# disable ###################################
+
+proc reportpublic {nick host hand chan arg} {
+	global black
+	set type "0"
+	set what [lindex [split $arg] 0]
+	set message [join [lrange [split $arg] 1 end]]
+	set chan1 $chan
+if {[regexp {^[&#]} $what]} {
+	set chan $what
+	set what [lindex [split $arg] 1]
+	set message [join [lrange [split $arg] 2 end]]
+}
+if {[matchattr $hand mno|MAO $chan]} {
+	return
+}
+	report:process $nick $host $hand $chan $chan1 $type $what $message
+}
+
+proc report:process {nick host hand chan chan1 type what message} {
+	global black
+if {[setting:get $chan reportnick]} {
+	set cmd_status [btcmd:status $chan $hand "report" 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 {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "report"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "report"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "report"
+}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![botisop $chan]} {
+	return
+}
+
+if {[isbotnick $what]} {
+	return
+}
+
+if {[string equal -nocase $what $nick]} {
+	blacktools:tell $nick $host $hand $chan $chan1 report.5 none
+	return
+}
+	set number [scan $black(antiflood:cmd) %\[^:\]]
+	set timer [scan $black(antiflood:cmd) %*\[^:\]:%s]
+	
+if {[info exists black(flood:report:$host)]} {
+	return
+}
+
+foreach tmr [utimers] {
+if {[string match "*black(floodreport:$host:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(floodreport:$host:$chan)]} { 
+	set black(floodreport:$host:$chan) 0 
+}
+	incr black(floodreport:$host:$chan)
+	utimer $timer [list unset black(floodreport:$host:$chan)]
+
+if {$black(floodreport:$host:$chan) == "$number"} {
+	blacktools:tell $nick $host $hand $chan $chan1 report.1 "30 report"
+	set black(flood:report:$host) 1
+	utimer 30 [list unset black(flood:report:$host)]
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[onchan $what $chan]} {
+	set replace(%msg.1%) $what
+	set replace(%msg.2%) $nick
+	set replace(%msg.8%) $message
+if {$message != ""} {
+	set output [string map [array get replace] $black(say.$getlang.report.2)]
+} else {
+	set output [string map [array get replace] $black(say.$getlang.report.3)]
+}
+	putserv "NOTICE @$chan :$output"
+	blacktools:tell $nick $host $hand $chan $chan1 report.4 none
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $what
+		}
+	}
+}
+
+proc disablepublic {nick host hand chan arg} {
+	global black lastbind
+	set what [lindex [split $arg] 0]
+	set user [lindex [split $arg] 1]
+	set chan1 "$chan"
+	set type "0"
+if {[regexp {^[&#]} $what] && [matchattr $hand nmo|M $what]} {
+	set chan "$what"
+	set what [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	disable:process $nick $host $hand $chan $chan1 $type $what $user
+}
+
+proc disable:process {nick host hand chan chan1 type what user} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "disable" 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 {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "disable"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "disable"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "disable"
+}
+	return
+}
+	set local_cmds "h o v ho man version mode cycle say act i activ t myset b black stick dr bot n id spam bw vr gag sb banlist banstats k w anunt bt badchan idle limit seen clonescan securemode private guestnick greet leave topic next helped noidle skip topwords q note report"
+
+if {[matchattr $hand -|M $chan] && [lsearch -exact $what $local_cmds] < 0} {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+	return
+}
+
+if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
+	set return_cmd [btcmd:global:set $hand $what 1]
+		switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.6 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.7 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
+		}
+	3 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+		}
+	}
+	return
+}
+
+if {$user != ""} {
+	btcmd:set:user $nick $host $hand $chan $chan1 $user $what "1"
+	return
+}
+	set return_cmd [btcmd:set $chan $hand $what 1]
+	
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.1 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.2 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
+}
+	3 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+		}
+	}
+}
+
+################################# enable ####################################
+
+proc enablepublic {nick host hand chan arg} {
+	global black lastbind
+	set what [lindex [split $arg] 0]
+	set user [lindex [split $arg] 1]
+	set chan1 "$chan"
+	set type "0"
+if {[regexp {^[&#]} $what] && [matchattr $hand nmo|M $what]} {
+	set chan "$what"
+	set what [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	enable:process $nick $host $hand $chan $chan1 $type $what $user
+}
+
+proc enable:process {nick host hand chan chan1 type what user} {
+	global black
+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 {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "enable"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "enable"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "enable"
+}
+	return
+}
+
+if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
+	set return_cmd [btcmd:global:set $hand $what 0]
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.7 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.6 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
+		}
+	}
+	return
+}
+
+if {$user != ""} {
+	btcmd:set:user $nick $host $hand $chan $chan1 $user $what "0"
+	return
+}
+	set gl_check [btcmd:gl:status $what]
+if {$gl_check == "1" && $type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.8 $what
+}
+
+if {[matchattr $hand -|M $chan]} {
+	set access "MANAGER"
+} elseif {[matchattr $hand n]} {
+	set access "BOSS"
+} elseif {[matchattr $hand m]} {
+	set access "OWNER"
+} elseif {[matchattr $hand o]} {
+	set access "MASTER"
+} 
+
+	set disable_level [btcmd:getlevel $chan $what]
+
+if {$access == "MANAGER" && $disable_level == "OWNER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "OWNER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MANAGER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MANAGER" && $disable_level == "MASTER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MASTER" && $disable_level == "OWNER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+
+if {$access == "MASTER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+	set return_cmd [btcmd:set $chan $hand $what 0]
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.2 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.1 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
+}
+	}
+}
+
+################################### t #################################
+
+proc tpublic {nick host hand chan arg} {
+global black lastbind
+	set topics [join [lrange [split $arg] 0 end]]
+	set c [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|MAO $c]} {
+	set chan "$c"
+	set topics [join [lrange [split $arg] 1 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	t:process $nick $host $hand $chan $chan1 $topics $type
+}
+
+proc t:process {nick host hand chan chan1 topics type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "t" 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 {$topics == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "t"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "t"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "t"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[setting:get $chan showhandle]} {
+	set topics "($hand) $topics"
+	} else { set topics "$topics" 
+}
+
+if {[setting:get $chan xonly]} {
+	if {![botisop $chan]} {
+	putserv "PRIVMSG $black(chanserv) :topic $chan $topics"
+	return
+	}
+}
+
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	putserv "TOPIC $chan :$topics"
+}
+
+################################# i ###################################
+
+proc ipublic {nick host hand chan arg} {
+global botnick black lastbind
+	set type 0
+	set chan1 "$chan"
+	set inick [lindex [split $arg] 0]
+	set c [lindex [split $arg] 0]
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AVOM $c]} {
+	set chan "$c"
+	set inick [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	i:process $nick $host $hand $chan $chan1 $inick $type
+}
+
+proc i:process {nick host hand chan chan1 inick type} {
+global botnick black
+	set show_inick $inick
+	set cmd_status [btcmd:status $chan $hand "i" 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 {$inick == "" && $chan != $chan1} {
+	set inick $nick
+}
+
+if {$inick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "i"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "i"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "i"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	putserv "USERHOST :$inick"
+	bind RAW - 302 i:online:check
+	set ::getnick $nick
+	set ::hand $hand
+	set ::host $host
+	set ::chan $chan
+	set ::chan1 $chan1
+	set ::type $type
+	set ::inick $inick
+	set ::show_inick $show_inick
+}
+
+proc i:online:check {from keyword arguments } {
+	global black
+	set anick $::getnick
+	set hand $::hand
+	set host $::host
+	set chan $::chan
+	set chan1 $::chan1
+	set inick $::inick
+	set show_inick $::show_inick 
+	
+set hostname [lindex [split $arguments] 1]
+if {[regexp {\+} $hostname]} {
+	set split_host [split $hostname "+"]
+} else {
+	set split_host [split $hostname "-"]
+}
+	set mask [lindex $split_host 1]
+	set getnick [string map {
+			"=" ""
+			":" ""
+			} [lindex $split_host 0]]
+if {$getnick != ""} {
+	set replace(%nick%) $anick
+	set replace(%chan%) $chan
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getmsg $black(say.$getlang.i.7)
+if {[info exists black(say.$getlang.i.7)]} {
+	set imessage [string map [array get replace] $getmsg]
+}
+
+if {$inick != ""} {
+if {[onchan $inick $chan]} {
+	blacktools:tell $anick $host $hand $chan $chan1 i.1 $show_inick
+	return
+}
+	putserv "INVITE $inick $chan"
+	putserv "PRIVMSG $inick :$imessage"
+	blacktools:tell $anick $host $hand $chan $chan1 i.2 $show_inick
+		}
+	} else {
+	blacktools:tell $anick $host $hand $chan $chan1 gl.notonline "$inick"
+}
+	check:if:bind "i:online:check" "302"
+}
+
+############################### purge ###############################
+
+proc purgepublic {nick host hand chan arg} {
+global botnick black lastbind
+	set c [lindex [split $arg] 0]
+	set reason [join [lrange [split $arg] 0 end]]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|- $chan]} {
+	set chan "$c"
+	set reason [join [lrange [split $arg] 1 end]]
+}
+if {$reason == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
+	return
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	purge:process $nick $host $hand $chan $chan1 $reason
+}
+
+proc purge:process {nick host hand chan chan1 reason} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "purge" 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 {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {[string equal -nocase $chan $black(homechan)]} {
+	blacktools:tell:prv $nick $host $hand delchan.5 $chan
+	return
+	}
+}
+	channel remove $chan
+	delchan:all $chan
+	putserv "PART $chan :PURGED by $hand :$reason"
+}
+
+################################### v #################################
+
+
+proc vpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set c [lindex [split $arg] 0]
+	set arg [split $arg]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|VAOM $c]} {
+	set chan "$c"
+	set arg [lrange [split $arg] 1 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	v:process $nick $host $hand $chan $chan1 $arg
+}
+
+proc v:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+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 cmd_status [btcmd:status $chan $hand "v" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none	
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {$arg == ""} {
+	set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	set noxonly 0
+	set userlist ""
+	foreach voicenick [chanlist $chan] {
+if {[isvoice $voicenick $chan]} { continue }
+if {[isbotnick $voicenick]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan +v $voicenick	
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {![isvoice $getuser $chan]} {
+	lappend userlist $getuser
+			}
+		}
+		putserv "PRIVMSG $black(chanserv) :voice $chan [join $userlist]"
+	}	
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	set noxonly 0
+	set userlist ""
+	foreach voicenick [chanlist $chan] {
+if {[isbotnick $voicenick]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan -v $voicenick	
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {[isvoice $getuser $chan]} {
+	lappend userlist $getuser
+			}
+		}
+		putserv "PRIVMSG $black(chanserv) :devoice $chan [join $userlist]"
+	}	
+	return
+}
+	set voicelist ""
+	set devoicelist ""
+foreach voicenick [split $arg] {
+if {[isbotnick $voicenick]} { continue }
+if {[isvoice [join $voicenick] $chan]} {
+if {$xban == "0"} {
+	pushmode $chan -v [join $voicenick]
+} else { lappend devoicelist $voicenick }
+} else {
+if {$xban == "0"} {
+	pushmode $chan +v [join $voicenick]
+			} else { lappend voicelist $voicenick }
+		}
+	}
+if {$devoicelist != ""} {
+	putserv "PRIVMSG $black(chanserv) :devoice $chan [join $devoicelist]"
+}
+if {$voicelist != ""} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan [join $voicelist]"
+	}
+}
+
+################################## ho #################################
+
+proc hopublic {nick host hand chan arg} {
+global botnick black lastbind
+	set c [lindex [split $arg] 0]
+	set arg [split $arg]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AOM $c]} {
+	set chan "$c"
+	set arg [lrange [split $arg] 1 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	ho:process $nick $host $hand $chan $chan1 $arg
+}
+
+proc ho:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+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 cmd_status [btcmd:status $chan $hand "ho" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return
+}
+
+if {$arg == ""} {
+set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	foreach hopnick [chanlist $chan] {
+if {[ishalfop $hopnick $chan]} { continue }
+if {$xban == "0"} {
+	pushmode $chan +h $hopnick
+		} else { return }
+	}
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	foreach hopnick [chanlist $chan] {
+if {![ishalfop $hopnick $chan]} { continue }
+if {[isbotnick $hopnick]} { continue }
+if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 massdeop.429 $black(chanserv)
+	return
+		}
+if {$xban == "0"} {
+	pushmode $chan -h $hopnick	
+		} else { return }
+	}
+	return
+}
+
+foreach hopnick [split $arg] {
+if {[isbotnick $hopnick]} { continue }
+if {[ishalfop $hopnick $chan]} {
+if {$xban == "0"} {
+	pushmode $chan -h $hopnick
+} else { return }
+} else {
+if {![setting:get $chan xonly]} {
+pushmode $chan +h $hopnick
+			} else { return }
+		}
+	}
+}
+
+################################## o ##################################
+
+proc opublic {nick host hand chan arg} {
+global botnick black lastbind
+	set c [lindex [split $arg] 0]
+	set arg [split $arg]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AOM $c]} {
+	set chan "$c"
+	set arg [lrange [split $arg] 1 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	o:process $nick $host $hand $chan $chan1 $arg
+}
+
+
+proc o:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+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 cmd_status [btcmd:status $chan $hand "o" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return
+}
+
+if {$arg == ""} {
+set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	set userlist ""
+	set noxonly 0
+	foreach opnick [chanlist $chan] {
+if {[isop $opnick $chan]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan +o $opnick
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {![isop $getuser $chan]} {
+	lappend userlist $getuser
+		}
+	}
+		putserv "PRIVMSG $black(chanserv) :op $chan [join $userlist]"
+	}	
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	set userlist ""
+	set noxonly 0
+	foreach opnick [chanlist $chan] {
+if {![isop $opnick $chan]} { continue }
+if {[isbotnick $opnick]} { continue }
+if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 o.1 $black(chanserv)
+	return
+}
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan -o $opnick	
+	}
+}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {[isop $getuser $chan]} {
+	lappend userlist $getuser
+		}
+	}
+		putserv "PRIVMSG $black(chanserv) :deop $chan [join $userlist]"
+	}
+	return
+}
+	set oplist ""
+	set deoplist ""
+foreach opnick [split $arg] {
+if {[isbotnick $opnick]} { continue }
+if {[isop [join $opnick] $chan]} {
+if {$xban == "0"} {
+pushmode $chan -o [join $opnick]
+} else { lappend deoplist $opnick } 
+} else {
+if {$xban == "0"} {
+pushmode $chan +o [join $opnick]
+			} else { lappend oplist $opnick }
+		}
+	}
+if {$deoplist != ""} {
+	putserv "PRIVMSG $black(chanserv) :deop $chan [join $deoplist]"
+}
+if {$oplist != ""} {
+	putserv "PRIVMSG $black(chanserv) :op $chan [join $oplist]"
+	}
+}
+
+################################ say ##################################
+
+proc saypublic {nick host hand chan arg} {
+global black lastbind
+	set text [join [lrange [split $arg] 0 end]]
+	set c [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|MA $c]} {
+	set chan "$c"
+	set text [join [lrange [split $arg] 1 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	say:process $nick $host $hand $chan $chan1 $text $type
+}
+
+proc say:process {nick host hand chan chan1 text type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "say" 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 {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "say"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "say"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "say"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	putserv "PRIVMSG $chan :$text"
+}
+
+################################ act ##################################
+
+proc actpublic {nick host hand chan arg} {
+global black lastbind
+	set text [join [lrange [split $arg] 0 end]]
+	set c [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AM $c]} {
+	set chan "$c"
+	set text [join [lrange [split $arg] 1 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	act:process $nick $host $hand $chan $chan1 $text $type
+}
+
+proc act:process {nick host hand chan chan1 text type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "act" 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 {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "act"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "act"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "act"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	putserv "PRIVMSG $chan :\001ACTION $text\001"
+}
+
+
+
+############################## version ################################
+
+proc versionpublic {nick host hand chan arg} {
+global botnick black lastbind
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	version:process $nick $host $hand $chan $chan1
+}
+
+proc version:process {nick host hand chan chan1} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "version" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 version.1 $black(vers)
+}
+
+############################### cycle #################################
+
+proc cycle:process {nick host hand chan chan1 reason} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "cycle" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+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.novalidchan none
+return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[regexp {^[0-9]} $reason] && [matchattr $hand nmo|M $chan]} {
+	set replace(%msg.1%) $reason
+	putserv "PART $chan :[string map [array get replace] $black(say.$getlang.cycle.2)]"
+	channel set $chan +inactive
+	utimer $reason [list channel set $chan -inactive]
+	return
+}
+
+if {$reason == ""} { 
+	set reason "$black(say.$getlang.cycle.1)" 
+	set len [llength $reason] 
+    set random [expr int(rand()*$len)] 
+    set reason [lindex $reason $random] 
+}
+	putserv "PART $chan :$reason"
+	putserv "JOIN $chan"
+}
+
+proc cyclepublic {nick host hand chan arg} {
+global black lastbind
+	set reason [join [lrange [split $arg] 0 end]]	
+	set c [lindex [split $arg] 0]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|OMA $c]} {
+	set chan "$c"
+	set reason [join [lrange [split $arg] 1 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	cycle:process $nick $host $hand $chan $chan1 $reason
+}
+
+################################### mode ######################################
+
+proc modepublic {nick host hand chan arg} {
+global black lastbind
+	set modes [lrange [split $arg] 0 end]
+	set chan1 "$chan"
+	set type 0
+if {[regexp {^[&#]} $modes] && [matchattr $hand nmo|- $chan]} {
+	set chan "$modes"
+	set modes [lrange [split $arg] 1 end]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	mode:process $nick $host $hand $chan $chan1 $modes $type
+}
+
+proc mode:process {nick host hand chan chan1 modes type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "mode" 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 {$modes == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {![regexp {^[+ -]} $modes]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
+		}
+	}
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 mode.6 $modes
+	putserv "MODE $chan $modes"
+	channel set $chan chanmode $modes
+}
+
+################################## myset #############################
+
+proc mysetpublic {nick host hand chan arg} {
+global black lastbind
+	set type 0
+	set chan1 "$chan"	
+	set flags [lindex [split $arg] 0]
+	set typez [lindex [split $arg] 1]
+	set chan2 [lindex [split $arg] 2]
+	set arg [join [lrange [split $arg] 1 end]]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	myset:process $nick $host $hand $chan $chan1 $flags $typez $type $chan2 $arg
+}
+
+proc myset:process {nick host hand chan chan1 flags typez type chan2 arg} {
+global black
+	set cmd_status [btcmd:status $chan $hand "myset" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	set show_greet $arg
+	set show_typez $typez
+if {$flags == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return 0
+}
+switch -exact -- [string tolower $flags] {
+lang {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA OUTPUT_LANG
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA OUTPUT_LANG]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![file exists "$black(dirname)/BlackTools/lang/BT.[string tolower $typez].lang.tcl"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.5 \002[string tolower $typez]\002
+	return
+}
+	setuser $hand XTRA OUTPUT_LANG $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.1 $typez
+	return
+}
+addhost {
+if {[matchattr $hand mno]} {
+	set found_it 0
+	set found_user ""
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+
+foreach u [userlist] {
+	set h [getuser $u hosts]
+foreach hs $h {
+if {[string match -nocase $hs $typez]} {
+	set found_it 1
+	set found_user $u
+		}
+	}
+}
+if {$found_it == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $typez"
+	return
+}
+	setuser $hand HOSTS $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.7 $typez
+	}
+}
+
+delhost {
+if {[matchattr $hand mno]} {
+	set found_it 0
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set h [getuser $hand hosts]
+foreach hs $h {
+if {[string match -nocase $hs $typez]} {
+	set found_it 1
+	}
+}
+
+if {$found_it == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.9 $typez
+	return
+}
+	delhost $hand $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.8 $typez
+	}
+}
+
+greet {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA INFO]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA INFO
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+	setuser $hand INFO $arg
+	blacktools:tell $nick $host $hand $chan $chan1 myset.6 $show_greet
+}
+
+auto {
+if {[matchattr $hand mno|M $chan]} {
+if {[regexp {^[&#]} $chan2]} {
+	set actchan $chan2
+} else {
+if {[string equal -nocase $chan2 "global"]} {
+	set actchan "global"
+} else {
+	set actchan $chan
+	}
+}
+if {![regexp {^[+ -]} $typez]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set verify [string trim $typez {"+","-"}]
+
+if {![string equal -nocase $verify "o"] && ![string equal -nocase $verify "v"]} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	return
+}
+if {[matchattr $hand mno] && [string equal -nocase "$actchan" "global"]} {
+if {[string match -nocase $typez "+o"]} {
+if {[matchattr $hand g]} {
+	chattr $hand -g
+}
+	chattr $hand +a
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.6 $hand
+}
+if {[string match -nocase $typez "-o"]} {
+	chattr $hand -a 
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.14 $hand
+}
+if {[string match -nocase $typez "+v"]} {
+if {[matchattr $hand a]} {
+	chattr $hand -a
+}
+	chattr $hand +g
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.7 $hand
+}
+if {[string match -nocase $typez "-v"]} {
+	chattr $hand -g
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.15 $hand
+	}
+	return
+}
+if {[string match -nocase $typez "+o"]} {
+if {[matchattr $hand -|g $actchan]} {
+	chattr $hand -|-g $actchan
+}
+	chattr $hand -|a $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.8 $hand
+}
+if {[string match -nocase $typez "-o"]} {
+	chattr $hand -|-a $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.16 $hand
+}
+if {[string match -nocase $typez "+v"]} {
+if {[matchattr $hand -|a $actchan]} {
+	chattr $hand -|-a $actchan
+}
+	chattr $hand -|g $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.9 $hand
+}
+if {[string match -nocase $typez "-v"]} {
+	chattr $hand -|-g $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.17 $hand
+		}
+	}
+}
+
+handle {
+if {[matchattr $hand mno|M $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+	}
+if {[string equal -nocase $typez "show"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $hand"
+	return
+}
+if {[validuser $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
+return
+}	
+	blacktools:tell $nick $host $hand $chan $chan1 myset.4 "$show_typez"
+	chhandle $hand $typez
+	}
+}
+
+noteexpire {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA NOTE_EXPIRE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA NOTE_EXPIRE]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![regexp {^[0-9]} $typez]} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set return_time [time_return_minute $typez]
+if {$return_time == "-1"} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	setuser $hand XTRA NOTE_EXPIRE [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.13 $typez
+}
+
+
+autoinvite {
+	switch [string tolower $typez] {
+	
+	show {
+	set get [getuser $hand XTRA AUTOINVITE]
+if {$get == "1"} { set get "on"} else { set get "off" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+}
+
+	reset {
+	setuser $hand XTRA AUTOINVITE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+}
+
+	on {
+	setuser $hand XTRA AUTOINVITE 1
+	blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
+}
+	off {
+	setuser $hand XTRA AUTOINVITE 0
+	blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
+		}
+	}
+}
+
+output {
+	switch [string tolower $typez] {
+	show {
+	set get [getuser $hand XTRA OUTPUT_TYPE]
+if {$get == "0"} { set get "NOTICE" } elseif {$get == "1"} { set get "CHAN" } elseif {$get == "2"} { set get "MSG" } else { set get "NOTICE"}
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+}
+
+	reset {
+	setuser $hand XTRA OUTPUT_TYPE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+}
+	notice {
+	setuser $hand XTRA OUTPUT_TYPE 0
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+}
+	chan {
+	setuser $hand XTRA OUTPUT_TYPE 1
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+}
+	msg {
+	setuser $hand XTRA OUTPUT_TYPE 2
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+		}
+	}
+}
+
+colors {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA OUTPUT_COLORS
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA OUTPUT_COLORS]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+	set validcolors "bold underline red blue green yellow orange cyan grey brown purple pink black"
+	set notvalid 0
+if {[llength $arg] > 4 || [llength $arg] < 4} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.14 none
+	return
+		}
+foreach color $arg {
+if {[lsearch [string tolower $color] $validcolors] < -1} {
+	set notvalid 1
+	}
+}
+if {$notvalid == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.15 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 myset.16 $show_greet
+	setuser $hand XTRA OUTPUT_COLORS [string tolower $arg]
+	}
+}
+
+mychan {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA MYCHAN
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA MYCHAN]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![regexp {^[&#]} $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+		}
+if {![validchan $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+		}
+	setuser $hand XTRA MYCHAN [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.10 $typez
+	}
+}
+
+mychar {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA MYCHAR
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA MYCHAR]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+if {[lsearch -exact $black(cmdchar) $typez] < 0} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.17 $black(cmdchar)
+	return	
+}
+	setuser $hand XTRA MYCHAR [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.18 $typez
+	}
+}
+
+default {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+				}
+			}
+		}
+	}
+}
+
+################################# set #################################
+
+proc setpublic {nick host hand chan arg} {
+global black lastbind
+	set flags [lindex [split $arg] 0]
+	set type [join [lrange [split $arg] 1 end]]
+	set chan1 "$chan"
+	set type1 0
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {[regexp {^[&#]} $flags] && [matchattr $hand nmo|M $chan]} {
+	set chan "$flags"
+	set flags [lindex [split $arg] 1]
+	set type [join [lrange [split $arg] 2 end]]
+}
+if {[string equal -nocase $flags "global"] && [matchattr $hand nm]} {
+	set flags [lindex [split $arg] 1]
+	set type [join [lrange [split $arg] 2 end]]
+foreach c [channels] {
+	set:process $nick $host $hand $c $chan1 $flags $type $type1
+			}
+		return
+	}
+	set:process $nick $host $hand $chan $chan1 $flags $type $type1
+}
+
+proc set:process {nick host hand chan chan1 flags type type1} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "set" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set flags [string tolower $flags]
+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 choption [check_option $nick $host $hand $chan $chan1 $flags $type1 "$flags"]
+if {$choption == "0"} { return }
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {[regexp {^[+-]} $flags]} {
+	set black_setting [setting:exists $flags]
+if {$black_setting != "0"} {
+	set iflag [string map {"+" ""
+							"-" ""} $flags]
+if {[matchattr $hand mo] && ![matchattr $hand n] && [string equal -nocase "$iflag" "invisible"]} {
+		blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+		return
+}
+	set status [setting:status $chan $flags ""]
+	switch $status {
+	0 {
+if {[regexp {^[-]} $flags]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
+	return
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
+	}
+	1 {
+if {[regexp {^[+]} $flags]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
+	return
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
+	}
+}
+	setting:set $chan $flags ""
+if {[string equal -nocase "+anunt" $flags]} {
+	foreach tmr [timers] {
+if {[string match "*anuntpublic:show*" [join [lindex $tmr 1]]]} {
+	return
+		}	
+	}
+	set return_time [time_return_minute $black(anunttime)]
+	timer $return_time anuntpublic:show
+}
+
+if {[string equal -nocase "-voiceme"]} {
+if {[info exists black(voiceme:stat:$chan)]} {
+	unset black(voiceme:stat:$chan)
+	}
+}
+
+if {[string equal -nocase "+quoteofday" $flags]} {
+	foreach tmr [timers] {
+if {[string match "*quote:announce*" [join [lindex $tmr 1]]]} {
+	return
+		}	
+	}
+	set return_time [time_return_minute $black(quote:msgtime)]
+	timer $return_time quote:announce
+}
+
+if {[string equal -nocase "+clonescan" $flags]} {
+foreach tmr [timers] {
+if {[string match "*clonescan:timer*" [join [lindex $tmr 1]]]} {
+	return
+		}	
+	}
+	set clonescan_time [time_return_minute $black(clonescantime)]
+	timer $clonescan_time clonescan:timer
+}
+
+if {[string equal -nocase "+antibadchan" $flags]} {
+foreach tmr [timers] {
+if {[string match "*badchan:scantimer*" [join [lindex $tmr 1]]]} {
+	return
+	}	 
+}
+	set bscan_time [time_return_minute $black(badchan:scantime)]
+	timer $bscan_time badchan:scantimer
+}
+
+if {[string equal -nocase "+idleop" $flags] || [string equal -nocase "+idlevoice" $flags]} {
+	foreach tmr [timers] {
+if {[string match "*antidle:module*" [join [lindex $tmr 1]]]} {
+	return
+	}
+}
+	set idle_time [time_return_minute $black(idleinterval)]
+	timer $idle_time antidle:module
+}
+
+if {[string equal -nocase "+antispam" $flags]} {
+foreach tmr [timers] {
+if {[string match "*antispam:protect:cycle*" [join [lindex $tmr 1]]]} {
+	return
+	}
+}
+	set antispam_time [time_return_minute $black(spamcycle)]
+	timer $antispam_time antispam:protect:cycle
+}
+
+if {[string equal -nocase "+securemode" $flags]} {
+	putserv "MODE $chan :+Dm"
+foreach tmr [utimers] {
+if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
+	return
+	}
+}
+	set replace(%chan%) $chan1
+	putserv "PRIVMSG $chan1 :[string map [array get replace] $black(say.$getlang.securemode.10)]"
+	utimer 30 [list securemode:timer]
+}
+
+if {[string equal -nocase "-securemode" $flags]} {
+	set found_list 0
+	foreach tmr [utimers] {
+if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
+	putserv "MODE $chan :-Dm"
+	set replace(%chan%) $chan1
+	putserv "PRIVMSG $chan1 :[string map [array get replace] $black(say.$getlang.securemode.11)]"
+if {[info exists black(secure:$chan:list)]} {
+	set found_list 1
+if {[llength $black(secure:$chan:list)] > 0} {
+	foreach entry $black(secure:$chan:list) {
+	putserv "MODE $chan +v $entry"
+if {[info exists black(securecode:$entry:$chan)]} {
+	unset black(securecode:$entry:$chan)
+						}
+					}
+				}
+			}
+		}
+	}
+if {$found_list == "1"} {
+if {[info exists black(secure:$chan:list)]} {
+	unset black(secure:$chan:list)
+		}
+	}
+}
+
+if {[string equal -nocase "+limit" $flags]} {
+foreach tmr [timers] {
+if {[string match "*limit:timer*" [join [lindex $tmr 1]]]} {
+	return
+		}	 
+	}
+	timer 1 limit:timer
+}
+
+if {[string equal -nocase "+voiceonmsg" $flags]} {
+foreach tmr [timers] {
+if {[string match "*voiceonmsg:timer*" [join [lindex $tmr 1]]]} {
+	return
+		}	 
+	}
+	timer 1 voiceonmsg:timer
+}
+	return
+}
+	set why [catch {channel set $chan $flags} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+	return
+} else {
+	channel set $chan $flags ; blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags	
+}
+
+} else {
+	set black_setting [setting:exists $flags]
+	set int_set [catch {channel set $chan $flags $type} error]
+if {$black_setting == "0" && $int_set == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+}
+	set choption 1
+	set checkflags $flags
+if {$choption == "0"} { return }
+if {[string equal -nocase "leave-method" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "leave"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "greet-method" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "greet"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "guestnick-msgmethod" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type] && ![string equal -nocase "chan" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "guestnick"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {![matchattr $hand mn|- $chan]} {
+if {[string match -nocase "backchan" $flags]} {
+	return
+	}
+}
+
+if {[string equal -nocase "xbanlevel" $flags]} {
+if {![regexp {^[0-9]} $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+if {$type < 75 || $type > 500} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase "vprotect" $flags]} {
+if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "vprotect"]
+if {$choption == "0"} { return }
+	}
+} 
+
+if {[string equal -nocase "oprotect" $flags]} {
+if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "oprotect"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "clonescan-action" $flags]} {
+if {![string equal -nocase "message" $type] && ![string equal -nocase "ban" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "clonescan"]
+if {$choption == "0"} { return }
+	}	
+}
+
+if {[string equal -nocase "lang" $flags]} {
+if {![file exists "$black(dirname)/BlackTools/lang/BlackTools.[string tolower $type].lang.tcl"]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "language"]
+if {$choption == "0"} { return }
+	}
+}
+	set black_setting [setting:exists $flags]
+if {$black_setting == "2"} {
+	set status [setting:status $chan $flags $type]
+if {$status != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.3 "$flags $type"
+	return
+}
+	set split_flags [split $flags "-"]
+	set flags_2 [lindex $split_flags 1]
+if {[string equal -nocase $flags_2 "banmethod"] || [string equal -nocase $flags "banmethod"]} {
+	set validnum [check:validnum $type "banmethod" $type1 $nick $host $hand $chan $chan1]
+	if {$validnum == "0"} { return }
+}
+
+if {[string equal -nocase $flags_2 "bantime"] || [string equal -nocase $flags "banmethod"]} {
+	set return_time [time_return_minute $type]
+if {$return_time == "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase $flags_2 "banmask"] || [string equal -nocase $flags "banmask"]} {
+	set validnum [check:validnum2 $type "banmask" $type1 $nick $host $hand $chan $chan1]
+	if {$validnum == "0"} { return }
+}
+	set encoded [join [encoding convertto utf-8 $type]]
+	setting:set $chan $flags $encoded
+	blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type"
+	return
+}
+	set why [catch {channel set $chan $flags $type} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+} else {
+if {[string equal -nocase $flags "backchan"]} {
+if {![validchan $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.12 $type
+	return
+	}	
+}
+	channel set $chan $flags $type ; blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type" 
+		}
+	}
+}
+
+################################# unset #######################################
+
+proc unsetpublic {nick host hand chan arg} {
+	global black lastbind
+	set setting [lindex [split $arg] 0]
+	set chan1 $chan
+	set type 0
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {[regexp {^[&#]} $setting] && [matchattr $hand nmo|M $setting]} {
+	set chan $setting
+	set setting [lindex [split $arg] 1]
+}
+if {[string equal -nocase $setting "global"] && [matchattr $hand nm]} {
+	set setting [lindex [split $arg] 1]
+foreach c [channels] {
+	unset:process $nick $host $hand $c $chan1 $setting $type
+			}
+		return
+	}
+	unset:process $nick $host $hand $chan $chan1 $setting $type
+}
+
+proc unset:process {nick host hand chan chan1 setting type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "unset" 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 {$setting == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "unset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "unset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "unset"
+		}
+	}
+	return
+}
+	
+if {[string equal -nocase $setting "flag"]} {
+foreach f $black(extra_flag) {
+	unset:all $chan $f
+}
+	blacktools:tell $nick $host $hand $chan $chan1 unset.4 none
+	return
+}
+
+if {[string equal -nocase $setting "str"]} {
+foreach f $black(extra_str) {
+	unset:all $chan $f
+}
+	blacktools:tell $nick $host $hand $chan $chan1 unset.5 none
+	return
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/extra_temp.$timestamp"
+	set black_setting [setting:exists $setting]
+if {$black_setting != "0"} {
+	set status [setting:get $chan $setting]
+if {$status != "" && $status != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.2 $setting
+	set file [open $black(extra_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {$black_setting == "1"} {
+	set comp [string map {
+	"+" ""
+	"-" ""} $comp]
+}
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(extra_file)
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.3 $setting 
+	}
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
+	}		
+}
+
+proc unset:all {chan setting} {
+	global black
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/extra_temp.$timestamp"
+	set file [open $black(extra_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {[regexp {^[+-]} $comp]} {
+	set comp [string map {
+	"+" ""
+	"-" ""} $comp]
+}
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {	
+		continue
+		} else {
+	puts $tempwrite $line
+		}	
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(extra_file)
+}
+
+proc check:validnum {num flags type1 nick host hand chan chan1} {
+	global black
+	if {![regexp {^[0-9]} $num]} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+if {($num < 1) || ($num > 7)} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+	return 1
+}
+
+proc check:validnum2 {num flags type1 nick host hand chan chan1} {
+	global black
+	if {![regexp {^[0-9]} $num]} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+if {($num < 1) || ($num > 5)} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+	return 1
+}
+
+proc ignorepublic {nick host hand chan arg} {
+global black lastbind
+	set chan1 "$chan"
+	set type 0
+	set what [lindex [split $arg] 0]
+	set mask [lindex [split $arg] 1]
+	set time [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+if {![regexp {^[0-9]} $time]} {
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason $type
+}
+
+
+proc ignore:process {nick host hand chan chan1 what mask time reason type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "ignore" 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 finduser [finduser $mask]
+	set show_mask $mask
+if {[matchattr $finduser mno] && [matchattr $hand -|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
+	return
+}
+if {[matchattr $finduser n] && [matchattr $hand m]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
+	return
+}
+if {[matchattr $finduser m] && [matchattr $hand o]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
+	return
+}
+if {[matchattr $finduser n] && [matchattr $hand o]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
+	return
+}
+
+if {$what == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+}
+switch -exact -- [string tolower $what] {
+
+list {
+if {[llength [ignorelist]] == "0"} { blacktools:tell $nick $host $hand $chan $chan1 ignore.3 none
+	return
+}
+
+foreach ig [ignorelist] {
+	set hostig [lindex $ig 0]
+	set byig [lindex $ig 4]
+	set bytime [lindex $ig 2]
+	set reasig [lindex $ig 1]
+if {$bytime != "0"} {
+	set bytime [clock format $bytime -format %D-%H:%M:%S]
+} else { set bytime "-"}
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.4 "$hostig $byig $bytime [join $reasig]" 
+	}
+}
+
+add {
+
+if {$mask == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+	return
+}
+
+if {[isignore $mask]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.5 $show_mask
+	return
+}
+
+if {![regexp {^[0-9]} $time]} {
+	set time $black(ignore:default_time)
+}
+	set ignore_time [time_return_minute $time]
+
+if {$reason == ""} { set reason "N/A" }
+	newignore $mask $hand $reason $ignore_time
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.6 "$show_mask $time $reason"
+}
+
+del {
+if {$mask == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+	return
+}
+
+if {[isignore $mask]} {
+	killignore $mask
+} else { blacktools:tell $nick $host $hand $chan $chan1 ignore.8 $show_mask
+	return
+} 
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.9 $show_mask
+		}
+default {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+			}
+		}
+	}
+}
+
+
+################################# show ################################
+
+proc showpublic {nick host hand chan arg} {
+global black lastbind
+	set wich [lindex [split $arg] 0]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $wich] && [matchattr $hand nmo|M $wich]} {
+	set chan "$wich"
+	set wich [lindex [split $arg] 1]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	show:process $nick $host $hand $chan $chan1 $wich $type
+}
+
+proc show:process {nick host hand chan chan1 wich type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "show" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+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 {$wich == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "show"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "show"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "show"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set setting_exists [setting:exists $wich]
+if {$setting_exists == "0"} {
+	set why [catch {channel get $chan $wich} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
+	return
+} else {
+	set replyinfo [channel get $chan $wich]
+if {($replyinfo != "") && ($replyinfo == "1")} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 "$wich"
+	return
+}
+if {($replyinfo != "") && ($replyinfo == "0")} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 "$wich"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
+	}
+	return
+}
+	set replyinfo [setting:get $chan $wich]
+if {$setting_exists == "1"} {
+if {[regexp {^[1]} $replyinfo]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
+	return
+}
+
+if {[regexp {^[0]} $replyinfo]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
+	return
+	}
+if {($replyinfo == "") && [string equal -nocase $wich "oprotect"] || [string equal -nocase $wich "vprotect"] || [string equal -nocase $wich "hoprotect"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
+	return
+}
+if {$replyinfo == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
+	}
+	return
+}
+	set split_wich [split $wich "-"]
+	set name [lindex $split_wich 0]
+if {$replyinfo == ""} {
+switch -exact -- [string tolower $wich] {
+
+lang {
+	set replyinfo $black(default_lang)
+}
+
+greet-method {
+	set replyinfo $black(greet:method)
+}
+
+leave-method {
+	set replyinfo $black(leave:method)
+}
+
+backchan {
+	set replyinfo $black(say.ro.gl.noset)
+}
+
+url {
+	set replyinfo $black(say.ro.gl.noset)
+}
+
+next-backchan {
+	set replyinfo $black(say.ro.gl.noset)
+}
+
+nickflood-repeat {
+	set replyinfo $black(nickfloodrepeats)
+}
+
+w-message {
+	set replyinfo $black(say.$getlang.w.6)
+}
+
+antilongtextmax {
+	set replyinfo $black(longchar)
+}
+
+joinflood {
+	set replyinfo $black(joinflood:protect)
+}
+
+chanflood {
+	set replyinfo $black(antifloodchanrepeats)
+}
+
+idleopmax {
+	set replyinfo $black(idleopmax)
+}
+
+idlevoicemax {
+	set replyinfo $black(idlevoicemax)
+}
+
+antirepeat-setting {
+set replyinfo $black(antirepeat:repeats)
+}
+
+gag-reason {
+	set replyinfo $black(say.$getlang.gag.6)
+}
+
+w-reason {
+	set len [llength $black(say.$getlang.w.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.w.5) $random]
+	set replyinfo $reply
+}
+
+k-reason {
+	set len [llength $black(say.$getlang.k.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.k.5) $random]
+	set replyinfo $reply
+}
+
+b-reason {
+	set len [llength $black(say.$getlang.b.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.b.5) $random]
+	set replyinfo $reply
+}
+
+badchan-bmethod {
+	set replyinfo $black(badcbanmethod)
+}
+
+d-bantime {
+	set replyinfo $black(dbtime)
+}
+
+antispam-message {
+	set replyinfo $black(say.$getlang.antispam.2)
+}
+
+limit-default {
+	set replyinfo $black(limit:default)
+}
+
+clonescan-maxclone {
+	set replyinfo $black(maxclone)
+}
+
+clonescan-action {
+	set replyinfo "message"
+				}
+guestnick-message {
+	set replyinfo $black(say.$getlang.guestnick.10)
+				}
+guestnick-msgmethod {
+	set replyinfo $black(guestnick:msgmethod)
+				}
+voiceonmsg-idletime {
+	set replyinfo $black(voiceonmsg:idletime)
+}
+voiceonmsg-linenum {
+	set replyinfo $black(voiceonmsg:linenum)
+			}
+xbantime {
+	set replyinfo $black(chanserv:bantime)
+}
+
+xbanlevel {
+	set replyinfo $black(chanserv:banlevel)
+}
+default {
+	set replyinfo [show:details $wich $name $setting_exists $chan ""]
+			}
+		}
+	} else {
+	set replyinfo [show:details $wich $name $setting_exists $chan $replyinfo]
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
+}
+
+proc show:details {wich name setting_exists chan set} {
+	global black
+	set getlang [string tolower [setting:get $chan lang]]
+	set cmds "dr vr troll bot n id spam bw black stick d next badchan spam"
+	set replyinfo ""
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[string equal -nocase $wich "$name-banmethod"]} {
+if {$set == ""} {
+	set replyinfo [show:getbanmethod $black($name:banmethod)]
+	} else {
+	set replyinfo [show:getbanmethod $set]
+	}
+}
+if {[string equal -nocase $wich "$name-banmask"]} {
+if {$set == ""} {
+	set replyinfo [show:getbanmask $black($name:banmask)]
+	} else {
+	set replyinfo [show:getbanmask $set]
+	}
+}
+
+if {$setting_exists == "2"} {
+	if {[string equal -nocase $wich "$name-bantime"]} {
+if {$set == ""} {
+	set replyinfo $black($name:bantime)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$setting_exists == "2"} {
+if {[string equal -nocase $wich "$name-warn"]} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.2)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$setting_exists == "2"} {
+	if {[string equal -nocase $wich "$name-reason"] && [lsearch -exact -nocase $cmds $name] > -1} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.5)
+				} else {
+	set replyinfo $set
+				}
+			}
+		}
+if {$setting_exists == "2" && $replyinfo == ""} {
+	if {[string equal -nocase $wich "$name-reason"]} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.1)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$replyinfo == ""} {
+	set replyinfo $set
+}
+	return $replyinfo
+}
+
+
+proc show:getbanmask {num} {
+	global black
+switch $num {
+	1 {
+	return "#1 - *!*@host"
+	}
+	2 {
+	return "#2 - *!user@host"
+	}
+	3 {
+	return "#3 - nick!user@host"
+	}
+	4 {
+	return "#4 - nick!*@*"
+	}
+	5 {
+	return "#5 - *!user@*"
+		}
+	}
+}
+
+proc show:getbanmethod {num} {
+	global black
+switch $num {
+	1 {
+	return "#1 - warn"
+	}
+	
+	2 {
+	return "#2 - kick"
+	}
+	
+	3 {
+	return "#3 - ban"
+	}
+	
+	4 {
+	return "#4 - warn -> kick"
+	}
+	
+	5 {
+	return "#5 - warn -> kick -> ban"
+	}
+	
+	6 {
+	return "#6 - kick -> ban"
+	}
+	7 {
+	return "#7 - warn -> ban"
+		}
+	}	
+}
+
+############################## activ ##################################
+
+proc activpublic {nick host hand chan arg} { 
+global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set user [lindex [split $arg] 0]
+	set option [lindex [split $arg] 1]
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MAOV $user]} {
+	set chan "$user"
+	set user [lindex [split $arg] 1]
+	set option [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	activ:process $nick $host $hand $chan $chan1 $user $option $type
+}
+
+proc activ:process {nick host hand chan chan1 user option type} {
+global botnick black timezone
+	set cmd_status [btcmd:status $chan $hand "activ" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	set show_user $user
+	array set activhour [list]
+	set found_nick ""
+	set onchan 0
+	set found_it 0
+	set validuser 0
+	set mask ""
+	set max_act "N/A"
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "activ"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "activ"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "activ"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[matchattr $hand $black(accessflags) $chan]} {
+if {[validuser $show_user]} {
+	get:activ:bans $nick $host $hand $chan $chan1 $user
+	set validuser 1
+} else {
+	set handle [nick2hand $show_user]
+	get:activ:bans $nick $host $hand $chan $chan1 $handle
+	}
+}
+	
+if {![setting:get $chan topwords]} {
+	return
+}
+
+if {[onchan $user $chan]} {
+	set mask [return_mask [return_host_num "topwords" $chan] [getchanhost $user $chan] $user]
+} else {
+if {$validuser == "1"} {
+	set mask [getuser $user HOSTS]
+	}
+}
+if {$validuser == "1"} {
+foreach m $mask {
+	getinfo:topwords $user $m $chan $nick $host $hand $chan $chan1
+}
+	} else {
+	getinfo:topwords $user * $chan $nick $host $hand $chan $chan1
+	}
+}
+
+proc getinfo:topwords {user mask chan nick host hand chan chan1} {
+	global black
+	set found_it 0
+	set file [open $black(topwords_file) r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_nick [lindex [split $line] 1]
+	set read_host [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan] && ([string match -nocase $read_host $mask] || [string equal -nocase $read_nick $user])} {
+	set found_it 1
+	set found_nick $read_nick
+	set read_host [lindex [split $line] 2]
+	set return [getactivplace $read_host $chan]
+	set the_day [lindex [split $line] 31]
+	set the_day [clock format $the_day -format %e]
+	set nr_letter [lindex [split $line] 3]
+	set nr_words [lindex [split $line] 4]
+	set words_today [lindex [split $line] 5]
+	set nr_lines [lindex [split $line] 6]
+	set hours [lrange [split $line] 7 30]
+	set maxhour [gethour:topwords $hours]
+	set msg [lrange [split $line] 32 end]
+	set split_return [split $return ":"]
+	set place [lindex $split_return 0]
+	set all [lindex $split_return 1]
+	set tz [catch {exec date +%Z} timezone]
+if {$place == "0"} { set place "N/A" }
+if {$mask == "*"} {
+		blacktools:tell $nick $host $hand $chan $chan1 topwords.22 "$found_nick $read_host $nr_lines $nr_words $nr_letter $maxhour:00-$timezone $place $all $words_today $msg"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.22 "$found_nick $read_host $nr_lines $nr_words $nr_letter $maxhour:00-$timezone $place $all $words_today $msg"
+		}
+	}
+}
+	close $file
+if {$found_it == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.4 $user
+	return
+	} 
+}
+
+proc gethour:topwords {hours} {
+	global black
+foreach h $hours {
+	set split_h [split $h ":"]
+	set hour [lindex $split_h 0]
+	set nr_hour [lindex $split_h 1]
+	lappend activhour($nr_hour) $hour
+}
+foreach h [lsort -integer -increasing [array names activhour]] {
+	set max_act $activhour($h)
+}
+	return [lindex $max_act 0]
+}
+
+proc getactivplace {host chan} {
+	global black
+	array set activlist [list]
+	set counter 0
+	set all_count 0
+	set place 0
+	set file [open $black(topwords_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 $enc_chan $chan]} {
+	set all_count [expr $all_count + 1]
+	set nr_words [lindex [split $line] 4]
+	set read_host [lindex [split $line] 2]
+	lappend activlist($nr_words) $read_host
+		}
+	}
+	close $file
+foreach h [lsort -integer -decreasing [array names activlist]] {
+	set counter [expr $counter + 1]
+if {[string equal -nocase $activlist($h) $host]} {
+	set place $counter
+	}
+}	
+	return $place:$all_count
+}
+
+proc getactivbansplace {user chan} {
+	global black
+	array set activlist [list]
+	set show_user $user
+	set counter 0
+	set all_count 0
+	set place 0
+foreach u [userlist] {
+	set totalbans [getuser $u XTRA BANS($chan)]
+if {$totalbans != ""} {
+	set all_count [expr $all_count + 1]
+	lappend activlist($totalbans) $u
+	}
+}
+
+foreach u [userlist $chan] {
+if {[matchattr $u $black(localflags) $chan]} {
+	set totalbans [getuser $u XTRA BANS($chan)]
+if {$totalbans != ""} {
+	set all_count [expr $all_count + 1]
+	lappend activlist($totalbans) $u
+		}
+	}
+}
+
+foreach u [lsort -integer -decreasing [array names activlist]] {
+	set counter [expr $counter + 1]
+if {[lsearch -exact -nocase $activlist($u) $show_user] > -1} {
+	set place $counter
+	}
+}
+	return $place:$all_count
+}
+
+proc get:activ:bans {nick host hand chan chan1 user} {
+	global black
+	set found_gl 0
+	set show_user $user
+if {![validuser $user]} {
+if {![setting:get $chan topwords]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+}
+	return
+}
+
+if {![matchattr $hand $black(accessflags) $chan]} {
+if {![setting:get $chan topwords]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	}
+	return
+}
+	set banstoday [getuser $user XTRA BANS_TODAY($chan)]
+	set totalbans [getuser $user XTRA BANS($chan)]
+	set kickstoday [getuser $user XTRA KICKS_TODAY($chan)]
+	set totalkicks [getuser $user XTRA KICKS($chan)]
+
+if {[matchattr $hand $black(glflags)] && [matchattr $user $black(glflags)]} {
+	set found_gl 1
+	set bansglobal [getuser $user XTRA BANS(GLOBAL)]
+if {$bansglobal == ""} { set bansglobal 0 }	
+}
+
+if {$banstoday == ""} { set banstoday 0 }
+if {$kickstoday == ""} { set kickstoday 0 }
+if {$totalbans == ""} { set totalbans 0 }
+if {$totalkicks == ""} { set totalkicks 0 }
+
+	set return [getactivbansplace $user $chan]
+
+	set split_return [split $return ":"]
+	set place [lindex $split_return 0]
+if {$place == "0"} {
+	set place "N/A"
+}
+	set all [lindex $split_return 1]
+if {$found_gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 activ.2 "$show_user $totalbans $bansglobal $totalkicks $place $all $banstoday $kickstoday"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 activ.1 "$show_user $totalbans $totalkicks $place $all $banstoday $kickstoday"
+}
+
+################################# r #######################################
+
+proc rpublic {nick host hand chan arg} {
+	global black lastbind
+	set c [lindex [split $arg] 0]
+	set chan1 $chan
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$c != "" && [matchattr $hand nmo|AMO $c]} {
+if {![regexp {^[&#]} $c]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "r"
+	return
+	}
+	topic:refresh $nick $host $hand $c $chan1 $arg
+	return
+		}
+	topic:refresh $nick $host $hand $chan $chan1 $arg
+}
+
+proc topic:refresh {nick host hand chan chan1 arg} {
+	global black lastbind botnick
+	set cmd_status [btcmd:status $chan $hand "r" 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.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	set chantopic [topic $chan]
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$chantopic != ""} {
+	putserv "TOPIC $chan :$black(say.$getlang.r.1)"
+	putserv "TOPIC $chan :$chantopic"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 r.2 none
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 2129 - 0
BlackTools2.5/BlackTools/Commands/BT.Manual.tcl

@@ -0,0 +1,2129 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   MANUAL 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 manpublic {nick host hand chan arg} {
+	global black
+	set command [lindex [split $arg] 0]
+	set type 0
+	set chan1 $chan
+	man:process $nick $host $hand $chan $chan1 $type $command
+}
+
+proc man:process {nick host hand chan chan1 type command} {
+	global black count
+	set cmd_status [btcmd:status $chan $hand "man" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set number [scan $black(antiflood:cmd) %\[^:\]]
+	set timer [scan $black(antiflood:cmd) %*\[^:\]:%s]
+if {[info exists black(flood:activ:$host)]} {
+foreach tmr [utimers] {
+if {[string match "*black(flood:activ:$host)*" [join [lindex $tmr 1]]]} {
+	set time [lindex $tmr 0]
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 h.16 "$time man"
+	return
+}
+	foreach tmr [utimers] {
+if {[string match "*count(floodcmd:$host:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {![info exists count(floodcmd:$host:$chan)]} { 
+	set count(floodcmd:$host:$chan) 0 
+}
+	incr count(floodcmd:$host:$chan)
+	utimer $timer [list unset:floodcmd $host $chan]
+
+if {$count(floodcmd:$host:$chan) == "$number"} {
+	blacktools:tell $nick $host $hand $chan $chan1 h.16 "30 man"
+	set black(flood:activ:$host) 1
+	utimer 30 [list unset black(flood:activ:$host)]
+	return
+}	
+	
+if {$command == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1 none
+	}
+	
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2 none
+	}
+	
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2_1 none
+		}
+	}
+	return
+}
+
+set command [string trim $command {
+"+"
+"-"
+"."
+"!"}]
+
+switch [string tolower $command] {
+
+man {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.3 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.4 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.4_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.5 none
+	}
+}
+
+h {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.6 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.7 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.8 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.9 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.10 none
+	}
+}
+
+v {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.11 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.12 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.13 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.14 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.15 none
+	}	
+}
+
+o {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.16 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.17 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.18 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.19 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.20 none
+	}	
+}
+
+ho {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.882 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.882_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.883 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.884 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.884_5 none
+	}
+}
+
+userlist {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.22 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.23 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.24 none
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.27 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3) $black(say.$getlang.level.2)"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.26 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3)"
+		}	
+	}
+}
+
+version {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.28 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.29 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.30 none
+	}	
+}
+
+info {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.31 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.32 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.33 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.34 none
+	}
+}
+
+act {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.35 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.36 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.37 none
+	}
+}
+
+t {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.38 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.39 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.40 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.41 none
+	}
+}
+
+cycle {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.42 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.43 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.44 none
+	}
+}
+
+mode {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.45 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.46 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.47 none
+	}
+}
+
+i {
+if {[matchattr $hand nmo|MAVO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.48 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.49 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.50 none
+	}
+}
+
+k {
+if {[matchattr $hand nmo|MAVO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.62 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.63 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.64 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.65 none
+	}
+}
+
+w {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.66 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.67 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.68 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.69 none
+	}
+}
+
+check {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.70 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.71 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.72 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.73 none
+	}
+}
+
+sb {
+if {[matchattr $hand nmo|MAVO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.74 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.75 none
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.77 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.76 none
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 man.78 none
+	}
+}
+
+id {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.79 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.80 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.81 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.82 none
+	}
+}
+
+n {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.83 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.84 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.85 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.86 none
+	}
+}
+
+spam {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.87 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.88 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.89 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.90 none
+	}
+}
+
+dr {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.91 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.92 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.93 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.94 none
+	}
+}
+
+b {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.95 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.96 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.97 none
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.99 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.98 none 
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 man.100 none
+	}
+}
+
+ub {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.101 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.102 none
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.104 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.103 none 
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 man.105 none
+	}
+}
+
+bot {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.106 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.107 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.108 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.109 none
+	}
+}
+
+bw {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.110 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.111 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.112 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.113 none
+	}
+}
+
+black {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.114 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.115 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.116 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.117 none
+	}
+}
+
+stick {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.118 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.119 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.120 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.121 none
+	}
+}
+
+gag {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.122 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.123 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.124 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.125 none
+	}
+}
+
+ungag {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.149 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.150 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.151 none
+	}
+}
+
+add {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.126 "$black(chanserv) $black(hostadd)"
+	blacktools:tell $nick $host $hand $chan $chan1 man.127 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.128 none
+if {[matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.27 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3) $black(say.$getlang.level.2)"
+} elseif {[matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.26 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3)" 
+		} elseif {[matchattr $hand -|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.25 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4)"	
+		} elseif {[matchattr $hand -|A $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.28 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5)"	
+		}
+	}
+}
+
+adduser {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.134 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.135 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.136 none
+if {[matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.27 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3) $black(say.$getlang.level.2)"
+} elseif {[matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.26 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4) $black(say.$getlang.level.3)" 
+		} elseif {[matchattr $hand -|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.25 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5) $black(say.$getlang.level.4)"	
+		} elseif {[matchattr $hand -|A $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.28 "$black(say.$getlang.level.7) $black(say.$getlang.level.6) $black(say.$getlang.level.5)"	
+		}
+	}
+}
+
+delacc {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.142 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.142_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.143 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.144 none
+if {[matchattr $hand nm]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.145 none
+		}
+	}
+}
+
+del {
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.146 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.147 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.148 none
+	}	
+}
+
+banlist {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.152 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.153 none
+if {[matchattr $hand nm]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.155 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.154 none	
+		}
+	}
+}
+
+addhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.156 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.157 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.158 none
+	}
+}
+
+delhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.159 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.160 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.161 none
+	}
+}
+
+chuser {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.162 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.163 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.164 none
+	}
+}
+
+s {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.165 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.166 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.167 none
+	}
+}
+
+us {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.168 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.169 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.170 none
+	}
+}
+
+auto {
+if {[matchattr $hand nmo|MA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.171 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.172 none
+if {[matchattr $hand nm]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.176 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.175 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.174 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.173 none	
+		}
+	}
+}
+
+antipub {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.177 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.178 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.179 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.180 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.181 none
+	}	
+}
+
+antinotice {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.183 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.184 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.185 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.186 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.187 none
+	}	
+}
+
+antictcp {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.188 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.189 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.190 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.191 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.192 none
+	}	
+}
+
+antibadword {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.193 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.194 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.195 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.196 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.197 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.198 none
+	}	
+}
+
+antilongtext {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.199 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.200 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.201 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.202 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.203 none
+	}	
+}
+
+badquitpart {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.204 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.205 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.206 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.207 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.208 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.209 none
+	}	
+}
+
+quitpartcolor {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1203 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1204 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1205 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1206 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1206_1 none
+	}	
+}
+
+antibadquitpart {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.204 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.205 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.206 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.207 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.208 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.209 none
+	}	
+}
+
+antijoinpart {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.210 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.211 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.212 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.213 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.214 none
+	}	
+}
+
+antispam {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.215 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.216 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.217 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.218 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.219 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.220 none		
+	}	
+}
+
+antirepeat {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.221 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.222 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.223 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.224 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.225 none
+	}	
+}
+
+anticolor {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.226 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.227 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.228 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.229 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.230 none
+	}	
+}
+
+antibold {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.231 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.232 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.233 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.234 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.235 none
+	}	
+}
+
+antiunderline {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.236 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.237 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.238 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.239 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.240 none
+	}	
+}
+
+anticaps {
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.241 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.242 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.243 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.244 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.245 none
+	}	
+}
+
+badnick {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.246 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.247 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.248 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.249 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.250 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.251 none
+	}	
+}
+
+badrealname {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.252 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.253 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.254 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.255 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.256 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.257 none
+	}	
+}
+
+autoop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.258 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.259 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.260 none
+	}
+}
+
+autovoice {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.261 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.262 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.263 none
+	}
+}
+
+antijoinflood {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.264 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.265 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.266 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.267 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.268 none
+	}
+}
+
+antichanflood {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.269 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.270 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.271 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.272 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.273 none
+	}
+}
+
+badident {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.274 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.275 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.276 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.277 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.278 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.279 none
+	}
+}
+
+showhandle {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.280 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.281 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.282 none
+	}
+
+}
+
+showcount {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.283 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.284 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.285 none
+	}
+}
+
+showtime {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.286 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.287 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.288 none
+	}
+}
+ 
+showurl {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.289 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.290 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.291 none
+	}
+}
+
+xbantime {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.292 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.293 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.294 none
+	}
+}
+
+xbanlevel {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.295 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.296 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.297 none
+	}
+}
+
+oprotect {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.298 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.299 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.300 none
+	}
+}
+
+vprotect {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.301 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.302 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.303 none
+	}
+}
+
+hoprotect {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.304 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.305 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.306 none
+	}
+}
+
+showid {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.307 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.308 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.309 none
+	}
+}
+
+xtools {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.407 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.408 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.409 none
+	}
+}
+
+badchan {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.410 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.411 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.412 none
+if {[matchattr $hand n]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.414 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.415 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.416 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.413 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.414 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.415 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.416 none
+	}		
+	}
+}
+
+antibadchan {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.410 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.411 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.412 none
+if {[matchattr $hand n]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.414 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.415 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.416 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 man.413 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.414 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.415 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.416 none
+	}		
+	}
+}
+
+anunt {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.417 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.418 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.419 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.420 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.421 none
+	}
+}
+
+limit {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.422 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.423 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.424 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.425 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.426 none
+	}
+}
+
+topic {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.427 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.428 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.429 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.430 none
+	}
+}
+
+clonescan {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.431 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.432 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.433 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.434 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.435 none
+	}
+}
+
+seen {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.436 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.437 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.438 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.439 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.440 none
+}
+}
+	
+greet {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.441 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.442 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.443 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.444 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.445 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.446 none
+	}
+}
+	
+leave {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.447 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.448 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.449 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.450 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.451 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.452 none
+	}
+}
+
+idle {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.453 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.454 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.455 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.456 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.457 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.458 none
+	}	
+}
+
+idlevoice {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.458_1 none
+	}	
+}
+
+idleop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.458_2 none
+	}	
+}
+
+chanreport {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.463 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.460 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.461 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.462 none
+	}
+}
+
+backchan {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.459 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.460 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.461 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.462 none
+	}
+}
+
+topwords {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.464 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.465 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.466 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.467 none
+	}
+}
+	
+antitake {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.473 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.474 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.475 none
+	}
+}
+
+dontdeop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.475_1 none
+	}
+}
+
+dontop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.475_2 none
+	}
+}
+
+private {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.476 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.477 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.478 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.479 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.480 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.481 none
+	}
+}
+
+autobroadcast {
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.482 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.483 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.484 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.485 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.486 none
+	}
+}
+
+silent {
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.486_1 none
+	}
+}
+
+lang {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.487_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.488 none
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.489 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.489_1 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.489_1 none
+		}
+	}
+}
+
+language {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.487 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.488 none
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.489 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.489_1 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.489_1 none
+		}
+	}
+}
+
+tcl {
+if {[matchattr $hand n|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.490 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.491 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.492 none
+	}
+}
+
+next {
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.493 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.494 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.495 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.496 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.497 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.498 none
+	}
+}
+
+uptime {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.605 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.606 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.607 none
+	}
+}
+
+status {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.608 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.609 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.610 none
+	}	
+}
+
+set {
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.611 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.612 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.613 none
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.614 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.615 none 
+		}
+	}
+}
+
+jump {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.620 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.621 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.622 none
+	}
+}
+
+msg {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.623 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.624 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.625 none
+	}
+}
+
+broadcast {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.626 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.627 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.628 none
+	}
+}
+
+ignore {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.629 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.630 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.631 none
+	}
+}
+
+chat {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.632 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.633 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.634 none
+	}
+}
+
+channels {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.638 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.639 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.640 none
+	}
+}
+
+nick {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.641 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.642 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.643 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.643_1 none
+	}
+}
+
+restart {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.644 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.645 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.646 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.647 none
+	}
+}
+
+rehash {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.648 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.649 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.650 none
+	}
+}
+
+die {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.651 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.652 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.653 none
+	}
+}
+
+suspend {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.654 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.655 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.656 none
+	}
+}
+
+unsuspend {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.657 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.658 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.659 none
+	}
+}
+
+save {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.660 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.661 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.662 none
+	}
+}
+
+addchan {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.663 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.664 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.665 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.666 none
+	}
+}
+
+delchan {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.667 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.668 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.669 none
+	}
+}
+
+say {
+if {[matchattr $hand nmo|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.681 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.682 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.683 none
+	}
+}
+
+colors {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.771 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.772 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.773 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.774 none
+	}
+}
+
+reportnick {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.775 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.776 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.777 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.778 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.779 none
+	}
+}
+
+inviteban {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.780 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.781 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.782 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.783 none
+	}
+}
+
+badhost {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.784 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.785 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.786 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.787 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.788 none
+	}
+}
+
+nickflood {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.789 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.790 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.791 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.792 none
+	}
+}
+
+securemode {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.793 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.794 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.795 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.796 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.797 none
+	}
+}
+
+voiceme {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.820 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.821 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.822 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.823 none
+	}
+}
+
+onlyonmode {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.824 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.825 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.826 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.827 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.828 none
+	}
+}
+
+banstats {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.834 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.835 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.836 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.837 none
+	}
+}
+
+guestnick {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.838 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.839 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.840 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.841 none
+	}
+}
+
+cp {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.842 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.843 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.844 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.845 none
+	}
+}
+
+voiceonmsg {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.846 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.847 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.848 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.849 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.850 none
+	}
+}
+
+troll {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.851 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.852 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.853 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.854 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.855 none
+	}
+}
+
+vr {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.856 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.857 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.858 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.859 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.860 none
+	}
+}
+
+xonly {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.861 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.862 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.863 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.864 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.865 none
+	}
+}
+
+autotopic {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.866 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.867 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.868 none	
+	blacktools:tell $nick $host $hand $chan $chan1 man.869 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.870 none
+	}
+}
+
+myset {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.871 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.872 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.873 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.874 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.875 none
+if {[matchattr $hand nmo|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.878 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.877 none 
+		}
+	}
+}
+
+r {
+if {[matchattr $hand nmo|MAO $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.885 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.886 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.887 none
+	}
+}
+
+seenlastmsg {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.888 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.889 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.890 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.891 none
+	}
+}
+
+quote {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.892 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.893 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.894 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.895 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.896 none
+	}
+}
+
+quoteofday {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.897 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.898 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.899 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.900 none
+	}
+}
+
+note {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.901 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.902 none
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.903 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.904 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.905 none
+} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 man.904 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.905 none	
+		}	
+	}
+}
+
+bmethod {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.906 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.907 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.908 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.909 none
+	}
+}
+
+banmethod {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.910 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.907 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.908 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.909 none
+	}
+}
+
+banmask {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.911 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.912 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.913 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.914 none
+	}
+}
+
+url {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.916 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.917 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.918 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.919 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.920 none
+	}
+}
+
+timer {
+if {[matchattr $hand nm|- $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.921 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.921_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.922 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.923 none
+	}
+}
+
+enable {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.924 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.925 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.926 none
+	}
+}
+
+disable {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.927 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.928 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.929 none
+	}
+}
+
+
+activ {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.930 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.931 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.932 none
+	}
+}
+
+output {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.933 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.934 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.935 none
+	}
+}
+
+infoline {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.936 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.937 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.938 none
+	}
+}
+
+unset {
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.939 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.940 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.941 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.942 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.943 none
+	}
+}
+
+nextshortcmd {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.944 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.945 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.946 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.947 none
+	}
+}
+
+autoinvite {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.948 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.949 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.950 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.951 none
+	}
+}
+
+show {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.952 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.953 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.954 none
+	}
+}
+
+chanlink {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.955 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.956 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.957 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.958 none
+	}
+}
+
+link {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.955 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.956 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.957 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.958 none
+	}
+}
+
+accessonly {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.959 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.960 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.961 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.962 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.963 none
+	}
+}
+
+seenreply {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.964 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.965 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.966 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.967 none
+	}
+}
+
+spamjoinmessage {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.968 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.969 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.970 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.971 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.972 none
+	}
+}
+
+strictsecured {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.973 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.974 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.975 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.976 none
+	}
+}
+
+noteexpire {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.977 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.978 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.979 none
+	}
+}
+
+mychan {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.980 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.981 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.982 none
+	}
+}
+
+invisible {
+if {[matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.983 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.984 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.985 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.986 none
+	}
+}
+
+egg {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.990 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.991 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.992 none
+	}
+}
+
+cmdchar {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.994 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.995 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.996 none
+	}
+}
+
+mychar {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.987 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.988 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.989 none
+	}
+}
+
+defaultlang {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.998 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.999 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1100 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1101 none
+	}
+}
+
+homechan {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1102 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1103 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1104 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1105 none
+	}
+}
+
+realname {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1107 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1108 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1109 none
+	}
+}
+
+away {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1111 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1112 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1113 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1113_1 none
+	}
+}
+
+defaultoutput {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1115 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1116 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1117 none
+	}
+}
+
+floodmenuprot {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1119 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1120 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1121 none
+	}
+}
+
+floodmsgprot {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1123 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1124 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1125 none
+	}
+}
+
+floodnotcprot {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1127 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1128 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1129 none
+	}
+}
+
+chanremove-setting {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1131 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1131_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1132 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1133 none
+	}
+}
+
+user-expire {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1135 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1136 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1137 none
+	}
+}
+
+pagelimit {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1139 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1140 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1141 none
+	}
+}
+
+login {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1143 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1144 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1145 none
+	}
+}
+
+chanserv {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1147 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1148 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1149 none
+	}
+}
+
+hostchanserv {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1151 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1152 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1153 none
+	}
+}
+
+userlogin {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1155 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1156 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1157 none
+	}
+}
+
+userpass {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1159 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1160 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1161 none
+	}
+}
+
+add-mask {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1163 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1164 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1165 none
+	}
+}
+
+adduser-mask {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1167 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1168 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1169 none
+	}
+}
+
+antispam-cycletime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1175 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1175_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1176 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1177 none
+	}
+}
+
+idle-scantime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1179 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1179_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1180 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1181 none
+	}
+}
+
+clonescan-scantime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1183 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1183_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1184 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1185 none
+	}
+}
+
+broadcast-showtime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1187 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1187_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1188 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1189 none
+	}
+}
+
+badchan-scantime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1191 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1191_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1192 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1193 none
+	}
+}
+
+anunt-showtime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1195 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1195_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1196 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1197 none
+	}
+}
+
+quoteofday-showtime {
+if {[matchattr $hand nm|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.1199 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1199_1 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.1200 none
+	}
+}
+
+ban-time {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2101 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2102 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2103 none
+	}
+}
+
+bantime {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2101 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2102 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2103 none
+	}
+}
+
+chanmode {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2104 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2105 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2106 none
+	}
+}
+
+dontkickops {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2107 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2108 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2109 none
+	}
+}
+
+enforcebans {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2110 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2111 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2112 none
+	}
+}
+
+dynamicbans {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2113 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2114 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2115 none
+	}
+}
+
+userbans {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2116 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2117 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2118 none
+	}
+}
+
+autohalfop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2122 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2123 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2124 none
+	}
+}
+
+bitch {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2128 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2129 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2130 none
+	}
+}
+
+protectops {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2134 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2135 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2136 none
+	}
+}
+
+
+protectfriends {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2137 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2138 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2139 none
+	}
+}
+
+protecthalfops {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2140 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2141 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2142 none
+	}
+}
+
+
+inactive {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2143 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2144 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2145 none
+	}
+}
+
+statuslog {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2146 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2147 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2148 none
+	}
+}
+
+static {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2149 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2150 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2151 none
+	}
+}
+
+revenge {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2152 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2153 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2154 none
+	}
+}
+
+revengebot {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2155 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2156 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2157 none
+	}
+}
+
+secret {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2158 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2159 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2160 none
+	}
+}
+
+shared {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2161 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2162 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2163 none
+	}
+}
+
+nodesynch {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2167 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2168 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2169 none
+	}
+}
+
+dynamicexempts {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2170 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2171 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2172 none
+	}
+}
+
+userexempts {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2173 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2174 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2175 none
+	}
+}
+
+dynamicinvites {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2176 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2177 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2178 none
+	}
+}
+
+userinvites {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2179 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2180 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2181 none
+	}
+}
+
+userexempts {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2173 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2174 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2175 none
+	}
+}
+
+flood-ctcp {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2182 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2183 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2184 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2185 none
+	}
+}
+
+flood-join {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2186 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2187 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2188 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2189 none
+	}
+}
+
+flood-kick {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2190 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2191 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2192 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2193 none
+	}
+}
+
+flood-deop {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2194 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2195 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2196 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2197 none
+	}
+}
+
+flood-nick {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2198 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2199 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2200 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2201 none
+	}
+}
+
+flood-chan {
+if {[matchattr $hand nmo|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 man.2202 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2203 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2204 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.2205 none
+	}
+}
+
+purge {
+if {[matchattr $hand nmo|M $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 man.670 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.671 none
+	blacktools:tell $nick $host $hand $chan $chan1 man.672 none
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 1904 - 0
BlackTools2.5/BlackTools/Commands/BT.MeCmds.tcl

@@ -0,0 +1,1904 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   ME CMDS 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 comand:pubme {nick host hand chan arg} {
+global botnick wordsdir sdir black seendir count server uptime {server-online} version lastbind
+	set bnick [lindex [split $arg] 0]
+	set what [lindex [split $arg] 1]
+if {[isbotnick $nick]} { return }
+if {[isbotnick $bnick]} {
+switch -exact -- [string tolower $what] {
+
+report {
+	set type "1"
+	set w [lindex [split $arg] 2]
+	set message [join [lrange [split $arg] 3 end]]
+	set chan1 $chan
+if {[regexp {^[&#]} $w]} {
+	set chan $w
+	set w [lindex [split $arg] 3]
+	set message [join [lrange [split $arg] 4 end]]
+}
+if {[matchattr $hand mno|MAO $chan]} {
+	return
+}
+	report:process $nick $host $hand $chan $chan1 $type $w $message
+}
+
+anunt {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set who [lindex [split $arg] 2]
+	set message [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} {
+	set chan $who
+	set who [lindex [split $arg] 3]
+	set message [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+		}
+	anunt:process $nick $host $hand $chan $chan1 $who $message $number $type
+	}
+}
+
+link {
+if {[matchattr $hand nm]} {
+	set type 1
+	set channels [join [lrange [split $arg] 2 end]]
+	set what [lindex [split $arg] 2]
+	set delchan [lindex [split $arg] 3]
+	set chan1 $chan
+	link:process $nick $host $hand $chan $chan1 $type $what $channels $delchan
+	}
+}
+
+note {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set who [lindex [split $arg] 2]
+	set note [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 3]
+	set user_send [lindex [split $arg] 3]
+	set note_send [join [lrange [split $arg] 4 end]]
+	set type 1
+	set chan1 $chan
+	note:process $nick $host $hand $chan $chan1 $who $note $user_send $note_send $number $type
+	}
+}
+
+q {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set otherchan 0
+	set who [lindex [split $arg] 2]
+	set next [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+}
+if {[regexp {^[\[]} $who]} {
+	set who [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 4]
+	set quote [join [lrange [split $arg] 2 end]]
+	}
+}
+	set type 1
+	set chan1 $chan
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|AOMV $who]} {
+	set otherchan 1
+	set chan "$who"
+	set who [lindex [split $arg] 3]
+	set next [lindex [split $arg] 4]
+	set quote [join [lrange [split $arg] 3 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 4]
+	set quote [join [lrange [split $arg] 3 end]]
+}
+if {[regexp {^[\[]} $who]} {
+	set who [lindex [split $arg] 4]
+	set quote [join [lrange [split $arg] 3 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 5]
+	set quote [join [lrange [split $arg] 3 end]]
+		}
+	}
+}
+
+if {$otherchan == "1"} {
+	quote:process $nick $host $hand $chan $chan1 $type $who $quote [lrange [split $arg] 3 end] $next
+	} else {
+	quote:process $nick $host $hand $chan $chan1 $type $who $quote [lrange [split $arg] 2 end] $next
+	}
+	}
+}
+
+enable {
+if {[matchattr $hand nmo|M $chan]} {
+	set what [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set chan1 "$chan"
+	set type "1"
+if {[regexp {^[&#]} $what] && [matchattr $hand nmo|M $what]} {
+	set chan "$what"
+	set what [lindex [split $arg] 3]
+	set user [lindex [split $arg] 4]
+}
+	enable:process $nick $host $hand $chan $chan1 $type $what $user
+	}
+}
+
+disable {
+if {[matchattr $hand nmo|M $chan]} {
+	set what [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set chan1 "$chan"
+	set type "1"
+if {[regexp {^[&#]} $what] && [matchattr $hand nmo|M $what]} {
+	set chan "$what"
+	set what [lindex [split $arg] 3]
+	set user [lindex [split $arg] 4]
+}
+	disable:process $nick $host $hand $chan $chan1 $type $what $user
+	}
+}
+
+securemode {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set except [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set except [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $except $type $number "securemode"
+	}
+}
+
+cp {
+if {[matchattr $hand nm]} {
+	set type 1
+	set chan1 $chan
+	set what [lindex [split $arg] 2]
+	set from [lindex [split $arg] 3]
+	set to [lindex [split $arg] 4]
+	cp:process $nick $host $hand $chan $chan1 $type $what $from $to
+	}
+}
+
+banstats {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set next [lindex [split $arg] 2]
+	set cmd ""
+	set type 0
+	set chan1 "$chan"
+if {[string equal -nocase $next "reset"]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 3]
+	set cmd "total"
+}
+if {[regexp {^[&#]} $next] && [matchattr $hand nmo|MAO $next]} {
+	set chan $next
+	set next [lindex [split $arg] 3]
+if {[string equal -nocase $next "reset"]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 4]
+	set cmd "total"
+	}
+}
+	banstats:process $nick $host $hand $chan $chan1 $cmd $type $next
+	}
+}
+
+troll {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set tr [lindex [split $arg] 2]
+	set chan1 "$chan"
+	set type "1"
+if {[regexp {^[&#]} $tr] && [matchattr $hand nmo|MAO $tr]} {
+	set chan "$tr"
+	set tr [lindex [split $arg] 3]
+}
+	userhost:act $tr $nick $hand $host $chan $chan1 $type "1440" "troll" "" "0"
+	}
+}
+
+guestnick {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "guestnick"
+	set type 1
+	set chan1 $chan
+	set gnick [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} {
+	set who [lindex [split $arg] 3]
+	set gnick [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+		}
+	guestnick:process $nick $host $hand $chan $chan1 $who $gnick $type $number $modul
+	}
+}
+
+badhost {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badh [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badh [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badh $type $number "badhost"
+	}
+}
+
+badrealname {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badf [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badf [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badf $type $number "badrealname"
+	}
+}
+
+badquitpart {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badq [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badq [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badq $type $number "badquitpart"
+	}
+}
+
+
+badident {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badi [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badi [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badi $type $number "badident"
+	}
+}
+
+
+badnick {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badn [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badn [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badn $type $number "badnick"
+	}
+}
+
+
+badword {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badw [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set badw [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badw $type $number "badword"
+	}
+}
+
+
+unset {
+if {[matchattr $hand nmo|M $chan]} {
+	set setting [lindex [split $arg] 2]
+	set chan1 $chan
+	set type 1
+if {[regexp {^[&#]} $setting] && [matchattr $hand nmo|M $setting]} {
+	set chan $setting
+	set setting [lindex [split $arg] 3]
+	}
+if {[string equal -nocase $setting "global"] && [matchattr $hand nm]} {
+	set setting [lindex [split $arg] 3]
+foreach c [channels] {
+	unset:process $nick $host $hand $c $chan1 $setting $type
+			}
+		return
+	}
+	unset:process $nick $host $hand $chan $chan1 $setting $type
+	}
+}
+
+greet {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "greet"
+	set type 1
+	set chan1 $chan
+	set greet [join [lrange [split $arg] 3 end]]
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} {
+	set chan $who
+	set who [lindex [split $arg] 3]
+	set greet [join [lrange [split $arg] 4 end]]
+	}
+	othermodule:process $nick $host $hand $chan $chan1 $who $greet $type $modul	
+	}
+}
+
+leave {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "leave"
+	set type 1
+	set chan1 $chan
+	set leave [join [lrange [split $arg] 3 end]]
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} {
+	set chan $who
+	set who [lindex [split $arg] 3]
+	set leave [join [lrange [split $arg] 4 end]]
+	}
+	othermodule:process $nick $host $hand $chan $chan1 $who $leave $type $modul		
+	}
+}
+
+topic {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "topic"
+	set type 0
+	set chan1 $chan
+	set topic [join [lrange [split $arg] 3 end]]
+if {[regexp {^[&#]} $who] && [matchattr $hand nmo|M $who]} {
+	set chan $who
+	set who [lindex [split $arg] 3]
+	set topic [join [lrange [split $arg] 4 end]]
+}
+	othermodule:process $nick $host $hand $chan $chan1 $who $topic $type $modul	
+	}
+}
+
+vr {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set vr [lindex [split $arg] 2]
+	set chan1 "$chan"
+	set type "1"
+if {[regexp {^[&#]} $vr] && [matchattr $hand nmo|MAO $vr]} {
+	set chan "$vr"
+	set vr [lindex [split $arg] 3]
+}
+	userhost:act $vr $nick $hand $host $chan $chan1 $type $black(vr:bantime) "vr" "" "0"
+	}
+}
+
+dr {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set drone [lindex [split $arg] 2]
+	set type "1"
+	set chan1 "$chan"
+if {[regexp {^[&#]} $drone] && [matchattr $hand nmo|OMA $drone]} {
+	set chan "$drone"
+	set drone [lindex [split $arg] 3]
+}
+	userhost:act $drone $nick $hand $host $chan $chan1 $type $black(dr:bantime) "dr" "" "0"
+	}
+}
+
+bot {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set bot [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $bot] && [matchattr $hand nmo|OMA $bot]} {
+	set chan "$bot"
+	set bot [lindex [split $arg] 3]
+}
+	userhost:act $bot $nick "$hand:bot" $host $chan $chan1 $type $black(bot:bantime) "bot" "" "0"
+	}
+}
+
+n {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badnick [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $badnick] && [matchattr $hand nmo|MAO $badnick]} {
+	set chan "$badnick"
+	set badnick [lindex [split $arg] 3]
+}
+if {[regexp {\*} $badnick]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "n"
+	return
+}
+if {$badnick == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "n"
+	return
+}
+	bancmds:process $badnick $badnick $nick $hand $host $chan $chan1 $type $black(n:bantime) "n" "" "0"
+	}
+}
+
+id {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badident [lindex [split $arg] 2]
+	set handle [nick2hand $badident]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $badident] && [matchattr $hand nmo|OMA $badident]} {
+	set chan "$badident"
+	set badident [lindex [split $arg] 3]
+}
+	userhost:act $badident $nick $hand $host $chan $chan1 $type $black(id:bantime) "id" "" "0"
+	}
+}
+
+spam {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set spammer [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $spammer] && [matchattr $hand nmo|OMA $spammer]} {
+	set chan "$spammer"
+	set spammer [lindex [split $arg] 3]
+}
+	userhost:act $spammer $nick $hand $host $chan $chan1 $type $black(spam:bantime) "spam" "" "0"
+	}
+}
+
+bw {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badw [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $badw] && [matchattr $hand nmo|OMA $badw]} {
+	set chan "$badw"
+	set badw [lindex [split $arg] 3]
+}
+	userhost:act $badw $nick $hand $host $chan $chan1 $type $black(bw:bantime) "bw" "" "0"
+	}
+}
+
+black {
+if {[matchattr $hand nmo|MA $chan]} {
+	set blackb [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $blackb] && [matchattr $hand nmo|MA $blackb]} {
+	set chan "$blackb"
+	set blackb [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+	userhost:act $blackb $nick $hand $host $chan $chan1 $type "0" "black" $reason "0"
+	}
+}
+
+bl {
+if {[matchattr $hand nmo|MA $chan]} {
+	set blackb [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $blackb] && [matchattr $hand nmo|MA $blackb]} {
+	set chan "$blackb"
+	set blackb [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+	userhost:act $blackb $nick $hand $host $chan $chan1 $type "0" "black" $reason "0"
+	}
+}
+
+b {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set no_time 0
+	set type 1
+	set gl 0
+	set link 0
+	set chan1 "$chan"
+	set level ""
+	set b [lindex [split $arg] 2]
+	set tm [lindex [split $arg] 3]
+	set global [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+if {[regexp {^[&#]} $b] && [matchattr $hand nmo|MAO $b]} {
+	set chan $b
+	set b [lindex [split $arg] 3]
+	set tm [lindex [split $arg] 4]
+	set global [lindex [split $arg] 5]
+	set reason [join [lrange [split $arg] 6 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 5 end]]
+}
+if {[regexp {^[-]} $tm]} {
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 6 end]]
+	set tm [lindex [split $arg] 5]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 5 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 6 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 5 end]]
+			} 
+	} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+	} else {
+	set reason [join [lrange [split $arg] 5 end]]
+		}
+	}
+} else {
+if {[regexp {^[-]} $tm]} {
+	set levelban 1
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 5 end]]
+	set tm [lindex [split $arg] 4]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+			} 
+	} elseif {[string equal -nocase "$global" "link"] && [matchattr $hand nm]} {
+	set link 1
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+			} 
+	} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+	} else {
+	set reason [join [lrange [split $arg] 4 end]]
+		}
+	}
+}
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 b.6 none
+	return
+}
+if {$return_time == "-1"} {
+	set return_time $black(b:bantime)
+}
+if {[llength $level] > "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.invalidlevel [string map {"0" ""} $level]
+	return
+}
+	
+if {$level != ""} {
+	userhost:act $b $nick "$hand:$level" $host $chan $chan1 $type $return_time "b" $reason $gl
+} else {
+if {$link == "1"} {
+	foreach c [link:chan:get $chan] {
+	userhost:act $b $nick "$hand" $host $c $chan1 $type $return_time "b" $reason "2"
+	}
+	userhost:act $b $nick "$hand" $host $chan $chan1 $type $return_time "b" $reason "2"
+	return
+}
+	userhost:act $b $nick "$hand" $host $chan $chan1 $type $return_time "b" $reason $gl
+		}
+	}
+}
+
+
+stick {
+if {[matchattr $hand nmo|M $chan]} {
+	set stickb [lindex [split $arg] 2]
+	set tm [lindex [split $arg] 3]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+} else {
+	set tm [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $stickb] && [matchattr $hand nmo|MA $stickb]} {
+	set chan "$stickb"
+	set stickb [lindex [split $arg] 3]
+	set tm [lindex [split $arg] 4]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+} else {
+	set tm [lindex [split $arg] 5]
+	set reason [join [lrange [split $arg] 5 end]] 
+	}
+}
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $stickb]} {
+	blacktools:tell $nick $host $hand $chan $chan1 b.6 none
+	return
+}
+
+if {$return_time == "-1"} {
+	set return_time $black(stick:bantime)
+}
+	userhost:act $stickb $nick $hand $host $chan $chan1 $type $return_time "stick" $reason "0"
+	}
+}
+
+ub {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set ban [lindex [split $arg] 2]
+	set why [lindex [split $arg] 3]
+	set type 1	
+	set chan1 "$chan"
+if {[regexp {^[&#]} $ban] && [matchattr $hand nmo|MAO $ban]} {
+	set chan "$ban"
+	set ban [lindex [split $arg] 3]
+	set why [lindex [split $arg] 4]
+}
+if {[regexp {^[0-9]} $ban]} {
+	set cmd "ub:id"
+} else {
+	set cmd "ub"
+}
+if {[string equal -nocase $why "global"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "1" $cmd "" ""
+} elseif {[string equal -nocase $why "link"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "" "ub" "" "1"
+} else {
+	ub:process $ban $ban $nick $hand $host $chan $chan1 $type "" $cmd "" ""
+		}
+	}
+}
+
+sb {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set bhost [lindex [split $arg] 2]
+	set what [lindex [split $arg] 3]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $bhost] && [matchattr $hand nmo|MAO $bhost]} {
+	set chan "$bhost"
+	set bhost [lindex [split $arg] 3]
+	set what [lindex [split $arg] 4]
+	}
+if {$bhost != ""} {
+if {[regexp {^[0-9]} $bhost]} {
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "2"
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {[onchan $bhost $chan]} {
+	set bhost "$bhost![getchanhost $bhost $chan]"
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "1"
+	return
+}
+
+if {[regexp {\*} $bhost]} {
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "1"
+	return
+}
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" ""
+
+		} else { sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" ""}
+	}
+}
+
+banlist {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set user [lindex [split $arg] 2]
+	set next [lindex [split $arg] 3]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MASO $user]} {
+	set chan "$user"
+	set user [lindex [split $arg] 3]
+	set next [lindex [split $arg] 4]
+		}
+banlist:process $nick $host $hand $chan $chan1 $user $type "banlist" $next
+	}
+}
+
+r {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set c [lindex [split $arg] 2]
+	set chan1 $chan
+if {$c != "" && [matchattr $hand nmo|AMO $c]} {
+	topic:refresh $nick $host $hand $c $chan1 $arg
+	return
+		}
+	topic:refresh $nick $host $hand $chan $chan1 $arg
+	}
+}
+
+egg {
+if {[matchattr $hand nm|- $chan]} {
+	set why [lindex [split $arg] 2]
+	set result [join [lrange [split $arg] 3 end]]
+	set chan1 $chan
+	set type2 1
+	egg:process $why $type2 $result $nick $hand $host $chan $chan1 
+	}
+}
+
+man {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set command [lindex [split $arg] 2]
+	set type 1
+	set chan1 $chan
+	man:process $nick $host $hand $chan $chan1 $type $command
+	}
+}
+
+auto {
+if {[matchattr $hand nmo|MA $chan]} {
+set type 0
+	set chan1 "$chan"
+	set option [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set global [lindex [split $arg] 4]
+if {[regexp {^[&#]} $option] && [matchattr $hand nmo|MA $option] && ![string equal -nocase $global "-global"]} {
+	set chan "$option"
+	set option [lindex [split $arg] 3]
+	set user [lindex [split $arg] 4]
+	set global [lindex [split $arg] 5]
+		}
+	auto:process $nick $host $hand $chan $chan1 $user $option $global $type 
+	}
+}
+
+
+antipub {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set except [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set except [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $except $type $number "antipub"
+	}
+}
+
+private {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $chan]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set user [lindex [split $arg] 4]
+		}
+private:process $nick $host $hand $chan $chan1 $why $user $type
+	}
+}
+
+tcl {
+if {[matchattr $hand n]} {
+	set type 1
+	set chan1 "$chan"
+	set the_script [lindex [split $arg] 3]
+	set who [lindex [split $arg] 2]
+	tcl:process $nick $host $hand $chan $chan1 $type $the_script $who
+	}
+}
+
+h {
+if {[matchattr $hand nmo|MSOAV $chan]} {
+	set chan1 "$chan"
+	set type 1
+	set command [lindex [split $arg] 2]
+	h:process $nick $host $hand $chan $chan1 $command $type
+	}
+}
+
+ignore {
+if {[matchattr $hand nmo|M $chan]} {
+	set chan1 "$chan"
+	set type 1
+	set what [lindex [split $arg] 2]
+	set mask [lindex [split $arg] 3]
+	set time [lindex [split $arg] 4]	
+	set reason [join [lrange [split $arg] 5 end]]
+if {![regexp {^[0-9]} $time]} {
+	set reason [join [lrange [split $arg] 4 end]]
+		}
+	ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason $type
+	}
+}
+
+
+idle {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set host [lindex [split $arg] 4]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|- $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set user [lindex [split $arg] 4]
+	set host [lindex [split $arg] 5]
+		}
+	antidle:process $why $type $user $host $nick $hand $chan $chan1
+	}
+}
+
+version {
+if {[matchattr $hand nmo|MASOV $chan]} {
+set chan1 "$chan"
+version:process $nick $host $hand $chan $chan1
+	}
+}
+
+activ {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set user [lindex [split $arg] 2]
+	set option [lindex [split $arg] 3]
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MAOV $user]} {
+	set chan "$user"
+	set user [lindex [split $arg] 3]
+	set option [lindex [split $arg] 4]
+}
+	activ:process $nick $host $hand $chan $chan1 $user $option $type
+	}
+}
+
+chat {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "chat" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	*ctcp:CHAT $nick $host $hand $botnick CHAT $arg
+	blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
+	} 
+}
+
+seen {
+	set type 1
+	set wseen [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $wseen]} {
+	set chan1 "$chan"
+	set chan "$wseen"
+	set wseen [lindex [split $arg] 3]
+	}
+	seen:process $nick $host $hand $chan $chan1 $wseen $type
+}
+
+limit {
+if {[matchattr $hand nmo|M $chan]} {
+	set why [lindex [split $arg] 2]
+	set lm [lindex [split $arg] 3]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set lm [lindex [split $arg] 4]
+		}
+	limit:process $nick $host $hand $chan $chan1 $why $lm $type
+	}
+}
+
+bt {
+if {[matchattr $hand nm]} {
+	set chan1 "$chan"
+	set type 0
+	set who [lindex [split $arg] 2]
+	set message [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+	broadcast:process $nick $host $hand $chan $chan1 $who $message $number $type
+	}
+}
+
+badchan {
+if {[matchattr $hand nmo|M $chan]} {
+	set why [lindex [split $arg] 2]
+	set type1 1
+	set chan1 "$chan"
+	set bdchan [lindex [split $arg] 3]
+	set type [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 4 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 5 end]]
+}
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set bdchan [lindex [split $arg] 4]
+	set type [lindex [split $arg] 5]
+	set reason [join [lrange [split $arg] 5 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 6 end]]
+	}
+}
+	badchan:process $nick $host $hand $chan $chan1 $why $bdchan $type1 $type $reason
+	}
+}
+
+us {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set users [lindex [split $arg] 2]
+if {[regexp {^[&#]} $users] && [matchattr $hand nmo|MA $users]} {
+	set chan "$users"
+	set users [lindex [split $arg] 3]
+		}
+	us:process $nick $host $hand $chan $chan1 $users $type
+	}
+} 
+
+s {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set user [lindex [split $arg] 2]
+	set suspend_time [lindex [split $arg] 3]
+	set suspend_reason [join [lrange [split $arg] 4 end]]
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_reason [join [lrange [split $arg] 3 end]]
+}
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MA $user]} {
+	set chan "$user"
+	set user [lindex [split $arg] 3]
+	set suspend_time [lindex [split $arg] 4]
+	set suspend_reason [join [lrange [split $arg] 5 end]]
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_reason [join [lrange [split $arg] 4 end]]
+}
+		}
+	s:process $nick $host $hand $chan $chan1 $user $type $suspend_time $suspend_reason
+	}
+}
+
+info {
+if {[matchattr $hand nmo|MASOV $chan]} {
+	set user [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MASO $user] && ([lindex [split $arg] 3] == "")} {
+	set chan $user
+	info:process:chan $nick $host $hand $chan $chan1
+	return
+}
+
+if {[regexp {^[&#]} $user] && [matchattr $hand nmo|MASOV $chan]} {
+	set chan "$user"
+	set user [lindex [split $arg] 3]
+}
+	info:process $nick $host $hand $chan $chan1 $user $type
+	}
+}
+
+channels {
+if {[matchattr $hand nmo]} {
+	set chan1 "$chan"
+	channels:process $nick $host $hand $chan $chan1
+	}
+}
+
+
+userlist {
+if {[matchattr $hand nmo|MASOV $chan]} {
+	set level [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|MASOV $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 3]
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+	}
+} 
+	userlist:execute $hand $host $level $chan $chan1 $nick $type
+	}
+}
+
+chuser {
+if {[matchattr $hand nmo|M $chan]} {
+	set user [lindex [split $arg] 2]
+	set type 1	
+	set chan1 "$chan"
+	set chandle [lindex [split $arg] 3]
+	chuser:process $nick $host $hand $chan $chan1 $user $chandle $type
+	}
+}
+
+
+delhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	set user [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+	set hosts [join [lrange [split $arg] 3 end]]
+	delhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+	}
+}
+
+addhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set user [lindex [split $arg] 2]
+	set hosts [join [lrange [split $arg] 3 end]]
+	addhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+	}
+}
+
+del {
+if {[matchattr $hand nmo|M $chan]} {
+	set args [lrange [split $arg] 2 end]
+	set type 1
+	set chan1 "$chan"
+	del:process $nick $host $hand $chan $chan1 $args $type
+	}
+}
+
+
+delacc {
+if {[matchattr $hand nmo|MA $chan]} {
+	set args [lrange [split $arg] 2 end]
+	set type 1
+	set chan1 "$chan"
+	set c [lindex [split $arg] 2]
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AM $c]} {
+	set chan "$c"
+	set args [lrange [split $arg] 3 end]
+}
+foreach user $args {
+	delacc:process $nick $host $hand $chan $chan1 $user $type
+		}
+	}
+}
+
+adduser {
+if {[matchattr $hand nmo|MA $chan]} {
+	set level [lindex [split $arg] 2]
+	set args [lrange [split $arg] 3 end]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|MA $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 3]
+	set args [lrange [split $arg] 4 end]
+}
+if {$args != ""} {
+foreach user $args {
+if {[join $user] != ""} {
+	set handle [nick2hand $user]
+if {![onchan $user $chan] && ![validuser $user]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $user
+	return
+}
+	set hosts [getchanhost $user $chan]
+	set uhost [return_mask $black(addusermask) $hosts $user]
+	add:process $user $uhost $handle $level $hand $host $chan $chan1 $nick $type "adduser"
+				}
+			}
+		} else { add:process "" "" "" $level $hand $host $chan $chan1 $nick $type "adduser" }
+	}
+}
+
+add {
+if {[matchattr $hand nmo|MA $chan]} {
+	set level [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+	set args [lrange [split $arg] 3 end]
+	set handle ""
+	set uhost ""
+if {[regexp {^[&#]} $level] && [matchattr $hand nmo|MA $level]} {
+	set chan "$level"
+	set level [lindex [split $arg] 3]
+	set args [lrange [split $arg] 4 end]
+}
+if {$args != ""} {
+foreach user $args {
+if {$user != ""} {
+if {![string is alnum $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.18 none
+	continue
+}
+	add:process $user $uhost $handle $level $hand $host $chan $chan1 $nick $type "add"
+				}
+			}
+		} else {  add:process "" $uhost $handle $level $hand $host $chan $chan1 $nick $type "add" }	
+	}
+}
+
+unsuspend {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "unsuspend" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "unsuspend"
+	return
+}
+
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+ 
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![channel get $chans inactive]} {
+	blacktools:tell $nick $host $hand $chan $chan1 unsuspend.3 $chans
+	return
+}
+	channel set $chans -inactive
+	blacktools:tell $nick $host $hand $chan $chan1 unsuspend.4 $chans
+	}
+}
+
+suspend {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "suspend" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+	set chan1 "$chan"
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "suspend"
+	return
+}
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[channel get $chans inactive]} {
+	blacktools:tell $nick $host $hand $chan $chan1 suspend.3 $chans 
+	return
+}
+	channel set $chans +inactive	
+	blacktools:tell $nick $host $hand $chan $chan1 suspend.4 $chans 
+	}
+}
+
+delchan {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "delchan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {$chans == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delchan"
+	return
+}
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none 
+	return
+} 
+
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {[string equal -nocase $chans $black(homechan)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delchan.5 $chans
+	return
+	}
+}
+	channel remove $chans
+	delchan:all $chans
+	blacktools:tell $nick $host $hand $chan $chan1 delchan.3 $chans
+	}
+}
+
+addchan {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "addchan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 2]
+	set key [lindex [split $arg] 3]
+	set chan1 $chan
+if {$chans == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "addchan"
+	return
+}
+if {![regexp {^[&#]} $chans]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+} 
+
+if {[validchan $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 addchan.2 $chans
+	return
+} else {
+	channel add $chans
+	blacktools:tell $nick $host $hand $chan $chan1 addchan.3 $chans
+if {$key != ""} {
+	putquick "JOIN $chans :$key"
+	channel set $chans chanmode "+ntk $key"
+			}		
+		}
+	}
+}
+
+die {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "die" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	set reason [join [lrange [split $arg] 2 end]]
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	blacktools:tell $nick $host $hand $chan $chan1 die.1 none
+if {$reason == ""} {
+	set reason $black(say.$getlang.die.2)
+}
+	utimer 3 [list die $reason]
+	}
+}
+
+jump {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "jump" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	set serv [lindex [split $arg] 2]
+if {$serv == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 jump.1 "..."
+	utimer 3 [list jump]
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 jump.1 "\002$serv\002"
+	utimer 3 [list jump $serv]
+		}	
+	}
+}
+
+save {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "save" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick $host $hand $chan $chan1 save.1 none
+	save
+	}
+}
+
+restart {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "restart" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick $host $hand $chan $chan1 restart.1 none
+	utimer 3 [list restart]
+	}
+}
+
+rehash {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "rehash" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick $host $hand $chan $chan1 rehash.1 none
+	rehash
+	}
+}
+
+nick {
+if {[matchattr $hand nm]} {
+	set thenick [lindex [split $arg] 2]
+	set chan1 $chan
+	set type 1
+	tempnick:process $thenick $nick $host $hand $chan $chan1 $type
+	}
+}
+
+msg {
+if {[matchattr $hand nmo|- $chan]} {
+	set who [lindex [split $arg] 2]	
+	set chan1 "$chan"
+	set type 1
+	set msg [join [lrange [split $arg] 3 end]]
+	msg:process $nick $host $hand $chan $chan1 $who $msg $type
+	}
+}
+
+
+set {
+if {[matchattr $hand nmo|M $chan]} {
+	set flags [lindex [split $arg] 2]
+	set type [join [lrange [split $arg] 3 end]]
+	set type1 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $flags] && [matchattr $hand nmo|M $flags]} {
+	set chan "$flags"
+	set flags [lindex [split $arg] 3]
+	set type [join [lrange [split $arg] 4 end]]
+}
+if {[matchattr $hand mn]} {
+if {[string equal -nocase "global" $flags]} {
+	set chan "$flags"
+	set flags [lindex [split $arg] 3]
+	set type [join [lrange [split $arg] 4 end]]
+	foreach c [channels] {
+	set:process $nick $host $hand $c $chan1 $flags $type $type1	
+		}
+		return
+	}
+}
+	set:process $nick $host $hand $chan $chan1 $flags $type $type1
+	}
+}
+
+mode {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set modes [lindex [split $arg] 2]	
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $modes] && [matchattr $hand nmo|OMA $modes]} {
+	set chan "$modes"
+	set modes [lindex [split $arg] 3]
+		}
+	mode:process $nick $host $hand $chan $chan1 $modes $type
+	}
+}
+
+cycle {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set reason [join [lrange [split $arg] 2 end]]	
+	set c [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|OMA $c]} {
+	set chan "$c"
+	set reason [join [lrange [split $arg] 3 end]]
+}
+	cycle:process $nick $host $hand $chan $chan1 $reason
+	}
+}
+
+purge {
+if {[matchattr $hand -|M $chan]} {
+	set c [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 2 end]]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand -|M $c]} {
+	set chan "$c"
+	set reason [join [lrange [split $arg] 3 end]]
+}
+if {$reason == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
+	return
+}
+	purge:process $nick $host $hand $chan $chan1 $reason
+	}
+}
+
+broadcast {
+if {[matchattr $hand nm]} {
+	set text [join [lrange [split $arg] 2 end]]	
+	set chan1 "$chan"
+	set type 1
+	broadcast:cmd:process $nick $host $hand $chan $chan1 $text $type
+	}
+}
+
+act {
+if {[matchattr $hand nmo|MA $chan]} {
+	set text [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|AM $c]} {
+	set chan "$c"
+	set text [join [lrange [split $arg] 3 end]]
+}
+	act:process $nick $host $hand $chan $chan1 $text $type
+	}
+}
+
+say {
+if {[matchattr $hand nmo|MA $chan]} {
+	set text [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|MA $c]} {
+	set chan "$c"
+	set text [join [lrange [split $arg] 3 end]]
+}
+	say:process $nick $host $hand $chan $chan1 $text $type
+	}
+}
+
+v {
+if {[matchattr $hand nmo|VOMA $chan]} {
+	set voicex [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|VOMA $c]} {
+	set chan "$c"
+	set voicex [join [lrange [split $arg] 3 end]]
+}
+	v:process $nick $host $hand $chan $chan1 $voicex
+	}
+}
+
+ho {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set hopex [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|OMA $c]} {
+	set chan "$c"
+	set hopex [join [lrange [split $arg] 3 end]]
+		}
+	ho:process $nick $host $hand $chan $chan1 $hopex
+	}
+}
+
+o {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set opex [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|OMA $c]} {
+	set chan "$c"
+	set opex [join [lrange [split $arg] 3 end]]
+		}
+	o:process $nick $host $hand $chan $chan1 $opex
+	}
+}
+
+uptime {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "uptime" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+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 {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set chan1 "$chan"
+	set up [return_time_2 $getlang [expr [unixtime] - $uptime]]
+	set on [return_time_2 $getlang [expr [unixtime] - ${server-online}]]
+	catch {exec uptime} shelluptime
+	set file [open $black(uptime_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data == ""} {
+	set read_maxup "-"
+	set read_maxon "-"
+} else {
+	set read_maxup [return_time_2 $getlang [lindex [split $data] 0]]
+	set read_maxon [return_time_2 $getlang [lindex [split $data] 1]]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 maxup.1 "$up $read_maxup"
+	blacktools:tell $nick $host $hand $chan $chan1 maxon.1 "$on $read_maxon"
+	blacktools:tell $nick $host $hand $chan $chan1 uptime.2 $shelluptime
+	blacktools:tell $nick $host $hand $chan $chan1 uptime.3 $server
+	}
+}
+
+status {
+if {[matchattr $hand nmo|- $chan]} {
+	status:process $nick $host $hand $chan
+	}
+}
+
+t {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set topics [join [lrange [split $arg] 2 end]]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $topics] && [matchattr $hand nmo|OMA $topics]} {
+	set chan "$topics"	
+	set topics [join [lrange [split $arg] 3 end]]
+		}
+	t:process $nick $host $hand $chan $chan1 $topics $type
+	}
+}
+
+k {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set knick [lindex [split $arg] 2]
+	set type 1
+	set reason [join [lrange [split $arg] 3 end]]
+	set handle [nick2hand $knick]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $knick] && [matchattr $hand nmo|MAO $knick]} {
+	set chan "$knick"
+	set knick [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+if {$knick != ""} {
+	k:process $knick $nick $hand $host $reason $chan $chan1 $type
+		} else {k:process $knick $nick $hand $host $reason $chan $chan1 $type}
+	}
+}
+
+w {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set wnick [lindex [split $arg] 2]
+	set type 1
+	set handle [nick2hand $wnick]
+	set chan1 "$chan"
+if {[regexp {^[&#]} $wnick] && [matchattr $hand nmo|MAO $wnick]} {
+	set chan "$wnick"
+	set wnick [lindex [split $arg] 3]
+}
+if {$wnick != ""} {
+	w:process $wnick $nick $hand $host $chan $chan1 $type
+		} else { w:process $wnick $nick $hand $host $chan $chan1 $type }
+	}
+}
+
+ungag {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set gagger [lindex [split $arg] 2]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $gagger] && [matchattr $hand nmo|MAO $gagger]} {
+	set chan "$gagger"
+	set gagger [lindex [split $arg] 3]
+}
+if {$gagger != ""} {
+	ungag:process $gagger $nick $hand $host $chan $chan1 $type
+	} else { ungag:process $gagger $nick $hand $host $chan $chan1 $type }
+	}
+}
+
+gag {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set gagger [lindex [split $arg] 2]
+	set time [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set type 1
+	set handle [nick2hand $gagger]
+	set chan1 "$chan"
+	set return_time [time_return_minute $time]
+if {$return_time == "-1"} {
+	set reason [lrange [split $arg] 3 end]
+	set time [setting:get $chan gag-bantime]
+if {$time == ""} {
+	set time $black(gag:bantime)
+	}
+}
+if {[regexp {^[&#]} $gagger] && [matchattr $hand nmo|MAO $gagger]} {
+	set chan "$gagger"
+	set gagger [lindex [split $arg] 3]
+	set time [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $time]
+if {$return_time == "-1"} {
+	set reason [lrange [split $arg] 4 end]
+	set time [setting:get $chan gag-bantime]
+if {$time == ""} {
+	set time $black(gag:bantime)
+		}
+	}
+}
+if {$gagger != ""} {
+	gag:process $gagger $time $reason $nick "$hand:GAG" $host $chan $chan1 $type
+	} else { gag:process $gagger $time $reason $nick $hand $host $chan $chan1 $type }
+	}
+}
+
+show {
+if {[matchattr $hand nmo|M $chan]} {
+	set wich [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+if {[regexp {^[&#]} $wich] && [matchattr $hand nmo|M $wich]} {
+	set chan "$wich"
+	set wich [lindex [split $arg] 3]	
+		}
+	show:process $nick $host $hand $chan $chan1 $wich $type
+	}
+}
+
+clonescan {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set why [lindex [split $arg] 2]
+	set type 1
+if {[matchattr $hand nmo|M $chan] && ($why != "") && ![regexp {^[&#]} $why]} {
+	set chan1 "$chan"
+	set clone [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set clone [join [lrange [split $arg] 4 end]]
+	set number [lindex [split $arg] 4]
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $clone $type $number "clonescan"
+	return
+}
+	set c [lindex [split $arg] 2]
+	set type 0
+	set chan1 "$chan"
+if {[regexp {^[&#]} $c] && [matchattr $hand nmo|M $c]} {
+	set chan "$c"
+}
+	scanner:process $nick $host $hand $chan $chan1 $type
+	}
+}
+
+topwords {
+if {[matchattr $hand nmo|AOMV $chan]} {
+	set next [lindex [split $arg] 2]
+	set cmd ""
+	set type 1
+	set chan1 "$chan"
+if {[string equal -nocase $next "reset"] && [matchattr $hand nmo|M $chan]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 3]
+	set cmd "total"
+}
+if {[string equal -nocase $next "add"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 3]
+	set cmd "add"
+}
+if {[string equal -nocase $next "del"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 3]
+	set cmd "del"
+}
+if {[regexp {^[&#]} $next] && [matchattr $hand nmo|MAOV $next]} {
+	set chan $next
+	set next [lindex [split $arg] 3]
+if {[string equal -nocase $next "reset"] && [matchattr $hand nmo|M $next]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 4]
+	set cmd "total"
+	}
+if {[string equal -nocase $next "add"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 4]
+	set cmd "add"
+	}
+if {[string equal -nocase $next "del"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 4]
+	set cmd "del"
+			}
+		}
+	topwords:process $nick $host $hand $chan $chan1 $cmd $type $next
+	}	
+}
+
+myset {
+if {[matchattr $hand nmo|VAOM $chan]} {
+	set type 1
+	set chan1 "$chan"	
+	set flags [lindex [split $arg] 2]
+	set typez [lindex [split $arg] 3]
+	set chan2 [lindex [split $arg] 4]
+	set arg [join [lrange [split $arg] 3 end]]
+	myset:process $nick $host $hand $chan $chan1 $flags $typez $type $chan2 $arg
+	}
+}
+
+timer {
+if {[matchattr $hand nm]} {
+	set chan1 $chan
+	set cmd [lindex [split $arg] 2]
+	set pid [lindex [split $arg] 3]
+	set timer_args [join [lrange [split $arg] 4 end]]
+	set type 1
+	timer:process $nick $host $hand $chan $chan1 $cmd $pid $timer_args $type
+	}
+}
+
+i {
+if {[matchattr $hand nmo|VAOM $chan]} {
+	set type 1
+	set chan1 "$chan"
+	set inick [lindex [split $arg] 2]
+if {[regexp {^[&#]} $inick] && [matchattr $hand nmo|VAOM $inick]} {
+	set chan "$inick"
+	set inick [lindex [split $arg] 3]
+}
+	i:process $nick $host $hand $chan $chan1 $inick $type
+	}
+}
+
+badword {
+if {[matchattr $hand nmo|M $chan]} {
+	set why [lindex [split $arg] 2]
+	set type 1
+	set chan1 "$chan"
+	set bdword [join [lrange [split $arg] 3 end]]
+	set bdnumber [lindex [split $arg] 3]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 3]
+	set bdnumber [lindex [split $arg] 4]
+	set bdword [join [lrange [split $arg] 4 end]]
+		}
+	antibadword:command:process $nick $host $hand $chan $chan1 $why $bdword $bdnumber $type
+	}
+}
+next {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set option [lindex [split $arg] 2]
+	set chan1 $chan
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+		nextpublic:process $nick $host $hand $chan $chan1 $option
+	}
+}
+
+helped {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+	set chan1 $chan
+	set type 1
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+	helpedpublic:process $nick $host $hand $chan $chan1 $user $type
+	}
+}
+
+noidle {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+	set chan1 $chan
+	set type 1
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+	noidlepublic:process $nick $host $hand $chan $chan1 $user $type
+	}
+}
+
+skip {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+	set chan1 $chan
+	set type 1
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+						}	
+					}
+	skippublic:process $nick $host $hand $chan $chan1 $user	$type
+				}
+			}		
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 791 - 0
BlackTools2.5/BlackTools/Commands/BT.OwnerCmds.tcl

@@ -0,0 +1,791 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   OWNER CMDS 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                ##
+##					                               ##
+#########################################################################
+
+
+################################ Commands ###################################
+
+################################## die ######################################
+
+proc diepublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "die" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	set reason [join [lrange [split $arg] 0 end]]
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	blacktools:tell $nick $host $hand $chan $chan1 die.1 none
+if {$reason == ""} {
+	set reason $black(say.$getlang.die.2)
+}
+	utimer 3 [list die $reason]		
+}
+
+################################# save ######################################
+
+proc savepublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "save" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	blacktools:tell $nick $host $hand $chan $chan1 save.1 none
+ 	save
+}
+
+################################# jump ######################################
+
+proc jumppublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "jump" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	set server [lindex [split $arg] 0]
+if {$server == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 jump.1 "..."
+ 	utimer 3 [list jump]
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 jump.1 "\002$server\002"
+	utimer 3 [list jump $server]	
+	}
+}
+
+################################ restart ####################################
+
+proc restartpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "restart" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	blacktools:tell $nick $host $hand $chan $chan1 restart.1 none
+	utimer 3 [list restart]
+}
+
+################################ rehash #####################################
+
+proc rehashpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "rehash" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	blacktools:tell $nick $host $hand $chan $chan1 rehash.1 none
+	 rehash
+}
+
+################################ unsuspend ##################################
+
+proc unsuspendpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "unsuspend" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	set chans [lindex [split $arg] 0]
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 gl.instr "unsuspend"
+	return
+}
+
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+ 
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![channel get $chans inactive]} {
+	blacktools:tell $nick $host $hand $chan $chan1 unsuspend.3 $chans
+	return
+}
+	channel set $chans -inactive
+	blacktools:tell $nick $host $hand $chan $chan1 unsuspend.4 $chans
+}
+
+################################ suspend ####################################
+
+proc suspendpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "suspend" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	set chans [lindex [split $arg] 0]
+if {$chans == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "suspend"
+	return
+}
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![validchan $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[channel get $chans inactive]} {
+	blacktools:tell $nick $host $hand $chan $chan1 suspend.3 $chans
+	return
+}
+	channel set $chans +inactive	
+	blacktools:tell $nick $host $hand $chan $chan1 suspend.4 $chans
+}
+
+################################# delchan ###################################
+
+proc delchanpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "delchan" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 0]
+	set chan1 "$chan"
+if {$chans == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delchan"
+	return
+}
+if {![regexp {^[&#]} $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none 
+	return
+} 
+
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {[string equal -nocase $chans $black(homechan)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delchan.5 $chans
+	return
+	}
+}
+	channel remove $chans
+	delchan:all $chans
+	blacktools:tell $nick $host $hand $chan $chan1 delchan.3 $chans
+}
+
+################################# addchan ###################################
+
+proc addchanpublic {nick host hand chan arg} {
+	global black lastbind
+	set cmd_status [btcmd:status $chan $hand "addchan" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chans [lindex [split $arg] 0]
+	set key [lindex [split $arg] 1]
+	set chan1 "$chan"
+if {$chans == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "addchan"
+	return
+}
+
+if {![regexp {^[&#]} $chans]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+} 
+
+if {[validchan $chans]} {
+	blacktools:tell $nick $host $hand $chan $chan1 addchan.2 $chans
+	return
+} else {
+	channel add $chans
+	blacktools:tell $nick $host $hand $chan $chan1 addchan.3 $chans
+if {$key != ""} {
+	putquick "JOIN $chans :$key"
+	channel set $chans chanmode "+ntk $key"
+		}		
+	}
+}	
+
+################################## cp #######################################
+
+proc cppublic {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 $chan
+	set what [lindex [split $arg] 0]
+	set from [lindex [split $arg] 1]
+	set to [lindex [split $arg] 2]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	cp:process $nick $host $hand $chan $chan1 $type $what $from $to
+}
+
+proc cp:process {nick host hand chan chan1 type what from to} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "cp" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set notvalid ""
+if {![regexp {^[&#]} $from] || (![regexp {^[&#]} $to] && ![string equal -nocase $to "all"])} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "cp"
+}
+	return
+}
+
+if {![validchan $from]} {
+	lappend notvalid $from
+}
+if {![validchan $to]} {
+	lappend notvalid $to
+}
+if {$notvalid != ""} {
+	if {[llength $notvalid] > 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.3 $notvalid
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.2 $notvalid
+	}
+	return
+}
+	switch $what {
+	
+	banlist {
+	set counter 0
+if {[llength [blacktools:banlist $from]] < 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.1 $from
+	return
+}
+	set file [open $black(bans_file) "a"]
+	
+	foreach b [blacktools:banlist $from] {
+	set enc_chan [encoding convertto utf-8 $to]
+	set read_type [lindex [split $b] 0]
+	set read_host [lindex [split $b] 2]
+	set read_hand [lindex [split $b] 3]
+	set read_time1 [lindex [split $b] 4]
+	set read_time2 [lindex [split $b] 5]
+	set read_num1 [lindex [split $b] 6]
+	set read_num2 [lindex [split $b] 7]
+	set read_reason [lrange [split $b] 8 end]
+	
+	set return [blacktools:ban:exists $read_host $enc_chan]
+if {$return == "0"} {
+	set counter [expr $counter + 1]
+	puts $file "$read_type [string tolower $enc_chan] [string tolower $read_host] $read_hand $read_time1 $read_time2 $read_num1 $read_num2 $read_reason"
+	}
+}
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 cp.4 "$counter"
+}
+
+userlist {
+	set time [unixtime]
+	set counter 0
+	set total_counter 0
+foreach u [userlist] {
+if {[matchattr $u $black(exceptflags) $from]} {
+	set total_counter [expr $total_counter + 1]
+	set cflags [chattr $u | $from]
+if {![matchattr $cflags $to]} {
+	set counter [expr $counter + 1]
+	chattr $u $cflags $to
+	setuser $u XTRA CHANMODIF($to) $time:cp_from_$from
+			}
+		}
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 cp.5 "$counter $total_counter"
+}
+
+settings {
+	set getflags [get:flags $from]
+	set getstr [get:str $from]
+	set counter 0
+	set file [open $black(extra_file) a]
+foreach flag $getflags {
+	set return [blacktools:flag:exists $to $flag]
+if {$return == "0"} {
+	set counter [expr $counter + 1]
+	puts $file "$to XTRA $flag"
+	}
+}
+foreach str $getstr {
+	set split_str [split $str ":"]
+	set s [lindex $split_str 0]
+	set why [lrange $split_str 1 end]
+	set return [blacktools:flag:exists $to $s]
+if {$return == "0"} {
+	set counter [expr $counter + 1]
+	puts $file "$to XTRA $s $why"
+	}
+}
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 cp.6 "$counter"
+}
+
+	default {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"	
+				}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
+			}
+		}
+	}
+}
+
+############################## status #################################
+
+proc statuspublic {nick host hand chan arg} {
+global black lastbind
+set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	status:process $nick $host $hand $chan
+}
+
+proc status:process {nick host hand chan} {
+	global black botnick server uptime {server-online} countusers version getowner
+	set cmd_status [btcmd:status $chan $hand "status" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+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
+}	
+foreach c [channels] {
+if {![setting:get $c invisible]} {
+	lappend channels $c
+	} else {
+if {[matchattr $hand n]} {
+	lappend channels \002$c\002
+		}
+	}
+}
+	set chan1 "$chan"
+	blacktools:tell $nick $host $hand $chan $chan1 status.1 "$black(name) $black(vers) $version"
+	blacktools:tell $nick $host $hand $chan $chan1 status.4 [join $channels]
+	blacktools:tell $nick $host $hand $chan $chan1 status.5 "[countusers] [userlist n]"
+}
+
+############################## uptime #################################
+
+proc uptimepublic {nick host hand chan arg} {
+global black uptime {server-online} server lastbind
+	set cmd_status [btcmd:status $chan $hand "uptime" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+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 {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set chan1 "$chan"
+	set up [return_time_2 $getlang [expr [unixtime] - $uptime]]
+	set on [return_time_2 $getlang [expr [unixtime] - ${server-online}]]
+	catch {exec uptime} shelluptime
+	set file [open $black(uptime_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data == ""} {
+	set read_maxup "-"
+	set read_maxon "-"
+} else {
+	set read_maxup [return_time_2 $getlang [lindex [split $data] 0]]
+	set read_maxon [return_time_2 $getlang [lindex [split $data] 1]]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 maxup.1 "$up $read_maxup"
+	blacktools:tell $nick $host $hand $chan $chan1 maxon.1 "$on $read_maxon"
+	blacktools:tell $nick $host $hand $chan $chan1 uptime.2 $shelluptime
+	blacktools:tell $nick $host $hand $chan $chan1 uptime.3 $server
+}
+
+################################ chat #################################
+
+proc chatpublic {nick host hand chan arg} {
+global botnick lastbind
+	set cmd_status [btcmd:status $chan $hand "chat" 0]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+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 {[getuser $hand pass] == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 chat.2 none
+	return
+}
+	*ctcp:CHAT $nick $host $hand $botnick CHAT $arg
+	blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
+} 
+
+############################## broadcast ##############################
+
+proc broadcastpublic {nick host hand chan arg} {
+global black lastbind
+	set text [join [lrange [split $arg] 0 end]]	
+	set chan1 "$chan"
+	set type 0
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	broadcast:cmd:process $nick $host $hand $chan $chan1 $text $type
+}
+
+proc broadcast:cmd:process {nick host hand chan chan1 text type} {
+global botnick black
+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 {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "broadcast"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "broadcast"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "broadcast"
+		}
+	}
+	return 0
+}
+
+foreach c [channels] {
+if {![setting:get $c silent]} {
+	putserv "PRIVMSG $c :\[\002BROADCAST\002\] $text"
+		}
+	}
+}
+
+############################## msg ####################################
+
+proc msgpublic {nick host hand chan arg} {
+global black lastbind
+	set who [lindex [split $arg] 0]	
+	set chan1 "$chan"
+	set type 0
+	set msg [join [lrange [split $arg] 1 end]]
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	msg:process $nick $host $hand $chan $chan1 $who $msg $type
+}
+
+proc msg:process {nick host hand chan chan1 who msg type} {
+	global black
+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 {$who == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "msg"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "msg"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "msg"
+		}
+	}
+	return
+}
+
+
+if {[isbotnick $who]} { 
+	return
+}
+	putserv "USERHOST :$who"
+	bind RAW - 302 msg:online:check
+	set ::msgnick $nick
+	set ::hand $hand
+	set ::host $host
+	set ::chan $chan
+	set ::chan1 $chan1
+	set ::type $type
+	set ::msg $msg
+	set ::who $who
+}
+
+proc msg:online:check {from keyword arguments } {
+	global black
+	set msgnick $::msgnick
+	set hand $::hand
+	set host $::host
+	set chan $::chan
+	set chan1 $::chan1
+	set who $::who
+	set msg $::msg
+	
+	set hostname [lindex [split $arguments] 1]
+if {[regexp {\+} $hostname]} {
+	set split_host [split $hostname "+"]
+} else {
+	set split_host [split $hostname "-"]
+}
+	set mask [lindex $split_host 1]
+	set getnick [string map {
+			"=" ""
+			":" ""
+			} [lindex $split_host 0]]
+if {$getnick != ""} {
+if {[matchattr $hand -|A $chan] && [string equal -nocase $who $black(chanserv)]} {
+	check:if:bind "msg:online:check" "302"
+	return
+}
+if {$host != ""} {
+if {[matchattr $hand -|AM $chan] && [onchan $who $chan]} {
+	putserv "PRIVMSG $who :$msg"
+	check:if:bind "msg:online:check" "302"
+	return
+	}
+}
+if {[matchattr $hand mno]} {
+	putserv "PRIVMSG $who :$msg"
+}
+	} else {
+	blacktools:tell $msgnick $host $hand $chan $chan1 gl.notonline "$who"
+}
+	check:if:bind "msg:online:check" "302"
+}
+
+############################### channels ########################
+
+proc channelspublic {nick host hand chan arg} {
+global botnick black lastbind
+	set chan1 "$chan"
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+	return
+}
+	channels:process $nick $host $hand $chan $chan1
+}
+
+proc channels:process {nick host hand chan chan1} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "channels" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+	set num [llength [channels]]
+	set minusers "5"
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+foreach c [channels] {
+if {![setting:get $c invisible]} {
+	set usersnumber [llength [chanlist $c]]
+if {[channel get $c inactive]} {
+if {[info exists black(abuse:$c)]} {
+	lappend message_aschan "[join $c ", "]"
+} else {
+	lappend message_schan "[join $c ", "]"
+}
+} elseif {![onchan $botnick $c]} {
+	lappend message_nchan "[join $c ", "]"	
+} elseif {[onchan $botnick $c] && (![botisop $c]) && ($usersnumber >= $minusers)} {
+	lappend message_ok "[join $c ", "]"
+} elseif {[onchan $botnick $c] && ($usersnumber < $minusers)} {
+	lappend message_nmin "[join $c ", "]"
+}
+if {[botisop $c] && ($usersnumber >= $minusers)} {
+	lappend message_ok "[join @$c ", "]"
+			}
+		} else {
+if {[matchattr $hand n]} {
+	lappend message_inv "[join $c ", "]"
+			}		
+		}
+	}
+
+	blacktools:tell $nick $host $hand $chan $chan1 channels.1 $num
+if {[info exists message_ok]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.3)\]: $message_ok"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_nchan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.4)\]: $message_nchan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_nmin]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.7) < $minusers\]: $message_nmin"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_schan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.5)\]: $message_schan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+if {[info exists message_aschan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.6)\]: $message_aschan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+if {[info exists message_inv]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.8)\]: $message_inv"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+}
+
+############################### nick ##################################
+
+proc nickpublic {nick host hand chan arg} {
+	global black lastbind
+	set thenick [lindex [split $arg] 0]
+	set type 0
+	set chan1 $chan
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	tempnick:process $thenick $nick $host $hand $chan $chan1 $type
+}
+
+proc tempnick:process {thenick tonick host hand chan chan1 type} {
+	global nick lastbind
+	set cmd_status [btcmd:status $chan $hand "nick" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {$thenick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr "nick"
+	}
+	1 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_nick "nick"
+	}
+	2 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_priv "nick"
+		}
+	}
+	return
+}
+	set nick $thenick
+	blacktools:tell $tonick $host $hand $chan $chan1 nick.4 $thenick		
+}
+
+proc nick:process {who newnick host hand chan} {
+global black nick config
+	set chan1 "$chan"
+if {$newnick == ""} {
+	blacktools:tell $who $host $hand $chan $chan1 nick.2 $newnick
+	return
+}
+	blacktools:tell $who $host $hand $chan $chan1 nick.1 $newnick
+	set ::lastnick [config:getinfo $config "set nick \"*\""]
+	set nick [join $newnick]
+	set error [config:save $config "set nick \"*\"" "set nick \"$newnick\""]
+if {$error == "0"} {
+	blacktools:tell $who $host $hand $chan $chan1 nick.3 ""
+	}
+	bind RAW - 432 check:validnickname
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 2089 - 0
BlackTools2.5/BlackTools/Commands/BT.PrvCmds.tcl

@@ -0,0 +1,2089 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#######################   PRIVMSG CMDS 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 command:pubpriv {nick host hand arg} {
+	global black server uptime {server-online} botnick userfile
+	set cmd [lindex [split $arg] 0]
+	set chan [lindex [split $arg] 1]
+	set check_code [join [lrange [split $arg] 2 end]]
+	set chan1 $nick
+	set found_access 0
+	set mychan_use 0
+if {![regexp {^[&#]} $chan]} {
+if {[validuser $hand]} {
+	set mychan [join [string tolower [getuser $hand XTRA MYCHAN]]]
+if {[validchan $mychan] && [matchattr $hand nmo|OVMA $mychan] && ![string equal -nocase $cmd "unbanme"]} {
+	set chan [string tolower $mychan]
+	set mychan_use 1
+		}
+	}
+}
+
+switch [string tolower $cmd] {
+
+report {
+
+	set type 2
+	set what [lindex [split $arg] 2]
+	set message [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set what [lindex [split $arg] 1]
+	set message [join [lrange [split $arg] 2 end]]
+}
+	set chan1 $chan
+if {[matchattr $hand mno|MAO $chan]} {
+	return
+}
+	report:process $nick "prv" $hand $chan $chan1 $type $what $message
+}
+
+idle {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"	
+	set why [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set host [lindex [split $arg] 4]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+	set host [lindex [split $arg] 3]
+}
+	antidle:process $why $type $user "prv" $nick $hand $chan $chan1
+	}
+}
+
+
+link {
+if {[matchattr $hand nmo]} {
+	set type 2
+	set channels [join [lrange [split $arg] 1 end]]
+	set what [lindex [split $arg] 1]
+	set delchan [lindex [split $arg] 2]
+	set chan1 $chan
+	link:process $nick "prv" $hand $chan $chan1 $type $what $channels $delchan
+	}
+}
+
+note {
+	set found_access 0
+foreach c [channels] {
+if {[matchattr $hand nmo|MAOV $c]} {
+	set found_access 1
+	}
+}
+if {$found_access == "1"} {
+	set type 2
+	set chan1 $chan
+	set who [lindex [split $arg] 1]
+	set note [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 2]
+	set user_send [lindex [split $arg] 2]
+	set note_send [join [lrange [split $arg] 3 end]]
+	note:process $nick "prv" $hand $chan $chan1 $who $note $user_send $note_send $number $type
+	}
+}
+
+q {
+if {[matchattr $hand nmo|MAOV $chan]} {
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set next [lindex [split $arg] 2]
+	set quote [join [lrange [split $arg] 1 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 2]
+	set quote [join [lrange [split $arg] 1 end]]
+}
+if {[regexp {^[\[]} $who]} {
+	set who [lindex [split $arg] 2]
+	set quote [join [lrange [split $arg] 1 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 1 end]]
+		}
+	}
+} else {
+	set who [lindex [split $arg] 2]
+	set next [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+}
+if {[regexp {^[\[]} $who]} {
+	set who [lindex [split $arg] 3]
+	set quote [join [lrange [split $arg] 2 end]]
+if {$who == "*"} {
+	set who [lindex [split $arg] 4]
+	set quote [join [lrange [split $arg] 2 end]]
+		}
+	}
+}
+	set type 2
+	set chan1 $chan
+if {$mychan_use == "1"} {
+	quote:process $nick "prv" $hand $chan $chan1 $type $who $quote [lrange [split $arg] 1 end] $next
+	} else {
+	quote:process $nick "prv" $hand $chan $chan1 $type $who $quote [lrange [split $arg] 2 end] $next
+		}
+	}
+}
+
+check {
+if {![validchan $chan]} {
+	return
+}
+if {[setting:get $chan securemode] == "0"} {
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+	
+if {![info exists black(securecode:$nick:$chan)]} {
+	return
+}
+	set chanmode [getchanmode $chan]
+if {[string match -nocase "*D*" $chanmode] && [string match -nocase "*m*" $chanmode]} {
+if {[string equal -nocase $check_code $black(securecode:$nick:$chan)]} {
+		set lang [setting:get $chan lang]
+if {$lang == ""} { set lang [string tolower $black(default_lang)] }
+if {[setting:get $chan xonly]} {
+	putserv "PRIVMSG $black(chanserv) :voice $nick $chan"
+	set replace(%chan%) $chan
+	set replace(%msg.1%) $nick
+	set message [string map [array get replace] $black(say.$lang.securemode.2)]
+	putserv "PRIVMSG $nick :$message"
+if {[info exists black(secure:$chan:allowlist)]} {
+if {[lsearch -exact [string tolower $black(secure:$chan:allowlist)]  [string tolower $host]] < 0} {
+	lappend black(secure:$chan:allowlist) $host
+	}
+} else { lappend black(secure:$chan:allowlist) $host }
+		} else {
+	putserv "MODE $chan +v $nick"
+	set replace(%chan%) $chan
+	set replace(%msg.1%) $nick
+	set message [string map [array get replace] $black(say.$lang.securemode.2)]
+	putserv "PRIVMSG $nick :$message"
+if {[info exists black(secure:$chan:allowlist)]} {
+if {[lsearch -exact [string tolower $black(secure:$chan:allowlist)]  [string tolower $host]] < 0} {
+	lappend black(secure:$chan:allowlist) $host
+						}
+					} else { lappend black(secure:$chan:allowlist) $host }
+if {[info exists black(securecode:$nick:$chan)]} {
+	unset black(securecode:$nick:$chan)
+				}
+if {[lsearch -exact [string tolower $black(secure:$chan:list)]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower $black(secure:$chan:list)] [string tolower $nick]]
+	set black(secure:$chan:list) [lreplace $black(secure:$chan:list) $position $position]
+				}
+			}
+		}
+	}
+}
+
+voiceme {
+if {![validchan $chan]} {
+	return
+}
+if {![setting:get $chan voiceme]} {
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+if {![onchan $nick $chan]} {
+	return
+}
+
+if {[isop $nick $chan] || [isvoice $nick $chan]} {
+	return
+}
+
+if {[setting:get $chan onlyonmode] && ![info exists black(voiceme:stat:$chan)]} {
+	return
+}
+if {[isvoice $nick $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 voiceme.4 none
+	return
+}
+	putserv "WHOIS $nick"
+	set ::vnick $nick
+	set ::vchan $chan
+	set ::vhand $hand
+	bind RAW - 330 voiceme:logged
+	bind RAW - 307 voiceme:identified
+}
+
+unbanme {
+
+if {![regexp {^[&#]} $chan]} {
+	return
+}
+
+if {![validchan $chan]} {
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+	set found_ban 0
+foreach b [blacktools:banlist $chan] {
+	set read_chan [lindex [split $b] 2]
+if {[string equal -nocase $read_chan $chan]} {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $read_host]
+if {[string match -nocase $real_read_host "$nick!$host"] || [string match -nocase "$nick!$host" $real_read_host]} {
+	set read_bot [lindex [split $b] 7]
+if {$read_bot == 3} {
+	set found_ban 1
+			}
+		}
+	}
+}
+
+if {$found_ban == "0"} {
+	return
+}
+	set code [join [lrange [split $arg] 2 end]]
+
+if {$code == ""} {
+	set black(botcode:$chan) [string toupper [bot:setcode]]
+	blacktools:tell $nick "prv" $hand $chan $chan1 bot.6 $black(botcode:$chan)
+foreach tmr [utimers] {
+if {[string match "*unset black(botcode:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}	
+		}
+	utimer 60 [list unset black(botcode:$chan)]
+	return
+}
+
+if {![info exists black(botcode:$chan)]} {
+	return
+}
+if {[string equal -nocase $code $black(botcode:$chan)]} {
+foreach b [blacktools:banlist $chan] {
+	set read_chan [lindex [split $b] 2]
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $read_host]
+if {[string match -nocase $real_read_host "$nick!$host"]} {
+	set read_bot [lindex [split $b] 7]
+if {$read_bot == 3} {
+if {[ischanban $read_host $chan] && [botisop $chan]} {
+	pushmode $chan -b $read_host
+							}
+if {[setting:get $chan xonly] || [setting:get $chan xtools]} {
+	putquick "PRIVMSG $black(chanserv) :unban $chan $read_host"
+						}
+	blacktools:auto:remove $read_host $chan
+	blacktools:tell $nick "prv" $hand $chan $chan1 bot.7 none
+				}
+			}
+		}
+	}
+}
+
+enable {
+if {[matchattr $hand nmo|M $chan]} {
+	set what [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set what [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+}
+	set chan1 "$chan"
+	set type "2"
+	enable:process $nick "prv" $hand $chan $chan1 $type $what $user
+	}
+}
+
+disable {
+if {[matchattr $hand nmo|M $chan]} {
+	set what [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set what [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+}
+	set chan1 "$chan"
+	set type "2"
+	disable:process $nick "prv" $hand $chan $chan1 $type $what $user
+	}
+}
+
+dr {
+if {[matchattr $hand nmo|OSMA $chan]} {
+	set drone [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set drone [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $drone $nick $hand "prv" $chan $chan1 $type $black(dr:bantime) "dr" "" "0"
+	}
+}
+
+bot {
+if {[matchattr $hand nmo|OSMA $chan]} {
+	set bot [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set bot [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $bot $nick "$hand:bot" "prv" $chan $chan1 $type $black(bot:bantime) "bot" "" "0"
+	}
+}
+
+n {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badnick [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set badnick [lindex [split $arg] 1]
+}
+	set type 0
+	set chan1 "$chan"
+	
+if {[setting:get $chan nextshortcmd]} {
+	nextpublic:process $nick "prv" $hand $chan $chan1 $badnick
+	return
+}
+
+if {[regexp {\*} $badnick]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "n"
+	return
+}
+if {$badnick == ""} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "n"
+	return
+		}
+	bancmds:process $badnick $badnick $nick $hand "prv" $chan $chan1 $type $black(n:bantime) "n" "" "0"
+	}
+}
+
+id {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badident [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set badident [lindex [split $arg] 1]
+}
+	set handle [nick2hand $badident]
+	set type 2
+	set chan1 "$chan"
+	userhost:act $badident $nick $hand "prv" $chan $chan1 $type $black(id:bantime) "id" "" "0"
+	}
+}
+
+spam {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set spammer [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set spammer [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $spammer $nick $hand "prv" $chan $chan1 $type $black(spam:bantime) "spam" "" "0"
+	}
+}
+
+
+bw {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set badw [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set badw [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $badw $nick $hand "prv" $chan $chan1 $type $black(bw:bantime) "bw" "" "0"
+	}
+}
+
+black {
+if {[matchattr $hand nmo|MA $chan]} {
+	set blackb [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set blackb [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $blackb $nick $hand "prv" $chan $chan1 $type "0" "black" $reason "0"
+	}
+}
+
+bl {
+if {[matchattr $hand nmo|MA $chan]} {
+	set blackb [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set blackb [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set type 2
+	set chan1 "$chan"
+	userhost:act $blackb $nick $hand "prv" $chan $chan1 $type "0" "black" $reason "0"
+	}
+}
+
+b {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set no_chan 0
+	set type 2
+	set gl 0
+	set link 0
+	set chan1 "$chan"
+	set level ""
+	set b [lindex [split $arg] 2]
+	set tm [lindex [split $arg] 3]
+	set global [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+}
+if {![regexp {^[&#]} $chan]} {
+	set no_chan 1
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+	}	
+}
+if {$mychan_use == "1"} {
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+}
+if {[regexp {^[-]} $tm]} {
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 4 end]]
+	set tm [lindex [split $arg] 3]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+			} 
+} elseif {[string equal -nocase "$global" "link"] && [matchattr $hand nm]} {
+	set link 1
+	set tm [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+			}
+if {$no_chan == "1"} {
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+			}
+		}				
+	} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+	} else {
+	set reason [join [lrange [split $arg] 3 end]]
+		}
+	}
+} else {
+if {[regexp {^[-]} $tm]} {
+	set level [blacktools:check:levelban $hand $chan $tm]
+	set reason [join [lrange [split $arg] 5 end]]
+	set tm [lindex [split $arg] 4]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+		} 
+} elseif {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+	set gl 1
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+			}
+if {$no_chan == "1"} {
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+		}
+	}			
+} elseif {[string equal -nocase "$global" "link"] && [matchattr $hand nm]} {
+	set link 1
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 5 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 4 end]]
+			}
+if {$no_chan == "1"} {
+	set b [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+	set global [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set global [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+			}
+		}				
+	} else {
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+	} else {
+	set reason [join [lrange [split $arg] 4 end]]
+		}
+	}
+}
+	
+if {[setting:get $chan nextshortcmd]} {
+	noidlepublic:process $nick "prv" $hand $chan $chan1 $b 0
+	return
+}
+
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $b]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 b.6 none
+	return
+}
+if {$return_time == "-1"} {
+	set return_time $black(b:bantime)
+}
+if {[llength $level] > "1"} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.invalidlevel [string map {"0" ""} $level]
+	return
+}
+	
+if {$level != ""} {
+	userhost:act $b $nick "$hand:$level" "prv" $chan $chan1 $type $return_time "b" $reason $gl
+} else {
+if {$link == "1"} {
+	foreach c [link:get] {
+	userhost:act $b $nick "$hand" "prv" $c $chan1 $type $return_time "b" $reason "2"
+	}
+	return
+}
+	userhost:act $b $nick "$hand" "prv" $chan $chan1 $type $return_time "b" $reason $gl
+		}
+	}
+}
+
+stick {
+if {[matchattr $hand nmo|M $chan]} {
+	set stickb [lindex [split $arg] 2]
+	set tm [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set stickb [lindex [split $arg] 1]
+	set tm [lindex [split $arg] 2]
+}
+	set return_time [time_return_minute $tm]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set reason [join [lrange [split $arg] 2 end]]
+	}
+} else {
+	set tm [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 4 end]]
+if {$mychan_use == "1"} {
+	set tm [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 3 end]]
+	}
+}
+	set type 2
+	set chan1 "$chan"
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $hand -|OS $stickb]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 b.6 none
+	return
+}
+
+if {$return_time == "-1"} {
+	set return_time $black(stick:bantime)
+}
+	userhost:act $stickb $nick $hand "prv" $chan $chan1 $type $return_time "stick" $reason "0"
+	}
+}
+
+ub {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set ban [lindex [split $arg] 1]
+	set why [lindex [split $arg] 2]
+if {[regexp {^[&#]} $ban]} { 
+	set ban [lindex [split $arg] 2]
+	set why [lindex [split $arg] 3]
+}
+	set type 2
+	set chan1 "$chan"
+if {[regexp {^[0-9]} $ban]} {
+	set cmd "ub:id"
+} else {
+	set cmd "ub"
+}
+if {[string equal -nocase $why "global"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand "prv" $chan $chan1 $type "1" $cmd "" ""
+} elseif {[string equal -nocase $why "link"] && [matchattr $hand nm]} {
+	ub:process $ban $ban $nick $hand "prv" $chan $chan1 $type "" "ub" "" "1"
+} else {
+	ub:process $ban $ban $nick $hand "prv" $chan $chan1 $type "" $cmd "" ""
+		}
+	}
+}
+
+k {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set knick [lindex [split $arg] 2]
+	set type 2
+	set reason [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set knick [lindex [split $arg] 1]
+	set reason [join [lrange [split $arg] 2 end]]
+}
+	set handle [nick2hand $knick]
+	set chan1 "$chan"
+if {$knick != ""} {
+	k:process $knick $nick $hand "prv" $reason $chan $chan1 $type
+		} else {k:process $knick $nick $hand "prv" $reason $chan $chan1 $type}
+	}
+}
+
+w {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set wnick [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set wnick [lindex [split $arg] 1]
+}
+	set type 2
+	set handle [nick2hand $wnick]
+	set chan1 "$chan"
+if {$wnick != ""} {
+	w:process $wnick $nick $hand "prv" $chan $chan1 $type
+		} else { w:process $wnick $nick $hand "prv" $chan $chan1 $type }
+	}
+}
+
+ungag {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set gagger [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set gagger [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+if {$gagger != ""} {
+	ungag:process $gagger $nick $hand "prv" $chan $chan1 $type
+	} else { ungag:process $gagger $nick $hand "prv" $chan $chan1 $type }
+	}
+}
+
+gag {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set gagger [lindex [split $arg] 2]
+	set time [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 4 end]]
+if {$mychan_use == "1"} {
+	set gagger [lindex [split $arg] 1]
+	set time [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 3 end]]
+}
+	set type 2
+	set handle [nick2hand $gagger]
+	set chan1 "$chan"
+	set return_time [time_return_minute $time]
+if {$return_time == "-1"} {
+	set reason [join [lrange [split $arg] 3 end]]
+	set time [setting:get $chan gag-bantime]
+if {$time == ""} {
+	set time $black(gag:bantime)
+	}
+}
+
+if {$gagger != ""} {
+	gag:process $gagger $time $reason $nick "$hand:GAG" "prv" $chan $chan1 $type
+		} else { gag:process $gagger $time $reason $nick $hand "prv" $chan $chan1 $type }
+	}
+}
+
+show {
+if {[matchattr $hand nmo|M $chan]} {
+	set wich [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set wich [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	show:process $nick "prv" $hand $chan $chan1 $wich $type
+	}
+}
+
+clonescan {
+if {[matchattr $hand nmo|MA $chan]} {
+	set why [lindex [split $arg] 2]
+	set type 2
+	set chan1 "$chan"
+if {[regexp {^[&#]} $chan] && [matchattr $hand nmo|M $chan] && ($why != "")} {
+	set chan1 "$chan"
+	set clone [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+	prot:module:process $nick "prv" $hand $chan $chan1 $chan $clone $type $number "clonescan"
+	return
+		}
+	scanner:process $nick "prv" $hand $chan $chan1 $type
+	}
+}
+
+sb {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set bhost [lindex [split $arg] 2]
+	set what [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set bhost [lindex [split $arg] 1]
+	set what [lindex [split $arg] 2]
+}
+	set type 2
+	set chan1 "$chan"
+if {$bhost != ""} {
+if {[regexp {^[0-9]} $bhost]} {
+	sb:process $bhost $what $nick $hand "prv" $chan $chan1 $type "sb" "2"
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {[onchan $bhost $chan]} {
+	set bhost "$bhost![getchanhost $bhost $chan]"
+	sb:process $bhost $what $nick $hand "prv" $chan $chan1 $type "sb" "1"
+	return
+}
+
+if {[regexp {\*} $bhost]} {
+	sb:process $bhost $what $nick $hand "prv" $chan $chan1 $type "sb" "1"
+	return
+}
+	sb:process $bhost $what $nick $hand "prv" $chan $chan1 $type "sb" ""
+
+		} else { sb:process $bhost $what $nick $hand "prv" $chan $chan1 $type "sb" ""}
+	}
+}
+
+banlist {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set user [lindex [split $arg] 2]
+	set next [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+	set next [lindex [split $arg] 2]
+}
+if {[string equal -nocase $chan "global"]} {
+	set user $chan
+}
+	set type 2
+	set chan1 "$chan"
+	banlist:process $nick "prv" $hand $chan $chan1 $user $type "banlist" $next
+	}
+}
+
+r {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set c [lindex [split $arg] 1]
+	set chan1 $chan
+if {$c != "" && [matchattr $hand nmo|AMO $c]} {
+	topic:refresh $nick "prv" $hand $c $chan1 $arg
+	return
+}
+	topic:refresh $nick "prv" $hand $chan $chan1 $arg
+	}
+}
+
+egg {
+if {[matchattr $hand nm]} {
+	set why [lindex [split $arg] 1]
+	set type2 2
+	set result [join [lrange [split $arg] 2 end]]
+	egg:process $why $type2 $result $nick $hand "prv" $chan $chan1
+	}
+}
+
+man {
+if {[matchattr $hand nmo|MASOV $chan]} {
+	set command [lindex [split $arg] 1]
+	set type 0
+	man:process $nick $host $hand $chan $chan1 $type $command
+	}
+}
+
+auto {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 0
+	set option [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+	set gl [lindex [split $arg] 4]
+if {$mychan_use == "1"} {
+	set option [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+	set gl [lindex [split $arg] 3]
+}
+	auto:process $nick "prv" $hand $chan $chan1 $user $option $gl $type 
+	}
+}
+
+version {
+if {[matchattr $hand nmo|MASOV $chan]} {
+	version:process $nick $host $hand $chan $chan1
+	}
+}
+
+seen {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set type 2
+if {[matchattr $hand nmo]} {
+	set s [lindex [split $arg] 1]
+if {[regexp {^[&#]} $s]} {
+	set s [lindex [split $arg] 2]
+	}
+		} else {
+if {![regexp {^[&#]} $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "seen"
+	return
+}
+	set s [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set s [lindex [split $arg] 1]
+	}
+}
+	seen:process $nick "$host:prv" $hand $chan $chan1 $s $type
+	}
+}
+
+channels {
+if {[matchattr $hand nmo]} {
+	set chan1 "$nick"
+	channels:process $nick "prv" $hand $chan $chan1
+	}
+}
+
+userlist {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set type 2
+	set chan1 $nick
+	set level [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set level [lindex [split $arg] 1]
+}
+if {[string equal -nocase $chan "owner"] && [matchattr $hand nmo]} {
+	userlist:execute $hand "prv" $chan $chan $chan1 $nick $type
+	return
+}
+	userlist:execute $hand "prv" $level $chan $chan1 $nick $type
+	}
+}
+
+chuser {
+if {[matchattr $hand nmo|M $chan]} {
+	set user [lindex [split $arg] 1]
+	set chandle [lindex [split $arg] 2]
+	set type 2
+	set chan1 "$nick"
+	chuser:process $nick "prv" $hand $chan $chan1 $user $chandle $type
+	}
+}
+
+securemode {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set except [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set except [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+		}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $except $type $number "securemode"
+	}
+}
+
+delhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	set user [lindex [split $arg] 1]
+	set type 2
+	set chan1 "$chan"
+	set hosts [join [lrange [split $arg] 2 end]]
+	delhost:process $nick "prv" $hand $chan $chan1 $user $hosts $type
+	}
+}
+
+addhost {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set user [lindex [split $arg] 1]
+	set hosts [join [lrange [split $arg] 2 end]]
+	addhost:process $nick "prv" $hand $chan $chan1 $user $hosts $type
+	}
+}
+
+del {
+if {[matchattr $hand nmo|M $chan]} {
+	set args [lrange [split $arg] 1 end]
+	set type 2
+	set chan1 "$chan"
+	del:process $nick "prv" $hand $chan $chan1 $args $type
+	}
+}
+
+delacc {
+if {[matchattr $hand nmo|MA $chan]} {
+	set args [lrange [split $arg] 2 end]
+if {$mychan_use == "1"} {
+	set args [lrange [split $arg] 1 end]
+}
+	set type 2
+	set chan1 "$chan"
+foreach user $args {
+	delacc:process $nick "prv" $hand $chan $chan1 $user $type
+		}
+	}
+}
+
+
+add {
+if {[matchattr $hand nmo|MA $chan]} {
+	set level [lindex [split $arg] 2]
+	set type 2
+	set args [lrange [split $arg] 3 end]
+	set c [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set level [lindex [split $arg] 1]
+	set args [lrange [split $arg] 2 end]
+	set c [lindex [split $arg] 2]
+}
+	set chan1 "$chan"
+	set handle ""
+	set uhost ""
+if {$args != ""} {
+foreach user $args {
+if {$user != ""} {
+if {![regexp  {^[a-zA-Z0-9]} $user]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 add.18 none
+	continue
+}
+	add:process $user $uhost $handle $level $hand "prv" $chan $chan1 $nick $type "add"
+				}
+			}
+		} else {  add:process "" $uhost $handle $level $hand "prv" $chan $chan1 $nick $type "add" }	
+	}
+}
+
+adduser {
+if {[matchattr $hand nmo|MA $chan]} {
+	set level [lindex [split $arg] 2]
+	set args [lrange [split $arg] 3 end]
+	set c [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set level [lindex [split $arg] 1]
+	set args [lrange [split $arg] 2 end]
+	set c [lindex [split $arg] 2]
+}
+	set type 2
+	set chan1 "$chan"
+if {$args != ""} {
+foreach user $args {
+if {$user != ""} {
+	set handle [nick2hand $user]
+if {![onchan $user $chan] && ![validuser $user]} { 
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.usernotonchan $user
+	return
+}
+	set hosts [getchanhost $user $chan]
+	set uhost [return_mask $black(addusermask) $hosts $user]
+	add:process $user $uhost $handle $level $hand "prv" $chan $chan1 $nick $type "adduser"
+				}
+			}
+		} else { add:process "" "" "" $level $hand "prv" $chan $chan1 $nick $type "adduser" }
+	}
+}
+
+suspend {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "suspend" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+if {$chan == ""} {blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "suspend"
+	return
+}
+if {![regexp {^[&#]} $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![validchan $chan]} { blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[channel get $chan inactive]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 suspend.3 $chan
+	return
+}
+	channel set $chan +inactive	
+	blacktools:tell $nick "prv" $hand $chan $chan1 suspend.4 $chan
+	}
+}
+
+unsuspend {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "unsuspend" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+if {$chan == ""} {blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "unsuspend"
+	return
+}
+
+if {![regexp {^[&#]} $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+ 
+if {![validchan $chan]} { blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![channel get $chan inactive]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 unsuspend.3 $chan
+	return
+}
+	channel set $chan -inactive
+	blacktools:tell $nick "prv" $hand $chan $chan1 unsuspend.4 $chan
+	}
+}
+
+delchan {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "delchan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+if {$chan == ""} {blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "delchan"
+	return
+}
+if {![regexp {^[&#]} $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none 
+	return
+} 
+
+if {![validchan $chan]} { blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {[string equal -nocase $chan $black(homechan)]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 delchan.5 $chan
+	return
+	}
+}
+	channel remove $chan
+	delchan:all $chan
+	blacktools:tell $nick "prv" $hand $chan $chan1 delchan.3 $chan
+	}
+}
+
+addchan {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "addchan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set key [lindex [split $arg] 2]
+	set chan1 "$chan"
+if {$chan == ""} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.instr_priv "addchan"
+	return
+}
+
+if {![regexp {^[&#]} $chan]} {	
+	blacktools:tell $nick "prv" $hand $chan $chan1 gl.novalidchan none
+	return
+} 
+
+if {[validchan $chan]} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 addchan.2 $chan
+	return
+} else {
+	channel add $chan
+	blacktools:tell $nick "prv" $hand $chan $chan1 addchan.3 $chan
+if {$key != ""} {
+	putquick "JOIN $chan :$key"
+	channel set $chan chanmode "+ntk $key"
+			}		
+		}
+	}
+}
+
+die {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "die" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	set reason [join [lrange [split $arg] 1 end]]
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	blacktools:tell $nick "prv" $hand $chan $chan1 die.1 none
+if {$reason == ""} {
+	set reason $black(say.$getlang.die.2)
+}
+	utimer 3 [list die $reason]
+	}
+}
+
+jump {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "jump" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+set chan1 "$chan"
+set serv [lindex [split $arg] 1]
+if {$serv == ""} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 jump.1 "..."
+	utimer 3 [list jump]
+} else {
+	blacktools:tell $nick "prv" $hand $chan $chan1 jump.1 "\002$serv\002"
+	utimer 3 [list jump $serv]
+		}	
+	}
+}
+
+save {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "save" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick "prv" $hand $chan $chan1 save.1 none
+	save
+	}
+}
+
+restart {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "restart" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick "prv" $hand $chan $chan1 restart.1 none
+	utimer 3 [list restart]
+	}
+}
+
+
+rehash {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "rehash" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 "$chan"
+	blacktools:tell $nick "prv" $hand $chan $chan1 rehash.1 none
+	rehash
+	}
+}
+
+nick {
+if {[matchattr $hand nm]} {
+	set thenick [lindex [split $arg] 1]
+	set chan1 $chan
+	set type 2
+	tempnick:process $thenick $nick "prv" $hand $chan $chan1 $type
+	}
+}
+
+msg {
+if {[matchattr $hand nmo]} {
+	set who [lindex [split $arg] 1]	
+	set chan1 "$chan"
+	set type 2
+	set msg [join [lrange [split $arg] 2 end]]
+	msg:process $nick "prv" $hand $chan $chan1 $who $msg $type
+	}
+}
+
+set {
+if {[matchattr $hand nmo|M $chan]} {
+	set flags [lindex [split $arg] 2]
+	set type [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set flags [lindex [split $arg] 1]
+	set type [join [lrange [split $arg] 2 end]]
+}
+	set type1 2
+	set chan1 "$chan"
+if {[matchattr $hand mn]} {
+if {[string equal -nocase "global" $chan]} {
+	set chan "$flags"
+	foreach c [channels] {
+	set:process $nick "prv" $hand $c $chan1 $flags $type $type1	
+		}
+		return
+			}
+		}
+	set:process $nick "prv" $hand $chan $chan1 $flags $type $type1
+	}
+}
+
+
+mode {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set modes [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set modes [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	mode:process $nick "prv" $hand $chan $chan1 $modes $type
+	}
+}
+
+cycle {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set reason [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set reason [join [lrange [split $arg] 1 end]]
+}
+	set chan1 "$chan"
+	cycle:process $nick "prv" $hand $chan $chan1 $reason
+	}
+}
+
+purge {
+if {[matchattr $hand -|M $chan]} {
+	set reason [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set reason [join [lrange [split $arg] 1 end]]
+}
+	set chan1 "$chan"
+if {$reason == ""} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 purge.1 none
+	return
+}
+	purge:process $nick "prv" $hand $chan $chan1 $reason
+	}
+}
+
+broadcast {
+if {[matchattr $hand nm]} {
+	set text [join [lrange [split $arg] 2 end]]	
+	set chan1 "$chan"
+	set type 2
+	broadcast:cmd:process $nick "prv" $hand $chan $chan1 $text $type
+	}
+}
+
+act {
+if {[matchattr $hand nmo|MA $chan]} {
+	set text [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set text [join [lrange [split $arg] 1 end]]
+	set c [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	act:process $nick "prv" $hand $chan $chan1 $text $type
+	}
+}
+
+say {
+if {[matchattr $hand nmo|MA $chan]} {
+	set text [join [lrange [split $arg] 2 end]]
+	set c [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set text [join [lrange [split $arg] 1 end]]
+	set c [lindex [split $arg] 1]
+}
+	set type 2
+	set chan1 "$chan"
+	say:process $nick "prv" $hand $chan $chan1 $text $type
+	}
+}
+
+v {
+if {[matchattr $hand nmo|VOMA $chan]} {
+	set voicex [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set voicex [join [lrange [split $arg] 1 end]]
+}
+	set chan1 "$chan"
+	v:process [split $nick] "prv" $hand $chan $chan1 $voicex
+	}
+}
+
+ho {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set hopex [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set hopex [join [lrange [split $arg] 1 end]]
+}
+	set chan1 "$chan"
+	ho:process $nick "prv" $hand $chan $chan1 $hopex
+	}
+}
+
+o {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set opex [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set opex [join [lrange [split $arg] 1 end]]
+}
+	set chan1 "$chan"
+	o:process $nick "prv" $hand $chan $chan1 $opex
+	}
+}
+
+private {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set user [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set user [lindex [split $arg] 2]
+}
+	private:process $nick "prv" $hand $chan $chan1 $why $user $type
+	}
+}
+
+myset {
+	foreach c [channels] {
+if {[matchattr $hand nmo|AOMV $c]} {
+	set chan $c
+	}
+}
+
+if {[regexp {^[&#]} $chan] && [validuser $hand]} {
+	set type 2
+	set chan1 "$chan"	
+	set flags [lindex [split $arg] 1]
+	set typez [lindex [split $arg] 2]
+	set chan2 [lindex [split $arg] 3]
+	set arg [join [lrange [split $arg] 2 end]]
+	myset:process $nick "prv" $hand $chan $chan1 $flags $typez $type $chan2 $arg
+	}
+}
+
+uptime {
+if {[matchattr $hand nmo]} {
+	set cmd_status [btcmd:status $chan $hand "uptime" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {[matchattr $hand q]} { blacktools:tell $nick "prv" $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick "prv" $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set chan1 "$chan"
+	set up [return_time_2 $getlang [expr [unixtime] - $uptime]]
+	set on [return_time_2 $getlang [expr [unixtime] - ${server-online}]]
+	catch {exec uptime} shelluptime
+	set file [open $black(uptime_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data == ""} {
+	set read_maxup "-"
+	set read_maxon "-"
+} else {
+	set read_maxup [return_time_2 $getlang [lindex [split $data] 0]]
+	set read_maxon [return_time_2 $getlang [lindex [split $data] 1]]
+}
+	blacktools:tell $nick "prv" $hand $chan $chan1 maxup.1 "$up $read_maxup"
+	blacktools:tell $nick "prv" $hand $chan $chan1 maxon.1 "$on $read_maxon"
+	blacktools:tell $nick "prv" $hand $chan $chan1 uptime.2 $shelluptime
+	blacktools:tell $nick "prv" $hand $chan $chan1 uptime.3 $server
+	}
+}
+
+status {
+if {[matchattr $hand nmo]} {
+	status:process $nick "prv" $hand $chan
+	}
+}
+
+t {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set topics [join [lrange [split $arg] 2 end]]
+if {$mychan_use == "1"} {
+	set topics [join [lrange [split $arg] 1 end]]
+}
+	set type 2
+	set chan1 "$chan"
+	t:process $nick "prv" $hand $chan $chan1 $topics $type
+	}
+}
+
+tcl {
+if {[matchattr $hand n]} {
+	set type 2
+	set chan1 "$chan"
+	set the_script [lindex [split $arg] 2]
+	set who [lindex [split $arg] 1]
+	tcl:process $nick "prv" $hand $chan $chan1 $type $the_script $who
+	}
+}
+
+anunt {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set who [lindex [split $arg] 2]
+	set message [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set message [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	anunt:process $nick "prv" $hand $chan $chan1 $who $message $number $type
+	}
+}
+
+h {
+if {[matchattr $hand nmo|MOAV $chan]} {
+	set chan1 "$chan"
+	set type 2
+	set command [lindex [split $arg] 1]
+if {[regexp {^[&#]} $command]} {
+	set chan $command
+	set command [lindex [split $arg] 2]
+}
+	h:process $nick "prv" $hand $chan $chan1 $command $type
+	}
+}
+
+cp {
+if {[matchattr $hand nm]} {
+	set type 2
+	set chan1 $chan
+	set what [lindex [split $arg] 1]
+	set from [lindex [split $arg] 2]
+	set to [lindex [split $arg] 3]
+	cp:process $nick "prv" $hand $chan $chan1 $type $what $from $to
+	}
+}
+
+banstats {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set next [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 1]
+}
+	set cmd ""
+	set type 2
+	set chan1 "$chan"
+if {[string equal -nocase $next "reset"]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 2]
+}
+	set cmd "total"
+}
+	banstats:process $nick "prv" $hand $chan $chan1 $cmd $type $next
+	}
+}
+
+troll {
+if {[matchattr $hand nmo|AOM $chan]} {
+	set tr [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set tr [lindex [split $arg] 1]
+}
+	set chan1 "$chan"
+	set type 2
+	userhost:act $tr $nick $hand "prv" $chan $chan1 $type "1440" "troll" "" "0"
+	}
+}
+
+limit {
+if {[matchattr $hand nmo|M $chan]} {
+	set why [lindex [split $arg] 1]
+	set lm [lindex [split $arg] 2]
+	set type 2
+	set chan1 "$chan"
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 2]
+	set lm [lindex [split $arg] 3]
+		}
+	limit:process $nick "prv" $hand $chan $chan1 $why $lm $type
+	}
+}
+
+bt {
+if {[matchattr $hand nm]} {
+	set chan1 "$chan"
+	set type 2
+	set who [lindex [split $arg] 1]
+	set message [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+	broadcast:process $nick "prv" $hand $chan $chan1 $who $message $number $type
+	}
+}
+
+us {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set users [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set users [lindex [split $arg] 1]
+}
+	us:process $nick "prv" $hand $chan $chan1 $users $type
+	}
+}
+
+s {
+if {[matchattr $hand nmo|MA $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set user [lindex [split $arg] 2]
+	set suspend_time [lindex [split $arg] 3]
+	set suspend_reason [join [lrange [split $arg] 4 end]]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+	set suspend_time [lindex [split $arg] 2]
+	set suspend_reason [join [lrange [split $arg] 3 end]]
+}
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_reason [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set suspend_reason [join [lrange [split $arg] 2 end]]
+			}
+		}
+	s:process $nick "prv" $hand $chan $chan1 $user $type $suspend_time $suspend_reason
+	}
+}
+
+guestnick {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "guestnick"
+	set type 2
+	set chan1 $chan
+	set gnick [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set gnick [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	guestnick:process $nick "prv" $hand $chan $chan1 $who $gnick $type $number $modul
+	}
+}
+
+badhost {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badh [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badh [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badh $type $number "badhost"
+	}
+}
+
+badrealname {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badf [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badf [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badf $type $number "badrealname"
+	}
+}
+
+badquitpart {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badq [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badq [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badq $type $number "badquitpart"
+	}
+}
+
+badident {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badi [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badi [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badi $type $number "badident"
+	}
+}
+
+badnick {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badn [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badn [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badn $type $number "badnick"
+	}
+}
+
+badword {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set badw [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set badw [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $badw $type $number "badword"
+	}
+}
+
+info {
+if {[matchattr $hand nmo|MAOV $chan]} {
+	set user [lindex [split $arg] 2]
+	set infouser [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+	set infouser [lindex [split $arg] 1]
+}
+if {![regexp {^[&#]} $chan]} {
+	set user $chan
+	}
+	set type 2
+	set chan1 "$chan"
+if {[regexp {^[&#]} $chan] && [matchattr $hand nmo|MAO $chan] && ($infouser == "")} {
+	info:process:chan $nick "prv" $hand $chan $chan1
+	return
+		}
+	info:process $nick "prv" $hand $chan $chan1 $user $type
+	}
+}
+
+antipub {
+if {[matchattr $hand nmo|M $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set why [lindex [split $arg] 2]
+	set except [join [lrange [split $arg] 3 end]]
+	set number [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set except [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	prot:module:process $nick "prv" $hand $chan $chan1 $why $except $type $number "antipub"
+	}
+}
+
+badchan {
+if {[matchattr $hand nmo|M $chan]} {
+	set why [lindex [split $arg] 2]
+	set type1 2
+	set chan1 "$chan"
+	set bdchan [lindex [split $arg] 3]
+	set type [lindex [split $arg] 4]
+	set reason [join [lrange [split $arg] 4 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 5 end]]
+	}
+if {$mychan_use == "1"} {
+	set why [lindex [split $arg] 1]
+	set bdchan [lindex [split $arg] 2]
+	set type [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 3 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 4 end]]
+	}
+}
+if {![regexp {^[&#]} $chan] && [matchattr $hand nmo]} {
+	set why $chan
+	set bdchan [lindex [split $arg] 2]
+	set type [lindex [split $arg] 3]
+	set reason [join [lrange [split $arg] 3 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 4 end]]
+	}
+if {$mychan_use == "1"} {
+	set bdchan [lindex [split $arg] 1]
+	set type [lindex [split $arg] 2]
+	set reason [join [lrange [split $arg] 2 end]]
+if {[string equal -nocase $type "global"]} {
+	set reason [join [lrange [split $arg] 3 end]]
+		}
+	}
+}
+	badchan:process $nick "prv" $hand $chan $chan1 $why $bdchan $type1 $type $reason
+	}
+}
+
+unset {
+if {[matchattr $hand nmo|M $chan]} {
+	set setting [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set setting [lindex [split $arg] 1]
+}
+	set chan1 $chan
+	set type 2
+if {[string equal -nocase $setting "global"] && [matchattr $hand nm]} {
+	set setting [lindex [split $arg] 2]
+foreach c [channels] {
+	unset:process $nick "prv" $hand $c $chan1 $setting $type
+			}
+		return
+	}
+	unset:process $nick "prv" $hand $chan $chan1 $setting $type
+	}
+}
+
+greet {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "greet"
+	set type 2
+	set chan1 $chan
+	set greet [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set greet [join [lrange [split $arg] 2 end]]
+}
+	othermodule:process $nick "prv" $hand $chan $chan1 $who $greet $type $modul	
+	}
+}
+
+leave {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "leave"
+	set type 2
+	set chan1 $chan
+	set leave [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set leave [join [lrange [split $arg] 2 end]]
+}
+	othermodule:process $nick "prv" $hand $chan $chan1 $who $leave $type $modul		
+	}
+}
+
+topic {
+if {[matchattr $hand nmo|M $chan]} {
+	set who [lindex [split $arg] 2]
+	set modul "topic"
+	set type 2
+	set chan1 $chan
+	set topic [join [lrange [split $arg] 3 end]]
+if {$mychan_use == "1"} {
+	set who [lindex [split $arg] 1]
+	set topic [join [lrange [split $arg] 2 end]]
+}
+	othermodule:process $nick "prv" $hand $chan $chan1 $who $topic $type $modul	
+	}
+}
+
+vr {
+if {[matchattr $hand nmo|OMA $chan]} {
+	set vr [lindex [split $arg] 2]
+	set chan1 "$chan"
+	set type 2
+if {$mychan_use == "1"} {
+	set vr [lindex [split $arg] 1]
+}
+	userhost:act $vr $nick $hand "prv" $chan $chan1 $type $black(vr:bantime) "vr" "" "0"
+	}
+}
+
+timer {
+if {[matchattr $hand nm]} {
+	set chan1 $chan
+	set cmd [lindex [split $arg] 1]
+	set pid [lindex [split $arg] 2]
+	set timer_args [join [lrange [split $arg] 4 end]]
+	set type 2
+	timer:process $nick "prv" $hand $chan $chan1 $cmd $pid $timer_args $type
+	}
+}
+
+i {
+if {[matchattr $hand nmo|VAOM $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set inick [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set inick [lindex [split $arg] 1]
+}
+if {[regexp {^[&#]} $inick] && [matchattr $hand nmo|VAOM $inick]} {
+	set chan "$inick"
+	set inick [lindex [split $arg] 3]
+}
+	i:process $nick "prv" $hand $chan $chan1 $inick $type
+	}
+}
+
+next {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set option [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set option [lindex [split $arg] 1]
+}
+	set chan1 $chan
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+		nextpublic:process $nick "prv" $hand $chan $chan1 $option
+	}
+}
+
+helped {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+}
+	set chan1 $chan
+	set type 1
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+	helpedpublic:process $nick "prv" $hand $chan $chan1 $user $type
+	}
+}
+
+noidle {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+}
+	set chan1 $chan
+	set type 2
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+			}
+		}
+	noidlepublic:process $nick "prv" $hand $chan $chan1 $user $type
+	}
+}
+
+skip {
+if {[matchattr $hand nmo|MAO $chan]} {
+	set user [lindex [split $arg] 2]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+}
+	set chan1 $chan
+	set type 2
+foreach c [channels] {
+	set backchan [join [setting:get $c next-backchan]]
+if {[string match -nocase $chan $backchan]} {
+	set chan "$c"
+						}	
+					}
+	skippublic:process $nick "prv" $hand $chan $chan1 $user	$type
+				}
+			}		
+
+activ {
+if {[matchattr $hand nmo|AOMV $chan]} {
+	set type 2
+	set chan1 "$chan"
+	set user [lindex [split $arg] 2]
+	set option [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set user [lindex [split $arg] 1]
+	set option [lindex [split $arg] 2]
+		}
+	activ:process $nick "prv" $hand $chan $chan1 $user $option $type
+	}
+}
+topwords {
+if {[matchattr $hand nmo|AOMV $chan]} {
+	set next [lindex [split $arg] 2]
+	set cmd ""
+	set type 2
+	set chan1 "$chan"
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 1]
+}
+if {[string equal -nocase $next "reset"] && [matchattr $hand nmo|M $chan]} {
+	set cmd "reset"
+}
+if {[string equal -nocase $next "total"]} {
+	set next [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 2]
+}
+	set cmd "total"
+}
+if {[string equal -nocase $next "add"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 2]
+}
+	set cmd "add"
+}
+if {[string equal -nocase $next "del"] && [matchattr $hand nmo|M $next]} {
+	set next [lindex [split $arg] 3]
+if {$mychan_use == "1"} {
+	set next [lindex [split $arg] 2]
+}
+	set cmd "del"
+}
+	topwords:process $nick "prv" $hand $chan $chan1 $cmd $type $next
+	}	
+}
+
+ignore {
+if {[matchattr $hand nmo|M $chan]} {
+	set chan1 "$chan"
+	set type 2
+	set what [lindex [split $arg] 1]
+	set mask [lindex [split $arg] 2]
+	set time [lindex [split $arg] 3]	
+	set reason [join [lrange [split $arg] 4 end]]
+if {![regexp {^[0-9]} $time]} {
+	set reason [join [lrange [split $arg] 3 end]]
+}
+	ignore:process $nick "prv" $hand $chan $chan1 $what $mask $time $reason $type
+			}
+		}
+chat {
+if {[matchattr $hand nm]} {
+	set cmd_status [btcmd:status $chan $hand "chat" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set chan1 $chan
+	*ctcp:CHAT $nick $host $hand $botnick CHAT $arg
+	blacktools:tell $nick "prv" $hand $chan $chan1 chat.1 none
+			} 
+		}
+hello {
+if {![file exists $userfile]} {
+	blacktools:hello $nick $host $hand
+			}
+		}
+pass {
+if {[validuser $hand]} {
+	set pass [lindex [split $arg] 1]
+if {$pass == ""} {
+	return
+}
+if {[getuser $hand pass] != ""} {
+	return
+}
+	setuser $hand PASS $pass
+	blacktools:tell $nick "prv" $hand "" "" pass.1 $pass
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################