소스 검색

Add files via upload

Florian 8 년 전
부모
커밋
9041d95531
2개의 변경된 파일14650개의 추가작업 그리고 0개의 파일을 삭제
  1. 14637 0
      BlackTools2.3/BlackTools.tcl
  2. 13 0
      BlackTools2.3/README.txt

+ 14637 - 0
BlackTools2.3/BlackTools.tcl

@@ -0,0 +1,14637 @@
+###########################################################################
+#                      ® BLaCkShaDoW ProductionS ®                        #
+#                                                                         # 
+#                               Presents                                  # 
+                                                                     
+####   #        ####    #####   #   #  #####  #####    ####   #      #####                  
+#   #  #       #    #   #       #  #     #   #     #  #    #  #      # 
+#   #  #       #    #   #       # #      #   #     #  #    #  #      #
+## #   #       ######   #       ##       #   #     #  #    #  #      #####
+#   #  #       #    #   #       # #      #   #     #  #    #  #          #
+#   #  #       #    #   #       #  #     #   #     #  #    #  #          #
+####   #####   #    #   #####   #   #    #    #####    ####   #####  #####
+              
+#                                                                         # 
+#                                                                         #
+#                          #####   #####                                  #
+#                              #       #                                  #         
+#                              #       #                                  #
+#                          ####    #####                                  #
+#                          #           #                                  #
+#                          #           #                                  #       
+#                          ##### # #####                                  # 
+#                                                                         #  
+#                                                                         #
+#                   THE    NEXT    GENERATION    TCL                      #
+#                                                                         #
+#            - #TCL-HELP @ UNDERNET - WwW.TclScripts.Net -                #  
+###########################################################################
+#A Next Generation Channel Control Script that contains a lot of commands #
+#modules, and protections that make`s your life easy for you and for your #
+#                              Eggdrop.                                   #
+###########################################################################
+#                                                                         #
+#      Many thanks for without this script wouldn't got this far to:      #
+#                                                                         #  
+#                      Time2Go@Oradea(#Bihor Admin)                       #
+#                                                                         #
+#        Offcourse i thanks all the users who participate with ideas,     #
+# opinions, which took the script to this version.                        #                                                                                                                                                                                    
+#                                                                         #
+#      cola @ #Tcl-Help                          btw @ #ialomita          #                    
+#                                                                         #                                
+#      Cacique @ #mures                          bandyt @ #bandyt         #
+#                                                                         #
+###########################################################################
+#
+#Please specify the folder name that contains the BlackTools.tcl and the lang
+#folder (Default "scripts")
+#
+set black(dirname) "scripts"
+#
+###########################################################################                
+#First Char ( "- . !" ) - ( "none" ) (for no char)
+#
+set black(cmdchar) ". !"
+#                           
+###########################################################################       
+                            
+#-------------------------- Default Language -----------------------------#
+
+#Default language ( RO / EN )
+
+set black(default_lang) "RO" 
+
+#-------------------------------------------------------------------------#
+
+#----------------------------- Max Handle --------------------------------#
+
+#Max Handle ( 1 - for handle < 9 ; 0 - for handle > 9 )
+
+set black(maxhand) "0"
+
+#-------------------------------------------------------------------------#
+
+
+#######################################################################
+#                                                                     #
+#        Command Help              - h -          Command Help        #
+#                                                                     #
+#######################################################################
+
+#---------------------------------------------------------------------#
+
+#######################################################################
+#                             Chanserv Name
+#
+set black(chanserv) "X"
+#
+#######################################################################
+
+#---------------------------------------------------------------------#
+
+#######################################################################
+#                                                                     #
+#---------------------------------------------------------------------#
+#                                                                     #
+####################################################################### 
+ 
+#------------------------- Chanserv Login ----------------------------#             
+
+#Login On Connect ( 1 - ON ; 0 - OFF)
+
+set black(logonconect) "1" 
+                                                                     
+#------------------------- Chanserv User ----------------------------## 
+                                   
+set black(username) "username"                      
+                                                                     
+#------------------------- Chanserv Pass ----------------------------## 
+                        
+set black(password) "password"
+
+#------------------------- Login Command ----------------------------##
+
+set black(login) "PRIVMSG x@channels.undernet.org :login $black(username) $black(password)"
+
+                                                                     
+#--------------------------- Login Mode ------------------------------##                                                   
+                                                                     
+set black(xmod) "+x"                                                    
+                                                                     
+#######################################################################
+#                                                                     #
+#---------------------------------------------------------------------#
+#                                                                     #
+#######################################################################
+
+#---------------------------------------------------------------------#
+
+################################# add #################################
+#
+#       add <level> <user> (level : manager,admin,senior,op voice)
+#
+#######################################################################
+
+#Default Hostname for - add <user> command -
+
+set black(hostadd) "*!*@%user%.users.undernet.org"
+
+
+#######################################################################
+#
+#
+#                           Protection
+#
+#
+#
+#######################################################################
+
+#Op Protect (1 - ON ; 0 - OFF)
+
+set black(vprotect) "1"
+
+
+#VOICE Protect (1 - ON ; 0 - OFF)
+
+set black(oprotect) "1"
+
+#######################################################################
+#
+#                        Antipub Protection
+#
+#
+#
+#######################################################################
+
+
+#Ban-Time
+
+set black(antipubbantime) "2880"
+
+#Words
+
+set black(antipubword) {
+"*#*"
+ "*www.*"
+ "*http://*"
+ "*.ro"
+ "*.com"
+ "*/server*"
+}
+
+#Ban-Mode
+
+set black(antipubmode) "m"
+
+#Ban-mode Time (Seconds)
+
+set black(antipubsecunde) "5"
+
+#######################################################################
+#
+#                      AntiNotice Protection
+#
+#
+#######################################################################
+
+#Ban-Time
+
+set black(antinoticebantime) "2880"
+
+#Ban-Mode
+
+set black(antinoticemode) "mr"
+
+#Ban-mode Time (Seconds)
+
+set black(antinoticesecunde) "7"
+
+#######################################################################
+#
+#                         AntiCTCP Protection
+#
+#
+#######################################################################
+
+#Ban-Time
+
+set black(antictcpbantime) "2880"
+
+#Ban-Mode
+
+set black(antictcpmode) "mr"
+
+#Ban-mode Time (Seconds)
+
+set black(antictcpsecunde) "8"
+
+#######################################################################
+#
+#                       AntiBadWord Protection
+#
+#
+#######################################################################
+
+
+#Ban-Time
+
+set black(antibadwordbantime) "360"
+
+#Words
+
+set black(antibadword) {
+"*pula*"
+ "*pizda*"
+ "*muie*"
+ "*sugi"
+ "mwie"
+ "*pwla*"
+ "*muisti*"
+ "*fut*"
+ "*fwt*"
+ "tarfa"
+
+
+}
+
+#######################################################################
+#
+#                        AntiLongText Protection
+#
+#
+#######################################################################
+
+#Char length
+
+set black(longchar) "400"
+
+#Ban-Time
+
+set black(longbantime) "30"
+
+#Ban-Mode
+
+set black(longmode) "mr"
+
+#Ban-mode Time (Seconds)
+
+set black(longtimemode) "10"
+
+#######################################################################
+#
+#                       AntiBAdQuitPart Protection
+#
+#
+#######################################################################
+
+#Ban-Time
+
+set black(badquitparttime) "60"
+
+#Words
+
+set black(badquitpartwords) {
+"*www.*"
+"*http://*"
+"*#*"
+
+}
+
+#Ban on COLORS (1 - ON ; 0 - OFF)
+
+set black(badquitpartcolour) "1"
+
+#######################################################################
+#
+#                       Protectia AntiJoinPart
+#
+#
+#######################################################################
+
+#Ban-Time
+
+set black(joinpartbantime) "30"
+
+#Stay-Time
+
+set black(joinparttime) "2"
+
+#Ban-Mode
+
+set black(joinpartmode) "mr"
+
+#Ban-Mode Time (Seconds)
+
+set black(joinparttimemode) "10"
+
+#######################################################################
+#
+#                       AntiSpam Protection
+#
+#
+#######################################################################
+
+
+#Ban-Time
+
+set black(spamban) "2880"
+
+#Words
+
+set black(spamword) {
+"*#*"
+ "*www.*"
+ "*http://*"
+}
+
+#Cycle-Time
+
+set black(spamcycle) "30"
+
+#ON-JOIN Message ( 1 - ON ; 0 - OFF)
+
+set black(spamreq) "1"
+
+#Part Message
+
+set black(spammsgcycle) "Checking for spam.."
+
+#######################################################################
+#
+#                       AntiRepeat Protection
+#
+#
+#######################################################################
+
+#Repeat Setting (number repeats:seconds)
+
+set black(repeats) "3:5"
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(antirepeattype) "1"
+
+#Ban-Time
+
+set black(antirepeatbantime) "10"
+
+#######################################################################
+# 
+#                          Anticolor Protection
+# 
+#
+#######################################################################
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(anticolortype) "1"
+
+#Ban-Time
+
+set black(anticolorbantime) "10"
+
+#######################################################################
+# 
+#                          AntiBold Protection
+# 
+#
+#######################################################################
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(antiboldtype) "1"
+
+#Ban-Time
+
+set black(antiboldbantime) "10"
+
+#######################################################################
+# 
+#                          AntiUnderline Protection
+# 
+#
+#######################################################################
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(antiunderlinetype) "1"
+
+#Ban-Time
+
+set black(antiunderlinebantime) "10"
+
+#######################################################################
+# 
+#                          AntiCaps Protection
+# 
+#
+#######################################################################
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(anticapstype) "1"
+
+#Caps Char Length
+
+set black(anticapscount) "40"
+
+#Ban-Time
+
+set black(anticapsbantime) "10"
+
+#######################################################################
+# 
+#                          BadFullName Protection
+# 
+#
+#######################################################################
+
+#Ban-Time
+
+set black(badfbantime) "60"
+
+#Words
+
+set black(badfwords) {
+"*www.*"
+"*#*"
+"*http://*"
+
+}
+
+#######################################################################
+# 
+#                          BadNick Protection
+# 
+#
+#######################################################################
+
+#Ban-Time
+
+set black(badnickbantime) "60"
+
+#Words
+
+set black(badnickwords) {
+
+"*pula*"
+"*muie *"
+"pwla*"
+"pizda*"
+"laba*"
+
+}
+
+
+#######################################################################
+# 
+#                          BadIdent Protection
+# 
+#
+#######################################################################
+
+#Ban-Time
+
+set black(badidentbantime) "60"
+
+#Words
+
+set black(badidentwords) {
+
+"*pula*"
+"*muie *"
+"pwla*"
+"pizda*"
+"laba*"
+
+}
+
+
+#######################################################################
+# 
+#                          AntiJoinFlood Protection
+# 
+#
+#######################################################################
+
+#Join-Mode
+
+set black(modes) "mir"
+
+
+#Join-Mode Time (Seconds)
+
+set black(nomodetime) "15"
+
+
+#Op ALERT (1 - ON ; 0 - OFF)
+
+set black(fjoinhow) "1"
+
+#######################################################################
+# 
+#                          AntiChanFlood Protection
+# 
+#
+#######################################################################
+
+#Ban-Type (1 - KICK -> BAN ; 0 - BAN )
+
+set black(antifloodchantype) "1"
+
+#Ban-Time
+
+set black(antifloodchanbantime) "10"
+
+#######################################################################
+# 
+#                                Module
+# 
+#
+#######################################################################
+
+
+#######################################################################
+# 
+#                            Topic refresh
+#
+#
+#######################################################################
+
+#Refresh Time
+
+set black(topic_time) "60"
+
+#Standard Topic
+
+set black(topics) "Reloading topic..."
+
+
+########################################################################
+#
+#                                 Count
+#
+#                  count <on> / <off> / <display> / <reset>
+#
+#######################################################################
+
+#MSg Type ( 1 - NOTICE ; 0 - PRIVMSG )
+
+set black(counthow) "1"
+
+
+#######################################################################
+# 
+#                               BadChan
+#
+#              badchan | <on> | <off> | add | del | | list |
+#
+#######################################################################
+
+#Ban-Time
+
+set black(badcbantime) "360"
+
+#User Message ( 1 - ON ; 0 - OFF)
+
+set black(badcwhyreason) "1"
+
+########################################################################
+#
+#                                 Anunt
+#
+#                  Anunt <on> | <off> | <add> | <list> | <del>
+#
+#######################################################################
+
+#Anunt Time ( 60 min max )
+
+set black(anunttime) "45"
+
+#MSg Type ( 1 - ACTION ; 0 - PRIVMSG )
+
+set black(anunthow) "0"
+
+########################################################################
+#
+#                             AutoBroadcast
+#
+#                  bt <on> | <off> | <add> | <list> | <del>
+#
+#######################################################################
+
+
+#BRoadcast Time
+
+set black(bttime) "60"
+
+#MSg Type ( 1 - ACTION ; 0 - PRIVMSG )
+
+set black(bthow) "1"
+
+
+#######################################################################
+# 
+#                               CloneScan
+#
+#
+#######################################################################
+
+#Max Clones
+
+set black(maxclone) "2"
+
+#Ban-Type ( 0 - OP Message ; 1 - Ban )
+
+set black(what) "0"
+
+#Ban-Time
+
+set black(clonebtime) "180"
+
+#######################################################################
+# 
+#                               AntiBoTidle
+#
+#
+#######################################################################
+
+#Random Object
+
+set black(noobject) "blacky:P"
+
+#Max Idle
+
+set black(noidlemax) "10"
+
+#######################################################################
+#                            
+#                                Seen
+#
+#                         seen <host> / <nick>
+#
+#######################################################################
+
+#Flood-Protection (searches : seconds)
+
+set black(seenflood) "4:5"
+
+#MSg Type ( 1 - NOTICE ; 0 - PRIVMSG )
+
+set black(seenmet) "1"
+
+
+########################################################################
+#
+#                                 Greet
+#
+#                  greet <on> | <off> | <add> | <list> | <del>
+#
+#######################################################################
+
+#MSg Type ( 1 - NOTICE ; 0 - PRIVMSG )
+
+set black(howgreet) "1"
+
+
+########################################################################
+#
+#                                 Leave
+#
+#                  leave <on> | <off> | <add> | <list> | <del>
+#
+#######################################################################
+
+#MSg Type ( 1 - NOTICE ; 0 - PRIVMSG )
+
+set black(howleave) "0"
+
+########################################################################
+#
+#                                 idle
+#
+#                
+#  idle <on> | <off> | voice <on>/<off> | op <on>/<off> | add <nick> 
+#
+#######################################################################
+
+#Idle Scan Time
+
+set black(idleinterval) "60"
+
+#Op max idle
+
+set black(idleopmax) "30"
+
+#Voice idle Max
+
+set black(idlevoicemax) "60"
+
+########################################################################
+#
+#                                Private
+#
+#                
+#          private <on> | <off> | <add> <user> | <list> | del <nume>
+#
+#######################################################################
+
+#Ban-Time
+
+set black(privatebantime) "10"
+
+
+#######################################################################
+# 
+#                           
+#                               Commands
+#
+#
+#######################################################################
+
+
+#######################################################################
+#
+#                              dr <nick> / <host>
+#
+#######################################################################
+
+#Ban-Time
+
+set black(drtime) "20160"
+
+#######################################################################
+#
+#                              bot <nick> / <host>
+#
+#######################################################################
+
+#Ban-Time
+
+set black(bottime) "10160"
+
+
+########################################################################
+#       
+#                              b <nick> / <host>
+#
+#######################################################################
+
+#Ban-Time
+
+set black(btime) "2880"
+
+
+#######################################################################
+#
+#                                 n <nick>
+#
+#######################################################################
+
+#Ban-Time
+
+set black(ntime) "120"
+
+######################################################################
+#
+#                                 id <nick> 
+#
+######################################################################
+
+#Ban-Time
+
+set black(idtime) "120"
+
+
+######################################################################
+#
+#                   spam <nick> / <host> (pentru spammeri)
+#
+######################################################################
+
+#Ban-Time
+
+set black(spamtime) "10080"
+
+
+######################################################################
+#
+#                          k <nick> <reason>
+#
+######################################################################
+
+
+#Access Except ( 1 - ON ; 0 - OFF )
+
+set black(kaccess) "1"
+
+
+#######################################################################
+#
+#                    bw <nick> / <host> ( bad word)
+#
+#######################################################################
+
+#Ban-Time
+
+set black(bwtime) "360"
+
+########################################################################
+#
+#              stick <nick> / <host> <timp> <motiv>
+#
+########################################################################
+
+#Ban-Time
+
+set black(dfstickbantime) "5040"
+
+########################################################################
+#
+#                           l <seconds>                            
+#
+########################################################################
+
+#Mode Type
+
+set black(lmode) "m"
+
+########################################################################
+#
+#                               ul                             
+#
+########################################################################
+
+#Mode Type
+
+set black(ulmodes) "mir"
+
+########################################################################
+#
+#
+#                            This is the END !
+#
+#
+########################################################################
+
+
+set black(exceptflags) "nm|HAMOVSo"
+
+setudef flag antipub
+setudef flag antinotice
+setudef flag antictcp
+setudef flag antilongtext
+setudef flag antibadword
+setudef flag antijoinpart
+setudef flag antispam
+setudef flag antirepeat
+setudef flag badquitpart
+setudef flag anticolor
+setudef flag antibold
+setudef flag antiunderline
+setudef flag anticaps
+setudef flag badfullname
+setudef flag badnick
+setudef flag badident
+setudef flag antijoinflood
+setudef flag antichanflood
+setudef flag xtools
+setudef flag topicrefresh
+setudef flag count
+setudef flag antibadchan
+setudef flag anunt
+setudef flag limit
+setudef flag refresh
+setudef flag clonescan
+setudef flag seen
+setudef flag antidle
+setudef flag antividle
+setudef flag antididle
+setudef flag autoop
+setudef flag autovoice
+setudef flag leave
+setudef flag chanreport
+setudef flag topwords
+setudef flag xban
+setudef flag protectop
+setudef flag protectvoice
+setudef flag dontop
+setudef flag dontdeop
+setudef flag private
+setudef flag silent
+setudef flag showtime
+setudef flag showhandle
+setudef flag showcount
+
+setudef int idlevoicemax
+setudef int idleopmax
+setudef int countnumber
+setudef int kickcount
+setudef int xbantime
+setudef int xbanlevel
+setudef int blacklimit
+setudef str backchan
+
+
+#Motive / Bantime
+
+#Protection
+
+setudef str antipub-reason
+setudef int antipub-bantime
+setudef str antinotice-reason
+setudef int antinotice-bantime
+setudef str antictcp-reason
+setudef int antictcp-bantime
+setudef str antibadword-reason
+setudef int antibadword-bantime
+setudef str antilongtext-reason
+setudef int antilongtext-bantime
+setudef str antibadquitpart-reason
+setudef int antibadquitpart-bantime
+setudef str antijoinpart-reason
+setudef int antijoinpart-bantime
+setudef str antispam-reason
+setudef int antispam-bantime
+setudef str antispam-message
+setudef str antirepeat-reason
+setudef int antirepeat-bantime
+setudef str anticolor-reason
+setudef int anticolor-bantime
+setudef str antibold-reason
+setudef int antibold-bantime
+setudef str antiunderline-reason
+setudef int antiunderline-bantime
+setudef str anticaps-reason
+setudef int anticaps-bantime
+setudef str badfullname-reason
+setudef int badfullname-bantime
+setudef str badnick-reason
+setudef int badnick-bantime
+setudef str badident-reason
+setudef int badident-bantime
+setudef str antichanflood-reason
+setudef int antichanflood-bantime
+setudef str joinflood
+setudef str chanflood
+setudef int private-bantime
+setudef str private-reason
+setudef int antilongtextmax
+setudef str antirepeat-setting
+
+#commands
+
+setudef str dr-reason
+setudef int dr-bantime
+setudef str n-reason
+setudef int n-bantime
+setudef int b-bantime
+setudef str id-reason
+setudef int id-bantime
+setudef str w-reason
+setudef str spam-reason
+setudef int spam-bantime
+setudef str bw-reason
+setudef int bw-bantime
+setudef int bot-bantime
+setudef str bot-reason
+
+#module
+
+setudef str badchan-reason
+setudef int badchan-bantime
+setudef str count-message
+setudef str lang
+
+if {$black(logonconect) == "1"} {
+bind evnt - init-server loginpublic
+}
+
+bind pubm - * topwordspublic
+bind pubm - * antipub:protect
+bind ctcp - ACTION antipub:protect:me
+bind notc - * antinotice:protect
+bind ctcp - * antictcp:protect
+
+bind pubm - * antibadword:protect
+bind ctcp - ACTION antibadword:protect:me
+bind pubm - * antilongtext:protect
+bind ctcp - ACTION antilongtext:protect:me
+bind part - * antipubpart:protect
+bind sign - * antipubsign:protect
+bind part - * anticolorpart:protect
+bind sign - * anticolorquit:protect
+bind part - * antijoinpart:protect
+bind join - * antispam:protect:msg
+bind msgm - * antispam:protect
+bind time - * antispam:protect:cycle
+bind time - "30 * * * *" clonescanner
+bind time - "* * * * *" limit:timer
+bind pubm - * antirepeat:protect
+bind pubm - * antifloodchan:protect
+bind ctcp - version blackreply
+bind ctcp - ACTION antirepeat:protect:me
+bind ctcp - ACTION antifloodchan:protect:me
+bind pubm - * anticolor:protect
+bind ctcp - ACTION anticolor:protect:me
+bind pubm - * antibold:protect
+bind ctcp - ACTION antibold:protect:me
+bind pubm - * antiunderline:protect
+bind ctcp - ACTION antiunderline:protect:me
+bind pubm - * anticaps:protect
+bind ctcp - ACTION anticaps:protect:me
+bind join - * badfullname:protect:join
+bind join - * badnick:protect:join
+bind join - * badident:protect:join
+bind nick - * badnick:protect:change
+bind mode - "*+b*" protectpublic
+bind join - * joinflood:protect
+bind join - * rebanpublic
+bind need - * toolspublic
+bind join - * countpublic:join
+bind join - * badchanpublic:join
+bind join - * seen:join
+bind part - * seen:part
+bind sign - * seen:sign
+bind kick - * seen:kick
+bind splt - * seen:split
+bind nick - * seen:changenick
+bind join - * greetpublic:join
+bind part - * leavepublic:part
+bind time - * idlewhoispublic
+bind evnt - init-server setaway
+bind join - * autovonjoin
+bind join - * autoponjoin
+bind join - * addopjoin
+bind join - * addvoicejoin
+bind join - * private:module
+bind join - * timeban:module
+bind ctcr mn|MOSAV PING pingpublic
+bind ctcr - VERSION ctcpvers
+bind mode - *+o* dontoppublic
+bind mode - *-o* dontdeoppublic
+
+
+
+bind pubm nm|MmvVNnoOSA * comand:pubme 
+foreach black(char) $black(cmdchar) {
+if {[string match -nocase "$black(char)" "none"]} {
+set black(char) ""
+}
+bind pub nm|MAS $black(char)clonescan scannerpublic
+bind pub nm|MASO $black(char)r refreshpublic
+bind pub nm|M $black(char)count countpublic
+bind pub nm|M $black(char)badchan badchanpublic
+bind pub nm|M $black(char)badword antibadword:command:public
+bind pub nm|M $black(char)anunt anuntpublic
+bind pub nm|M $black(char)limit limitpublic
+bind pub nm|M $black(char)topic topicpublic
+bind pub -|- $black(char)seen seenpublic
+bind pub nm|M $black(char)greet greetpublic
+bind pub nm|M $black(char)leave leavepublic
+bind pub nm|M $black(char)idle antidlepublic
+bind pub nm|OSMA $black(char)dr drpublic
+bind pub nm|OSMA $black(char)bot botpublic
+bind pub nm|OSMA $black(char)b bpublic
+bind pub nm|OSMA $black(char)n npublic
+bind pub nm|OSMA $black(char)id idpublic
+bind pub nm|SMA $black(char)black blackpublic
+bind pub nm|SMA $black(char)bl blackpublic
+bind pub nm|VOSMA $black(char)w wpublic
+bind pub nm|OSMA $black(char)spam spampublic
+bind pub nm|VOSMA $black(char)k kpublic
+bind pub nm|OSMA $black(char)bw bwpublic
+bind pub nm|OSMA $black(char)ub ubpublic
+bind pub nm|VOSMA $black(char)sb sbpublic
+bind pub nm|SMA $black(char)d dpublic
+bind pub nm|SMA $black(char)stick stickpublic
+bind pub nm|VOSMA $black(char)t tpublic
+bind pub nm|M $black(char)show showpublic
+bind pub nm|- $black(char)status statuspublic
+bind pub nm|- $black(char)channels channelspublic
+bind pub nm|- $black(char)chat chatpublic
+bind pub nm|- $black(char)uptime uptimepublic
+bind pub nm|VOSMA $black(char)i ipublic
+bind pub nm|VOSMA $black(char)addinfo addinfopublic
+bind pub nm|VOSMA $black(char)v vpublic
+bind pub nm|VOSMA $black(char)myset mysetpublic
+bind pub nm|OSMA $black(char)o opublic
+bind pub nm|VOSMA $black(char)l lpublic
+bind pub nm|VOSMA $black(char)ul ulpublic
+bind pub nm|SMA $black(char)say saypublic
+bind pub nm|SMA $black(char)act actpublic
+bind pub nm|- $black(char)broadcast broadcastpublic
+bind pub nm|OSMA $black(char)check checkpublic
+bind pub nm|VOSMA $black(char)version versionpublic
+bind pub nm|OSMA $black(char)cycle cyclepublic
+bind pub nm|- $black(char)away awaypublic
+bind pub nm|M $black(char)private privatepublic
+bind pub nm|OSMA $black(char)mode modepublic
+bind pub nm|M $black(char)set setpublic
+bind pub nm|- $black(char)silence silencepublic
+bind pub nm|- $black(char)msg msgpublic
+bind pub nm|MA $black(char)add publicadd
+bind pub nm|MA $black(char)adduser adduserpublic
+bind pub nm|MA $black(char)delacc delaccpublic
+bind pub nm|- $black(char)del delpublic
+bind pub nm|- $black(char)ignore ignorepublic
+bind pub nm|- $black(char)botidle botidlepublic
+bind pub nm|M $black(char)addhost addhostpublic
+bind pub nm|M $black(char)delhost delhostpuplic
+bind pub nm|OSMA $black(char)banlist banlistpublic
+bind pub nm|M $black(char)purge purgepublic
+bind pub nm|M $black(char)chuser chuserpublic
+bind pub nm|MASOV $black(char)userlist publicuserlist
+bind pub nm|MASOV $black(char)info infopublic
+bind pub nm|MA $black(char)s spublic
+bind pub nm|MA $black(char)us uspublic
+bind pub nm|MAOSV $black(char)ping pings
+bind pub nm|MASOV $black(char)time timepublic
+bind pub nm|MAOSV $black(char)vers verspublic
+bind pub nm|MAOSV $black(char)whois whoispublic
+bind pub nm|MAOS $black(char)gag gagpublic
+bind pub nm|M $black(char)reset resetpublic
+bind pub nm|M $black(char)clear clearpublic
+bind pub nm|- $black(char)addbot addbotpublic
+bind pub nm|M $black(char)addop addoppublic
+bind pub nm|M $black(char)addvoice addvoicepublic
+bind pub nm|M $black(char)delop deloppublic
+bind pub nm|M $black(char)delvoice delvoicepublic
+bind pub nm|- $black(char)addmyhost addmyhostpublic
+bind pub nm|- $black(char)delmyhost delmyhostpublic
+bind pub nm|VOSAM $black(char)activ activpublic
+bind pub nm|MASOV $black(char)h hpublic
+bind pub nm|MASO $black(char)cc ccpublic
+bind pub nm|MAOSV $black(char)top toppublic
+bind pub nm|M $black(char)secure securepublic
+bind pub nm|- $black(char)bt broadcastpublic:module
+bind pub nm|- $black(char)login publiclogin:Cmd
+bind pub nm|MASO $black(char)stats statspublic
+}
+bind msg nm|- addchan addchanpublic
+bind msg nm|- delchan delchanpublic
+bind msg nm|- suspend suspendpublic
+bind msg nm|- unsuspend unsuspendpublic
+bind msg nm|- nick nickpublic
+bind msg nm|- rehash rehashme
+bind msg nm|- restart restartme
+bind msg nm|- save saveme
+bind msg nm|- jump jumpme
+bind msg nm|- die dieme
+bind msg nm|OSAM op oppublic
+bind msg nm|OSAM deop deoppublic
+bind msg nm|OSAM voice voicepublic
+bind msg nm|OSAM devoice devoicepublic
+bind msg nm|OSAM invite invitepublic
+
+
+##########################################################################
+#
+#
+#         Dont try to modify if you dont know what are you doing !
+#
+#
+#########################################################################
+
+
+set black(name) "BlackToolS"
+set black(author) "BLaCkShaDoW"
+set black(vers) "2.3"
+set black(site) "WwW.TclScripts.Net"
+set sdir "$username.status.txt"
+set wdir "$username.away.txt"
+set seendir "$username.Seen.db"
+set statsdir "$username.stats.db"
+set bwordir "$username.bword.db"
+
+set black(loader_error) [catch {source $black(dirname)/lang/loader.tcl} black(loader_error_stats)]
+
+if {$black(loader_error) == "1"} {
+die "4BlackTools :I didnt find the 12loader.tcl in the 12lang folder. This file contains the language for the script.PLease load it."
+}
+
+if {![info exists anuntpublic:show_running]} { 
+timer $black(anunttime) anuntpublic:show
+set anuntpublic:show_running 1
+}
+
+if {![info exists times_topic_running]} { 
+timer $black(topic_time) times_topic
+set times_topic_running 1
+}
+
+
+if {![file exists $seendir]} {
+set file [open $seendir w]
+close $file
+}
+
+if {![file exists $sdir]} {
+set file [open $sdir w]
+close $file
+}
+
+if {![file exists $wdir]} {
+set file [open $wdir w]
+close $file
+}
+
+if {![file exists $bwordir]} {
+set file [open $bwordir w]
+close $file
+}
+
+
+if {![file exists $statsdir]} {
+set file [open $statsdir w]
+close $file
+}
+
+if {![info exists antibotidle:module_running]} {
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+if {$data != ""} {
+foreach line $data {
+set type [lindex [split $line] 0]
+set stats [lindex [split $line] 1]
+if {($type == "antibotidle:module") && ($stats == "ON")} {
+timer $black(noidlemax) antibotidle:module
+}
+}
+}
+set antibotidle:module_running 1
+}
+
+if {![info exists broadcastpublic:show_running]} {
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+if {$data != ""} {
+foreach line $data {
+set type [lindex [split $line] 0]
+set stats [lindex [split $line] 1]
+if {($type == "broadcastpublic:show") && ($stats == "ON")} {
+timer $black(bttime) broadcastpublic:show
+}
+}
+}
+set broadcastpublic:show_running 1
+}
+
+proc blacktools:tell:prv {nick host hand type arg} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set replace(%botnick%) $botnick
+set replace(%char%) $char(p)
+set replace(%msg%) [lrange [split $arg] 0 end]
+set replace(%msg.1%) [lindex [split $arg] 0]
+set replace(%msg.2%) [lindex [split $arg] 1]
+set replace(%msg.3%) [lindex [split $arg] 2]
+set replace(%msg.4%) [lrange [split $arg] 1 end]
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[info exists black(say.$getlang.$type)]} {
+set reply [string map [array get replace] $black(say.$getlang.$type)]
+puthelp "PRIVMSG $nick :$reply"
+}
+}
+
+proc blacktools:tell {nick host hand chan chan1 type arg} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set replace(%botnick%) $botnick
+set replace(%char%) $char(p)
+set replace(%chan%) $chan
+set replace(%msg%) [lrange $arg 0 end]
+set replace(%msg.set%) [lrange $arg 1 end]
+set replace(%msg.1%) [lindex $arg 0]
+set replace(%msg.2%) [lindex $arg 1]
+set replace(%msg.3%) [lindex $arg 2]
+set replace(%msg.4%) [lindex $arg 3]
+set replace(%msg.5%) [lrange $arg 4 end]
+set replace(%msg.6%) [lrange $arg 3 end]
+set replace(%msg.7%) [lrange $arg 2 end]
+set replace(%msg.8%) [lrange $arg 1 end]
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+set getmethod [getuser $hand XTRA OUTPUT_TYPE]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$getmethod == ""} { set getmethod "1" }
+if {[info exists black(say.$getlang.$type)]} {
+set reply [string map [array get replace] $black(say.$getlang.$type)]
+if {$getmethod == "1"} {
+putserv "NOTICE $nick :$reply"
+} else {
+putserv "PRIVMSG $chan1 :$reply"
+}
+}
+}
+
+proc blacktools:banner:1 {banmask botnick chan reason mode timer bantime} {
+global black
+if {[channel get $chan xban]} {
+set getcount [channel get $chan kickcount]
+set getxtime [channel get $chan xbantime]
+set getxlevel [channel get $chan xbanlevel]
+if {$getxlevel == "0"} { set getxlevel "100"}
+if {$getxtime == "0"} { set getxtime "1" }
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "MODE $chan +$mode" -next ;utimer $timer [list putquick "MODE $chan -$mode"]
+putquick "PRIVMSG $black(chanserv) :ban $chan $banmask $getxtime $getxlevel $reason"
+newchanban $chan $banmask $botnick $reason $bantime
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+if {[info exists black($chan:anounce)]} {
+return 0
+}
+set black($chan:anounce) 1
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $banmask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+} else {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" } else {
+set reason "$reason" }
+putquick "MODE $chan +$mode" -next ;utimer $timer [list putquick "MODE $chan -$mode"]
+newchanban $chan $banmask $botnick $reason $bantime
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+if {[info exists black($chan:anounce)]} {
+return 0
+}
+set black($chan:anounce) 1
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $banmask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+}
+utimer 5 [list unset black($chan:anounce)]
+}
+
+proc blacktools:banner:2 {banmask botnick chan reason bantime} {
+global black
+if {[channel get $chan xban]} {
+set getcount [channel get $chan kickcount]
+set getxtime [channel get $chan xbantime]
+if {$getxtime == "0"} { set getxtime "1" }
+set getxlevel [channel get $chan xbanlevel]
+if {$getxlevel == "0"} { set getxlevel "100"}
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "PRIVMSG $black(chanserv) :ban $chan $banmask $getxtime $getxlevel $reason"
+newchanban $chan $banmask $botnick $reason $bantime
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+
+if {[info exists black($chan:anounce)]} {
+return 0
+}
+
+set black($chan:anounce) 1
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $banmask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+
+} else {
+
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" } else {
+set reason "$reason" }
+newchanban $chan $banmask $botnick $reason $bantime
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+if {[info exists black($chan:anounce)]} {
+return 0
+}
+set black($chan:anounce) 1
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $banmask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+}
+utimer 5 [list unset black($chan:anounce)]
+}
+
+
+proc blacktools:banner:3 {mask hand chan reason bantime type} {
+global black botnick
+if {[channel get $chan xban]} {
+set getcount [channel get $chan kickcount]
+set getxtime [channel get $chan xbantime]
+if {$getxtime == "0"} { set getxtime "1" }
+set getxlevel [channel get $chan xbanlevel]
+if {$getxlevel == "0"} { set getxlevel "100"}
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA $type]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA $type $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "PRIVMSG $black(chanserv) :ban $chan $mask $getxtime $getxlevel $reason"
+utimer 1 [list newchanban $chan $mask $hand $reason $bantime]
+putquick "MODE $chan +b $mask"
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $mask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+} else {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA $type]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA $type $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" } else {
+set reason "$reason" }
+newchanban $chan $mask $hand $reason $bantime
+putquick "MODE $chan +b $mask"
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $mask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+}
+}
+
+proc blacktools:banner:4 {mask hand chan reason bantime type} {
+global black botnick
+if {[channel get $chan xban]} {
+set getcount [channel get $chan kickcount]
+set getxtime [channel get $chan xbantime]
+if {$getxtime == "0"} { set getxtime "1" }
+set getxlevel [channel get $chan xbanlevel]
+if {$getxlevel == "0"} { set getxlevel "100"}
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA $type]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA $type $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "PRIVMSG $black(chanserv) :ban $chan $mask $getxtime $getxlevel $reason"
+utimer 1 [list newchanban $chan $mask $hand $reason $bantime sticky]
+putquick "MODE $chan +b $mask"
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $mask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+} else {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA $type]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA $type $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" } else {
+set reason "$reason" }
+newchanban $chan $mask $hand $reason $bantime sticky
+putquick "MODE $chan +b $mask"
+if {![channel get $chan chanreport]} {
+return 0
+}
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replace(%banmask%) $mask
+set replace(%bantime%) $bantime
+set replace(%reason%) $reason
+set replace(%chan%) $chan
+puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan)]"
+}
+}
+
+################################ antipub ###########################
+
+
+proc antipub:filter {str} {
+  regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
+  return $str
+}
+
+proc antipub:protect {nick host hand chan arg} {
+global black botnick
+set text [antipub:filter $arg]
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antipub-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antipub.1)
+}
+set getbantime [channel get $chan antipub-bantime]
+if {$getbantime == "0"} { set getbantime $black(antipubbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 } 
+if { [channel get $chan antipub] } {
+foreach antipub [string tolower $black(antipubword)] {
+if {[string match -nocase $antipub $arg]} {
+blacktools:banner:1 $banmask $botnick $chan $reason $black(antipubmode) $black(antipubsecunde) $getbantime
+}
+}
+}
+}
+
+proc antipub:protect:me {nick host hand chan keyword arg} {
+global black
+antipub:protect $nick $host $hand $chan $arg
+}
+
+
+############################### antinotice #############################
+
+proc antinotice:protect {nick host hand arg chan} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antinotice-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antinotice.1)
+}
+set getbantime [channel get $chan antinotice-bantime]
+if {$getbantime == "0"} { set getbantime $black(antinoticebantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set banmask *!*@[lindex [split $host @] 1]
+set reason "$protectreason"
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {$chan == $botnick} { return 0 }
+if { [channel get $chan antinotice] } {
+blacktools:banner:1 $banmask $botnick $chan $reason $black(antinoticemode) $black(antinoticesecunde) $getbantime
+}
+}
+
+############################## antictcp ################################
+
+
+proc antictcp:protect {nick host hand chan keyword arg} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antictcp-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antictcp.1)
+}
+set getbantime [channel get $chan antictcp-bantime]
+if {$getbantime == "0"} { set getbantime $black(antictcpbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+if {[string equal -nocase "action" $keyword] || [string equal -nocase "chat" $keyword]} {return 0}
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if { [channel get $chan antictcp] } {
+blacktools:banner:1 $banmask $botnick $chan $reason $black(antictcpmode) $black(antictcpsecunde) $getbantime
+}
+}
+
+############################## antibadword ################################
+
+proc antibadword:filter {str} {
+  regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
+  return $str
+}
+
+
+proc antibadword:protect {nick host hand chan arg} {
+global black botnick bwordir
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antibadword-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antibadword.1)
+}
+set getbantime [channel get $chan antibadword-bantime]
+if {$getbantime == "0"} { set getbantime $black(antibadwordbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set text [antibadword:filter $arg]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {[channel get $chan antibadword]} {
+set file [open $bwordir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+foreach word $lines {
+set c [lindex [split $word] 0]
+set w [lrange [split $word] 1 end]
+if {[string match -nocase $c $chan]} { 
+if {[string match -nocase $w $text]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+foreach antibadword [string tolower $black(antibadword)] {
+if {[string match -nocase $antibadword $text]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+proc antibadword:protect:me {nick host hand chan keyword arg} {
+global black
+antibadword:protect $nick $host $hand $chan $arg
+}
+
+################################ badword ##################################
+
+proc antibadword:command:public {nick host hand chan arg} {
+global black botnick
+set why [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set bdword [lrange [split $arg] 1 end]
+set bdnumber [lindex [split $arg] 1]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+set bdnumber [lindex [split $arg] 2]
+set bdword [lrange [split $arg] 2 end]
+}
+antibadword:command:process $nick $host $hand $chan $chan1 $why $bdword $bdnumber $type
+}
+
+proc antibadword:command:process {nick host hand chan chan1 why bdword bdnumber type} {
+global black bwordir botnick
+set i 0
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+switch -exact -- [string tolower $why] {
+
+add {
+set file [open $bwordir a]
+puts $file "$chan $bdword"
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 badword.5 $bdword
+}
+
+list {
+set file [open $bwordir "r"]
+set why [read -nonewline $file]
+close $file
+set data [split $why "\n"]
+if {$data == ""} { 
+blacktools:tell $nick $host $hand $chan $chan1 badword.6 none
+blacktools:tell $nick $host $hand $chan $chan1 badword.7 none
+return 0
+}
+foreach word $data {
+set c [lindex [split $word] 0]
+set word [lrange [split $word] 1 end]
+if {[string match -nocase $chan $c]} {
+set foundchan 1
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 badword.6 none
+blacktools:tell $nick $host $hand $chan $chan1 badword.8 "4 $i. 12$word"
+}
+if {![info exists foundchan]} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.6 none
+blacktools:tell $nick $host $hand $chan $chan1 badword.7 none
+}
+
+}
+}
+
+del {
+if {![regexp {^[0-9]} $bdnumber]} {
+blacktools:tell $nick $host $hand $chan $chan1 badword.9 $bdword
+return 0
+}
+set file [open $bwordir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+foreach word $lines {
+set c [lindex [split $word] 0]
+if {[string match -nocase $c $chan]} { 
+set i [expr $bdnumber - 1]
+set delete [lreplace $lines $i $i]
+set file [open $bwordir "w"]
+puts $file [join $delete "\n"]
+close $file
+}
+}
+set file [open $bwordir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $bwordir "w"]
+close $files
+}
+blacktools:tell $nick $host $hand $chan $chan1 badword.10 $bdnumber
+}
+}
+}
+
+############################## AntiLongText ################################
+
+proc antilongtext:protect {nick uhost hand chan arg} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antilongtext-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antilongtext.1)
+}
+set getbantime [channel get $chan antilongtext-bantime]
+if {$getbantime == "0"} { set getbantime $black(longbantime) }
+set getlongchar [channel get $chan antilongtextmax]
+if {$getlongchar == "0"} { set getlongchar "$black(longchar)" }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set banmask "*!*@[lindex [split $uhost @] 1]"
+set reason "$protectreason"
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 } 
+if {[string length $arg] >= $getlongchar} {
+if {[channel get $chan antilongtext]} {
+blacktools:banner:1 $banmask $botnick $chan $reason $black(longmode) $black(longtimemode) $getbantime
+}
+}
+}
+
+proc antilongtext:protect:me {nick host hand chan keyword arg} {
+global black
+antilongtext:protect $nick $host $hand $chan $arg
+}
+
+############################ AntiBAdQuitPart ##############################
+
+set black(badcolors) {
+
+"*\x03*"
+"*\037*"
+"*\002*"
+
+}
+
+proc antipubpart:protect {nick host hand chan arg} {
+global botnick black
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antibadquitpart-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antibadquitpart.1)
+}
+set getbantime [channel get $chan antibadquitpart-bantime]
+if {$getbantime == "0"} { set getbantime $black(badquitparttime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set banmask "*!*@[lindex [split $host @] 1]"
+set reason "$protectreason"
+if {[channel get $chan badquitpart]} {
+foreach word $black(badquitpartwords) {
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {[string match -nocase $word $arg]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+proc antipubsign:protect {nick host hand chan arg} {
+antipubpart:protect $nick $host $hand $chan $arg
+}
+
+
+proc anticolorpart:protect {nick host hand chan arg} {
+global botnick black
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antibadquitpart-reason]
+if {$getreason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antibadquitpart.1)
+}
+set getbantime [channel get $chan antibadquitpart-bantime]
+if {$getbantime == "0"} { set getbantime $black(badquitparttime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set banmask "*!*@[lindex [split $host @] 1]"
+set reason "$protectreason"
+if {[channel get $chan badquitpart]} {
+foreach color $black(badcolors) {
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {($black(badquitpartcolour) == "1") && [string match -nocase $color $arg]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+proc anticolorquit:protect {nick host hand chan arg} {
+anticolorpart:protect $nick $host $hand $chan $arg
+}
+
+########################### AntiJoinPart #############################
+
+proc antijoinpart:protect {nick host hand chan arg} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antijoinpart-reason]
+if {$getreason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antijoinpart.1)
+}
+set getbantime [channel get $chan antijoinpart-bantime]
+if {$getbantime == "0"} { set getbantime $black(joinpartbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set banmask "*!*@[lindex [split $host @] 1]"
+set reason "$protectreason"
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {$chan == $botnick} { return 0 }
+if {[channel get $chan antijoinpart]} {
+if {[getchanjoin $nick $chan] >= [expr {[clock seconds]-$black(joinparttime)}]} {
+blacktools:banner:1 $banmask $botnick $chan $reason $black(joinpartmode) $black(joinparttimemode) $getbantime
+}
+}
+}
+
+proc spam:filter {str} {
+  regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
+  return $str
+}
+
+############################# AntiSpam ##############################
+
+proc antispam:protect {nick uhost hand arg} {
+global botnick black
+set text [spam:filter $arg]
+set handle [nick2hand $nick]
+foreach spammer [string tolower $black(spamword)] { 
+if {[string match -nocase $spammer $arg]} {
+foreach chans [channels] {
+if {![validchan $chans]} { return 0 }
+set getreason [channel get $chans antispam-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chans lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antispam.1)
+}
+set getbantime [channel get $chans antispam-bantime]
+if {$getbantime == "0"} { set getbantime $black(spamban) }
+if {[onchan $nick $chans]} {
+if {[channel get $chans antispam]} {
+if {![botisop $chans]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+set banmask *!*@[lindex [split $uhost @] 1]
+set replace(%chan%) $chans
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+if {[matchattr $handle $black(exceptflags) $chans]} { return 0 }
+if {[isvoice $nick $chans] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chans] && ($black(oprotect) == "1")} { return 0 }
+blacktools:banner:2 $banmask $botnick $chans $reason $getbantime
+}
+}
+}
+}
+}
+}
+proc antispam:protect:msg {nick host hand chan } {
+global black
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan antispam]} {
+if {[isbotnick $nick]} { return 0 }
+if {$black(spamreq) == "1"} {
+set getmsg [channel get $chan antispam-message]
+if {$getmsg == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getmsg $black(say.$getlang.antispam.2)
+}
+set replace(%nick%) $nick
+set replace(%chan%) $chan
+set spamsg [string map [array get replace] $getmsg]
+puthelp "PRIVMSG $nick :$spamsg"
+} 
+}
+}
+
+
+proc antispam:protect:cycle {min hour day mon year} {
+global black
+if {([scan $min %d]+([scan $hour %d]*60)) % $black(spamcycle) == 0} { 
+foreach chan [channels] {
+if { [channel get $chan antispam]} {
+putserv "PART $chan :$black(spammsgcycle)"; putserv "JOIN $chan"
+}
+}
+}
+}
+
+############################## AntiRepeat ###############################
+
+proc antirepeat:protect {nick host hand chan arg} {
+global black botnick count
+set arg [join [split $arg]]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antirepeat-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antirepeat.1)
+}
+set getbantime [channel get $chan antirepeat-bantime]
+if {$getbantime == "0"} { set getbantime $black(antirepeatbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set repeatset [channel get $chan antirepeat-setting]
+if {$repeatset == ""} { set repeatset "$black(repeats)" }
+set number [scan $repeatset %\[^:\]]
+set time [scan $repeatset %*\[^:\]:%s]
+set banmask *!*@[lindex [split $host @] 1]
+set handle [nick2hand $nick]
+foreach tmr [utimers] {
+if {[string match "*count(repeat:$host:$chan:$arg)*" [join [lindex $tmr 1]]]} {
+killutimer [lindex $tmr 2]
+}
+}
+if {[channel get $chan antirepeat]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+
+if {![info exists count(repeat:$host:$chan:$arg)]} { 
+set count(repeat:$host:$chan:$arg) 0 
+}
+
+if {![info exists count(repeat:$host:$chan)]} { 
+set count(repeat:$host:$chan) 0 
+}
+
+incr count(repeat:$host:$chan:$arg)
+utimer $time [list unset count(repeat:$host:$chan:$arg)]
+
+if {$count(repeat:$host:$chan:$arg) >= $number} {
+if {$black(antirepeattype) == "0"} { set count(repeat:$host:$chan) 2 } 
+incr count(repeat:$host:$chan)
+if {$count(repeat:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(repeat:$host:$chan) >= 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(repeat:$host:$chan)
+}
+}
+}
+}
+
+
+proc antirepeat:protect:me {nick host hand chan keyword arg} {
+antirepeat:protect $nick $host $hand $chan $arg
+}
+
+
+############################# AntiColor ################################
+
+proc anticolor:protect {nick host hand chan arg} {
+global black botnick count
+set arg [join [split $arg]]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan anticolor-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.anticolor.1)
+}
+set getbantime [channel get $chan anticolor-bantime]
+if {$getbantime == "0"} { set getbantime $black(anticolorbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+set handle [nick2hand $nick]
+if {[channel get $chan anticolor]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {![info exists count(color:$host:$chan)]} { 
+set count(color:$host:$chan) 0 
+}
+if {[string match *\003* $arg]} {
+incr count(color:$host:$chan)
+if {$black(anticolortype) == "0" } { set count(color:$host:$chan) 2 }
+if {$count(color:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(color:$host:$chan) == 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(color:$host:$chan)
+}
+}
+}
+}
+
+proc anticolor:protect:me {nick host hand chan keyword arg} {
+anticolor:protect $nick $host $hand $chan $arg
+}
+
+############################# AntiBold ################################
+
+proc antibold:protect {nick host hand chan arg} {
+global black botnick count
+set arg [split $arg]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antibold-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antibold.1)
+}
+set getbantime [channel get $chan antibold-bantime]
+if {$getbantime == "0"} { set getbantime $black(antiboldbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+set handle [nick2hand $nick]
+if {[channel get $chan antibold]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {![info exists count(bold:$host:$chan)]} { 
+set count(bold:$host:$chan) 0 
+}
+if {[string match *\002* $arg]} {
+incr count(bold:$host:$chan)
+if {$black(antiboldtype) == "0" } { set count(bold:$host:$chan) 2 }
+if {$count(bold:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(bold:$host:$chan) == 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(bold:$host:$chan)
+}
+}
+}
+}
+
+proc antibold:protect:me {nick host hand chan keyword arg} {
+antibold:protect $nick $host $hand $chan $arg
+}
+
+############################ AntiUnderline ###############################
+
+proc antiunderline:protect {nick host hand chan arg} {
+global black botnick count
+set arg [split $arg]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antiunderline-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antiunderline.1)
+}
+set getbantime [channel get $chan antiunderline-bantime]
+if {$getbantime == "0"} { set getbantime $black(antiunderlinebantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+set handle [nick2hand $nick]
+if {[channel get $chan antiunderline]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {![info exists count(underline:$host:$chan)]} { 
+set count(underline:$host:$chan) 0 
+}
+if {[string match *\037* $arg]} {
+incr count(underline:$host:$chan)
+if {$black(antiunderlinetype) == "0" } { set count(underline:$host:$chan) 2 }
+if {$count(underline:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(underline:$host:$chan) == 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(underline:$host:$chan)
+}
+}
+}
+}
+
+proc antiunderline:protect:me {nick host hand chan keyword arg} {
+antiunderline:protect $nick $host $hand $chan $arg
+}
+
+############################## AntiCaps #################################
+
+proc anticaps:protect {nick host hand chan arg} {
+global black botnick count
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan anticaps-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.anticaps.1)
+}
+set getbantime [channel get $chan anticaps-bantime]
+if {$getbantime == "0"} { set getbantime $black(anticapsbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask *!*@[lindex [split $host @] 1]
+if {![info exists count(caps:$host:$chan)]} { 
+set count(caps:$host:$chan) 0 
+}
+if {[channel get $chan anticaps]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+
+set caps($nick:$host) 0
+foreach word [split $arg {}] {
+if [string match \[A-Z\] $word] {
+incr caps($nick:$host)
+}
+
+}
+
+if {$caps($nick:$host) == 0} {
+  return 0
+}
+  if {[string length $arg] < 20} {return 0}
+  set capchar [string length $arg]
+  set number $caps($nick:$host)/$capchar
+  if {[expr 100 * $caps($nick:$host) / $capchar] > $black(anticapscount)} {
+incr count(caps:$host:$chan)
+if {$black(anticapstype) == "0" } { set count(caps:$host:$chan) 2 }
+if {$count(caps:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(caps:$host:$chan) == 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(caps:$host:$chan)
+}
+}
+}
+}
+
+proc anticaps:protect:me {nick host hand chan keyword arg} {
+anticaps:protect $nick $host $hand $chan $arg
+}
+
+################################ BadIdent #################################
+
+proc badident:protect:join {nick host hand chan} {
+global black botnick
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan badident-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.badident.1)
+}
+set getbantime [channel get $chan badident-bantime]
+if {$getbantime == "0"} { set getbantime $black(badidentbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set ident "[string trimleft [string tolower [lindex [split $host "@"] 0]] "~"]"
+set banmask "*!*$ident@*"
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan badident]} {
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[matchattr $hand $black(exceptflags) $chan]} { return 0 }
+foreach bit $black(badidentwords) {
+if {[string match -nocase $bit $ident]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+
+############################## BadFullname ###############################
+
+proc badfullname:protect:join {nick host hand chan} {
+global botnick black
+set ::cchan $chan
+set ::nnick $nick
+set ::hhost $host
+set handle [nick2hand $nick]
+if { [channel get $chan badfullname] } {
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[onchan $nick $chan]} {
+putquick "WHOIS $nick $nick"
+bind RAW - 311 badfullname:protect
+}
+}
+}
+
+proc badfullname:protect { from keyword arguments } {
+global botnick black
+set chan $::cchan
+set nick $::nnick
+set host $::hhost
+set getreason [channel get $chan badfullname-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.badfullname.1)
+}
+set getbantime [channel get $chan badfullname-bantime]
+if {$getbantime == "0"} { set getbantime $black(badfbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set fullname [string range [join [lrange $arguments 5 end]] 1 end]
+if {[onchan $nick $chan]} {
+set banmask *!*@[lindex [split [getchanhost $nick $chan] "@"] 1] 
+}
+  foreach realname $black(badfwords) {
+if {[string match -nocase $realname $fullname]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+unbind RAW - 311 badfullname:protect
+}
+
+################################ BadNick #################################
+
+proc badnick:protect:join {nick host hand chan} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan badnick-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.badnick.1)
+}
+set getbantime [channel get $chan badnick-bantime]
+if {$getbantime == "0"} { set getbantime $black(badnickbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask "$nick*!*@*"
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan badnick]} {
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+foreach badnick [string tolower $black(badnickwords)] {
+if {[string match $badnick [string tolower $nick]]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+proc badnick:protect:change {nick host hand chan newnick} {
+global black botnick
+set handle [nick2hand $nick]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan badnick-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.badnick.1)
+}
+set getbantime [channel get $chan badnick-bantime]
+if {$getbantime == "0"} { set getbantime $black(badnickbantime) }
+set replace(%chan%) $chan
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set banmask "$newnick*!*@*"
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan badnick]} {
+if {![botisop $chan]} { return 0 }
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+foreach badnick [string tolower $black(badnickwords)] {
+if {[string match $badnick [string tolower $newnick]]} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+}
+}
+}
+}
+
+
+
+########################### AntiJoinFlood ################################
+
+proc joinflood:protect {nick host hand chan} {
+global black count
+if {[channel get $chan antijoinflood]} {
+set getset [channel get $chan joinflood]
+if {$getset == ""} { set getset "4 5" }
+set number [lindex [split $getset] 0]
+set time [lindex [split $getset] 1]
+set replace(%chan%) $chan
+foreach tmr [utimers] {
+if {[string match "*count(joinflood:$chan)*" [join [lindex $tmr 1]]]} {
+killutimer [lindex $tmr 2]
+}
+}
+if {![info exists count(joinflood:$chan)]} { 
+set count(joinflood:$chan) 0 
+}
+
+incr count(joinflood:$chan)
+utimer $time [list unset count(joinflood:$chan)]
+
+if {$count(joinflood:$chan) >= "$number"} {
+if {![botisop $chan]} { return 0 }
+putquick "MODE $chan +$black(modes)" ; utimer $black(nomodetime) [list putquick "MODE $chan -$black(modes)"]
+if {$black(fjoinhow) == "1"} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getmessage $black(say.$getlang.antijoinflood.1)
+set message [string map [array get replace] $getmessage]
+puthelp "NOTICE @$chan :$message"
+}
+}
+}
+}
+
+
+########################## Login ###############################
+
+proc loginpublic {my} {
+     global botnick black
+        putquick "$black(login)"   
+        putquick "MODE $botnick :$black(xmod)"
+        
+}
+
+
+proc publiclogin:Cmd {nick host hand chan arg} {
+global botnick black
+putquick "$black(login)"
+putquick "MODE $botnick :$black(xmod)"
+blacktools:tell:prv $nick $host $hand login.1 $black(chanserv)
+}
+
+########################### User Protection ################################
+
+proc protectpublic {nick host hand chan args} {
+global black
+set bans [lindex $args 1]
+if {![botisop $chan]} { return 0 }
+if {$bans == "*!*@*"} { putquick "MODE $chan -b $bans"
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $bans $host]} {
+putquick "MODE $chan -b $bans"
+if {[onchan $black(chanserv) $chan]} {
+putquick "PRIVMSG $black(chanserv) :unban $chan $bans"
+}
+}
+}
+}
+}
+
+############################## AntiChanFlood ###############################
+
+proc antifloodchan:protect {nick host hand chan arg} {
+global black botnick count
+set arg [split $arg]
+if {![validchan $chan]} { return 0 }
+set getreason [channel get $chan antichanflood-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.antichanflood.1)
+}
+set getbantime [channel get $chan antichanflood-bantime]
+if {$getbantime == "0"} { set getbantime $black(antifloodchanbantime) }
+set replace(%chan%) $chan
+set getset [channel get $chan chanflood]
+if {$getset == ""} { set getset "4 5" }
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set number [lindex [split $getset] 0]
+set time [lindex [split $getset] 1]
+set banmask *!*@[lindex [split $host @] 1]
+set handle [nick2hand $nick]
+foreach tmr [utimers] {
+if {[string match "*count(repeat:$host:$chan:flood)*" [join [lindex $tmr 1]]]} {
+killutimer [lindex $tmr 2]
+}
+}
+if {[channel get $chan antichanflood]} {
+if {[isvoice $nick $chan] && ($black(vprotect) == "1")} { return 0 }
+if {[isop $nick $chan] && ($black(oprotect) == "1")} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+
+if {![info exists count(repeat:$host:$chan:flood)]} { 
+set count(repeat:$host:$chan:flood) 0 
+}
+
+if {![info exists count(repeat:$host:$chan)]} { 
+set count(repeat:$host:$chan) 0 
+}
+
+incr count(repeat:$host:$chan:flood)
+utimer $time [list unset count(repeat:$host:$chan:flood)]
+
+if {$count(repeat:$host:$chan:flood) >= $number} {
+if {$black(antifloodchantype) == "0"} { set count(repeat:$host:$chan) 2 } 
+incr count(repeat:$host:$chan)
+if {$count(repeat:$host:$chan) == 1} {
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $nick :$reason"
+}
+if {$count(repeat:$host:$chan) >= 2} {
+blacktools:banner:2 $banmask $botnick $chan $reason $getbantime
+unset count(repeat:$host:$chan)
+}
+}
+}
+}
+
+proc antifloodchan:protect:me {nick host hand chan keyword arg} {
+antirepeat:protect $nick $host $hand $chan $arg
+}
+
+################################# reban ################################
+
+proc rebanpublic {nick host hand chan} {
+global black
+if {[channel get $chan xban]} {
+set host "$nick![getchanhost $nick $chan]"
+set getxtime [channel get $chan xbantime]
+set getxlevel [channel get $chan xbanlevel]
+if {$getxlevel == "0"} { set getxlevel "100" } 
+if {$getxtime == "0"} { set getxtime "1" }
+foreach ban [banlist $chan] {
+set reason "[lindex $ban 1]"
+if {[string match -nocase [string tolower [lindex $ban 0]] $host]} {
+putquick "PRIVMSG $black(chanserv) :ban $chan [lindex $ban 0] $getxtime $getxlevel $reason"
+}
+}
+}
+}
+
+################################# XTOOLS ################################
+
+proc toolspublic {chan type} {
+global botnick black
+if {![channel get $chan xtools]} {
+return 0
+}
+if {$type == "op"} {
+if  {![onchan "$black(chanserv)" $chan] && ![botisop $chan]} {
+return 0
+}
+putquick "PRIVMSG $black(chanserv) :unban $chan $botnick"
+putquick "PRIVMSG $black(chanserv) :op $chan $botnick"
+return 0
+}
+if {$type == "unban"} {
+putquick "PRIVMSG $black(chanserv) :unban $chan $botnick"
+return 0
+}
+if {$type == "invite" || $type == "limit"} {
+putquick "PRIVMSG $black(chanserv) :invite $chan $botnick"
+return 0
+}
+}
+
+
+################################# Clone Scan ###################################
+
+
+
+proc scannerpublic {nick host hand chan arg} {
+global black count
+set c [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+scanner:process $nick $host $hand $chan $chan1
+}
+
+proc scanner:process {nick host hand chan chan1} {
+global botnick black
+array set clones [list]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 clonescan.4 none
+foreach user [chanlist $chan] {
+set host [string tolower [lindex [split [getchanhost $user $chan] @] 1]]
+if {![string match "*.undernet.org*" $host]} {
+if {!($black(maxclone) >= "2")} { return 0 }
+if {![info exists c($host:$chan)]} {
+set c($host:$chan) 0
+}
+set c($host:$chan) [expr $c($host:$chan) +1]
+lappend clones($user) $host
+if {$c($host:$chan) >= $black(maxclone)} {
+foreach clon [lsort -unique [array names clones]] {
+set hosts [string tolower [lindex [split [getchanhost $clon $chan] @] 1]]
+if {$host == $hosts} {
+lappend clona($host) [join $clon " , "]
+} 
+}
+blacktools:tell $nick $host $hand $chan $chan1 clonescan.1 "$c($host:$chan) $host [lsort -unique $clona($host)]"
+}
+utimer 3 [list blacktools:tell $nick $host $hand $chan $chan1 clonescan.2 none]
+}
+} 
+}
+
+proc clonescanner {minute hour day month year} {
+global black botnick
+foreach chan [channels] {
+set replace(%chan%) $chan
+if {[channel get $chan clonescan]} {
+putlog "Scaning for clones on $chan.."
+foreach user [chanlist $chan] {
+set host [string tolower [lindex [split [getchanhost $user $chan] @] 1]]
+set replace(%host%) $host
+if {![info exists c($host:$chan)]} {
+set c($host:$chan) 0
+}
+array set clones [list]
+if {![string match "*.undernet.org*" $host]} {
+if {!($black(maxclone) >= "2")} { return 0 }
+set c($host:$chan) [expr $c($host:$chan) +1]
+lappend clones($user) $host
+if {$c($host:$chan) >= $black(maxclone)} {
+foreach clon [array names clones] {
+set hosts [string tolower [lindex [split [getchanhost $clon $chan] @] 1]]
+if {$host == $hosts} {
+lappend clona($host) [join $clon " , "]
+} 
+}
+set replace(%num%) $c($host:$chan)
+set replace(%clone%) [lsort -unique $clona($host)]
+if {$black(what) == "0"} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+putserv "NOTICE @$chan :[string map [array get replace] $black(say.$getlang.clonescan.3)]"
+}
+if {$black(what) == "1"} {
+set banmask *!*@[lindex [split $host @] 1]
+set reason [string map [array get replace] $black(reason)]
+blacktools:banner:2 $banmask $botnick $chan $reason $black(clonebtime)
+}
+}
+}
+}
+}
+}
+}
+
+
+
+############################# Topic refresh #########################
+
+proc refreshpublic {nick host hand chan arg} {
+global botnick black
+set thetopic [topic $chan]
+puthelp "TOPIC $chan :$black(topics)"
+puthelp "TOPIC $chan :$thetopic"
+}
+
+
+proc times_topic {} {
+ global black
+foreach chan [channels] {
+if {[channel get $chan topicrefresh] } {
+set thetopic [topic $chan]
+   puthelp "TOPIC $chan :$black(topics)"
+   puthelp "TOPIC $chan :$thetopic"
+
+}
+}
+timer $black(topic_time) times_topic
+ return 1
+}
+
+
+
+################################ count ####################################
+
+proc countpublic {nick host hand chan arg} {
+global black
+set type 0
+set chan1 "$chan"
+set why [lindex [split $arg] 0]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+}
+count:process $nick $host $hand $chan $chan1 $why $type
+}
+
+
+proc count:process {nick host hand chan chan1 why type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 count.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 count.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 count.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 count.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+if { [channel get $chan count] } { set countstats "on" } else { set countstats "off"}
+if {($countstats == "on") && ($why == "on")} { blacktools:tell $nick $host $hand $chan $chan1 count.5 none
+return 0
+}
+if {($countstats == "off") && ($why == "off")} { blacktools:tell $nick $host $hand $chan $chan1 count.6 none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|display|reset)} $why tmp counter]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $counter {
+
+on {
+channel set $chan +count
+blacktools:tell $nick $host $hand $chan $chan1 count.7 none
+}
+
+off {
+channel set $chan -count
+blacktools:tell $nick $host $hand $chan $chan1 count.8 none
+}
+
+display {
+set stats [channel get $chan countnumber]
+blacktools:tell $nick $host $hand $chan $chan1 count.9 $stats
+}
+
+reset {
+channel set $chan countnumber 0
+blacktools:tell $nick $host $hand $chan $chan1 count.10 none
+
+}
+} 
+} 
+}
+
+
+proc countpublic:join {nick host hand chan} {
+global black
+if {[isbotnick $nick]} { return 0}
+if {[channel get $chan count]} {
+set stats [channel get $chan countnumber]
+set counting [expr $stats +1]
+channel set $chan countnumber $counting
+set replace(%num%) $counting
+set replace(%chan%) $chan
+set countmes [channel get $chan count-message]
+if {$countmes == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set countmessage [string map [array get replace] $black(say.$getlang.count.11)]
+}
+putquick "NOTICE $nick :$countmessage"
+}
+}
+
+
+############################### Private ##########################
+
+proc privatepublic {nick host hand chan arg} {
+global black
+set type 0
+set chan1 "$chan"
+set why [lindex [split $arg] 0]
+set user [lindex [split $arg] 1]
+set host [lindex [split $arg] 2]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+set user [lindex [split $arg] 2]
+set host [lindex [split $arg] 3]
+}
+private:process $nick $host $hand $chan $chan1 $why $user $host $type
+}
+
+proc private:process {nick host hand chan chan1 why user host type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flags "-|f"
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 private.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 private.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 private.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 private.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $why tmp privat]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $privat {
+on {
+     channel set $chan +private
+blacktools:tell $nick $host $hand $chan $chan1 private.5 none
+}
+
+off {
+     channel set $chan -private
+blacktools:tell $nick $host $hand $chan $chan1 private.6 none
+}
+
+add {
+
+if {[validuser $user]} { 
+chattr $user $flags $chan
+blacktools:tell $nick $host $hand $chan $chan1 private.7 $user
+return 0
+}
+adduser $user $host
+chattr $user $flags $chan
+blacktools:tell $nick $host $hand $chan $chan1 private.8 "$user $host"
+}
+
+
+del {
+
+if {[validuser $user]} {
+chattr $user -|-f $chan
+blacktools:tell $nick $host $hand $chan $chan1 private.9 $user
+} else { blacktools:tell $nick $host $hand $chan $chan1 private.10 $user
+return 0
+}
+}
+
+list {
+set list [userlist $flags $chan]
+blacktools:tell $nick $host $hand $chan $chan1 private.11 $list
+}
+
+}
+}
+}
+
+
+
+proc private:module {nick host hand chan} {
+global black botnick
+set getreason [channel get $chan private-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.private.12)
+}
+set getbantime [channel get $chan private-bantime]
+if {$getbantime == "0"} { set getbantime $black(privatebantime) }
+set handle [nick2hand $nick]
+set mask "*!*@[lindex [split $host @] 1]"
+if {[channel get $chan private]} {
+if {[matchattr $handle nm|oMASOVf $chan]} { 
+return 0 
+}
+newchanban $chan $mask $botnick $getreason $getbantime
+}
+}
+
+
+############################### BadChan ###########################
+
+proc badchanpublic {nick host hand chan arg} {
+global black
+set why [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set bdchan [join [lindex [split $arg] 1]]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+set bdchan [join [lindex [split $arg] 2]]
+}
+badchan:process $nick $host $hand $chan $chan1 $why $bdchan $type
+}
+
+proc badchan:process {nick host hand chan chan1 why bdchan type} {
+global botnick black
+set flag "antibadchan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/badchan($chan).txt"
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 badchan.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 badchan.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 badchan.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 badchan.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $why tmp bc]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $bc {
+on {
+channel set $chan +$flag
+blacktools:tell $nick $host $hand $chan $chan1 badchan.5 none
+}
+off {
+channel set $chan -$flag
+blacktools:tell $nick $host $hand $chan $chan1 badchan.6 none
+
+}
+
+add {
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $bdchan
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 badchan.7 $bdchan
+}
+
+list {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set dir "logs/badchan($chan).txt"
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 badchan.8 none
+return 0
+}
+foreach cc $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 badchan.9 none
+blacktools:tell $nick $host $hand $chan $chan1 badchan.10 "$i. $cc"
+}
+}
+
+del {
+if {![regexp {^[0-9]} $bdchan]} {
+blacktools:tell $nick $host $hand $chan $chan1 badchan.11 none
+return 0
+}
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"] 
+set i [expr $bdchan - 1]
+set delete [lreplace $lines $i $i]
+set file [open $dir "w"]
+puts $file [join $delete "\n"]
+close $file
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+blacktools:tell $nick $host $hand $chan $chan1 badchan.12 $bdchan
+blacktools:tell $nick $host $hand $chan $chan1 badchan.13 none
+}
+
+
+}
+}
+}
+
+
+
+proc badchanpublic:join {nick host hand chan} {
+global black
+set handle [nick2hand $nick]
+set ::ccchan $chan
+if {![validchan $chan]} {
+return 0
+}
+if {[matchattr $handle nm|MASoOVv $chan]} { return 0 }
+if {![botisop $chan]} { return 0 }
+if {[isbotnick $nick]} { return 0 }
+if {[channel get $chan antibadchan]} {
+if {[onchan $nick $chan]} {
+utimer 5 [list putquick "WHOIS $nick $nick"]
+bind RAW - 319 badchanpublic:ban
+}
+}
+}
+
+proc badchanpublic:ban {from keyword arguments } {
+global botnick black
+set chan $::ccchan
+set arguments [join $arguments]
+set nick [string tolower [lindex $arguments 1]] 
+set replace(%chan%) $chan
+set replace(%nick%) $nick
+set handle [nick2hand $nick]
+set args [join $arguments]
+set getreason [channel get $chan badchan-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.badchan.14)
+}
+set getbantime [channel get $chan badchan-bantime]
+if {$getbantime == "0"} { set getbantime $black(badcbantime) }
+if {[channel get $chan antibadchan]} {
+if {[matchattr $handle $black(exceptflags) $chan]} { return 0 }
+set protectreason [string map [array get replace] $getreason]
+set reason "$protectreason"
+set channels [string tolower [lrange $args 2 end]]
+set banmask *!*@[lindex [split [getchanhost $nick $chan] "@"] 1]
+set dir "logs/badchan($chan).txt"
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set bchan [split $w "\n"]
+if {$w == ""} { return 0 }
+foreach badchan $bchan {
+set replace(%bchan%) $badchan
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set protectmsg [string map [array get replace] $black(say.$getlang.badchan.15)]
+foreach c $channels {
+set ch [string trimleft $c ":@+"]
+if {[string match -nocase $badchan $ch]} {
+blacktools:banner:2 $banmask $botnick $chan $getreason $getbantime
+putserv "PRIVMSG $nick :$protectmsg"
+}
+}
+}
+}
+}
+
+
+################################# Antitake ##################################
+
+
+proc dontdeoppublic {nick host hand chan args} {
+global black botnick
+set dnick [lindex $args 1]
+set handle [nick2hand $nick]
+if {[channel get $chan dontdeop] } {
+if {[string match -nocase $nick $botnick]} {
+return 0
+}
+if {![matchattr $handle $black(exceptflags) $chan]} {
+putquick "MODE $chan -o $nick"
+putquick "MODE $chan +o $dnick"
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+puthelp "NOTICE $nick :$black(say.$getlang.antitake.1)"
+}
+}
+}
+ 
+proc dontoppublic {nick host hand chan args} {
+global black botnick
+set onick [lindex $args 1]
+set handle [nick2hand $nick]
+if {[channel get $chan dontop]} {
+if {[string match -nocase $nick $botnick]} { 
+return 0
+}
+if {[string match -nocase $onick $botnick]} {
+return 0
+}
+if {![matchattr $handle $black(exceptflags) $chan]} {
+putquick "MODE $chan -o $nick"
+putquick "MODE $chan -o $onick"
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+puthelp "NOTICE $nick :$black(say.$getlang.antitake.2)"
+}
+}
+}
+
+
+################################# Anunt ###################################
+
+
+proc anuntpublic {nick host hand chan arg} {
+global black
+set type 0
+set chan1 "$chan"
+set who [lindex [split $arg] 0]
+set message [join [lrange [split $arg] 1 end]]
+set number [lindex [split $arg] 1]
+if {[regexp {^[\\+!#&]} $who] && [matchattr $hand nm|- $chan]} {
+set chan "$who"
+set who [lindex [split $arg] 1]
+set message [join [lrange [split $arg] 2 end]]
+set number [lindex [split $arg] 2]
+}
+anunt:process $nick $host $hand $chan $chan1 $who $message $number $type
+}
+
+proc anunt:process {nick host hand chan chan1 who message number type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/anunt($chan).txt"
+if {[matchattr $hand nm|- $chan]} {
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 anunt.1 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 anunt.2 none
+return 0
+}
+}
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 anunt.3 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 anunt.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $who tmp a]) && (![regexp -nocase -- {\S#} $who])} {
+    switch $a {
+on {
+channel set $chan +anunt
+blacktools:tell $nick $host $hand $chan $chan1 anunt.5 none
+}
+
+off {
+channel set $chan -anunt
+blacktools:tell $nick $host $hand $chan $chan1 anunt.6 none
+}
+
+add {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $message
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 anunt.7 none
+blacktools:tell $nick $host $hand $chan $chan1 anunt.8 $message
+}
+
+list {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 anunt.9 none
+return 0
+}
+foreach mes $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 anunt.10 none
+blacktools:tell $nick $host $hand $chan $chan1 anunt.8 "$i. $mes"
+}
+}
+
+del {
+
+if {![regexp {^[0-9]} $number]} {
+blacktools:tell $nick $host $hand $chan $chan1 anunt.11 none
+return 0
+}
+
+set dir "logs/anunt($chan).txt"
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set i [expr $number - 1]
+set delete [lreplace $lines $i $i]
+set files [open $dir "w"]
+puts $files [join $delete "\n"]
+close $files
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 anunt.12 $number
+blacktools:tell $nick $host $hand $chan $chan1 anunt.13 none
+}
+
+}
+}
+}
+
+proc anuntpublic:show {} {
+global black count
+foreach chan [channels] {
+if {[validchan $chan]} {
+set dir "logs/anunt($chan).txt"
+if {[channel get $chan anunt]} {
+if {![info exists count(anunt:$chan)]} {
+set count(anunt:$chan) 0
+}
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set line [lindex $lines $count(anunt:$chan)]
+incr count(anunt:$chan)
+if {$line == ""} {
+unset count(anunt:$chan)
+}
+if {$black(anunthow) == "1"} {
+puthelp "PRIVMSG $chan :\001ACTION $line\001"
+} else { 
+puthelp "PRIVMSG $chan :$line"
+}
+}
+}
+}
+timer $black(anunttime) anuntpublic:show
+return 1
+}
+
+################################## TimeBan #############################
+
+
+proc timeban:module {nick host hand chan} {
+global botnick
+if {[channel get $chan showtime]} {
+set host "$nick![getchanhost $nick $chan]"
+foreach ban [banlist $chan] {
+if {[string match -nocase [string tolower [lindex $ban 0]] $host]} {
+set reason "[lindex $ban 1]"
+set bantime "[lindex $ban 2]"
+set totalday [expr $bantime - [unixtime]]
+if {$totalday >= 86400} {
+set daysfull [expr $totalday/86400]
+set days [expr int($daysfull)]
+set dayssub [expr 86400*$days]
+set totalhour [expr $totalday - $dayssub]
+}
+if {$totalday < 86400} {
+set totalhour $totalday
+set days 0
+}
+if {$totalhour >= 3600} {
+set hoursfull [expr $totalhour/3600]
+set hours [expr int($hoursfull)]
+set hourssub [expr 3600*$hours]
+set totalmin [expr $totalhour - $hourssub]
+}
+if {$totalhour < 3600} {
+set totalmin $totalhour
+set hours 0
+}
+if {$totalmin >= 60} {
+set minsfull [expr $totalmin/60]
+set mins [expr int($minsfull)]
+}
+if {$totalmin < 60} {
+set mins 0
+}
+if {$days < 1} {set zi "0 zile, "} elseif {$days == 1} {set zi "$days zi, "} {set zi "$days zile, "}
+if {$hours < 1} {set ora "0"} else { set ora "$hours" }
+set minut "$mins"
+set re "$reason Expire :$zi$ora:$minut"
+if {[lindex $ban 2] == 0} {
+set expire "Expire :Perm Ban"
+set re "$reason $expire"
+}
+putquick "MODE $chan +b [lindex $ban 0]"
+putquick "KICK $chan $nick :$re"
+}
+}
+}
+}
+
+
+
+############################### AutoBroadcast ############################
+
+proc broadcastpublic:module {nick host hand chan arg} {
+global black sdir
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set chan1 "$chan"
+set who [lindex [split $arg] 0]
+set message [join [lrange [split $arg] 1 end]]
+set number [lindex [split $arg] 1]
+if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.1 none
+return 0
+}
+broadcast:process $nick $host $hand $chan $chan1 $who $message $number
+}
+
+
+
+
+proc broadcast:process {nick host hand chan chan1 who message number} {
+global botnick black sdir
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/broadcast.txt"
+set lin 0
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $who tmp a]) && (![regexp -nocase -- {\S#} $who])} {
+    switch $a {
+
+on {
+set type "broadcastpublic:show ON"
+foreach tmr [timers] {
+if {[string match "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.3 none
+return 0
+}
+}
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.4 none
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set who [lindex  [split $line] 0]
+set stats [lindex [split $line] 1]
+if {[string match -nocase "broadcastpublic:show" $who]} {
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $sdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $sdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $sdir "w"]
+close $files
+}
+set file [open $sdir "a"]
+puts $file "$type"
+close $file
+timer $black(bttime) broadcastpublic:show
+}
+
+off {
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.5 none
+set type "broadcastpublic:show OFF"
+foreach tmr [timers] {
+if {[string match -nocase "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
+killtimer [lindex $tmr 2]
+}
+}
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set who [lindex  [split $line] 0]
+set stats [lindex [split $line] 1]
+if {[string match -nocase "broadcastpublic:show" $who]} {
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $sdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $sdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $sdir "w"]
+close $files
+}
+set file [open $sdir "a"]
+puts $file "$type"
+close $file
+}
+
+add {
+if {[file exists $dir] == 0} {
+set file [open $dir a]
+close $file
+}
+set file [open $dir a]
+puts $file $message
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.6 none
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.7 $message
+}
+
+list {
+if {[file exists $dir] == 0} {
+set file [open $dir a]
+close $file
+}
+set dir "logs/broadcast.txt"
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.8 none
+return 0
+}
+foreach mes $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.9 none
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.7 "$i. $mes"
+}
+}
+
+del {
+
+if {![regexp {^[0-9]} $number]} {
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.10 none
+return 0
+}
+
+set dir "logs/broadcast.txt"
+if {[file exists $dir] == 0} {
+set file [open $dir a]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set i [expr $number - 1]
+set delete [lreplace $lines $i $i]
+set files [open $dir "w"]
+puts $files [join $delete "\n"]
+close $files
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.11 $number
+}
+
+}
+}
+}
+
+
+proc broadcastpublic:show {} {
+global black
+set dir "logs/broadcast.txt"
+if {[file exists $dir] == 0} {
+set file [open $dir a]
+close $file
+}
+foreach chan [channels] {
+if {[isdynamic $chan] && (![channel get $chan silent])} {
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set numlines [llength $lines]
+set random [rand $numlines]
+set randomline [lindex $lines $random]
+if {$black(bthow) == "1"} {
+puthelp "PRIVMSG $chan :\001ACTION 1(BROADCAST) $randomline\001"
+} else { 
+puthelp "PRIVMSG $chan :1(BROADCAST) $randomline"
+}
+}
+}
+timer $black(bttime) broadcastpublic:show
+return 1
+}
+
+
+################################# Limit ###################################
+
+
+proc limitpublic {nick host hand chan arg} {
+global black 
+set why [lindex [split $arg] 0]
+set lm [lindex [split $arg] 1]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+set lm [lindex [split $arg] 2]
+}
+limit:process $nick $host $hand $chan $chan1 $why $lm $type
+}
+
+proc limit:process {nick host hand chan chan1  why lm type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 limit.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 limit.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 limit.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 limit.4 none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+set usersnum [llength [chanlist $chan]]
+set setnum [channel get $chan blacklimit]
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|set|on|off)} $why tmp lmt]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $lmt {
+
+on {
+set limt [channel get $chan blacklimit]
+channel set $chan +limit
+blacktools:tell $nick $host $hand $chan $chan1 limit.5 none
+if {($limt != "0")} {
+putserv "MODE $chan +l [expr $usersnum + $limt]"
+} else {
+putserv "MODE $chan +l [expr $usersnum + 10]"
+channel set $chan blacklimit 10
+blacktools:tell $nick $host $hand $chan $chan1 limit.6 none
+}
+}
+off {
+channel set $chan -limit
+blacktools:tell $nick $host $hand $chan $chan1 limit.7 none
+putquick "MODE $chan -l"
+}
+
+set {
+if {![regexp {^[0-9]} $lm]} {
+blacktools:tell $nick $host $hand $chan $chan1 limit.8 none
+return 0
+}
+if {$lm < 2} { blacktools:tell $nick $host $hand $chan $chan1 limit.9 none
+channel set $chan blacklimit 2
+putserv "MODE $chan +l [expr $usersnum + $lm]"
+blacktools:tell $nick $host $hand $chan $chan1 limit.10 none
+return 0
+}
+if {$lm > 500} { blacktools:tell $nick $host $hand $chan $chan1 limit.11 none
+return 0
+}
+
+channel set $chan blacklimit $lm
+blacktools:tell $nick $host $hand $chan $chan1 limit.12 $lm
+putserv "MODE $chan +l [expr $usersnum + $lm]"
+}
+
+}
+}
+}
+
+proc limit:timer {min hour day mon year} {
+global black
+foreach chan [channels] {
+if {[channel get $chan limit]} {
+set usersnum [llength [chanlist $chan]]
+set setnum [channel get $chan blacklimit]
+if {$setnum == "0"} { set setnum "10" }
+if {![botisop $chan]} { return 0 }
+set chanmode [getchanmode $chan]
+if {[string match "*l*" "$chanmode"]} {
+set lim [lindex $chanmode 1]
+} else { set lim "0" }
+if {$usersnum > $lim} { set dif [expr $usersnum - $lim] } else { set dif [expr $lim - $usersnum] }
+if {($dif >= $setnum) || ($dif <= $setnum)} {
+putserv "MODE $chan +l [expr $usersnum + $setnum]"
+}
+
+}
+}
+}
+
+
+
+
+
+################################# Topic ###################################
+
+proc topicpublic {nick host hand chan arg} {
+global black
+set nop [lindex [split $arg] 0]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set type 0
+set chan1 "$chan"
+set tp [join [lrange [split $arg] 1 end]]
+set number [lindex [split $arg] 1]
+if {[regexp {^[\\+!#&]} $nop] && [matchattr $hand nm|- $chan]} {
+set chan "$nop"
+set nop [lindex [split $arg] 1]
+set tp [join [lrange [split $arg] 2 end]]
+set number [lindex [split $arg] 2]
+}
+topic:process $nick $host $hand $chan $chan1 $nop $tp $number $type
+}
+
+
+
+proc topic:process {nick host hand chan chan1 nop tp number type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/topic($chan).txt"
+if {[matchattr $hand nm|- $chan]} {
+if {($nop == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 topic.1 none
+return 0
+}
+if {($nop == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 topic.2 none
+return 0
+}
+}
+if {($nop == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 topic.3 none
+return 0
+}
+if {($nop == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 topic.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+ if {([regexp -nocase -- {(#[0-9]+|save|list|add|del|set)} $nop tmp topc]) && (![regexp -nocase -- {\S#} $nop])} {
+    switch $topc {
+
+ save {
+set t [join [topic $chan]]
+if {$t == ""} { blacktools:tell $nick $host $hand $chan $chan1 topic.5 none
+return 0
+}
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $t
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 topic.6 none
+}
+
+add {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $tp
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 topic.7 none
+}
+
+list {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 topic.8 none
+return 0
+}
+foreach ts $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 topic.9 none
+blacktools:tell $nick $host $hand $chan $chan1 topic.10 "$i. $ts"
+}
+}
+
+del {
+
+if {![regexp {^[0-9]} $number]} {
+blacktools:tell $nick $host $hand $chan $chan1 topic.11 none
+return 0
+}
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set i [expr $number - 1]
+set delete [lreplace $lines $i $i]
+set files [open $dir "w"]
+puts $files [join $delete "\n"]
+close $files
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+blacktools:tell $nick $host $hand $chan $chan1 topic.12 $number
+}
+
+set {
+if {$number == ""} { blacktools:tell $nick $host $hand $chan $chan1 topic.13 none
+return 0
+}
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set num [expr $number - 1]
+set line [lindex $lines $num]
+putquick "TOPIC $chan :Setting topic.."
+puthelp "TOPIC $chan :$line"
+blacktools:tell $nick $host $hand $chan $chan1 topic.14 $number
+}
+
+}
+}
+}
+
+
+################################# Seen ###################################
+
+
+proc seen:save:2 {nick chan host type time staytimer reason} {
+global seendir
+set lin 0
+set j 0
+set who "$type $chan $nick $host $time $staytimer $reason"
+set file [open $seendir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set userentry [lindex  [split $line] 2]
+set chanentry [lindex [split $line] 1]
+if {[string equal -nocase $userentry $nick] && [string match -nocase $chanentry $chan]} {
+set joined [lindex [split $line] 0]
+if {$joined == "JOIN"} {
+set j [lindex [split $line] 4]
+if {![regexp {^[0-9]} $j] || ($j == "")} {
+set j 0
+}
+}
+set who "$type $chan $nick $host $time $j $reason"
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $seendir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $seendir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $seendir "w"]
+close $files
+}
+set file [open $seendir "a"]
+puts $file "$who"
+close $file
+}
+
+proc seen:save:1 {nick chan host type time staytimer} {
+global seendir
+set lin 0
+set who "$type $chan $nick $host $time $staytimer"
+set file [open $seendir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set userentry [lindex  [split $line] 2]
+set chanentry [lindex [split $line] 1]
+if {[string equal -nocase $userentry $nick] && [string match -nocase $chanentry $chan]} {
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $seendir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $seendir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $seendir "w"]
+close $files
+}
+set file [open $seendir "a"]
+puts $file "$who"
+close $file
+}
+
+
+proc seen:join {nick host hand chan} {
+global seendir botnick
+if {![channel get $chan seen]} {
+return 0
+}
+if {[isbotnick $nick]} { return 0 }
+set time [unixtime]
+set host "*!$host"
+set type "JOIN"
+set staytimer "0"
+seen:save:1 $nick $chan $host $type $time $staytimer
+}
+
+
+proc seen:part {nick host hand chan arg} {
+global seendir botnick
+if {![validchan $chan]} { return 0 }
+if {![channel get $chan seen]} {
+return 0
+}
+set time [unixtime]
+set staytimer "0"
+set type "PART"
+set reason [join [lrange [split $arg] 0 end]]
+if {$reason == ""} { set reason "No Reason" }
+set host "*!$host"
+if {[isbotnick $nick]} { return 0 }
+seen:save:2 $nick $chan $host $type $time $staytimer $reason
+}
+
+proc seen:sign {nick host hand chan arg} {
+global seendir botnick
+if {![validchan $chan]} { return 0 }
+if {![channel get $chan seen]} {
+return 0
+}
+set time [unixtime]
+set staytimer "0"
+set type "SIGN"
+set host "*!$host"
+set reason [join [lrange [split $arg] 0 end]]
+if {$reason == ""} { set reason "No Reason" }
+if {[isbotnick $nick]} { return 0 }
+seen:save:2 $nick $chan $host $type $time $staytimer $reason
+}
+
+
+proc seen:kick {nick host hand chan kicked reason} {
+global seendir botnick
+if {![validchan $chan]} { return 0 }
+if {![channel get $chan seen]} {
+return 0
+}
+set lin 0
+set j 0
+set time [unixtime]
+set hosted [getchanhost $kicked $chan]
+set hosted "*!$hosted"
+set reason [join [lrange [split $reason] 1 end]]
+if {$reason == ""} { set reason "No Reason" }
+if {[isbotnick $kicked]} { return 0 }
+set who "KICK $chan $kicked $hosted $time 0 $reason"
+set file [open $seendir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set userentry [lindex [split $line] 2]
+set chanentry [lindex [split $line] 1]
+if {[string equal -nocase $kicked $userentry] && [string match -nocase $chanentry $chan]} {
+set joined [lindex [split $line] 0]
+if {$joined == "JOIN"} {
+set j [lindex [split $line] 4]
+if {![regexp {^[0-9]} $j] || ($j == "")} {
+set j 0
+}
+}
+set who "KICK $chan $kicked $hosted $time $j $reason"
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $seendir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $seendir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $seendir "w"]
+close $files
+}
+set file [open $seendir "a"]
+puts $file "$who"
+close $file
+}
+
+
+proc seen:split {nick host hand chan args} {
+global seendir botnick
+if {![validchan $chan]} { return 0 }
+if {![channel get $chan seen]} {
+return 0
+}
+set time [unixtime]
+set staytimer "0"
+set type "SPLIT"
+set host "*!$host"
+set reason [join [lrange [split $args] 0 end]]
+if {[isbotnick $nick]} { return 0 }
+seen:save:2 $nick $chan $host $type $time $staytimer $reason
+}
+
+
+proc seen:changenick {nick host hand chan newnick} {
+global seendir botnick
+if {![channel get $chan seen]} {
+return 0
+}
+set time [unixtime]
+set host "*!$host"
+set staytimer "0"
+set type "NICKCHANGE"
+if {[isbotnick $nick]} { return 0 }
+seen:save:2 $nick $chan $host $type $time $staytimer $newnick
+}
+
+proc seenpublic {nick host hand chan arg} {
+global black
+if {![channel get $chan seen]} {
+return 0
+}
+set type 0
+set chan1 "$chan"
+set what [lindex [split $arg] 0]
+if {[regexp {^[\\+!#&]} $what] && [matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set chan "$what"
+set what [lindex [split $arg] 1]
+}
+seen:process $nick $host $hand $chan $chan1 $what $type
+}
+
+
+
+proc seen:process {nick host hand chan chan1 what type} {
+global seendir black count botnick
+set number [scan $black(seenflood) %\[^:\]]
+set timer [scan $black(seenflood) %*\[^:\]:%s]
+set i 0
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($what == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.1 none
+return 0
+}
+if {($what == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.2 none
+return 0
+}
+}
+if {($what == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.3 none
+return 0
+}
+if {($what == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+foreach tmr [utimers] {
+if {[string match "*count(flood:$host:$chan)*" [join [lindex $tmr 1]]]} {
+killutimer [lindex $tmr 2]
+}
+}
+if {![info exists count(flood:$host:$chan)]} { 
+set count(flood:$host:$chan) 0 
+}
+incr count(flood:$host:$chan)
+utimer $timer [list unset count(flood:$host:$chan)]
+
+if {$count(flood:$host:$chan) == "$number"} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.5 none
+return 0
+}
+
+if {[string match -nocase $what $nick]} { blacktools:tell $nick $host $hand $chan $chan1 seen.6 $nick
+return 0
+}
+if {[onchan $what $chan]} { blacktools:tell $nick $host $hand $chan $chan1 seen.7 $what
+return 0
+}
+
+set file [open $seendir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set userentry [lindex [split $line] 2]
+set chanentry [lindex [split $line] 1]
+set host [lindex [split $line] 3]
+set tm [lindex [split $line] 4]
+set jointime [lindex [split $line] 5]
+set newnick [lindex [split $line] 6]
+set reason [lrange [split $line] 6 end]
+if {!([regexp {^[0-9]} $jointime]) || ($jointime == "")} {
+set jointime 0
+set reason [lrange [split $line] 5 end]
+}
+if {$reason == ""} { set reason "No Reason" }
+set output [duration [expr [unixtime] - $tm]]
+set staytime [expr [unixtime] - $jointime]
+set staytime [duration [expr $tm - $jointime]]
+
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+set date [clock format $tm -format %d.%m.]
+set hour [clock format $tm -format %H:%M]
+
+if {$what == "*!*@*"} { return 0 }
+if {([string equal -nocase $userentry $what] || [string match -nocase $what $userentry] || [string match -nocase $what $host]) && [string match -nocase $chanentry $chan]} {
+set i [expr $i +1]
+set host [string trim $host "*!~"]
+if {$i < 6} {
+lappend entry $userentry
+}
+set seenfound 1
+set entry [lsort -unique $entry]
+set replace(%entry%) "[join $entry ","]"
+set replace(%host%) "$host"
+set replace(%output%) "$output"
+set replace(%date%) "($date $hour)"
+set replace(%newnick%) "$newnick"
+set replace(%userentry%) "$userentry"
+set replace(%chan%) "$chan"
+set replace(%reason%) "$reason"
+set replace(%staytime%) "$staytime"
+if {$jointime == "0"} { set staymsg "[string map [array get replace] $black(say.$getlang.seen.8)]"
+set replace(%staymsg%) "$staymsg"
+} else {
+ set staymsg "[string map [array get replace] $black(say.$getlang.seen.9)]"
+set replace(%staymsg%) "$staymsg"
+}
+if {[lindex [split $line] 0] == "PART"} {
+set reply "[string map [array get replace] $black(say.$getlang.seen.12)]"
+}
+if {[lindex [split $line] 0] == "SIGN"} {
+set reply "[string map [array get replace] $black(say.$getlang.seen.13)]"
+}
+if {[lindex [split $line] 0] == "JOIN"} {
+if {[onchan $userentry $chan]} { 
+set nowon "[string map [array get replace] $black(say.$getlang.seen.10)]"
+set replace(%nowon%) "$nowon"
+} else { 
+set nowon "[string map [array get replace] $black(say.$getlang.seen.11)]"
+set replace(%nowon%) "$nowon"
+}
+set reply "[string map [array get replace] $black(say.$getlang.seen.14)]"
+}
+if {[lindex [split $line] 0] == "SPLIT"} {
+set reply "[string map [array get replace] $black(say.$getlang.seen.15)]"
+}
+if {[lindex [split $line] 0] == "KICK"} {
+set reply "[string map [array get replace] $black(say.$getlang.seen.16)]"
+}
+if {[lindex [split $line] 0] == "NICKCHANGE"} {
+if {[onchan $newnick $chan]} { 
+set nowon "[string map [array get replace] $black(say.$getlang.seen.10)]"
+set replace(%nowon%) "$nowon"
+} else {
+set nowon "[string map [array get replace] $black(say.$getlang.seen.11)]"
+set replace(%nowon%) "$nowon"
+}
+set reply "[string map [array get replace] $black(say.$getlang.seen.17)]"
+}
+}
+
+if {$black(seenmet) == "1"} {
+set method "NOTICE"
+set onwho "$nick"
+} else { 
+set method "PRIVMSG"
+set onwho "$chan1"
+}
+}
+if {[info exists reply]} {
+puthelp "$method $onwho :$reply"
+}
+
+if {![info exists seenfound]} {
+blacktools:tell $nick $host $hand $chan $chan1 seen.18 $what
+}
+}
+
+############################### Greet #####################################
+
+
+proc greetpublic {nick host hand chan arg} {
+global black
+set who [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set greet [join [lrange [split $arg] 1 end]]
+set number [lindex [split $arg] 1]
+if {[regexp {^[\\+!#&]} $who] && [matchattr $hand nm|- $chan]} {
+set chan "$who"
+set who [lindex [split $arg] 1]
+set greet [join [lrange [split $arg] 2 end]]
+set number [lindex [split $arg] 2]
+}
+greet:process $who $greet $number $type $nick $host $hand $chan $chan1
+}
+
+proc greet:process {who greet number type nick host hand chan chan1} {
+global botnick black
+set dir "logs/greet($chan).txt"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 greet.1 none
+blacktools:tell $nick $host $hand $chan $chan1 greet.2 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 greet.3 none
+blacktools:tell $nick $host $hand $chan $chan1 greet.4 none
+return 0
+}
+}
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 greet.5 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 greet.6 none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $who tmp a]) && (![regexp -nocase -- {\S#} $who])} {
+    switch $a {
+on {
+channel set $chan +greet
+blacktools:tell $nick $host $hand $chan $chan1 greet.7 none
+}
+
+off {
+channel set $chan -greet
+blacktools:tell $nick $host $hand $chan $chan1 greet.8 none
+}
+
+add {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $greet
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 greet.9 none
+blacktools:tell $nick $host $hand $chan $chan1 greet.10 $greet
+}
+
+list {
+
+if {[file exists $dir] == 0} {
+set file [open $dir a]
+close $file
+}
+set dir "logs/greet($chan).txt"
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 greet.11 none
+return 0
+}
+foreach mes $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 greet.12 none
+blacktools:tell $nick $host $hand $chan $chan1 greet.10 "$i. $mes"
+}
+}
+
+del {
+
+if {![regexp {^[0-9]} $number]} {
+blacktools:tell $nick $host $hand $chan $chan1 greet.13 none
+return 0
+}
+
+set dir "logs/greet($chan).txt"
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set i [expr $number - 1]
+set delete [lreplace $lines $i $i]
+set files [open $dir "w"]
+puts $files [join $delete "\n"]
+close $files
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 greet.14 $number
+blacktools:tell $nick $host $hand $chan $chan1 greet.15 none
+}
+
+}
+}
+}
+
+
+proc greetpublic:join {nick host hand chan} {
+global black
+set dir "logs/greet($chan).txt"
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan greet]} {
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+if {[isbotnick $nick]} { return 0 }
+set replace(%nick%) $nick
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} { return 0 }
+set lines [split $data "\n"]
+set numlines [llength $lines]
+set random [rand $numlines]
+set randomline [lindex $lines $random]
+set message [string map [array get replace] $randomline]
+if {$black(howgreet) == "1"} {
+puthelp "NOTICE $nick :$message"
+} else { puthelp "PRIVMSG $nick :$message" }
+}
+}
+
+################################ Leave ###################################
+
+proc leave:process {who leave number type nick host hand chan chan1} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/leave($chan).txt"
+if {[matchattr $hand nm|- $chan]} {
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 leave.1 none
+blacktools:tell $nick $host $hand $chan $chan1 leave.2 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 leave.3 none
+blacktools:tell $nick $host $hand $chan $chan1 leave.4 none
+return 0
+}
+}
+if {($who == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 leave.5 none
+return 0
+}
+if {($who == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 leave.6 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|on|off|add|list|del)} $who tmp a]) && (![regexp -nocase -- {\S#} $who])} {
+    switch $a {
+on {
+channel set $chan +leave
+blacktools:tell $nick $host $hand $chan $chan1 leave.7 none
+}
+
+off {
+channel set $chan -leave
+blacktools:tell $nick $host $hand $chan $chan1 leave.8 none
+}
+
+add {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set file [open $dir a]
+puts $file $leave
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 leave.9 none
+blacktools:tell $nick $host $hand $chan $chan1 leave.10 $leave
+}
+
+list {
+
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+set dir "logs/leave($chan).txt"
+set file [open $dir "r"]
+set w [read -nonewline $file]
+close $file
+set data [split $w "\n"]
+set i 0
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 leave.11 none
+return 0
+}
+foreach mes $data {
+set i [expr $i +1]
+blacktools:tell $nick $host $hand $chan $chan1 leave.12 none
+blacktools:tell $nick $host $hand $chan $chan1 leave.10 "$i. $mes"
+}
+}
+
+del {
+if {![regexp {^[0-9]} $number]} {
+blacktools:tell $nick $host $hand $chan $chan1 leave.13 none
+return 0
+}
+
+set dir "logs/leave($chan).txt"
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+set lines [split $data "\n"]
+set i [expr $number - 1]
+set delete [lreplace $lines $i $i]
+set files [open $dir "w"]
+puts $files [join $delete "\n"]
+close $files
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $dir "w"]
+close $files
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 leave.14 $number
+blacktools:tell $nick $host $hand $chan $chan1 leave.15 none
+}
+
+}
+}
+}
+
+
+
+proc leavepublic {nick host hand chan arg} {
+global black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set dir "logs/leave($chan).txt"
+set type 0
+set chan1 "$chan"
+set who [lindex [split $arg] 0]
+set leave [join [lrange [split $arg] 1 end]]
+set number [lindex [split $arg] 1]
+if {[regexp {^[\\+!#&]} $who] && [matchattr $hand nm|- $chan]} {
+set chan "$who"
+set who [lindex [split $arg] 1]
+set leave [join [lrange [split $arg] 2 end]]
+set number [lindex [split $arg] 2]
+}
+leave:process $who $leave $number $type $nick $host $hand $chan $chan1
+}
+
+
+
+proc leavepublic:part {nick host hand chan args} {
+global black
+set dir "logs/leave($chan).txt"
+if {![validchan $chan]} { return 0 }
+if {[channel get $chan leave]} {
+if {[file exists $dir] == 0} {
+set file [open $dir w]
+close $file
+}
+if {[isbotnick $nick]} { return 0 }
+set replace(%nick%) $nick
+set file [open $dir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} { return 0 }
+set lines [split $data "\n"]
+set numlines [llength $lines]
+set random [rand $numlines]
+set randomline [lindex $lines $random]
+set message [string map [array get replace] $randomline]
+if {$black(howleave) == "1"} {
+puthelp "NOTICE $nick :$message"
+} else { puthelp "PRIVMSG $nick :$message" }
+}
+}
+
+################################ Idle ###################################
+
+
+proc antidlepublic {nick host hand chan arg} {
+global black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set type1 0
+set chan1 "$chan"
+set why [lindex [split $arg] 0]
+set type [lindex [split $arg] 1]
+set user [lindex [split $arg] 1]
+set host [lindex [split $arg] 2]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+set type [lindex [split $arg] 2]
+set user [lindex [split $arg] 2]
+set host [lindex [split $arg] 3]
+}
+antidle:process $why $type $type1 $user $host $nick $hand $chan $chan1
+}
+
+proc antidle:process {why type type1 user host nick hand chan chan1} {
+global botnick black
+set flag "-|f"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $user]
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "") && ($type1 == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 idle.1 none
+blacktools:tell $nick $host $hand $chan $chan1 idle.2 none
+return 0
+}
+if {($why == "") && ($type1 == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 idle.3 none
+blacktools:tell $nick $host $hand $chan $chan1 idle.4 none
+return 0
+}
+}
+if {($why == "") && ($type1 == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 idle.5 none
+return 0
+}
+if {($why == "") && ($type1 == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 idle.6 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|op|voice|add|on|off)} $why tmp idler]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $idler {
+on {
+ channel set $chan +antidle
+blacktools:tell $nick $host $hand $chan $chan1 idle.7 none
+}
+off {
+
+ channel set $chan -antidle
+blacktools:tell $nick $host $hand $chan $chan1 idle.8 none
+}
+
+op {
+ if {$type == ""} { blacktools:tell $nick $host $hand $chan $chan1 idle.9 none
+return 0
+}
+if {[string match -nocase $type "on"]} {
+if {[channel get $chan antidle]} { set antidle "on" } else { set antidle "off"}
+if {$antidle == "off"} { blacktools:tell $nick $host $hand $chan $chan1 idle.10 none
+return 0
+}
+channel set $chan +antididle
+blacktools:tell $nick $host $hand $chan $chan1 idle.11 none
+}
+
+if {[string match -nocase $type "off"]} {
+if {[channel get $chan antidle]} { set antidle "on" } else { set antidle "off"}
+if {$antidle == "off"} { blacktools:tell $nick $host $hand $chan $chan1 idle.10 none
+return 0
+}
+channel set $chan -antididle
+blacktools:tell $nick $host $hand $chan $chan1 idle.12 none
+}
+}
+
+voice {
+ if {$type == ""} { blacktools:tell $nick $host $hand $chan $chan1 idle.13 none
+return 0
+}
+
+if {[string match -nocase $type "on"]} {
+
+if {[channel get $chan antidle]} { set antidle "on" } else { set antidle "off"}
+if {$antidle == "off"} { blacktools:tell $nick $host $hand $chan $chan1 idle.10 none
+return 0
+}
+channel set $chan +antividle
+blacktools:tell $nick $host $hand $chan $chan1 idle.14 none
+}
+
+if {[string match -nocase $type "off"]} {
+if {[channel get $chan antidle]} { set antidle "on" } else { set antidle "off"}
+if {$antidle == "off"} { blacktools:tell $nick $host $hand $chan $chan1 idle.10 none
+return 0
+}
+
+channel set $chan -antividle
+blacktools:tell $nick $host $hand $chan $chan1 idle.15 none
+}
+}
+
+add {
+
+if {$user == ""} { blacktools:tell $nick $host $hand $chan $chan1 idle.16 none
+return 0
+}
+
+if {(![onchan $user $chan]) && (![validuser $user])} { blacktools:tell $nick $host $hand $chan $chan1 idle.17 $user
+return 0
+}
+
+if {[validuser $user]} { 
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 idle.18 $user
+} else {
+set hosts [getchanhost $user $chan]
+set uhost "*!*@[lindex [split $hosts @] 1]"
+adduser $user $uhost
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 idle.19 "$user $uhost"
+}
+}
+
+}
+}
+}
+
+
+
+proc idlewhoispublic {min hour day mon year} {
+global black botnick
+if {([scan $min %d]+([scan $hour %d]*60)) % $black(idleinterval) == 0} {
+foreach chan [channels] {
+if {[channel get $chan antidle]} {
+foreach user [chanlist $chan] { 
+set user [split $user]
+set handle [nick2hand $user]
+if {[isop $user $chan] || [isvoice $user $chan]} { 
+if {$user != $botnick} { putserv "WHOIS $user $user" }
+} 
+} 
+} 
+}
+}
+
+bind raw - 317 idleprocespublic
+}
+
+proc idleprocespublic {nick int arg} {
+global black
+set nick [string tolower [lindex $arg 1]]
+set handle [nick2hand $nick]
+set idler [string tolower [lindex $arg 2]]
+set minutesidle [expr $idler / 60]
+foreach chan [channels] {
+set replace(%chan%) $chan
+set idlevoicetime [channel get $chan idlevoicemax]
+if {$idlevoicetime == "0"} { set idlevoicetime "$black(idlevoicemax)" }
+set idleoptime [channel get $chan idleopmax]
+if {$idleoptime == "0"} { set idleoptime "$black(idleopmax)" }
+if {[channel get $chan antividle]} {
+if {[isvoice $nick $chan] && ![matchattr $handle -|f $chan]} {
+if {$minutesidle > $idlevoicetime} {
+putserv "MODE $chan -v $nick"
+}
+}
+}
+if {[channel get $chan antididle]} {
+if {[isop $nick $chan] && ![matchattr $handle -|f $chan]} {
+if {$minutesidle > $idleoptime} {
+putserv "MODE $chan -o $nick"
+}
+}
+}
+
+}
+}
+
+
+######################################### AntiBotIdle #############################
+
+
+proc botidlepublic {nick host hand chan arg} {
+global black botnick sdir
+set what [lindex [split $arg] 0]
+set lin 0
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 antibotidle.1 none
+return 0
+}
+botidle:process $nick $host $hand $chan $chan1 $what
+}
+
+proc botidle:process {nick host hand chan chan1 what} {
+global botnick black sdir
+set lin 0
+switch -exact -- [string tolower $what] {
+on {
+set type "antibotidle:module ON"
+foreach tmr [timers] {
+if {[string match "*antibotidle:module*" [join [lindex $tmr 1]]]} {
+blacktools:tell $nick $host $hand $chan $chan1 antibotidle.3 none
+return 0
+}
+}
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set who [lindex  [split $line] 0]
+set stats [lindex [split $line] 1]
+if {[string match -nocase "antibotidle:module" $who]} {
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $sdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $sdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $sdir "w"]
+close $files
+}
+set file [open $sdir "a"]
+puts $file "$type"
+close $file
+blacktools:tell $nick $host $hand $chan $chan1 antibotidle.4 none
+timer $black(noidlemax) antibotidle:module
+}
+
+off {
+blacktools:tell $nick $host $hand $chan $chan1 antibotidle.5 none
+set type "antibotidle:module OFF"
+foreach tmr [timers] {
+if {[string match "*antibotidle:module*" [join [lindex $tmr 1]]]} {
+killtimer [lindex $tmr 2]
+}
+}
+set file [open $sdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1]
+set who [lindex  [split $line] 0]
+set stats [lindex [split $line] 1]
+if {[string match -nocase "antibotidle:module" $who]} {
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $sdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $sdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $sdir "w"]
+close $files
+}
+set file [open $sdir "a"]
+puts $file "$type"
+close $file
+}
+
+}
+}
+
+
+proc antibotidle:module {} {
+global black
+putquick "PRIVMSG $black(noobject) :"
+timer $black(noidlemax) antibotidle:module
+return 1
+}
+
+######################################## Comenzi #####################################
+
+proc drpublic {nick host hand chan arg} {
+global botnick black
+set drone [lindex [split $arg] 0]
+set chan1 "$chan"
+set mask [lindex [split $arg] 0]
+set type "0"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[#&]} $drone] && [matchattr $hand nm|- $chan]} {
+set chan "$drone"
+set drone [lindex [split $arg] 1]
+set mask [lindex [split $arg] 1]
+}
+dr:process $drone $mask $nick $hand $host $chan $chan1 $type
+}
+
+
+proc dr:process {drone mask nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $drone]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+set getreason [channel get $chan dr-reason]
+if {$getreason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.dr.5)
+}
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason" 
+}
+set getbantime [channel get $chan dr-bantime]
+if {$getbantime == "0"} { set getbantime $black(drtime) }
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[isbotnick $drone]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[onchan $drone $chan]} {
+set mask *!*@[lindex [split [getchanhost $drone $chan] "@"] 1] 
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($drone == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 dr.1 none
+return 0
+}
+if {($drone == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 dr.2 none
+return 0
+}
+}
+if {($drone == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 dr.3 none
+return 0
+}
+if {($drone == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 dr.4 none
+return 0
+}
+
+blacktools:banner:3 $mask $hand $chan $reason $getbantime DR($chan)
+}
+
+
+
+proc botpublic {nick host hand chan arg} {
+global botnick black
+set bot [lindex [split $arg] 0]
+set mask [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bot] && [matchattr $hand nm|- $chan]} {
+set chan "$bot"
+set bot [lindex [split $arg] 1]
+set mask [lindex [split $arg] 1]
+}
+bot:process $bot $mask $nick $hand $host $chan $chan1 $type
+}
+
+proc bot:process {bot mask nick hand host chan chan1 type} {
+global black botnick
+set handle [nick2hand $bot]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+set getreason [channel get $chan bot-reason]
+if {$getreason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.bot.5)
+}
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason" 
+}
+set getbantime [channel get $chan bot-bantime]
+if {$getbantime == "0"} { set getbantime $black(bottime) }
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[isbotnick $bot]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[onchan $bot $chan]} {
+set mask *!*@[lindex [split [getchanhost $bot $chan] "@"] 1] 
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($bot == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 bot.1 none
+return 0
+}
+if {($bot == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 bot.2 none
+return 0
+}
+}
+if {($bot == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 bot.3 none
+return 0
+}
+if {($bot == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 bot.4 none
+return 0
+}
+blacktools:banner:3 $mask $hand $chan $reason $getbantime bot($chan)
+}
+
+
+proc b:local {bnick mask time nick reason hand host chan chan1 type} {
+global botnick black
+set handle [nick2hand $bnick]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$reason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set reason1 $black(say.$getlang.b.9)
+ } else { set reason1 "$reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+if {[isbotnick $bnick]} {
+  return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[onchan $bnick $chan]} {
+set mask *!*@[lindex [split [getchanhost $bnick $chan] "@"] 1] 
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($bnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 b.1 none
+blacktools:tell $nick $host $hand $chan $chan1 b.2 none
+return 0
+}
+if {($bnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 b.3 none
+blacktools:tell $nick $host $hand $chan $chan1 b.4 none
+return 0
+}
+}
+if {($bnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 b.5 none
+return 0
+}
+if {($bnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 b.6 none
+return 0
+}
+
+blacktools:banner:3 $mask $hand $chan $reason $time b($chan)
+if {$time == "0"} { set reply "Permanent" } else { set reply "$time minute" }
+blacktools:tell $nick $host $hand $chan $chan1 b.7 "$mask $reply"
+}
+
+
+proc bpublic {nick host hand chan arg} {
+global botnick black
+set bnick [lindex [split $arg] 0]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set type 0
+set chan1 "$chan"
+set mask [lindex [split $arg] 0]
+set time [lindex [split $arg] 1]
+set type1 [lindex [split $arg] 1]
+set type2 [lindex [split $arg] 2]
+set reason [join [lrange [split $arg] 2 end]] 
+set handle [nick2hand $bnick]
+if {[string match -nocase "global" $type1] || [string match -nocase "global" $type2]  && [matchattr $hand nm|- $chan]} {
+if {[string match -nocase $type1 "global"]} {
+set reason [join [lrange [split $arg] 2 end]]
+}
+if {[string match -nocase $type2 "global"]} {
+set reason [join [lrange [split $arg] 3 end]]
+}
+set list [userlist nm|-]
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+if {[matchattr $handle nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {![regexp {^[0-9]} $time]} {
+set reason [join [lrange [split $arg] 2 end]]
+set time "$black(btime)"
+}
+if {$reason == ""} {set reason1 "(GLOBAL) $black(dfreason)"
+ } else { set reason1 "(GLOBAL) $reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+if {[isbotnick $bnick]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+if {[onchan $bnick $chan]} {
+set mask *!*@[lindex [split [getchanhost $bnick $chan] "@"] 1] 
+}
+newban $mask $hand $reason $time
+if {$time == "0"} { set reply "Permanent" } else { set reply "$time" }
+blacktools:tell $nick $host $hand $chan $chan1 b.8 "$mask $reply"
+return 0
+}
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bnick] && [matchattr $hand nm|- $chan]} {
+set chan "$bnick"
+set bnick [lindex [split $arg] 1]
+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 time "$black(btime)"
+}
+}
+if {![regexp {^[0-9]} $time]} {
+set time "$black(btime)"
+set reason [join [lrange [split $arg] 1 end]] 
+}
+b:local $bnick $mask $time $nick $reason $hand $host $chan $chan1 $type
+}
+
+################################### n #################################
+
+proc n:process {bnick nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $bnick]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+set getreason [channel get $chan n-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.n.5)
+}
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason" 
+}
+set getbantime [channel get $chan n-bantime]
+if {$getbantime == "0"} { set getbantime $black(ntime) }
+
+if {[isbotnick $bnick]} {
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($bnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 n.1 none
+return 0
+}
+if {($bnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 n.2 none
+return 0
+}
+}
+if {($bnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 n.3 none
+return 0
+}
+if {($bnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 n.4 none
+return 0
+}
+
+if {[onchan $bnick $chan]} {
+set mask "$bnick*!*@*"
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan "$bnick"
+return 0
+}
+blacktools:banner:3 $mask $hand $chan $reason $getbantime n($chan)
+}
+
+
+proc npublic {nick host hand chan arg} {
+global botnick black
+set bnick [lindex [split $arg] 0]
+set type 0
+set handle [nick2hand $bnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bnick] && [matchattr $hand nm|- $chan]} {
+set chan "$bnick"
+set bnick [lindex [split $arg] 1]
+}
+n:process $bnick $nick $hand $host $chan $chan1 $type
+}
+
+################################## id #################################
+
+proc idpublic {nick host hand chan arg} {
+global botnick black
+set idnick [lindex [split $arg] 0]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $idnick]
+set type 0
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $idnick] && [matchattr $hand nm|- $chan]} {
+set chan "$idnick"
+set idnick [lindex [split $arg] 1]
+}
+id:process $idnick $nick $hand $host $chan $chan1 $type
+}
+
+proc id:process {idnick nick hand host chan chan1 type} {
+global botnick black
+set handle [nick2hand $idnick]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set uhost [getchanhost $idnick $chan]
+set ident "[string trimleft [string tolower [lindex [split $uhost "@"] 0]] "~"]"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+set getreason [channel get $chan id-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.id.5)
+}
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason"
+}
+
+set getbantime [channel get $chan id-bantime]
+if {$getbantime == "0"} { set getbantime $black(idtime) }
+
+if {[isbotnick $idnick]} {
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($idnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 id.1 none
+return 0
+}
+if {($idnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 id.2 none
+return 0
+}
+}
+if {($idnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 id.3 none
+return 0
+}
+if {($idnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 id.4 none
+return 0
+}
+
+if {[onchan $idnick $chan]} {
+    		set mask "*!*$ident@*"
+	} else { blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan "$idnick"
+return 0
+}
+blacktools:banner:3 $mask $hand $chan $getreason $getbantime id($chan)
+}
+
+
+############################### black #################################
+
+proc black:process {blnick nick mask hand host chan chan1 reason type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $blnick]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+set list [userlist $black(exceptflags) $chan]
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$reason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set reason1 "BlackListed: $black(say.$getlang.black.5)"
+ } else { set reason1 "BlackListed: $reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+
+if {[isbotnick $blnick]} {
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[onchan $blnick $chan]} {
+set mask *!*@[lindex [split [getchanhost $blnick $chan] "@"] 1] 
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($blnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 black.1 none
+return 0
+}
+if {($blnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 black.2 none
+return 0
+}
+}
+if {($blnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 black.3 none
+return 0
+}
+if {($blnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 black.4 none
+return 0
+}
+ 
+
+blacktools:banner:3 $mask $hand $chan $reason 0 Black($chan)
+}
+
+
+proc blackpublic {nick host hand chan arg} {
+global botnick black
+set blnick [lindex [split $arg] 0]
+set mask [lindex [split $arg] 0]
+set type 0
+set reason [join [lrange [split $arg] 1 end]]
+set handle [nick2hand $blnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $blnick] && [matchattr $hand nm|- $chan]} {
+set chan "$blnick"
+set blnick [lindex [split $arg] 1]
+set mask [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 2 end]]
+}
+black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type
+}
+
+
+################################ w ####################################
+
+proc wpublic {nick host hand chan arg} {
+global botnick black
+set wnick [lindex [split $arg] 0]
+set type 0
+set handle [nick2hand $wnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $wnick] && [matchattr $hand nm|- $chan]} {
+set chan "$wnick"
+set wnick [lindex [split $arg] 1]
+}
+w:process $wnick $nick $hand $host $chan $chan1 $type
+}
+
+proc w:process {wnick nick hand host chan chan1 type} {
+global botnick black
+set handle [nick2hand $wnick]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+
+if {[isbotnick $wnick]} {
+return 0
+}
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+set getreason [channel get $chan w-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.w.5)
+}
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason"
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($wnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 w.1 none
+return 0
+}
+if {($wnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 w.2 none
+return 0
+}
+}
+if {($wnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 w.3 none
+return 0
+}
+if {($wnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 w.4 none
+return 0
+}
+
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA w($chan)]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA w($chan) $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $wnick :$reason"
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+puthelp "PRIVMSG $wnick :$black(say.$getlang.w.6)"
+}
+
+############################### spam ##################################
+
+proc spam:process {spammer mask nick hand host chan chan1 type} {
+global botnick black
+set handle [nick2hand $spammer]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+set getreason [channel get $chan spam-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.spam.5)
+}
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason" 
+}
+set getbantime [channel get $chan spam-bantime]
+if {$getbantime == "0"} { set getbantime $black(spamtime) }
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[isbotnick $spammer]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[onchan $spammer $chan]} {
+set mask *!*@[lindex [split [getchanhost $spammer $chan] "@"] 1] 
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($spammer == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 spam.1 none
+return 0
+}
+if {($spammer == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 spam.2 none
+return 0
+}
+}
+if {($spammer == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 spam.3 none
+return 0
+}
+if {($spammer == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 spam.4 none
+return 0
+}
+
+blacktools:banner:3 $mask $hand $chan $reason $getbantime spam($chan)
+}
+
+
+proc spampublic {nick host hand chan arg} {
+global botnick black
+set spammer [lindex [split $arg] 0]
+set chan1 "$chan"
+set type 0
+set mask [lindex [split $arg] 0]
+set handle [nick2hand $spammer]
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $spammer] && [matchattr $hand nm|- $chan]} {
+set chan "$spammer"
+set spammer [lindex [split $arg] 1]
+set mask [lindex [split $arg] 1]
+}
+spam:process $spammer $mask $nick $hand $host $chan $chan1 $type
+}
+
+
+
+################################### k #################################
+
+proc k:process {knick nick hand host reason chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $knick]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[isbotnick $knick]} {
+return 0
+}
+
+
+if {[matchattr $handle $black(exceptflags) $chan] && ($black(kaccess) == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {$reason == ""} {
+
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set reason1 "$black(say.$getlang.k.5)"
+ } else { set reason1 "$reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($knick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 k.1 none
+return 0
+}
+if {($knick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 k.2 none
+return 0
+}
+}
+if {($knick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 k.3 none
+return 0
+}
+if {($knick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 k.4 none
+return 0
+}
+
+if {![onchan $knick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan "$knick"
+return 0
+}
+set getcount [channel get $chan kickcount]
+set kcount [expr $getcount +1]
+channel set $chan kickcount $kcount
+set countz [getuser $hand XTRA k($chan)]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA k($chan) $counts
+if {[channel get $chan showcount]} {
+set reason "$reason - $kcount -" 
+} else {
+set reason "$reason" 
+}
+putquick "KICK $chan $knick :$reason"
+}
+
+
+proc kpublic {nick host hand chan arg} {
+global botnick black
+set knick [lindex [split $arg] 0]
+set type 0
+set reason [join [lrange [split $arg] 1 end]]
+set handle [nick2hand $knick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $knick] && [matchattr $hand nm|- $chan]} {
+set chan "$knick"
+set knick [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 2 end]]
+}
+k:process $knick $nick $hand $host $reason $chan $chan1 $type
+}
+
+
+
+
+
+################################### gag ###############################
+
+proc gag:process {gagger nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $gagger]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($gagger == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 gag.1 none
+return 0
+}
+if {($gagger == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 gag.2 none
+return 0
+}
+}
+if {($gagger == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 gag.3 none
+return 0
+}
+if {($gagger == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 gag.4 none
+return 0
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {[isbotnick $gagger]} {
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {[onchan $gagger $chan]} {
+    		set mask *!*@[lindex [split [getchanhost $gagger $chan] "@"] 1] 
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan "$gagger"
+return 0
+}
+putquick "MODE $chan +b $mask"
+blacktools:tell $gagger $host $hand $chan $chan1 gag.5 "$gagger"
+}
+
+
+
+proc gagpublic {nick host hand chan arg} {
+global black
+set gagger [lindex [split $arg] 0]
+set type 0
+set handle [nick2hand $gagger]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $gagger] && [matchattr $hand nm|- $chan]} {
+set chan "$gagger"
+set gagger [lindex [split $arg] 1]
+}
+gag:process $gagger $nick $hand $host $chan $chan1 $type
+}
+
+
+
+################################## bw #################################
+
+proc bw:process {abuser mask nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $abuser]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+set getreason [channel get $chan bw-reason]
+if {$getreason == ""} { 
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getreason $black(say.$getlang.bw.5)
+}
+if {[channel get $chan showhandle]} {
+set reason "($hand) $getreason"
+} else { set reason "$getreason" 
+}
+set getbantime [channel get $chan bw-bantime]
+if {$getbantime == "0"} { set getbantime $black(bwtime) }
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[isbotnick $abuser]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[onchan $abuser $chan]} {
+set mask *!*@[lindex [split [getchanhost $abuser $chan] "@"] 1] 
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($abuser == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 bw.1 none
+return 0
+}
+if {($abuser == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 bw.2 none
+return 0
+}
+}
+if {($abuser == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 bw.3 none
+return 0
+}
+if {($abuser == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 bw.4 none
+return 0
+}
+
+blacktools:banner:3 $mask $hand $chan $reason $getbantime bw($chan) 
+}
+
+
+proc bwpublic {nick host hand chan arg} {
+global botnick black
+set abuser [lindex [split $arg] 0]
+set mask [lindex [split $arg] 0]
+set type 0
+set handle [nick2hand $abuser]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $abuser] && [matchattr $hand nm|- $chan]} {
+set chan "$abuser"
+set abuser [lindex [split $arg] 1]
+set mask [lindex [split $arg] 1]
+}
+bw:process $abuser $mask $nick $hand $host $chan $chan1 $type
+}
+
+
+
+
+
+################################ ub ###################################
+
+proc ub:process {ban why nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($ban == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.1 none
+return 0
+}
+if {($ban == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.2 none
+return 0
+}
+}
+if {($ban == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.3 none
+return 0
+}
+if {($ban == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.4 none
+return 0
+}
+
+  
+if {$ban == "*!*@*"} { 
+return 0 
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+    return 0
+  }
+ if {[ispermban $ban $chan] && [matchattr $hand -|O $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.5 none
+return 0
+}
+
+if {($why == "global") && [matchattr $hand nm|- $chan]} {
+
+if {[killban $ban] == "0"} {
+set notfound 1
+}
+
+killban $ban
+if {![info exists notfound]} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.6 $ban
+return 0
+} else { blacktools:tell $nick $host $hand $chan $chan1 ub.7 none
+return 0
+}
+
+}
+
+if {[killchanban $chan $ban] == "0"} {
+set notfound 1
+}
+ 
+  killchanban $chan $ban
+if {[onchan "X" $chan]} {
+putquick "PRIVMSG $black(chanserv) :unban $chan $ban"
+}
+  putquick "MODE $chan -b $ban"
+if {![info exists notfound]} {
+blacktools:tell $nick $host $hand $chan $chan1 ub.8 $ban
+} else { blacktools:tell $nick $host $hand $chan $chan1 ub.9 none 
+return 0
+}
+ if {[channel get $chan chanreport]} {
+set backchan [channel get $chan backchan]
+if {$backchan == ""} { 
+return 0
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+return 0
+}
+blacktools:tell $nick $host $hand $chan $backchan ub.10 "$hand $ban"
+}
+
+}
+
+
+
+proc ubpublic {nick host hand chan arg} {
+global botnick black
+set ban [lindex [split $arg] 0]
+set why [lindex [split $arg] 1]
+set type 0
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $ban] && [matchattr $hand nm|- $chan]} {
+set chan "$ban"
+set ban [lindex [split $arg] 1]
+}
+ub:process $ban $why $nick $hand $host $chan $chan1 $type
+}
+
+
+################################ sb ###################################   
+
+proc sb:process {bhost what nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($bhost == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.1 none
+return 0
+}
+if {($bhost == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.2 none
+return 0
+}
+}
+if {($bhost == "") && ($type == "0")} { 
+blacktools:tell $nick $host $hand $chan $chan1 sb.3 none
+return 0
+}
+if {($bhost == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.4 none
+return 0
+}
+
+if {[string match -nocase $what "global"] && [matchattr $hand mn|- $chan]} {
+  
+foreach ban [banlist] {
+
+ set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
+ set created [clock format [lindex $ban 3] -format %D-%H:%M:%S]
+ set fban [lindex $ban 0]
+ set freason [lindex $ban 1]
+ set fbywho [lindex $ban 5]
+
+if {[string match $bhost [string tolower [lindex $ban 0]]]} {
+set foundban 1
+if {[lindex $ban 2] == 0} {
+if {[isbansticky [lindex $ban 0]]} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.5 "$fban $fbywho $created 0 $freason"
+ } else {
+blacktools:tell $nick $host $hand $chan $chan1 sb.6 "$fban $fbywho $created 0 $freason"
+
+}
+
+} else { 
+if {[isbansticky [lindex $ban 0]]} { 
+blacktools:tell $nick $host $hand $chan $chan1 sb.7 "$fban $fbywho $created $expire $freason"         
+
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 sb.8 "$fban $fbywho $created $expire $freason"
+          
+}
+}
+
+}
+}
+if {![info exists foundban]} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.13 none
+}
+return 0
+}
+
+  foreach ban [banlist $chan] {
+
+  set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
+ set created [clock format [lindex $ban 3] -format %D-%H:%M:%S]
+ set fban [lindex $ban 0]
+ set freason [lindex $ban 1]
+ set fbywho [lindex $ban 5]
+if {[string match $bhost [string tolower [lindex $ban 0]]]} {
+
+set foundban 1
+
+if {[lindex $ban 2] == 0} {
+if {[isbansticky [lindex $ban 0] $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.9 "$fban $fbywho $created $expire $freason"
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 sb.10 "$fban $fbywho $created 0 $freason"
+}
+
+} else { 
+if {[isbansticky [lindex $ban 0] $chan]} {          
+blacktools:tell $nick $host $hand $chan $chan1 sb.11 "$fban $fbywho $created $expire $freason"
+
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 sb.12 "$fban $fbywho $created $expire $freason"
+          
+}
+}
+
+}
+}
+if {![info exists foundban]} {
+blacktools:tell $nick $host $hand $chan $chan1 sb.13 none
+return 0
+}
+}
+
+
+
+proc sbpublic {nick host hand chan arg} {
+global botnick black
+set bhost [string tolower [lindex [split $arg] 0]]
+set what [lindex [split $arg] 1]
+set chan1 "$chan"
+set type 0
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bhost] && [matchattr $hand nm|- $chan]} {
+set chan "$bhost"
+set bhost [string tolower [lindex [split $arg] 1]]
+set what [lindex [split $arg] 2]
+}
+sb:process $bhost $what $nick $hand $host $chan $chan1 $type
+}
+
+
+
+
+################################# d ###################################
+
+
+proc d:process {dnick mask days reason nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $dnick]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+set list [userlist $black(exceptflags) $chan]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+
+if {[matchattr $hand nm|- $chan]} {
+if {($dnick == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 d.1 none
+return 0
+}
+if {($dnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 d.2 none
+return 0
+}
+}
+if {($dnick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 d.3 none
+return 0
+}
+if {($dnick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 d.4 none
+return 0
+}
+
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {$reason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set reason1 $black(say.$getlang.d.5)
+ } else { set reason1 "$reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+
+if {[isbotnick $dnick]} {
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+
+if {[onchan $dnick $chan]} {
+    		set mask *!*@[lindex [split [getchanhost $dnick $chan] "@"] 1] 
+}
+
+blacktools:banner:3 $mask $hand $chan $reason [expr $days * 1440] d($chan)
+}
+
+
+proc dpublic {nick host hand chan arg} {
+global botnick black
+set days [lindex [split $arg] 0]
+set dnick [lindex [split $arg] 1]
+set type 0
+set mask [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 2 end]]
+set handle [nick2hand $dnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $days] && [matchattr $hand nm|- $chan]} {
+set chan "$days"
+set days [lindex [split $arg] 1]
+set mask [lindex [split $arg] 2]
+set dnick [lindex [split $arg] 2]
+set reason [join [lrange [split $arg] 3 end]]
+if {![regexp {^[0-9]} $days]} {
+set days 1
+set mask [lindex [split $arg] 1]
+set dnick [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 2 end]]
+} 
+}
+if {![regexp {^[0-9]} $days]} {
+set days 1
+set mask [lindex [split $arg] 0]
+set dnick [lindex [split $arg] 0]
+set reason [join [lrange [split $arg] 1 end]]
+}
+d:process $dnick $mask $days $reason $nick $hand $host $chan $chan1 $type
+}
+
+
+############################### stick #################################
+
+proc stick:process {snick mask time reason nick hand host chan chan1 type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $snick]
+set list [userlist $black(exceptflags) $chan]
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+if {[matchattr $handle nm|AMOVS $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {$reason == ""} {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set reason1 $black(say.$getlang.stick.5)
+ } else { set reason1 "$reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+if {[isbotnick $snick]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+if {[onchan $snick $chan]} {
+set mask *!*@[lindex [split [getchanhost $snick $chan] "@"] 1] 
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($snick == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 stick.1 none
+return 0
+}
+if {($snick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 stick.2 none
+return 0
+}
+}
+if {($snick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 stick.3 none
+return 0
+}
+if {($snick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 stick.4 none
+return 0
+}
+blacktools:banner:4 $mask $hand $chan $reason $time stick($chan)
+}
+
+
+proc stickpublic {nick host hand chan arg} {
+global botnick black
+set snick [lindex [split $arg] 0]
+set mask [lindex [split $arg] 0]
+set chan1 "$chan"
+set type 0
+set time [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 2 end]]
+set handle [nick2hand $snick]
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $snick] && [matchattr $hand nm|- $chan]} {
+set chan "$snick"
+set time [lindex [split $arg] 2]
+set mask [lindex [split $arg] 1]
+set snick [lindex [split $arg] 1]
+set reason [join [lrange [split $arg] 3 end]]
+if {![regexp {^[0-9]} $time]} {
+set time "$black(dfstickbantime)"
+set reason [join [lrange [split $arg] 2 end]]
+}
+}
+if {![regexp {^[0-9]} $time]} {
+set time "$black(dfstickbantime)"
+set reason [join [lrange [split $arg] 1 end]]
+}
+stick:process $snick $mask $time $reason $nick $hand $host $chan $chan1 $type
+}
+
+
+
+
+
+################################### t #################################
+
+
+proc tpublic {nick host hand chan arg} {
+global black
+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 nm|- $chan]} {
+set chan "$c"
+set topics [join [lrange [split $arg] 1 end]]
+}
+t:process $nick $host $hand $chan $chan1 $topics $type
+}
+
+proc t:process {nick host hand chan chan1 topics type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($topics == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 t.1 none
+return 0
+}
+if {($topics == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 t.2 none
+return 0
+}
+}
+if {($topics == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 t.3 none
+return 0
+}
+if {($topics == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 t.4 none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {[channel get $chan showhandle]} {
+set topics "($hand) $topics"
+} else { set topics "$topics" 
+}
+putquick "TOPIC $chan :$topics"
+}
+
+############################## status #################################
+
+
+proc statuspublic {nick host hand chan arg} {
+global botnick server uptime {server-online}
+set chan1 "$chan"
+regsub -all " " [channels] ", " chans
+catch {exec uptime} shelluptime
+set up [duration [expr [unixtime] - $uptime]]
+set on [duration [expr [unixtime] - ${server-online}]]
+blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
+blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
+blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
+blacktools:tell $nick $host $hand $chan $chan1 status.4 $chans
+blacktools:tell $nick $host $hand $chan $chan1 status.5 $shelluptime
+}
+
+############################## uptime #################################
+
+proc uptimepublic {nick host hand chan arg} {
+global botnick uptime {server-online} server
+set chan1 "$chan"
+set up [duration [expr [unixtime] - $uptime]]
+set on [duration [expr [unixtime] - ${server-online}]]
+blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
+blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
+blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
+}
+
+################################# i ###################################
+
+proc ipublic {nick host hand chan arg} {
+global botnick black
+set type 0
+set chan1 "$chan"
+set inick [lrange [split $arg] 0 end]
+set c [lindex [split $arg] 0]
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set inick [join [lrange [split $arg] 1 end]]
+}
+i:process $nick $host $hand $chan $chan1 $inick $type
+}
+
+proc i:process {nick host hand chan chan1 inick type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($inick == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 i.3 none
+return 0
+}
+if {($inick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 i.4 none
+return 0
+}
+}
+if {($inick == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 i.5 none
+return 0
+}
+if {($inick == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 i.6 none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+set replace(%nick%) $nick
+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 {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+foreach in $inick {
+if {[onchan $in $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 i.1 $in
+return 0
+}
+
+set countz [getuser $hand XTRA i($chan)]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA i($chan) $counts
+putquick "INVITE $in $chan"
+putquick "PRIVMSG $in :$imessage"
+blacktools:tell $nick $host $hand $chan $chan1 i.2 $in
+}
+}
+
+############################### addinfo ###############################
+
+
+proc addinfopublic {nick host hand chan arg} {
+global botnick black
+set info [join [lrange [split $arg] 0 end]]
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$info == ""} { 
+blacktools:tell $nick $host $hand $chan $chan1 addinfo.1 none
+return 0
+}
+addinfo:process $nick $host $hand $chan $chan1 $info
+}
+
+proc addinfo:process {nick host hand chan chan1 info} {
+global botnick black
+if {[string match -nocase "$info" "off"]} {
+set infos ""
+setuser $hand info $infos
+blacktools:tell $nick $host $hand $chan $chan1 addinfo.3 none
+return 0
+}
+setuser $hand info $info
+blacktools:tell $nick $host $hand $chan $chan1 addinfo.4 $info 
+}
+
+############################### purge ###############################
+
+proc purgepublic {nick host hand chan arg} {
+global botnick black
+set reason [join [lrange [split $arg] 0 end]]
+set chan1 "$chan"
+if {$reason == ""} {
+blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
+return 0
+}
+purge:process $nick $host $hand $chan $chan1 $reason
+}
+
+proc purge:process {nick host hand chan chan1 reason} {
+channel remove $chan
+delchan:stats $chan $hand $host
+blacktools:tell $nick $host $hand $chan $chan1 purge.2 none
+putquick "PART $chan :PURGED by $hand :$reason"
+}
+
+
+################################### v #################################
+
+
+proc vpublic {nick host hand chan arg} {
+global botnick black
+set c [lindex [split $arg] 0]
+set arg [split $arg]
+set nick [split $nick]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set arg [lrange $arg 1 end]
+}
+v:process $nick $host $hand $chan $chan1 $arg
+}
+
+proc v:process {nick host hand chan chan1 arg} {
+global botnick black
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![botisop $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$arg == ""} {
+set arg $nick
+}
+
+foreach voicenick $arg {
+if {[isbotnick $voicenick]} { return 0 }
+if {[isvoice $voicenick $chan]} {putquick "MODE $chan -v $voicenick"} else {putquick "MODE $chan +v $voicenick"}
+}
+
+}
+
+################################## o ##################################
+
+proc opublic {nick host hand chan arg} {
+global botnick black
+set c [lindex [split $arg] 0]
+set arg [split $arg]
+set nick [split $nick]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set arg [lrange $arg 1 end]
+}
+o:process $nick $host $hand $chan $chan1 $arg
+}
+
+
+proc o:process {nick host hand chan chan1 arg} {
+global botnick black
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![botisop $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return 0
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {$arg == ""} {
+set arg $nick
+}
+
+
+foreach opnick $arg {
+if {[isbotnick $opnick]} { return 0 }
+if {[isop $opnick $chan]} {putquick "MODE $chan -o $opnick"} else {putquick "MODE $chan +o $opnick"}
+}
+
+}
+
+
+################################# l ###################################
+
+proc lpublic {nick host hand chan arg} {
+global black
+set times [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $times] && [matchattr $hand nm|- $chan]} {
+set chan "$times"
+set times [lindex [split $arg] 1]
+}
+l:process $nick $host $hand $chan $chan1 $times $type
+}
+
+proc l:process {nick host hand chan chan1 time type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+}         
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($time == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 l.1 none
+return 0
+}
+if {($time == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 l.2 none
+return 0
+}
+}
+if {($time == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 l.3 none
+return 0
+}
+if {($time == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 l.4 none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {$time >= 300} {
+blacktools:tell $nick $host $hand $chan $chan1 l.5 none
+return 0
+}
+putserv "MODE $chan +$black(lmode)" ;utimer $time [list putquick "MODE $chan -$black(lmode)"]
+blacktools:tell $nick $host $hand $chan $chan1 l.6 "$black(lmode) $time"
+}
+
+proc chatpublic {nick host hand chan arg} {
+global botnick
+*ctcp:CHAT $nick $host $hand $botnick CHAT $arg
+blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
+} 
+
+################################ ul ###################################
+
+proc ul:process {nick host hand chan chan1} {
+global black botnick
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+putquick "MODE $chan -$black(ulmodes)"
+blacktools:tell $nick $host $hand $chan $chan1 ul.1 $black(ulmodes)
+}
+
+
+proc ulpublic {nick host hand chan arg} {
+global black
+set c [lindex [split $arg] 0]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+ul:process $nick $host $hand $chan $chan1
+}
+
+################################ say ##################################
+
+
+proc saypublic {nick host hand chan arg} {
+global black
+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 nm|- $chan]} {
+set chan "$c"
+set text [join [lrange [split $arg] 1 end]]
+}
+say:process $nick $host $hand $chan $chan1 $text $type
+}
+
+proc say:process {nick host hand chan chan1 text type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($text == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 say.1 none
+return 0
+}
+if {($text == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 say.2 none
+return 0
+}
+}
+if {($text == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 say.3 none
+return 0
+}
+if {($text == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 say.4 none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+putquick "PRIVMSG $chan :$text"
+}
+
+################################ act ##################################
+
+proc actpublic {nick host hand chan arg} {
+global black
+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 nm|- $chan]} {
+set chan "$c"
+set text [join [lrange [split $arg] 1 end]]
+}
+act:process $nick $host $hand $chan $chan1 $text $type
+}
+
+proc act:process {nick host hand chan chan1 text type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($text == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 act.1 none
+return 0
+}
+if {($text == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 act.2 none
+return 0
+}
+}
+if {($text == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 act.3 none
+return 0
+}
+if {($text == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 act.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+putquick "PRIVMSG $chan :\001ACTION $text\001"
+}
+
+############################## broadcast ##############################
+
+proc broadcastpublic {nick host hand chan arg} {
+global black
+set text [join [lrange [split $arg] 0 end]]
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {$text == ""} { 
+blacktools:tell $nick $host $hand $chan $chan1 broadcast.1 none
+return 0
+}
+broadcast:cmd:process $nick $host $hand $chan $chan1 $text
+}
+
+
+proc broadcast:cmd:process {nick host hand chan chan1 text} {
+global botnick black
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+foreach c [channels] {
+if {![channel get $c silent]} {
+putquick "PRIVMSG $c :(BROADCAST) $text"
+}
+}
+}
+
+############################### check #################################
+
+proc checkpublic {nick host hand chan arg} {
+ global black
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set checked [lindex [split $arg] 0]
+if {$checked == ""} { blacktools:tell $nick $host $hand $chan $chan1 check.1 none
+return 0
+}
+check:process $nick $host $hand $chan $chan1 $checked
+}
+
+proc check:process {nick host hand chan chan1 checked} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set handle [nick2hand $checked]
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {[isbotnick $checked]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+ if {![onchan $checked $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $checked
+return 0
+}
+if {[onchan $checked $chan]} {
+set mask *!*@[lindex [split [getchanhost $checked $chan] "@"] 1] 
+}
+
+set countz [getuser $hand XTRA check($chan)]
+if {$countz == ""} { set countz 0 }
+set counts [expr $countz + 1]
+setuser $hand XTRA check($chan) $counts
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getmsg $black(say.$getlang.check.3)
+if {[info exists black(say.$getlang.check.3)]} {
+putquick "PRIVMSG $checked :$black(say.$getlang.check.3)"
+}
+
+}
+
+############################## version ################################
+
+proc versionpublic {nick host hand chan arg} {
+global botnick black
+set chan1 "$chan"
+version:process $nick $host $hand $chan $chan1
+}
+
+proc version:process {nick host hand chan chan1} {
+global botnick black
+blacktools:tell $nick $host $hand $chan $chan1 version.1 none
+}
+
+############################### cycle #################################
+
+proc cycle:process {nick host hand chan chan1 reason} {
+global black botnick
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {$reason == ""} { set reason "No Reason" }
+putquick "PART $chan :$reason"
+utimer 5 [list putquick "JOIN $chan"]
+}
+
+
+proc cyclepublic {nick host hand chan arg} {
+global black
+set reason [join [lrange [split $arg] 0 end]]
+set c [lindex [split $arg] 0]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set reason [join [lrange [split $arg] 1 end]]
+}
+cycle:process $nick $host $hand $chan $chan1 $reason
+}
+
+################################ away #################################
+
+proc awaypublic {nick host hand chan arg} {
+global black
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set aw [join [lrange [split $arg] 0 end]]
+if {$aw == "" } {blacktools:tell $nick $host $hand $chan $chan1 away.1 none
+return 0
+}
+away:process $nick $host $hand $chan $chan1 $aw
+}
+
+
+proc away:process {nick host hand chan chan1 aw} {
+global black botnick wdir
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[string match -nocase "$aw" "off"]} { 
+blacktools:tell $nick $host $hand $chan $chan1 away.3 none
+putquick "AWAY :" 
+set type [open $wdir w]
+set none ""
+puts $type "$none"
+close $type
+
+return 0
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 away.4 $aw ; putquick "AWAY :$aw"
+set type [open $wdir w]
+puts $type "$aw"
+close $type
+}
+}
+
+proc setaway {my} {
+global wdir
+if {[file exists $wdir] == 0} {
+set file [open $wdir a]
+close $file
+}
+set aways [open $wdir r]
+set away "[gets $aways]"
+catch {close $aways}
+if {$away == ""} {
+ return 0 
+} else {
+putserv "AWAY :"
+putserv "AWAY :$away"
+}
+}
+
+
+################################### mode ######################################
+
+proc modepublic {nick host hand chan arg} {
+global black
+set modes [lindex [split $arg] 0]
+set chan1 "$chan"
+set type 0
+if {[regexp {^[#&]} $modes] && [matchattr $hand nm|- $chan]} {
+set chan "$modes"
+set modes [lindex [split $arg] 1]
+}
+mode:process $nick $host $hand $chan $chan1 $modes $type
+}
+
+proc mode:process {nick host hand chan chan1 modes type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($modes == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 mode.1 none
+return 0
+}
+if {($modes == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 mode.2 none
+return 0
+}
+}
+if {($modes == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 mode.3 none
+return 0
+}
+if {($modes == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 mode.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+
+if {![regexp {^[+ -]} $modes]} {
+blacktools:tell $nick $host $hand $chan $chan1 mode.5 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 mode.6 $modes
+putserv "MODE $chan $modes"
+}
+
+
+################################## myset #############################
+
+proc mysetpublic {nick host hand chan arg} {
+global black
+set chan1 "$chan"
+set flags [lindex [split $arg] 0]
+set type [lindex [split $arg] 1]
+if {$type == ""} {
+blacktools:tell $nick $host $hand $chan $chan1 myset.3 none
+return 0
+}
+myset:process $nick $host $hand $chan $chan1 $flags $type
+}
+
+
+proc myset:process {nick host hand chan chan1 flags typez} {
+global black
+switch -exact -- [string tolower $flags] {
+lang {
+setuser $hand XTRA OUTPUT_LANG $typez
+blacktools:tell $nick $host $hand $chan $chan1 myset.1 $typez
+return 0
+}
+
+output {
+if {[string match -nocase $typez "notice"]} {
+setuser $hand XTRA OUTPUT_TYPE 1
+blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+return 0
+}
+if {[string match -nocase $typez "chan"]} {
+setuser $hand XTRA OUTPUT_TYPE 0
+blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+return 0
+}
+}
+
+}
+}
+
+
+################################# set #################################
+
+proc setpublic {nick host hand chan arg} {
+global black
+set flags [lindex [split $arg] 0]
+set type [join [lrange [split $arg] 1 end]]
+set chan1 "$chan"
+set type1 0
+if {[regexp {^[#&]} $flags] && [matchattr $hand nm|- $chan]} {
+set chan "$flags"
+set flags [lindex [split $arg] 1]
+set type [join [lrange [split $arg] 2 end]]
+}
+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 char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($flags == "")  && ($type1 == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 set.1 none
+return 0
+}
+if {($flags == "") && ($type1 == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 set.2 none
+return 0
+}
+}
+if {($flags == "") && ($type1 == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 set.3 none
+return 0
+}
+if {($flags == "") && ($type1 == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 set.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+ if {$type == ""} {
+set why [catch {channel set $chan $flags} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+return 0
+} else {
+channel set $chan $flags ; blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
+}
+ 
+} else {
+set why [catch {channel set $chan $flags $type} error]
+if {!([matchattr $hand mn|- $chan]) && [string match -nocase "backchan" $flags]} {
+return 0
+}
+
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+return 0
+} else {
+ channel set $chan $flags $type ; blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type" 
+}
+}
+}
+
+
+
+proc ignorepublic {nick host hand chan arg} {
+global black
+set chan1 "$chan"
+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 {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.1 none
+return 0
+}
+ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason
+}
+
+
+proc ignore:process {nick host hand chan chan1 what mask time reason} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+switch -exact -- [string tolower $what] {
+
+list {
+
+if {[llength [ignorelist]] == "0"} { blacktools:tell $nick $host $hand $chan $chan1 ignore.3 none
+return 0
+}
+foreach ig [ignorelist] {
+set hostig [lindex $ig 0]
+set byig [lindex $ig 4]
+set time [lindex $ig 2]
+set reasig [lindex $ig 1]
+if {$time != "0"} {
+set bytime [clock format $time -format %D-%H:%M:%S]
+} else { set bytime "-"}
+blacktools:tell $nick $host $hand $chan $chan1 ignore.4 "$hostig $byig $bytime $reasig" 
+}
+}
+
+add {
+
+if {[isignore $mask]} {
+blacktools:tell $nick $host $hand $chan $chan1 ignore.5 "$mask"
+return 0
+}
+
+if {![regexp {^[0-9]} $time]} {
+set time "60"
+}
+if {$reason == ""} { set reason "No Reason" }
+newignore $mask $hand $reason $time
+blacktools:tell $nick $host $hand $chan $chan1 ignore.6 "$mask $time $reason"
+}
+
+
+
+delete {
+if {$mask == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.7 none
+return 0
+}
+
+if {[isignore $mask]} {
+killignore $mask
+} else { blacktools:tell $nick $host $hand $chan $chan1 ignore.8 "$mask"
+return 0
+} 
+blacktools:tell $nick $host $hand $chan $chan1 ignore.9 "$mask"
+}
+
+}
+}
+
+
+################################# show ################################
+
+proc showpublic {nick host hand chan arg} {
+global black
+set wich [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $wich] && [matchattr $hand nm|- $chan]} {
+set chan "$wich"
+set wich [lindex [split $arg] 1]
+}
+show:process $nick $host $hand $chan $chan1 $wich $type
+}
+
+proc show:process {nick host hand chan chan1 wich type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($wich == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 show.1 none
+return 0
+}
+if {($wich == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 show.2 none
+return 0
+}
+}
+if {($wich == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 show.3 none
+return 0
+}
+if {($wich == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 show.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+set why [catch {channel get $chan $wich} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
+return 0
+} else {
+set replyinfo [channel get $chan $wich]
+
+if {($replyinfo == "") || ($replyinfo == "0")} {
+switch -exact -- [string tolower $wich] {
+
+antipub-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antipub.1)
+}
+
+antilongtextmax {
+set replyinfo [channel get $chan antilongtextmax]
+if {$replyinfo == "0"} {
+set replyinfo "$black(longchar)"
+}
+}
+
+
+joinflood {
+set replyinfo [channel get $chan joinflood]
+if {$replyinfo == ""} {
+set replyinfo "4 5"
+}
+}
+
+chanflood {
+set replyinfo [channel get $chan chanflood]
+if {$replyinfo == ""} {
+set replyinfo "4 5"
+}
+}
+
+idleopmax {
+set replyinfo [channel get $chan idleopmax]
+if {$replyinfo == "0"} {
+set replyinfo "$black(idleopmax)"
+}
+}
+
+idlevoicemax {
+set replyinfo [channel get $chan idlevoicemax]
+if {$replyinfo == "0"} {
+set replyinfo "$black(idlevoicemax)"
+}
+}
+
+
+private-bantime {
+set replyinfo "$black(privatebantime)"
+}
+
+private-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.private.12)
+}
+
+antipub-bantime {
+set replyinfo "$black(antipubbantime)"
+}
+
+antinotice-bantime {
+set replyinfo "$black(antinoticebantime)"
+}
+
+antinotice-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antinotice.1)
+}
+
+antictcp-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antictcp.1)
+}
+
+antictcp-bantime {
+set replyinfo "$black(antictcpbantime)"
+}
+
+antibadword-bantime {
+set replyinfo "$black(antibadwordbantime)"
+}
+
+antibadword-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antibadword.1)
+}
+
+antilongtext-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antilongtext.1)
+}
+
+antilongtext-bantime {
+set replyinfo "$black(longbantime)"
+}
+
+antibadquitpart-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antibadquitpart.1)
+}
+
+antibadquitpart-bantime {
+set replyinfo "$black(badquitparttime)"
+}
+
+antijoinpart-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antijoinpart.1)
+}
+
+antijoinpart-bantime {
+set replyinfo "$black(joinpartbantime)"
+}
+
+antispam-bantime {
+set replyinfo "$black(spamban)"
+}
+
+antispam-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antispam.1)
+}
+
+antirepeat-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antirepeat.1)
+}
+
+antirepeat-setting {
+set replyinfo "$black(repeats)"
+}
+
+antirepeat-bantime {
+set replyinfo "$black(antirepeatbantime)"
+}
+
+anticolor-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.anticolor.1)
+}
+
+anticolor-bantime {
+set replyinfo "$black(anticolorbantime)"
+}
+
+antibold-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antibold.1)
+}
+
+antibold-bantime {
+set replyinfo "$black(antiboldbantime)"
+}
+
+antiunderline-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antiunderline.1)
+}
+
+antiunderline-bantime {
+set replyinfo "$black(antiunderlinebantime)"
+}
+
+anticaps-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.anticaps.1)
+}
+
+anticaps-bantime {
+set replyinfo "$black(anticapsbantime)"
+}
+
+badfullname-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.badfullname.1)
+}
+
+badfullname-bantime {
+set replyinfo "$black(badfbantime)"
+}
+
+badnick-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.badnick.1)
+}
+
+badnick-bantime {
+set replyinfo "$black(badnickbantime)"
+}
+
+badident-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.badident.1)
+}
+
+badident-bantime {
+set replyinfo "$black(badidentbantime)"
+}
+
+antichanflood-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.antichanflood.1)
+}
+
+antichanflood-bantime {
+set replyinfo "$black(antifloodchanbantime)"
+}
+
+badchan-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.badchan.15)
+}
+
+badchan-bantime {
+set replyinfo "$black(badcbantime)"
+}
+
+count-message {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.count.11)
+}
+
+
+dr-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.dr.5)
+}
+
+dr-bantime {
+set replyinfo "$black(drtime)"
+}
+
+bot-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.bot.5)
+}
+
+bot-bantime {
+set replyinfo "$black(bottime)"
+}
+
+n-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.n.5)
+}
+
+n-bantime {
+set replyinfo "$black(ntime)"
+}
+
+id-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.id.5)
+}
+
+id-bantime {
+set replyinfo "$black(idtime)"
+}
+
+w-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.w.5)
+
+}
+
+spam-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.spam.5)
+}
+
+spam-bantime {
+set replyinfo "$black(spamtime)"
+}
+
+bw-reason {
+set getlang [string tolower [channel get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set replyinfo $black(say.$getlang.bw.5)
+}
+
+bw-bantime {
+set replyinfo "$black(bwtime)"
+}
+
+}
+}
+blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
+}
+}
+
+
+############################## silence ################################
+
+proc silencepublic {nick host hand chan arg} {
+global black
+set value [lindex [split $arg] 0]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set chan1 "$chan"
+if {$value == ""} { blacktools:tell $nick $host $hand $chan $chan1 silence.1 none
+return 0
+}
+silence:process $nick $host $hand $chan $chan1 $value
+}
+
+proc silence:process {nick host hand chan chan1 value} {
+global botnick black
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|on|off)} $value tmp silents]) && (![regexp -nocase -- {\S#} $value])} {
+ switch $silents {
+on { blacktools:tell $nick $host $hand $chan $chan1 silence.3 none ; putquick "SILENCE +*!*@*"             
+}
+off { blacktools:tell $nick $host $hand $chan $chan1 silence.4 none ; putquick "SILENCE -*!*@*"            
+}
+}
+}
+}
+
+############################## msg ####################################
+
+proc msgpublic {nick host hand chan arg} {
+global black
+set nicks [lindex [split $arg] 0]
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set msg [join [lrange [split $arg] 1 end]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$nicks == ""} {blacktools:tell $nick $host $hand $chan $chan1 msg.1 none
+return 0
+}
+if {[isbotnick $nicks]} { 
+return 0
+}
+putquick "PRIVMSG $nicks :$msg"
+}
+
+
+############################### reset #################################
+
+proc resetpublic {nick host hand chan arg} {
+global black
+set dece [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $dece] && [matchattr $hand nm|- $chan]} {
+set chan "$dece"
+set dece [lindex [split $arg] 1]
+}
+reset:process $nick $host $hand $chan $chan1 $dece $type
+}
+
+
+
+proc reset:process {nick host hand chan chan1 dece type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($dece == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 reset.1 none
+return 0
+}
+if {($dece == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 reset.2 none
+return 0
+}
+}
+if {($dece == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 reset.3 none
+return 0
+}
+if {($dece == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 reset.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {[string match -nocase "all" "$dece"]} {
+set emptyflag "antipub-reason antinotice-reason antictcp-reason antibadword-reason antilongtext-reason antijoinpart-reason antirepeat-reason antirepeat-setting antispam-reason anticolor-reason antibold-reason antiunderline-reason anticaps-reason badfullname-reason badnick-reason badident-reason antichanflood-reason chanflood joinflood private-reason dr-reason n-reason id-reason spam-reason w-reason bw-reason bot-reason badchan-reason count-message"
+foreach eflag $emptyflag {
+channel set $chan $eflag ""
+}
+set zeroflag "antinotice-bantime antipub-bantime antictcp-bantime antibadword-bantime antilongtext-bantime antijoinpart-bantime antispam-bantime idleopmax idlevoicemax antilongtextmax antirepeat-bantime anticolor-bantime antibold-bantime antiunderline-bantime anticaps-bantime badfullname-bantime badnick-bantime badident-bantime antichanflood-bantime private-bantime  dr-bantime n-bantime id-bantime spam-bantime bw-bantime bot-bantime kickcount"
+foreach oflag $zeroflag {
+channel set $chan $oflag 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 reset.5 none
+return 0
+}
+set why [catch {channel set $chan $dece ""} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 reset.6 $dece
+} else {
+channel set $chan $dece ""
+blacktools:tell $nick $host $hand $chan $chan1 reset.7 $dece
+}
+}
+
+
+################################### banlist ###################################
+
+proc banlistpublic {nick host hand chan arg} {
+global botnick black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+banlist:process $nick $host $hand $chan $chan1 $user $type
+}
+
+
+proc banlist:process {nick host hand chan chan1 user type} {
+global botnick black
+set i 0
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.1 none
+blacktools:tell $nick $host $hand $chan $chan1 banlist.2 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.3 none
+blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.5 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.6 none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan] && [string match -nocase "global" $user]} {
+
+foreach ban [banlist] {
+
+set i [expr $i +1]
+set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
+set create [clock format [lindex $ban 3] -format %D-%H:%M:%S]
+set fban [lindex $ban 0]
+set freason [lindex $ban 1]
+set fbywho [lindex $ban 5]
+
+if {[lindex $ban 2] == 0} {
+set expire "Permanent"
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 banlist.9 none
+blacktools:tell $nick $host $hand $chan $chan1 banlist.10 "$fban $fbywho $create $expire $freason"
+set foundban 1
+}
+
+if {![info exists foundban]} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.7 none
+} else { blacktools:tell $nick $host $hand $chan $chan1 banlist.8 none }
+return 0
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+
+if {![matchattr $user nm|OASMN $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+return 0
+}
+
+foreach ban [banlist $chan] {
+set own [lindex $ban 5]
+if {[string match -nocase $own $user]} {
+set i [expr $i +1]
+set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
+set create [clock format [lindex $ban 3] -format %D-%H:%M:%S]
+set fban [lindex $ban 0]
+set freason [lindex $ban 1]
+
+if {[lindex $ban 2] == 0} {
+set expire "Permanent"
+}
+blacktools:tell $nick $host $hand $chan $chan1 banlist.11 $user
+blacktools:tell $nick $host $hand $chan $chan1 banlist.12 "$fban $create $expire $freason"
+set foundban 1
+}
+}
+
+if {![info exists foundban]} {
+blacktools:tell $nick $host $hand $chan $chan1 banlist.11 $user
+blacktools:tell $nick $host $hand $chan $chan1 banlist.7 $user
+} else { 
+blacktools:tell $nick $host $hand $chan $chan1 banlist.8 $user }
+}
+
+
+############################## rehash #################################
+
+proc rehashme {nick host hand arg} {
+global black
+blacktools:tell:prv $nick $host $hand rehash.1 none
+ rehash
+}
+
+############################## VERSION ################################
+
+proc blackreply {nick host hand dest key text} {
+global ctcp-version
+set {ctcp-version} "1Using 4BlackTools 2.3 1by 12BLaCkShaDoW"
+}
+
+
+############################## restart ################################
+
+proc restartme {nick host hand arg} {
+global black
+blacktools:tell:prv $nick $host $hand restart.1 none
+utimer 3 [list restart ]
+}
+
+############################### save #################################
+
+proc saveme {nick host hand arg} {
+global black
+blacktools:tell:prv $nick $host $hand save.1 none
+ save
+}
+
+############################### jump #################################
+
+proc jumpme {nick host hand arg} {
+global black
+blacktools:tell:prv $nick $host $hand jump.1 none
+ utimer 3 [list jump]
+}
+
+############################### die ###################################
+
+proc dieme {nick host hand arg} {
+global black
+blacktools:tell:prv $nick $host $hand die.1 none
+utimer 3 [list die "byeeee" ]
+}
+
+
+############################## nick ###################################
+
+proc nickpublic {altnick host hand arg} {
+global nick black
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+set newnick [lindex [split $arg] 0]
+if {$newnick == ""} { blacktools:tell:prv $nick $host $hand nick.2 none
+return 0
+}
+blacktools:tell:prv $nick $host $hand nick.1 "$newnick"
+set nick $newnick
+}
+
+proc nick:process {who newnick host hand chan} {
+global black nick
+set chan1 "$chan"
+if {$newnick == ""} {
+blacktools:tell $who $host $hand $chan $chan1 nick.2 none
+return 0
+}
+blacktools:tell $who $host $hand $chan $chan1 nick.1 none
+set nick $newnick
+}
+
+############################## addchan ################################
+
+proc addchanpublic {nick host hand arg} {
+global black
+set chans [lindex [split $arg] 0]
+if {$chans == ""} {blacktools:tell:prv $nick $host $hand addchan.1 none
+return 0 
+}
+
+if {![regexp {^[#&]} $chans]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none
+return 0
+} 
+
+if {[validchan $chans]} {
+blacktools:tell:prv $nick $host $hand addchan.2 "$chans"
+return 0
+} else {
+channel add $chans
+addchan:stats $chans $hand $host
+blacktools:tell:prv $nick $host $hand addchan.3 "$chans"
+}
+}
+
+proc addchan:stats {chan hand host} {
+global black botnick statsdir
+set k 0
+set time [unixtime]
+set file [open $statsdir "r"]
+set addfile "$chan ADDED $hand $host $time 0"
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set k [expr $k +1]
+set chanentry [lindex [split $line] 0]
+set addtype [lindex [split $line] 1]
+if {[string equal -nocase "REMOVED" "$addtype"] && [string match -nocase $chanentry $chan]} { 
+if {$line != ""} {
+set num [expr $k - 1]
+set delete [lreplace $data $num $num]
+set files [open $statsdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $statsdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $statsdir "w"]
+close $files
+}
+set file [open $statsdir "a"]
+puts $file "$addfile"
+close $file
+}
+
+
+proc delchan:stats {chan hand host} {
+global black botnick statsdir
+set k 0
+set time [unixtime]
+set file [open $statsdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+set addfile "$chan REMOVED $hand $host $time 0 0 none none"
+foreach line $data {
+set k [expr $k +1]
+set chanentry [lindex [split $line] 0]
+set addtype [lindex [split $line] 1]
+if {[string equal -nocase "REMOVED" "$addtype"] && [string match -nocase $chanentry $chan]} {
+if {$line != ""} {
+set num [expr $k - 1]
+set delete [lreplace $data $num $num]
+set files [open $statsdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+if {[string equal -nocase "ADDED" "$addtype"] && [string match -nocase $chanentry $chan]} {
+set added [lindex [split $line] 4]
+set bywho [lindex [split $line] 2]
+set byhost [lindex [split $line] 3]
+set addfile "$chan REMOVED $hand $host $time $added $bywho $byhost"
+if {$line != ""} {
+set num [expr $k - 1]
+set delete [lreplace $data $num $num]
+set files [open $statsdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $statsdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $statsdir "w"]
+close $files
+}
+set file [open $statsdir "a"]
+puts $file "$addfile"
+close $file
+}
+
+
+
+
+
+############################## delchan ################################
+
+
+proc delchanpublic {nick host hand arg} {
+global black
+set chans [lindex [split $arg] 0]
+
+if {$chans == ""} {blacktools:tell:prv $nick $host $hand delchan.1 none
+return 0 
+}
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none
+return 0
+ } 
+
+if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand delchan.2 $chans
+return 0
+}
+delchan:stats $chans $hand $host
+channel remove $chans
+blacktools:tell:prv $nick $host $hand delchan.3 $chans
+}
+
+
+############################## suspend ################################
+
+proc suspendpublic {nick host hand arg} {
+global black
+set chans [lindex [split $arg] 0]
+
+if {$chans == ""} {blacktools:tell:prv $nick $host $hand suspend.1 none
+return 0 
+}
+
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none 
+return 0
+ }
+
+if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand suspend.2 $chans
+return 0
+}
+
+if {[channel get $chans inactive]} {
+blacktools:tell:prv $nick $host $hand suspend.3 $chans
+return 0
+}
+channel set $chans +inactive
+blacktools:tell:prv $nick $host $hand suspend.4 $chans
+}
+
+############################# unsuspend ###############################
+
+proc unsuspendpublic {nick host hand arg} {
+global black
+set chans [lindex [split $arg] 0]
+
+if {$chans == ""} {blacktools:tell:prv $nick $host $hand unsuspend.1 none
+return 0 
+}
+
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none
+return 0
+ }
+ 
+if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand unsuspend.2 $chans
+return 0
+}
+
+if {![channel get $chans inactive]} {
+blacktools:tell:prv $nick $host $hand unsuspend.3 $chans
+return 0
+ }
+channel set $chans -inactive
+blacktools:tell:prv $nick $host $hand unsuspend.4 $chans
+}
+
+################################ op ###################################
+
+proc oppublic {nick host hand arg} {
+global black
+set chan [lindex [split $arg] 0]
+set nicks [lrange [split $arg] 1 end]
+if {![validchan $chan]} {
+blacktools:tell:prv $nick $host $hand gl.nocmem $chan
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
+return 0
+}
+if {$nicks == ""} { set nicks "$nick" }
+if {[matchattr $hand nm|OASM $chan]} {
+if {![regexp {^[\\+!#&]} $chan]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none 
+return 0
+} 
+if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
+return 0
+}
+
+if {![validchan $chan]} { 
+blacktools:tell:prv $nick $host $hand op.1 $chan
+return 0
+}
+
+foreach nickz $nicks {
+if {[isop $nickz $chan]} {
+blacktools:tell:prv $nick $host $hand op.2 $nickz
+return 0
+}
+putquick "MODE $chan +o $nickz"
+
+}
+}
+}
+
+############################### deop ##################################
+
+proc deoppublic {nick host hand arg} {
+global black
+set chan [lindex [split $arg] 0]
+set nicks [lrange [split $arg] 1 end]
+if {![validchan $chan]} {
+blacktools:tell:prv $nick $host $hand gl.nocmem $chan
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
+return 0
+}
+if {$nicks == ""} { set nicks "$nick" }
+if {[matchattr $hand nm|OASM $chan]} {
+if {![regexp {^[\\+!#&]} $chan]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none 
+return 0
+ } 
+if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
+return 0
+}
+
+if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand deop.1 $chan
+return 0
+}
+
+foreach nickz $nicks {
+if {[onchan $nickz $chan]} {
+putquick "MODE $chan -o $nickz"
+
+}
+}
+}
+}
+
+############################### voice #################################
+
+proc voicepublic {nick host hand arg} {
+global black
+set chan [lindex [split $arg] 0]
+set nicks [lrange [split $arg] 1 end]
+
+if {![validchan $chan]} {
+blacktools:tell:prv $nick $host $hand gl.nocmem $chan
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
+return 0
+}
+if {$nicks == ""} { set nicks "$nick" }
+if {[matchattr $hand nm|OASM $chan]} {
+if {![regexp {^[\\+!#&]} $chan]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none 
+return 0
+ } 
+if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
+return 0
+}
+
+if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand voice.1 $chan
+return 0
+}
+
+foreach nickz $nicks {
+if {[onchan $nickz $chan]} {
+if {[isvoice $nickz $chan]} { 
+blacktools:tell:prv $nick $host $hand voice.2 $nickz
+return 0
+}
+putquick "MODE $chan +v $nickz"
+
+}
+}
+}
+}
+
+############################## devoice ################################
+
+proc devoicepublic {nick host hand arg} {
+global black
+set chan [lindex [split $arg] 0]
+set nicks [lrange [split $arg] 1 end]
+if {![validchan $chan]} {
+blacktools:tell:prv $nick $host $hand gl.nocmem $chan
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
+return 0
+}
+if {$nicks == ""} { set nicks "$nick" }
+if {[matchattr $hand nm|OASM $chan]} {
+if {![regexp {^[\\+!#&]} $chan]} {
+blacktools:tell:prv $nick $host $hand gl.novalidchan none 
+return 0
+ } 
+if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
+return 0
+}
+
+if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand devoice.1 $chan
+return 0
+}
+
+foreach nickz $nicks {
+if {[onchan $nickz $chan]} {
+putquick "MODE $chan -v $nickz"
+
+}
+}
+}
+}
+
+############################## invite #################################
+
+proc invitepublic {nick host hand arg} {
+global black
+set chan [lindex [split $arg] 0]
+set replace(%chan%) $chan
+if {![validchan $chan]} {
+blacktools:tell:prv $nick $host $hand gl.nocmem $chan
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none"
+return 0
+}
+if {[matchattr $hand nm|OASM $chan]} {
+if {$chan == ""} { blacktools:tell:prv $nick $host $hand invite.1 none
+return 0 
+}
+putquick "INVITE $nick $chan"
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set getmsg $black(say.$getlang.invite.2)
+if {[info exists black(say.$getlang.invite.2)]} {
+set getmsg [string map [array get replace] $getmsg]
+putquick "PRIVMSG $nick :$getmsg"
+}
+
+}
+}
+
+
+
+##############################add ######################################
+
+proc add:process {args time level hand host chan chan1 nick type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flags "nm|NMOSAV"
+if {[matchattr $hand nm|- $chan]} {
+if {($level == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.1 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.2 none
+return 0
+}
+}
+if {($level == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.3 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+
+foreach user $args {
+if {$user != ""} {
+set replace(%user%) $user
+if {([string length $user]>=10) && ($black(maxhand) == "1")} {
+set user [string range $user 0 8]
+}
+
+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
+return 0
+}
+}
+}
+}
+ 
+if {[matchattr $hand -|A $chan] && ($level == "manager")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.6 none
+return 0
+}
+if {[matchattr $hand -|A $chan] && ($level == "admin")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.7 none
+return 0
+}
+if {[matchattr $hand -|M $chan] && ($level == "manager")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.8 none
+return 0
+}
+
+if {([regexp -nocase -- {(#[0-9]+|owner|manager|admin|senior|op|voice|protect)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
+    switch $access {
+       manager { 
+          set flags "-|olM"
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
+} else {
+adduser $user $uhost
+chattr $user -|-SOAMV $chan
+chattr $user $flags $chan
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
+}
+}
+     admin {
+
+      set flags "-|olA"
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
+}
+}
+
+   senior {
+     set flags "-|olS"
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} {
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
+}
+}
+
+
+owner {
+if {[matchattr $hand n|- $chan]} {
+ set flags "m|-"
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
+}
+}
+}
+
+op {
+ set flags "-|olO"
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
+}
+}
+
+protect {
+ set flags "-|H"
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qHolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolHSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
+}
+}
+
+
+
+ voice {
+ set flags "-|lV"
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
+}
+}
+}
+}
+}
+}
+}
+
+
+
+########################## adduser ################################
+
+proc adduserpublic {nick host hand chan arg} {
+global black
+set level [lindex [split $arg] 0]
+set args [lrange [split $arg] 1 end]
+set c [lindex [split $arg] 1]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 2 end]
+}
+adduser:process $nick $host $hand $chan $chan1 $args $level $type
+}
+
+
+proc adduser:process {nick host hand chan chan1 args level type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+set flags "nm|NMOSVA"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($level == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 adduser.1 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 adduser.2 none
+return 0
+}
+}
+if {($level == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 adduser.3 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 adduser.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+foreach user $args {
+if {$user != ""} {
+if {![onchan $user $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $user
+return 0
+}
+
+set handle [nick2hand $user]
+set hosts [getchanhost $user $chan]
+set uhost "*!*@[lindex [split $hosts @] 1]"
+
+
+if {([string length $user]>=10) && ($black(maxhand) == "1")} {
+set user [string range $user 0 8]
+}
+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
+return 0
+}
+}
+}
+}
+
+if {[matchattr $hand -|A $chan] && ($level == "manager")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.6 none
+return 0
+}
+if {[matchattr $hand -|A $chan] && ($level == "admin")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.7 none
+return 0
+}
+if {[matchattr $hand -|M $chan] && ($level == "manager")} {
+blacktools:tell $nick $host $hand $chan $chan1 add.8 none
+return 0
+}
+if {([regexp -nocase -- {(#[0-9]+|owner|manager|admin|senior|op|voice|protect)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
+    switch $access {
+       manager { 
+          set flags "-|olM"
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
+} else {
+adduser $user $uhost
+chattr $user -|-SOAMV $chan
+chattr $user $flags $chan
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
+}
+}
+     admin {
+      set flags "-|olA"
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} {
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
+}
+}
+   senior {
+     set flags "-|olS"
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} {
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
+}
+}
+
+owner {
+if {[matchattr $hand n|- $chan]} {
+ set flags "m|-"
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
+}
+}
+}
+
+op {
+ set flags "-|olO"
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
+}
+}
+
+protect {
+ set flags "-|H"
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qolHSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolHSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
+}
+}
+
+
+
+ voice {
+ set flags "-|lV"
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
+} else {
+adduser $user $uhost
+chattr $user -|-qolSOAMV $chan
+chattr $user $flags $chan 
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
+blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
+}
+}
+}
+}
+}
+}
+}
+
+
+
+
+proc publicadd {nick host hand chan arg} {
+global black
+set level [lindex [split $arg] 0]
+set time [ctime [unixtime]]
+set type 0
+set chan1 "$chan"
+set args [lrange [split $arg] 1 end]
+set c [lindex [split $arg] 1]
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 2 end]
+}
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+add:process $args $time $level $hand $host $chan $chan1 $nick $type
+}
+
+
+############################## delacc ################################
+
+proc delaccpublic {nick host hand chan arg} {
+global black
+set args [lrange [split $arg] 0 end]
+set type 0
+set chan1 "$chan"
+set c [lindex [split $arg] 0]
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 1 end]
+}
+delacc:process $nick $host $hand $chan $chan1 $args $type
+}
+
+proc delacc:process {nick host hand chan chan1 args type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($args == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delacc.1 none
+return 0
+}
+if {($args == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delacc.2 none
+return 0
+}
+}
+if {($args == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delacc.3 none
+return 0
+}
+if {($args == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delacc.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+foreach user $args {
+if {$user != ""} {
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {![matchattr $user nm|aolSOAMV $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+return 0
+}
+
+if {[validuser $user]} { 
+chattr $user -|-qaolSOAMV $chan
+blacktools:tell $nick $host $hand $chan $chan1 delacc.5 $user
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+}
+}
+
+############################## del #####################################
+
+proc delpublic {nick host hand chan arg} {
+global black
+set args [lrange [split $arg] 0 end]
+set type 0
+set chan1 "$chan"
+del:process $nick $host $hand $chan $chan1 $args $type
+}
+
+proc del:process {nick host hand chan chan1 args type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {($args == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 del.1 none
+return 0
+}
+if {($args == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 del.2 none
+return 0
+}
+
+foreach user $args {
+if {$user != ""} {
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[validuser $user]} { 
+deluser $user
+blacktools:tell $nick $host $hand $chan $chan1 del.3 $user
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+}
+}
+
+################################ addhost #############################
+
+proc addhostpublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set hosts [lrange [split $arg] 1 end]
+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 char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 addhost.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 addhost.2 none
+return 0
+}
+
+
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} {
+set hhost [getuser $user hosts]
+foreach hhost $hhost {
+if {[string match -nocase $hosts $hhost]} {
+blacktools:tell $nick $host $hand $chan $chan1 addhost.3 "$user $hosts"
+return 0
+}
+}
+setuser $user HOSTS $hosts
+setuser $user XTRA LASTMODIFBY $hand
+setuser $user XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 addhost.4 "$user $hosts"
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+
+############################### delhost ############################
+
+
+proc delhostpuplic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set hosts [lrange [split $arg] 1 end]
+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 time [ctime [unixtime]]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delhost.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delhost.2 none
+return 0
+}
+
+
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} {
+
+set hhost [getuser $user hosts]
+foreach hhost $hhost {
+if {[string match -nocase $hhost $hosts]} {
+set foundhost 1
+}
+}
+if {![info exists foundhost]} {
+blacktools:tell $nick $host $hand $chan $chan1 delhost.3 "$user $hosts"
+return 0
+}
+
+delhost $user $hosts
+blacktools:tell $nick $host $hand $chan $chan1 delhost.4 "$user $hosts"
+} else { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+ }
+}
+
+
+proc chuserpublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+set chandle [lindex [split $arg] 1]
+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 char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 chuser.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 chuser.2 none
+return 0
+}
+
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+
+if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[validuser $user]} {
+chhandle $user $chandle
+setuser $chandle XTRA LASTMODIFBY $hand
+setuser $chandle XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 chuser.3 "$user $chandle"
+} else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+proc userlist:execute {hand host level chan chan1 nick type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($level == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 userlist.1 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 userlist.2 none
+return 0
+}
+}
+if {($level == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 userlist.3 none
+return 0
+}
+if {($level == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 userlist.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+if {([regexp -nocase -- {(#[0-9]+|manager|protect|admin|senior|op|voice|all|owner)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
+    switch $access {
+     manager {
+     set flags "-|M"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+foreach user [wordwrap [join $list "  "] 250 ,] {
+    if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.5 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.6 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+admin {
+  set flags "-|A"
+  set numar [llength [userlist $flags $chan]]
+  set list [userlist $flags $chan]
+foreach user [wordwrap [join $list " , "] 250 ,] {
+if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.8 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.9 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+senior {
+set flags "-|S"
+    set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+foreach user [wordwrap [join $list " , "] 250 ,] {
+if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.10 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.11 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+protect {
+set flags "-|H"
+set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+foreach user [wordwrap [join $list " , "] 250 ,] {
+if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.12 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.13 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+op  {
+set flags "-|O"
+    set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+foreach user [wordwrap [join $list " , "] 250 ,] {
+if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.14 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.15 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+owner {
+if {[matchattr $hand nm|- $chan]} {
+set bossflags "n|-"
+set ownerflags "m|-"
+set listbossowner [userlist $bossflags]
+set listowner [userlist $ownerflags]
+blacktools:tell $nick $host $hand $chan $chan1 userlist.16 $listbossowner
+blacktools:tell $nick $host $hand $chan $chan1 userlist.17 $listowner
+}
+}
+
+voice {
+set flags "-|V"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+foreach user [wordwrap [join $list " , "] 250 ,] {
+if {$list == ""} { set user "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.18 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.19 none
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
+}
+}
+
+all {
+array set flgc [list]
+set flags "-|MNASVO"
+set list [userlist $flags $chan]
+set numar [llength [userlist $flags $chan]]
+foreach user $list {
+if {[matchattr $user -|V $chan]} { 
+lappend flgc(VOICE) $user
+
+} elseif {[matchattr $user -|O $chan]} {
+ 
+lappend flgc(OP) $user
+} elseif {[matchattr $user -|S $chan]} {
+
+lappend flgc(SENIOR) $user
+
+} elseif {[matchattr $user -|A $chan]} {
+ 
+lappend flgc(ADMINISTRATOR) $user
+
+} elseif {[matchattr $user -|M $chan]} {
+ 
+lappend flgc(MANAGER) $user
+ 
+}
+}
+
+foreach flw [array names flgc] {
+lappend messall [join 4$flgc($flw) " , "] -> 12($flw)
+}
+if {$list == ""} { set messall "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 userlist.20 $numar
+blacktools:tell $nick $host $hand $chan $chan1 userlist.21 none
+foreach mes [wordwrap [join $messall] 250] {
+blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $mes
+}
+}
+
+}
+}
+}
+
+proc wordwrap {str {len 100} {splitChr { }}} { 
+   set out [set cur {}]; set i 0 
+   foreach word [split [set str][unset str] $splitChr] { 
+     if {[incr i [string len $word]]>$len} { 
+         lappend out [join $cur $splitChr] 
+         set cur [list $word] 
+         set i [string len $word] 
+      } { 
+         lappend cur $word 
+      } 
+      incr i 
+   } 
+   lappend out [join $cur $splitChr] 
+} 
+
+
+
+proc publicuserlist {nick host hand chan arg} {
+global black
+set level [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $level] && [matchattr $hand nm|- $chan]} {
+set chan "$level"
+set level [lindex [split $arg] 1]
+} 
+userlist:execute $hand $host $level $chan $chan1 $nick $type
+}
+
+
+############################### channels ########################
+
+proc channelspublic {nick host hand chan arg} {
+global botnick black
+set chan1 "$chan"
+channels:process $nick $host $hand $chan $chan1
+}
+
+proc channels:process {nick host hand chan chan1} {
+global botnick black
+set num [llength [channels]]
+set minusers "5"
+array set status [list]
+set notonchan "(NoT on ChaN)"
+set notenough "(users < $minusers)"
+set suspended "(SUSPENDED)"
+foreach c [channels] {
+set usersnumber [llength [chanlist $c]]
+if {[channel get $c inactive]} {
+lappend status($c) "4$c $suspended"
+} elseif {![onchan $botnick $c]} {
+lappend status($c) "4$c $notonchan"
+} elseif {[onchan $botnick $c] && (![botisop $c])} {
+lappend status($c) "4$c"
+} elseif {[onchan $botnick $c] && ($usersnumber < $minusers)} {
+lappend status($c) "4$c $notenough"
+}
+if {![info exists status($c)]} {
+lappend status($c) "1@$c"
+}
+
+lappend message "[join $status($c) ", "]"
+
+}
+blacktools:tell $nick $host $hand $chan $chan1 channels.1 $num
+foreach word [wordwrap [join $message] 350 ,] {
+blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+}
+}
+
+
+############################### info ############################
+
+proc infopublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+info:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc info:process {nick host hand chan chan1 user type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+array set flg [list]
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 info.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 info.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 info.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 info.4 none
+return 0
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[validuser $user]} {
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none 
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+foreach c [channels] {
+if {[matchattr $user -|V $c]} { 
+set fl "VOICE"
+lappend flg($fl) $c
+} elseif {[matchattr $user -|O $c]} { 
+set fl "OP" 
+lappend flg($fl) $c
+} elseif {[matchattr $user -|S $c]} {
+ set fl "SENIOR"
+lappend flg($fl) $c
+} elseif {[matchattr $user -|A $c]} {
+set fl "ADMINISTRATOR" 
+lappend flg($fl) $c
+} elseif {[matchattr $user -|M $c]} {
+set fl "MANAGER" 
+lappend flg($fl) $c 
+}
+
+}
+foreach cf [array names flg] {
+
+lappend exit 1[join $flg($cf) ,] 12($cf) |
+}
+
+}
+
+if {![matchattr $user nm|OAHSMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+if {![info exists exit]} { set exit "1NONE"}
+if {[matchattr $hand nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 info.5 "[join $exit]"
+if {[getuser $user HOSTS] != ""} {
+set hosts [getuser $user hosts]
+blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
+}
+set lastseen [getuser $user LASTON $chan]
+if {($lastseen == "0") || ($lastseen == "")} {
+set seened "1NONE"
+} else { set seened [ctime $lastseen] }
+blacktools:tell $nick $host $hand $chan $chan1 info.7 $seened
+}
+return 0
+}
+
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set suspendat "$black(say.$getlang.info.10)"
+
+set cflags [chattr $user | $chan]
+blacktools:tell $nick $host $hand $chan $chan1 info.8 $user
+blacktools:tell $nick $host $hand $chan $chan1 info.9 $time
+if {[matchattr $user -|V $chan]} { set flags "VOICE" } elseif {[matchattr $user -|O $chan]} { set flags "OP" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR" } elseif {[matchattr $user -|H $chan]} { set flags "PROTECT"}
+if {[matchattr $user -|M $chan]} { set flags "MANAGER" } elseif {[matchattr $user n|- $chan]} { set flags "THE BOSS OWNER" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER" } elseif {$cflags == "-|-"} {puthelp "NOTICE $nick :$user nu are ACCESS pe acest canal !" 
+return 0
+}
+
+
+if {[matchattr $user -|q $chan]} {
+if {[matchattr $user -|V $chan]} { set flags "VOICE ($suspendat)" } elseif {[matchattr $user -|O $chan]} { set flags "OP ($suspendat)" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR ($suspendat)" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR ($suspendat)" } elseif {[matchattr $user -|O $chan]} { set flags "PROTECT ($suspendat)"}
+if {[matchattr $user -|M $chan]} { set flags "MANAGER ($suspendat)" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER ($suspendat)" } elseif {$cflags == "-|-"} {puthelp "NOTICE $nick :$user 
+
+S pe acest canal !" 
+return 0
+}
+}
+
+blacktools:tell $nick $host $hand $chan $chan1 info.11 "$cflags $flags"
+if {[getuser $user INFO] != ""} {
+blacktools:tell $nick $host $hand $chan $chan1 info.12 "[getuser $user INFO]"
+}
+
+ 
+set date [getuser $user XTRA LASTMODIFDATE]
+if {[matchattr $user n|- $chan]} { set date "No Date" }
+if {$date == ""} { set date "No Date" }
+
+ set lastt [getuser $user XTRA LASTMODIFBY]
+ if {$lastt == ""} { set lastt "No info" }
+ if {[matchattr $user n|- $chan]} { set lastt "NONE" }
+blacktools:tell $nick $host $hand $chan $chan1 info.13 "$lastt $date"
+
+if {[getuser $user HOSTS] != ""} {
+set hosts [getuser $user hosts]
+blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
+}
+
+if {![info exists exit]} { set exit "NONE"}
+if {![matchattr $user nm|- $chan] && [matchattr $hand nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 info.5 "[join $exit]"
+}
+
+set lastseen [getuser $user LASTON $chan]
+if {($lastseen == "0") || ($lastseen == "")} { 
+blacktools:tell $nick $host $hand $chan $chan1 info.14 none
+blacktools:tell $nick $host $hand $chan $chan1 info.15 $user
+blacktools:tell $nick $host $hand $chan $chan1 info.16 none
+return 0
+}
+set seened [ctime $lastseen]
+blacktools:tell $nick $host $hand $chan $chan1 info.17 $seened
+blacktools:tell $nick $host $hand $chan $chan1 info.15 $user
+blacktools:tell $nick $host $hand $chan $chan1 info.16 none
+}
+
+
+################################# s ###############################
+
+proc spublic {nick host hand chan arg} {
+global black
+set type 0
+set chan1 "$chan"
+set users [lindex [split $arg] 0]
+if {[regexp {^[#&]} $users] && [matchattr $hand nm|- $chan]} {
+set chan "$users"
+set users [lindex [split $arg] 1]
+}
+s:process $nick $host $hand $chan $chan1 $users $type
+}
+
+proc s:process {nick host hand chan chan1 users type} {
+global botnick black
+set flags "-|q"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($users == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 s.1 none
+return 0
+}
+if {($users == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 s.2 none
+return 0
+}
+}
+if {($users == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 s.3 none
+return 0
+}
+if {($users == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 s.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+if {[matchattr $users -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.5 $users
+return 0
+}
+
+if {![validuser $users]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+if {![matchattr $users nm|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+return 0
+}
+ 
+
+if {[matchattr $users -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $users -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+
+chattr $users $flags $chan
+setuser $users XTRA LASTMODIFBY $hand
+setuser $users XTRA LASTMODIFDATE $time
+blacktools:tell $nick $host $hand $chan $chan1 s.6 $users
+} 
+
+
+################################## us ################################
+
+proc uspublic {nick host hand chan arg} {
+global black
+set type 0
+set chan1 "$chan"
+set users [lindex [split $arg] 0]
+if {[regexp {^[\\+!#&]} $users] && [matchattr $hand nm|- $chan]} {
+set chan "$users"
+set users [lindex [split $arg] 1]
+}
+us:process $nick $host $hand $chan $chan1 $users $type
+}
+
+proc us:process {nick host hand chan chan1 users type} {
+global botnick black
+set flags "-|-q"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set time [ctime [unixtime]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($users == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 us.1 none
+return 0
+}
+if {($users == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 us.2 none
+return 0
+}
+}
+if {($users == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 us.3 none
+return 0
+}
+if {($users == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 us.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $users]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+if {![matchattr $users nm|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+return 0
+}
+
+if {![matchattr $users -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.5 $users
+return 0
+}
+
+if {[matchattr $users -|M $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users -|M $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users m|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users m|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+if {[matchattr $users -|A $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+if {[matchattr $users n|- $chan] && [matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+return 0 
+}
+
+setuser $users XTRA LASTMODIFBY $hand
+setuser $users XTRA LASTMODIFDATE $time
+chattr $users $flags $chan
+blacktools:tell $nick $host $hand $chan $chan1 us.6 $users
+} 
+
+############################## ping ##################################
+
+proc pings {nick host hand chan arg} {
+putquick "PRIVMSG $nick :\001PING [expr {abs([clock clicks -milliseconds])}]\001"
+return 0
+}
+
+proc pingpublic {nick host hand dest key arg} {
+global botnick black
+set ping [split $arg "."]
+set pingreply [lindex $ping 0]
+if {[regexp -- {^-?[0-9]+$} $pingreply]} {
+set second "[expr {abs([expr [expr {abs([clock clicks -milliseconds])} - $pingreply] / 1000.000])}]"
+blacktools:tell:prv $nick $host $hand ping.1 $second
+}
+}
+
+############################### time ##################################
+
+proc timepublic {nick host hand chan arg} {
+global black
+set chan1 "$chan"
+set time [ctime [unixtime]]
+blacktools:tell $nick $host $hand $chan $chan1 time.1 $time
+}
+
+################################### vers ###############################
+
+proc verspublic {nick host hand chan arg} {
+global black
+set why [lindex [split $arg] 0]
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 vers.1 none
+return 0
+}
+vers:process $nick $host $hand $chan $chan1 $why
+}
+
+proc vers:process {nick host hand chan chan1 why} {
+global botnick black
+set ::verschan $chan
+set ::versnick $nick
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {![onchan $why $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan $why
+return 0
+}
+putserv "PRIVMSG $why :\001VERSION\001"
+
+}
+
+
+proc ctcpvers {nickname hostname handle dest key arg} {
+set text [split $arg]
+set chan $::verschan
+set nick $::versnick
+blacktools:tell:prv $nick $hostname $handle vers.3 "$nickname $text"
+}
+
+################################### whois ###############################
+
+proc whoispublic {nick host hand chan arg} {
+global black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set chan1 "$chan"
+set who [lindex [split $arg] 0]
+if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 whois.1 none
+return 0
+}
+whois:process $nick $host $hand $chan $chan1 $who
+}
+
+
+
+proc whois:process {nick host hand chan chan1 who} {
+global botnick black
+set ::wnick $nick
+set ::hand $hand
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+putquick "WHOIS $who $who"
+bind RAW - 311 winfo
+bind RAW - 319 wchannels
+bind RAW - 401 nonicks
+}
+
+proc winfo { from keyword arguments } {
+global black
+ set hand $::hand
+ set nick $::wnick
+ set nickname [lindex [split $arguments] 1]
+ set ident [lindex [split $arguments] 2]
+ set host [lindex [split $arguments] 3]
+ set realname [string range [join [lrange $arguments 5 end]] 1 end]
+
+blacktools:tell:prv $nick hostname $hand whois.3 "$nickname 4host - 12*!*$ident@$host * $realname"
+
+unbind RAW - 311 winfo
+
+}
+
+proc wchannels { from keyword arguments } {
+global black
+set hand $::hand
+set nick $::wnick
+set channels [string range [join [lrange $arguments 2 end]] 1 end]
+blacktools:tell:prv $nick hostname $hand whois.4 $channels
+
+unbind RAW - 319 wchannels
+
+}
+
+proc nonicks { from keyword arguments } {
+global black
+set hand $::hand
+set nick $::wnick
+blacktools:tell:prv $nick hostname $hand whois.5 none
+unbind RAW - 401 nonicks
+}
+
+
+################################### clear ###############################
+
+
+proc clearpublic {nick host hand chan arg} {
+global black
+set why [lindex [split $arg] 0]
+set chan1 "$chan"
+set type 0
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 1]
+}
+clear:process $nick $host $hand $chan $chan1 $why $type
+}
+
+proc clear:process {nick host hand chan chan1 why type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($why == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 clear.1 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 clear.2 none
+return 0
+}
+}
+if {($why == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 clear.3 none
+return 0
+}
+if {($why == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 clear.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+if {([regexp -nocase -- {(#[0-9]+|banlist|userlist)} $why tmp cleanlist]) && (![regexp -nocase -- {\S#} $why])} {
+    switch $cleanlist {
+       userlist {
+set list [userlist -|AOSV $chan]
+
+foreach user $list {
+chattr $user -|-AOVS $chan
+}
+blacktools:tell $nick $host $hand $chan $chan1 clear.5 none
+}
+
+banlist {
+set i 0
+foreach ban [banlist $chan] {
+set theban [lindex $ban 0]
+if {[string match "*" $theban]} {
+set i [expr $i +1]
+killchanban $chan $theban
+}
+}
+blacktools:tell $nick $host $hand $chan $chan1 clear.6 $i
+}
+
+}
+}
+}
+
+
+################################# addbot ################################
+
+
+proc addbotpublic {nick host hand chan arg} {
+global black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set chan1 "$chan"
+set why [lindex [split $arg] 0]
+set host [lindex [split $arg] 1]
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 addbot.1 none
+return 0
+}
+addbot:process $nick $host $hand $chan $chan1 $why $host
+}
+
+
+proc addbot:process {nick host hand chan chan1 why host} {
+global botnick black
+set flags "ao|ao"
+if {[validuser $why]} {
+blacktools:tell $nick $host $hand $chan $chan1 addbot.3 $why
+return 0
+}
+
+addbot $why $host
+chattr $why $flags $chan
+blacktools:tell $nick $host $hand $chan $chan1 addbot.4 "$why $host"
+}
+
+
+
+proc autovonjoin {nick host hand chan} {
+if {[channel get $chan autovoice]} {
+pushmode $chan +v $nick
+}
+}
+
+
+
+proc autoponjoin {nick host hand chan} {
+if {[channel get $chan autoop]} {
+pushmode $chan +o $nick
+}
+}
+
+############################# addop #################################
+
+proc addoppublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+addop:process $nick $host $hand $chan $chan1 $user $type
+}
+
+
+proc addop:process {nick host hand chan chan1 user type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flag "-|a"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 addop.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 addop.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 addop.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 addop.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+
+if {[matchattr $user -|a $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addop.5 $user
+return 0
+}
+
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 addop.6 $user
+}
+
+proc addopjoin {nick host hand chan} {
+if {[matchattr $hand -|a $chan]} {
+pushmode $chan +o $nick
+}
+}
+
+
+########################### addvoice ################################
+
+proc addvoicepublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+addvoice:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc addvoice:process {nick host hand chan chan1 user type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flag "-|g"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+
+if {[matchattr $user -|g $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.5 $user
+return 0
+}
+
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 addvoice.6 $user
+}
+
+proc addvoicejoin {nick host hand chan} {
+if {[matchattr $hand -|g $chan]} {
+pushmode $chan +v $nick
+}
+}
+
+
+
+
+
+########################### delop ##################################
+
+proc deloppublic {nick host hand chan arg} {
+global black botnick
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+delop:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc delop:process {nick host hand chan chan1 user type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flag "-|-a"
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delop.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delop.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delop.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delop.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+
+if {[matchattr $user -|a $chan]} {
+set noautoop 1
+}
+
+if {![info exists noautoop]} {
+blacktools:tell $nick $host $hand $chan $chan1 delop.5 $user
+return 0
+}
+
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 delop.6 $user
+}
+
+
+
+############################ delvoice ###############################
+
+proc delvoicepublic {nick host hand chan arg} {
+global black
+set user [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+delvoice:process $nick $host $hand $chan $chan1 $user $type
+}
+
+
+
+proc delvoice:process {nick host hand chan chan1 user type} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set flag "-|-g"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+
+if {[matchattr $user -|g $chan]} {
+set noautovoice 1
+}
+
+if {![info exists noautovoice]} {
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.5 $user
+return 0
+}
+
+chattr $user $flag $chan
+blacktools:tell $nick $host $hand $chan $chan1 delvoice.6 $user
+}
+
+
+
+############################## activ ##################################
+
+proc activpublic {nick host hand chan arg} { 
+global black
+set type 0
+set chan1 "$chan"
+set user [lindex [split $arg] 0]
+if {[regexp {^[#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 1]
+}
+activ:process $nick $host $hand $chan $chan1 $user $type
+}
+
+proc activ:process {nick host hand chan chan1 user type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($user == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.1 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.2 none
+return 0
+}
+}
+if {($user == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.3 none
+return 0
+}
+if {($user == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+return 0
+}
+if {![matchattr $user mn|OAVMS $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+return 0
+}
+
+set dr [getuser $user XTRA DR($chan)]
+set ban [getuser $user XTRA b($chan)]
+set spam [getuser $user XTRA spam($chan)]
+set badnick [getuser $user XTRA n($chan)]
+set invite [getuser $user XTRA i($chan)]
+set blacks [getuser $user XTRA Black($chan)]
+set warn [getuser $user XTRA w($chan)]
+set day [getuser $user XTRA d($chan)]
+set kick [getuser $user XTRA k($chan)]
+set stick [getuser $user XTRA stick($chan)]
+set bw [getuser $user XTRA bw($chan)]
+set bot [getuser $user XTRA bot($chan)]
+
+if {$ban == ""} { set ban "0" }
+if {$dr == ""} { set dr "0" }
+if {$spam == ""} { set spam "0" }
+if {$badnick == ""} { set badnick "0" }
+if {$invite == ""} { set invite "0" }
+if {$blacks == ""} { set blacks "0" }
+if {$warn == ""} { set warn "0" }
+if {$day == ""} { set day "0" }
+if {$kick == ""} { set kick "0" }
+if {$stick == ""} { set stick "0" }
+if {$bw == ""} { set bw "0" }
+if {$bot == ""} { set bot "0" }
+
+if {[matchattr $user mn|AMS $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.5 $user
+blacktools:tell $nick $host $hand $chan $chan1 activ.6 "12- $char(p)dr - 4($dr) | 12- $char(p)bot - 4($bot) | 12- $char(p)b - 4($ban) | 12- $char(p)spam - 4($spam) | 12- $char(p)n - 4($badnick) | 12- $char(p)i - 4($invite) | 12- $char(p)black - 4($blacks) | 12- $char(p)w - 4($warn) | 12- $char(p)d - 4($day) | 12- $char(p)k - 4($kick) | 12- $char(p)stick - 4($stick) | 12- $char(p)bw - 4($bw) ."
+blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
+return 0
+}
+if {[matchattr $user -|O $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.8 $user
+blacktools:tell $nick $host $hand $chan $chan1 activ.6 "12- $char(p)dr - 4($dr) | 12- $char(p)bot - 4($bot) | 12- $char(p)b - 4($ban) | 12- $char(p)spam - 4($spam) | 12- $char(p)n - 4($badnick) | 12- $char(p)i - 4($invite) | 12- $char(p)w - 4($warn) | 12- $char(p)k - 4($kick) | 12- $char(p)bw - 4($bw) ."
+blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
+return 0
+}
+if {[matchattr $user -|V $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 activ.9 $user
+blacktools:tell $nick $host $hand $chan $chan1 activ.6 "12- $char(p)w - 4($warn) | 12- $char(p)k - 4($kick)"
+blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
+return 0
+}
+}
+
+proc addmyhostpublic {nick host hand chan arg} {
+global black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set chan1 "$chan"
+set why [lindex [split $arg] 0]
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 addmyhost.1 none
+return 0
+}
+addmyhost:process $nick $host $hand $chan $chan1 $why
+}
+
+proc addmyhost:process {nick host hand chan chan1 why} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set hhost [getuser $hand hosts]
+foreach hhost $hhost {
+if {[string match -nocase $hhost $why]} {
+set foundhost 1
+}
+}
+if {[info exists foundhost]} {
+blacktools:tell $nick $host $hand $chan $chan1 addmyhost.3 $why
+return 0
+}
+setuser $hand HOSTS $why
+blacktools:tell $nick $host $hand $chan $chan1 addmyhost.4 $why
+}
+
+############################## delmyhost ##########################
+
+proc delmyhostpublic {nick host hand chan arg} {
+global black
+set chan1 "$chan"
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set why [lindex [split $arg] 0]
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 delmyhost.1 none
+return 0
+}
+delmyhost:process $nick $host $hand $chan $chan1 $why
+}
+
+proc delmyhost:process {nick host hand chan chan1 why} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set hhost [getuser $hand hosts]
+foreach hhost $hhost {
+if {[string match -nocase $hhost $why]} {
+set foundhost 1
+}
+}
+if {![info exists foundhost]} {
+blacktools:tell $nick $host $hand $chan $chan1 delmyhost.3 $why
+return 0
+}
+delhost $hand $why
+blacktools:tell $nick $host $hand $chan $chan1 delmyhost.4 $why
+}
+
+
+######################## cc (channel created) #######################
+
+proc createdpublic { from keyword arguments } {
+set hand $::hand
+set nick $::ccnick
+set date [lindex [split $arguments] 2]
+set dates [ctime $date]
+blacktools:tell:prv $nick host $hand cc.3 $dates
+unbind RAW - 329 createdpublic
+}
+
+proc nocreatedpublic { from keyword arguments } {
+set hand $::hand
+set nick $::ccnick
+blacktools:tell:prv $nick host $hand cc.4 none
+unbind RAW - 403 nocreatedpublic
+
+}
+
+proc ccpublic {nick host hand chan arg} {
+global black
+set ::ccnick $nick
+set ::hand $hand
+set chan1 "$chan"
+set c [lindex [split $arg] 0]
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {$c == ""} { blacktools:tell $nick $host $hand $chan $chan1 cc.1 none
+return 0
+}
+if {![regexp {^[\\+!#&]} $c]} {
+set c #$c
+ } 
+
+putquick "MODE $c"
+bind raw - 329 createdpublic
+bind raw - 403 nocreatedpublic
+}
+
+proc statspublic {nick host hand chan arg} {
+global botnick black
+set c [lindex [split $arg] 0]
+set chan1 "$chan"
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+stats:process $nick $host $hand $chan $chan1
+}
+
+proc stats:process {nick host hand chan chan1} {
+global botnick black statsdir
+set ops 0
+set numban 0
+set voices 0
+set numuser 0
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+set time [unixtime]
+set file [open $statsdir "r"]
+set database [read -nonewline $file]
+set data [split $database "\n"]
+foreach line $data {
+set c [lindex [split $line] 0]
+set type [lindex [split $line] 1]
+if {[string match "ADDED" "$type"] && [string match -nocase $c $chan]} {
+set foundchan 1
+set chanadded 1
+set awho [lindex [split $line] 2]
+set ahost [lindex [split $line] 3]
+set a1time [lindex [split $line] 4]
+if {[regexp {^[0-9]} $a1time]} { 
+set duration [duration [expr [unixtime] - $a1time]]
+} else { set duration "NONE" }
+if {[regexp {^[0-9]} $a1time]} {
+set atime [clock format $a1time -format %D-%H:%M:%S]
+} else { set atime "NONE"}
+set replace(%ahost%) $ahost
+set replace(%atime%) $atime
+set replace(%duration%) $duration
+set replace(%awho%) $awho
+lappend mes "[string map [array get replace] $black(say.$getlang.stats.1)]" 
+lappend mes1 "[string map [array get replace] $black(say.$getlang.stats.2)]"
+}
+if {[string match "REMOVED" "$type"] && [string match -nocase $c $chan]} {
+set foundchan 1
+set chanremoved 1
+set rwho [lindex [split $line] 2]
+set rhost [lindex [split $line] 3]
+set rtime [lindex [split $line] 4]
+set a1time [lindex [split $line] 5]
+if {[regexp {^[0-9]} $a1time]} { 
+set duration [duration [expr [unixtime] - $a1time]]
+} else { set duration "NONE" }
+if {[regexp {^[0-9]} $a1time]} {
+set atime [clock format $a1time -format %D-%H:%M:%S]
+} else { set atime "NONE"}
+if {[regexp {^[0-9]} $rtime]} {
+set rtime [clock format $rtime -format %D-%H:%M:%S]
+} else { set rtime "NONE" }
+set awho [lindex [split $line] 6]
+set ahost [lindex [split $line] 7]
+set replace(%ahost%) $ahost
+set replace(%atime%) $atime
+set replace(%rtime%) $rtime
+set replace(%duration%) $duration
+set replace(%awho%) $awho
+set replace(%rwho%) $rwho
+set replace(%rhost%) $ahost
+lappend mes "[string map [array get replace] $black(say.$getlang.stats.1)]"
+lappend mes1 "[string map [array get replace] $black(say.$getlang.stats.3)]"
+lappend mes2 "[string map [array get replace] $black(say.$getlang.stats.4)]"
+}
+}
+if {![info exists foundchan]} {
+blacktools:tell $nick $host $hand $chan $chan1 stats.5 none
+return 0
+}
+if {[validchan $chan] && ([onchan $botnick $chan])} {
+set numban [llength [banlist $chan]]
+set numuser [llength [chanlist $chan]]
+foreach user [chanlist $chan] {
+if {[isop $user $chan] && (![isvoice $user $chan])} {
+set ops [expr $ops +1]
+}
+if {[isvoice $user $chan]} {
+set voices [expr $voices +1]
+}
+}
+}
+if {[info exists chanadded]} {
+blacktools:tell $nick $host $hand $chan $chan1 stats.6 none
+blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes]"
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 stats.9 none 
+} else {
+blacktools:tell $nick $host $hand $chan $chan1 stats.8 none
+}
+blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes1]"
+blacktools:tell $nick $host $hand $chan $chan1 stats.10 "$numuser $ops $voices $numban"
+blacktools:tell $nick $host $hand $chan $chan1 stats.11 none
+}
+
+if {[info exists chanremoved]} {
+blacktools:tell $nick $host $hand $chan $chan1 stats.6 none
+blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes]"
+blacktools:tell $nick $host $hand $chan $chan1 stats.12 none
+blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes1]"
+blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes2]"
+blacktools:tell $nick $host $hand $chan $chan1 stats.11 none
+}
+
+}
+
+
+
+####################### TopWords ####################################
+
+
+proc topwordspublic {nick host hand chan arg} {
+global black who username
+set arg [split $arg]
+if {![validchan $chan]} {
+return 0
+}
+if {[channel get $chan topwords]} {
+set lin 0
+set wordsdir "logs/$username.$chan.words.db"
+if {![file exists $wordsdir]} {
+set file [open $wordsdir w]
+close $file
+}
+set host "*!*@[lindex [split $host @] 1]"
+set len($host) [llength $arg]
+set words($host:$chan) $len($host)
+if {[isbotnick $nick]} { return 0 }
+set who "$chan $nick $host $words($host:$chan)"
+set file [open $wordsdir "r"]
+set database [read -nonewline $file]
+close $file
+set data [split $database "\n"]
+foreach line $data {
+set lin [expr $lin +1] 
+set hhost [lindex [split $line] 2]
+set hscore [lindex [split $line] 3]
+set chanentry [lindex [split $line] 0]
+if {[string match -nocase $hhost $host] && [string match -nocase $chanentry $chan]} {
+lappend current($hhost:$chan) $hscore
+set who "$chan $nick $hhost [expr $words($host:$chan) + $current($hhost:$chan)]"
+if {$line != ""} {
+set num [expr $lin - 1]
+set delete [lreplace $data $num $num]
+set files [open $wordsdir "w"]
+puts $files [join $delete "\n"]
+close $files
+}
+}
+}
+set file [open $wordsdir "r"]
+set data [read -nonewline $file]
+close $file
+if {$data == ""} {
+set files [open $wordsdir "w"]
+close $files
+}
+set file [open $wordsdir "a"]
+puts $file "$who"
+close $file
+}
+}
+
+
+################################## TOP ################################
+
+proc toppublic {nick host hand chan arg} {
+global black
+set cmd [lindex [split $arg] 0]
+set del [lindex [split $arg] 1]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $cmd] && [matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set chan "$cmd"
+set cmd [lindex [split $arg] 1]
+set del [lindex [split $arg] 2]
+}
+top:process $nick $host $hand $chan $chan1 $cmd $type $del
+}
+
+
+proc top:process {nick host hand chan chan1 cmd type del} {
+global botnick black username
+set max "20"
+set i 0
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+set list [userlist nm|OSVAM $chan]
+set wordsdir "logs/$username.$chan.words.db"
+if {![file exists $wordsdir]} {
+set file [open $wordsdir w]
+close $file
+}
+
+if {[matchattr $hand nm|- $chan]} {
+if {($cmd == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 top.1 none
+blacktools:tell $nick $host $hand $chan $chan1 top.2 none
+return 0
+}
+if {($cmd == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 top.3 none
+blacktools:tell $nick $host $hand $chan $chan1 top.4 none
+return 0
+}
+}
+if {($cmd == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 top.5 none
+blacktools:tell $nick $host $hand $chan $chan1 top.6 none
+return 0
+}
+if {($cmd == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 top.7 none
+blacktools:tell $nick $host $hand $chan $chan1 top.8 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+ 
+switch -exact -- [string tolower $cmd] {
+       dr {
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA DR($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.10 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+ b {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA b($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.12 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+bot {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA bot($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.13 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+bw {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA bw($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.14 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+black {
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA Black($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.15 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+
+spam {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA spam($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.16 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+stick {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA stick($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.17 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+n {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA n($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.18 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+
+i {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA i($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.19 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+k {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA k($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.20 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+w {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA w($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.21 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+d {
+ 
+array set blacks [list] 
+set list [userlist nm|OSVAM $chan] 
+foreach user $list { 
+ set b [getuser $user XTRA d($chan)] 
+ if {$b == ""} { set b 0 }
+if {$b > 0} { 
+ lappend blacks($b) $user
+}
+}
+
+foreach blackq [lsort -integer -decreasing [array names blacks]] {
+set i [expr $i +1]
+lappend topblack 1- $i - : 1[join $blacks($blackq) ,] 12($blackq) | 
+}
+if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.22 none
+foreach txt [wordwrap [join $topblack " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+words {
+array set topw [list]
+if {![channel get $chan topwords]} {
+blacktools:tell $nick $host $hand $chan $chan1 top.23 none
+return 0
+}
+if {[string match -nocase $del "erase"] && [matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 top.24 none
+set file [open $wordsdir "w"]
+close $file
+return 0
+}
+set file [open $wordsdir "r"]
+set database [read -nonewline $file]
+close $file
+if {$database == ""} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+set data [split $database "\n"]
+foreach line $data {
+set hhost [lindex [split $line] 2]
+set hentry [lindex [split $line] 1]
+set chanentry [lindex [split $line] 0]
+set tw [lindex [split $line] 3]
+if {[string match -nocase $chanentry $chan]} {
+lappend topw($tw) $hentry
+}
+}
+foreach twords [lsort -integer -decreasing [array names topw]] {
+set i [expr $i +1]
+if {!($i > $max)} {
+lappend topwo 1- $i - : 1[join $topw($twords) ,] 12($twords) |
+}
+}
+if {![info exists topwo]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
+return 0
+}
+blacktools:tell $nick $host $hand $chan $chan1 top.25 $max
+foreach txt [wordwrap [join $topwo " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
+}
+}
+
+}
+}
+
+proc securepublic {nick host hand chan arg} {
+global black
+set what [lindex [split $arg] 0]
+set type 0
+set chan1 "$chan"
+if {[regexp {^[#&]} $what] && [matchattr $hand nm|- $chan]} {
+set chan "$what"
+set what [lindex [split $arg] 1]
+}
+secure:process $nick $host $hand $chan $chan1 $what $type
+}
+
+
+proc secure:process {nick host hand chan chan1 what type} {
+global botnick black
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+} 
+if {[matchattr $hand nm|- $chan]} {
+if {($what == "")  && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 secure.1 none
+return 0
+}
+if {($what == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 secure.2 none
+return 0
+}
+}
+if {($what == "") && ($type == "0")} {
+blacktools:tell $nick $host $hand $chan $chan1 secure.3 none
+return 0
+}
+if {($what == "") && ($type == "1")} {
+blacktools:tell $nick $host $hand $chan $chan1 secure.4 none
+return 0
+}
+
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+}
+
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return 0
+}
+
+
+
+
+if {[string match -nocase "$what" "on"]} {
+set char(a) "+"
+channel set $chan $char(a)antipub ; channel set $chan $char(a)antinotice ; channel set $chan $char(a)antictcp ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antilongtext ; channel set $chan $char(a)badquitpart ; channel set $chan $char(a)antijoinpart ; channel set $chan $char(a)antispam ; channel set $chan $char(a)antirepeat ; channel set $chan $char(a)anticolor ; channel set $chan $char(a)antibold ; channel set $chan $char(a)antiunderline ; channel set $chan $char(a)anticaps ; channel set $chan $char(a)badnick ; channel set $chan $char(a)badfullname ; channel set $chan $char(a)antijoinflood ; channel set $chan $char(a)antichanflood ; channel set $chan $char(a)badident
+blacktools:tell $nick $host $hand $chan $chan1 secure.5 none
+}
+if {[string match -nocase "$what" "off"]} {
+set char(a) "-"
+channel set $chan $char(a)antipub ; channel set $chan $char(a)antinotice ; channel set $chan $char(a)antictcp ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antilongtext ; channel set $chan $char(a)badquitpart ; channel set $chan $char(a)antijoinpart ; channel set $chan $char(a)antispam ; channel set $chan $char(a)antirepeat ; channel set $chan $char(a)anticolor ; channel set $chan $char(a)antibold ; channel set $chan $char(a)antiunderline ; channel set $chan $char(a)anticaps ; channel set $chan $char(a)badnick ; channel set $chan $char(a)badfullname ; channel set $chan $char(a)antijoinflood ; channel set $chan $char(a)antichanflood ; channel set $chan $char(a)badident
+blacktools:tell $nick $host $hand $chan $chan1 secure.6 none
+}
+}
+
+proc hpublic {nick host hand chan arg} {
+global black botnick
+set chan1 "$chan"
+set command [lindex [split $arg] 0]
+h:process $nick $host $hand $chan $chan1 $command
+}
+
+
+proc h:process {nick host hand chan chan1 command} {
+global black botnick
+set char(p) [lindex $black(cmdchar) 0]
+if {[string match -nocase "$char(p)" "none"]} {
+set char(p) ""
+}
+set replace(%chan%) $chan
+set replace(%char%) $char(p)
+set greeting [getuser $hand XTRA GREET]
+set chanlang [string tolower [channel get $chan lang]]
+if {$chanlang == ""} { set chanlang "[string tolower $black(default_lang)]" }
+if {$greeting == ""} {
+putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.1)]"
+putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.2)]"
+putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.3)]"
+putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.4)]"
+setuser $hand XTRA GREET 1
+return 0
+}
+set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+set replace(%char%) "$char(p)"
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$command == ""} {
+if {[matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.1 none
+blacktools:tell $nick $host $hand $chan $chan1 h.2 none
+return 0
+}
+if {[matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.3 none
+blacktools:tell $nick $host $hand $chan $chan1 h.4 none
+return 0
+}
+if {[matchattr $hand -|V $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.5 none
+blacktools:tell $nick $host $hand $chan $chan1 h.6 none
+return 0
+}
+if {[matchattr $hand -|O $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.7 none
+blacktools:tell $nick $host $hand $chan $chan1 h.8 none
+return 0
+}
+if {[matchattr $hand -|S $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.9 none
+blacktools:tell $nick $host $hand $chan $chan1 h.10 none
+return 0
+}
+if {[matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.11 none
+blacktools:tell $nick $host $hand $chan $chan1 h.12 none
+return 0
+}
+if {[matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 h.13 none
+blacktools:tell $nick $host $hand $chan $chan1 h.14 none
+return 0
+}
+return 0
+}
+switch -exact -- [string tolower $command] {
+
+cmds {
+if {[matchattr $hand -|V $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 cmdsvoice none
+
+return 0
+}
+
+if {[matchattr $hand -|O $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdsop)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand -|S $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdsenior)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+
+}
+return 0
+}
+
+if {[matchattr $hand -|A $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdadmin)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+b
+}
+return 0
+}
+
+if {[matchattr $hand -|M $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdmanager)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+
+}
+return 0
+}
+
+if {[matchattr $hand n|- $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdbossowner)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+
+}
+return 0
+}
+
+if {[matchattr $hand m|- $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.cmdowner)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+
+}
+return 0
+}
+}
+
+ban {
+
+if {[matchattr $hand -|V $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banvoice)] " "] 450] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand -|O $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banop)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand -|S $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.bansenior)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand -|A $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banadmin)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand -|M $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banmanager)] " "] 300] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand n|- $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banbossowner)] " "] 380] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+
+if {[matchattr $hand m|- $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banowner)] " "] 380] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+return 0
+}
+}
+
+add {
+
+if {[matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addadmin none
+return 0
+}
+
+if {[matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addmanager none
+return 0
+}
+
+if {[matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addbossowner none
+return 0
+}
+
+if {[matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 addowner none
+return 0
+}
+}
+
+
+modif {
+if {[matchattr $hand -|A $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 modifadmin none
+return 0
+}
+
+if {[matchattr $hand -|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 modifmanager none
+return 0
+}
+
+if {[matchattr $hand n|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 modifbossowner none
+return 0
+}
+
+if {[matchattr $hand m|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 modifowner none
+return 0
+}
+}
+
+owner {
+if {[matchattr $hand nm|- $chan]} {
+foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.howner)] " "] 390] {
+blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
+}
+}
+}
+
+top {
+if {[matchattr $hand nm|MASOV $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 htop $nick
+}
+}
+
+blacktools {
+if {[matchattr $hand nm|M $chan]} {
+if {[channel get $chan antipub]} { set pubstatus "+antipub" } else { set pubstatus "-antipub" }
+if {[channel get $chan antinotice]} { set noticestatus "+antinotice" } else { set noticestatus "-antinotice" }
+if {[channel get $chan antictcp]} { set ctcpstatus "+antictcp" } else { set ctcpstatus "-antictcp" }
+if {[channel get $chan antibadword]} { set badwordstatus "+antibadword" } else { set badwordstatus "-antibadword" }
+if {[channel get $chan antilongtext]} { set longtextstatus "+antilongtext" } else { set longtextstatus "-antilongtext" }
+if {[channel get $chan badquitpart]} { set badquitpartstatus "+badquitpart" } else { set badquitpartstatus "-badquitpart" }
+if {[channel get $chan antijoinpart]} { set joinpartstatus "+antijoinpart" } else { set joinpartstatus "-antijoinpart" }
+if {[channel get $chan antispam]} { set antispamstatus "+antispam" } else { set antispamstatus "-antispam" }
+if {[channel get $chan antirepeat]} { set repeatstatus "+antirepeat" } else { set repeatstatus "-antirepeat" }
+if {[channel get $chan anticolor]} { set colorstatus "+anticolor" } else { set colorstatus "-anticolor" }
+if {[channel get $chan antibold]} { set boldstatus "+antibold" } else { set boldstatus "-antibold" }
+if {[channel get $chan antiunderline]} { set underlinestatus "+antiunderline" } else { set underlinestatus "-antiunderline" }
+if {[channel get $chan anticaps]} { set capsstatus "+anticaps" } else { set capsstatus "-anticaps" }
+if {[channel get $chan badnick]} { set nickstatus "+badnick" } else { set nickstatus "-badnick" }
+if {[channel get $chan badfullname]} { set fullnamestatus "+badfullname" } else { set fullnamestatus "-badfullname" }
+if {[channel get $chan autoop]} { set opstatus "+autoop" } else { set opstatus "-autoop" }
+if {[channel get $chan autovoice]} { set voicestatus "+autovoice" } else { set voicestatus "-autovoice" }
+if {[channel get $chan antijoinflood]} { set joinfloodstatus "+antijoinflood" } else { set joinfloodstatus "-antijoinflood" }
+if {[channel get $chan antichanflood]} { set chanfloodstatus "+antichanflood" } else { set chanfloodstatus "-antichanflood" }
+if {[channel get $chan badident]} { set badidentstatus "+badident" } else { set badidentstatus "-badident" }
+set xbantime [channel get $chan xbantime]
+if {$xbantime == "0"} { set xbantime 1 }
+set xbanlevel [channel get $chan xbanlevel]
+if {$xbanlevel == "0"} { set xbanlevel 100 }
+blacktools:tell $nick $host $hand $chan $chan1 hblacktools.1 "1$pubstatus | 4$noticestatus | 1$ctcpstatus | 4$badwordstatus | 1$longtextstatus | 4$badquitpartstatus | 1$joinpartstatus | 4$antispamstatus | 1$repeatstatus | 4$colorstatus | 1$boldstatus | 4$underlinestatus | 1$capsstatus | 4$nickstatus | 1$fullnamestatus | 4$opstatus | 1$voicestatus | 4$joinfloodstatus | 1$chanfloodstatus | 4$badidentstatus | 1xbantime $xbantime | 4xbanlevel $xbanlevel."
+blacktools:tell $nick $host $hand $chan $chan1 hblacktools.2 none
+}
+}
+
+standard {
+if {[matchattr $hand nm|M $chan]} {
+if {[channel get $chan protectops]} { set protectops "+protectops" } else { set protectops "-protectops" }
+if {[channel get $chan bitch]} { set bitch "+bitch" } else { set bitch "-bitch" }
+if {[channel get $chan enforcebans]} { set enforcebans "+enforcebans" } else { set enforcebans "-enforcebans" }
+if {[channel get $chan protecthalfops]} { set protecthalfops "+protecthalfops" } else { set protecthalfops "-protecthalfops" }
+if {[channel get $chan protectfriends]} { set protectfriends "+protectfriends" } else { set protectfriends "-protectfriends" }
+if {[channel get $chan dynamicbans]} { set dynamicbans "+dynamicbans" } else { set dynamicbans "-dynamicbans" }
+if {[channel get $chan dontkickops]} { set dontkickops "+dontkickops" } else { set dontkickops "-dontkickops" }
+if {[channel get $chan nodesynch]} { set nodesynch "+nodesynch" } else { set nodesynch "-nodesynch" }
+if {[channel get $chan dynamicbans]} { set noticestatus "+dynamicbans" } else { set dynamicbans "-dynamicbans" }
+set bantime [channel get $chan ban-time]
+set floodchan [channel get $chan flood-chan]
+set floodjoin [channel get $chan flood-join]
+set floodkick [channel get $chan flood-kick]
+set floodctcp [channel get $chan flood-ctcp]
+set floodnick [channel get $chan flood-nick]
+set flooddeop [channel get $chan flood-deop]
+set chanmode [channel get $chan chanmode]
+blacktools:tell $nick $host $hand $chan $chan1 hstandard.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hstandard.3 "1$protectops 4$bitch 1$enforcebans 4$protecthalfops 1$protectfriends 4$dynamicbans 1$dontkickops 4$nodesynch"
+blacktools:tell $nick $host $hand $chan $chan1 hstandard.3 "12Flood-Chan :1 $floodchan  12Flood-join :4 $floodjoin  12Flood-Kick :1 $floodkick  12Flood-Ctcp :4 $floodctcp  12Flood-Nick :1 $floodnick  12Flood-Deop :4 $flooddeop "
+blacktools:tell $nick $host $hand $chan $chan1 hstandard.3  "12ChanMode :1$chanmode 12Ban-Time :1 $bantime "
+blacktools:tell $nick $host $hand $chan $chan1 hstandard.2 none
+}
+}
+
+
+
+
+chaninfo {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.3 none
+blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.4 none
+blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.5 none
+}
+}
+
+module {
+if {[matchattr $hand nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hmodule.1 none
+} else { blacktools:tell $nick $host $hand $chan $chan1 hmodule.2 none }
+blacktools:tell $nick $host $hand $chan $chan1 hmodule.3 none
+}
+
+
+antitake {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantitake.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantitake.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantitake.3 none
+blacktools:tell $nick $host $hand $chan $chan1 hantitake.4 none
+}
+}
+
+private {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hprivate.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hprivate.2 none
+}
+}
+
+language {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hlanguage.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hlanguage.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hlanguage.3 none
+}
+}
+
+
+xban {
+set xbantime [channel get $chan xbantime]
+if {$xbantime == "0"} { set xbantime 1 }
+set xlevel [channel get $chan xbanlevel]
+if {$xlevel == "0"} { set xlevel 100 }
+if {[matchattr $hand nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hxban.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hxban.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hxban.3 "$xbantime $xlevel"
+}
+}
+
+topicrefresh {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 htopicrefresh.1 none
+blacktools:tell $nick $host $hand $chan $chan1 htopicrefresh.2 none
+}
+}
+
+count {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hcount.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hcount.2 none
+}
+}
+
+xtools {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hxtools.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hxtools.2 none
+}
+}
+
+badchan {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadchan.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadchan.2 none
+}
+}
+
+badword {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadword.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadword.2 none
+}
+}
+
+anunt {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hanunt.1 $black(anunttime)
+blacktools:tell $nick $host $hand $chan $chan1 hanunt.2 none
+}
+}
+
+autobroadcast {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hautobroadcast.1 $black(bttime)
+blacktools:tell $nick $host $hand $chan $chan1 hautobroadcast.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hautobroadcast.3 none
+}
+}
+
+antibotidle {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantibotidle.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibotidle.2 $black(noidlemax)
+}
+}
+
+limit {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hlimit.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hlimit.2 none
+}
+}
+
+topic {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 htopic.1 none
+blacktools:tell $nick $host $hand $chan $chan1 htopic.2 none
+}
+}
+
+seen {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hseen.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hseen.2 none
+}
+}
+
+clonescan {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hclonescan.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hclonescan.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hclonescan.3 none
+}
+}
+
+greet {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hgreet.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hgreet.2 none
+}
+}
+leave {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hleave.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hleave.2 none
+}
+}
+
+idle {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hidle.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hidle.2 none
+}
+}
+
+chanreport {
+if {[matchattr $hand nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hchanreport.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hchanreport.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hchanreport.3 none
+}
+}
+
+topwords {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 htopwords.1 none
+blacktools:tell $nick $host $hand $chan $chan1 htopwords.2 none
+blacktools:tell $nick $host $hand $chan $chan1 htopwords.3 none
+}
+}
+
+settings {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.3 none
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.4 none
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.5 none
+blacktools:tell $nick $host $hand $chan $chan1 hsettings.6 none
+}
+}
+
+reason {
+if {[matchattr $hand nm|M $chan]} {
+if {[channel get $chan showhandle]} { set showhandle "+showhandle" } else { set showhandle "-showhandle" }
+if {[channel get $chan showcount]} { set showcount "+showcount" } else { set showcount "-showcount" }
+if {[channel get $chan showtime]} { set showtime "+showtime" } else { set showtime "-showtime" }
+blacktools:tell $nick $host $hand $chan $chan1 hreason.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hreason.2 "$showhandle $showcount $showtime"
+blacktools:tell $nick $host $hand $chan $chan1 hreason.3 none
+blacktools:tell $nick $host $hand $chan $chan1 hreason.4 none
+blacktools:tell $nick $host $hand $chan $chan1 hreason.5 none
+blacktools:tell $nick $host $hand $chan $chan1 hreason.6 none
+}
+}
+
+
+extra {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hextra.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hextra.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hextra.3 none
+blacktools:tell $nick $host $hand $chan $chan1 hextra.4 none
+blacktools:tell $nick $host $hand $chan $chan1 hextra.5 none
+}
+}
+
+antipub {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantipub.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantipub.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantipub.3 none
+}
+}
+
+privat {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hprivat.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hprivat.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hprivat.3 none
+}
+}
+
+antidle {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantidle.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantidle.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantidle.3 none
+}
+}
+
+
+antinotice {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantinotice.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantinotice.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantinotice.3 none
+}
+}
+
+antictcp {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantictcp.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantictcp.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantictcp.3 none
+}
+}
+
+antibadword {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantibadword.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibadword.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibadword.3 none
+}
+}
+
+antilongtext {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantilongtext.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantilongtext.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantilongtext.3 none
+}
+}
+ 
+antibadquitpart {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantibadquitpart.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibadquitpart.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibadquitpart.3 none
+}
+}
+
+antijoinpart {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinpart.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinpart.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinpart.3 none
+}
+}
+
+antispam {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantispam.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantispam.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantispam.3 none
+}
+}
+
+antirepeat {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantirepeat.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantirepeat.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantirepeat.3 none
+}
+}
+
+anticolor {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hanticolor.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hanticolor.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hanticolor.3 none
+}
+}
+
+antibold {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantibold.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibold.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantibold.3 none
+}
+}
+
+antiunderline {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantiunderline.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantiunderline.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantiunderline.3 none
+}
+}
+
+anticaps {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hanticaps.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hanticaps.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hanticaps.3 none
+}
+}
+
+badfullname {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadfullname.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadfullname.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadfullname.3 none
+}
+}
+
+badnick {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadnick.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadnick.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadnick.3 none
+}
+}
+
+badident {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadident.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadident.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadident.3 none
+}
+}
+
+antichanflood {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantichanflood.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantichanflood.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantichanflood.3 none
+}
+}
+
+antijoinflood {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinflood.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinflood.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hantijoinflood.3 none
+}
+}
+
+dr {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hdr.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hdr.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hdr.3 none
+}
+}
+
+bot {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbot.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbot.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbot.3 none
+}
+}
+
+
+n {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hn.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hn.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hn.3 none
+}
+}
+
+id {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hid.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hid.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hid.3 none
+}
+}
+
+w {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hw.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hw.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hw.3 none
+}
+}
+
+spam {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hspam.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hspam.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hspam.3 none
+}
+}
+
+
+bw {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbw.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbw.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbw.3 none
+}
+}
+
+badchannel {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hbadchannel.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadchannel.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hbadchannel.3 none
+}
+}
+
+counter {
+if {[matchattr $hand nm|M $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 hcounter.1 none
+blacktools:tell $nick $host $hand $chan $chan1 hcounter.2 none
+blacktools:tell $nick $host $hand $chan $chan1 hcounter.3 none
+}
+}
+
+}
+}
+
+
+
+
+proc comand:pubme {nick host hand chan arg} {
+global botnick wordsdir wdir sdir black seendir count server uptime {server-online}
+set arg [split $arg]
+set bnick [lindex [split $arg] 0]
+set what [lindex [split $arg] 1]
+if {([lsearch -exact [string tolower $bnick] [string tolower $botnick]] == 0)} {
+switch -exact -- [string tolower $what] {
+
+clear {
+if {[matchattr $hand nm|M $chan]} {
+set why [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+}
+clear:process $nick $host $hand $chan $chan1 $why $type
+}
+}
+
+
+private {
+if {[matchattr $hand nm|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 nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+set user [lindex [split $arg] 4]
+set host [lindex [split $arg] 5]
+}
+private:process $nick $host $hand $chan $chan1 $why $user $host $type
+}
+}
+
+
+login {
+if {[matchattr $hand nm|MSOAV $chan]} {
+putquick "$black(login)"
+putquick "MODE $botnick :$black(xmod)"
+blacktools:tell:prv $nick $host $hand login.1 $black(chanserv)
+}
+}
+
+h {
+if {[matchattr $hand nm|MSOAV $chan]} {
+set chan1 "$chan"
+set command [lindex [split $arg] 2]
+h:process $nick $host $hand $chan $chan1 $command
+}
+}
+
+secure {
+if {[matchattr $hand nm|M $chan]} {
+set what [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[#&]} $what] && [matchattr $hand nm|- $chan]} {
+set chan "$what"
+set what [lindex [split $arg] 3]
+}
+secure:process $nick $host $hand $chan $chan1 $what $type
+}
+}
+
+ignore {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+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 {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
+return 0
+}
+ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason
+}
+}
+
+
+
+idle {
+if {[matchattr $hand nm|M $chan]} {
+set char(p) [lindex $black(cmdchar) 0]
+set flag "-|f"
+set type1 1
+set chan1 "$chan"
+set why [lindex [split $arg] 2]
+set type [lindex [split $arg] 3]
+set user [lindex [split $arg] 3]
+set host [lindex [split $arg] 4]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+set type [lindex [split $arg] 4]
+set user [lindex [split $arg] 4]
+set host [lindex [split $arg] 5]
+}
+antidle:process $why $type $type1 $user $host $nick $hand $chan $chan1
+}
+}
+
+version {
+if {[matchattr $hand nm|MASOV $chan]} {
+set chan1 "$chan"
+version:process $nick $host $hand $chan $chan1
+}
+}
+
+cc {
+if {[matchattr $hand nm|MASO $chan]} {
+set ::chan $chan
+set chan1 "$chan"
+set c [lindex [split $arg] 2]
+if {$c == ""} { blacktools:tell $nick $host $hand $chan $chan1 cc.2 none
+return 0
+}
+if {![regexp {^[\\+!#&]} $c]} {
+set c #$c
+ } 
+
+putquick "MODE $c"
+bind raw - 329 createdpublic
+bind raw - 403 nocreatedpublic
+}
+}
+
+activ {
+if {[matchattr $hand nm|MASOV $chan]} {
+set type 1
+set chan1 "$chan"
+set user [lindex [split $arg] 2]
+if {[regexp {^[#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+activ:process $nick $host $hand $chan $chan1 $user $type
+}
+}
+
+delmyhost {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set why [lindex [split $arg] 2]
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 delmyhost.1 none
+return 0
+}
+delmyhost:process $nick $host $hand $chan $chan1 $why
+}
+}
+
+addmyhost {
+if {[matchattr $hand nm|- $chan]} {
+set why [lindex [split $arg] 2]
+set chan1 "$chan"
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 addmyhost.2 none
+return 0
+}
+addmyhost:process $nick $host $hand $chan $chan1 $why
+}
+}
+
+
+leave {
+if {[matchattr $hand nm|M $chan]} {
+set dir "logs/leave($chan).txt"
+set type 1
+set chan1 "$chan"
+set who [lindex [split $arg] 2]
+set leave [join [lrange [split $arg] 3 end]]
+set number [lindex [split $arg] 3]
+if {[regexp {^[\\+!#&]} $who] && [matchattr $hand nm|- $chan]} {
+set chan "$who"
+set who [lindex [split $arg] 3]
+set leave [join [lrange [split $arg] 4 end]]
+set number [lindex [split $arg] 4]
+}
+leave:process $who $leave $number $type $nick $host $hand $chan $chan1
+}
+}
+
+
+greet {
+if {[matchattr $hand nm|M $chan]} {
+set who [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set greet [join [lrange [split $arg] 3 end]]
+set number [lindex [split $arg] 3]
+if {[regexp {^[\\+!#&]} $who] && [matchattr $hand nm|- $chan]} {
+set chan "$who"
+set who [lindex [split $arg] 3]
+set greet [join [lrange [split $arg] 4 end]]
+set number [lindex [split $arg] 4]
+}
+greet:process $who $greet $number $type $nick $host $hand $chan $chan1
+}
+}
+
+chat {
+if {[matchattr $hand nm|- $chan]} {
+*ctcp:CHAT $nick $host $hand $botnick CHAT $arg
+blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
+} 
+}
+
+seen {
+if {[matchattr $hand -|- $chan]} {
+if {![channel get $chan seen]} {
+return 0
+}
+set type 1
+set wseen [lindex $arg 2]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $wseen] && [matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set chan "$wseen"
+set wseen [lindex $arg 3]
+}
+seen:process $nick $host $hand $chan $chan1 $wseen $type
+}
+}
+
+topic {
+if {[matchattr $hand nm|M $chan]} {
+set nop [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set tp [join [lrange [split $arg] 3 end]]
+set number [lindex [split $arg] 3]
+if {[regexp {^[\\+!#&]} $nop] && [matchattr $hand nm|- $chan]} {
+set chan "$nop"
+set nop [lindex [split $arg] 3]
+set tp [join [lrange [split $arg] 4 end]]
+set number [lindex [split $arg] 4]
+}
+topic:process $nick $host $hand $chan $chan1 $nop $tp $number $type
+}
+}
+
+limit {
+if {[matchattr $hand nm|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 nm|- $chan]} {
+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
+}
+}
+
+anunt {
+if {[matchattr $hand nm|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 nm|- $chan]} {
+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
+}
+}
+
+bt {
+if {[matchattr $hand nm|- $chan]} {
+set who [lindex [split $arg] 2]
+set chan1 "$chan"
+set message [join [lrange [split $arg] 3 end]]
+set number [lindex [split $arg] 3]
+if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.2 none
+return 0
+}
+broadcast:process $nick $host $hand $chan $chan1 $who $message $number
+}
+}
+
+badchan {
+if {[matchattr $hand nm|M $chan]} {
+set why [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set bdchan [join [lindex [split $arg] 3]]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+set bdchan [join [lindex [split $arg] 4]]
+}
+badchan:process $nick $host $hand $chan $chan1 $why $bdchan $type
+}
+}
+
+count {
+if {[matchattr $hand nm|M $chan]} {
+set why [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+}
+count:process $nick $host $hand $chan $chan1 $why $type
+}
+}
+
+delvoice {
+if {[matchattr $hand nm|M $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+delvoice:process $nick $host $hand $chan $chan1 $user $type
+}
+
+}
+
+delop {
+if {[matchattr $hand nm|M $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+delop:process $nick $host $hand $chan $chan1 $user $type
+}
+
+}
+
+addvoice {
+if {[matchattr $hand nm|M $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+addvoice:process $nick $host $hand $chan $chan1 $user $type
+}
+}
+
+addop {
+if {[matchattr $hand nm|M $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+addop:process $nick $host $hand $chan $chan1 $user $type
+}
+}
+
+
+addbot {
+if {[matchattr $hand nm|- $chan]} {
+set why [lindex [split $arg] 2]
+set host [lindex [split $arg] 3]
+set chan1 "$chan"
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 addbot.2 none
+return 0
+}
+addbot:process $nick $host $hand $chan $chan1 $why $host
+}
+}
+
+whois {
+if {[matchattr $hand nm|MAOS $chan]} {
+set chan1 "$chan"
+set who [lindex [split $arg] 2]
+if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 whois.2 none
+return 0
+}
+whois:process $nick $host $hand $chan $chan1 $who
+}
+}
+
+vers {
+if {[matchattr $hand nm|MAOS $chan]} {
+set chan1 "$chan"
+set why [lindex [split $arg] 2]
+if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 vers.2 none
+return 0
+}
+vers:process $nick $host $hand $chan $chan1 $why
+}
+}
+
+time {
+if {[matchattr $hand nm|MAOSV $chan]} {
+set chan1 "$chan"
+set time [ctime [unixtime]]
+blacktools:tell $nick $host $hand $chan $chan1 time.1 $time
+}
+}
+
+ping {
+if {[matchattr $hand nm|MAOSV $chan]} {
+putquick "PRIVMSG $nick :\001PING [expr {abs([clock clicks -milliseconds])}]\001"
+return 0
+}
+}
+
+us {
+if {[matchattr $hand nm|MA $chan]} {
+set type 1
+set chan1 "$chan"
+set users [lindex [split $arg] 2]
+if {[regexp {^[#&]} $users] && [matchattr $hand nm|- $chan]} {
+set chan "$users"
+set users [lindex [split $arg] 3]
+}
+us:process $nick $host $hand $chan $chan1 $users $type
+}
+} 
+
+s {
+if {[matchattr $hand nm|MA $chan]} {
+set type 1
+set chan1 "$chan"
+set users [lindex [split $arg] 2]
+if {[regexp {^[#&]} $users] && [matchattr $hand nm|- $chan]} {
+set chan "$users"
+set users [lindex [split $arg] 3]
+}
+s:process $nick $host $hand $chan $chan1 $users $type
+}
+}
+
+info {
+if {[matchattr $hand nm|MASOV $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+info:process $nick $host $hand $chan $chan1 $user $type
+}
+}
+
+channels {
+if {[matchattr $hand nm|MASOV $chan]} {
+set chan1 "$chan"
+channels:process $nick $host $hand $chan $chan1
+}
+}
+
+
+userlist {
+if {[matchattr $hand nm|MASOV $chan]} {
+set level [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[#&]} $level] && [matchattr $hand nm|- $chan]} {
+set chan "$level"
+set level [lindex [split $arg] 3]
+} 
+userlist:execute $hand $host $level $chan $chan1 $nick $type
+}
+}
+
+chuser {
+if {[matchattr $hand nm|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 nm|M $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set hosts [lrange [split $arg] 3 end]
+delhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+}
+}
+
+botidle {
+if {[matchattr $hand nm|M $chan]} {
+set chan1 "$chan"
+set what [lindex [split $arg] 2]
+if {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 antibotidle.2 none
+return 0
+}
+botidle:process $nick $host $hand $chan $chan1 $what
+}
+}
+
+addhost {
+if {[matchattr $hand nm|M $chan]} {
+set type 1
+set chan1 "$chan"
+set user [lindex [split $arg] 2]
+set hosts [lrange [split $arg] 3 end]
+addhost:process $nick $host $hand $chan $chan1 $user $hosts $type
+}
+}
+
+del {
+if {[matchattr $hand nm|- $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 nm|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 nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 3 end]
+}
+delacc:process $nick $host $hand $chan $chan1 $args $type
+}
+}
+
+adduser {
+if {[matchattr $hand nm|MA $chan]} {
+set chan1 "$chan"
+set level [lindex [split $arg] 2]
+set args [lrange [split $arg] 3 end]
+set c [lindex [split $arg] 3]
+set type 1
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 4 end]
+}
+adduser:process $nick $host $hand $chan $chan1 $args $level $type
+}
+}
+
+add {
+if {[matchattr $hand nm|MA $chan]} {
+set level [lindex [split $arg] 2]
+set time [ctime [unixtime]]
+set type 1
+set chan1 "$chan"
+set args [lrange [split $arg] 3 end]
+set c [lindex [split $arg] 3]
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set args [lrange [split $arg] 4 end]
+}
+if {[matchattr $hand -|q $chan]} { 
+blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+add:process $args $time $level $hand $host $chan $chan1 $nick $type
+}
+}
+
+unsuspend {
+if {[matchattr $hand nm|- $chan]} {
+set chans [lindex [split $arg] 2]
+set chan1 "$chan"
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 unsuspend.5 none
+return 0 
+}
+
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+ }
+ 
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 unsuspend.2 $chans
+return 0
+}
+
+if {![channel get $chans inactive]} {
+blacktools:tell $nick $host $hand $chan $chan1 unsuspend.3 $chans
+return 0
+}
+channel set $chans -inactive
+blacktools:tell $nick $host $hand $chan $chan1 unsuspend.4 $chans
+}
+}
+
+
+
+suspend {
+if {[matchattr $hand nm|- $chan]} {
+set chans [lindex [split $arg] 2]
+set chan1 "$chan"
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 suspend.5 none
+return 0 
+}
+
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+ }
+
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 suspend.2 $chans
+return 0
+}
+
+if { [channel get $chans inactive]} {
+blacktools:tell $nick $host $hand $chan $chan1 suspend.3 $chans 
+return 0
+}
+channel set $chans +inactive
+blacktools:tell $nick $host $hand $chan $chan1 suspend.4 $chans 
+}
+}
+
+
+delchan {
+if {[matchattr $hand nm|- $chan]} {
+set chans [lindex [split $arg] 2]
+set chan1 "$chan"
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 delchan.4 none
+return 0 
+}
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none 
+return 0
+ } 
+
+if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 delchan.2 $chans
+return 0
+}
+channel remove $chans
+delchan:stats $chans $hand $host
+blacktools:tell $nick $host $hand $chan $chan1 delchan.3 $chans
+}
+}
+
+addchan {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set chans [lindex [split $arg] 2]
+if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 addchan.4 none
+return 0 
+}
+
+if {![regexp {^[\\+!#&]} $chans]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return 0
+ } 
+
+if {[validchan $chans]} {
+blacktools:tell $nick $host $hand $chan $chan1 addchan.2 $chans
+return 0
+} else {
+channel add $chans
+addchan:stats $chans $hand $host
+blacktools:tell $nick $host $hand $chan $chan1 addchan.3 $chans
+}
+}
+}
+
+die {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+blacktools:tell $nick $host $hand $chan $chan1 die.1 none
+utimer 3 [list die "byeeee"]
+}
+}
+
+jump {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set serv [lindex [split $arg] 2]
+blacktools:tell $nick $host $hand $chan $chan1 jump.1 none
+utimer 3 [list jump $serv]
+}
+}
+
+
+save {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+blacktools:tell $nick $host $hand $chan $chan1 save.1 none
+ save
+}
+}
+
+restart {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+blacktools:tell $nick $host $hand $chan $chan1 restart.1 none
+ utimer 3 [list restart]
+}
+}
+
+rehash {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+blacktools:tell $nick $host $hand $chan $chan1 rehash.1 none
+ rehash
+}
+}
+
+nick {
+if {[matchattr $hand nm|- $chan]} {
+set who "$nick"
+set newnick [lindex [split $arg] 2]
+nick:process $who $newnick $host $hand $chan
+}
+}
+
+
+
+msg {
+if {[matchattr $hand nm|- $chan]} {
+set nicks [lindex [split $arg] 2]
+set chan1 "$chan"
+set msg [join [lrange [split $arg] 3 end]]
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$nicks == ""} {blacktools:tell $nick $host $hand $chan $chan1 msg.2 none
+return 0
+}
+if {[isbotnick $nicks]} { 
+return 0
+ }
+putquick "PRIVMSG $nicks :$msg"
+}
+}
+
+
+silence {
+if {[matchattr $hand nm|- $chan]} {
+set value [lindex [split $arg] 2]
+set chan1 "$chan"
+if {$value == ""} { blacktools:tell $nick $host $hand $chan $chan1 silence.2 none
+return 0
+}
+silence:process $nick $host $hand $chan $chan1 $value
+}
+}
+
+set {
+if {[matchattr $hand nm|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 nm|- $chan]} {
+set chan "$flags"
+set flags [lindex [split $arg] 3]
+set type [join [lrange [split $arg] 4 end]]
+}
+set:process $nick $host $hand $chan $chan1 $flags $type $type1
+}
+}
+
+mode {
+if {[matchattr $hand nm|OSMA $chan]} {
+set modes [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[#&]} $modes] && [matchattr $hand nm|- $chan]} {
+set chan "$modes"
+set modes [lindex [split $arg] 3]
+}
+mode:process $nick $host $hand $chan $chan1 $modes $type
+}
+}
+
+away {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set aw [join [lrange [split $arg] 2 end]]
+if {$aw == "" } {blacktools:tell $nick $host $hand $chan $chan1 away.2 none
+return 0
+}
+away:process $nick $host $hand $chan $chan1 $aw
+}
+}
+
+cycle {
+if {[matchattr $hand nm|OSMA $chan]} {
+set reason [join [lrange [split $arg] 2 end]]
+set c [lindex [split $arg] 2]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set reason [join [lrange [split $arg] 3 end]]
+}
+cycle:process $nick $host $hand $chan $chan1 $reason
+}
+}
+
+
+purge {
+if {[matchattr $hand nm|M $chan]} {
+set reason [join [lrange [split $arg] 2 end]]
+set chan1 "$chan"
+if {$reason == ""} {
+blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
+return 0
+}
+purge:process $nick $host $hand $chan $chan1 $reason
+}
+}
+
+
+check {
+if {[matchattr $hand nm|OSMA $chan]} {
+set chan1 "$chan"
+set checked [lindex [split $arg] 2]
+if {$checked == ""} { blacktools:tell $nick $host $hand $chan $chan1 check.2 none
+return 0
+}
+check:process $nick $host $hand $chan $chan1 $checked
+}
+}
+
+broadcast {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set text [join [lrange [split $arg] 2 end]]
+if {$text == ""} { 
+blacktools:tell $nick $host $hand $chan $chan1 broadcast.2 none
+return 0
+}
+broadcast:cmd:process $nick $host $hand $chan $chan1 $text
+}
+}
+
+act {
+if {[matchattr $hand nm|SMA $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 nm|- $chan]} {
+set chan "$c"
+set text [join [lrange [split $arg] 3 end]]
+}
+act:process $nick $host $hand $chan $chan1 $text $type
+}
+}
+
+
+say {
+if {[matchattr $hand nm|SMA $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 nm|- $chan]} {
+set chan "$c"
+set text [join [lrange [split $arg] 3 end]]
+}
+say:process $nick $host $hand $chan $chan1 $text $type
+}
+}
+
+v {
+if {[matchattr $hand nm|VOSMA $chan]} {
+set voicex [lrange $arg 2 end]
+set c [lindex [split $arg] 2]
+set nick [split $nick]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set voicex [lrange $arg 3 end]
+}
+v:process $nick $host $hand $chan $chan1 $voicex
+}
+}
+
+o {
+if {[matchattr $hand nm|OSMA $chan]} {
+set opex [lrange $arg 2 end]
+set c [lindex [split $arg] 2]
+set nick [split $nick]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set opex [lrange $arg 3 end]
+}
+o:process $nick $host $hand $chan $chan1 $opex
+}
+}
+
+uptime {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+set up [duration [expr [unixtime] - $uptime]]
+set on [duration [expr [unixtime] - ${server-online}]]
+blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
+blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
+blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
+}
+}
+
+status {
+if {[matchattr $hand nm|- $chan]} {
+set chan1 "$chan"
+regsub -all " " [channels] ", " chans
+catch {exec uptime} shelluptime
+set up [duration [expr [unixtime] - $uptime]]
+set on [duration [expr [unixtime] - ${server-online}]]
+blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
+blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
+blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
+blacktools:tell $nick $host $hand $chan $chan1 status.4 $chans
+blacktools:tell $nick $host $hand $chan $chan1 status.5 $shelluptime
+}
+}
+
+t {
+if {[matchattr $hand nm|VOSMA $chan]} {
+set topics [join [lrange [split $arg] 2 end]]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $topics] && [matchattr $hand nm|- $chan]} {
+set chan "$topics"
+set topics [join [lrange [split $arg] 3 end]]
+}
+t:process $nick $host $hand $chan $chan1 $topics $type
+}
+}
+
+d {
+if {[matchattr $hand nm|SMA $chan]} {
+set days [lindex [split $arg] 2]
+set dnick [lindex [split $arg] 3]
+set type 1
+set mask [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+set handle [nick2hand $dnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $days] && [matchattr $hand nm|- $chan]} {
+set chan "$days"
+set days [lindex [split $arg] 3]
+set mask [lindex [split $arg] 4]
+set dnick [lindex [split $arg] 4]
+set reason [join [lrange [split $arg] 5 end]]
+if {![regexp {^[0-9]} $days]} {
+set days 1
+set mask [lindex [split $arg] 3]
+set dnick [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+} 
+}
+if {![regexp {^[0-9]} $days]} {
+set days 1
+set mask [lindex [split $arg] 2]
+set dnick [lindex [split $arg] 2]
+set reason [join [lrange [split $arg] 3 end]]
+}
+d:process $dnick $mask $days $reason $nick $hand $host $chan $chan1 $type
+}
+}
+
+sb {
+if {[matchattr $hand nm|VOSMA $chan]} {
+set bhost [string tolower [lindex [split $arg] 2]]
+set what [lindex [split $arg] 3]
+set type 1
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bhost] && [matchattr $hand nm|- $chan]} {
+set chan "$bhost"
+set bhost [string tolower [lindex [split $arg] 3]]
+set what [lindex [split $arg] 4]
+}
+sb:process $bhost $what $nick $hand $host $chan $chan1 $type
+}
+}
+
+ub {
+if {[matchattr $hand nm|OSMA $chan]} {
+set ban [lindex [split $arg] 2]
+set why [lindex [split $arg] 3]
+set type 1
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $ban] && [matchattr $hand nm|- $chan]} {
+set chan "$ban"
+set ban [lindex [split $arg] 3]
+}
+ub:process $ban $why $nick $hand $host $chan $chan1 $type
+}
+
+}
+
+bw {
+if {[matchattr $hand nm|OSMA $chan]} {
+set abuser [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set handle [nick2hand $abuser]
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $abuser] && [matchattr $hand nm|- $chan]} {
+set chan "$abuser"
+set abuser [lindex [split $arg] 3]
+set mask [lindex [split $arg] 3]
+}
+bw:process $abuser $mask $nick $hand $host $chan $chan1 $type
+}
+}
+
+stick {
+if {[matchattr $hand nm|SMA $chan]} {
+set snick [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type 1
+set time [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+set handle [nick2hand $snick]
+set list [userlist $black(exceptflags) $chan]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $snick] && [matchattr $hand nm|- $chan]} {
+set chan "$snick"
+set time [lindex [split $arg] 4]
+set mask [lindex [split $arg] 3]
+set snick [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 5 end]]
+if {![regexp {^[0-9]} $time]} {
+set time "$black(dfstickbantime)"
+set reason [join [lrange [split $arg] 4 end]]
+}
+}
+if {![regexp {^[0-9]} $time]} {
+set time "$black(dfstickbantime)"
+set reason [join [lrange [split $arg] 3 end]]
+}
+stick:process $snick $mask $time $reason $nick $hand $host $chan $chan1 $type
+}
+}
+
+
+k {
+if {[matchattr $hand nm|VOSMA $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"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $knick] && [matchattr $hand nm|- $chan]} {
+set chan "$knick"
+set knick [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+}
+k:process $knick $nick $hand $host $reason $chan $chan1 $type
+}
+}
+
+spam {
+if {[matchattr $hand nm|OSMA $chan]} {
+set spammer [lindex [split $arg] 2]
+set type 1
+set mask [lindex [split $arg] 2]
+set handle [nick2hand $spammer]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $spammer] && [matchattr $hand nm|- $chan]} {
+set chan "$spammer"
+set spammer [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+}
+spam:process $spammer $mask $nick $hand $host $chan $chan1 $type
+}
+}
+
+w {
+if {[matchattr $hand nm|OVSMA $chan]} {
+set wnick [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set handle [nick2hand $wnick]
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $wnick] && [matchattr $hand nm|- $chan]} {
+set chan "$wnick"
+set wnick [lindex [split $arg] 3]
+}
+w:process $wnick $nick $hand $host $chan $chan1 $type
+}
+}
+
+black {
+if {[matchattr $hand nm|SMA $chan]} {
+set blnick [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type 1
+set reason [join [lrange [split $arg] 3 end]]
+set handle [nick2hand $blnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $blnick] && [matchattr $hand nm|- $chan]} {
+set chan "$blnick"
+set blnick [lindex [split $arg] 3]
+set mask [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+}
+black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type
+}
+}
+
+
+bl {
+if {[matchattr $hand nm|SMA $chan]} {
+set blnick [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set reason [join [lrange [split $arg] 3 end]]
+set handle [nick2hand $blnick]
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $blnick] && [matchattr $hand nm|- $chan]} {
+set chan "$blnick"
+set blnick [lindex [split $arg] 3]
+set mask [lindex [split $arg] 3]
+set reason [join [lrange [split $arg] 4 end]]
+}
+black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type
+}
+}
+
+
+
+id {
+if {[matchattr $hand nm|OSMA $chan]} {
+set idnick [lindex [split $arg] 2]
+set handle [nick2hand $idnick]
+set type 1
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $idnick] && [matchattr $hand nm|- $chan]} {
+set chan "$idnick"
+set idnick [lindex [split $arg] 3]
+}
+id:process $idnick $nick $hand $host $chan $chan1 $type
+}
+}
+
+bot {
+if {[matchattr $hand nm|OSMA $chan]} {
+set bot [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bot] && [matchattr $hand nm|- $chan]} {
+set chan "$bot"
+set bot [lindex [split $arg] 3]
+set mask [lindex [split $arg] 3]
+}
+bot:process $bot $mask $nick $hand $host $chan $chan1 $type
+}
+}
+
+dr {
+if {[matchattr $hand nm|OSMA $chan]} {
+set drone [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set type "1"
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $drone] && [matchattr $hand nm|- $chan]} {
+set chan "$drone"
+set drone [lindex [split $arg] 3]
+set mask [lindex [split $arg] 3]
+}
+dr:process $drone $mask $nick $hand $host $chan $chan1 $type
+}
+}
+
+b {
+if {[matchattr $hand nm|OSMA $chan]} {
+set bnick [lindex [split $arg] 2]
+set mask [lindex [split $arg] 2]
+set time [lindex [split $arg] 3]
+set type 1
+set chan1 "$chan"
+set type1 [lindex [split $arg] 3]
+set type2 [lindex [split $arg] 4]
+set reason [join [lrange [split $arg] 4 end]] 
+set handle [nick2hand $bnick]
+if {[string match -nocase "global" $type1] || [string match -nocase "global" $type2]  && [matchattr $hand nm|- $chan]} {
+if {[string match -nocase $type1 "global"]} {
+set reason [join [lrange [split $arg] 4 end]]
+}
+if {[string match -nocase $type2 "global"]} {
+set reason [join [lrange [split $arg] 5 end]]
+}
+set list [userlist nm|-]
+foreach user $list {
+ set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match $mask $host]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+}
+}
+if {[matchattr $handle nm|- $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+ return 0
+}
+
+if {![regexp {^[0-9]} $time]} {
+set reason [join [lrange [split $arg] 4 end]]
+set time "$black(btime)"
+}
+if {$reason == ""} {set reason1 "(GLOBAL) $black(dfreason)"
+ } else { set reason1 "(GLOBAL) $reason" }
+
+if {[channel get $chan showhandle]} {
+set reason "($hand) $reason1"
+} else { set reason "$reason1" 
+}
+
+if {[isbotnick $bnick]} {
+return 0
+}
+if {![botisop $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+return 0
+}
+if {$mask == "*!*@*"} {
+ return 0
+}
+if {[onchan $bnick $chan]} {
+set mask *!*@[lindex [split [getchanhost $bnick $chan] "@"] 1] 
+}
+newban $mask $hand $reason $time
+if {$time == "0"} { set reply "Permanent" } else { set reply "$time" }
+blacktools:tell $nick $host $hand $chan $chan1 b.8 "$mask $reply"
+return 0
+}
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bnick] && [matchattr $hand nm|- $chan]} {
+set chan "$bnick"
+set bnick [lindex [split $arg] 3]
+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]]
+set time "$black(btime)"
+}
+}
+if {![regexp {^[0-9]} $time]} {
+set reason [join [lrange [split $arg] 3 end]]
+set time "$black(btime)"
+}
+b:local $bnick $mask $time $nick $reason $hand $host $chan $chan1 $type
+}
+}
+
+
+n {
+if {[matchattr $hand nm|OSMA $chan]} {
+set bnick [lindex [split $arg] 2]
+set type 1
+set handle [nick2hand $bnick]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $bnick] && [matchattr $hand nm|- $chan]} {
+set chan "$bnick"
+set bnick [lindex [split $arg] 3]
+}
+n:process $bnick $nick $hand $host $chan $chan1 $type
+}
+}
+
+gag {
+if {[matchattr $hand nm|OSMA $chan]} {
+set gagger [lindex [split $arg] 2]
+set type 1
+set handle [nick2hand $gagger]
+set chan1 "$chan"
+foreach c [channels] {
+set backchan [channel get $c backchan]
+if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
+set chan "$c"
+}
+}
+if {[regexp {^[\\+!#&]} $gagger] && [matchattr $hand nm|- $chan]} {
+set chan "$gagger"
+set gagger [lindex [split $arg] 3]
+}
+gag:process $gagger $nick $hand $host $chan $chan1 $type
+}
+}
+
+l {
+if {[matchattr $hand nm|OSMA $chan]} {
+set times [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $times] && [matchattr $hand nm|- $chan]} {
+set chan "$times"
+set times [lindex [split $arg] 3]
+}
+l:process $nick $host $hand $chan $chan1 $times $type
+}
+}
+
+ul {
+if {[matchattr $hand nm|OSMA $chan]} {
+set c [lindex [split $arg] 0]
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+ul:process $nick $host $hand $chan $chan1
+}
+}
+
+show {
+if {[matchattr $hand nm|OSMA $chan]} {
+set wich [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[#&]} $wich] && [matchattr $hand nm|- $chan]} {
+set chan "$wich"
+set wich [lindex [split $arg] 3]
+}
+show:process $nick $host $hand $chan $chan1 $wich $type
+}
+}
+
+reset {
+if {[matchattr $hand nm|M $chan]} {
+set dece [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[#&]} $dece] && [matchattr $hand nm|- $chan]} {
+set chan "$dece"
+set dece [lindex [split $arg] 3]
+}
+reset:process $nick $host $hand $chan $chan1 $dece $type
+}
+}
+
+clonescan {
+if {[matchattr $hand nm|M $chan]} {
+set c [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+scanner:process $nick $host $hand $chan $chan1
+}
+}
+
+top {
+if {[matchattr $hand nm|AOSM $chan]} {
+set cmd [lindex [split $arg] 2]
+set del [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[#&]} $cmd] && [matchattr $hand nm|- $chan]} {
+set chan "$cmd"
+set cmd [lindex [split $arg] 3]
+set del [lindex [split $arg] 3]
+}
+top:process $nick $host $hand $chan $chan1 $cmd $type $del
+}
+}
+
+banlist {
+if {[matchattr $hand nm|AOSM $chan]} {
+set user [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+if {[regexp {^[\\+!#&]} $user] && [matchattr $hand nm|- $chan]} {
+set chan "$user"
+set user [lindex [split $arg] 3]
+}
+banlist:process $nick $host $hand $chan $chan1 $user $type
+}
+}
+
+stats {
+if {[matchattr $hand nm|AOSM $chan]} {
+set chan1 "$chan"
+set c [lindex [split $arg] 2]
+if {[regexp {^[#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+}
+stats:process $nick $host $hand $chan $chan1
+}
+}
+
+myset {
+if {[matchattr $hand nm|VAOSM $chan]} {
+set chan1 "$chan"
+set flags [lindex [split $arg] 2]
+set type [lindex [split $arg] 3]
+if {$type == ""} {
+blacktools:tell $nick $host $hand $chan $chan1 myset.4 none
+return 0
+}
+myset:process $nick $host $hand $chan $chan1 $flags $type
+}
+}
+
+i {
+if {[matchattr $hand nm|VAOSM $chan]} {
+set type 1
+set chan1 "$chan"
+set inick [lrange [split $arg] 2 end]
+set c [lindex [split $arg] 2]
+if {[regexp {^[\\+!#&]} $c] && [matchattr $hand nm|- $chan]} {
+set chan "$c"
+set inick [join [lrange [split $arg] 3 end]]
+}
+i:process $nick $host $hand $chan $chan1 $inick $type
+}
+}
+
+addinfo {
+if {[matchattr $hand nm|VAOSM $chan]} {
+set info [join [lrange [split $arg] 2 end]]
+set chan1 "$chan"
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return 0
+}
+if {$info == ""} { 
+blacktools:tell $nick $host $hand $chan $chan1 addinfo.2 none
+return 0
+}
+addinfo:process $nick $host $hand $chan $chan1 $info
+}
+}
+
+badword {
+if {[matchattr $hand nm|M $chan]} {
+set why [lindex [split $arg] 2]
+set type 1
+set chan1 "$chan"
+set bdword [lrange [split $arg] 3 end]
+set bdnumber [lindex [split $arg] 3]
+if {[regexp {^[\\+!#&]} $why] && [matchattr $hand nm|- $chan]} {
+set chan "$why"
+set why [lindex [split $arg] 3]
+set bdnumber [lindex [split $arg] 4]
+set bdword [lrange [split $arg] 4 end]
+}
+antibadword:command:process $nick $host $hand $chan $chan1 $why $bdword $bdnumber $type
+}
+}
+
+
+
+
+}
+}
+}
+
+
+putlog "$black(name) $black(vers) by $black(author) Loaded -> BLaCkShaDoW ProductionS ®"

+ 13 - 0
BlackTools2.3/README.txt

@@ -0,0 +1,13 @@
+EN : Just put the BlackTools.tcl and the lang folder in the scripts directory
+EN : Put in the eggdrop`s config file on the bottom " source scripts/BlackTools.tcl "
+EN : And rehash/restart your eggdrop.
+
+
+RO : Pune BlackTOols.tcl si folderul lang in directorul scripts 
+RO : Pune in config-ul eggdrop-ului la sfarsit " source scripts/BlackTools.tcl "
+RO : Si da rehash/restart la eggdrop
+
+
+Have Fun !
+
+			BLaCkShaDoW ProductionS