Florian 6 ani în urmă
părinte
comite
f548c1d8c8
72 a modificat fișierele cu 45986 adăugiri și 0 ștergeri
  1. 1745 0
      BlackTools.tcl
  2. 180 0
      BlackTools/BT.Binds.tcl
  3. 7247 0
      BlackTools/BT.Core.tcl
  4. 78 0
      BlackTools/BT.Loader.tcl
  5. 507 0
      BlackTools/BT.Timers.tcl
  6. 1976 0
      BlackTools/Commands/BT.AddCmds.tcl
  7. 1397 0
      BlackTools/Commands/BT.BanCmds.tcl
  8. 2269 0
      BlackTools/Commands/BT.ChanCmds.tcl
  9. 2113 0
      BlackTools/Commands/BT.ForCmds.tcl
  10. 1239 0
      BlackTools/Commands/BT.H.tcl
  11. 3158 0
      BlackTools/Commands/BT.LocalCmds.tcl
  12. 2570 0
      BlackTools/Commands/BT.Manual.tcl
  13. 2111 0
      BlackTools/Commands/BT.MeCmds.tcl
  14. 497 0
      BlackTools/Commands/BT.OwnerCmds.tcl
  15. 2326 0
      BlackTools/Commands/BT.PrvCmds.tcl
  16. 63 0
      BlackTools/Modules/BT.AntiTake.tcl
  17. 276 0
      BlackTools/Modules/BT.Anunt.tcl
  18. 314 0
      BlackTools/Modules/BT.AutoBroadcast.tcl
  19. 643 0
      BlackTools/Modules/BT.BadChan.tcl
  20. 176 0
      BlackTools/Modules/BT.ChanLink.tcl
  21. 131 0
      BlackTools/Modules/BT.CloneScan.tcl
  22. 398 0
      BlackTools/Modules/BT.Egg.tcl
  23. 323 0
      BlackTools/Modules/BT.Gag.tcl
  24. 119 0
      BlackTools/Modules/BT.GreetLeave.tcl
  25. 221 0
      BlackTools/Modules/BT.GuestNick.tcl
  26. 309 0
      BlackTools/Modules/BT.Idle.tcl
  27. 154 0
      BlackTools/Modules/BT.Limit.tcl
  28. 452 0
      BlackTools/Modules/BT.Next.tcl
  29. 503 0
      BlackTools/Modules/BT.Notes.tcl
  30. 164 0
      BlackTools/Modules/BT.Private.tcl
  31. 415 0
      BlackTools/Modules/BT.Quote.tcl
  32. 282 0
      BlackTools/Modules/BT.SecureMode.tcl
  33. 769 0
      BlackTools/Modules/BT.Seen.tcl
  34. 307 0
      BlackTools/Modules/BT.TCL.tcl
  35. 136 0
      BlackTools/Modules/BT.Timer.tcl
  36. 667 0
      BlackTools/Modules/BT.TopWords.tcl
  37. 91 0
      BlackTools/Modules/BT.Topic.tcl
  38. 149 0
      BlackTools/Modules/BT.VoiceMe.tcl
  39. 216 0
      BlackTools/Modules/BT.VoiceOnMsg.tcl
  40. 155 0
      BlackTools/Protections/BT.antibadquitpart.tcl
  41. 108 0
      BlackTools/Protections/BT.antibadtext.tcl
  42. 71 0
      BlackTools/Protections/BT.antibadword.tcl
  43. 57 0
      BlackTools/Protections/BT.antichanflood.tcl
  44. 35 0
      BlackTools/Protections/BT.antictcp.tcl
  45. 121 0
      BlackTools/Protections/BT.antijoinflood.tcl
  46. 37 0
      BlackTools/Protections/BT.antilongtext.tcl
  47. 35 0
      BlackTools/Protections/BT.antinotice.tcl
  48. 95 0
      BlackTools/Protections/BT.antipub.tcl
  49. 71 0
      BlackTools/Protections/BT.antirepeat.tcl
  50. 170 0
      BlackTools/Protections/BT.antispam.tcl
  51. 68 0
      BlackTools/Protections/BT.badhost.tcl
  52. 67 0
      BlackTools/Protections/BT.badident.tcl
  53. 164 0
      BlackTools/Protections/BT.badnick.tcl
  54. 84 0
      BlackTools/Protections/BT.badrealname.tcl
  55. 91 0
      BlackTools/Protections/BT.inviteban.tcl
  56. 64 0
      BlackTools/Protections/BT.nickflood.tcl
  57. 50 0
      BlackTools/Protections/BT.repetitivechars.tcl
  58. 349 0
      BlackTools/README/CHANGELOG.txt
  59. 66 0
      BlackTools/README/FAQ.txt
  60. 45 0
      BlackTools/README/INSTALL.txt
  61. 114 0
      BlackTools/README/README.txt
  62. 1346 0
      BlackTools/lang/BT.en.lang.tcl
  63. 1756 0
      BlackTools/lang/BT.man-en.lang.tcl
  64. 1757 0
      BlackTools/lang/BT.man-ro.lang.tcl
  65. 1345 0
      BlackTools/lang/BT.ro.lang.tcl
  66. 40 0
      BlackTools/lang/CumSaAdaugi.txt
  67. 40 0
      BlackTools/lang/HowToAdd.txt
  68. 54 0
      BlackTools/lang/loader.tcl
  69. 15 0
      BlackTools/temp/banner
  70. 37 0
      BlackTools/temp/motd
  71. 674 0
      LICENSE
  72. 114 0
      README.txt

+ 1745 - 0
BlackTools.tcl

@@ -0,0 +1,1745 @@
+###########################################################################
+#         _   _   _   _   _   _   _   _   _   _   _   _   _   _           #
+#        / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \          #
+#       ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )         #
+#        \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/          #
+#                                                                         #
+#                       ® BLaCkShaDoW Production ®                        #
+#                                                                         #
+#                                PRESENTS                                 #
+###########################################################################
+#									® #
+####   #        ####    #####   #   #  #####  #####    #####   #      #####
+#   #  #       #    #   #       #  #     #   #     #  #     #  #      #
+#   #  #       #    #   #       # #      #   #     #  #     #  #      #
+####   #       ######   #       ##       #   #     #  #     #  #      #####
+#   #  #       #    #   #       # #      #   #     #  #     #  #          #
+#   #  #       #    #   #       #  #     #   #     #  #     #  #          #
+####   #####   #    #   #####   #   #    #    #####    #####   #####  #####
+#									  #
+#		   			  One TCL. One smart Eggdrop.     #
+###########################################################################
+#              + Script released: 03.03.2018 09:10 AM (Romanian TimeZone) #
+#              + Script updated : 08.05.2018 22:13 PM (Romanian TimeZone) #
+###########################################################################
+#                                                                         #
+#                       #####    ######     #####                         #
+#                           #    #              #                         #
+#                           #    #              #                         #
+#                       ####     ######     #####                         #
+#                       #             #         #                         #
+#                       #             #         #                         #
+#                       #####  # ######  #  #####                         #
+#                                                                         #
+#                                                                         #
+#                   THE    NEXT    GENERATION    TCL                      #
+#                                                                         #
+#                      - #TCL-HELP @ UNDERNET -     	                  #
+#                                                                         #
+#			      Copyright 2008 - 2018 @ WwW.TCLScripts.NET  #
+#                                                                         #
+###########################################################################
+#                                                                         #
+#  BlackTools:                                                            #
+#           The Ultimate Channel Control Script that contains a lot       #
+#              of commands, modules and protections to make your          #
+#                 life easy for you and for your Eggdrop.                 #
+#									  #
+###########################################################################
+#                                                                         #
+#  Minimum requirements:                                                  #
+#                   o Eggdrop 1.8.x                                       #
+#                   o Tcl >= 8.5                                          #
+#                                                                         #
+###########################################################################
+#                                                                         #
+#  NOTE:                                                                  #
+#      Read the texts here carefully, I get many many emails asking 	  #
+#          questions which are actually answered in the manual. 	  #
+#               Dont expect me to answer these mails :P 		  #
+#									  #
+###########################################################################
+#                                                                         #
+#  Special thanks to:                                                     #
+#                   o Time2Go [ #Tcl-Help Admin ]                         #
+#		    o Florian [ florian@tclscripts.net ]                  #
+#                     without whom this script would not have gone so far.#
+# -------                                                         ------- #
+#  Thanks to the many people who have contributed over the years, in a    #
+#  variety of ways. Also to all those users who joined #TCL-HELP to report# 
+#  bugs or to share their ideas, tips and suggestions.                    #
+#                                                                         #
+###########################################################################
+#                                                                         #
+#  Official links:                                                        #
+#   Download    : http://blacktools.tclscripts.net                        #
+#   Bugs report : http://www.tclscripts.net                               #
+#   History     : http://www.tclscripts.net/release-notes                 #
+#   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script     #
+#   Online help : irc://irc.undernet.org/tcl-help                         #
+#                                                                         #
+#     paypal.me/DanielVoipan = Please consider a donation. Thanks!        #
+#                                                                         #
+###########################################################################
+#                                                                         #
+#        You want a customised TCL Script for your eggdrop?               #
+#             Easy-peasy, just tell us what you need!                     #
+# We can create almost anything in TCL based on your ideas and donations. #
+#    Email blackshadow@tclscripts.net or info@tclscripts.net with your    #
+#    request informations and we'll contact you as soon as possible.      #
+#                                                                         #
+###########################################################################
+#-------------------------- Scripts directory ----------------------------#
+###									###
+set black(dirname) "scripts"
+
+###########################################################################
+#--------------------------- Dns Host Excepts ----------------------------#
+###								        ###
+#This host excepts will not receive DNS onjoin, onban etc to improve the
+#performance of the eggdrop.
+
+set black(dns:host_excepts) {
+"*.users.undernet.org"
+"undernet.org"
+"192.168.*"
+"10.0.*"
+"10.1.*"
+"10.101.*"
+"172.29.7.*"
+}
+###########################################################################
+#------------------------ Home Chan (Optional) ---------------------------#
+# Here you set your eggdrop's homechan. If you modify here the eggdrop    #
+#will join homechan. If not leave it "#no_home_chan" or "" (empty)        #
+###									###
+set black(homechan) "#no_home_chan"
+
+###########################################################################
+#---------------------------- First Char ---------------------------------#
+###									###
+#First Char (use "none" for no chars)
+
+set black(cmdchar) "! . ` \^"
+
+###########################################################################
+#-------------------------- Default Language -----------------------------#
+###									###
+#Default language of the script ( RO / EN )
+
+set black(default_lang) "RO"
+
+###########################################################################
+#-------------------------- Default host ---------------------------------#
+###									###
+#Default hostmask for BOSS OWNER
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(hello:mask) "2"
+
+###########################################################################
+#------------------------ Default Output Method --------------------------#
+###									###
+#Default output method ( 0 - NOTICE ; 1 - CHAN ; 2 - MSG )
+
+set black(default_output) "0"
+
+###########################################################################
+#------------------------ Default output colors --------------------------#
+###									###
+#Colors list : bold, underline, red, blue, green, yellow, orange, cyan
+# grey, brown, purple, pink, black
+
+#You can choose 4 colors from the list (\002, \001, \005, \004)
+#Suggestion: red blue black red
+
+set black(default_colors) "bold underline none underline"
+
+###########################################################################
+#-------------------------- Default Away ---------------------------------#
+###									###
+#Default away (you can change'it online ofcourse.)
+
+set black(default_away) "BlackTools 2.5.3 - The Next Generation TCL - www.TCLScripts.Net"
+
+###########################################################################
+#------------------------- Default BanTime -------------------------------#
+
+#Chan bans removal (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(default:bantime) "120m"
+
+###########################################################################
+#------------------------ Channel Remove Data ----=-----------------------#
+###									###
+#Remove the BlackTools Data on channel remove ? (bans,excepts,greet..etc)
+# 1 - yes
+# 0 no
+
+set black(chanremove_all) "1"
+
+###########################################################################
+#------------------------- Anti Command flood-----------------------------#
+###									###
+#Antiflood for .h & .man commands (commands:seconds)
+
+set black(antiflood:cmd) "3:5"
+
+###########################################################################
+#------------------------ Anti User Message Flood ------------------------#
+###									###
+#Messages in seconds 
+
+set black(msg:flood) "10:20"
+
+#Ignore time (minutes) (for those with access)
+
+set black(msg:flood:ignore_access) "1"
+
+#Ignore time (minutes) (for those without access)
+
+set black(msg:flood:ignore_others) "30"
+
+###########################################################################
+#------------------------ Anti Mass Message Flood ------------------------#
+###									###
+#Number of users message in seconds
+
+set black(mass:msg:flood) "4:5"
+
+#silence time (seconds)
+
+set black(mass:msg:silence_time) "60"
+
+###########################################################################
+#-------------------------- Anti Notice Flood ----------------------------#
+###									###
+#Notices in seconds
+
+set black(notice:flood) "3:5"
+
+#Ignore time (minutes)
+
+set black(notice:flood:notc_time) "10"
+
+###########################################################################
+#--------------------------- Join Flood ----------------------------------#
+###									###
+#JoinFlood Protect (commands:seconds)
+
+set black(joinflood:protect) "4:8"
+
+###########################################################################
+#------------------------- Internal MsgFlood -----------------------------#
+###									###
+#Setup this variable to '0:0' to deactivate it. BlackTools has protection
+#against flooding
+
+set flood-msg "0:0"
+
+###########################################################################
+#---------------------------- Lines flood protect ------------------------#
+###									###
+#Number of entries per page when using - list - ( using -next for next entries)
+
+set black(modul:nr:entries) "5"
+
+###########################################################################
+#---------------------------- Internal BanTime ------------------------#
+###									###
+#Setup this variable to 0 to deactivate it. 
+#BlackTools uses his own bantime procedure.
+
+set global-ban-time 0
+
+###########################################################################
+#------------------------------ Full Banlist --------------------------#
+###									###
+#Setup here how many bans to remove if FULLBANLIST
+
+set black(fullbanlist_remove) "10"
+
+#Chanmodes to put while clearing bans
+
+set black(fullbanlist_modes) "mi"
+
+#Chanmode hold time (seconds)
+
+set black(fullbanlist_hold_mode) "35"
+
+###########################################################################
+#----------------------------- User Expire -------------------------------#
+###									###
+#Expire Time (days)
+
+set black(user_expire_time) "180"
+
+###########################################################################
+#------------------------------ AutoStop ---------------------------------#
+###									###
+#How many entries to be shown until the modules stop because of the lack of activity 
+#(joins,parts,ban,kick,quit,split,text)
+
+set black(entry:shown) "2"
+
+###########################################################################
+#-------------------------- Ban Method Memory Expire ---------------------#
+###
+#Set here after what period of time the banmethod memory expires
+
+set black(banmethod_memory_time) "60m"
+
+###########################################################################
+############################ Chanserv Login ###############################
+
+#-------------------------- Automaticaly Login ---------------------------#
+# 1 - yes ; 0 - no
+set black(autologin) "0"
+
+#---------------------------- Chanserv Name ------------------------------#
+
+set black(chanserv) "X"
+
+#---------------------------- Chanserv Host ------------------------------#
+
+set black(hostchanserv) "x@channels.undernet.org"
+
+#--------------------------- Chanserv User -------------------------------#
+
+set black(username) "Xusername"
+
+#--------------------------- Chanserv Pass -------------------------------#
+
+set black(password) "Xpassword"
+
+#----------------------------- Login Mode --------------------------------#
+
+set black(xmod) "+x"
+
+#------------------------ Chanserv Ignore Protect ------------------------#
+
+set black(chanserv:ignore_host) "*!*@undernet.org"
+
+#---------------------------- Chanserv Ban Time --------------------------#
+
+set black(chanserv:bantime) "1"
+
+#--------------------------- Chanserv Ban Level --------------------------#
+
+set black(chanserv:banlevel) "100"
+
+###########################################################################
+########################### NickServ Identify #############################
+
+#------------------------ Automaticaly identify --------------------------#
+# 1 - yes ; 0 - no
+set black(nickserv:identify) "0"
+
+#--------------------------- Nickserv Host -------------------------------#
+
+set black(nickserv:host) "NickServ@services.dal.net"
+
+#--------------------------- Nickserv Pass -------------------------------#
+
+set black(nickserv:pass) "NickServPassword"
+
+###########################################################################
+#----------------------------- Webchat Ban -------------------------------#
+#If a user has one of these hosts and receives BAN
+#the banmask will contain only the IDENT.
+
+set black(webchat_hosts) {
+"*.mibbit.com"
+"*.kiwiirc.com"
+"*.irccloud.com"
+"*!*@64.62.228.82"
+"*!*@78.129.202.38"
+"*!*@87.98.219.117"
+"*!*@107.161.19.53"
+"*!*@107.161.19.109"
+"*!*@109.169.31.4"
+"*!*@109.169.29.95"
+"*!*@192.184.8.73"
+"*!*@192.184.9.110"
+"*!*@192.184.10.9"
+"*!*@192.184.10.118"
+"*!*@195.154.53.5"
+"*!*@195.154.52.250"
+"*!*@207.192.75.252"
+"*!*@212.83.148.225"
+}
+
+###########################################################################
+#----------------------------- add command -------------------------------#
+
+#Default Hostname (%user% stands for the username added)
+#If <user> is not on chan.
+
+set black(hostadd) "*!*@%user%.users.undernet.org"
+
+#Hostmask for add <nick>
+#if <user> is on chan
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(hostdefaultadd) "2"
+
+##########################################################################
+#------------------------------ InviteBan -------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(inviteban:bantime) "3h"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(inviteban:banmask) "2"
+
+##########################################################################
+#------------------------------- Antipub --------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antipub:bantime) "2d"
+
+#Words
+
+set black(antipubword) {
+"*#*"
+ "*www.*"
+ "*http://*"
+ "*https://*"
+ "*.ro"
+ "*.com"
+ "*/server*"
+}
+
+#Except words
+
+set black(antipubexcept) {
+"*tclscripts.net"
+"*youtube.com*"
+"*youtu.be*"
+"http://yoursite.co"
+"#name_channel"
+}
+
+#Ban-Mode
+
+set black(antipubmode) ""
+
+#Ban-mode Time (Seconds)
+
+set black(antipubsecunde) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antipub:banmethod) "6"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antipub:banmask) "1"
+
+#########################################################################
+#------------------------------- Badhost -------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(badhost:bantime) "3h"
+
+#Words
+
+set black(badhostword) {
+ "*pula*"
+ "*pizda*"
+ "*muie*"
+ "*fuck*"
+ "*blowjob*"
+}
+
+#Except words
+
+set black(badhostexcept) {
+ "populatie"
+ "except2"
+ "except3"
+}
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(badhost:banmask) "1"
+
+#########################################################################
+#----------------------------- Antinotice ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antinotice:bantime) "2d"
+
+#Ban-Mode
+
+set black(antinoticemode) "mr"
+
+#Ban-mode Time (Seconds)
+
+set black(antinoticesecunde) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antinotice:banmethod) "3"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antinotice:banmask) "1"
+
+#########################################################################
+#------------------------------ AntiCTCP -------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antictcp:bantime) "3d"
+
+#Ban-Mode
+
+set black(antictcpmode) "mC"
+
+#Ban-mode Time (Seconds)
+
+set black(antictcpsecunde) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antictcp:banmethod) "3"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antictcp:banmask) "1"
+
+
+#########################################################################
+#----------------------------- AntiBadWord -----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antibadword:bantime) "6h"
+
+#Words (You can add them with a specific method of action)
+#Ex : *word*:<number> (see action methods numbers below)
+
+set black(antibadword) {
+ "*pula*:3"
+ "*pizda*"
+ "*muie*"
+ "*fuck*"
+ "*blowjob*"
+}
+
+#Except words
+
+set black(except_badwords) {
+ "populatie"
+ "muiere"
+}
+
+#Ban-Mode
+
+set black(badwordmode) ""
+
+#Ban-mode Time (Seconds)
+
+set black(badwordsecunde) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antibadword:banmethod) "6"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antibadword:banmask) "1"
+
+########################################################################
+#--------------------------- AntiLongText -----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antilongtext:bantime) "30m"
+
+#Char length
+
+set black(longchar) "215"
+
+#Ban Mode
+
+set black(longmode) "m"
+
+#Mode Time (Seconds)
+
+set black(longtimemode) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antilongtext:banmethod) "6"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antilongtext:banmask) "1"
+
+#######################################################################
+#------------------------- AntiBadQuitPart ---------------------------#
+
+#Ban-Time  (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antibadquitpart:bantime) "1h"
+
+#Words
+
+set black(badquitpartwords) {
+"*www.*"
+"*http://*"
+"*https://*"
+"*#*"
+}
+
+#Except words
+
+set black(badquitpartexcept) {
+ "except1"
+ "except2"
+}
+
+#BadQuitPart Message Flood (characters number)
+
+set black(badquitpartmsgchar) "120"
+
+#Ban-Mode
+
+set black(badquitpartmode) "m"
+
+#Ban-mode Time (Seconds)
+
+set black(badquitpartsecunde) "45"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antibadquitpart:banmask) "2"
+
+#Except words
+
+set black(badquitpartexcept) {
+"http://tclscripts.net"
+"www.yoursite.com"
+"#name_channel"
+}
+
+#######################################################################
+#----------------------------- AntiSpam ------------------------------#
+
+#Ban-Time  (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antispam:bantime) "6d"
+
+#Antispam Words
+
+set black(spamword) {
+ "*#*"
+ "*www.*"
+ "*http://*"
+ "*https://*"
+}
+
+#Except words
+
+set black(spamwordexcept) {
+ "#chan1"
+ "www.myexcept.ro"
+}
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antispam:banmask) "1"
+
+#Cycle-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(spamcycle) "60m"
+
+#######################################################################
+#---------------------------- AntiRepeat -----------------------------#
+
+#Ban-Time  (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antirepeat:bantime) "10m"
+
+#Repeat Setting (number repeats:seconds)
+
+set black(antirepeat:repeats) "3:5"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antirepeat:banmethod) "7"
+
+#Ban-Mode
+
+set black(antirepeatmode) ""
+
+#Ban-mode Time (Seconds)
+
+set black(antirepeatsecunde) "45"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antirepeat:banmask) "1"
+
+#######################################################################
+#----------------------------- AntiColor -----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(anticolor:bantime) "10m"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(anticolor:banmethod) "7"
+
+#Ban-Mode
+
+set black(anticolormode) "c"
+
+#Ban-mode Time (Seconds)
+
+set black(anticolorsecunde) "45"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(anticolor:banmask) "1"
+
+#######################################################################
+#----------------------------- AntiBold ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+ 
+set black(antibold:bantime) "10m"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antibold:banmethod) "7"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antibold:banmask) "1"
+
+#######################################################################
+#-------------------------- AntiUnderline ----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antiunderline:bantime) "10m"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antiunderline:banmethod) "7"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antiunderline:banmask) "1"
+
+#######################################################################
+#----------------------------- AntiCaps ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(anticaps:bantime) "10m"
+
+#Caps Char Length
+
+set black(anticapscount) "50"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(anticaps:banmethod) "7"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(anticaps:banmask) "1"
+
+#######################################################################
+#--------------------------- BadRealname -----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(badrealname:bantime) "2h"
+
+#Words
+
+set black(badfwords) {
+ "*www.*"
+ "*#*"
+ "*http://*"
+ "*https://*"
+}
+
+#Except words
+
+set black(badfexcept) {
+ "except1"
+ "except2"
+}
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(badrealname:banmask) "1"
+
+#######################################################################
+#------------------------------ BadNick ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(badnick:bantime) "1h"
+
+#badNicks
+
+set black(badnickwords) {
+ "*pula*"
+ "*pizda*"
+ "*muie*"
+ "*fuck*"
+ "*blowjob*"
+}
+
+#Except words
+
+set black(badnickexcept) {
+ "except1"
+ "except2"
+}
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(badnick:banmask) "4"
+
+#Act-Method ( 1 - message, after <X> sec ban; 2 - ban)
+
+set black(badnbanmethod) "1"
+
+#if act-method set to 1, set here the time to wait before rescan (seconds)
+
+set black(badnbanwait) "30"
+
+#######################################################################
+#----------------------------- BadIdent ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(badident:bantime) "1h"
+
+#Words
+
+set black(badidentwords) {
+ "*pula*"
+ "*pizda*"
+ "*muie*"
+ "*fuck*"
+ "*blowjob*"
+}
+
+#Except words
+
+set black(badidentexcept) {
+ "except1"
+ "except2"
+}
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(badident:banmask) "5"
+
+#######################################################################
+#-------------------------- AntiJoinFlood ----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antijoinflood:bantime) "1h"
+
+#Join-Mode
+
+set black(modes) "mr"
+
+#Join-Mode Time (Seconds)
+
+set black(nomodetime) "45"
+
+#Op ALERT (1 - ON ; 0 - OFF)
+
+set black(fjoinhow) "0"
+
+#Number of joins per user in seconds (joins:seconds)
+
+set black(antijoinflood_user_joins) "3:15"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antijoinflood:banmask) "1"
+
+#######################################################################
+#-------------------------- AntiChanFlood ----------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(antichanflood:bantime) "10m"
+
+#Number of repeats in seconds (X:Y)
+
+set black(antichanfloodrepeats) "4:5"
+
+#ChanMode
+
+set black(antichanflood:chanmode) "mr"
+
+#ChanMode Time (seconds)
+
+set black(antichanflood:chanmodetime) "45"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(antichanflood:banmethod) "6"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(antichanflood:banmask) "1"
+
+#######################################################################
+#---------------------------- NickFLood ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(nickflood:bantime) "10m"
+
+#Number of repeats in seconds (X:Y)
+
+set black(nickfloodrepeats) "3:120"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(nickflood:banmethod) "7"
+
+#Ban-Mode
+
+set black(nickfloodmode) ""
+
+#Ban-mode Time (Seconds)
+
+set black(nickfloodsecunde) "45"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(nickflood:banmask) "3"
+
+#######################################################################
+#------------------------ Repetitive chars ---------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(repetitivechars:bantime) "10m"
+
+#Number of repetitive chars in a line
+
+set black(repetitivechars:num) "10"
+
+#Action-Method
+
+#1 - warn
+#2 - kick
+#3 - ban
+#4 - warn -> kick
+#5 - warn -> kick -> ban
+#6 - kick -> ban
+#7 - warn -> ban
+
+set black(repetitivechars:banmethod) "7"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(repetitivechars:banmask) "2"
+
+############################### Modules ###############################
+#------------------------------- Quote -------------------------------#
+
+#Default time for showing "Quote of the Day" (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(quote:msgtime) "3h"
+
+#Output type (0 - MSG ; 1 - ACTION)
+
+set black(quote:outtype) "0"
+
+#######################################################################
+#------------------------------- VoiceMe -----------------------------#
+
+#Default time for voiceme message (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(voiceme:msgtime) "25m"
+
+#######################################################################
+#------------------------------- TopWords ----------------------------#
+
+#Default host for user storage
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(topwords:mask) "2"
+
+#######################################################################
+#------------------------------ GuestNick ----------------------------#
+
+#Default msg method (NOTICE, PRIVMSG, CHAN)
+
+set black(guestnick:msgmethod) "CHAN"
+
+#######################################################################
+#------------------------------- limit -------------------------------#
+
+#Default limit
+
+set black(limit:default) "10"
+
+#######################################################################
+#---------------------------- VoiceOnMsg -----------------------------#
+
+#Number of lines to pe said to receive VOICE
+
+set black(voiceonmsg:linenum) "7"
+
+#Max chan-idle time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(voiceonmsg:idletime) "35m"
+
+#######################################################################
+#------------------------------ BadChan ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(badchan:bantime) "6h" 
+
+#Default badchannels
+
+set black(badcchannels) {
+ "#badchan1"
+ "#badchan2"
+ "#badchan3"
+}
+
+#Except channels
+
+set black(exceptchannels) {
+ "#chan2"
+ "#chan3"
+}
+
+#Default hostmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(badchan:banmask) "1"
+
+#Badchan scantime (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(badchan:scantime) "45m"
+
+#Act-Method ( 1 - message, after 30 sec ban; 2 - ban)
+
+set black(badcbanmethod) "1"
+
+#if act-method set to 1, set here the time to wait before rescan (seconds)
+
+set black(badcbanwait) "30"
+
+#BadChan onjoin floodcontrol (joins:seconds)
+#(the bot will stop check if the floodcontrol is activated)
+
+set black(badchan:join:seconds) "5:6"
+
+########################################################################
+#-------------------------------- Anunt -------------------------------#
+
+#Show-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(anunttime) "52m"
+
+#MSg Type ( 1 - ACTION ; 0 - PRIVMSG )
+
+set black(anunthow) "0"
+
+########################################################################
+#---------------------------- AutoBroadcast ---------------------------#
+
+#Show-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(bttime) "55m"
+
+#MSg Type ( 1 - ACTION ; 0 - PRIVMSG )
+
+set black(bthow) "1"
+
+#######################################################################
+#----------------------------- CloneScan -----------------------------#
+
+#Scan Time (minutes), <x>h (hours), <x>d (days)
+
+set black(clonescantime) "45m"
+
+#Max Clones
+
+set black(maxclone) "3"
+
+#Default banmask
+
+#1 - *!*@host
+
+#Ban-Time (minutes), <x>h (hours), <x>d (days)
+
+set black(clonescan:bantime) "180m"
+
+#######################################################################
+#-------------------------------- Seen -------------------------------#
+
+#Flood-Protection (searches : seconds)
+
+set black(seenflood) "4:5"
+
+#Expire Time (days)
+
+set black(seen:expire:time) "30"
+
+#Expire time for seenreply (announce users who search them) (days)
+
+set black(seen:expire:seenreply) "7"
+
+########################################################################
+#-------------------------------- Greet -------------------------------#
+
+#Default greet method (NOTICE ; PRIVMSG)
+
+set black(greet:method) "NOTICE"
+
+########################################################################
+#-------------------------------- Leave -------------------------------#
+
+#Default greet method (NOTICE ; PRIVMSG)
+
+set black(leave:method) "PRIVMSG"
+
+#Flood-Protection (joins:seconds)
+
+set black(leaveflood) "4:5"
+
+########################################################################
+#------------------------------ AntiIdle ------------------------------#
+
+#Idle Scan Time (minutes), <x>h (hours), <x>d (days)
+
+set black(idleinterval) "45m"
+
+#Op max idle
+
+set black(idleopmax) "60"
+
+#Voice idle Max
+
+set black(idlevoicemax) "30"
+
+#HalfOP idle Max
+
+set black(idlehalfopmax) "30"
+
+########################################################################
+#--------------------------------- Gag --------------------------------#
+
+
+#Gag-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(gag:bantime) "10m"
+
+#Default hostmask for gag <host>/<nick>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(gag:banmask) "2"
+
+########################################################################
+#------------------------------- Private ------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(private:bantime) "60m"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(private:banmask) "1"
+
+########################################################################
+#--------------------------------- Next -------------------------------#
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(next:bantime) "1m"
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(next:banmask) "2"
+
+########################################################################
+#-------------------------------- Notes -------------------------------#
+
+#Expire time for Notes INBOX (days)
+
+set black(notes:expiretime) "30"
+
+############################## Commands ################################
+#------------------------------- Troll --------------------------------#
+
+#Default hostmask for troll <nick>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(troll:banmask) "1"
+
+########################################################################
+#--------------------------------- dr ---------------------------------#
+
+#Default hostmask for dr <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(dr:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(dr:bantime) "15d"
+
+########################################################################
+#--------------------------------- vr ---------------------------------#
+
+#Default hostmask for vr <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(vr:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(vr:bantime) "3d"
+
+########################################################################
+#--------------------------------- bot --------------------------------#
+
+#Default hostmask for bot <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(bot:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(bot:bantime) "7d"
+
+########################################################################
+#--------------------------------- b ----------------------------------#
+
+#Default hostmask for b <host> -level <time> [reason]
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(b:banmask) "1"
+
+#Default hostmask for b <host> <time> global [reason]
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(b:gl:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(b:bantime) "2d"
+
+########################################################################
+#--------------------------------- n ----------------------------------#
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(n:banmask) "4"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(n:bantime) "2h"
+
+########################################################################
+#--------------------------------- id ---------------------------------#
+
+#Default banmask
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(id:banmask) "5"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(id:bantime) "2h"
+
+########################################################################
+#-------------------------------- spam --------------------------------#
+
+#Default hostmask for spam <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(spam:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(spam:bantime) "7d"
+
+########################################################################
+#--------------------------------- bw ---------------------------------#
+
+#Default hostmask for bw <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(bw:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(bw:bantime) "1d"
+
+
+########################################################################
+#--------------------------------- mb ---------------------------------#
+
+#Default hostmask for bw <nick>/<host>
+
+#5 - *!user@*
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(mb:bantime) "2d"
+
+########################################################################
+#-------------------------------- black -------------------------------#
+
+#Default hostmask for black <time> <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(black:banmask) "1"
+
+########################################################################
+#------------------------------- stick --------------------------------#
+
+#Default hostmask for stick <time> <nick>/<host>
+
+#1 - *!*@host
+#2 - *!user@host
+#3 - nick!user@host
+#4 - nick!*@*
+#5 - *!user@*
+
+set black(stick:banmask) "1"
+
+#Ban-Time (<x>m (minutes), <x>h (hours), <x>d (days)
+
+set black(stick:bantime) "2d"
+
+########################################################################
+#------------------------------ banlist -------------------------------#
+
+########################################################################
+#--------------------------------- k ----------------------------------#
+
+########################################################################
+#--------------------------------- s ----------------------------------#
+
+#default suspend time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(s:default_time) "2d"
+
+########################################################################
+#------------------------------ ignore --------------------------------#
+
+#default ignore time (<x>m (minutes), <x>h (hours), <x>d (days))
+
+set black(ignore:default_time) "6h"
+
+########################################################################
+#------------------------------ report --------------------------------#
+
+#antiflood setting (number repeats : seconds)
+
+set black(report:flood) "2:60"
+
+########################################################################
+#------------------------------ exempt --------------------------------#
+
+#default exempt time
+
+set black(exempt:default_time) "0"
+
+############################# The End ##################################
+
+set black(name) "BlackToolS"
+set black(author) "BLaCkShaDoW"
+set black(vers) "2.5.3"
+set black(site) "wWw.TclScriptS.NeT"
+
+	bind evnt - init-server loginpublic
+	bind time - "* * * * *" timer:login:check
+ 
+ set black(loader_error) [catch {source $black(dirname)/BlackTools/BT.Loader.tcl} black(loader_error_stats)]
+
+if {$black(loader_error) == "1"} {
+	die "\[BT\] Error. Couldn't load the \"BT Loader\". Reason: \"$black(loader_error_stats)\""
+}
+
+#Add the first channel (HOME)
+proc add:home:chan {chan} {
+	global black
+	channel add $chan
+}
+
+if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {![validchan $black(homechan)]} {
+	add:home:chan $black(homechan)
+	}
+}
+
+#Start login
+loginpublic:start
+
+#Save settings from BlackTools.tcl
+blacktools:settings:autosave
+
+putlog "\002\[BT\]\002 \002$black(name)\002 ($black(site)): Initialised.."
+putlog "*** The Future is Here *** One TCL. One Smart Eggdrop ***"
+putlog "\002\[BT\]\002 Language files loaded:\002 [join [string toupper $black(current_lang)] "\002, "]"
+putlog "\002\[BT\]\002 \002$black(name) v$black(vers)\002 coded by \002$black(author)\002: Loaded."
+
+#code testing requirements
+if {[info exists {tcl_version}]} {
+if {${tcl_version} < 8.5} {
+	putlog "\00304\[BT\] Error.\003 \002$black(name) v$black(vers)\002 requires \002Tcl 8.5\002 (or higher) installed to function properly. Your actual tcl version is\00304 ${tcl_version}\003."
+	}
+}
+if {$numversion < 1080000} {
+	putlog "\00304\[BT\] Error.\003 \002$black(name) v$black(vers)\002 requires \002Eggdrop 1.8\002 (or higher) installed to function properly. Your actual Eggdrop version is\00304 $version\003."
+}
+
+#unset the languages
+if {[info exists black(current_lang)]} {
+	unset black(current_lang)
+}
+
+#################
+###########################################################################
+##   END                                                                 ##
+###########################################################################
+##       Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW)         ##
+###########################################################################

+ 180 - 0
BlackTools/BT.Binds.tcl

@@ -0,0 +1,180 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   BINDS TCL   ###############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	    	       ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	 	       ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+if {[info exists black(notlogged)]} {
+	unset black(notlogged)
+}
+
+bind pubm - * blacktools:protect:pub
+bind pubm - * voiceonmsg:public
+bind pubm - * topwords:module
+bind pubm - * seen:lastmsg
+bind pubm - * notes:announce:pub
+bind pubm - "**" comand:pubme
+bind pubm - "**" comand:pubme:for
+bind pubm - "***" comand:chan
+
+bind msgm - * forward:redirect
+bind msgm - "*" command:pubpriv
+bind ctcp - ACTION blacktools:protect:me
+bind ctcp - ACTION voiceonmsg:public:me
+bind ctcp - ACTION topwords:module:me
+bind msgm - * msg:flood:protection
+bind notc - * notc:flood:protection
+bind time - "* * * * *" maxuptime
+bind time - "* * * * *" blacktools:expirebans
+bind time - "* * * * *" seen:save_file
+
+bind notc - * antinotice:protect
+bind ctcp - * antictcp:protect
+bind part - * badquitpart:protect
+bind sign - * badquitpartsign:protect
+bind join - * antispam:protect:msg
+bind msgm - * antispam:protect
+bind time - "20 00 * * *" seen:entry:delete
+bind time - "20 00 * * *" remove:chan:timer
+bind time - "30 00 * * *" user:autoexpire
+bind time - "00 00 * * *" topwords:day:reset
+bind time - "00 00 * * *" bans:day:reset
+bind time - "10 00 * * *" secured:allowlist:reset
+bind time - "00 00 * * *" notes:autoexpire
+bind ctcp - * blackreply
+bind join - * badrealname:protect:join
+bind join - * badnick:protect:join
+bind join - * badident:protect:join
+bind join - * badhost:protect
+bind nick - * badnick:protect:change
+bind nick - * nickflood:protect
+bind mode - "*+b*" protectpublic
+bind join - * joinflood:protect
+bind join - * rebanpublic
+bind need - * toolspublic
+bind need - * keyneed
+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 evnt - init-server setaway
+bind join - * autovonjoin
+bind join - * autoponjoin
+bind join - * auto:join
+bind join - * private:module
+bind join - * reason:details:module
+bind join - * guestnick:module
+bind join - * troll:show
+bind ctcr - VERSION ctcpvers
+bind mode - *+o* dontoppublic
+bind mode - *-o* dontdeoppublic
+
+bind part - * badchan:part
+bind sign - * badchan:part
+bind splt - * badchan:split
+bind kick - * badchan:kick
+bind nick - * badchan:nickchange
+
+bind join - * flood:join:protection
+bind join - * join:count
+bind join - * first:join
+bind join - * topic:autotopic
+bind mode - *-b* gag:reban
+
+bind join - * black:next:join
+bind part - * black:next:part
+bind sign - * black:next:sign
+bind splt - * black:next:split
+bind kick - * black:next:kick
+bind mode - * black:next:mode
+bind nick - * black:next:chnick
+
+bind part - * voiceonmsg:part
+bind sign - * voiceonmsg:part
+bind splt - * voiceonmsg:split
+bind kick - * voiceonmsg:kick
+
+bind part - * gag:part
+bind sign - * gag:part
+bind splt - * gag:split
+bind kick - * gag:kick
+
+bind kick - * autoinvite:kick
+
+bind mode - * voiceme:mode
+bind join - * voiceme:join
+bind join - * notes:announce
+
+
+bind kick - * securemode:kickremove
+bind mode - * securemode:reply
+
+bind join - * blacktools:join:ban
+bind mode - * blacktools:mode:ban
+bind nick - * blacktools:chnick:ban
+
+bind join - * blacktools:backchan:verify
+
+bind raw - invite inviteban:protect
+
+bind raw - 474 abuse:ban:note
+bind raw - 475 abuse:key:note
+bind raw - 473 abuse:inviteonly:note
+bind raw - 471 abuse:channelfull:note
+bind raw - 477 abuse:restricted:note
+bind raw - 478 blacktools:banlistfull
+
+#chanserv
+
+bind notc - "*AUTENTIFICARE REUSITA*" black:login:yes
+bind notc - "*AUTHENTICATION SUCCESSFUL*" black:login:yes
+bind notc - "*AUTENTIFICARE ESUATA*" black:login:no
+bind notc - "*AUTHENTICATION FAILED*" black:login:no:failed
+bind notc - "*You are already authenticated*" black:login:yes
+bind notc - "*Esti deja autentificat*" black:login:yes
+bind notc - "*SYNTAX: LOGIN*" black:login:no:user
+bind notc - "*I don't know*" black:login:no:invalid
+bind notc - "*Maximum concurrent logins exceeded*" black:login:max
+#
+
+#nickserv
+
+bind notc - "*If this is your nick*" black:nickserv:yes
+bind notc - "*Password accepted for*" black:nickserv:identify
+bind notc - "*The password supplied*" black:nickserv:wrongpass
+bind notc - "*is registered to someone else*" black:nickserv:registered
+bind nick - * black:nickserv:release
+#
+
+bind join - * blacktools:getlastaction:join
+bind kick - * blacktools:getlastaction:kick
+bind pubm - * blacktools:getlastaction:text
+bind splt - * blacktools:getlastaction:split
+bind sign - * blacktools:getlastaction:sign
+bind mode - *+b* blacktools:getlastaction:ban
+bind ctcp - ACTION blacktools:getlastaction:me
+bind part - * blacktools:getlastaction:part
+
+unbind msg - hello *msg:hello
+unbind msg - pass *msg:pass
+unbind msg - addhost *msg:addhost
+
+##############
+##########################################################
+##   END                                                 #
+##########################################################

+ 7247 - 0
BlackTools/BT.Core.tcl

@@ -0,0 +1,7247 @@
+###########################################################################
+##          BlackTools - The Ultimate Channel Control Script             ##
+##                    One TCL. One smart Eggdrop                         ##
+###########################################################################
+############################   CORE TCL   #################################
+###########################################################################
+##						       		         ##
+##   BlackTools  : http://blacktools.tclscripts.net	   	         ##
+##   Bugs report : http://www.tclscripts.net/	                         ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script   ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	       	         ##
+##                 #TCL-HELP / UnderNet        	                         ##
+##                 You can ask in english or romanian                    ##
+##					                                 ##	
+###########################################################################
+########################## Default protection flags #######################
+
+set black(exceptflags) "nmo|HAagMOVSo"
+set black(accessflags) "nmo|MAO"
+set black(localflags) "-|MAOV"
+set black(glflags) "nmo"
+set black(tclconfig) "$black(dirname)/BlackTools.tcl"
+set black(tempdir) "$black(dirname)/BlackTools/temp"
+set black(banflag) "B"
+
+############################### Information files ############################
+
+set black(files_file) "$black(dirname)/BlackTools/FILES"
+
+if {![file exists $black(files_file)]} {
+	file mkdir $black(files_file)
+}
+
+if {![file exists $black(tempdir)]} {
+	file mkdir $black(tempdir)
+}
+
+set black(s_file) "$black(dirname)/BlackTools/FILES/$username.suspend.txt"
+set black(status_file) "$black(dirname)/BlackTools/FILES/$username.status.txt"
+set black(seen_file) "$black(dirname)/BlackTools/FILES/$username.seen_db.txt"
+set black(old_seen) "$black(dirname)/BlackTools/FILES/$username.Seen.db"
+set black(uptime_file) "$black(dirname)/BlackTools/FILES/$username.uptime.txt"
+set black(bans_file) "$black(dirname)/BlackTools/FILES/$username.bans.txt"
+set black(join_file) "$black(dirname)/BlackTools/FILES/$username.othermodule.txt"
+set black(extra_file) "$black(dirname)/BlackTools/FILES/$username.flags.txt"
+set black(add_file) "$black(dirname)/BlackTools/FILES/$username.extra.txt"
+set black(quote_file) "$black(dirname)/BlackTools/FILES/$username.quote.txt"
+set black(notes_file) "$black(dirname)/BlackTools/FILES/$username.notes.txt"
+set black(temp_banner) "$black(dirname)/BlackTools/temp/banner"
+set black(temp_motd) "$black(dirname)/BlackTools/temp/motd"
+
+set black(files) "$black(s_file) $black(status_file) $black(seen_file) $black(uptime_file) $black(bans_file) $black(join_file) $black(extra_file) $black(add_file) $black(quote_file) $black(notes_file)"
+
+if {[file isdirectory "text"]} {
+if {[file exists "text/motd"] && [file exists "text/banner"]} {
+if {[file exists $black(temp_banner)] && [file exists $black(temp_motd)]} {
+	file rename -force $black(temp_banner) "text/banner"
+	file rename -force $black(temp_motd) "text/motd"
+	file delete -force $black(temp_banner)
+	file delete -force $black(temp_motd)
+	
+		}
+	}
+}
+
+foreach f $black(files) {
+if {![file exists $f]} {
+	set file [open $f w]
+	close $file
+	}
+}
+
+if {[file exists $black(old_seen)]} {
+if {[file exists $black(seen_file)]} {
+	set file [open $black(old_seen) "r"]
+	set seen_file [open $black(seen_file) a]
+while {[gets $file line] != -1} {
+	puts $seen_file $line
+}
+	close $seen_file
+	file delete -force $black(old_seen)
+	}
+}
+
+########################### mychar ############################
+
+proc blacktools:mychar {char hand} {
+	global black
+	set getchar [getuser $hand XTRA MYCHAR]
+if {[lsearch -exact $black(cmdchar) $char] < 0} {
+if {[string equal -nocase $getchar "none"]} {
+	return 1
+	}
+}
+if {($getchar == "") && ([lsearch -exact $black(cmdchar) $char] > 0)} {
+	return 2
+}
+
+if {$getchar != ""} {
+if {[string equal -nocase $char $getchar]} {
+	return 1
+	}
+	return 0
+}
+if {[lsearch -exact $black(cmdchar) $char] < 0} {
+	return 0
+	}
+}
+
+########################### define colors #####################
+
+proc black:color {num hand text} {
+	global black
+if {[validuser $hand]} {
+	set getcolor [string tolower [getuser $hand XTRA OUTPUT_COLORS]]
+} else {
+	set getcolor ""
+}
+if {$getcolor == ""} { set getcolor "[string tolower $black(default_colors)]" }	
+	set color1 [lindex $getcolor 0]
+	set color2 [lindex $getcolor 1]
+	set color3 [lindex $getcolor 2]
+	set color4 [lindex $getcolor 3]
+	set show_text ""
+	foreach txt [split $text] {
+switch $num {
+	1 {
+	lappend show_text [blacktools:getcolor $color2 $txt]
+	}
+	2 {
+	lappend show_text [blacktools:getcolor $color1 $txt]
+	}
+	5 {
+	lappend show_text [blacktools:getcolor $color3 $txt]
+	}
+	4 {
+	lappend show_text [blacktools:getcolor $color4 $txt]
+			}
+	6 {
+if {[string match "<*>" $txt]} {
+	lappend show_text [blacktools:getcolor $color4 $txt]
+				} else {
+	lappend show_text $txt			
+				}
+			}
+		}
+	}
+	return $show_text
+}
+	
+proc blacktools:getcolor {color text} {
+	global black
+if {![info exists black(color_inc)]} {
+	set black(color_inc) 0
+}
+switch $color {
+	black {
+	return "\00301$text\003"
+}
+	bold {
+	return "\002$text\002"
+	}
+	red {
+	return "\00304$text\003"
+	}
+	blue {
+	return "\00312$text\003"
+	}
+	green {
+	return "\00303$text\003"
+	}
+	yellow {
+	return "\00308$text\003"
+		}
+	orange {
+	return "\00307$text\003"	
+	}
+	cyan {
+	return "\00310$text\003"
+	}
+	grey {
+	return "\00314$text\003"
+}
+	brown {
+	return "\00305$text\003"
+		}
+	purple {
+	return "\00306$text\003"
+		}
+	pink {
+	return "\00313$text\003"	
+		}
+	underline {
+	return "\037$text\037"
+			}
+		}
+	return $text
+}
+
+proc black:color:set {hand arg} {
+	global black
+	set text ""
+if {[validuser $hand]} {
+	set getcolor [string tolower [getuser $hand XTRA OUTPUT_COLORS]]
+} else {
+	set getcolor ""
+}
+
+if {$getcolor == ""} { set getcolor "[string tolower $black(default_colors)]" }	
+	set color1 [lindex $getcolor 0]
+	set color2 [lindex $getcolor 1]
+	set color3 [lindex $getcolor 2]
+	set color4 [lindex $getcolor 3]
+	
+	foreach txt [split $arg] {
+if {[string match "<*>" $txt]} {
+	lappend text [blacktools:getcolor $color4 $txt]
+} elseif {[string match *%chan%* $txt] || [string match *\001* $txt]} {
+	set rpc [string map {"\001" ""} $txt]
+	lappend text [blacktools:getcolor $color2 $rpc]
+} elseif {[string match *\002* $txt]} {
+	set rpc [string map {"\002" ""} $txt]
+	lappend text [blacktools:getcolor $color1 $rpc]
+} elseif {[string match *\005* $txt]} {
+	set rpc [string map {"\005" ""} $txt]
+	lappend text [blacktools:getcolor $color3 $rpc]
+} elseif {[string match *\004* $txt]} {
+	set rpc [string map {"\004" ""} $txt]
+	lappend text [blacktools:getcolor $color4 $rpc]
+} else {
+	lappend text $txt
+	}
+}
+	return [join $text]
+}
+
+########################### Extra Settings ####################
+
+set black(extra_str) {
+	antipub-reason badhost-reason antinotice-reason antictcp-reason antibadword-reason 
+	antilongtext-reason antibadquitpart-reason antijoinflood-reason 
+	antispam-reason antispam-message antirepeat-reason anticolor-reason antibold-reason
+	antiunderline-reason anticaps-reason nickflood-reason badrealname-reason badnick-reason badident-reason
+	antichanflood-reason private-reason clonescan-reason dr-reason vr-reason n-reason expirebans
+	b-reason id-reason mb-reason w-reason w-message spam-reason bw-reason bot-reason gag-reason stick-reason troll-reason
+	k-reason black-reason next-reason antipub-bantime badhost-bantime antinotice-bantime antictcp-bantime 
+	antibadword-bantime antilongtext-bantime antibadquitpart-bantime antijoinflood-bantime antijoinflood-userset
+	antispam-bantime antirepeat-bantime anticolor-bantime antibold-bantime antiunderline-bantime 
+	anticaps-bantime badrealname-bantime badnick-bantime badident-bantime antichanflood-bantime repetitivechars-bantime
+	joinflood chanflood private-bantime antilongtextmax antirepeat-setting idlevoicemax clonescan-maxclone
+	idleopmax idlehalfopmax kickcount xbantime xbanlevel limit-default nickflood-bantime clonescan-bantime backchan
+	dr-bantime vr-bantime n-bantime b-bantime id-bantime spam-bantime bw-bantime mb-bantime badnick-bmethod badnick-banwait
+	bot-bantime gag-bantime b-bantime stick-bantime d-bantime badchan-bantime badchan-bmethod badchan-reason badchan-floodcontrol
+	joincount jointime lang next-bantime greet-method leave-method url antipub-warn antinotice-warn
+	antictcp-warn antibadword-warn antilongtext-warn antirepeat-warn anticolor-warn repetitivechars-warn
+	antibold-warn antiunderline-warn anticaps-warn antichanflood-warn nickflood-warn nickflood-repeat
+    antipub-banmethod antinotice-banmethod antictcp-banmethod antibadword-banmethod
+    antilongtext-banmethod antirepeat-banmethod anticolor-banmethod antibold-banmethod repetitivechars-banmethod
+	antiunderline-banmethod anticaps-banmethod nickflood-banmethod antichanflood-banmethod banmethod
+	antipub-banmask badhost-banmask antinotice-banmask antictcp-banmask antibadword-banmask 
+	antilongtext-banmask antibadquitpart-banmask n-banmask inviteban-banmask antijoinflood-banmask
+	antispam-banmask antispam-banmask antirepeat-banmask anticolor-banmask antibold-banmask
+	antiunderline-banmask anticaps-banmask nickflood-banmask badrealname-banmask badnick-banmask repetitivechars-banmask
+	antichanflood-banmask private-banmask dr-banmask vr-banmask stick-banmask badident-banmask
+	b-banmask id-banmask spam-banmask bw-banmask bot-banmask gag-banmask black-banmask next-banmask guestnick-msgmethod
+	guestnick-message voiceonmsg-linenum voiceonmsg-idletime inviteban-reason repetitivechars-reason inviteban-bantime badchan-banwait
+	general-bantime general-banmask badchan-scantime clonescan-scantime antispam-scantime idle-scantime anunt-showtime
+	quote-showtime voiceme-showtime quitpartmsgflood-char repetitivechars-char
+}
+
+set black(extra_flag) {
+	antipub antinotice antictcp antilongtext antibadword antispam spamjoinmessage antirepeat
+	anticolor antibold antiunderline anticaps badrealname badnick badident repetitivechars
+	antijoinflood antichanflood xtools antibadchan anunt limit clonescan seen autoop showbadchan showtroll
+	autovoice leave topwords dontop dontdeop private silent quote note reportnick invisible forward
+	showhandle showid showcount showtime showurl next voiceonmsg autotopic greet xonly nologged settingsaved
+	idleop idlehalfop idlevoice vprotect oprotect hoprotect badquitpart quitpartcolor quitpartmsgflood badhost nickflood guestnick seenreply
+	accessonly voiceme onlyonmode securemode strictsecured nextshortcmd inviteban quoteofday chanlink
+}
+
+set black(validcmds) "o omsg v ho man version mode cycle say act i stats t myset h r msg add set userlist info delacc del auto chuser s us addhost delhost b black stick dr bot n id spam bw mb vr gag ungag troll ub sb banlist k w purge set unset show ignore enable disable addchan delchan suspend unsuspend channels die jump save rehash nick uptime status cp chat next noidle skip helped anunt bt idle limit seen clonescan badchan securemode private tcl guestnick greet broadcast leave topic timer topwords next q note login"
+
+########################## BackChan ############################
+
+proc blacktools:backchan:verify {nick host hand chan} {
+	global black botnick
+	set isbackchan ""
+if {![botisop $chan]} {
+	return
+}
+foreach c [channels] {
+	set backchan [join [setting:get $c backchan]]
+if {[string equal -nocase $backchan $chan]} {
+	set isbackchan $c
+	}
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$isbackchan != ""} {
+	set gethost "$nick!$host"
+foreach b [blacktools:banlist:ban $isbackchan] {
+	set cidr 0
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[regexp {[/]} $real_read_host]} {
+	set read_ip [lindex [split $real_read_host @] 1]
+	set theip [lindex [split $gethost @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+if {$cidr_ip == "1"} {
+	set read_rest_ip [lindex [split $gethost @] 0]
+	set read_theip [lindex [split $real_read_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {[string match -nocase $real_read_host $gethost] || [string match -nocase $gethost $real_read_host] || $cidr == "1"} {
+	set replace(%msg.1%) $gethost
+	set replace(%chan%) $isbackchan
+	set replace(%msg.2%) $read_host
+	set text [black:color:set $botnick $black(say.$getlang.backchan.1)]
+	putserv "NOTICE @$chan :[string map [array get replace] $text]"
+			}
+		}
+	}		
+}
+
+########################## AutoInvite ##########################
+
+proc autoinvite:kick {nick host hand chan kicked reason} {
+	global black
+	set handle [nick2hand $kicked]
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	set getinvite [string tolower [getuser $handle XTRA AUTOINVITE]]
+if {($getinvite == "") || ($getinvite == "0")} { return } else {
+	putserv "INVITE $kicked $chan"
+		}
+	}
+}
+
+############################# Flood Protection ############################
+
+proc msg:mass:unsilence {} {
+	global black
+	putquick "SILENCE -*!*@*"
+	blacktools:tell:dcc antiflood.4 none
+}
+
+proc msg:flood:protection {nick host hand arg} {
+	global black botnick
+	set user [nick2hand $nick]
+	set chan1 $nick
+	set number [scan $black(msg:flood) %\[^:\]]
+	set timer [scan $black(msg:flood) %*\[^:\]:%s]
+	set mass_number [scan $black(mass:msg:flood) %\[^:\]]
+	set mass_timer [scan $black(mass:msg:flood) %*\[^:\]:%s]
+if {[matchattr $hand n]} {
+	return
+}
+	foreach tmr [utimers] {
+if {[string match "*black(antiflood:$host:prot)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+foreach tmr [utimers] {
+if {[string match "*black(antiflood:prot)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(antiflood:$host:prot)]} {
+	set black(antiflood:$host:prot) 0
+}
+if {![info exists black(antiflood:prot)]} {
+	set black(antiflood:prot) 0
+}
+	set black(antiflood:$host:prot) [expr $black(antiflood:$host:prot) + 1]
+	set black(antiflood:prot) [expr $black(antiflood:prot) + 1]
+	utimer $timer [list unset  black(antiflood:$host:prot)]
+	utimer $mass_timer [list unset black(antiflood:prot)]
+if {$black(antiflood:prot) >= $mass_number} {
+	putquick "SILENCE +*!*@*"
+	blacktools:tell:dcc antiflood.3 "\002\[BT\]\002 MASS MSG FLOOD PROTECTION"
+	utimer $black(mass:msg:silence_time) [list msg:mass:unsilence] 
+	return
+}
+
+if {$black(antiflood:$host:prot) >= $number} {
+if {[validuser $user]} {
+	newignore "*!$host" $botnick "\002\[BT\]\002 MSG FLOOD PROTECTION" $black(msg:flood:ignore_access)
+	blacktools:tell $nick "PRIV" $hand "" $chan1 antiflood.1 "$black(msg:flood:ignore_access)"
+	blacktools:tell:dcc antiflood.2 "$host \002\[BT\]\002 MSG FLOOD PROTECTION"
+			} else {
+	newignore "*!$host" $botnick "\002\[BT\]\002 MSG FLOOD PROTECTION" $black(msg:flood:ignore_others)
+	blacktools:tell:dcc antiflood.2 "$host \002\[BT\]\002 MSG FLOOD PROTECTION"
+		}
+	}
+}
+
+proc notc:flood:protection {nick host hand text dest} {
+	global black botnick
+	set number [scan $black(notice:flood) %\[^:\]]
+	set timer [scan $black(notice:flood) %*\[^:\]:%s]
+if {$nick == $black(chanserv)} {
+	return
+}
+if {![isbotnick $dest]} {
+	return
+}	
+foreach tmr [utimers] {
+if {[string match "*black(antiflood:$host:notc)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(antiflood:$host:notc)]} {
+	set black(antiflood:$host:notc) 0
+}
+	set black(antiflood:$host:notc) [expr $black(antiflood:$host:notc) + 1]
+	utimer $timer [list unset  black(antiflood:$host:notc)]
+if {$black(antiflood:$host:notc) >= $number} {
+	newignore "*!$host" $botnick "\002\[BT\]\002 NOTICE FLOOD PROTECTION" $black(notice:flood:notc_time)
+	blacktools:tell:dcc antiflood.2 "$host \002\[BT\]\002 NOTICE FLOOD PROTECTION"
+	}
+}
+
+##################################### Time return ################################
+
+proc time_return_minute {the_time} {
+	global black
+	set minutes ""
+if {[regexp {^[0-9]} $the_time] && ![regexp {[A-Za-z]} $the_time]} {
+	return $the_time
+}
+
+if {![regexp {^[0-9](.*)[A-Za-z]} $the_time]} {
+	return -1
+}
+regsub -all {[A-Za-z]} $the_time "" number
+regsub -all {[0-9]} $the_time "" type
+	
+switch [string tolower $type] {
+	d {
+	set minutes [expr $number * 1440]
+	}
+	m {
+	set minutes "$number"
+	}
+	h {
+	set minutes [expr $number * 60]
+	}
+	default {
+	return -1
+		}
+	}
+	return "$minutes"
+}
+
+############################## Check Timer ################################
+
+if {![info exists bt_timers_running]} {
+	timer 1 blacktools:timers:runtime
+	set bt_timers_running 1
+}
+
+#Secured Timer
+if {![info exists securedtimer_running]} {
+	utimer 30 [list securemode:timer]
+	set securedtimer_running 1
+}
+
+################################ check access ################################
+
+proc check:access {nick host hand chan chan1 users} {
+global black
+	
+if {[matchattr $users -|M $chan] && [matchattr $hand -|M $chan]} {
+	return 1
+} elseif {[matchattr $users -|M $chan] && [matchattr $hand -|A $chan]} {
+	return 1
+} elseif {[matchattr $users m|- $chan] && [matchattr $hand -|M $chan]} {
+	return 1
+} elseif {[matchattr $users m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
+	return 1
+} elseif {[matchattr $users m|- $chan] && [matchattr $hand -|A $chan]} {
+	return 1
+} elseif {[matchattr $users -|A $chan] && [matchattr $hand -|A $chan]} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand -|A $chan]} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand -|M $chan]} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand n|- $chan]} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand m|- $chan]} {
+	return 1
+} elseif {[matchattr $users o|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand nm|- $chan])} {
+	return 1
+} elseif {[matchattr $users o|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand m|- $chan])} {
+	return 1
+} elseif {[matchattr $users o|- $chan] && [matchattr $hand -|M $chan]} {
+	return 1
+} elseif {[matchattr $users m|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand n|- $chan])} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand n|- $chan])} {
+	return 1
+} elseif {[matchattr $users m|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand m|- $chan])} {
+	return 1
+} elseif {[matchattr $users n|- $chan] && [matchattr $hand o|- $chan] && (![matchattr $hand m|- $chan])} {
+	return 1
+} elseif {[matchattr $users o|- $chan] && [matchattr $hand -|A $chan]} {
+	return 1
+	}
+	return 0
+}
+
+proc check:global {hand} {
+	global black
+if {[matchattr $hand n]} {
+	return [blacktools:getlevelname 1 $hand]
+} elseif {[matchattr $hand m]} {
+	return [blacktools:getlevelname 2 $hand]
+	} elseif {[matchattr $hand o]} {
+	return [blacktools:getlevelname 8 $hand]
+	}
+	return 0
+}
+
+################################ Away set ####################################
+
+proc setaway {myaway} {
+global black
+	set away [config:getinfo $black(tclconfig) "set black(default_away) \"*\""]
+	set away [string map [list {\"} \" {\[} \[ {\]} \] {\?} \? {\\} \\] $away]
+	
+if {$away == "" || $away == "i_have_no_away"} {
+	return 0
+} else {
+putserv "AWAY :"
+putserv "AWAY :$away"
+	return 1
+	}
+}
+
+proc away:timer {} {
+	global black
+	set away_status [setaway "none"]
+}
+
+############################### Config save ##################################
+
+proc config:save {f text_find text_replace} {
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set file_temp "temp.$timestamp"
+	set found_it 0
+
+if {![file exists $file_temp]} {
+	set file [open $file_temp w]
+	close $file
+}
+	set file [open $f r]
+	set size [file size $f]
+	set data [split [read $file $size] \n]
+	close $file
+	set file2 [open $file_temp a]
+foreach line $data {
+if {[string match -nocase $text_find $line]} {
+	set found_it 1	
+	puts $file2 $text_replace
+} else {
+	puts $file2 $line
+	}
+}
+	close $file2
+
+if {$found_it == "1"} {
+	file delete $f
+	file rename $file_temp $f
+	
+	} else {
+	file delete $file_temp
+	return 0
+	}
+
+if {[file exists $file_temp]} {
+	file delete $file_temp
+	return 0
+	}
+}
+
+proc config:getinfo {f text_find} {
+	set file [open $f r]
+	while {[gets $file line] != -1} {
+if {[string match -nocase $text_find $line]} {
+	set found_line $line
+	continue
+	}
+}
+	close $file
+if {![info exists found_line]} {
+	return 0
+} else {
+	regexp {\"((.*)\")(.*)} $found_line line
+	set line [string map { "\"" ""} $line]
+	return $line
+	}
+}
+
+############################### Ban Methods ##################################
+
+proc blacktools:banner:1 {nick bot chan host method linkchans} {
+global black botnick
+	set num 0
+	set temp_num 0
+	set split_hand [split $bot ":"]
+	set hand [string tolower [lindex $split_hand 0]]
+	set said [lindex $split_hand 1]
+	set banmask [return_mask [return_host_num $hand $chan $host] $host $nick]
+	set finduser [finduser $banmask]
+if {$finduser != "*"} {
+if {[matchattr $finduser $black(exceptflags) $chan]} {
+	return
+	}
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	
+	set xban 0
+	set num [blacktools:ban:find_id]
+	set xonly [blacktools:getxonly $chan]
+	set bantime [blacktools:getbantime $chan $hand]
+	set show_reason [blacktools:getreason $chan $hand 0 $num]
+	set reason [blacktools:getreason $chan $hand 1 $num]
+	blacktools:ban:method $nick $chan $banmask $hand $show_reason $bantime $method $xban $xonly $reason $said $linkchans $num $host
+}
+
+proc blacktools:getxonly {chan} {
+	global black
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	return 1
+	}
+	return 0
+}
+
+proc blacktools:getbantime {chan hand} {
+	global black
+	set bantime [setting:get $chan $hand-bantime]
+if {$bantime == ""} {
+	set bantime [setting:get $chan general-bantime]
+if {$bantime == ""} {
+	set bantime $black($hand:bantime)
+	}
+}
+	set checkbantime [time_return_minute $bantime]
+if {$checkbantime == "-1"} {
+	set bantime [time_return_minute $black($hand:bantime)]
+} else {
+	set bantime [time_return_minute $bantime]
+	}
+	return $bantime
+}
+
+proc blacktools:getreason {chan hand type id} {
+	global black badchan
+if {[string match -nocase "*badchan,*" $hand]} {
+	set split_hand [split $hand ","]
+} else {
+	set split_hand [split $hand ":"]
+}
+	set hand [lindex $split_hand 0]
+	set bantime [setting:get $chan $hand-bantime]
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} {
+	set getlang [string tolower $black(default_lang)]
+}
+if {$bantime == ""} { 
+	set bantime [setting:get $chan general-bantime]
+}
+if {$bantime == ""} {
+	set bantime $black($hand:bantime) 
+}
+	set checkbantime [time_return_minute $bantime]
+if {$checkbantime == "-1"} {
+	set bantime [time_return_minute $black($hand:bantime)]
+} else {
+	set bantime [time_return_minute $bantime]
+}
+	set reason_time [expr [unixtime] + [expr $bantime * 60]]
+if {[string equal -nocase $hand "NEXT"]} {
+	set getreason [setting:get $chan $hand-noidlereason]
+} else {
+	set getreason [setting:get $chan $hand-reason]
+}
+if {$getreason == ""} {
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[string equal -nocase $hand "NEXT"]} {
+	set getreason $black(say.$getlang.$hand.5)
+} else {
+	set getreason $black(say.$getlang.$hand.1)
+	}
+}
+
+if {[string equal -nocase $hand "BADCHAN"]} {
+	set banmask [lindex $split_hand 1]
+if {[string equal -nocase $badchan($banmask:$chan) $black(say.$getlang.$hand.5)]} {
+if {[setting:get $chan $hand-reason] != ""} {
+	set getreason [join [setting:get $chan $hand-reason]]
+} else {
+	set getreason $black(say.$getlang.badchan.5)
+	}
+} else {
+if {[setting:get $chan $hand-reason] != ""} {
+	set getreason [join [setting:get $chan $hand-reason]]
+} else {
+	set getreason [join $badchan($banmask:$chan)]
+		}
+	}
+}
+	set replace(%chan%) $chan
+	set reason [string map [array get replace] $getreason]
+	set thereason [encoding convertfrom utf-8 $reason]
+	set getcount [setting:get $chan kickcount]
+	set show_reason $thereason
+if {[setting:get $chan showid]} {
+	set show_reason "$show_reason \[id: $id\]"
+}
+if {[setting:get $chan showtime] && $bantime != "0"} {
+	set show_reason "$show_reason \[bantime: [return_reason_time [expr $reason_time - [unixtime]]]\]"
+} else {
+	set show_reason "$show_reason"
+}
+
+if {[setting:get $chan showurl] && [setting:get $chan url] != "" && $bantime != "0"} {
+		set show_reason "$show_reason - [join [setting:get $chan url]]"
+}
+if {[setting:get $chan showcount]} {
+	set show_reason "$show_reason - $getcount -"
+}
+
+if {$type == "1"} {
+	return $thereason
+}
+	return $show_reason
+}
+
+proc blacktools:banner:2 {nick bot chan chan1 host link} {
+global black botnick
+	set xban 0
+	set num 0
+	set temp_num 0
+if {[string match -nocase "*badchan,*" $bot]} {
+	set split_hand [split $bot ","]
+} else {
+	set split_hand [split $bot ":"]
+}
+	set hand [string tolower [lindex $split_hand 0]]
+	
+if {[string equal -nocase $hand "CLONESCAN"]} {
+	set banmask $host
+} else {
+	set banmask [return_mask [return_host_num $hand $chan $host] $host $nick]
+}
+	set finduser [finduser $banmask]
+	set said [lindex $split_hand 1]
+if {$finduser != "*"} {
+if {[matchattr $finduser $black(exceptflags) $chan]} {
+	return
+	}
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+if {[setting:get $chan xonly]} {
+	set xban 1
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxtime == ""} {
+	set getxtime $black(chanserv:bantime)
+}
+if {$getxlevel == ""} {
+	set getxlevel $black(chanserv:banlevel)
+	}
+}
+	set num [blacktools:ban:find_id]
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	set getcount [setting:get $chan kickcount]
+	
+	set bantime [blacktools:getbantime $chan $hand]
+if {[string equal -nocase $hand "badchan"]} {
+	set show_reason [blacktools:getreason $chan "$hand,$banmask" 0 $num]
+	set thereason [blacktools:getreason $chan "$hand,$banmask" 1 $num]
+} else {
+	set show_reason [blacktools:getreason $chan $hand 0 $num]
+	set thereason [blacktools:getreason $chan $hand 1 $num]
+}
+if {[string equal -nocase $hand "CLONESCAN"]} {
+	set clone [string map {"*!*@" ""} $banmask]
+	set replace(%clone%) $clone
+	set thereason [string map [array get replace] $thereason]
+	set show_reason [string map [array get replace] $show_reason]
+}
+	blacktools:addban $nick $banmask "$hand:$said" $chan $chan1 $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $num	
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putserv "PRIVMSG $black(chanserv) :ban $chan $banmask $getxtime $getxlevel $show_reason"
+}
+if {$link == "0"} {
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan == ""} {
+	return
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+	return
+}
+if {[info exists black($chan:anounce)]} {
+	return
+}
+if {![string equal -nocase $hand "CLONESCAN"] && ![string equal -nocase $hand "BADCHAN"]} {
+	set black($chan:anounce) 1
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set thereason [blacktools:rem_comment_ban $thereason]
+if {$thereason == ""} { set thereason "N/A" }
+	set bantime [time_return_minute $bantime]
+	set bantime [expr $bantime * 60]
+	set expire [return_time_2 $getlang $bantime]
+	set replace(%banmask%) $banmask
+	set replace(%bantime%) $expire
+	set replace(%reason%) $show_reason
+	set replace(%chan%) $chan
+	set replace(%nick%) $botnick
+	set text [black:color:set "" $black(say.$getlang.reportchan.1)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	puthelp "PRIVMSG $backchan :$reply"
+if {[info exists black($chan:anounce)]} {
+	utimer 5 [list unset black($chan:anounce)]
+		}
+	}
+}
+
+proc blacktools:banner:3 {mask hand chan chan1 reason bantime type sticky cmd nick banned prv} {
+global black botnick
+	chanserv:ignore_remove
+	set validhost 0
+	set found_handle 0
+	set finduser [finduser $mask]
+if {$finduser != "*"} {
+if {[matchattr $finduser $black(exceptflags) $chan]} {
+	return
+	}
+}
+foreach user [chanlist $chan] {
+if {[string equal -nocase $user $botnick]} {
+	set uhost "$user![getchanhost $user $chan]"
+if {[string match -nocase $mask $uhost]} {
+	set found_handle 1
+	break
+	}	
+}
+	set uhost "$user![getchanhost $user $chan]"
+if {[string match -nocase $mask $uhost]} {
+	set handle [nick2hand $user]
+if {$handle != "*"} {
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	set found_handle 1
+	break
+			}
+		}
+	}
+}
+
+if {$found_handle == "1"} { 
+return 
+}
+
+if {[string match -nocase "*!*" $mask] && [string match -nocase "*@*" $mask]} {
+if {$type == "gl"} {
+	set check_ban_exist [blacktools:ban:exists $mask "GLOBAL"]
+} else {
+	set check_ban_exist [blacktools:ban:exists $mask $chan]
+}
+if {$check_ban_exist != ""} {
+if {$prv == "prv"} {
+	blacktools:tell $nick $prv $hand $chan $chan1 gl.banexists "$mask $check_ban_exist"
+} else {
+	blacktools:tell $nick $prv $hand $chan $chan1 gl.banexists "$mask $check_ban_exist"
+}
+	return
+}
+	set validhost 1
+	set thereason [encoding convertto utf-8 $reason]
+	set replace(%chan%) $chan
+	set replace(%botnick%) $botnick
+	set thereason [string map [array get replace] $thereason]
+	set reason [string map [array get replace] $reason]
+	set show_bantime $bantime
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set found 1
+	set bl 0
+	set xban 0
+	set num 0
+	set temp_num 0
+	set checkbantime [time_return_minute $bantime]
+if {$checkbantime == "-1"} {
+	set bantime $bantime
+} else {
+	set bantime [time_return_minute $bantime]
+}
+	set getlang [string tolower [setting:get $chan lang]]
+	set getmethod [getuser $gethand XTRA OUTPUT_TYPE]
+	set userlang [string tolower [getuser $gethand XTRA OUTPUT_LANG]]
+if {$userlang == ""} { set userlang "[string tolower $black(default_lang)]" }
+if {$getmethod == ""} { set getmethod "0" }
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {$type == ""} {
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+if {$prv == "prv"} {
+	blacktools:tell $nick $prv $hand $chan $chan1 gl.noop none
+} else {
+	blacktools:tell $nick "" $hand $chan $chan1 gl.noop none
+}
+return
+	}
+}
+if {$bantime == "-1"} {
+if {$prv == "prv"} {
+	blacktools:tell $nick $prv $hand $chan $chan1 gl.instr "$cmd"
+} else {
+	blacktools:tell $nick "" $hand $chan $chan1 gl.instr "$cmd"
+}
+	return
+}
+
+if {$cmd == "b" && $type == "gl"} {
+if {$prv == "prv"} {
+	blacktools:tell $nick $prv $hand $chan $chan1 b.8 none
+	} else {
+	blacktools:tell $nick "" $hand $chan $chan1 b.8 none
+	}
+}
+	set num [blacktools:ban:find_id]
+	set current_time [unixtime]
+if {$bantime != "0"} {
+	set reason_time [expr $current_time + [expr $bantime * 60]]
+} else {
+	set reason_time 0
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	set getcount [setting:get $chan kickcount]
+	blacktools:banner3_stats $cmd $chan $gethand $type
+
+if {$bantime == "0"} {
+	set bl 1
+}
+if {$type != "gl"} {
+if {[onchan $black(chanserv) $chan] && [setting:get $chan xonly]} {
+	set replace(%msg.1%) $mask
+	set replace(%msg.2%) $black(chanserv)
+	set text [black:color:set "" $black(say.$getlang.gl.xonlyban)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+if {$prv == "prv"} {
+	putserv "PRIVMSG $nick :$reply"
+} else {
+
+	switch $getmethod {
+	0 {
+	putserv "NOTICE $nick :$reply"
+}
+	1 {
+	putserv "PRIVMSG $chan1 :$reply"	
+}
+	2 {
+	putserv "PRIVMSG $nick :$reply"
+				}
+			}
+		}
+	}
+}
+
+if {$type == "gl"} {
+	blacktools:addban:gl $nick $mask $hand "GLOBAL" $bantime "BAN" "0" "1" $thereason $num
+	blacktools:global:ban [channels] 0 $mask $gethand $reason $bantime $reason_time $num $bl
+} else {
+if {$sticky == "1"} {
+	blacktools:addban $nick $mask $hand $chan $chan1 $bantime "BAN" "1" "0" $thereason $found $cmd $type $banned $prv $num
+	who:chan $chan
+} elseif {$sticky == "2"} {
+	blacktools:addban $nick $mask $hand $chan $chan1 $bantime "BAN" "2" "0" $thereason $found $cmd $type $banned $prv $num
+	troll:add $banned $mask $chan
+	who:chan $chan
+} elseif {$sticky == "3"} {
+	blacktools:addban $nick $mask $hand $chan $chan1 $bantime "BAN" "3" "0" $thereason $found $cmd $type $banned $prv $num
+	who:chan $chan
+} else {
+	blacktools:addban $nick $mask $hand $chan $chan1 $bantime "BAN" "0" "0" $thereason $found $cmd $type $banned $prv $num 
+	who:chan $chan
+	}
+}
+if {$type != "gl"} {
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan == ""} { 
+	return
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+	return
+}
+	set reason [blacktools:rem_comment_ban $thereason]
+	set show_reason [blacktools:setreason $chan $reason "" 0 $getcount "0" $num]
+if {$reason == ""} { set reason "N/A" }
+	set bantime [time_return_minute $bantime]
+	set bantime [expr $bantime * 60]
+	set expire [return_time_2 $getlang $bantime]
+	set black($chan:anounce) 1
+	set replace(%banmask%) $mask
+if {$bantime != "0"} {
+	set replace(%bantime%) $expire
+} else {
+	set replace(%bantime%) "N/A"
+}
+	set replace(%reason%) $show_reason
+	set replace(%chan%) $chan
+	set replace(%nick%) $gethand
+	set text [black:color:set "" $black(say.$getlang.reportchan.1)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	puthelp "PRIVMSG $backchan :$reply"
+		}
+	}
+if {$validhost == "0"} {
+if {$prv == "prv"} {
+	blacktools:tell $nick "prv" $hand $chan $chan1 b.10 $mask
+		} else {
+	blacktools:tell $nick "" $hand $chan $chan1 b.10 $mask	
+		}
+	}
+}
+
+proc blacktools:banner3_stats {cmd chan user type} {
+	global black
+	set text ""
+	set counter 0
+if {$type == "gl"} {
+	set bantype "BANS(GLOBAL)"
+	set counts [getuser $user XTRA BANS(GLOBAL)]
+if {$counts == ""} { set counts 0 }
+	set counts [expr $counts + 1]
+	setuser $user XTRA BANS(GLOBAL) $counts
+	return
+}	
+	set cmds [getuser $user XTRA CMD_STATS($chan)]
+if {$cmds == ""} {
+	setuser $user XTRA CMD_STATS($chan) $cmd:1
+} else {
+	set find_it [lsearch -glob $cmds "$cmd*"]
+	set get_val [lindex $cmds $find_it]
+	set split_val [split $get_val ":"]
+	set getval [lindex $split_val 1]
+	set counter [expr $getval + 1]
+	set cmds [lreplace $cmds $find_it $find_it]
+if {[llength $cmds] > 0} {
+	setuser $user XTRA CMD_STATS($chan) "$cmds $cmd:$counter"
+		} else {
+	setuser $user XTRA CMD_STATS($chan) $cmd:$counter	
+		}
+	}
+	
+	set cmds_today [getuser $user XTRA CMD_STATS_TODAY($chan)]
+if {$cmds_today == ""} {
+	setuser $user XTRA CMD_STATS_TODAY($chan) $cmd:1
+} else {
+	set find_it [lsearch -glob $cmds_today "$cmd*"]
+	set get_val [lindex $cmds_today $find_it]
+	set split_val [split $get_val ":"]
+	set getval [lindex $split_val 1]
+	set counter [expr $getval + 1]
+	set cmds_today [lreplace $cmds_today $find_it $find_it]
+if {[llength $cmds_today] > 0} {
+	setuser $user XTRA CMD_STATS_TODAY($chan) "$cmds_today $cmd:$counter"
+		} else {
+	setuser $user XTRA CMD_STATS_TODAY($chan) $cmd:$counter	
+		}
+	}
+}
+
+
+proc blacktools:global:ban {channels num mask gethand reason bantime reason_time id bl} {
+	global black
+	set chan [lindex $channels $num]
+	set getlang [string tolower [setting:get $chan lang]]
+	set xban 0
+if {[setting:get $chan xonly]} {
+	set xban 1
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxtime == ""} {
+	set getxtime $black(chanserv:bantime)
+}
+if {$getxlevel == ""} {
+	set getxlevel $black(chanserv:banlevel)
+	}
+}
+	set reason [blacktools:rem_comment_ban $reason]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[setting:get $chan showhandle] && ![string equal -nocase $gethand "handleban"]} {
+if {$bl == "1"} {
+	set show_reason "\[BT\] ($gethand) (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $reason)"
+} else {
+	set show_reason "($gethand) (GLOBAL) $reason"
+	}
+} else {
+if {$bl == "1"} {
+if {[string equal -nocase $gethand "handleban"]} {
+	set show_reason "\[BT\] blacklisted -- ($black(say.$getlang.gl.reason): $reason)"
+} else {
+	set show_reason "\[BT\] (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $reason)"
+	}
+} else {
+	set show_reason "(GLOBAL) $reason"
+	}
+ }
+
+if {$id != "-1"} {
+if {[setting:get $chan showid]} {
+	set show_reason "$show_reason \[id: $id\]"	
+	}
+}
+if {[setting:get $chan showtime] && $bantime != "0"} {
+	set show_reason "$show_reason \[bantime: [return_reason_time [expr $reason_time - [unixtime]]]\]"
+}
+foreach user [chanlist $chan] {
+	set cidr 0
+	set gethost "$user![getchanhost $user $chan]"
+	set real_host [string map [list \[ {\[} \] {\]} \\ {\\}] $gethost]
+if {[regexp {[/]} $mask]} {
+	set read_ip [lindex [split $mask @] 1]
+	set theip [lindex [split $real_host @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+if {$cidr_ip == "1"} {
+	set read_rest_ip [lindex [split $mask @] 0]
+	set read_theip [lindex [split $real_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {[string match -nocase $mask $real_host] || [string match -nocase $real_host $mask] || ($cidr == "1")} {
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan $mask $getxtime $getxlevel $show_reason"
+} else {
+	putquick "MODE $chan +b $mask"
+	putserv "KICK $chan $user :$show_reason"
+		}
+	}
+}
+	set incnum [expr $num + 1]
+if {[lindex $channels $incnum] != ""} {
+	blacktools:global:ban $channels $incnum $mask $gethand $reason $bantime $reason_time $id $bl
+	}
+}
+
+proc blacktools:ban:method {nick chan host type reason bantime option xban xonly thereason said linkchans id truehost} {
+	global black
+if {![info exists black(banmethod:memory)]} {
+	set black(banmethod:memory) ""
+}
+switch [string tolower $type] {
+
+antipub {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(antipubmode) $black(antipubsecunde) "antipub" $thereason $said $linkchans $id $truehost
+}
+
+antinotice {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(antinoticemode) $black(antinoticesecunde) "antinotice" $thereason $said $linkchans $id $truehost
+}
+
+antictcp {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(antictcpmode) $black(antictcpsecunde) "antictcp" $thereason $said $linkchans $id $truehost
+}
+
+antibadword {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(badwordmode) $black(badwordsecunde) "antibadword" $thereason $said $linkchans $id $truehost
+}
+
+antilongtext {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(longmode) $black(longtimemode) "antilongtext" $thereason $said $linkchans $id $truehost
+}
+
+antirepeat {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(antirepeatmode) $black(antirepeatsecunde) "antirepeat" $thereason $said $linkchans $id $truehost
+}
+
+anticolor {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(anticolormode) $black(anticolorsecunde) "anticolor" $thereason $said $linkchans $id $truehost
+}
+
+antibold {
+	set chanmode "0"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option "0" "0" "antibold" $thereason $said $linkchans $id $truehost
+}
+
+antiunderline {
+	set chanmode "0"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option "0" "0" "antiunderline" $thereason $said $linkchans $id $truehost
+}
+
+anticaps {
+	set chanmode "0"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option "0" "0" "anticaps" $thereason $said $linkchans $id $truehost
+}
+
+antichanflood {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(antichanflood:chanmode) $black(antichanflood:chanmodetime) "antichanflood" $thereason $said $linkchans $id $truehost
+		}
+nickflood {
+	set chanmode "1"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option $black(nickfloodmode) $black(nickfloodsecunde) "nickflood" $thereason $said $linkchans $id $truehost
+		}
+repetitivechars {
+	set chanmode "0"
+	banmethod_action $nick $chan $host $type $reason $bantime $xban $xonly $chanmode $option "0" "0" "repetitivechars" $thereason $said $linkchans $id $truehost
+		}
+	}
+}
+
+proc banmethod_action {nick chan host type reason bantime xban xonly mode banmethod chanmode_type chanmode_time variable_name thereason said linkchans id truehost} {
+	global black
+		chanserv:ignore_remove
+if {$variable_name == "nickflood"} {
+	set nick $said
+	set said ""
+}
+	set num 0
+	set temp_num 0
+	set get_count ""
+	set time [unixtime]
+	set getlang [string tolower [setting:get $chan lang]]
+if {![info exists black($variable_name:type_count:$host:$chan)]} {
+	set black($variable_name:type_count:$host:$chan) $time:0
+} else {
+	set time_split [split $black($variable_name:type_count:$host:$chan) ":"]
+	set get_time [lindex $time_split 0]
+	set get_count [lindex $time_split 1]
+	set get_count [expr $get_count + 1]
+	set black($variable_name:type_count:$host:$chan) $time:$get_count
+}
+	set time_split [split $black($variable_name:type_count:$host:$chan) ":"]
+	set get_time [lindex $time_split 0]
+	set get_count [lindex $time_split 1]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set warnmsg [setting:get $chan $variable_name-warn]
+if {$warnmsg == ""} {
+	set warnmsg $black(say.$getlang.$variable_name.2)
+}
+	set warnmsg [encoding convertfrom utf-8 $warnmsg]
+	set replace(%chan%) $chan
+	set replace(%nick%) $nick
+	set warnmsg [string map [array get replace] $warnmsg]
+switch $banmethod {
+
+	1 {
+	putserv "PRIVMSG $chan :\[WARN\] $nick - $warnmsg"
+	banmethod_memory:remove $host $chan $variable_name
+}
+	2 { 
+if {$xonly == "1"} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $nick $warnmsg"
+	return
+}
+	putserv "KICK $chan $nick :\[WARN\] $warnmsg"	
+	banmethod_memory:remove $host $chan $variable_name
+}
+	3 {
+	banmethod_action:ban $nick $chan $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $chan "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $id
+if {$linkchans != ""} {
+foreach c $linkchans {
+	set num [blacktools:ban:find_id]
+	set getcount [setting:get $c kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $c kickcount $kcount
+	set xban 0
+	set xonly [blacktools:getxonly $c]
+	set bantime [blacktools:getbantime $c $variable_name]
+	set reason [blacktools:getreason $c $variable_name 0 $num]
+	set thereason [blacktools:getreason $c $variable_name 1 $num]
+	banmethod_action:ban $nick $c $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $c "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $num
+	}
+}
+if {$mode == "1"} {
+	set current_modes [getchanmode $chan]
+	set putmode ""
+	set chanmodes [string map {"+" ""} [split [lindex $current_modes 0] ""]]
+foreach mod [split $chanmode_type ""] {
+if {[lsearch $chanmodes $mod] < 0} {
+	lappend putmode $mod
+	}
+}
+if {$putmode != ""} {
+	putserv "MODE $chan +$putmode" -next ;utimer $chanmode_time [list putserv "MODE $chan -$putmode"]
+		}
+	}
+	banmethod_memory:remove $host $chan $variable_name
+}
+	4 {
+if {$get_count == "0"} {
+	putserv "PRIVMSG $chan :\[WARN\] $nick - $warnmsg"
+	banmethod_memory:add $host
+} else {
+if {$xonly == "1"} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $nick $warnmsg"
+	banmethod_memory:remove $host $chan $variable_name
+	return
+}
+if {[onchan $nick $chan]} {
+	putserv "KICK $chan $nick :\[WARN\] $warnmsg"
+}
+	banmethod_memory:remove $host $chan $variable_name
+	}
+}
+	5 {
+if {$get_count == "0"} {
+	putserv "PRIVMSG $chan :\[WARN\] $nick - $warnmsg"
+	banmethod_memory:add $host
+}
+if {$get_count == "1"} {
+if {$xonly == "1"} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $nick $warnmsg"
+	return
+}
+	putserv "KICK $chan $nick :\[WARN\] $warnmsg"
+}
+if {$get_count >= "2"} {
+	banmethod_action:ban $nick $chan $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $chan "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $id
+if {$linkchans != ""} {
+foreach c $linkchans {
+	set num [blacktools:ban:find_id]
+	set getcount [setting:get $c kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $c kickcount $kcount
+	set xban 0
+	set xonly [blacktools:getxonly $c]
+	set bantime [blacktools:getbantime $c $variable_name]
+	set reason [blacktools:getreason $c $variable_name 0 $num]
+	set thereason [blacktools:getreason $c $variable_name 1 $num]
+	banmethod_action:ban $nick $c $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $c "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $num
+	}
+}
+if {$mode == "1"} {
+	set current_modes [getchanmode $chan]
+	set putmode ""
+	set chanmodes [string map {"+" ""} [split [lindex $current_modes 0] ""]]
+foreach mod [split $chanmode_type ""] {
+if {[lsearch $chanmodes $mod] < 0} {
+	lappend putmode $mod
+	}
+}
+if {$putmode != ""} {
+	putserv "MODE $chan +$putmode" -next ;utimer $chanmode_time [list putserv "MODE $chan -$putmode"]
+			}
+		}
+	banmethod_memory:remove $host $chan $variable_name
+	}
+}
+	6 {
+if {$get_count == "0"} {
+if {$xonly == "1"} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $nick $warnmsg"
+	return
+}
+	putserv "KICK $chan $nick :\[WARN\] $warnmsg"
+	banmethod_memory:add $host
+} else {
+	banmethod_action:ban $nick $chan $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $chan "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $id
+if {$linkchans != ""} {
+foreach c $linkchans {
+	set num [blacktools:ban:find_id]
+	set getcount [setting:get $c kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $c kickcount $kcount
+	set xban 0
+	set xonly [blacktools:getxonly $c]
+	set bantime [blacktools:getbantime $c $variable_name]
+	set reason [blacktools:getreason $c $variable_name 0 $num]
+	set thereason [blacktools:getreason $c $variable_name 1 $num]
+	banmethod_action:ban $nick $c $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $c "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $num
+	}
+}
+if {$mode == "1"} {
+	set current_modes [getchanmode $chan]
+	set putmode ""
+	set chanmodes [string map {"+" ""} [split [lindex $current_modes 0] ""]]
+foreach mod [split $chanmode_type ""] {
+if {[lsearch $chanmodes $mod] < 0} {
+	lappend putmode $mod
+	}
+}
+if {$putmode != ""} {
+	putserv "MODE $chan +$putmode" -next ;utimer $chanmode_time [list putserv "MODE $chan -$putmode"]
+					}
+				}
+	banmethod_memory:remove $host $chan $variable_name
+			}	
+		}
+	7 {
+if {$get_count == "0"} {
+if {[onchan $nick $chan]} {
+	set black($variable_name:type_count:$host:$chan) $time:0
+	putserv "PRIVMSG $chan :\[WARN\] $nick - $warnmsg"
+	banmethod_memory:add $host
+	}
+} else {
+	banmethod_action:ban $nick $chan $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $chan "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $id
+if {$linkchans != ""} {
+foreach c $linkchans {
+	set num [blacktools:ban:find_id]
+	set getcount [setting:get $c kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $c kickcount $kcount
+	set xban 0
+	set xonly [blacktools:getxonly $c]
+	set bantime [blacktools:getbantime $c $variable_name]
+	set reason [blacktools:getreason $c $variable_name 0 $num]
+	set thereason [blacktools:getreason $c $variable_name 1 $num]
+	banmethod_action:ban $nick $c $host $reason $xban $xonly $bantime $truehost $thereason
+	blacktools:addban $nick $host "$type:$said" $c "" $bantime "BAN" "0" "0" $thereason "0" "" "" "" 0 $num
+	}
+}
+if {$mode == "1"} {
+	set current_modes [getchanmode $chan]
+	set putmode ""
+	set chanmodes [string map {"+" ""} [split [lindex $current_modes 0] ""]]
+foreach mod [split $chanmode_type ""] {
+if {[lsearch $chanmodes $mod] < 0} {
+	lappend putmode $mod
+	}
+}
+if {$putmode != ""} {
+	putserv "MODE $chan +$putmode" -next ;utimer $chanmode_time [list putserv "MODE $chan -$putmode"]
+					}
+				}
+	banmethod_memory:remove $host $chan $variable_name
+			}
+		}
+	}
+}
+
+proc banmethod_memory:add {host} {
+	global black
+if {[info exists black(banmethod:memory)]} {
+if {[lsearch -exact [string tolower $black(banmethod:memory)]  [string tolower $host]] < 0} {
+	lappend black(banmethod:memory) $black(banmethod:memory) $host
+		}
+	}
+}
+
+proc banmethod_memory:remove {host chan variable_name} {
+	global black
+if {[info exists black($variable_name:type_count:$host:$chan)]} {
+	unset black($variable_name:type_count:$host:$chan)
+	}
+}
+
+proc banmethod_memory:autoremove {} {
+	global black
+if {[info exists black(banmethod:memory)]} {
+	set split_out [split $black(banmethod:memory)]
+	foreach chan [channels] {
+	foreach host $split_out {
+if {[info exists black(antipub:type_count:$host:$chan)]} {
+	unset black(antipub:type_count:$host:$chan)		
+				}
+if {[info exists black(antinotice:type_count:$host:$chan)]} {
+	unset black(antinotice:type_count:$host:$chan)		
+				}
+if {[info exists black(antictcp:type_count:$host:$chan)]} {
+	unset black(antictcp:type_count:$host:$chan)		
+				}
+if {[info exists black(antibadword:type_count:$host:$chan)]} {
+	unset black(antibadword:type_count:$host:$chan)		
+				}
+if {[info exists black(antilongtext:type_count:$host:$chan)]} {
+	unset black(antilongtext:type_count:$host:$chan)		
+				}
+if {[info exists black(antirepeat:type_count:$host:$chan)]} {
+	unset black(antirepeat:type_count:$host:$chan)		
+				}
+if {[info exists black(anticolor:type_count:$host:$chan)]} {
+	unset black(anticolor:type_count:$host:$chan)		
+				}
+if {[info exists black(antibold:type_count:$host:$chan)]} {
+	unset black(antibold:type_count:$host:$chan)		
+				}
+if {[info exists black(antiunderline:type_count:$host:$chan)]} {
+	unset black(antiunderline:type_count:$host:$chan)		
+				}
+if {[info exists black(anticaps:type_count:$host:$chan)]} {
+	unset black(anticaps:type_count:$host:$chan)		
+				}
+if {[info exists black(antichanflood:type_count:$host:$chan)]} {
+	unset black(antichanflood:type_count:$host:$chan)		
+				}
+if {[info exists black(nickflood:type_count:$host:$chan)]} {
+	unset black(nickflood:type_count:$host:$chan)		
+				}				
+if {[lsearch -exact [string tolower $black(banmethod:memory)]  [string tolower $host]] > -1} {
+	set position [lsearch -exact [string tolower $black(banmethod:memory)] [string tolower $host]]
+	set black(banmethod:memory) [lreplace $black(banmethod:memory) $position $position]
+				}
+			}
+		}
+	}
+}
+
+proc checkischanban_ub {nick truehost chan whois} {
+	global black
+	set banlist [chanbans $chan]
+if {$nick == ""} {
+	set search_host "$truehost"
+} else {
+	set search_host "$nick!$truehost"
+}
+	set foundban 0
+foreach ban $banlist {
+	set b [lindex $ban 0]
+if {([matchaddr $b $search_host] && $whois == "1") || [matchaddr $search_host $b]} {
+	set foundban 1
+	break
+		}
+	}
+	return $foundban
+}
+
+proc checkischanban {nick truehost chan} {
+	global black
+	set banlist [chanbans $chan]
+if {$nick == ""} {
+	set search_host "$truehost"
+} else {
+	set search_host "$nick!$truehost"
+}
+	set foundban 0
+foreach ban $banlist {
+	set b [lindex $ban 0]
+if {[matchaddr $search_host $b]} {
+	set foundban 1
+	break
+		}
+	}
+	return $foundban
+}
+
+proc returnchanbans {host chan} {
+	global black
+	set bans ""
+	set banlist [chanbans $chan]
+foreach ban $banlist {
+	set b [lindex $ban 0]
+if {[matchaddr $host $b]} {
+	lappend bans $b
+		}
+	}
+	return $bans
+}
+
+proc returnchanbans_ub {host chan whois} {
+	global black
+	set bans ""
+	set banlist [chanbans $chan]
+foreach ban $banlist {
+	set b [lindex $ban 0]
+if {([matchaddr $b $host] && $whois == "1") || [matchaddr $host $b]} {
+	lappend bans $b
+		}
+	}
+	return $bans
+}
+
+proc banmethod_action:ban {nick chan host reason xban xonly bantime truehost thereason} {
+	global black botnick
+		chanserv:ignore_remove
+	set reason [blacktools:rem_comment_ban $reason]
+if {$xonly == "1"} {
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxlevel == ""} { set getxlevel $black(chanserv:banlevel)}
+if {$getxtime == ""} { set getxtime $black(chanserv:bantime) }
+	putserv "PRIVMSG $black(chanserv) :ban $chan $host $getxtime $getxlevel $reason"
+} else {
+	set alreadyban [checkischanban $nick $truehost $chan]
+if {$alreadyban == "0"} {
+	putserv "MODE $chan +b $host"
+}
+	putserv "KICK $chan $nick :$reason"
+foreach user [chanlist $chan] {
+	set gethost "$user![getchanhost $user $chan]"
+	set real_host [string map [list \[ {\[} \] {\]} \\ {\\}] $gethost]
+if {[string match -nocase $host $real_host] || [string match -nocase $real_host $host]} {
+	putserv "KICK $chan $user :$reason"
+		}
+	}
+}
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan == ""} {
+	return
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+	return
+}
+if {[info exists black($chan:anounce)]} {
+	return
+}
+	set black($chan:anounce) 1
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$reason == ""} { set reason "N/A" }
+	set bantime [time_return_minute $bantime]
+	set bantime [expr $bantime * 60]
+	set expire [return_time_2 $getlang $bantime]
+	set replace(%banmask%) $host
+	set replace(%bantime%) $expire
+	set replace(%reason%) $reason
+	set replace(%chan%) $chan
+	set replace(%nick%) $botnick
+	set text [black:color:set "" $black(say.$getlang.reportchan.1)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	puthelp "PRIVMSG $backchan :$reply"
+	utimer 5 [list unset black($chan:anounce)]
+}
+
+########################### User Protection ################################
+
+proc protectpublic {nick host hand chan args} {
+global black
+	set bans [lindex $args 1]
+	chanserv:ignore_remove
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+if {$bans == "*!*@*"} { putserv "MODE $chan -b $bans"
+	return
+}
+	set list [userlist $black(exceptflags) $chan]
+foreach user $list {
+	set hosts [getuser $user hosts]
+foreach host $hosts {
+if {[string match -nocase $bans $host] || [string match -nocase $host $bans]} {
+if {[onchan $black(chanserv) $chan] && ([setting:get $chan xtools] || [setting:get $chan xonly])} {
+	putquick "PRIVMSG $black(chanserv) :unban $chan $bans"
+				} else {
+	putserv "MODE $chan -b $bans"
+				}
+			}
+		}
+	}
+}
+
+########################### Text Wrapper ##################################
+
+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 h:wrap {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 [concat [join $cur $splitChr]]
+}
+
+   
+##################################Auto User Expire ################################
+
+proc user:autoexpire {minute hour day month year} {
+	global black
+	set counter 0
+if {$black(user_expire_time) == "0"} {
+	return
+}
+	set max_time [expr 86400 * $black(user_expire_time)]
+foreach user [userlist] {
+if {[matchattr $user mno]} {
+	continue
+}
+	set laston [getuser $user laston]
+if {$laston == ""} {
+	set laston [getuser $user XTRA created]
+} else {
+	set laston [lindex $laston 0]
+}
+	set user_time [expr [unixtime] - $laston]
+if {$user_time > $max_time} {
+	set counter [expr $counter + 1]
+	deluser $user
+	}
+}
+	blacktools:tell:dcc userexpire.1 "$counter"
+}
+
+
+################################# Message output ################################
+
+proc blacktools:tell:h  {nick host hand chan chan1 type arg} {
+	global black botnick lastbind
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set replace(%botnick%) $botnick
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+	set text ""
+if {[lsearch -exact $black(cmdchar) $charbind] < 0} {
+	set charbind ""
+}
+if {[string equal $lastbind "*"]} { set charbind "" }
+if {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " }
+if {[string equal -nocase "***" $lastbind]} { set charbind "$host" }
+	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(%char%) $charbind
+	set replace(%chan%) $chan
+	set replace(%msg%) [join [lrange [split $arg] 0 end]]
+	set replace(%msg.set%) [join [lrange [split $arg] 1 end]]
+	set replace(%bind%) $lastbind
+if {[validuser $hand]} {
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+	set getmethod [getuser $hand XTRA OUTPUT_TYPE]
+} else {
+	set getlang ""
+	set getmethod ""
+}
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$getmethod == ""} { set getmethod $black(default_output) }
+	set text [black:color:set $gethand $black(say.$getlang.$type)]
+	set text [join $text]
+	set reply [string map [array get replace] $text]
+foreach w [wordwrap $reply 440] {
+if {[string equal -nocase $host "prv"]} {
+	putserv "PRIVMSG $nick :$w"
+	return
+}
+switch $getmethod {
+	0 {
+	putserv "NOTICE $nick :$w"
+}
+	1 {
+	putserv "PRIVMSG $chan1 :$w"
+}
+	2 {
+	putserv "PRIVMSG $nick :$w"
+			}
+		}
+	} 
+}
+
+proc blacktools:tell {nick host hand chan chan1 type arg} {
+global black botnick lastbind
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set replace(%botnick%) $botnick
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+if {[lsearch -exact $black(cmdchar) $charbind] < 0} {
+	set charbind ""
+}
+	set firstchar [lindex $black(cmdchar) 0]
+if {[string equal $lastbind "*"]} { set charbind "" }
+if {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " }
+if {[string equal -nocase "***" $lastbind]} { 
+	set split_host [split $host ":"]
+if {[lindex $split_host 1] == "chan"} {
+	set host [lindex $split_host 1]
+	set charbind [lindex $split_host 0]
+	} else {
+	set charbind "$host"
+	}
+}
+if {$charbind == ""} {
+	set charbind $firstchar
+if {[validuser $hand]} {
+	set getchar [getuser $hand XTRA MYCHAR]
+if {$getchar != ""} {
+	set charbind $getchar
+		}
+	}
+}
+	set replace(!%chan%) "%chan%"
+	set replace(!%botnick%) "%botnick%"
+	set replace(%char%) $charbind
+	set replace(%firstchar%) $firstchar
+	set replace(%chan%) $chan
+	set replace(%msg%) [join [lrange [split $arg] 0 end]]
+	set replace(%msg.set%) [join [lrange [split $arg] 1 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%) [lindex [split $arg] 3]
+	set replace(%msg.5%) [lrange [split $arg] 4 end]
+	set replace(%msg.6%) [join  [lrange [split $arg] 3 end]]
+	set replace(%msg.7%) [lrange [split $arg] 2 end]
+	set replace(%msg.8%) [join [lrange [split $arg] 1 end]]
+	set replace(%msg.9%) [join [lrange [split $arg] 3 end]]
+	set replace(%msg.10%) [join [lrange [split $arg] 4 end]]
+	set replace(%msg.11%) [join [lrange [split $arg] 5 end]]
+	set replace(%msg.12%) [lindex [split $arg] 4]
+	set replace(%msg.13%) [lindex [split $arg] 5]
+	set replace(%msg.14%) [join [lrange [split $arg] 6 end]]
+	set replace(%msg.15%) [lindex [split $arg] 6]
+	set replace(%msg.16%) [join [lrange [split $arg] 7 end]]
+	set replace(%msg.17%) [lindex [split $arg] 7]
+	set replace(%msg.18%) [join [lrange [split $arg] 2 end]]
+	set replace(%msg.19%) [lindex [split $arg] 8]
+	set replace(%msg.20%) [join [lrange [split $arg] 8 end]]
+	set replace(%msg.21%) [lindex [split $arg] 9]
+	
+	set replace(%bind%) $lastbind
+if {[validuser $gethand]} {
+	set getlang [string tolower [getuser $gethand XTRA OUTPUT_LANG]]
+	set getmethod [getuser $gethand XTRA OUTPUT_TYPE]
+} else {
+	set getlang ""
+	set getmethod ""
+}
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$getmethod == ""} { set getmethod $black(default_output) }	
+if {[string equal -nocase "man.showtip" $type]} {
+	set len [llength $black(say.$getlang.$type)] 
+    set random [expr int(rand()*$len)] 
+    set gettext [lindex $black(say.$getlang.$type) $random]
+	set text [black:color:set $gethand $gettext]
+} else {
+	set text [black:color:set $gethand $black(say.$getlang.$type)]
+}
+	set text [join $text]
+	set reply [string map [array get replace] $text]
+	set reply [string map [list {\"} \" {\[} \[ {\]} \] {\?} \? {\\} \\] $reply]
+if {[string equal -nocase $host "prv"]} {
+	putserv "PRIVMSG $nick :$reply"
+	return
+}
+if {[string equal -nocase $host "chan"]} {
+	putserv "PRIVMSG $chan1 :$reply"
+	return
+}
+switch $getmethod {
+	0 {
+	putserv "NOTICE $nick :$reply"
+}
+	1 {
+if {[validchan $chan1]} {
+if {[onchan $botnick $chan1]} {
+	putserv "PRIVMSG $chan1 :$reply"
+	} else { 
+	putserv "NOTICE $nick :$reply"
+		}
+	} else { putserv "NOTICE $nick :$reply" }
+}
+	2 {
+	putserv "PRIVMSG $nick :$reply"
+		}
+	}
+}
+
+proc blacktools:tell:cmd {nick host hand chan chan1 prv type reply} {
+	global black
+	set text ""
+if {[validuser $hand]} {
+	set getcolor [string tolower [getuser $hand XTRA OUTPUT_COLORS]]
+} else {
+	set getcolor ""
+}
+	if {$getcolor == ""} { set getcolor "[string tolower $black(default_colors)]" }	
+	set color1 [lindex $getcolor 0]
+	set color2 [lindex $getcolor 1]
+	set color3 [lindex $getcolor 2]
+	set color4 [lindex $getcolor 3]
+foreach txt $reply {
+if {[string match "*<*" $txt] || [string match "*>*" $txt]} {
+	lappend text [blacktools:getcolor $color2 $txt]
+} elseif {[string match *%chan%* $txt] || [string match *\001* $txt]} {
+	set rpc [string map {"\001" ""} $txt]
+	lappend text [blacktools:getcolor $color2 $rpc]
+} elseif {[string match *\002* $txt]} {
+	set rpc [string map {"\002" ""} $txt]
+	lappend text [blacktools:getcolor $color1 $rpc]
+} elseif {[string match *\005* $txt]} {
+	set rpc [string map {"\005" ""} $txt]
+	lappend text [blacktools:getcolor $color3 $rpc]
+} elseif {[string match *\004* $txt]} {
+	set rpc [string map {"\004" ""} $txt]
+	lappend text [blacktools:getcolor $color4 $rpc]
+} else {
+	lappend text $txt
+	}  	
+}
+if {$prv == "1"} {
+	putserv "PRIVMSG $nick :[join $text]"
+	return
+}
+	switch $type {
+	0 {
+	putserv "NOTICE $nick :[join $text]"
+}
+	1 {
+	putserv "PRIVMSG $chan1 :[join $text]"	
+}
+	2 {
+	putserv "PRIVMSG $nick :[join $text]"
+		}
+	}
+}
+
+proc blacktools:tell:dcc {type arg} {
+	global black botnick
+
+	set replace(%botnick%) $botnick
+	set replace(%msg%) [join [lrange $arg 0 end]]
+	set replace(%msg.set%) [join [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%) [join [lrange $arg 1 end]]
+	set replace(%msg.9%) [join [lrange $arg 3 end]]
+	set replace(%msg.10%) [join [lrange $arg 4 end]]
+	set getlang [string tolower $black(default_lang)]
+if {[info exists black(say.$getlang.$type)]} {
+	set text [black:color:set "" $black(say.$getlang.$type)]
+	set text [join $text]
+	set reply [string map [array get replace] $text]
+	putlog "$reply"
+	}
+}
+
+############################## Channel Key Need ##################################
+
+proc keyneed {chan type} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+if {$type == "key"} {
+if {![regexp {k} [channel get $chan chanmode]]} {
+	return	
+} else {
+	set the_key [lindex [split [channel get $chan chanmode]] 1]
+if {$the_key == ""} { return }
+	putserv "JOIN $chan :$the_key"
+		}
+	}
+}
+
+############################### Check valid nickname #############################
+
+proc check:validnickname {from keyword arguments } {
+global nick config
+	set lastnick $::lastnick
+	set error [config:save $config "set nick \"*\"" "set nick \"$lastnick\""]
+	unbind RAW - 432 check:validnickname
+}
+
+proc check:chanserv {from keyword arguments } {
+global black
+	set black(notlogged) 1
+	unbind RAW - 401 check:chanserv
+}
+
+########################### check expired notes ############################
+
+proc notes:autoexpire {minute hour day month year} {
+	global black
+	set counter 0
+	set file [open $black(notes_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/notes_temp.$timestamp"
+	set tempwrite [open $temp w]
+	set counter 0
+while {[gets $file line] != -1} {
+	set read_type [lindex [split $line] 0]
+if {[string equal -nocase $read_type "INBOX"]} {
+	set read_user [lindex [split $line] 4]
+foreach user [userlist] {
+if {[info exists black(notes:announce:$user)]} {
+	unset black(notes:announce:$user)
+}
+if {[string equal -nocase $user $read_user]} {
+	set tm [lindex [split $line] 5]
+	set read_days [expr [expr [expr [expr [unixtime] - $tm] / 60]] / 1440]
+	set expiretime [string tolower [getuser $user XTRA NOTE_EXPIRE]]
+if {$expiretime == ""} { set expiretime $black(notes:expiretime) }
+if {$read_days >= $expiretime} {
+	continue
+		} else {
+		puts $tempwrite $line
+				}
+			}
+		} 
+	} else {
+		puts $tempwrite $line
+	}
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(notes_file)
+}
+
+###################### delete notes on user remove ###############
+
+proc notes:remove:ondelete {user} {
+	global black
+	set file [open $black(notes_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/notes_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_user [lindex [split $line] 4]
+if {[string equal -nocase $user $read_user]} {
+	continue
+	} else {
+		puts $tempwrite $line
+		}
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(notes_file)
+if {[info exists black(notes:announce:$user)]} {
+	unset black(notes:announce:$user)
+	}
+}
+
+
+########################## Strip codes ###########################
+
+proc strip:all {str} {
+  regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
+  return $str
+}
+
+######################## Check add handle #######################
+
+proc check:handle {user nick host hand chan chan1} {
+	global black
+	set last_user $user
+if {[validuser $user]} {
+	return $user
+}
+	set user [string range $user 0 31]
+if {[validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
+	return $user
+}
+	set user [string range $user 0 11]
+if {[validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
+	return $user
+}
+	set user [string range $user 0 8]
+if {[validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
+	return $user
+	}
+}
+
+######################## return time ###########################
+
+proc return_time_2 {getlang get_time} {
+	global black
+	set seconds [expr $get_time % 60]
+	set days [expr $get_time/86400]
+	set hours [expr [expr $get_time/3600] % 24];
+	set minutes [expr [expr $get_time / 60] % 60]
+
+if {[string length $hours] == "1"} {
+	set hours "0$hours"
+}
+if {[string length $minutes] == "1"} {
+	set minutes "0$minutes"
+}
+if {[string length $seconds] == "1"} {
+	set seconds "0$seconds"
+}
+
+	set output "$days $black(say.$getlang.timeout.4), $hours:$minutes:$seconds"
+if {$get_time <= 0} {
+return 0
+} else {
+return $output
+	}
+}
+
+proc return_reason_time {get_time} {
+	global black
+	set m "m"
+	set d "d"
+	set h "h"
+	set s "s"
+	set days [expr $get_time/86400]
+	set hours [expr [expr $get_time/3600] % 24];
+	set minutes [expr [expr $get_time / 60] % 60]
+	set seconds [expr $get_time % 60]
+if {$days == "0"} {
+if {$hours == "0"} {
+if {$seconds > 0} {
+	return "$minutes$m:$seconds$s"
+} else { return "$minutes$m" }
+		} else { 
+if {$minutes > 0} {
+	return "$hours$h:$minutes$m"
+} else { return "$hours$h" }
+}
+	} else { 
+if {$hours > 0} {
+return "$days$d:$hours$h" 
+		} else { return "$days$d" } 
+	}
+}
+
+proc return_time {getlang get_time} {
+	global black
+if {$get_time >= 31536000} {
+	set yearsfull [expr $get_time/31536000]
+	set years [expr int($yearsfull)]
+	set yearssub [expr 31536000*$years]
+	set totalday [expr $get_time - $yearssub]
+	}
+if {$get_time < 31536000} {
+	set totalday $get_time
+	set years 0
+	}
+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 {$years < 1} {
+	set yearstext ""
+} elseif {$years == 1} {
+	set yearstext "$years $black(say.$getlang.timeout.1) "} {
+	set yearstext "$years $black(say.$getlang.timeout.2) "
+}
+if {$days < 1} {
+	set daystext ""
+} elseif {$days == 1} {
+	set daystext "$days $black(say.$getlang.timeout.3) "
+} else {
+	set daystext "$days $black(say.$getlang.timeout.4) "
+}
+if {$hours < 1} {
+	set hourstext ""
+} elseif {$hours == 1} {
+	set hourstext "$hours $black(say.$getlang.timeout.5) "
+} else {
+	set hourstext "$hours $black(say.$getlang.timeout.6) "
+}
+if {$mins < 1} {
+	set minstext ""
+} elseif {$mins == 1} {
+	set minstext "$mins $black(say.$getlang.timeout.7)"
+} else {
+	set minstext "$mins $black(say.$getlang.timeout.8)"
+}
+	set output $yearstext$daystext$hourstext$minstext
+if {$get_time < 60} {
+set output "$get_time $black(say.$getlang.timeout.9)"
+}
+	return $output
+}
+
+############################## login check ##############################
+
+
+proc black:login:yes {nick host hand text {dest ""}} {
+	global black
+if {$nick == $black(chanserv)} {
+	set lang [string tolower $black(default_lang)]
+if {[info exists black(logged)]} { return }
+	set black(logged) 1
+	blacktools:tell:dcc login.5 ""
+	}
+}
+
+proc black:login:no:failed {nick host hand text {dest ""}} {
+	global black
+if {$nick == $black(chanserv)} {
+	set black(notlogged:failed) 1
+	set black(notlogged) 1
+	blacktools:tell:dcc login.4 ""
+	}		
+}
+
+proc black:login:max {nick host hand text {dest ""}} {
+	global black
+if {$nick == $black(chanserv)} {
+	set black(notlogged:failed) 1
+	set black(notlogged) 1
+	blacktools:tell:dcc login.6 ""
+	}		
+}
+
+proc black:login:no:user {nick host hand text {dest ""}} {
+	global black
+if {$nick == $black(chanserv)} {
+	set black(notlogged:failed) 1
+	set black(notlogged) 1
+	blacktools:tell:dcc login.7 ""
+	}		
+}
+
+proc black:login:no:invalid {nick host hand text {dest ""}} {
+	global black
+if {$nick == $black(chanserv)} {
+	set black(notlogged:invalid) 1
+	set black(notlogged) 1
+	blacktools:tell:dcc login.8 ""
+	}
+}
+
+proc timer:login:check {min hour day mon year} {
+	global black
+if {$black(autologin) == "0"} {
+	return
+}
+if {[info exists black(logged)]} { return }
+if {[info exists black(notlogged)] } {
+	loginpublic my
+	}
+}
+
+############################ nickserv check #########################
+
+proc black:nickserv:yes {nick host hand text {dest ""}} {
+	global black
+if {[string equal -nocase $nick "NICKSERV"]} {
+	putserv "PRIVMSG $black(nickserv:host) :RELEASE $nick $black(nickserv:pass)"
+	putserv "PRIVMSG $black(nickserv:host) :IDENTIFY $black(nickserv:pass)"
+	blacktools:tell:dcc login.9 ""
+	}
+}
+
+proc black:nickserv:identify {nick host hand text {dest ""}} {
+	global black
+if {[string equal -nocase $nick "NICKSERV"]} {
+	set black(identified) 1
+	blacktools:tell:dcc login.10 ""
+	}
+}
+
+proc black:nickserv:wrongpass {nick host hand text {dest ""}} {
+	global black
+	set lang [string tolower $black(default_lang)]
+if {[string equal -nocase $nick "NICKSERV"]} {
+	set black(notidentified) $black(say.$lang.login.13)
+	blacktools:tell:dcc login.11 ""
+	}			
+}
+
+proc black:nickserv:registered {} {
+	global black
+if {[string equal -nocase $nick "NICKSERV"]} {	
+	set black(notidentified) $black(say.$lang.login.15)
+	blacktools:tell:dcc login.16 ""
+	}
+}
+
+proc black:nickserv:release {nick host hand chan newnick} {
+	global black botnick
+if {$black(nickserv:identify) == "1"} {
+if {[isbotnick $nick] && [info exists black(identified)]} {
+	putserv "PRIVMSG $black(nickserv:host) :RELEASE $nick $black(nickserv:pass)"
+		}
+	}
+}
+
+########################## user suspend process check ###############
+
+proc s:remove:ondelete {user} {
+	global black
+	set file [open $black(s_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/s_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_user [lindex [split $line] 1]
+if {[string equal -nocase $user $read_user]} {
+	continue
+	} else {
+		puts $tempwrite $line
+		}
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(s_file)
+}
+
+proc s:status {} {
+	global black
+	set entry_exists 0
+	set file [open $black(s_file) "r"]
+while {[gets $file line] != -1} {
+	set entry_exists 1
+}
+	close $file
+	return $entry_exists
+}
+
+proc s:process:timer {} {
+	global black
+	set entry_exists 0
+	set file [open $black(s_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/s_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set entry_exists 1
+	set tm [lindex [split $line] 2]
+	set suspend_chan [lindex [split $line] 0]
+	set suspend_user [lindex [split $line] 1]
+if {[expr $tm - [unixtime]] < 0} {
+	suspend:delete:action $suspend_user $suspend_chan
+	continue
+	} else {
+	puts $tempwrite $line
+	}
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(s_file)
+if {$entry_exists == "0"} {
+if {[info exists black(s:timer_start)]} {
+	unset black(s:timer_start)
+		}
+	}
+}
+
+proc suspend:delete:action {user chan} {
+	global black username
+	set flags "-|-q"
+	set gl_flags "-q"
+if {[string equal -nocase $chan "GLOBAL"]} {
+	chattr $user $gl_flags
+} else {
+	chattr $user $flags $chan
+	}
+}
+
+proc check:if:bind {bind type} {
+	set found_it 0
+	set binds [binds raw]
+foreach b $binds {
+	if {$bind == [lindex $b 4]} {
+	unbind RAW - $type $bind
+		}
+	}
+}
+
+
+############################# no option ########################
+
+proc check_option {nick host hand chan chan1 type type1 cmd} {
+	global black
+	if {$cmd == ""} { set cmd "set" }
+if {$type == ""} {
+switch $type1 {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+
+	return 1
+}
+
+########################### first join ########################
+
+proc first:join {nick host hand chan} {
+	global black botnick
+if {[string equal -nocase $nick $botnick]} {	
+if {![info exists black(firstjoin:$chan)]} {
+	blacktools:timers:load $chan
+	set black(firstjoin:$chan) 1
+		}
+if {![info exists black(firstjoin)]} {
+	blacktools:timers:load "none"
+	set black(firstjoin) 1
+		}
+	blacktools:settings:save $chan 0
+	}
+}
+
+########################### join count ########################
+
+
+proc join:count {nick host hand chan} {
+	global black botnick
+if {[string equal -nocase $nick $botnick]} {
+if {[info exists black(abuse:$chan)]} {
+	unset black(abuse:$chan)
+	}
+if {[info exists black(abuse:count:$chan)]} {
+	unset black(abuse:count:$chan)
+	}
+}
+	set jointime [setting:get $chan jointime]
+if {$jointime == ""} {
+	setting:set $chan jointime [unixtime]
+}
+	set current [setting:get $chan joincount]
+if {$current == ""} { set current 0 }
+	set current [expr $current + 1]
+	setting:set $chan joincount $current
+}
+
+######################## Chan Flood Protection #######################
+
+proc flood:join:protection {nick host hand chan} {
+	global black
+if {[setting:get $chan greet] || [setting:get $chan antijoinflood] || [setting:get $chan guestnick] || [setting:get $chan antispam]} {
+	set joinflood [setting:get $chan joinflood]
+if {$joinflood == ""} {set joinflood $black(joinflood:protect)}
+	set number [scan $joinflood %\[^:\]]
+	set time [scan $joinflood %*\[^:\]:%s]
+	
+	foreach tmr [utimers] {
+if {[string match "*black(countflood:join:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {[info exists black(turnOnFlood:$chan)]} {
+	return
+}
+
+if {![info exists black(countflood:join:$chan)]} { 
+	set black(countflood:join:$chan) 0 
+}
+	set black(countflood:join:$chan) [expr $black(countflood:join:$chan) + 1]
+	utimer $time [list remove:flood:join $chan]
+
+if {$black(countflood:join:$chan) >= $number} {
+	set black(turnOnFlood:$chan) 1
+	utimer 60 [list unset black(turnOnFlood:$chan)]
+	return
+		}
+	}	
+}
+
+proc remove:flood:host {host chan} {
+	global black
+if {[info exists black(countflood:$host:$chan)]} {
+unset black(countflood:$host:$chan)
+	}
+}
+
+proc remove:flood:join {chan} {
+	global black
+if {[info exists black(countflood:join:$chan)]} {
+	unset black(countflood:join:$chan)
+	}
+}
+
+proc remove:seenflood:host {the_host chan} {
+	global black
+if {[info exists black(flood:$the_host:$chan)]} {
+	unset black(flood:$the_host:$chan)
+	}	
+}
+
+########################## max uptime ######################
+
+proc maxuptime {min hour day mon year} {
+	global black uptime {server-online}
+if {![file exists $black(uptime_file)]} {
+	set file [open $black(uptime_file) w]
+	close $file
+}
+	set online [expr [unixtime] - ${server-online}]
+	set read_uptime [expr [unixtime] - $uptime]
+	set file [open $black(uptime_file) "r"]
+	set data [read -nonewline $file]
+	close $file
+	set get_uptime 0
+	set get_online 0
+	set get_uptime [lindex $data 0]
+	set get_online [lindex $data 1]
+
+if {$read_uptime > $get_uptime} {
+	set add_uptime $read_uptime
+} else {
+	set add_uptime $get_uptime
+}
+if {${server-online} != "0"} {
+if {$online > $get_online} {
+	set add_online $online
+} else {
+	set add_online $get_online
+}
+} else {
+	set add_online $get_online
+}
+	set file [open $black(uptime_file) "w"] 
+	puts $file "$add_uptime $add_online"
+	close $file
+}
+
+############################## VERSION ################################
+
+proc blackreply {nick host hand dest key text} {
+global ctcp-version black
+if {[string equal -nocase $key "version"]} {
+	set {ctcp-version} "Using \002$black(name) $black(vers)\002 coded by \002$black(author)\002 ($black(site))"
+	}
+}
+
+########################### Return Mask ##############################
+
+proc return_mask {type uhost user} {
+	global black
+	set ident [lindex [split $uhost "@"] 0]
+	set host [lindex [split $uhost @] 1]
+switch $type {
+
+1 {
+	return "*!*@$host"
+}
+
+2 {
+	return "*!$ident@$host"
+}
+
+3 {
+	return "$user!$ident@$host"
+}
+4 {
+	return "$user!*@*"
+}
+5 {
+	return "*!$ident@*"
+		}
+	}
+}
+
+########################### Return USERHOST Mask ####################
+
+proc ub:get:host {from keyword arguments} {
+	global black
+	set hosts [lindex [split $arguments] 1]
+	set hostname [lindex [split $hosts "="] 1]
+	regsub {^[-+]} $hostname "" mask
+	set nickname [lindex [split $hosts "="] 0]
+	regsub {^:} $nickname "" nick
+	set fullmask "$nick!$mask"
+	set user $::uuser
+	set mask $fullmask
+	set nick $::unick
+	set hand $::uhand
+	set host $::uhost
+	set chan $::uchan
+	set chan1 $::uchan1
+	set type $::utype
+	set gl $::ugl
+	set cmd $::ucmd
+	set link $::ulink
+	set prv $::prv
+if {$hosts == ":"} {
+	set mask $user
+}
+	set vhost [lindex [split $mask @] 1]
+if {[string equal -nocase $gl "1"] && [matchattr $hand nm]} {
+	blacktools:dns:ub $user $mask $nick $hand $host $vhost $chan $chan1 $type "1" $cmd "1" "" "" $prv
+} elseif {[string equal -nocase $link "1"] && [matchattr $hand nm]} {
+	blacktools:dns:ub $user $mask $nick $hand $host $vhost $chan $chan1 $type "" "ub" "1" "1" "" $prv
+} else {
+	blacktools:dns:ub $user $mask $nick $hand $host $vhost $chan $chan1 $type "" $cmd "1" "" "" $prv
+	}	
+	check:if:bind "ub:get:host" "302"
+}
+
+proc sb:get:host {from keyword arguments} {
+	global black
+	set hosts [lindex [split $arguments] 1]
+	set hostname [lindex [split $hosts "="] 1]
+	regsub {^[-+]} $hostname "" mask
+	set nickname [lindex [split $hosts "="] 0]
+	regsub {^:} $nickname "" nick
+	set fullmask "$nick!$mask"
+	set what $::swhat
+	set bhost $fullmask
+	set nick $::snick
+	set hand $::shand
+	set host $::shost
+	set chan $::schan
+	set chan1 $::schan1
+	set type $::stype
+	set cmd $::scmd
+if {$hosts == ":"} {
+	set bhost "-"
+}
+	sb:process $bhost $what $nick $hand $host $chan $chan1 $type "sb" "1"
+	check:if:bind "sb:get:host" "302"
+}
+
+proc userhost:get:host {from keyword arguments} {
+	global black
+	set hosts [lindex [split $arguments] 1]
+	set hostname [lindex [split $hosts "="] 1]
+	regsub {^[-+]} $hostname "" mask
+	set nick $::bnick
+	set txt $::getnick
+	set hand $::userhand
+	set host $::userhost
+	set chan $::userchan
+	set chan1 $::userchan1
+	set type $::usertype
+	set bantime $::userbantime
+	set cmd $::usercmd
+	set rs $::userrs
+	set gl $::usergl
+if {$hosts == ":"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotexist $txt
+} else {
+	bancmds:process $txt $mask $nick $hand $host $chan $chan1 $type $bantime $cmd $rs $gl
+	}
+	check:if:bind "userhost:get:host" "302"
+}
+
+proc userhost:act {why nick hand host chan chan1 type bantime cmd rs gl} {
+	global black
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set cmd_status [btcmd:status $chan $gethand $cmd 0]
+	set yes_whois 0
+	set why [strip:all $why]
+if {$cmd_status == "1"} { 
+	return 
+}
+
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$why == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+
+if {[validchan $chan] && ![onchan $why $chan] && $gl != "1"} {
+	set yes_whois 1
+}
+if {$gl == "1"} {
+	set yes_whois 1
+}
+
+if {$cmd != "troll"} {
+if {(![regexp {\*} $why]) && $yes_whois == "1"} {
+	putserv "USERHOST :$why"
+	bind RAW - 302 userhost:get:host
+	set ::bnick $nick
+	set ::getnick $why
+	set ::userhand $hand
+	set ::userhost $host
+	set ::userchan $chan
+	set ::userchan1 $chan1
+	set ::usertype $type
+	set ::userbantime $bantime
+	set ::usercmd $cmd
+	set ::userrs $rs
+	set ::usergl $gl
+	return
+	}
+}
+	bancmds:process $why $why $nick $hand $host $chan $chan1 $type $bantime $cmd $rs $gl	
+}
+
+########################### bancmds return host #######################
+
+proc return_host_num {cmd chan host} {
+	global black
+if {$cmd == "b:gl"} {
+	return [get:banmask "$cmd" $chan]
+}
+switch [string tolower $cmd] {
+
+topwords {
+	set mask [get:mask "topwords" $chan]
+	set check_webchat [check:webchat $host]
+if {$mask == "1" && $check_webchat == "1"} {
+		return "5"
+	} else {
+		return $mask
+	}
+}
+
+hello {
+	set mask [get:mask "hello" $chan]
+	set check_webchat [check:webchat $host]
+if {$mask == "1" && $check_webchat == "1"} {
+		return "5"
+	} else {
+		return $mask
+	}
+}
+
+mb {
+	return "5"
+}
+
+clonescan {
+	return 1
+}
+
+default {
+	set mask [get:banmask $cmd $chan]
+	set check_webchat [check:webchat $host]
+if {$mask == "1" && $check_webchat == "1"} {
+		return "5"
+			} else {
+		return $mask
+			}			
+		}
+	}
+}
+
+proc check:webchat {host} {
+ global black
+	set webchat_found 0
+	set host "*!$host"
+foreach h $black(webchat_hosts) {
+if {[string match -nocase $h $host]} {
+	set webchat_found 1
+	break
+	}
+}
+	return $webchat_found
+}
+
+########################## bancmds process ###########################
+
+proc bancmds:process {user mask nick hand host chan chan1 type bantime cmd rs gl} {
+	global black botnick
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set comment ""
+	set cmd_status [btcmd:status $chan $gethand $cmd 0]
+if {$cmd_status == "1"} { 
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set show_user $user
+	set handle [nick2hand $user]
+if {[matchattr $gethand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $gethand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {![validchan $chan] && $gl == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {$gl != "1"} {
+	set massban [check:massban $mask $chan]
+if {$massban == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 b.9 none
+	return
+	}
+}
+
+if {[isbotnick $user]} {
+	return
+}
+if {$gl != "1"} {
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+	}
+}
+if {$gl != "1"} {
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+	}
+} else {
+	if {[matchattr $handle $black(glflags)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+	}
+}
+	set reason_cmds "b stick black mb"
+if {$rs != "" && [lsearch -exact $reason_cmds $cmd] > -1} {
+	set getreason $rs
+} else {
+if {$rs != ""} {
+if {[regexp {(-comment)} $rs]} {
+	set split_it [wsplit $rs "-comment"]
+} elseif {[regexp {(-com)} $rs]} {
+	set split_it [wsplit $rs "-com"]
+} elseif {[regexp {(-c)} $rs]} {
+	set split_it [wsplit $rs "-c"]
+	}
+	set comment [concat [lindex $split_it 1]]
+}
+	set getreason [setting:get $chan $cmd-reason]
+}
+
+if {$getreason == ""} {
+	set getreason $black(say.$getlang.$cmd.5)
+if {$cmd == "b"} {
+	set len [llength $getreason] 
+    set random [expr int(rand()*$len)] 
+    set getreason [lindex $getreason $random]
+	}
+}
+
+if {$comment != ""} {
+	set getreason "$getreason -c $comment"
+}
+if {![string equal -nocase "$cmd" "black"] && ![string equal -nocase "$cmd" "bl"] && ![string equal -nocase "$cmd" "troll"] && ![string equal -nocase "$cmd" "b"]} {
+	set getbantime [setting:get $chan $cmd-bantime]
+} else { set getbantime 0 }
+
+if {[string equal -nocase "$cmd" "b"] || [string equal -nocase "$cmd" "stick"]} {
+if {[time_return_minute $bantime] == [time_return_minute $black($cmd:bantime)]} {
+	set setbantime [time_return_minute [setting:get $chan $cmd-bantime]]
+if {$setbantime == "-1"} {
+	set getbantime $bantime
+		} else {
+	set getbantime $setbantime
+		}
+	} else { set getbantime "" }
+}
+	
+if {$getbantime == ""} { 
+	set getbantime $bantime
+}
+
+if {$cmd == "troll"} {
+	set getbantime $bantime
+}
+
+if {$gl != "1"} {
+if {![onchan $user $chan] && $cmd == "troll"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_user
+	return
+	}
+if {[regexp {\*} $mask] && $cmd == "mb"} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+		}
+	return
+	}
+}
+
+if {$gl != "1"} {
+if {[onchan $user $chan]} {
+	set mask [return_mask [return_host_num $cmd $chan [getchanhost $user $chan]] [getchanhost $user $chan] $user]
+} elseif {![regexp {\*} $mask]} {
+	set mask [return_mask [return_host_num $cmd $chan $mask] $mask $user]
+}
+} else {
+if {![regexp {\*} $mask]} {
+	set mask [return_mask [return_host_num "b:gl" $chan $mask] $mask $user]
+	}
+}
+
+if {$gl != "1"} {
+	set list [userlist $black(exceptflags) $chan]
+foreach u $list {
+ set hosts [getuser $u hosts]
+foreach h $hosts {
+if {[string match -nocase "$mask" $h]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+			}	
+		}
+	}
+if {$cmd == "stick"} {
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime BANS($chan) "1" $cmd $nick $user $host
+	return
+	}
+if {$cmd == "troll"} {
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime BANS($chan) "2" $cmd $nick $user $host
+	return
+	}
+if {$cmd == "bot" && [onchan $user $chan]} {
+	set getreason "$getreason - $black(say.$getlang.$cmd.8)"
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime BANS($chan) "3" $cmd $nick $user $host
+	return
+	}
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime BANS($chan) "" $cmd $nick $user $host
+} elseif {$gl == "2"} {
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime "link" "" $cmd $nick $user $host
+} elseif {$gl == "1"} {
+	blacktools:banner:3 $mask $hand $chan $chan1 $getreason $getbantime "gl" "" $cmd $nick $user $host
+	}
+}
+
+proc check:massban {host chan} {
+	global black
+	set totuser [llength [chanlist $chan]]
+	set counter 0
+foreach user [chanlist $chan] {
+	set gethost "$user![getchanhost $user $chan]"
+if {[string match -nocase $host $gethost]} {
+	set counter [expr $counter + 1]
+	}
+}
+if {[expr 100 * $counter / $totuser] > 80} {
+	return 1
+}
+	return 0
+}
+
+
+################################## Join Auto Ban #############################
+
+proc reason:details:module {nick host hand chan} {
+global botnick black
+	set host "$nick!$host"
+if {![validchan $chan]} {
+	return
+}
+	set vhost [lindex [split $host @] 1]
+	blacktools:dns:join $nick $host $vhost $hand $chan
+}
+
+proc blacktools:join:autoban {nick host vhost hand chan fullhost} {
+	global black
+	set foundblacktools_ban 0
+	set rest_host [lindex [split $fullhost @] 0]
+	set fulldns "$rest_host@$host"
+if {$host == ""} {set fulldns $fullhost}
+	chanserv:ignore_remove
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set xban 0
+	set getcount [setting:get $chan kickcount]
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+if {[setting:get $chan xonly]} {
+	set xban 1
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxtime == ""} {
+	set getxtime $black(chanserv:bantime)
+}
+if {$getxlevel == ""} {
+	set getxlevel $black(chanserv:banlevel)
+	}
+}
+	set foundgl 0
+	set getcount [setting:get $chan kickcount]
+if {[validuser $hand]} {
+if {[matchattr $hand $black(banflag)]} {
+	set hosts [getuser $hand hosts]
+	set cidr 0
+foreach h $hosts {
+if {[regexp {[/]} $h]} {
+	set read_ip [lindex [split $h @] 1]
+	set theip [lindex [split $fullhost @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+if {$cidr_ip == "1"} {
+	set read_rest_ip [lindex [split $h @] 0]
+	set read_theip [lindex [split $fullhost @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+			}
+		}
+	}
+}
+if {[string match -nocase $h $fullhost] || [string match -nocase $h $fulldns] || $cidr == "1"} {
+	set check_except [blacktools:ban:chanexempt $fullhost $fulldns $chan]
+if {$check_except == "0"} {
+	add:ban $h [join [getuser $hand XTRA BLACK_REASON]]
+				}
+			}
+		}
+	}
+foreach b [blacktools:banlist:ban $chan] {
+	set cidr 0
+	set type [lindex [split $b] 0]
+	set read_chan [lindex [split $b] 2]
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[regexp {[/]} $real_read_host]} {
+	set read_ip [lindex [split $real_read_host @] 1]
+	set theip [lindex [split $fullhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_ip_dns [ipcidr $read_ip $theip_dns]
+if {$cidr_ip == "1" || $cidr_ip_dns == "1"} {
+	set read_rest_ip [lindex [split $fullhost @] 0]
+	set read_theip [lindex [split $real_read_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {([string match -nocase $fulldns $real_read_host] || [string match -nocase $real_read_host $fulldns]) || ([string match -nocase $fullhost $real_read_host] || [string match -nocase $real_read_host $fullhost]) || ($cidr == "1")} {
+	set check_except [blacktools:ban:chanexempt $fullhost $fulldns $chan]
+if {$check_except == "1"} {
+	break
+}
+	set foundblacktools_ban 1
+	set num [lindex [split $b] 1]
+	set read_reason [join [lrange [split $b] 9 end]]
+	set read_reason [encoding convertfrom utf-8 $read_reason]
+	set expire [lindex [split $b] 5]
+	set read_handle [split [lindex [split $b] 4] ":"]
+	set gethand [lindex [split $read_handle] 0]
+
+	set show_reason [blacktools:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {$expire == "0"} {
+	set show_reason [blacktools:bl:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {[setting:get $chan showhandle]} {
+if {![string equal -nocase $gethand "BADCHAN"] && ![string equal -nocase $gethand "badident"] && ![string equal -nocase $gethand "badnick"] && ![string equal -nocase $gethand "antibadquitpart"] && ![string equal -nocase $gethand "antichanflood"] && ![string equal -nocase $gethand "badrealname"] && ![string equal -nocase $gethand "antispam"] && ![string equal -nocase $gethand "badhost"] && ![string equal -nocase $gethand "antipub"] && ![string equal -nocase $gethand "antijoinflood"] && ![string equal -nocase $gethand "antinotice"] && ![string equal -nocase $gethand "antictcp"] && ![string equal -nocase $gethand "antirepeat"] && ![string equal -nocase $gethand "antibold"] && ![string equal -nocase $gethand "anticolor"] && ![string equal -nocase $gethand "antiunderline"] && ![string equal -nocase $gethand "antilongtext"] && ![string equal -nocase $gethand "antibadword"] && ![string equal -nocase $gethand "anticaps"] && ![string equal -nocase $gethand "nickflood"] && ![string equal -nocase $gethand "inviteban"] && ![string equal -nocase $gethand "private"] && ![string equal -nocase $gethand "clonescan"] && ![string equal -nocase $gethand "repetitivechars"]} {
+	set show_reason "\[BT\] ($gethand) blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)" 
+} else {
+		set show_reason "\[BT\] blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)" 
+	}
+} else {
+	set show_reason "\[BT\] blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)"
+	}
+}
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan $read_host $getxtime $getxlevel $show_reason"
+		} else {
+	putquick "MODE $chan +b $read_host"
+	putserv "KICK $chan $nick :$show_reason"
+			}
+		break
+	}
+}
+
+foreach b [blacktools:banlist:gl] {
+	set cidr 0
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[regexp {[/]} $real_read_host]} {
+	set read_ip [lindex [split $real_read_host @] 1]
+	set theip [lindex [split $fullhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_ip_dns [ipcidr $read_ip $theip_dns]
+if {$cidr_ip == "1" || $cidr_ip_dns == "1"} {
+	set read_rest_ip [lindex [split $fullhost @] 0]
+	set read_theip [lindex [split $real_read_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {([string match -nocase $fullhost $real_read_host] || [string match -nocase $real_read_host $fullhost]) || ($cidr == "1")} {
+	set check_except [blacktools:ban:exempt $fullhost]
+if {$check_except == "1"} {
+	break
+}
+	set foundblacktools_ban 1
+	set num [lindex [split $b] 1]
+	set read_reason [join [lrange [split $b] 9 end]]
+	set read_reason [encoding convertfrom utf-8 $read_reason]
+	set expire [lindex [split $b] 5]
+	set read_handle [lindex [split $b] 4]
+	set show_reason [blacktools:setreason $chan $read_reason $read_handle $expire "" "1" $num]
+if {$expire == "0"} {
+	set show_reason [blacktools:bl:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {[setting:get $chan showhandle]} {
+	set show_reason "\[BT\] ($read_handle) (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)" 
+} else {
+	set show_reason "\[BT\] (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)"
+	}
+}
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan $read_host $getxtime $getxlevel $show_reason"
+		} else {
+	putquick "MODE $chan +b $read_host"
+	putserv "KICK $chan $nick :$show_reason"
+			}
+		break
+	}
+}
+
+foreach b [blacktools:gaglist $chan] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {([string match -nocase $fulldns $real_read_host] || [string match -nocase $real_read_host $fulldns]) || ([string match -nocase $fullhost $real_read_host] || [string match -nocase $real_read_host $fullhost])} {
+if {[ischanban $read_host $chan]} {
+	continue
+}
+	set expire [lindex [split $b] 5]
+	set read_time [return_time $getlang [expr $expire - [unixtime]]]
+	set replace(%minute%) $read_time
+	set replace(%gag%) $nick
+	pushmode $chan +b $read_host
+if {[isop $nick $chan]} {
+	pushmode $chan -o $nick
+}
+if {[isvoice $nick $chan]} {
+	pushmode $chan -v $nick
+}
+	set text [black:color:set "" $black(say.$getlang.gag.1)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	putserv "PRIVMSG $chan :$reply"
+	break
+	}
+}
+
+if {$foundblacktools_ban == 0} {
+foreach ban [banlist] {
+if {[string match -nocase [string tolower [lindex $ban 0]] $host]} {
+	set foundgl 1
+	set reason [lindex [split $ban] 1]
+	set expire [lindex [split $ban] 2]
+	set reason [join [lindex [split $ban] 1]]
+	set bywho [lindex [split $ban] 5]
+	set show_reason [blacktools:setreason $chan $reason $bywho $expire "" "1" "0"]
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan [lindex $ban 0] $getxtime $getxlevel $show_reason"
+		} else {
+	putquick "MODE $chan +b [lindex $ban 0]"
+	putserv "KICK $chan $nick :$show_reason"
+		}
+		break
+	}
+}
+
+if {$foundgl == "0"} {
+foreach ban [banlist $chan] {
+if {[string match -nocase [string tolower [lindex $ban 0]] $host]} {
+	set reason [lindex $ban 1]
+	set expire [lindex $ban 2]
+	set reason [join [split [lindex $ban 1]]]
+	set bywho [split [lindex $ban 5]]
+	set show_reason [blacktools:setreason $chan $reason $bywho $expire $getcount "0" "0"]
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan [lindex $ban 0] $getxtime $getxlevel $show_reason"
+} else {
+	putquick "MODE $chan +b [lindex $ban 0]"
+	putserv "KICK $chan $nick :$show_reason"
+					}
+					break
+				}
+			}
+		}		
+	}
+}
+
+proc blacktools:ban:chanexempt {mask dns chan} {
+	global black
+	set check_it [matchexempt $mask $chan]
+if {$check_it == "1"} {
+	return $check_it
+} else {
+	set check_it [matchexempt $mask]
+}
+if {$check_it == "1"} {
+	return $check_it
+}
+	set check_it [matchexempt $dns $chan]
+if {$check_it == "1"} {
+	return $check_it
+} else {
+	set check_it [matchexempt $dns]
+}
+if {$check_it == "1"} {
+	return $check_it
+	}
+	return $check_it
+}
+
+proc blacktools:ban:exempt {mask} {
+	global black
+	set check_it [matchexempt $mask]
+	return $check_it
+}
+
+############################ Ban Procedure #########################
+
+proc blacktools:auto:remove {host chan} {
+	global black
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(bans_file).new.$timestamp"
+	set tempwrite [open $temp w]
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set read_host [lindex [split $line] 3]
+	set read_chan [lindex [split $line] 2]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {([string match -nocase $host $real_read_host] || [string equal -nocase $host $real_read_host]) && [string equal -nocase $read_chan $chan]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+    file rename -force $temp $black(bans_file)
+}
+
+proc blacktools:delban {host chan global gag} {
+	global black
+
+if {$global == "1"} {
+	set chan "GLOBAL"
+} else {
+if {![validchan $chan]} {
+	return
+	}
+}
+if {$gag == "1"} {
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(bans_file).new.$timestamp"
+	set tempwrite [open $temp w]
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+if {$line != ""} {
+	set read_type [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 2]
+	set read_host [lindex [split $line] 3]
+if {[string match -nocase $host $read_host] && [string equal -nocase $chan $read_chan] && [string equal -nocase "GAG" $read_type]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+}
+	close $tempwrite
+    file rename -force $temp $black(bans_file)
+	return
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(bans_file).new.$timestamp"
+	set tempwrite [open $temp w]
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+if {$line != ""} {
+	set read_chan [lindex [split $line] 2]
+	set read_host [lindex [split $line] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {([string match -nocase $host $real_read_host] || [string match -nocase $real_read_host $host]) && [string equal -nocase $chan $read_chan]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+}
+	close $tempwrite
+    file rename -force $temp $black(bans_file)
+}
+
+proc blacktools:banlist {chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "* [string tolower $chan] *"]
+	return $banlist
+}
+
+proc blacktools:banlist:ban {chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "BAN * [string tolower $chan] *"]
+	set sort [lsort -integer -decreasing -index 6 $banlist]
+	return $sort
+}
+
+proc blacktools:gaglist {chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "GAG * [string tolower $chan] *"]
+	return $banlist
+}
+
+
+proc blacktools:banlist:gl {} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "* GLOBAL *"]
+	return $banlist
+}
+
+proc blacktools:banlist:all {} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "*"]
+	return $banlist
+}
+
+proc blacktools:banlist:lastid {} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set banlist [lsearch -all -inline $data "* * * * * *"]
+if {$banlist != ""} {
+	set sort [lsort -integer -decreasing -index 1 $banlist]
+	return [lindex $sort 0]
+	} else {
+	return 0
+	}
+}
+
+proc blacktools:sticky {host chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set bancheck [lsearch -all -inline $data "* [string tolower $chan] $host *"]
+if {$bancheck != ""} {
+	return [lindex [split $bancheck] 7]
+	}
+	return
+}
+
+proc blacktools:isban {host chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set bancheck [lsearch -all -inline $data "BAN * [string tolower $chan] $host *"]
+if {$bancheck != ""} {
+	return 1
+	} else {
+	return 0
+	}
+}
+
+proc blacktools:isgag {host chan} {
+	global black
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set bancheck [lsearch -all -inline $data "GAG * [string tolower $chan] $host *"]
+if {$bancheck != ""} {
+	set expire [lindex [split $bancheck] 5]
+	set dif [expr $expire - [unixtime]]
+if {$dif > 0} {
+	return 1
+} else {
+	return 0
+		}
+	} else {
+	return 0
+	}
+}
+
+proc blacktools:addban:gl {nick host hand chan bantime type sticky global reason id} {
+	global black
+	set chan1 $chan
+	set sec_bantime [expr $bantime * 60]
+	set unixtime [unixtime]
+if {$bantime != "0"} {
+	set bantime [expr $unixtime + $sec_bantime]
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(bans_file).new.$timestamp"
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set lsearch [lsearch -glob [string tolower $data] [string tolower "* GLOBAL $host *"]]
+if {$lsearch > -1} {	
+	set tempwrite [open $temp w]
+foreach line $data {
+if {$line != ""} {
+	set read_gl [lindex [split $line] 2]
+	set read_host [lindex [split $line] 3]
+if {[string match -nocase $host $read_host] && [string equal -nocase "GLOBAL" $read_gl]} {	
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+}
+	close $tempwrite
+    file rename -force $temp $black(bans_file)
+}
+	blacktools:ban:put $nick $host $hand $chan $bantime $type $sticky $global $reason $id
+}
+
+proc blacktools:addban {nick host hand chan chan1 bantime type sticky global reason notfound cmd type banned prv id} {
+	global black botnick
+	chanserv:ignore_remove
+	set read_num 0
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set gettype [lindex $split_hand 1]
+if {$gettype == ""} {
+	set hand [string map {":" ""} $hand]
+} else {
+	set length_type [llength [split $gettype]]
+if {$length_type > 1} {
+	set gettype [string map {" " "%"} $gettype]
+	}
+	set hand "$gethand:$gettype"
+}
+	set sec_bantime [expr $bantime * 60]
+	set unixtime [unixtime]
+	set accdenied 0
+	set xban 0
+	set getcount [setting:get $chan kickcount]
+	set show_reason $reason
+if {$bantime != "0"} {
+	set bantime [expr $unixtime + $sec_bantime]
+}
+if {![string equal -nocase $gethand "BADCHAN"] && ![string equal -nocase $gethand "badident"] && ![string equal -nocase $gethand "badnick"] && ![string equal -nocase $gethand "antibadquitpart"] && ![string equal -nocase $gethand "antichanflood"] && ![string equal -nocase $gethand "antispam"] && ![string equal -nocase $gethand "badhost"] && ![string equal -nocase $gethand "inviteban"] && ![string equal -nocase $gethand "private"] && ![string equal -nocase $gethand "clonescan"]} {
+	set show_reason [blacktools:setreason $chan $reason $gethand $bantime $getcount "0" $id]
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(bans_file).new.$timestamp"
+	set file [open $black(bans_file) r]
+	set size [file size $black(bans_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set tempwrite [open $temp w]
+foreach line $data {
+if {$line != ""} {
+	set read_chan [lindex [split $line] 2]
+	set read_host [lindex [split $line] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {([string match -nocase $host $real_read_host] || [string match -nocase $real_read_host $host]) && [string equal -nocase $chan $read_chan]} { 
+	set read_num [lindex [split $line] 1]
+	set read_time [lindex [split $line] 5]
+	set read_stick [lindex [split $line] 7]
+	set bywho [lindex [split $line] 4]
+	set split_bywho [split $bywho ":"]
+	set level [lindex $split_bywho 1]
+if {![string equal -nocase $gethand "BADCHAN"] && ![string equal -nocase $gethand "badident"] && ![string equal -nocase $gethand "badnick"] && ![string equal -nocase $gethand "antibadquitpart"] && ![string equal -nocase $gethand "antichanflood"] && ![string equal -nocase $gethand "badrealname"] && ![string equal -nocase $gethand "antispam"] && ![string equal -nocase $gethand "badhost"] && ![string equal -nocase $gethand "inviteban"] && ![string equal -nocase $gethand "private"] && ![string equal -nocase $gethand "clonescan"]} {
+	set show_reason [blacktools:setreason $chan $reason $gethand $read_time $getcount "0" $id]
+}
+	set check [blacktools:check:levelub $gethand $chan $level]
+if {$check == "-1"} {
+	puts $tempwrite $line
+	set accdenied 1
+	continue
+}
+if {[matchattr $gethand -|O $chan] && ($read_time == "0")} {
+	puts $tempwrite $line
+	set accdenied 1
+	continue
+}
+if {[matchattr $gethand -|OAS $chan] && ($read_stick == "1")} {
+	puts $tempwrite $line
+	set accdenied 1
+	continue
+}	
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+}
+	close $tempwrite
+    file rename -force $temp $black(bans_file)
+if {$accdenied == "0"} {
+if {$cmd == "b" && $type != "gl"} {
+if {![setting:get $chan xonly]} {
+if {$prv == "prv"} {
+	blacktools:tell $nick $prv $hand $chan $chan1 b.7 none
+} else {
+	blacktools:tell $nick "" $hand $chan $chan1 b.7 none
+		}
+	}
+}
+if {$notfound == "1"} {
+if {[setting:get $chan xonly]} {
+	set xban 1
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxtime == ""} {
+	set getxtime $black(chanserv:bantime)
+}
+if {$getxlevel == ""} {
+	set getxlevel $black(chanserv:banlevel)
+	}
+}
+	set show_reason [blacktools:rem_comment_ban $show_reason]
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+if {$cmd == "stick"} {
+	putserv "MODE $chan +b $host"
+			}
+	putquick "PRIVMSG $black(chanserv) :ban $chan $host $getxtime $getxlevel $show_reason"
+		} else {
+	putserv "MODE $chan +b $host"
+	}
+}
+if {$read_num != "0"} {
+	set id $read_num
+}
+	blacktools:ban:put $nick $host $hand $chan $bantime $type $sticky $global $reason $id
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nobanlevel none
+	}
+}
+
+proc blacktools:link_ban {chanlink first b nick hand char chan chan1 type return_time cmd reason num} {
+	global black
+	set first_chan [lindex $chanlink $first]
+	set counter [expr $first + 1]
+if {$first_chan != ""} {
+	userhost:act $b $nick "$hand" $char $first_chan $chan1 $type $return_time $cmd $reason "2"
+}
+if {[lindex $chanlink $counter] != ""} {
+	utimer 5 [list blacktools:link_ban [link:chan:get $chan] $counter $b $nick $hand $char $chan $chan1 $type $return_time $cmd $reason 2]
+	}
+}
+
+proc blacktools:link_ban2 {chanlink first} {
+	global black
+	set first_chan [lindex $chanlink $first]
+	set counter [expr $first + 1]
+if {$first_chan != ""} {
+	who:chan $first_chan
+}
+if {[lindex $chanlink $counter] != ""} {
+	utimer 5 [list blacktools:link_ban2 $chanlink $counter]
+	}
+}
+
+#http://wiki.tcl.tk/989
+proc wsplit {string sep} {
+    set first [string first $sep $string]
+    if {$first == -1} {
+        return [list $string]
+    } else {
+        set l [string length $sep]
+        set left [string range $string 0 [expr {$first-1}]]
+        set right [string range $string [expr {$first+$l}] end]
+        return [concat [list $left] [wsplit $right $sep]]
+    }
+}
+
+proc blacktools:ban:put {nick host hand chan bantime type sticky global reason id} {
+	global black
+	set is_comment 0
+	set file [open $black(bans_file) "a"]
+if {[lsearch -exact -nocase $reason "-comment"] > -1} {
+	set is_comment 1
+	set split_it [wsplit $reason "-comment"]
+	set comment [concat [lindex $split_it 1]]
+	set reason [concat [lindex $split_it 0]]
+} elseif {[lsearch -exact -nocase $reason "-com"] > -1} {
+	set is_comment 1
+	set split_it [wsplit $reason "-com"]
+	set comment [concat [lindex $split_it 1]]
+	set reason [concat [lindex $split_it 0]]
+} elseif {[lsearch -exact -nocase $reason "-c"] > -1} {
+	set is_comment 1
+	set split_it [wsplit $reason "-c"]
+	set comment [concat [lindex $split_it 1]]
+	set reason [concat [lindex $split_it 0]]
+}
+	set created [unixtime]
+if {$is_comment == "1"} {
+if {$global == "1"} {
+	puts $file "$type $id GLOBAL $host $hand $bantime $created $sticky $global $reason%C%$comment"
+} else {
+	puts $file "$type $id [string tolower $chan] $host $hand $bantime $created $sticky $global $reason%C%$comment"
+	}
+} else {
+if {$global == "1"} {
+	puts $file "$type $id GLOBAL $host $hand $bantime $created $sticky $global $reason"
+} else {
+	puts $file "$type $id [string tolower $chan] $host $hand $bantime $created $sticky $global $reason"
+	}
+}
+	close $file
+	blacktools:ub:setlast $bantime
+}
+
+proc blacktools:join:ban {nick host hand chan} {
+	global black
+if {[isbotnick $nick]} {
+foreach tmr [utimers] {
+if {[string match "*who:chan $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}	
+		}
+	utimer 5 [list who:chan $chan]
+foreach b [blacktools:banlist:ban $chan] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+	set sticky [lindex [split $b] 7]
+if {$sticky == "1"} {
+if {![ischanban $read_host $chan]} {
+	utimer 5 [list pushmode $chan +b $read_host]
+				}
+			}			
+		}	
+	}
+}
+
+proc who:chan {chan} {
+	global black
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+	putquick "WHO :$chan"
+	set ::thechan $chan
+	bind RAW - 352 get:chanlist
+	bind RAW - 315 end:chanlist
+}
+
+proc mode:who:chan {chan} {
+	global black
+	putquick "WHO :$chan"
+	set ::thechan $chan
+	bind RAW - 352 get:chanlist
+	bind RAW - 315 end:chanlist
+}
+
+proc get:chanlist {from keyword arguments} {
+	global black
+	set chan [lindex [split $arguments] 1]
+	set ident [lindex [split $arguments] 2]
+	set host [lindex [split $arguments] 3]
+	set nick [lindex [split $arguments] 5]
+	set thechan $::thechan
+	set uhost "$nick!$ident@$host"
+if {[string equal -nocase $thechan $chan]} {
+	blacktools:auto:ban $nick $uhost $thechan
+	}
+}
+
+proc end:chanlist {from keyword arguments} {
+	global black
+	unbind RAW - 352 get:chanlist
+	unbind RAW - 315 end:chanlist
+}
+
+proc blacktools:auto:ban {nick uhost chan} {
+	global black
+	set vhost [lindex [split $uhost @] 1]
+	blacktools:dns:auto_ban $nick $uhost $vhost $chan
+}
+
+proc blacktools:rem_comment {reason} {
+	global black
+if {[regexp {(%C%)} $reason]} {
+	set is_comment 1
+	set split_it [wsplit $reason "%C%"]
+	set comment [concat [lindex $split_it 1]]
+	set reason [concat [lindex $split_it 0]]
+	}
+	return $reason
+}
+
+proc blacktools:rem_comment_ban {reason} {
+	global black
+	set split_it ""
+if {[regexp {(-comment)} $reason]} {
+	set split_it [wsplit $reason "-comment"]
+} elseif {[regexp {(-com)} $reason]} {
+	set split_it [wsplit $reason "-com"]
+} elseif {[regexp {(-c)} $reason]} {
+	set split_it [wsplit $reason "-c"]
+}
+if {$split_it != ""} {
+	set comment [concat [lindex $split_it 1]]
+	set reason [concat [lindex $split_it 0]]
+}
+	return $reason
+}
+
+proc blacktools:get_comment {reason} {
+	global black
+	set comment ""
+if {[regexp {(%C%)} $reason]} {
+	set is_comment 1
+	set split_it [wsplit $reason "%C%"]
+	set comment [concat [lindex $split_it 1]]
+	}
+if {$comment != ""} {
+	return $comment
+	} else { return -1 }
+}
+
+proc blacktools:auto:ban_act {nick uhost vhost chan} {
+	global black botnick
+	set banlist [blacktools:banlist:ban $chan]
+	set glbanlist [blacktools:banlist:gl]
+	set gaglist [blacktools:gaglist $chan]
+	set rest_host [lindex [split $uhost @] 0]
+	set llength_banlist [llength $banlist]
+	set llength_glbanlist [llength $glbanlist]
+	set llength_gaglist [llength $gaglist]
+	set found_ban 0
+	set fulldns "$rest_host@$vhost"
+if {$vhost == ""} { set fulldns $uhost}
+	set xban 0
+	set getcount [setting:get $chan kickcount]
+	set getlang [string tolower [setting:get $chan lang]]
+	chanserv:ignore_remove
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	return
+}
+if {[setting:get $chan xonly]} {
+	set xban 1
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxtime == ""} {
+	set getxtime $black(chanserv:bantime)
+}
+if {$getxlevel == ""} {
+	set getxlevel $black(chanserv:banlevel)
+	}
+}
+	set handle [nick2hand $nick]
+if {$handle != "*"} { 
+if {[validuser $handle]} {
+if {[matchattr $handle B]} {
+	set hosts [getuser $handle hosts]
+	set cidr 0
+foreach h $hosts {
+if {[regexp {[/]} $h]} {
+	set read_ip [lindex [split $h @] 1]
+	set theip [lindex [split $uhost @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+if {$cidr_ip == "1"} {
+	set read_rest_ip [lindex [split $h @] 0]
+	set read_theip [lindex [split $uhost @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {[string match -nocase $h $uhost] || [string match -nocase $h $fulldns] || $cidr == "1"} {
+	set check_except [blacktools:ban:chanexempt $uhost $fulldns $chan]
+if {$check_except == "0"} {
+	add:ban $h [join [getuser $handle XTRA BLACK_REASON]]
+	set found_ban 1
+					}
+				}
+			}
+		}
+	}
+}
+
+if {$found_ban == "0"} {
+for {set i $llength_banlist} { $i >= 0 } { decr i } {
+	set b [lindex $banlist $i]
+	set cidr 0
+	set type [lindex [split $b] 0]
+	set read_chan [lindex [split $b] 2]
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[regexp {[/]} $real_read_host]} {
+	set read_ip [lindex [split $real_read_host @] 1]
+	set theip [lindex [split $uhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_dns [ipcidr $read_ip $theip_dns]
+if {$cidr_ip == "1" || $cidr_dns == "1"} {
+	set read_rest_ip [lindex [split $uhost @] 0]
+	set read_theip [lindex [split $real_read_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {([string match -nocase $real_read_host $uhost] || [string match -nocase $uhost $real_read_host]) || ([string match -nocase $real_read_host $fulldns] || [string match -nocase $fulldns $real_read_host]) || ($cidr == "1")} {
+	set check_except [blacktools:ban:chanexempt $uhost $fulldns $chan]
+if {$check_except == "1"} {
+	break
+}
+	set num [lindex [split $b] 1]
+	set read_reason [join [lrange [split $b] 9 end]]
+	set read_reason [blacktools:rem_comment $read_reason]
+	set read_reason [encoding convertfrom utf-8 $read_reason]
+	set expire [lindex [split $b] 5]
+	set read_handle [split [lindex [split $b] 4] ":"]
+	set gethand [lindex [split $read_handle] 0]
+	set show_reason [blacktools:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {$expire == "0"} {
+	set show_reason [blacktools:bl:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {[setting:get $chan showhandle]} {
+if {![string equal -nocase $gethand "BADCHAN"] && ![string equal -nocase $gethand "badident"] && ![string equal -nocase $gethand "badnick"] && ![string equal -nocase $gethand "antibadquitpart"] && ![string equal -nocase $gethand "antichanflood"] && ![string equal -nocase $gethand "badrealname"] && ![string equal -nocase $gethand "antispam"] && ![string equal -nocase $gethand "badhost"] && ![string equal -nocase $gethand "antipub"] && ![string equal -nocase $gethand "antijoinflood"] && ![string equal -nocase $gethand "antinotice"] && ![string equal -nocase $gethand "antictcp"] && ![string equal -nocase $gethand "antirepeat"] && ![string equal -nocase $gethand "antibold"] && ![string equal -nocase $gethand "anticolor"] && ![string equal -nocase $gethand "antiunderline"] && ![string equal -nocase $gethand "antilongtext"] && ![string equal -nocase $gethand "antibadword"] && ![string equal -nocase $gethand "anticaps"] && ![string equal -nocase $gethand "nickflood"] && ![string equal -nocase $gethand "inviteban"] && ![string equal -nocase $gethand "private"] && ![string equal -nocase $gethand "clonescan"] && ![string equal -nocase $gethand "repetitivechars"]} {
+	set show_reason "\[BT\] ($gethand) blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)"
+} else {
+		set show_reason "\[BT\] blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)"
+	}
+} else {
+	set show_reason "\[BT\] blacklisted -- ($black(say.$getlang.gl.reason): $show_reason)"
+	}
+}
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan $read_host $getxtime $getxlevel $show_reason"
+} else {
+	putserv "MODE $chan +b $read_host"
+	putserv "KICK $chan $nick :$show_reason"
+		}
+		set found_ban 1
+		break
+		}
+	}
+}
+
+if {$found_ban == "0"} {
+foreach b $glbanlist {
+	set cidr 0
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[regexp {[/]} $real_read_host]} {
+	set read_ip [lindex [split $real_read_host @] 1]
+	set theip [lindex [split $uhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_dns [ipcidr $read_ip $theip_dns]
+if {$cidr_ip == "1" || $cidr_dns == "1"} {
+	set read_rest_ip [lindex [split $uhost @] 0]
+	set read_theip [lindex [split $real_read_host @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {[string match -nocase $real_read_host $uhost] || [string match -nocase $uhost $real_read_host] || ($cidr == "1")} {
+	set check_except [blacktools:ban:exempt $uhost]
+if {$check_except == "1"} {
+	break
+}
+	set num [lindex [split $b] 1]
+	set read_reason [join [lrange [split $b] 9 end]]
+	set read_reason [blacktools:rem_comment $read_reason]
+	set read_reason [encoding convertfrom utf-8 $read_reason]
+	set expire [lindex [split $b] 5]
+	set read_handle [lindex [split $b] 4]
+	set read_handle [lindex [split $b] 4]
+	set gethand [lindex [split $read_handle] 0]
+	set show_reason [blacktools:setreason $chan $read_reason $read_handle $expire "" "1" $num]
+if {$expire == "0"} {
+	set show_reason [blacktools:bl:setreason $chan $read_reason $read_handle $expire $getcount "0" $num]
+if {[setting:get $chan showhandle]} {
+	set show_reason "\[BT\] ($gethand) (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $read_reason)" 
+} else {
+	set show_reason "\[BT\] (GLOBAL) blacklisted -- ($black(say.$getlang.gl.reason): $read_reason)"
+	}
+}
+if {[onchan $black(chanserv) $chan] && $xban == "1"} {
+	putquick "PRIVMSG $black(chanserv) :ban $chan $read_host $getxtime $getxlevel $show_reason"
+} else {
+	putserv "MODE $chan +b $read_host"
+	putserv "KICK $chan $nick :$show_reason"
+			}
+			set found_ban 1
+			break
+		}
+	}
+}
+if {$found_ban == "0"} {
+foreach b $gaglist {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[string match -nocase $real_read_host $uhost]} {
+if {[ischanban $read_host $chan]} {
+	continue
+}
+	set num [lindex [split $b] 1]
+	set expire [lindex [split $b] 5]
+	set read_time [return_time $getlang [expr $expire - [unixtime]]]
+	set replace(%minute%) $read_time
+	set replace(%gag%) $nick
+if {[isop $nick $chan]} {
+	pushmode $chan -o $nick
+}
+if {[isvoice $nick $chan]} {
+	pushmode $chan -v $nick
+}
+	pushmode $chan +b $read_host
+	set text [black:color:set "" $black(say.$getlang.gag.1)]
+	set reply [join $text]
+	puthelp "PRIVMSG $chan :[string map [array get replace] $reply]"
+	break
+			}
+		}
+	}
+}
+
+proc decr { int { n 1 } } {
+    if { [ catch {
+        uplevel incr $int -$n
+    } err ] } {
+        return -code error "decr: $err"
+    }
+    return [ uplevel set $int ]
+}
+
+proc blacktools:mode:ban {nick host hand chan mod who} {
+	global black
+if {$mod == "-b"} {
+	foreach b [blacktools:banlist:ban $chan] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[string match -nocase $real_read_host $who]} {
+	set sticky [lindex [split $b] 7]
+if {$sticky == "1"} {
+	pushmode $chan +b $who
+			}
+	break
+		}
+	}
+}
+	
+if {$mod == "+o"} {
+if {[isbotnick $who]} {
+foreach b [blacktools:banlist:ban $chan] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+	set sticky [lindex [split $b] 7]
+if {$sticky == "1"} {
+if {![ischanban $read_host $chan]} {
+	pushmode $chan +b $read_host
+					}
+				}
+			}
+	mode:who:chan $chan
+		}
+	}	
+}
+
+proc blacktools:chnick:ban {nick host hand chan newnick} {
+	global botnick black
+if {[validchan $chan]} {
+	set bhost "$newnick![getchanhost $newnick $chan]"
+	blacktools:auto:ban $newnick $bhost $chan
+	}
+}
+
+proc blacktools:autounban {} {
+	global black
+	chanserv:ignore_remove
+foreach b [blacktools:banlist:all] {
+	set read_time [lindex [split $b] 5]
+if {$read_time == "0"} { continue }
+if {[expr $read_time - [unixtime]] <= 0} {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+	set read_type [lindex [split $b] 0]
+	set read_chan [lindex [split $b] 2]
+	set read_tr [lindex [split $b] 7]
+	blacktools:auto:remove $real_read_host $read_chan
+if {![validchan $read_chan]} {
+if {[string equal -nocase $read_chan "GLOBAL"]} {
+	foreach chan [channels] {
+if {[ischanban $read_host $chan]} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv)]} {
+	putquick "PRIVMSG $black(chanserv) :unban $chan $read_host"
+			} else {
+	pushmode $chan -b $read_host		
+			}
+		}
+	}
+}
+	continue
+} else { set chan $read_chan }
+if {[botisop $chan]} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[ischanban $read_host $chan]} {
+if {[string equal -nocase $read_type "GAG"]} {
+foreach user [chanlist $chan] {
+	set uhost "$user![getchanhost $user $chan]"
+if {[string match -nocase $real_read_host $uhost]} {
+	set replace(%nick%) $user
+	set replace(%chan%) $chan
+	set text [black:color:set "" $black(say.$getlang.gag.5)]
+	set reply [join $text]
+	puthelp "PRIVMSG $chan :[string map [array get replace] $reply]"
+			}
+		}
+	}
+	pushmode $chan -b $read_host
+	}
+}
+if {$read_tr == "2"} {
+	troll:del $read_host $chan
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv)]} {
+	putquick "PRIVMSG $black(chanserv) :unban $chan $read_host"
+			}
+		}
+	}
+	set lastban [blacktools:getlastban]
+if {$lastban == "-1"} {
+if {[info exists black(lastban)]} {
+	unset black(lastban)
+	}
+	return
+}
+	set black(lastban) $lastban
+foreach tmr [utimers] {
+if {[string match "*blacktools:autounban*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+	utimer $black(lastban) [list blacktools:autounban]
+}
+
+proc blacktools:bl:setreason {chan reason bywho expire kcount gl id} {
+	global black
+	set split_hand [split $bywho ":"]
+	set cmd [lindex $split_hand 1]
+	set reason [blacktools:rem_comment $reason]
+if {$expire != "0"} {
+	set expire [return_reason_time [expr $expire - [unixtime]]]
+}
+	set show_reason "$reason"
+if {$gl == "0"} {
+
+if {[setting:get $chan showid] && ($cmd != "bot")} {
+	set show_reason "$show_reason \[id: $id\]"
+}	
+
+if {[setting:get $chan showtime] && ($expire != "0") && ($cmd != "bot")} {
+	set show_reason "$show_reason \[bantime: $expire\]"
+}
+
+if {[setting:get $chan showurl] && ([setting:get $chan url] != "") && ($cmd != "bot")} {
+		set show_reason "$show_reason - [join [setting:get $chan url]]"
+}
+if {[setting:get $chan showcount] && ($cmd != "bot")} {
+	set show_reason "$show_reason - $kcount -"
+}
+	} else {
+if {[setting:get $chan showhandle]} {
+	set show_reason "($bywho) (GLOBAL) $reason"
+} else { set show_reason "(GLOBAL) $reason" }
+
+if {[setting:get $chan showid]} {
+	set show_reason "$show_reason \[id: $id\]"
+		}		
+	}
+	return $show_reason
+}
+
+proc blacktools:setreason {chan reason bywho expire kcount gl id} {
+	global black
+	set split_hand [split $bywho ":"]
+	set gethand [lindex $split_hand 0]
+	set cmd [lindex $split_hand 1]
+	set reason [blacktools:rem_comment $reason]
+if {$expire != "0"} {
+	set expire [return_reason_time [expr $expire - [unixtime]]]
+}
+if {$gl == "0"} {
+if {![string equal -nocase $gethand "BADCHAN"] && ![string equal -nocase $gethand "badident"] && ![string equal -nocase $gethand "badnick"] && ![string equal -nocase $gethand "antibadquitpart"] && ![string equal -nocase $gethand "antichanflood"] && ![string equal -nocase $gethand "badrealname"] && ![string equal -nocase $gethand "antispam"] && ![string equal -nocase $gethand "badhost"] && ![string equal -nocase $gethand "antipub"] && ![string equal -nocase $gethand "antijoinflood"] && ![string equal -nocase $gethand "antinotice"] && ![string equal -nocase $gethand "antictcp"] && ![string equal -nocase $gethand "antirepeat"] && ![string equal -nocase $gethand "antibold"] && ![string equal -nocase $gethand "anticolor"] && ![string equal -nocase $gethand "antiunderline"] && ![string equal -nocase $gethand "antilongtext"] && ![string equal -nocase $gethand "antibadword"] && ![string equal -nocase $gethand "anticaps"] && ![string equal -nocase $gethand "nickflood"] && ![string equal -nocase $gethand "inviteban"] && ![string equal -nocase $gethand "private"] && ![string equal -nocase $gethand "clonescan"] && ![string equal -nocase $gethand "repetitivechars"]} {
+if {[setting:get $chan showhandle] && $gethand != ""} {
+	set show_reason "($gethand) $reason"
+} else { set show_reason "$reason" }
+} else {
+	set show_reason "$reason"
+}
+
+if {[setting:get $chan showid] && ($cmd != "bot")} {
+	set show_reason "$show_reason \[id: $id\]"
+}	
+
+if {[setting:get $chan showtime] && ($expire != "0") && ($cmd != "bot")} {
+	set show_reason "$show_reason \[bantime: $expire\]"
+}
+
+if {[setting:get $chan showurl] && ([setting:get $chan url] != "") && ($cmd != "bot")} {
+		set show_reason "$show_reason - [join [setting:get $chan url]]"
+}
+if {[setting:get $chan showcount] && ($cmd != "bot")} {
+	set show_reason "$show_reason - $kcount -"
+}
+	} else {
+if {[setting:get $chan showhandle]} {
+	set show_reason "($bywho) (GLOBAL) $reason"
+} else { set show_reason "(GLOBAL) $reason" }
+
+if {[setting:get $chan showid]} {
+	set show_reason "$show_reason \[id: $id\]"
+		}		
+	}
+	return $show_reason
+}
+
+proc blacktools:check:levelban {hand chan level} {
+	global black
+if {[lsearch -exact -nocase $level "-c"] > -1} {
+	return ""
+} elseif {[lsearch -exact -nocase $level "-com"] > -1} {
+	return ""
+} elseif {[lsearch -exact -nocase $level "-comment"] > -1} {
+	return ""
+}
+	set level [string map {"-" ""} $level]
+	set levels ""
+	
+if {[matchattr $hand o]} {
+	set levels "[string tolower [blacktools:getlevelname 3 $hand]] [string tolower [blacktools:getlevelname 4 $hand]] [string tolower [blacktools:getlevelname 5 $hand]] [string tolower [blacktools:getlevelname 8 $hand]]"	
+	set split_levels [split $levels " "]
+foreach l $split_levels {
+	if {[string equal -nocase $l $level]} {
+	return $l
+		}
+	}
+}
+if {[matchattr $hand nm]} {
+	set levels "[string tolower [blacktools:getlevelname 2 $hand]] [string tolower [blacktools:getlevelname 3 $hand]] [string tolower [blacktools:getlevelname 4 $hand]] [string tolower [blacktools:getlevelname 5 $hand]] [string tolower [blacktools:getlevelname 8 $hand]]"	
+	set split_levels [split $levels " "]
+foreach l $split_levels {
+	if {[string equal -nocase $l $level]} {
+	return $l
+		}
+	}
+}
+if {[matchattr $hand -|M $chan]} {
+	set levels "[string tolower [blacktools:getlevelname 3 $hand]] [string tolower [blacktools:getlevelname 4 $hand]] [string tolower [blacktools:getlevelname 5 $hand]]"	
+	set split_levels [split $levels " "]
+foreach l $split_levels {
+	if {[string equal -nocase $l $level]} {
+	return $l
+		}
+	}
+}
+if {[matchattr $hand -|A $chan]} {
+	set levels "[string tolower [blacktools:getlevelname 4 $hand]] [string tolower [blacktools:getlevelname 5 $hand]]"	
+	set split_levels [split $levels " "]
+foreach l $split_levels {
+	if {[string equal -nocase $l $level]} {
+	return $l
+		}
+	}
+}
+if {[matchattr $hand -|O $chan]} {
+	set levels "[string tolower [blacktools:getlevelname 5 $hand]]"	
+	set split_levels [split $levels " "]
+foreach l $split_levels {
+	if {[string equal -nocase $l $level]} {
+	return $l
+		}
+	}
+}
+	return "0 [join [string toupper $levels] ", "]"
+}
+
+
+proc blacktools:check:levelub {hand chan level} {
+	global black
+	set getlevel ""
+if {[string equal -nocase $level [blacktools:getlevelname 2 $hand]] || [string equal -nocase $level [blacktools:getlevelname 3 $hand]] || [string equal -nocase $level [blacktools:getlevelname 4 $hand]] || [string equal -nocase $level [blacktools:getlevelname 5 $hand]] || [string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+if {[matchattr $hand nm]} {
+	set getlevel [blacktools:getlevelname 2 $hand]
+} elseif {[matchattr $hand o]} {
+	set getlevel [blacktools:getlevelname 8 $hand]
+} elseif {[matchattr $hand -|M $chan]} {
+	set getlevel [blacktools:getlevelname 3 $hand]
+} elseif {[matchattr $hand -|A $chan]} {
+	set getlevel [blacktools:getlevelname 4 $hand]
+} elseif {[matchattr $hand -|O $chan]} {
+	set getlevel [blacktools:getlevelname 5 $hand]
+}
+	
+if {[string equal -nocase $getlevel [blacktools:getlevelname 2 $hand]]} {
+if {[string equal -nocase $level [blacktools:getlevelname 2 $hand]] || [string equal -nocase $level [blacktools:getlevelname 3 $hand]] || [string equal -nocase $level [blacktools:getlevelname 4 $hand]] || [string equal -nocase $level [blacktools:getlevelname 5 $hand]] || [string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+	return 1
+	}
+}
+
+if {[string equal -nocase $getlevel [blacktools:getlevelname 8 $hand]]} {
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]] || [string equal -nocase $level [blacktools:getlevelname 4 $hand]] || [string equal -nocase $level [blacktools:getlevelname 5 $hand]] || [string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+	return 1
+	}
+}
+
+if {[string equal -nocase $getlevel [blacktools:getlevelname 3 $hand]]} {
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]] || [string equal -nocase $level [blacktools:getlevelname 4 $hand]] || [string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	return 1
+	}
+}
+
+if {[string equal -nocase $getlevel [blacktools:getlevelname 4 $hand]]} {
+if {[string equal -nocase $level [blacktools:getlevelname 4 $hand]] || [string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	return 1
+	}
+}
+
+if {[string equal -nocase $getlevel [blacktools:getlevelname 5 $hand]]} {
+if {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	return 1
+			}
+		}
+} else { return 0 }
+	return -1
+}
+
+################################### Login ###############################
+
+proc loginpublic:start {} {
+global black botnick
+if {$black(autologin) == "0"} {
+	return
+}
+if {[info exists black(logged)]} {
+	putlog "\002\[BT\]\002 Still logged.."
+	return
+}
+	chanserv:ignore_remove
+if {[info exists black(notlogged:invalid)]} {
+	unset black(notlogged:invalid)
+}
+if {[info exists black(notlogged:failed)]} {
+	unset black(notlogged:failed)
+}
+
+if {[info exists black(notlogged)]} {
+	unset black(notlogged)
+}
+	putserv "PRIVMSG $black(hostchanserv) :login $black(username) $black(password)"
+	putserv "PRIVMSG $black(hostchanserv) :set lang EN"
+   	putserv "MODE $botnick :$black(xmod)"
+	bind RAW - 401 check:chanserv
+}
+
+proc loginpublic {my} {
+   global botnick black
+if {$black(autologin) == "0"} {
+	return
+}
+	chanserv:ignore_remove
+if {[info exists black(logged)]} {
+	unset black(logged)
+}
+
+if {[info exists black(notlogged)]} {
+	unset black(notlogged)
+}
+	putserv "PRIVMSG $black(hostchanserv) :login $black(username) $black(password)"
+   	putserv "MODE $botnick :$black(xmod)"
+	bind RAW - 401 check:chanserv
+}
+
+########################## show line output ##########################
+
+proc module:getinfo {nick host hand chan chan1 type text modul gl next} {
+	global black
+	set remain 0
+	set top ""
+	set split_modul [split $modul ":"]
+	set themodul [lindex $split_modul 0]
+if {$themodul == "topwords" || $themodul == "topbans"} {
+	set maxentries "10"
+} else {
+	set maxentries $black(modul:nr:entries)
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getmethod [getuser $hand XTRA OUTPUT_TYPE]
+if {$getmethod == ""} { set getmethod $black(default_output) }
+if {[string equal -nocase $next "-next"]} {
+if {[info exists black($modul:more:$chan:$hand)]} {
+if {$black($modul:more:$chan:$hand) >= $maxentries} {
+for {set i $black($modul:show:$chan:$hand)} { $i < [expr $black($modul:show:$chan:$hand) + $maxentries] } { incr i } {
+	set current_text [lindex $text $i]
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$current_text != ""} {
+	set nr_text [lindex [split $current_text] 0]
+	set read_nick [lindex [split $current_text] 1]
+	set counter [lindex [split $current_text] 2]
+	lappend top $read_nick:$nr_text:$counter
+	}
+} else {
+	show:modul:info $nick $host $hand $chan $chan1 $current_text $modul $remain
+	}
+}
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$black($modul:more:$chan:$hand) > 0} {
+	set remain 1
+} 
+	show:modul:info $nick $host $hand $chan $chan1 $top $modul $remain
+}
+	set black($modul:more:$chan:$hand) [expr $black($modul:more:$chan:$hand) - $maxentries]
+if {$host == "prv"} {
+	modul:remain $nick $host $hand $black($modul:more:$chan:$hand) $chan $chan1 $getmethod $modul $gl "1"
+} else {
+	modul:remain $nick $host $hand $black($modul:more:$chan:$hand) $chan $chan1 $getmethod $modul $gl "0"
+}
+	set black($modul:show:$chan:$hand) [expr $black($modul:show:$chan:$hand) + $maxentries]
+	} else {
+if {$black($modul:more:$chan:$hand) < 1} {
+	return
+}
+for {set i $black($modul:show:$chan:$hand)} { $i <= [expr $black($modul:show:$chan:$hand) +  $black($modul:more:$chan:$hand)]} { incr i } {
+	set current_text [lindex $text $i]
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$current_text != ""} {
+	set nr_text [lindex [split $current_text] 0]
+	set read_nick [lindex [split $current_text] 1]
+	set counter [lindex [split $current_text] 2]
+	lappend top $read_nick:$nr_text:$counter
+}
+} else {
+	show:modul:info $nick $host $hand $chan $chan1 $current_text $modul $remain
+	}
+}
+if {$themodul == "topwords" || $themodul == "topbans"} {
+
+	show:modul:info $nick $host $hand $chan $chan1 $top $modul $remain
+}
+	set black($modul:more:$chan:$hand) [expr $black($modul:more:$chan:$hand) - $black($modul:show:$chan:$hand)]
+	}
+	foreach tmr [utimers] {
+if {[string match -nocase "*module:getinfo:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 30 [list module:getinfo:unset:more $chan $hand $modul]
+if {$black($modul:more:$chan:$hand) < 1} {
+switch $themodul {
+badchan {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.4 none
+			}
+notesinbox {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.13 none
+}
+noteslist {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.13 none
+}
+anunt {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none 
+			}
+tcl {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none 
+			}
+quote {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none 
+			}
+guestnick {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.9 none
+}
+autobroadcast {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.10 none 
+			}
+topwords {
+
+}
+topbans {
+
+}
+badword {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadword.3 none 
+}
+badquitpart {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadquitpart.3 none 
+}
+
+
+default {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.3 none 
+			}
+		}
+	}
+}	
+	return
+}
+switch $themodul {
+badchan {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.15 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.14 none
+		}	
+	}
+anunt {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.8 none 
+	}
+tcl {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.10 none 
+	}
+notesinbox {
+	
+	}
+noteslist {
+
+}
+quote {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.8 none 
+			}
+guestnick {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.7 none 
+}
+autobroadcast {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.9 none
+	}
+topwords {
+	
+	}
+topbans {
+
+}
+badword {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadword.7 none 
+}
+badquitpart {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadquitpart.7 none 
+}
+
+default {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.7 none
+	}
+}
+	set black($modul:ltext:$chan:$hand) [llength $text]
+	set black($modul:show:$chan:$hand) 0
+if {$black($modul:ltext:$chan:$hand) > $maxentries} {
+
+	set black($modul:more:$chan:$hand) [expr $black($modul:ltext:$chan:$hand) - $maxentries]
+	for {set i 0} { $i < $maxentries } { incr i } {
+	set current_text [lindex $text $i]
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$current_text != ""} {
+	set nr_text [lindex [split $current_text] 0]
+	set read_nick [lindex [split $current_text] 1]
+	set counter [lindex [split $current_text] 2]
+	lappend top $read_nick:$nr_text:$counter
+	}
+} else {
+	show:modul:info $nick $host $hand $chan $chan1 $current_text $modul $remain
+	}
+}
+
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$black($modul:more:$chan:$hand) > 0} {
+	set remain 1
+} 
+	show:modul:info $nick $host $hand $chan $chan1 $top $modul $remain
+}
+	set black($modul:show:$chan:$hand) [expr $black($modul:show:$chan:$hand) + $maxentries]
+if {$black($modul:more:$chan:$hand) > 0} {
+if {$host == "prv"} {
+	modul:remain $nick $host $hand $black($modul:more:$chan:$hand) $chan $chan1 $getmethod $modul $gl "1"
+	} else {
+	modul:remain $nick $host $hand $black($modul:more:$chan:$hand) $chan $chan1 $getmethod $modul $gl "0"
+	}
+}
+	foreach tmr [utimers] {
+if {[string match -nocase "*module:getinfo:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 60 [list module:getinfo:unset:more $chan $hand $modul]
+} else {
+for {set i 0} { $i < $maxentries } { incr i } {
+	set current_text [lindex $text $i]
+if {$themodul == "topwords" || $themodul == "topbans"} {
+if {$current_text != ""} {
+	set nr_text [lindex [split $current_text] 0]
+	set read_nick [lindex [split $current_text] 1]
+	set counter [lindex [split $current_text] 2]
+	lappend top $read_nick:$nr_text:$counter
+}
+} else {
+	show:modul:info $nick $host $hand $chan $chan1 $current_text $modul $remain
+	}
+}
+if {$themodul == "topwords" || $themodul == "topbans"} {
+	show:modul:info $nick $host $hand $chan $chan1 $top $modul $remain
+}	
+switch $themodul {
+
+badchan {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.4 none
+	}
+anunt {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none 
+			}
+tcl {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none
+}
+notesinbox {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.13 none
+}
+noteslist {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.13 none
+}
+quote {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none 
+			}
+guestnick {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.9 none
+}
+autobroadcast {
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.10 none 
+			}
+topwords {
+
+}
+topbans {
+
+}
+badword {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadword.3 none 
+}
+badquitpart {
+	blacktools:tell $nick $host $hand $chan $chan1 antibadquitpart.3 none 
+}
+
+default {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.3 none 
+			}						
+		}		
+	}
+}
+
+proc module:getinfo:unset:more {chan hand modul} {
+	global black
+if {[info exists black($modul:more:$chan:$hand)]} {
+	unset black($modul:more:$chan:$hand)
+}
+if {[info exists black($modul:ltext:$chan:$hand)]} {
+	unset black($modul:ltext:$chan:$hand)
+	}
+if {[info exists black($modul:show:$chan:$hand)]} {
+	unset black($modul:show:$chan:$hand)
+	}
+}
+
+proc show:modul:info {nick host hand chan chan1 text modul remain} {
+	global black lastbind
+	set split_modul [split $modul ":"]
+	set themodul [lindex $split_modul 0]
+	set total [lindex $split_modul 1]
+	set otherchan 0
+	set top ""
+if {$chan != $chan1} {
+	set otherchan 1
+}
+
+if {$text == ""} { return }
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$themodul == "topwords" || $themodul == "topbans"} {
+foreach entry $text {
+	set split_entry [split $entry ":"]
+	set nickname [lindex $split_entry 1]
+	set word_count [lindex $split_entry 0]
+	set place [lindex $split_entry 2]
+	lappend top "\002#$place\002. $nickname ($word_count)"
+}
+if {$remain == "1"} {
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+if {[lsearch -exact $black(cmdchar) $charbind] < 0} {
+	set charbind ""
+}
+	set replace(%char%) $charbind
+	set replace(%chan%) $chan
+if {[string equal -nocase $total "total"]} {
+if {$otherchan == "1"} {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.12)]
+} else {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.11)]
+}
+} elseif {[string equal -nocase $total "week"]} {
+if {$otherchan == "1"} {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.25)]
+} else {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.26)]
+	}
+} else {
+if {$otherchan == "1"} {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.13)]
+	} else {
+	set others [string map [array get replace] $black(say.$getlang.$themodul.9)]
+	}
+}
+if {[string equal -nocase $total "total"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.1 "[join $top] $others"
+} elseif {[string equal -nocase $total "week"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.24 "[join $top] $others"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.2 "[join $top] $others"
+}
+} else {
+if {[string equal -nocase $total "total"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.1 "[join $top]"
+} elseif {[string equal -nocase $total "week"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.24 "[join $top]"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 $themodul.2 "[join $top]"
+	}
+}
+	return
+}
+	set num [lindex [split $text] 0]
+	set gettext [join [lrange [split $text] 1 end]]
+	set encoded [encoding convertfrom utf-8 $gettext]
+	set gettext [lindex [split $text] 0]
+	blacktools:tell $nick $host $hand $chan $chan1 gl.showline "$num [join $encoded]"
+}
+
+proc modul:remain {nick host hand count chan chan1 type modul gl prv} {
+	global black lastbind botnick
+	set otherchan 0
+if {$chan != $chan1} {
+	set otherchan 1
+}
+if {$count == "0"} { return }
+	set split_modul [split $modul ":"]
+	set themodul [lindex $split_modul 0]
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set firstchar [lindex $black(cmdchar) 0]
+if {[string equal $lastbind "*"]} { 
+	set charbind "prv" } elseif {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " 
+} elseif {[string equal -nocase "***" $lastbind]} { 
+	set split_host [split $host ":"]
+if {[lindex $split_host 1] == "chan"} {
+	set host [lindex $split_host 1]
+	set charbind [lindex $split_host 0]
+	} else {
+	set charbind "$host"
+	}
+}
+if {$charbind == ""} {
+	set charbind $firstchar
+if {[validuser $hand]} {
+	set getchar [getuser $hand XTRA MYCHAR]
+if {$getchar != ""} {
+	set charbind $getchar
+		}
+	}
+}
+if {$charbind == "prv"} { set charbind "" }
+	set replace(%char%) $charbind
+	set replace(%counter%) $count
+	set replace(%chan%) $chan
+switch [string tolower $themodul] {
+badchan {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.41)
+} else {
+	set msg $black(say.$getlang.$modul.3)
+	}
+if {$gl == "1"} {
+	set msg $black(say.$getlang.$modul.2)
+	} 
+}
+anunt {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.14)
+} else {
+	set msg $black(say.$getlang.$modul.9)
+	}
+}
+
+tcl {
+	set msg $black(say.$getlang.$modul.9)
+}
+
+notesinbox {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.16)
+} else {
+	set msg $black(say.$getlang.$modul.15)
+	}
+}
+
+noteslist {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.16)
+} else {
+	set msg $black(say.$getlang.$modul.15)
+	}
+}
+
+quote {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.14)
+} else {
+	set msg $black(say.$getlang.$modul.9)
+	}
+}
+topwords {
+	set msg ""
+	}
+topbans {
+	set msg ""
+}
+guestnick {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$modul.11)
+	} else {
+	set msg $black(say.$getlang.$modul.8)
+	}
+}
+autobroadcast {
+	set msg $black(say.$getlang.$modul.12)
+	}
+badword {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.antibadword.9) 
+	} else {
+	set msg $black(say.$getlang.antibadword.8)
+	}
+}
+badquitpart {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.antibadquitpart.9)
+	} else {
+	set msg $black(say.$getlang.antibadquitpart.8)
+	}
+}
+default {
+if {$otherchan == "1" || $prv == "1"} {
+	set msg $black(say.$getlang.$themodul.9)
+	} else {
+	set msg $black(say.$getlang.$themodul.8)
+		}
+	}
+}
+if {$msg == ""} {
+	return
+} 
+	blacktools:tell:cmd $nick "" $hand $chan $chan1 $prv $type [string map [array get replace] $msg]
+}
+
+########################## Other Module Process ######################
+
+proc othermodule:process {nick host hand chan chan1 who msg type modul} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand $modul 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+switch $who {
+	on {
+if {[string equal -nocase $modul "topic"]} {
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.2 none
+	setting:set $chan +$modul ""
+	
+	}
+	off {
+if {[string equal -nocase $modul "topic"]} {
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.3 none
+	setting:set $chan -$modul ""
+	}
+	
+unset {
+if {[string equal -nocase $modul "topic"]} {
+	putserv "TOPIC $chan :"
+	msg:del $chan $modul
+	blacktools:tell $nick $host $hand $chan $chan1 topic.4 none
+	}
+}	
+	
+	set {
+if {![string equal -nocase $modul "topic"]} {
+if {$msg == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $modul
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $modul
+			}
+		}
+		return
+	}
+}
+
+if {[string equal -nocase $modul "topic"]} {
+		set thetopic [topic $chan]
+		set url [join [setting:get $chan url]]
+if {$msg == ""} {
+if {$url != ""} {
+	set gettopic [string map [list "([color:filter $url])" ""] [color:filter  $thetopic]]
+} else { set gettopic $thetopic }
+	set msg $gettopic
+}
+if {$msg == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 topic.2 none
+	return
+	}
+if {$thetopic != $msg} {
+	blacktools:tell $nick $host $hand $chan $chan1 topic.1 $msg
+	
+if {$url != ""} {
+	putserv "TOPIC $chan :$msg ($url)"
+			} else { putserv "TOPIC $chan :$msg" }
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topic.3 $msg
+	}
+	msg:add $msg $chan $modul
+	return
+}
+	msg:add $msg $chan $modul
+	blacktools:tell $nick $host $hand $chan $chan1 $modul.1 $msg
+}
+show {
+	set getline ""
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+if {[string equal -nocase $read_modul $modul] && [string equal -nocase $chan $read_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set getline [encoding convertfrom utf-8 $read_msg]
+	continue
+		}
+	}
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 show.6 "$modul $getline"
+}
+
+default {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $modul
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $modul
+				}
+			}
+		}
+	}
+}
+
+proc msg:del {chan modul} {
+	global black
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/othermodule_temp.$timestamp"
+	set file [open $black(join_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $read_modul $modul] && [string equal -nocase $chan $enc_chan]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(join_file)	
+}
+
+proc msg:add {msg chan modul} {
+	global black
+	set msg [encoding convertto utf-8 $msg]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/othermodule_temp.$timestamp"
+	set file [open $black(join_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $read_modul $modul] && [string equal -nocase $chan $enc_chan]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(join_file)
+	
+	set file [open $black(join_file) a]
+	set enc_chan [encoding convertto utf-8 $chan]
+	puts $file "[string toupper $modul] $enc_chan $msg"
+	close $file
+}
+
+######################### Channel Remove Data ####################
+
+proc delchan:all {chan} {
+	global black
+if {$black(chanremove_all) == "0"} {
+	return
+}	
+	set files "$black(s_file) $black(seen_file) $black(bans_file) $black(join_file) $black(extra_file) $black(add_file) $black(quote_file)"
+	set split_files [split $files " "]
+	remove:chan:now $split_files 0 $chan
+	topwords:delete $chan
+}
+
+proc remove:chan:timer {minute hour day month year} {
+	global black
+if {$black(chanremove_all) == "0"} {
+	return
+}
+	set files "$black(s_file) $black(seen_file) $black(bans_file) $black(join_file) $black(extra_file) $black(add_file) $black(quote_file)"
+	set split_files [split $files " "]
+	remove:chan:now_timer $split_files 0
+}
+
+proc remove:chan:now_timer {files num} {
+	global black
+	set f [lindex $files $num]
+if {[string match -nocase "*seen*" $f] || [string match -nocase *othermodule* $f]} {
+	set pos 1
+} elseif {[string match -nocase "*bans*" $f]} {
+	set pos 2
+} else {
+	set pos 0
+}
+	set inc [expr $num + 1]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/removechan_temp.$timestamp"
+	set file [open $f r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+if {$line != ""} {
+	set chan [lindex [split $line] $pos]
+	set encoded [encoding convertfrom utf-8 $chan]
+if {[regexp {^[&#]} $encoded] && ![validchan $encoded]} {
+	continue
+} else {
+	puts $tempwrite $line
+		} 
+    }
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $f	
+if {[lindex $files $inc] != ""} {
+	utimer 3 [list remove:chan:now_timer $files $inc]
+	}
+}
+
+proc remove:chan:now {files num c} {
+	global black
+	set f [lindex $files $num]
+if {[string match -nocase "*seen*" $f] || [string match -nocase *othermodule* $f]} {
+	set pos 1
+} elseif {[string match -nocase "*bans*" $f]} {
+	set pos 2
+} else {
+	set pos 0
+}
+	set inc [expr $num + 1]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/removechan_temp.$timestamp"
+	set file [open $f r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+if {$line != ""} {
+	set chan [lindex [split $line] $pos]
+	set encoded [encoding convertfrom utf-8 $chan]
+if {[string equal -nocase $c $encoded]} {
+	continue
+} else {
+	puts $tempwrite $line
+		} 
+    }
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $f	
+if {[lindex $files $inc] != ""} {
+	utimer 3 [list remove:chan:now $files $inc $c]
+	}
+}
+
+########################### Extra settings ########################
+
+proc btcmd:global:set {hand cmd type} {
+	global black
+	if {[lsearch -exact $black(validcmds) $cmd] < 0} {
+	return 2
+}
+if {[string equal -nocase "enable" $cmd]} {
+	return 3
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/add_file_temp.$timestamp"
+	set file [open $black(add_file) r]
+	set tempwrite [open $temp w]
+	set cmd_found 0
+	set disable_type 0
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {[string equal -nocase $c "disable"] && [string equal -nocase $gettype "global"] && [string equal -nocase $comp $cmd]} {
+	set cmd_found 1
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+if {$type == "1"} {
+	set file [open $black(add_file) a]
+	puts $file "DISABLE GLOBAL [string toupper $cmd] $type"
+	close $file
+	}
+	return $cmd_found
+}
+
+proc btcmd:gl:status {cmd} {
+	global black
+	set file [open $black(add_file) r]
+	set cmd_found 0
+while {[gets $file line] != -1} {
+	set disable [lindex [split $line] 0]
+	set c [lindex [split $line] 1]
+	set gettype [lindex [split $line] 2]
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c "global"] && [string equal -nocase $gettype $cmd]} {
+	set cmd_found 1
+	continue
+		}
+	}
+	close $file
+	return $cmd_found
+}
+
+proc btcmd:status {chan hand cmd menureply} {
+	global black
+	set cmd_found 0
+	set access ""
+	set split_hand [split $hand ":"]
+	set hand [lindex $split_hand 0]
+if {[matchattr $hand -|M $chan]} {
+	set access "MANAGER"
+} elseif {[matchattr $hand n]} {
+	set access "BOSS"
+} elseif {[matchattr $hand m]} {
+	set access "OWNER"
+} elseif {[matchattr $hand o]} {
+	set access "MASTER"
+}
+if {$menureply == "1"} {
+	set file [open $black(add_file) r]
+while {[gets $file line] != -1} {
+	set disable [lindex [split $line] 0]
+	set c [lindex [split $line] 1]
+	set gettype [lindex [split $line] 2]
+	set disable_level [lindex [split $line] 3]
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c "global"] && [string equal -nocase $gettype $cmd]} {
+	set cmd_found 1
+	continue
+}
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c $chan] && [string equal -nocase $gettype $cmd]} {
+
+switch $access {
+
+MANAGER {
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+}
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+}
+if {$disable_level == "MANAGER"} {
+	set cmd_found 1
+	}
+if {$disable_level == "MASTER"} {
+	set cmd_found 1
+	}	
+}
+
+OWNER {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+}
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+	}
+}
+
+MASTER {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+}
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+}
+if {$disable_level == "MASTER"} {
+	set cmd_found 1
+	}	
+}
+
+BOSS {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+				}
+			}
+default {
+	set cmd_found 1
+			}
+		}	
+	}
+}
+	close $file
+	return $cmd_found
+}
+	set file [open $black(add_file) r]
+while {[gets $file line] != -1} {
+	set disable [lindex [split $line] 0]
+	set c [lindex [split $line] 1]
+	set gettype [lindex [split $line] 2]
+	set disable_level [lindex [split $line] 3]
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c "global"] && [string equal -nocase $gettype $cmd]} {
+	set cmd_found 1
+	continue
+}
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c $chan] && [string equal -nocase $gettype $cmd]} {
+switch $access {
+
+MANAGER {
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+	}
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+	}
+if {$disable_level == "MANAGER"} {
+	set cmd_found 1
+	}
+if {$disable_level == "MASTER"} {
+	set cmd_found 1
+	}
+}
+
+OWNER {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+	}
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+	}
+}
+MASTER {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+	}
+if {$disable_level == "OWNER"} {
+	set cmd_found 1
+	}
+if {$disable_level == "MASTER"} {
+	set cmd_found 1
+	}
+}
+
+BOSS {
+if {$disable_level == "BOSS"} {
+	set cmd_found 1
+				}
+			}
+default {
+	set cmd_found 1
+			}
+		}
+	}
+}
+if {$cmd_found == "0"} {
+	set user_cmd_status [getuser $hand XTRA $cmd\($chan\)]
+if {$user_cmd_status == "OFF"} {
+	set cmd_found 1
+	}
+}
+	close $file
+	return $cmd_found
+}
+
+proc btcmd:set:user {nick host hand chan chan1 user cmd type} {
+	global black
+if {[lsearch -exact $black(validcmds) $cmd] < 0} {
+	return 2
+}
+	set show_user $user
+if {![validuser $user]} {
+if {[onchan $user $chan]} {
+	set handle [nick2hand $user]
+if {![validuser $handle]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+			}
+		}
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+	set status [getuser $user XTRA $cmd\($chan\)]
+switch $type {
+1 {
+if {$status == "OFF"} {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.5 "$cmd $show_user"
+	return
+}
+	setuser $user XTRA $cmd\($chan\) OFF
+	blacktools:tell $nick $host $hand $chan $chan1 disable.4 "$cmd $show_user"
+}
+
+0 {
+if {$status == "OFF"} {
+	setuser $user XTRA $cmd\($chan\)
+	blacktools:tell $nick $host $hand $chan $chan1 enable.4 "$cmd $show_user"
+	return
+			}
+	blacktools:tell $nick $host $hand $chan $chan1 enable.5 "$cmd $show_user"
+		}
+	}
+}
+proc btcmd:getlevel {chan cmd} {
+	global black
+	set file [open $black(add_file) r]
+	set found_level ""
+while {[gets $file line] != -1} {
+	set disable [lindex [split $line] 0]
+	set c [lindex [split $line] 1]
+	set gettype [lindex [split $line] 2]
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c $chan] && [string equal -nocase $gettype $cmd]} {
+	set comp [lindex [split $line] 3]
+	set found_level $comp
+		}
+	}
+	close $file
+	return $found_level
+}
+
+proc btcmd:set {chan hand cmd type} {
+	global black
+if {[lsearch -exact -nocase $black(validcmds) $cmd] < 0} {
+	return 2
+}
+if {[string equal -nocase "enable" $cmd]} {
+	return 3
+}
+
+if {[matchattr $hand -|M $chan]} {
+	set access "MANAGER"
+} elseif {[matchattr $hand n]} {
+	set access "BOSS"
+} elseif {[matchattr $hand m]} {
+	set access "OWNER"
+} elseif {[matchattr $hand o]} {
+	set access "MASTER"
+} 
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/add_file_temp.$timestamp"
+	set file [open $black(add_file) r]
+	set tempwrite [open $temp w]
+	set cmd_found 0
+	set disable_type 0
+while {[gets $file line] != -1} {
+	set disable [lindex [split $line] 0]
+	set c [lindex [split $line] 1]
+	set gettype [lindex [split $line] 2]
+	set comp [lindex [split $line] 3]
+if {[string equal -nocase $disable "disable"] && [string equal -nocase $c $chan] && [string equal -nocase $gettype $cmd]} {
+	set cmd_found 1
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+
+if {$type == "1"} {
+	set file [open $black(add_file) a]
+	puts $file "DISABLE $chan [string toupper $cmd] $access"
+	close $file
+	}
+	return $cmd_found
+}
+
+proc setting:set {chan setting msg} {
+	global black
+	set getsetting [string map {
+	"+" ""
+	"-" ""} $setting]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/extra_temp.$timestamp"
+	set file [open $black(extra_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+	set comp [string map {
+	"+" ""
+	"-" ""} $comp]
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $getsetting]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(extra_file)
+if {[regexp {^[-]} $setting]} {
+	return
+}
+	set file [open $black(extra_file) a]
+if {[regexp {^[+]} $setting]} {
+	puts $file "$chan XTRA [string toupper $setting]"
+} else {
+	puts $file "$chan XTRA [string toupper $setting] $msg"
+}
+	close $file
+}
+
+proc setting:exists {setting} {
+	global black
+	set found_it 0
+if {[regexp {^[+-]} $setting]} {
+	set setting [string map {
+	"+" ""
+	"-" ""} $setting]
+}
+if {[lsearch -exact [string tolower $black(extra_flag)] [string tolower $setting]] > -1} {
+	set found_it 1
+} elseif {[lsearch -exact [string tolower $black(extra_str)] [string tolower $setting]] > -1} {
+	set found_it 2
+}
+	return $found_it
+}
+
+proc setting:status {chan setting msg} {
+	global black
+	set status 0
+if {[regexp {^[+-]} $setting]} {
+	set file [open $black(extra_file) r]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+	set comp_map [string map {
+	"+" ""
+	"-" ""} $comp]
+	set setting [string map {
+	"+" ""
+	"-" ""} $setting]
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp_map $setting]} {
+if {[regexp {^[+]} $comp]} {
+	set status 1
+				}
+			}
+		}
+	close $file
+	return $status
+}
+	set file [open $black(extra_file) r]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+	set getmsg [lrange [split $line] 3 end]
+if {![regexp {^[+-]} $comp]} {
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting] && [string equal -nocase $msg $getmsg]} {
+	set status 1
+		}
+	}
+}
+	close $file
+	return $status
+}
+
+proc setting:get {chan setting} {
+	global black
+	set flag_setting 0
+	set found_it 0
+	set return ""
+	set file [open $black(extra_file) r]
+	set setting_exists [setting:exists $setting]
+	set setting [string map {
+	"+" ""
+	"-" ""} $setting]
+if {$setting_exists == "1"} {
+	set flag_setting 1
+}
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+	set getsetting [string map {
+	"+" ""
+	"-" ""} $comp]
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $getsetting $setting]} {
+	set found_it 1
+	set getmsg [lrange [split $line] 3 end]
+if {$flag_setting == "0"} {	
+	set return $getmsg
+} else {
+if {[regexp {^[+]} $comp]} {
+	set return 1		
+					}
+if {[regexp {^[-]} $comp]} {
+	set return 0		
+				}			
+			}
+		}
+	}
+if {($found_it == "0") && ($flag_setting == "1")} {
+	set return 0
+}
+	close $file
+	return $return
+}
+
+proc get:flags {chan} {
+	global black
+	set all ""
+	set file [open $black(extra_file) r]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {[string equal -nocase $chan $c]} {
+if {[regexp {^[+]} $comp]} {
+	lappend all $comp
+			}	 
+		}
+	}
+	close $file
+	return $all
+}
+
+proc get:str {chan} {
+	global black
+	set all ""
+	set file [open $black(extra_file) r]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+	set why [join [lrange [split $line] 3 end]]
+if {[string equal -nocase $chan $c]} {
+if {[regexp {^[+-]} $comp]} {
+	continue
+			} else {
+	lappend all $comp&&$why
+			}			
+		}
+	}
+	close $file
+	return $all
+}
+
+proc blacktools:flag:exists {chan setting} {
+	global black
+	set flag_exists 0
+	set file [open $black(extra_file) r]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set comp [lindex [split $line] 2]
+if {[regexp {^[+-]} $comp]} {
+	set comp [string map {"+" ""
+						   "-" ""} $comp]
+}	
+if {[regexp {^[+-]} $setting]} {
+	set setting [string map {"+" ""
+						   "-" ""} $setting]
+}
+if {[string equal -nocase $c $chan]} {
+if {[string equal -nocase $setting $comp]} {
+	set flag_exists 1
+			}
+		}
+	}
+	close $file
+	return $flag_exists
+}
+
+proc blacktools:ban:exists {mask chan} {
+	global black
+	set ban_exists ""
+if {[string equal -nocase $chan "GLOBAL"]} {
+foreach b [blacktools:banlist:gl] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[string equal -nocase $real_read_host $mask]} {
+	break
+}
+if {[string match -nocase $real_read_host $mask]} {
+	set ban_exists $read_host
+	break
+		}
+	}
+} else {	
+foreach b [blacktools:banlist $chan] {
+	set read_host [lindex [split $b] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \\ {\\}] $read_host]
+if {[string equal -nocase $real_read_host $mask]} {
+	break
+}
+if {[string match -nocase $real_read_host $mask]} {
+	set ban_exists $read_host
+	break
+			}
+		}
+	}
+	return $ban_exists
+}
+
+proc blacktools:protect {nick chan} {
+	global black
+	
+if {[isop $nick $chan]} {
+	set oprotect [string tolower [setting:get $chan oprotect]]
+if {$oprotect == "1"} {
+	return 1
+	}
+}
+if {[isvoice $nick $chan]} {
+	set vprotect [string tolower [setting:get $chan vprotect]]
+if {$vprotect == "1"} {
+	return 1
+	}
+}
+if {[ishalfop $nick $chan]} {
+	set hoprotect [string tolower [setting:get $chan hoprotect]]
+if {$hoprotect == "1"} {
+	return 1
+		}
+	}
+	return 0
+}
+
+######################### bad quitpart colors ################
+
+set black(badcolors) {
+"*\x03*"
+"*\037*"
+"*\002*"
+}
+
+###################### protect color filter ##################
+
+proc color:filter {str} {
+  regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
+  return $str
+}
+
+###################### add extra (badwords, excepts) ##########
+
+proc addextra:find:num {chan type num} {
+	global black
+	set ret 0
+	set file [open $black(add_file) r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_type [lindex [split $line] 1]
+	set read_num [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan] && [string equal -nocase $read_type $type]} {
+if {$read_num == "$num"} {
+	set ret $read_num
+			}
+		}
+	}
+	close $file
+	return $ret
+}
+
+proc blacktools:ban:find_id {} {
+	global black
+	set lastid [blacktools:banlist:lastid]
+	set get_id [lindex $lastid 1]
+	set current [expr $get_id + 1]
+	return $current
+}
+
+proc check:file:word {chan text type} {
+	global black
+	set found_word ""
+	set get_pers ""
+	set split_w ""
+	set file [open $black(add_file) "r"]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set t [lindex [split $line] 1]
+	set w [join [lrange [split $line] 3 end]]
+if {[string equal -nocase $t "BADWORD"] && [string equal -nocase $type "BADWORD"]} {
+if {[regexp {[:]} $w]} {
+	set split_w [split $w ":"]
+	set w [join [lindex $split_w 0]]
+	}
+}
+if {[string match -nocase $c $chan] && [string match -nocase $w $text] && [string match -nocase $t $type]} { 
+	set found_word $w
+if {$split_w != ""} {
+	set get_pers [lindex $split_w 1]
+			}
+		}
+	}
+	close $file
+if {$get_pers != "" && $found_word != ""} {
+	return "$found_word:$get_pers"
+	} else {
+	return $found_word
+	}
+}
+
+proc get:banmethod {cmd chan} {
+	global black
+if {![validchan $chan]} { return }
+	set get_pers ""
+if {[regexp {[:]} $cmd]} {
+	set split_cmd [split $cmd ":"]
+	set get_cmd [lindex [split $split_cmd] 0]
+if {[string equal -nocase $get_cmd "antibadword"]} {
+	set get_pers [lindex [split $split_cmd] 1]
+	}
+}
+if {$get_pers != ""} {
+	return $get_pers
+}
+	set get [setting:get $chan $cmd-banmethod]
+if {$get != ""} { 	
+	return $get
+		} else {
+	set get [setting:get $chan banmethod]
+if {$get != ""} { 
+	return $get
+} else {
+		return $black($cmd:banmethod)
+		}
+	}
+}
+
+proc get:banmask {cmd chan} {
+	global black
+if {$cmd == "b:gl"} {
+	return $black($cmd:banmask)
+}
+if {![validchan $chan]} { return }
+	set get [setting:get $chan $cmd-banmask]
+if {$get != ""} { 	
+	return $get
+		} else {
+	set get [setting:get $chan general-banmask]
+if {$get != ""} { 
+	return $get
+} else {
+		return $black($cmd:banmask)
+		}
+	}
+}
+
+proc get:mask {cmd chan} {
+	global black
+if {$cmd == "hello"} {
+	return $black($cmd:mask)
+}
+if {![validchan $chan]} { return }
+	set get [setting:get $chan $cmd-mask]
+if {$get != ""} { 	
+	return $get
+		} else {
+	set get [setting:get $chan mask]
+if {$get != ""} { 
+	return $get
+} else {
+		return $black($cmd:mask)
+		}
+	}
+}
+
+proc find:num {num chan type} {
+	global black
+	set ret 0
+	set file [open $black(add_file) r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_type [lindex [split $line] 1]
+	set read_num [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan] && [string equal -nocase $read_type $type]} {
+if {$read_num == "$num"} {
+	set ret $read_num
+			}	
+		}
+	}
+	close $file
+	return $ret
+}
+
+proc find:q:num {num chan} {
+	global black
+	set ret 0
+	set file [open $black(quote_file) r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_num [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan]} {
+if {$read_num == "$num"} {
+	set ret $read_num
+			}	
+		}
+	}
+	close $file
+	return $ret
+}
+
+proc find:note:num {num} {
+	global black
+	set ret 0
+	set file [open $black(notes_file) r]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+if {$read_num == "$num"} {
+	set ret $read_num
+		}	
+	}
+	close $file
+	return $ret	
+}
+
+####################### troll announce #######################
+
+proc troll:add {banned mask chan} {
+	global black
+	set found_it 0
+if {![info exists black(troll:$chan)]} {	
+	set black(troll:$chan) ""
+}
+foreach troll $black(troll:$chan) {
+	set troll_split [split $troll ":"]
+	set nick [lindex $troll_split 0]
+	set host [lindex $troll_split 1]
+if {[string equal -nocase $banned $nick]} {
+	set found_it 1
+	continue
+	}
+}
+if {$found_it == "1"} { return }
+if {[lsearch -exact [string tolower $black(troll:$chan)]  [string tolower $banned:$mask]] > -1} {
+	return
+}
+	lappend black(troll:$chan) $banned:$mask
+}
+
+proc troll:del {mask chan} {
+	global black
+if {![info exists black(troll:$chan)]} {	
+	return
+}
+if {$black(troll:$chan) == ""} {	
+	return
+}
+foreach troll $black(troll:$chan) {
+	set troll_split [split $troll ":"]
+	set nick [lindex $troll_split 0]
+	set host [lindex $troll_split 1]
+if {[string equal -nocase $host $mask]} {
+if {[lsearch -exact [string tolower $black(troll:$chan)]  [string tolower $nick:$host]] > -1} {
+	set position [lsearch -exact [string tolower $black(troll:$chan)] [string tolower $nick:$host]]
+	set black(troll:$chan) [lreplace $black(troll:$chan) $position $position]
+			}	
+		}
+	}
+}
+
+proc troll:show {nick host hand chan} {
+	global black
+if {![setting:get $chan showtroll]} {
+	return
+}
+if {[info exists black(turnOnFlood:$chan)]} {
+	return
+}
+if {![info exists black(troll:$chan)]} {	
+	return
+}
+if {$black(troll:$chan) == ""} {
+	return
+}
+if {[matchattr $hand $black(exceptflags) $chan]} {
+	set lang [setting:get $chan lang]
+if {$lang == ""} { set lang [string tolower $black(default_lang)] }
+	set trolls ""
+foreach troll $black(troll:$chan) {
+	set troll_split [split $troll ":"]
+	set tr [lindex $troll_split 0]
+	lappend trolls $tr
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set replace(%msg%) $trolls
+	set replace(%chan%) $chan
+	set text [black:color:set "" $black(say.$getlang.troll.6)]
+	putserv "NOTICE $nick :[join [string map [array get replace] $text]]"
+	}
+}
+
+######################## BoT set code ###################
+
+proc bot:setcode {} {
+	global black
+	set schars "` ! \" % ' & \[ \] ! / ; \ * ^ % $ \#"
+	set alphabet "a b c d e f g h i j k l m n o p q r s t u v w x y z"
+	set numbers "0 1 2 3 4 5 6 7 8 9"
+	set code ""
+for {set i 0} { $i < 1 } { incr i} {
+	lappend code "[lindex [split $schars] [rand 7]] "
+}
+for {set i 0} { $i < 2 } { incr i} {
+	lappend code [lindex $alphabet [rand 26]]
+}
+for {set j 0} { $j < 3 } { incr j} {
+	lappend code [lindex $numbers [rand 10]]
+}
+for {set i 0} { $i < 1 } { incr i} {
+	lappend code " [lindex [split $schars] [rand 7]]"
+}
+	return [join $code ""]
+}
+
+################ Bans - KICKS Day Reset ##################
+
+proc bans:day:reset {minute hour day month year} {
+	global black
+
+foreach user [userlist] {
+	foreach chan [channels] {
+	set cmds_today [getuser $user XTRA CMD_STATS_TODAY($chan)]
+if {$cmds_today != ""} {
+	setuser $user XTRA CMD_STATS_TODAY($chan)
+			}
+		}			
+	}
+}
+
+##################### voiceme logged #####################
+
+proc voiceme:logged {from keyword arguments} {
+	global black
+	set nick $::vnick
+	set chan $::vchan
+	set hand $::vhand
+	set host $::vhost
+	set chan1 $chan
+if {[string match -nocase "*is logged*" $arguments] || [string match -nocase "*is authed*" $arguments]} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {	
+	putserv "PRIVMSG $black(chanserv) :voice $chan $nick"
+	blacktools:tell $nick "prv" $hand $chan $chan1 voiceme.3 none
+		} else {
+	putserv "MODE $chan +v $nick"
+	blacktools:tell $nick "prv" $hand $chan $chan1 voiceme.3 none
+		}
+	}
+	unbind RAW - 330 voiceme:logged
+}
+
+proc voiceme:identified {from keyword arguments} {
+	global black
+	set nick $::vnick
+	set chan $::vchan
+	set hand $::vhand
+	set chan1 $chan
+if {[string match -nocase "*has identified*" $arguments]} {
+	putserv "MODE $chan +v $nick"
+	blacktools:tell $nick "prv" $hand $chan $chan1 voiceme.3 none
+	}
+	unbind RAW - 307 voiceme:identified
+}
+
+################################# reban ######################
+
+proc rebanpublic {nick host hand chan} {
+global black
+if {[setting:get $chan xtools]} {
+	chanserv:ignore_remove
+	set host "$nick![getchanhost $nick $chan]"
+	set getxtime [setting:get $chan xbantime]
+	set getxlevel [setting:get $chan xbanlevel]
+if {$getxlevel == ""} { set getxlevel $black(chanserv:banlevel) } 
+if {$getxtime == ""} { set getxtime $black(chanserv:bantime) }
+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 {![setting:get $chan xtools]} {
+	return
+}
+if {[info exists black(notlogged)]} {
+	return
+}
+	chanserv:ignore_remove
+if {$type == "op"} {
+if  {![onchan "$black(chanserv)" $chan] && ![botisop $chan]} {
+	return
+}
+	putquick "PRIVMSG $black(chanserv) :unban $chan $botnick"
+	putquick "PRIVMSG $black(chanserv) :op $chan $botnick"
+	return
+}
+if {$type == "unban"} {
+	putquick "PRIVMSG $black(chanserv) :unban $chan $botnick"
+	return
+}
+if {$type == "invite" || $type == "limit"} {
+	putquick "PRIVMSG $black(chanserv) :invite $chan $botnick"
+	return
+	}
+if {$type == "key"} {
+	putquick "PRIVMSG $black(chanserv) :invite $chan $botnick"
+	return
+	}
+}
+
+######################### ABUSE #########################
+
+proc abuse:ban:note {from keyword arguments} {
+	global black botnick
+	set chan [lindex [split $arguments] 1]
+if {[setting:get $chan invisible]} {
+	return
+}
+	abuse:suspend $chan
+if {[info exists black(abuse:$chan)]} {
+	return
+	}
+	set replace(%chan%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.abuse.2)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+	}
+}
+	set black(abuse:$chan) 1
+	blacktools:tell:dcc abuse.1 "$chan"
+}
+
+proc abuse:key:note {from keyword arguments} {
+	global black botnick
+	set chan [lindex [split $arguments] 1]
+if {[setting:get $chan invisible]} {
+	return
+}
+	abuse:suspend $chan
+if {[info exists black(abuse:$chan)]} {
+	return
+	}
+	set replace(%chan%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.abuse.6)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+	}
+}
+	set black(abuse:$chan) 3
+	blacktools:tell:dcc abuse.5 "$chan"
+}
+
+proc abuse:inviteonly:note {from keyword arguments} {
+	global black botnick
+	set chan [lindex [split $arguments] 1]
+if {[setting:get $chan invisible]} {
+	return
+}
+	abuse:suspend $chan
+if {[info exists black(abuse:$chan)]} {
+	return
+	}
+	set replace(%chan%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.abuse.4)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+	}
+}
+	set black(abuse:$chan) 2
+	blacktools:tell:dcc abuse.3 "$chan"
+}
+
+proc abuse:restricted:note {from keyword arguments} {
+	global black botnick
+	set chan [lindex [split $arguments] 1]
+if {[setting:get $chan invisible]} {
+	return
+}
+	abuse:suspend $chan
+if {[info exists black(abuse:$chan)]} {
+	return
+	}
+	set replace(%chan%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.abuse.11)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+	}
+}
+	set black(abuse:$chan) 5
+	blacktools:tell:dcc abuse.12 "$chan"
+}
+
+proc abuse:channelfull:note {from keyword arguments} {
+	global black botnick
+	set chan [lindex [split $arguments] 1]
+if {[setting:get $chan invisible]} {
+	return
+}
+	abuse:suspend $chan
+if {[info exists black(abuse:$chan)]} {
+	return
+}
+	set replace(%chan%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.abuse.8)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+	}
+}
+	set black(abuse:$chan) 4
+	blacktools:tell:dcc abuse.7 "$chan"
+}
+
+proc delchan:note {hand chan reason} {
+	global black botnick
+	set replace(%chan%) $chan
+	set replace(%reason%) $reason
+	set replace(%hand%) $hand
+	set time [unixtime]
+foreach user [userlist n] {
+		set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+if {$user != $hand} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.delchan.1)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+			}
+		}
+	}
+}
+
+proc suspendchan:note {hand chan reason} {
+	global black botnick
+	set replace(%chan%) $chan
+	set replace(%reason%) $reason
+	set replace(%hand%) $hand
+	set time [unixtime]
+foreach user [userlist n] {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+if {$user != $hand} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set black(notes:announce:$user) 1
+	set text [black:color:set $botnick $black(say.$getlang.suspend.2)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+			}
+		}
+	}
+}
+
+proc get:abuse:num {} {
+	global black
+	set temp_num 0
+	set num 0
+while {$temp_num == 0} {
+	set get [find:note:num $num]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}	
+	return $num
+}
+
+proc abuse:suspend {chan} {
+	global black botnick
+if {![info exists black(abuse:count:$chan)]} {
+	set black(abuse:count:$chan) 0
+	}
+	incr black(abuse:count:$chan)
+if {$black(abuse:count:$chan) >= 30} {
+	channel set $chan +inactive
+	unset black(abuse:count:$chan)
+	blacktools:tell:dcc abuse.9 "$chan"
+	set replace(%msg.1%) $chan
+	set time [unixtime]
+foreach user [userlist nm] {
+		set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set getlang [string tolower [getuser $user XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set text [black:color:set $botnick $black(say.$getlang.abuse.10)]
+	set file [open $black(notes_file) a]
+	puts $file "INBOX $chan [get:abuse:num] 0 $user $time $botnick [string map [array get replace] $text]"
+	close $file
+			}
+		}
+	}
+}
+
+################### CTCP VERSION REPLY ######################
+
+proc ctcpvers {nickname hostname handle dest key arg} {
+global black
+	set text [split $arg]
+	set chan $::verschan
+	set chan1 $chan
+	set nick $::versnick
+	blacktools:tell $nick "" [nick2hand $nick] $chan $chan1 vers.3 "$nickname $text"
+}
+
+######################## AutoVoice ########################
+
+proc autovonjoin {nick host hand chan} {
+if {[setting:get $chan autovoice]} {
+pushmode $chan +v $nick
+	}
+}
+
+######################## AutoOp ########################
+
+proc autoponjoin {nick host hand chan} {
+if {[setting:get $chan autoop]} {
+pushmode $chan +o $nick
+	}
+}
+
+######################## h flood #######################
+
+proc unset:floodcmd {host chan} {
+global count
+if {[info exists count(floodcmd:$host:$chan)]} {
+	unset count(floodcmd:$host:$chan)
+	}
+}
+
+######################## get level #####################
+
+proc blacktools:getlevelname {num hand} {
+	global black
+	set split_hand [split $hand ":"]
+	set handle [lindex $split_hand 0]
+if {[validuser $handle]} {
+	set getlang [string tolower [getuser $handle XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+} else { set getlang "[string tolower $black(default_lang)]" }
+switch $num {
+	1 {
+	return $black(say.$getlang.level.1)
+	}
+	
+	2 {
+	return $black(say.$getlang.level.2)
+	}
+	
+	3 {
+	return $black(say.$getlang.level.3)
+	}
+	
+	4 {
+	return $black(say.$getlang.level.4)
+	}
+	
+	5 {
+	return $black(say.$getlang.level.5)
+	}
+	
+	6 {
+	return $black(say.$getlang.level.6)
+	}
+	7 {
+	return $black(say.$getlang.level.7)
+		}
+	8 {
+	return $black(say.$getlang.level.8)
+		}
+	9 {
+	return $black(say.$getlang.level.9)
+		}
+	}		
+}
+
+############################ hello #########################
+
+proc blacktools:hello {nick host hand} {
+	global black botnick
+if {[validuser $nick]} { return }
+	set mask [return_mask [return_host_num "hello" none $host] $host $nick]
+	set time [unixtime]
+	set getlang "[string tolower $black(default_lang)]"
+	adduser $nick $mask
+	adduser $nick "-telnet!*@*"
+	chattr $nick "n|-"
+	setuser $nick XTRA CHANMODIF(GLOBAL) $time:$botnick
+	save
+	blacktools:tell $nick "prv" $hand "" "" hello.1 $black(say.$getlang.level.1)
+	blacktools:tell $nick "prv" $hand "" "" hello.2 "$nick $black(name) $black(vers)"
+	blacktools:tell $nick "prv" $hand "" "" hello.3 "$mask"
+	blacktools:tell $nick "prv" $hand "" "" hello.4 none
+}
+
+######################## chanserv ignore ###################
+
+proc chanserv:ignore_remove {} {
+	global black
+if {[info exists black(chanserv:ignore_host)]} {
+if {[isignore $black(chanserv:ignore_host)]} {
+	killignore $black(chanserv:ignore_host)
+		}
+	}
+}
+
+####################### getlastaction #######################
+
+proc blacktools:getlastaction:join {nick host hand chan} {
+	global black
+if {![isbotnick $nick]} {
+	set gettime [unixtime]
+	set black(lastaction:$chan) $gettime
+	}
+	return 0
+}
+
+proc blacktools:getlastaction:part {nick host hand chan arg} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan	
+}
+
+proc blacktools:getlastaction:sign {nick host hand chan arg} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan	
+}
+
+proc blacktools:getlastaction:kick {nick host hand chan kicked reason} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan	
+}
+
+proc blacktools:getlastaction:text {nick host hand chan arg} {
+	global black botnick
+if {![isbotnick $nick]} {
+if {[validchan $chan]} {
+	black:setlastaction $chan
+		}
+	}
+	return 0
+}
+
+proc black:setlastaction {chan} {
+	global black
+	set black(lastaction:$chan) [unixtime]
+}
+
+proc blacktools:getlastaction:me {nick host hand chan keyword arg} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan
+	return
+}
+
+proc blacktools:getlastaction:split {nick host hand chan args} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan
+	return 0
+}
+
+proc blacktools:getlastaction:ban {nick host hand chan args} {
+	global black
+	blacktools:getlastaction:join $nick $host $hand $chan
+	return 0
+}
+
+
+########################### protection list #####################
+
+proc module:process:getbanhost {num} {
+	global black
+switch $num {
+	1 {
+	return "#1 - warn"
+}
+	2 {
+	return "#2 - kick"
+}
+	3 {
+	return "#3 - ban"
+}
+	4 {
+	return "#4 - warn -> kick"
+}
+	5 {
+	return "#5 - warn -> kick -> ban"
+}
+	6 {
+	return "#6 - kick -> ban"
+}
+	7 {
+	return "#7 - warn -> ban"
+		}
+	}
+}
+
+proc prot:module:process {nick host hand chan chan1 why except type number type1} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand $type1 0]
+if {$cmd_status == "1"} {
+	return 
+}
+	set num 0
+	set temp_num 0
+	set get_pers ""
+	set get_word ""
+	set except_add 0
+	set show_except $except
+	set line1 [string toupper $type1]
+if {[string equal -nocase $type1 "securemode"]} {
+	set line1 "SECUREMODE-EXCEPT"
+}
+if {[string equal -nocase $type1 "clonescan"]} {
+	set line1 "CLONESCAN-EXCEPT"
+}
+
+if {$why == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $type1
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $type1
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $type1
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+switch -exact -- [string tolower $why] {
+
+add {
+if {$except == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$type1"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$type1"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$type1"	
+}
+	return
+}
+while {$temp_num == 0} {
+	set get [addextra:find:num $chan $line1 $num]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+if {[regexp {[:]} $except] && [string equal -nocase $line1 "BADWORD"]} {
+	set split_check [split $except ":"]
+	set get_pers [lindex $split_check 1]
+	set get_word [lindex $split_check 0]
+} elseif {[regexp {^[+]} $except] && ([string equal -nocase $line1 "BADWORD"] || [string equal -nocase $line1 "BADQUITPART"] || [string equal -nocase $line1 "BADREALNAME"] || [string equal -nocase $line1 "BADHOST"] || [string equal -nocase $line1 "BADNICK"] || [string equal -nocase $line1 "ANTIPUB"] || [string equal -nocase $line1 "ANTISPAM"] || [string equal -nocase $line1 "BADIDENT"] || [string equal -nocase $line1 "ANTISPAM"])} {
+	set except_add 1
+}
+	set findword [prot:findword $chan $line1 $show_except]
+if {$findword == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.wordexists $show_except
+	return
+}
+if {$get_pers != ""} {
+if {![regexp {^[1234567]} $get_pers]} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$type1"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$type1"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$type1"	
+		}	
+	}
+}
+	set enc_chan [encoding convertto utf-8 $chan]
+	set file [open $black(add_file) a]
+	puts $file "$enc_chan $line1 $num $except"
+if {$get_pers != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.7 "$num $get_pers $get_word"
+} elseif {$except_add == "1"} {
+if {[string equal -nocase $type1 "BADWORD"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.8 "$num [string map {"+" ""} $show_except]"
+	} elseif {[string equal -nocase $type1 "BADNICK"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.11 "$num [string map {"+" ""} $show_except]"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.10 "$num [string map {"+" ""} $show_except]"
+		}
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.6 "$num $show_except"
+	}
+	close $file
+}
+
+list {
+	array set protlist [list]
+	set userlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$userlang == ""} { set userlang "[string tolower $black(default_lang)]" }
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/prot_temp.$timestamp"
+	set file [open $black(add_file) "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $line1 $type]} {
+	set msg_num [lindex [split $line] 2]
+	set except [lrange [split $line] 3 end]
+if {[string equal -nocase $type "BADWORD"]} {
+	set split_except [split $except ":"]
+if {[lindex $split_except 1] != ""} {
+	set the_except [join [lindex $split_except 0]]
+	set banhost [module:process:getbanhost [lindex $split_except 1]]
+	set text [black:color:set $hand $banhost]
+	lappend protlist($msg_num) $the_except \[$text\]
+		} elseif {[regexp {^[+]} $except]} {
+	set text [black:color:set $hand $black(say.$userlang.gl.protexcept)]
+	lappend protlist($msg_num) [string map {"+" ""} $except] \[$text\]	
+		} else { lappend protlist($msg_num) $except }
+	} else {
+if {[regexp {^[+]} $except]} {
+	set text [black:color:set $hand $black(say.$userlang.gl.protexcept)]
+	lappend protlist($msg_num) [string map {"+" ""} $except] \[$text\]
+			} else {
+	lappend protlist($msg_num) $except		
+			}
+		}
+	}
+}
+	set tempwrite [open $temp w]
+foreach msg [lsort -integer -increasing [array names protlist]] {
+	puts $tempwrite "$msg [join $protlist($msg)]"
+	}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "$type1" "0" $number
+}
+
+del {
+if {![regexp {^[0-9]} $number]} {
+if {$type == "0"} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$type1"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$type1"	
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$type1"	
+}
+	return
+}
+	set ret [addextra:find:num $chan $line1 $number]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.4 $number
+	return
+}
+	set file [open $black(add_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/prot_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set read_type [lindex [split $line] 1]
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal $number $read_num] && [string equal -nocase $enc_chan $chan] && [string equal -nocase $read_type $line1]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+
+	blacktools:tell $nick $host $hand $chan $chan1 $type1.5 $number
+		}
+default {
+if {$type == "0"} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$type1"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$type1"	
+	}
+}
+	}		
+}
+
+proc prot:findword {chan type word} {
+	global black
+	set found_it 0
+	set file [open $black(add_file) "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set t [lindex [split $line] 1]
+	set w [join [lrange [split $line] 3 end]]
+if {[string equal -nocase $enc_chan $chan] && [string match -nocase $t $type] && [string equal -nocase $word $w] && ![regexp {^[+]} $w] && ![regexp {^[+]} $word]} {
+	set found_it 1
+		} elseif {[string equal -nocase $enc_chan $chan] && [string match -nocase $t $type] && [string equal -nocase $word $w] && [regexp {^[+]} $w] && [regexp {^[+]} $word]} {
+	set found_it 1	
+		}
+	}
+	return $found_it
+}
+
+################################# forward ################################
+
+proc forward:redirect {nick host hand arg} {
+	global black
+	set message [join [lrange [split $arg] 0 end]]
+if {![validuser $hand]} {
+	foreach chan [channels] {
+if {[setting:get $chan forward]} {
+	blacktools:tell $nick "chan" $hand $chan $chan forward.1 "$nick $message"
+			}
+		}
+	}
+}
+
+################################# expirebans ##############################
+
+proc blacktools:expirebans {min hour day mon year} {
+	global black
+	set channels ""
+foreach chan [channels] {
+if {[channel get $chan ban-time] != "0"} {
+	continue
+}
+if {[setting:get $chan expirebans] == "0"} {
+	continue
+}
+	lappend channels $chan
+	}
+if {$channels != ""} {
+	blacktools:expire:chan $channels 0
+	}
+}
+
+proc blacktools:expire:chan {channels num} {
+	global black
+	set chan [lindex $channels $num]
+	set gettime [setting:get $chan expirebans]
+if {$gettime == ""} {
+	set gettime $black(default:bantime)
+}
+if {$gettime == "0"} {
+	set nextc [expr $num + 1]
+if {[lindex $channels $nextc] != ""} {
+	blacktools:expire:chan $channels $nextc
+	}
+	return
+}
+	set gettime [time_return_minute $gettime]
+	set seconds [expr $gettime * 60]
+	set unixtime [unixtime]
+	set banlist [chanbans $chan]
+	set maxtime [expr $unixtime + $seconds]
+foreach ban $banlist {
+if {[blacktools:sticky [lindex $ban 0] $chan] == 1} {
+	continue
+}
+if {[isbansticky [lindex $ban 0] $chan]} {
+	continue
+}
+if {[blacktools:isgag [lindex $ban 0] $chan] == 1} {
+	continue
+}
+	set chanstime [expr $unixtime + [lindex $ban 2]]
+if {$maxtime <= $chanstime} {
+	pushmode $chan -b [lindex $ban 0]
+		}
+	}
+	set nextc [expr $num + 1]
+if {[lindex $channels $nextc] != ""} {
+	blacktools:expire:chan $channels $nextc
+	}
+}
+
+################################ get lastban #####################################
+
+proc blacktools:getlastban {} {
+	global black
+	set lastban ""
+foreach b [blacktools:banlist:all] {
+if {$b != ""} {
+	set expire [lindex [split $b] 5]
+if {$expire != 0} {
+	set dif [expr $expire - [unixtime]]
+if {$dif > 0 || $dif == 0} {
+if {$lastban == ""} {
+	set lastban $dif
+	continue
+}
+if {$lastban >= $dif} {
+	set lastban $dif
+	continue
+				}
+			} else {
+	set lastban 60
+	break
+			}
+		}
+	}
+}
+if {$lastban == ""} {
+	set lastban -1
+}
+	return $lastban
+}
+
+if {[file exists $black(bans_file)]} {
+if {![info exists black(lastban_set)]} {
+	set lastban [blacktools:getlastban]
+if {$lastban == "-1"} {
+	set black(lastban_set) 1
+} else {
+	set black(lastban) $lastban
+foreach tmr [utimers] {
+if {[string match "*blacktools:autounban*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}
+		}
+	utimer $black(lastban) [list blacktools:autounban]
+		}
+	}
+}
+
+proc blacktools:ub:setlast {expire} {
+	global black
+	set lastban ""
+if {[info exists black(lastban)]} {
+if {$expire != 0} {
+	set dif [expr $expire - [unixtime]]
+if {$dif > 0} {
+if {$black(lastban) >= $dif} {
+	set lastban $dif
+			}
+		}
+	}
+} else {
+	set lastban [expr $expire - [unixtime]]
+}
+if {$lastban != ""} {
+if {$lastban < 0} {
+	set lastban 60
+}
+	set black(lastban) $lastban
+foreach tmr [utimers] {
+if {[string match "*blacktools:autounban*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer $black(lastban) [list blacktools:autounban]
+	}
+	return 1
+}
+
+################################ protection order ###############################
+
+proc blacktools:protect:me {nick host hand chan keyword arg} {
+if {[string equal -nocase $keyword "ACTION"]} {
+	blacktools:protect:pub $nick $host $hand $chan $arg
+	}
+}
+
+proc blacktools:protect:pub {nick host hand chan arg} {
+	global black
+	set pub_protect "antipub badword longtext repetitivechars color bold underline caps floodchan antirepeat"
+foreach prot $pub_protect {
+if {[string equal -nocase $prot "antipub"]} {
+if {[setting:get $chan antipub]} {
+	set return [antipub:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+		}
+	}
+}
+if {[string equal -nocase $prot "badword"]} {
+if {[setting:get $chan antibadword]} {
+	set return [antibadword:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}	
+if {[string equal -nocase $prot "longtext"]} {
+if {[setting:get $chan antilongtext]} {
+	set return [antilongtext:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "repetitivechars"]} {
+if {[setting:get $chan repetitivechars]} {
+	set return [repetitivechars:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "color"]} {
+if {[setting:get $chan anticolor]} {
+	set return [anticolor:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "bold"]} {
+if {[setting:get $chan antibold]} {
+	set return [antibold:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "underline"]} {
+if {[setting:get $chan antiunderline]} {
+	set return [antiunderline:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "caps"]} {
+if {[setting:get $chan anticaps]} {
+	set return [anticaps:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "floodchan"]} {
+if {[setting:get $chan antichanflood]} {
+	set return [antifloodchan:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+			}
+		}
+	}
+if {[string equal -nocase $prot "antirepeat"]} {
+if {[setting:get $chan antirepeat]} {
+	set return [antirepeat:protect $nick $host $hand $chan $arg]
+if {$return == "1"} {
+	break
+				}
+			}
+		}
+	}
+}
+
+############################## ipcidr #############################
+
+proc ipcidr {cidrAddr addr} {
+	global {cidr-support}
+if {[info exists {cidr-support}]} {
+if {${cidr-support} == "1"} {
+	set getip [lindex [split $cidrAddr "/"] 0]
+	set getcidr [lindex [split $cidrAddr "/"] 1]
+    set cidr [matchcidr $getip $addr $getcidr]
+	return $cidr
+		} else { return 0 }
+	} else { return 0 }
+ }
+ 
+######################### dns search ##############################
+								
+ proc blacktools:dns:auto_ban {nick host vhost chan} {
+	global black
+	set check_dns [dns:checkexcept $host]
+if {$check_dns == "1"} {
+	blacktools:auto:ban_act $nick $host "" $chan
+	return
+}
+	dnslookup $vhost dns:resolve:auto_ban $vhost $nick $host $chan
+}
+
+proc dns:resolve:auto_ban {ip host status hostip nick fullhost chan} {
+      if {!$status} {
+        blacktools:auto:ban_act $nick $fullhost "" $chan
+      } elseif {[string tolower $ip] == [string tolower $hostip]} {
+		blacktools:auto:ban_act $nick $fullhost $hostip $chan
+      } else {
+        blacktools:auto:ban_act $nick $fullhost $ip $chan
+    }
+      return 0
+ }
+ 
+ proc blacktools:dns:join {nick host vhost hand chan} {
+	global black
+	set check_dns [dns:checkexcept $host]
+if {$check_dns == "1"} {
+	blacktools:join:autoban $nick "" "" $hand $chan $host
+	return
+}
+if {[regexp {[/]} $host]} {
+	blacktools:join:autoban $nick "" "" $hand $chan $host
+	return
+}
+	dnslookup $vhost dns:resolve:join $vhost $nick $host $hand $chan
+}
+
+proc blacktools:dns:sb {bhost what nick hand host vhost chan chan1 type cmd entry} {
+	global black
+	set check_dns [dns:checkexcept $bhost]
+if {$check_dns == "1"} {
+	sb:act $bhost $what $nick $hand $host "" $chan $chan1 $type $cmd $entry
+	return
+}	
+	dnslookup $vhost dns:resolve:sb $vhost $what $nick $hand $bhost $vhost $chan $chan1 $type $cmd $entry
+}
+
+proc dns:resolve:sb {ip host status hostip what nick hand fullhost vhost chan chan1 type cmd entry} {
+	global black
+	if {!$status} {
+		sb:act $fullhost $what $nick $hand $host "" $chan $chan1 $type $cmd $entry
+      } elseif {[string tolower $ip] == [string tolower $hostip]} {
+		sb:act $fullhost $what $nick $hand $host $host $chan $chan1 $type $cmd $entry
+      } else {
+		sb:act $fullhost $what $nick $hand $host $ip $chan $chan1 $type $cmd $entry
+    }
+      return 0
+}
+
+proc blacktools:dns:ub {user mask nick hand host vhost chan chan1 type gl cmd whois link id prv} {
+	global black
+	set check_dns [dns:checkexcept $mask]
+if {$check_dns == "1"} {
+	ub:act $user $mask $nick $hand "" "" $chan $chan1 $type $gl $cmd $whois $link $id $prv
+	return
+}
+if {$id == "id"} {
+	ub:act $user $mask $nick $hand "" "" $chan $chan1 $type $gl $cmd $whois $link $id $prv
+	return
+}
+	dnslookup $vhost dns:resolve:ub $vhost $user $mask $nick $hand $chan $chan1 $type $gl $cmd $whois $link $id $prv
+}
+
+proc dns:resolve:ub {ip host status hostip user mask nick hand chan chan1 type gl cmd whois link id prv} {
+	global black
+	if {!$status} {
+		ub:act $user $mask $nick $hand "" "" $chan $chan1 $type $gl $cmd $whois $link $id $prv
+      } elseif {[string tolower $ip] == [string tolower $hostip]} {
+		ub:act $user $mask $nick $hand $host $host $chan $chan1 $type $gl $cmd $whois $link $id $prv
+      } else {
+        ub:act $user $mask $nick $hand $ip $host $chan $chan1 $type $gl $cmd $whois $link $id $prv
+    }
+      return 0
+}
+    
+proc dns:resolve:join {ip host status hostip nick fullhost hand chan} {
+      if {!$status} {
+        blacktools:join:autoban $nick $hostip "" $hand $chan $fullhost
+      } elseif {[string tolower $ip] == [string tolower $hostip]} {
+		blacktools:join:autoban $nick $hostip $host $hand $chan $fullhost
+      } else {
+        blacktools:join:autoban $nick $ip $host $hand $chan $fullhost
+    }
+      return 0
+ }
+ 
+proc dns:checkexcept {host} {
+	global black
+	set valid_except 0
+	set host [lindex [split $host "@"] 1]
+foreach h $black(dns:host_excepts) {
+if {[string match -nocase $h $host]} {
+	set valid_except 1
+		}
+	}
+	return $valid_except
+}
+ 
+################################ Balist FULL ##############################
+
+proc blacktools:banlistfull {from keyword arguments} {
+	global black botnick {net-type}
+	set chanbans ""
+	set chan [lindex [split $arguments] 1]
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {${net-type} == "2"} { set maxbans 45 } elseif {${net-type} == "3"} { set maxbans 100 } elseif {${net-type} == "1"} { set maxbans 64 } elseif {${net-type} == "0"} { set maxbans 100 } else { set maxbans 45 }
+	set banlist [lsort -index 2 -integer -decreasing [chanbans $chan]]
+	set llength_banlist [llength $banlist]
+	if {[llength $banlist] > 0} {
+foreach ban $banlist {
+if {[blacktools:sticky [lindex $ban 0] $chan] == 1} {
+	continue
+}
+if {[isbansticky [lindex $ban 0] $chan]} {
+	continue
+			}
+	lappend chanbans [lindex $ban 0]
+		}
+	}
+if {$chanbans != ""} {
+		set length_maxbans [llength [join $chanbans]]
+if {$length_maxbans > $maxbans} {
+	set bans_to_remove [expr [expr $length_maxbans - $maxbans] + $black(fullbanlist_remove)]
+} else {
+	set bans_to_remove $black(fullbanlist_remove)
+}
+if {![info exists black(onotice:$chan:fullbanlist)]} {
+	set replace(%maxbans%) $maxbans
+	set replace(%numbans%) $llength_banlist
+	set replace(%chan%) $chan
+	set text [black:color:set $botnick $black(say.$getlang.gl.fullbans)]
+	putserv "NOTICE @$chan :[string map [array get replace] $text]"
+foreach tmr [utimers] {
+if {[string match "*unset:mode_time:fullbanlist $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}
+		}
+	putserv "MODE $chan +$black(fullbanlist_modes)"
+	utimer $black(fullbanlist_hold_mode) [list unset:mode_time:fullbanlist $chan]
+}
+	set black(onotice:$chan:fullbanlist) 1
+	set banlist [lrange [join $chanbans] 0 [expr $bans_to_remove - 1]]
+foreach ban $banlist {
+	pushmode $chan -b $ban
+		}
+	foreach tmr [utimers] {
+if {[string match "*unset:flag:fullbanlist $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}
+		}
+	utimer 30 [list unset:flag:fullbanlist $chan]
+	}
+}
+
+proc unset:mode_time:fullbanlist {chan} {
+	global black
+	putserv "MODE $chan -$black(fullbanlist_modes)"
+}
+ 
+proc unset:flag:fullbanlist {chan} {
+	global black
+if {[info exists black(onotice:$chan:fullbanlist)]} {
+	unset black(onotice:$chan:fullbanlist)
+	}
+}
+
+####################### Channel TCL Settings Save #########################
+
+proc blacktools:settings:autosave {} {
+	global black
+	set channels ""
+foreach chan [channels] {
+if {[setting:get $chan settingsaved]} {
+	continue
+		} else {
+	lappend channels $chan	
+		}
+	}
+if {$channels != ""} {
+	blacktools:settings:save $channels 0
+	}
+}
+
+proc blacktools:settings:save {channels num} {
+	global black
+	set chan [lindex $channels $num]
+#antipub
+foreach line $black(antipubword) {
+	blacktools:setting:add "ANTIPUB" $chan $line
+}
+#badhost
+foreach line $black(badhostword) {
+	blacktools:setting:add "BADHOST" $chan $line
+}
+#antibadword
+foreach line $black(antibadword) {
+	blacktools:setting:add "BADWORD" $chan $line
+}
+#antibadquitpart
+foreach line $black(badquitpartwords) {
+	blacktools:setting:add "BADQUITPART" $chan $line
+}
+#antispam
+foreach line $black(spamword) {
+	blacktools:setting:add "ANTISPAM" $chan $line
+}
+#badrealname
+foreach line $black(badfwords) {
+	blacktools:setting:add "BADREALNAME" $chan $line
+}
+#badnick
+foreach line $black(badnickwords) {
+	blacktools:setting:add "BADNICK" $chan $line
+}
+#badident
+foreach line $black(badidentwords) {
+	blacktools:setting:add "BADIDENT" $chan $line
+}
+	set j [expr $num + 1]
+	setting:set $chan +settingsaved ""
+if {[lindex $channels $j] != ""} {
+	blacktools:settings:save $channels $j
+	}
+}
+
+proc blacktools:setting:add {protname chan text} {
+	global black
+	set num 0
+	set temp_num 0
+while {$temp_num == 0} {
+	set get [addextra:find:num $chan $protname $num]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set findword [prot:findword $chan $protname $text]
+if {$findword != "1"} {
+	set enc_chan [encoding convertto utf-8 $chan]
+	set file [open $black(add_file) a]
+	puts $file "$enc_chan $protname $num $text"
+	close $file
+	}
+}
+
+ 
+#################
+###########################################################################
+##   END                                                                 ##
+###########################################################################

+ 78 - 0
BlackTools/BT.Loader.tcl

@@ -0,0 +1,78 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   LOADER TCL   ###############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+#Load modules
+
+	set modules_files [glob -directory "$black(dirname)/BlackTools/Modules/" "*.tcl"]
+foreach file $modules_files {
+	set split_file [split $file "."]
+	set themodule [lindex $split_file 1]
+	set black(module_error_$themodule) [catch {source $file} black(module_error_stats_$themodule)]
+if {$black(module_error_$themodule) == "1"} {
+	die "\[BT\] :Couldn't load the module file \"$file\".Reason: \"$black(module_error_stats_$themodule)\""
+	} 
+}
+
+
+#Load cmds
+
+	set cmds_files [glob -directory "$black(dirname)/BlackTools/Commands/" "*.tcl"]
+foreach file $cmds_files {
+	set split_file [split $file "."]
+	set themodule [lindex $split_file 1]
+	set black(cmds_error_$themodule) [catch {source $file} black(cmds_error_stats_$themodule)]
+if {$black(cmds_error_$themodule) == "1"} {
+	die "\[BT\] :Couldn't load the cmds file \"$file\".Reason: \"$black(cmds_error_stats_$themodule)\""
+	} 
+}
+
+#Load protections
+
+	set prot_files [glob -directory "$black(dirname)/BlackTools/Protections/" "*.tcl"]
+foreach file $prot_files {
+	set split_file [split $file "."]
+	set themodule [lindex $split_file 1]
+	set black(prot_error_$themodule) [catch {source $file} black(prot_error_stats_$themodule)]
+if {$black(prot_error_$themodule) == "1"} {
+	die "\[BT\] :Couldn't load the prot. file \"$file\".Reason: \"$black(prot_error_stats_$themodule)\""
+	} 
+}
+
+#Load script files
+
+set black(timers_error) [catch {source $black(dirname)/BlackTools/BT.Timers.tcl} black(timers_error_stats)]
+set black(binds_error) [catch {source $black(dirname)/BlackTools/BT.Binds.tcl} black(binds_error_stats)]
+set black(core_error) [catch {source $black(dirname)/BlackTools/BT.Core.tcl} black(core_error_stats)]
+set black(loader_error) [catch {source $black(dirname)/BlackTools/lang/loader.tcl} black(loader_error_stats)]
+
+#Check for errors in script files
+if {$black(timers_error) == "1"} {
+	die "\[BT\] Error. Couldn't load the \"BT Timers\". Reason: \"$black(timers_error_stats)\""
+}
+if {$black(binds_error) == "1"} {
+	die "\[BT\] Error. Couldn't load the \"BT Binds\". Reason: \"$black(binds_error_stats)\""
+}
+if {$black(core_error) == "1"} {
+	die "\[BT\] Error. Couldn't load the \"BT Core\". Reason: \"$black(core_error_stats)\""
+}
+if {$black(loader_error) == "1"} {
+	die "\[BT\] Error. Couldn't load the \"BT Language\". Reason: \"$black(loader_error_stats)\""
+}
+
+#################
+###########################################################################
+##   END                                                                 ##
+###########################################################################

+ 507 - 0
BlackTools/BT.Timers.tcl

@@ -0,0 +1,507 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################  LOCAL TIMERS  ##############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+
+proc blacktools:timers:load {chan} {
+	global black
+if {[validchan $chan]} {
+#badchan
+if {[setting:get $chan antibadchan]} {
+if {![info exists black(badchan:$chan:timer_start)]} {
+if {[setting:get $chan badchan-scantime] != ""} {
+	set time [setting:get $chan badchan-scantime]
+		} else {
+	set time $black(badchan:scantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(badchan:$chan:timer_start) $scan_time
+			}
+		}
+#end
+
+#clonescan
+if {[setting:get $chan clonescan]} {
+if {![info exists black(clonescan:$chan:timer_start)]} {
+if {[setting:get $chan clonescan-scantime] != ""} {
+	set time [setting:get $chan clonescan-scantime]
+		} else {
+	set time $black(clonescantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(clonescan:$chan:timer_start) $scan_time
+				}
+			}
+#end
+
+#antispam
+if {[setting:get $chan antispam]} {
+if {![info exists black(antispam:$chan:timer_start)]} {
+if {[setting:get $chan antispam-scantime] != ""} {
+	set time [setting:get $chan antispam-scantime]
+		} else {
+	set time $black(spamcycle)
+		}
+	set scan_time [time_return_minute $time]
+	set black(antispam:$chan:timer_start) $scan_time
+				}
+			}
+#end
+
+#anunt
+if {[setting:get $chan anunt]} {
+if {![info exists black(anunt:$chan:timer_start)]} {
+if {[setting:get $chan anunt-showtime] != ""} {
+	set time [setting:get $chan anunt-showtime]
+		} else {
+	set time $black(anunttime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(anunt:$chan:timer_start) $scan_time
+			}
+		}
+#end
+
+#idle
+if {[setting:get $chan idleop] || [setting:get $chan idlevoice] || [setting:get $chan idlehalfop]} {
+if {![info exists black(idle:$chan:timer_start)]} {
+if {[setting:get $chan idle-scantime] != ""} {
+	set time [setting:get $chan idle-scantime]
+		} else {
+	set time $black(idleinterval)
+		}
+	set scan_time [time_return_minute $time]
+	set black(idle:$chan:timer_start) $scan_time
+			}
+		}
+#end
+
+#VoiceOnMsg
+if {[setting:get $chan voiceonmsg]} {
+if {![info exists black(voiceonmsg:$chan:timer_start)]} {
+	set black(voiceonmsg:$chan:timer_start) 1
+		}
+	}
+#end
+
+
+#Limit
+if {[setting:get $chan limit]} {
+if {![info exists black(limit:$chan:timer_start)]} {
+	set black(limit:$chan:timer_start) 1
+			}
+		}
+#end
+
+#TopWords
+if {[setting:get $chan topwords]} {
+if {![info exists black(topwords:$chan:timer_start)]} {
+	set black(topwords:$chan:timer_start) 1
+			}
+		}
+#end
+
+#quote
+if {[setting:get $chan quoteofday]} {
+if {![info exists black(quote:$chan:timer_start)]} {
+if {[setting:get $chan quote-showtime] != ""} {
+	set time [setting:get $chan quote-showtime]
+		} else {
+	set time $black(quote:msgtime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(quote:$chan:timer_start) $scan_time
+			}
+		}
+#end
+}
+
+#Auto Unsuspend
+set status [s:status]
+if {$status == "1"} {
+if {![info exists black(s:timer_start)]} {
+	set black(s:timer_start) 1
+	}
+}
+#end
+
+#BanMethod Remove
+
+if {![info exists black(banmethod_rem:timer_start)]} {
+	set black(banmethod_rem:timer_start) [time_return_minute $black(banmethod_memory_time)]
+}
+
+#end
+
+#AutoBroadcast
+
+if {[broadcast:check]} {
+if {![info exists black(broadcast:timer_start)]} {
+	set scan_time [time_return_minute $black(bttime)]
+	set black(broadcast:timer_start) $scan_time
+		}
+	}
+#end
+}
+
+#run by minute
+
+proc blacktools:timers:runtime {} {
+	global black
+	set badchan_channels ""
+	set clonescan_channels ""
+	set antispam_channels ""
+	set anunt_channels ""
+	set idle_channels ""
+	set voiceonmsg_channels ""
+	set limit_channels ""
+	set quote_channels ""
+	set voiceme_channels ""
+	set topwords_channels ""
+foreach chan [channels] {
+
+#badchan
+
+if {[info exists black(badchan:$chan:timer_start)]} {
+if {[setting:get $chan antibadchan]} {
+if {$black(badchan:$chan:timer_start) == "0"} {
+if {[setting:get $chan badchan-scantime] != ""} {
+	set time [setting:get $chan badchan-scantime]
+		} else {
+	set time $black(badchan:scantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(badchan:$chan:timer_start) $scan_time
+}
+if {![info exists black(badchan:counter:$chan)]} {
+	set black(badchan:counter:$chan) 0
+}
+	set black(badchan:counter:$chan) [expr $black(badchan:counter:$chan) + 1]
+if {$black(badchan:counter:$chan) > $black(badchan:$chan:timer_start)} {
+	set black(badchan:counter:$chan) 0
+				} elseif {$black(badchan:$chan:timer_start) < $black(badchan:counter:$chan)} {
+	set black(badchan:counter:$chan) 0
+				} elseif {$black(badchan:counter:$chan) == $black(badchan:$chan:timer_start)} {
+	lappend badchan_channels $chan
+	set black(badchan:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+#clonescan
+if {[info exists black(clonescan:$chan:timer_start)]} {
+if {[setting:get $chan clonescan]} {
+if {$black(clonescan:$chan:timer_start) == "0"} {
+if {[setting:get $chan clonescan-scantime] != ""} {
+	set time [setting:get $chan clonescan-scantime]
+		} else {
+	set time $black(clonescantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(clonescan:$chan:timer_start) $scan_time
+}
+if {![info exists black(clonescan:counter:$chan)]} {
+	set black(clonescan:counter:$chan) 0
+}
+	set black(clonescan:counter:$chan) [expr $black(clonescan:counter:$chan) + 1]
+if {$black(clonescan:counter:$chan) > $black(clonescan:$chan:timer_start)} {
+	set black(clonescan:counter:$chan) 0
+				} elseif {$black(clonescan:$chan:timer_start) < $black(clonescan:counter:$chan)} {
+	set black(clonescan:counter:$chan) 0
+				} elseif {$black(clonescan:counter:$chan) == $black(clonescan:$chan:timer_start)} {
+	lappend clonescan_channels $chan
+	set black(clonescan:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+#antispam
+if {[info exists black(antispam:$chan:timer_start)]} {
+if {[setting:get $chan antispam]} {
+if {$black(antispam:$chan:timer_start) == "0"} {
+if {[setting:get $chan antispam-scantime] != ""} {
+	set time [setting:get $chan antispam-scantime]
+		} else {
+	set time $black(spamcycle)
+		}
+	set scan_time [time_return_minute $time]
+	set black(antispam:$chan:timer_start) $scan_time
+}
+if {![info exists black(antispam:counter:$chan)]} {
+	set black(antispam:counter:$chan) 0
+}
+	set black(antispam:counter:$chan) [expr $black(antispam:counter:$chan) + 1]
+if {$black(antispam:counter:$chan) > $black(antispam:$chan:timer_start)} {
+	set black(antispam:counter:$chan) 0
+				} elseif {$black(antispam:$chan:timer_start) < $black(antispam:counter:$chan)} {
+	set black(antispam:counter:$chan) 0
+				} elseif {$black(antispam:counter:$chan) == $black(antispam:$chan:timer_start)} {
+	lappend antispam_channels $chan
+	set black(antispam:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+#anunt
+if {[info exists black(anunt:$chan:timer_start)]} {
+if {[setting:get $chan anunt]} {
+if {$black(anunt:$chan:timer_start) == "0"} {
+if {[setting:get $chan anunt-showtime] != ""} {
+	set time [setting:get $chan anunt-showtime]
+		} else {
+	set time $black(anunttime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(anunt:$chan:timer_start) $scan_time
+}
+if {![info exists black(anunt:counter:$chan)]} {
+	set black(anunt:counter:$chan) 0
+}
+	set black(anunt:counter:$chan) [expr $black(anunt:counter:$chan) + 1]
+if {$black(anunt:counter:$chan) > $black(anunt:$chan:timer_start)} {
+	set black(anunt:counter:$chan) 0
+				} elseif {$black(anunt:$chan:timer_start) < $black(anunt:counter:$chan)} {
+	set black(anunt:counter:$chan) 0
+				} elseif {$black(anunt:counter:$chan) == $black(anunt:$chan:timer_start)} {
+	lappend anunt_channels $chan
+	set black(anunt:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+#Quote
+if {[info exists black(quote:$chan:timer_start)]} {
+if {[setting:get $chan quoteofday]} {
+if {$black(quote:$chan:timer_start) == "0"} {
+if {[setting:get $chan quote-showtime] != ""} {
+	set time [setting:get $chan quote-showtime]
+		} else {
+	set time $black(quote:msgtime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(quote:$chan:timer_start) $scan_time
+}
+if {![info exists black(quote:counter:$chan)]} {
+	set black(quote:counter:$chan) 0
+}
+	set black(quote:counter:$chan) [expr $black(quote:counter:$chan) + 1]
+if {$black(quote:counter:$chan) > $black(quote:$chan:timer_start)} {
+	set black(quote:counter:$chan) 0
+				} elseif {$black(quote:$chan:timer_start) < $black(quote:counter:$chan)} {
+	set black(quote:counter:$chan) 0
+				} elseif {$black(quote:counter:$chan) == $black(quote:$chan:timer_start)} {
+	lappend quote_channels $chan
+	set black(quote:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+
+#voiceme
+
+if {[info exists black(voiceme:$chan:timer_start)]} {
+if {$black(voiceme:$chan:timer_start) == "0"} {
+if {[setting:get $chan voiceme-showtime] != ""} {
+	set time [setting:get $chan voiceme-showtime]
+		} else {
+	set time $black(voiceme:msgtime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(voiceme:$chan:timer_start) $scan_time
+}
+if {![info exists black(voiceme:counter:$chan)]} {
+	set black(voiceme:counter:$chan) 0
+}
+	set black(voiceme:counter:$chan) [expr $black(voiceme:counter:$chan) + 1]
+	
+if {$black(voiceme:counter:$chan) > $black(voiceme:$chan:timer_start)} {
+	set black(voiceme:counter:$chan) 0
+				} elseif {$black(voiceme:$chan:timer_start) < $black(voiceme:counter:$chan)} {
+	set black(voiceme:counter:$chan) 0
+				} elseif {$black(voiceme:counter:$chan) == $black(voiceme:$chan:timer_start)} {
+	lappend voiceme_channels $chan
+	set black(voiceme:counter:$chan) 0
+		}
+	}
+#
+
+
+#VoiceOnMsg
+if {[info exists black(voiceonmsg:$chan:timer_start)]} {
+if {[setting:get $chan voiceonmsg]} {
+	lappend voiceonmsg_channels $chan
+	}
+}
+#end
+
+#Limit
+if {[info exists black(limit:$chan:timer_start)]} {
+if {[setting:get $chan limit]} {
+	lappend limit_channels $chan
+	}
+}
+#end
+
+#TopWOrds
+if {[info exists black(topwords:$chan:timer_start)]} {
+if {[setting:get $chan topwords]} {
+	lappend topwords_channels $chan
+	}
+}
+#end
+
+#idle
+if {[info exists black(idle:$chan:timer_start)]} {
+	set options {idleop idlevoice idlehalfop}
+	set idle_activ 0
+foreach option $options {
+	if {[setting:get $chan $option]} {
+	set idle_activ 1
+	}
+}
+if {$idle_activ == "1"} {
+if {$black(idle:$chan:timer_start) == "0"} {
+if {[setting:get $chan idle-scantime] != ""} {
+	set time [setting:get $chan idle-scantime]
+		} else {
+	set time $black(idleinterval)
+		}
+	set scan_time [time_return_minute $time]
+	set black(idle:$chan:timer_start) $scan_time
+}
+if {![info exists black(idle:counter:$chan)]} {
+	set black(idle:counter:$chan) 0
+}
+	set black(idle:counter:$chan) [expr $black(idle:counter:$chan) + 1]
+if {$black(idle:counter:$chan) > $black(idle:$chan:timer_start)} {
+	set black(idle:counter:$chan) 0
+				} elseif {$black(idle:$chan:timer_start) < $black(idle:counter:$chan)} {
+	set black(idle:counter:$chan) 0
+				} elseif {$black(idle:counter:$chan) == $black(idle:$chan:timer_start)} {
+	lappend idle_channels $chan
+	set black(idle:counter:$chan) 0
+			}
+		}
+	}
+#end
+
+}
+	
+#banmethod remove
+
+if {[info exists black(banmethod_rem:timer_start)]} {
+if {![info exists black(banmethod_rem:counter)]} {
+	set black(banmethod_rem:counter) 0
+}
+	set black(banmethod_rem:counter) [expr $black(banmethod_rem:counter) + 1]
+if {$black(banmethod_rem:counter) > $black(banmethod_rem:timer_start)} {
+	set black(banmethod_rem:counter) 0
+	} elseif {$black(banmethod_rem:timer_start) < $black(banmethod_rem:counter)} {
+	set black(broadcast:counter) 0
+				} elseif {$black(banmethod_rem:counter) == $black(banmethod_rem:timer_start)} {
+	set black(banmethod_rem:counter) 0
+	banmethod_memory:autoremove
+	}
+}
+
+#end
+	
+#Auto Unsuspend
+if {[info exists black(s:timer_start)]} {
+	s:process:timer
+}
+#end
+	
+#AutoBroadcast
+
+if {[info exists black(broadcast:timer_start)]} {
+if {![info exists black(broadcast:counter)]} {
+	set black(broadcast:counter) 0
+}	
+	set black(broadcast:counter) [expr $black(broadcast:counter) + 1]
+if {$black(broadcast:counter) > $black(broadcast:timer_start)} {
+	set black(broadcast:counter) 0
+	} elseif {$black(broadcast:timer_start) < $black(broadcast:counter)} {
+	set black(broadcast:counter) 0
+				} elseif {$black(broadcast:counter) == $black(broadcast:timer_start)} {
+	set black(broadcast:counter) 0
+	broadcastpublic:show
+	}
+}
+
+#Away Check
+if {![info exists black(away:timer_start)]} {
+	set black(away:timer_start) 720
+}
+if {![info exists black(counter:away)]} {
+	set black(counter:away) 0
+}
+	set black(counter:away) [expr $black(counter:away) + 1]
+if {$black(counter:away) > $black(away:timer_start)} {
+	set black(counter:away) 0
+				} elseif {$black(away:timer_start) < $black(counter:away)} {
+	set black(counter:away) 0
+				} elseif {$black(counter:away) == $black(away:timer_start)} {
+	set black(counter:away) 0
+	away:timer
+}
+#end
+
+if {$badchan_channels != ""} {
+	badchan:scantimer [join $badchan_channels]
+}
+
+if {$clonescan_channels != ""} {
+	clonescan:timer [join $clonescan_channels]
+}
+if {$antispam_channels != ""} {
+	antispam:protect:cycle [join $antispam_channels]
+}
+if {$anunt_channels != ""} {
+	anuntpublic:show [join $anunt_channels]
+}
+if {$idle_channels != ""} {
+	antidle:module [join $idle_channels]
+}
+if {$voiceonmsg_channels != ""} {
+	voiceonmsg:timer [join $voiceonmsg_channels]
+}
+if {$limit_channels != ""} {
+	limit:timer [join $limit_channels]
+}
+
+if {$quote_channels != ""} {
+	quote:announce [join $quote_channels]
+}
+
+if {$voiceme_channels != ""} {
+	voiceme:showmsg_timer [join $voiceme_channels]
+}
+
+if {$topwords_channels != ""} {
+	topwords:save:channels [join $topwords_channels]
+}
+	timer 1 blacktools:timers:runtime
+}
+
+#################
+###########################################################################
+##   END                                                                 ##
+###########################################################################

+ 1976 - 0
BlackTools/Commands/BT.AddCmds.tcl

@@ -0,0 +1,1976 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+############################   ADDCMDS TCL   ############################
+#########################################################################
+##						                       						   ##
+##   BlackTools  : http://blacktools.tclscripts.net	     	           ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                            					   ##
+#########################################################################
+
+
+############################## Commands #################################
+
+########################## add ##################################
+
+proc add:ban {mask reason} {
+	global black
+	blacktools:global:ban [channels] 0 $mask "HandleBan" $reason 0 $reason "-1" "1"
+}
+
+proc add:process {user uhost handle level hand host chan chan1 nick type cmd reason addban} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand $cmd 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {[validuser $handle]} {
+	set user $handle
+}
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$cmd"
+		}
+	}
+	return
+}
+	set show_user $user
+	set time [unixtime]
+	set flags "nmo|NMOAVH"
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	
+if {$user != ""} {
+	set user [strip:all $user]
+	set replace(%user%) $show_user
+if {$uhost == ""} {
+	set uhost [string map [array get replace] $black(hostadd)]
+}
+if {[userlist] != ""} {
+foreach usr [userlist] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $uhost] && (![string equal -nocase $usr $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.5 $usr
+	set user $usr
+	set show_user $usr
+			}
+		}
+	}
+}
+if {[matchattr $user $black(banflag)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
+	return
+}
+ 
+if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.6 [blacktools:getlevelname 3 $hand]
+	return
+}
+if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 4 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.7 [blacktools:getlevelname 4 $hand]
+	return
+}
+if {[matchattr $hand -|M $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.8 [blacktools:getlevelname 3 $hand]
+	return
+}
+
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} { 
+	set flags "-|olM"
+if {[validuser $user]} {
+	set check_global [check:global $user]
+if {$check_global != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
+	return
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return 
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user o|- $chan] && [matchattr $hand -|M $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user n|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user m|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {[matchattr $user o|- $chan] && [matchattr $hand o|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSOHAMV $chan
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
+	set flags "-|olA"
+ if {[validuser $user]} {
+	set check_global [check:global $user]
+if {$check_global != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
+	set flags "m|-"
+if {[matchattr $hand n]} {
+if {[validuser $user]} { 
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+foreach c [channels] {
+	if {[matchattr $user $black(exceptflags) $c]} {
+	chattr $user -|-qgaolSHOAMV $c
+	}
+}
+	chattr $user -omjlptxq
+	chattr $user $flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 2 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags 
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 2 $hand]"
+		}
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 9 $hand]]} {
+	set flags "B|-"
+if {[matchattr $hand n]} {
+	set userlang [getuser $hand XTRA OUTPUT_LANG]
+if {$userlang == ""} { set userlang "[string tolower $black(default_lang)]" }
+	if {$reason == ""} { set getreason $black(say.$userlang.handleban.1) } else { set getreason $reason }
+if {[validuser $user]} {
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+foreach c [channels] {
+	if {[matchattr $user $black(exceptflags) $c]} {
+	chattr $user -|-qgaolSHOAMV $c
+	}
+}
+	chattr $user -omjlptxq
+	chattr $user $flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	setuser $user XTRA BLACK_REASON $getreason
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 9 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags 
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	setuser $user XTRA BLACK_REASON $getreason
+	add:ban $uhost $reason
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 9 $hand]"
+		}
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+	set flags "o|-"
+if {[matchattr $hand nm]} {
+if {[validuser $user]} { 
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+foreach c [channels] {
+	if {[matchattr $user $black(exceptflags) $c]} {
+	chattr $user -|-qgaolSHOAMV $c
+	}
+}
+	chattr $user -omjlptxq
+	chattr $user $flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags 
+	setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
+		}
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	set flags "-|olO"
+if {[validuser $user]} { 
+	set check_global [check:global $user]
+if {$check_global != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
+	set flags "-|H"
+if {[validuser $user]} { 
+	set check_global [check:global $user]
+if {$check_global != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qHolSOAMV $chan
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
+	set flags "-|olV"
+if {[validuser $user]} { 
+	set check_global [check:global $user]
+if {$check_global != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
+	return
+}	
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	chattr $user -|-qolSHOAMV $chan	
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
+} else {
+	adduser $user $uhost
+	set user [check:handle $user $nick $host $hand $chan $chan1]
+	chattr $user $flags $chan 
+	setuser $user XTRA CHANMODIF($chan) $time:$hand
+
+	blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
+	blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
+							
+				}
+			} else {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
+	return
+			}
+		}
+	}
+}
+
+############################## delacc ################################
+
+proc delacc:process {nick host hand chan chan1 user type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "delacc" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delacc"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delacc"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
+	return
+}
+
+if {$user != ""} {
+	set show_user $user
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[matchattr $hand n|- $chan]} {
+if {[matchattr $user mo]} {
+if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} { 
+if {[matchattr $user m]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.2 $show_user
+} elseif {[matchattr $user o]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
+}
+		chattr $user -moagjlptxq
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	return
+	}
+} elseif {[matchattr $hand m]} {
+if {[matchattr $user o]} {
+if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} { 
+	chattr $user -oagjlptxq
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
+} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	return
+	}
+}
+	
+if {![matchattr $user -|OAMVH $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+
+if {[validuser $user]} { 
+	chattr $user -|-qolSgaOAMVHf $chan
+	blacktools:tell $nick $host $hand $chan $chan1 delacc.1 $show_user
+			} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+	}
+}
+
+############################## del #####################################
+
+proc del:process {nick host hand chan chan1 args type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "del" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$args == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "del"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "del"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "del"
+		}
+	}
+	return
+} 
+
+foreach user $args {
+	set show_user $user
+if {$user != ""} {
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+
+if {![matchattr $hand n] && [matchattr $user $black(banflag)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	continue
+}
+
+if {[validuser $user]} { 
+if {[matchattr $hand -|MA $chan]} {
+foreach c [channels] {
+	if {![string equal -nocase $c $chan]} {
+	if {[matchattr $user nmo|HAMOVSo $c]} {
+	blacktools:tell $nick $host $hand $chan $chan1 del.2 $show_user
+	continue
+			}
+		}
+	}
+}
+
+if {[matchattr $user B]} {
+		set gethost [getuser $user hosts]
+foreach h $gethost {
+foreach c [channels] {
+if {[validchan $c]} {
+if {[ischanban $h $c]} {
+if {[setting:get $c xonly] && [onchan $black(chanserv) $c]} {
+	putserv "PRIVMSG $black(chanserv) :unban $c $h"
+} else {
+	pushmode $c	-b $h
+					}
+				}
+			}
+		}
+	}
+}
+	deluser $user
+	notes:remove:ondelete $user
+	s:remove:ondelete $user
+	blacktools:tell $nick $host $hand $chan $chan1 del.1 $show_user
+			} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+		}
+	}
+}
+
+
+################################ addhost #############################
+
+proc addhost:process {nick host hand chan chan1 user hosts type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "addhost" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set found_it 0
+	set found_user ""
+	set show_user $user
+	set show_hosts $hosts
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "addhost"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "addhost"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "addhost"
+		}
+	}
+	return
+}
+
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+
+if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
+	return
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {![string equal -nocase $hosts "-telnet!*@*"]} {
+foreach u [userlist] {
+	set h [getuser $u hosts]
+foreach hs $h {
+if {[string match -nocase [split $hs] $hosts]} {
+	set found_it 1
+	set found_user $u
+			}
+		}
+	}
+}
+if {[validuser $user]} {
+if {$found_it == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $show_hosts"
+	return
+}
+	setuser $user HOSTS $hosts
+if {[matchattr $user B]} {
+	add:ban $hosts [join [getuser $user XTRA BLACK_REASON]]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.2 "$show_user $show_hosts"
+	} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+############################### delhost ############################
+
+proc delhost:process {nick host hand chan chan1 user hosts type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "delhost" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_user $user
+	set show_hosts $hosts
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delhost"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delhost"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delhost"
+		}
+	}
+	return
+}
+
+if {$host != "prv"} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	}
+}
+
+if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
+	return
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[validuser $user]} {
+	set hhost [getuser $user hosts]
+foreach hhost $hhost {
+if {[string match -nocase [split $hhost] $hosts]} {
+	set foundhost 1
+	}
+}
+
+if {![info exists foundhost]} {
+	blacktools:tell $nick $host $hand $chan $chan1 delhost.1 "$show_user $show_hosts"
+	return
+}
+	delhost $user $hosts
+foreach c [channels] {
+if {[validchan $c]} {
+if {[ischanban $hosts $c]} {
+if {[setting:get $c xonly] && [onchan $black(chanserv) $c]} {
+	putserv "PRIVMSG $black(chanserv) :unban $c $hosts"
+} else {
+	pushmode $c	-b $hosts
+			}
+		}
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 delhost.2 "$show_user $show_hosts"
+		} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	}
+}
+
+############################### chuser ############################
+
+proc chuser:process {nick host hand chan chan1 user chandle type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "chuser" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set owner_user $user
+	set owner_chandle $chandle
+	set show_user $user
+	set show_chandle $chandle
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$user == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "chuser"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "chuser"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "chuser"
+		}
+	}
+	return
+}
+
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+
+if {[matchattr $hand -|M $chan] && ![matchattr $user -|ASOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+	return
+}
+
+if {[validuser $chandle]} {
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
+return
+}
+
+if {[validuser $user]} {
+	chhandle $user $chandle
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.1 "$show_user $show_chandle"
+	} else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+############################ userlist #############################
+
+proc userlist:execute {hand host level chan chan1 nick type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "userlist" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set gl 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$level == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "userlist"
+		}
+	}
+	return
+}
+if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} {
+    set flags "-|M"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+if {$list == ""} { set list "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 3 $hand] $list $gl
+} elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
+	set flags "-|A"
+	set numar [llength [userlist $flags $chan]]
+	set list [userlist $flags $chan]
+if {$list == ""} { set list "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 4 $hand] $list $gl
+} elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
+	set flags "-|H"
+	set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+if {$list == ""} { set list "N/A" } 
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 7 $hand] $list $gl
+} elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
+	set flags "-|O"
+    set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+if {$list == ""} { set list "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 5 $hand] $list $gl
+} elseif {[string equal -nocase $level [blacktools:getlevelname 9 $hand]] && [matchattr $hand n]} {
+	set gl 1
+	set flags "B|-"
+    set list [userlist $flags $chan]
+    set numar [llength [userlist $flags $chan]]
+if {$list == ""} { set list "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 9 $hand] $list $gl
+} elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
+if {[matchattr $hand nmo]} {
+	set gl 1
+	set bossflags "n|-"
+	set ownerflags "m|-"
+	set listbossowner [userlist $bossflags]
+	set listowner [userlist $ownerflags]
+foreach user $listbossowner {
+if {[lsearch -exact $listowner $user] > -1} {
+	set pos [lsearch -exact	$listowner $user]
+	set listowner [lreplace $listowner $pos $pos]
+	}
+}
+if {$listowner == ""} { set listowner "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 1 $hand] $listbossowner $gl
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 2 $hand] $listowner $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
+if {[matchattr $hand nmo]} {
+	set gl 1
+	set bossflags "n|-"
+	set ownerflags "m|-"
+	set masterflags "o|-"
+	set listbossowner [userlist $bossflags]
+	set listowner [userlist $ownerflags]
+	set listmaster [userlist $masterflags]
+foreach user $listbossowner {
+if {[lsearch -exact $listmaster $user] > -1} {
+	set pos [lsearch -exact	$listmaster $user]
+	set listmaster [lreplace $listmaster $pos $pos]
+	}
+}
+foreach user $listowner {
+if {[lsearch -exact $listmaster $user] > -1} {
+	set pos [lsearch -exact	$listmaster $user]
+	set listmaster [lreplace $listmaster $pos $pos]
+	}
+}
+if {$listmaster == ""} { set listmaster "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 8 $hand] $listmaster $gl
+	}
+} elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
+set flags "-|V"
+    set numar [llength [userlist $flags $chan]]
+    set list [userlist $flags $chan]
+if {$list == ""} { set list "N/A" }
+	userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 6 $hand] $list $gl
+} elseif {[string equal -nocase $level "all"]} {
+array set flgc [list]	
+	set flags "-|MHAVO"
+	set list [userlist $flags $chan]
+	set numar [llength [userlist $flags $chan]]
+foreach user $list {
+if {[matchattr $user -|M $chan]} {
+	lappend flgc([blacktools:getlevelname 3 $hand]) $user
+} elseif {[matchattr $user -|A $chan]} { 
+	lappend flgc([blacktools:getlevelname 4 $hand]) $user
+} elseif {[matchattr $user -|O $chan]} {
+	lappend flgc([blacktools:getlevelname 5 $hand]) $user
+} elseif {[matchattr $user -|V $chan]} {
+	lappend flgc([blacktools:getlevelname 6 $hand]) $user
+} elseif {[matchattr $user -|H $chan]} {
+	lappend flgc([blacktools:getlevelname 7 $hand]) $user
+	}
+}
+
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.2 $numar
+foreach flw [array names flgc] {
+	userlist:details $nick $host $hand $chan $chan1 $flw $flgc($flw) $gl
+			}
+		} else {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
+	return
+		}
+	}		
+}
+
+proc userlist:details {nick host hand chan chan1 access usernames gl} {
+	global black
+if {![info exists onchan]} {
+	set onchan ""
+}
+
+if {![info exists the_usernames]} {
+	set the_usernames ""
+}
+
+foreach user $usernames {
+if {$host != "prv"} {
+	foreach n [chanlist $chan] {
+	set id [nick2hand $n]
+
+if {[string equal -nocase $id $user]} {
+	lappend the_usernames "$user/\002$n\002\[[userlist:check_mode $user $chan]\]"
+	lappend onchan $user
+			}
+		}
+	}
+if {[lsearch -exact [string tolower $onchan] [string tolower $user]] == -1} {
+	lappend the_usernames "$user\[[userlist:check_mode $user $chan]\]"
+	}
+}
+if {$usernames == "-"} {
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] $usernames"
+	return
+}
+foreach user [wordwrap $the_usernames 440] {
+	blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] [join $user]"
+	}
+}
+
+proc userlist:check_mode {user chan} {
+	global black
+if {[matchattr $user a]} {
+	return "+o all"
+	}
+if {[matchattr $user g]} {
+	return "+v all"
+	}
+if {[matchattr $user -|a $chan]} {
+	return "+o"
+	}
+if {[matchattr $user -|g $chan]} {
+	return "+v"
+	}
+}
+
+############################### info ############################
+
+proc info:process:info_return {nick host hand chan chan1 user} {
+	global black
+	set show_user $user
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	blacktools:tell $nick $host $hand $chan $chan1 info.11 "$show_user"
+if {[matchattr $hand nmo]} {
+foreach c [channels] {
+if {[matchattr $user -|H $c]} { 
+	set fl [blacktools:getlevelname 7 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|V $c]} { 
+	set fl [blacktools:getlevelname 6 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|O $c]} { 
+	set fl [blacktools:getlevelname 5 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|A $c]} {
+	set fl [blacktools:getlevelname 4 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|M $c]} {
+	set fl [blacktools:getlevelname 3 $hand]
+	lappend flg($fl) $c 
+	}
+}
+foreach cf [array names flg] {
+lappend exit \002[join $flg($cf) ", "]\002 ($cf)
+	}
+}
+
+if {![info exists exit]} { set exit "N/A"}
+
+	set lastseen [getuser $user LASTON $chan]
+	set hosts [getuser $user hosts]
+
+if {$lastseen == ""} {
+	set lastseen "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+if {[matchattr $hand mno]} {
+	set laston [getuser $user laston]
+	set lastseen [lindex $laston 0]
+	set lastchan [lindex $laston 1]
+if {$laston == ""} {
+	set lastseen "N/A"
+	set lastchan "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
+if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
+	}
+}
+
+proc info:process:chan {nick host hand chan chan1} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand "info" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nocmem $chan
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set status "OK"
+	set modes [channel get $chan chanmode]
+	set manager [userlist -|M $chan]
+	if {$manager == ""} { set manager "N/A" }
+	set topic [join [topic:return $chan]]
+	set url [join [setting:get $chan url]]
+if {[setting:get $chan jointime] == ""} {
+	set jointime "N/A"
+	set jointime_2 "N/A"
+} else {
+	set jointime [clock format [setting:get $chan jointime] -format %D-%H:%M:%S]
+	set jointime_2 [return_time $getlang [expr [unixtime] - [setting:get $chan jointime]]]
+}
+
+	set joincount [setting:get $chan joincount]
+if {$joincount == ""} {set joincount 0}
+	set nr_user [llength [chanlist $chan]]
+	set nr_ban [llength [blacktools:banlist $chan]]
+	set nr_user_ac 0
+foreach user [chanlist $chan] {
+	set handle [nick2hand $user]
+if {[matchattr $handle -|OgaAHMNV $chan]} {
+	set nr_user_ac [expr $nr_user_ac + 1]
+	}
+}
+	set file [open $black(seen_file) "r"]
+	set database [read -nonewline $file]
+	set data [split $database "\n"]
+	close $file
+	set nr_seen [llength [lsearch -all [string tolower $data] [string tolower "* $chan *"]]]
+
+	blacktools:tell $nick $host $hand $chan $chan1 info.15 "$chan $modes"
+	blacktools:tell $nick $host $hand $chan $chan1 info.16 "$manager"
+
+if {[channel get $chan inactive]} {
+	set found_it 1
+if {[info exists black(abuse:$chan)]} {
+if {$black(abuse:$chan) == "1"} {
+	set text [black:color:set "" $black(say.$getlang.info.29)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "3"} {
+	set text [black:color:set "" $black(say.$getlang.info.27)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "2"} {
+	set text [black:color:set "" $black(say.$getlang.info.28)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "4"} {
+	set text [black:color:set "" $black(say.$getlang.info.26)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "5"} {
+	set text [black:color:set "" $black(say.$getlang.info.35)]
+	set status "$text"
+	}
+} else {
+	set text [black:color:set "" $black(say.$getlang.info.22)]
+	set status "$text"
+	}
+}
+if {![info exist found_it]} {
+if {![onchan $botnick $chan]} {
+	set found_it 1
+if {[info exists black(abuse:$chan)]} {
+if {$black(abuse:$chan) == "1"} {
+	set text [black:color:set "" $black(say.$getlang.info.33)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "3"} {
+	set text [black:color:set "" $black(say.$getlang.info.31)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "2"} {
+	set text [black:color:set "" $black(say.$getlang.info.32)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "4"} {
+	set text [black:color:set "" $black(say.$getlang.info.30)]
+	set status "$text"
+	} elseif {$black(abuse:$chan) == "5"} {
+	set text [black:color:set "" $black(say.$getlang.info.34)]
+	set status "$text"
+	} 
+} else {
+	set text [black:color:set "" $black(say.$getlang.info.23)]
+	set status "$text"
+		}
+	}
+}
+
+if {![info exist found_it]} {
+if {![botisop $chan]} {
+	set text [black:color:set "" $black(say.$getlang.info.24)]
+	set status "$text"
+		}
+	}
+if {$status != "OK"} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.19 "$status"
+}
+if {$topic != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.17 "$topic"
+}
+if {$url != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.18 "$url"
+}
+	blacktools:tell $nick $host $hand $chan $chan1 info.20 "$jointime $jointime_2"
+
+	blacktools:tell $nick $host $hand $chan $chan1 info.21 "$joincount $nr_user $nr_user_ac $nr_ban $nr_seen"
+}
+
+proc info:process:host {nick host hand chan chan1 get_host} {
+	global black
+	set users ""
+foreach user [userlist] {
+foreach h [getuser $user hosts] {
+if {[string match -nocase $get_host $h]} {
+	set found_host 1
+	lappend users $user
+		}
+	}	
+}
+	set users [lsort -unique $users]
+	set user_num [llength $users]
+if {![info exists found_host]} {
+	return 0
+}
+if {$user_num == 1} {
+	info:process:info_return $nick $host $hand $chan $chan1 [join $users]
+	return 1
+}
+
+if {$user_num > 1 && $user_num < 11} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.12 "$user_num $users"
+	blacktools:tell $nick $host $hand $chan $chan1 info.14 none
+	return 1
+}
+
+if {$user_num > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.13 "$user_num"
+	return 1
+	}
+}
+
+proc info:process {nick host hand chan chan1 user type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "info" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set show_user $user
+	set time [ctime [unixtime]]
+	array set flg [list]
+
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "info"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "info"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "info"
+		}
+	}
+	return
+}
+
+if {[matchattr $hand nmo] && ($host == "prv") && (![regexp {^[&#]} $chan])} {
+foreach chan [channels] {
+if {[onchan $user $chan]} {
+	set handle [nick2hand $user]
+		}
+	}
+} else {
+if {[onchan $user $chan]} {
+	set handle [nick2hand $user]
+	}
+}
+
+if {[info exists handle]} {
+if {[validuser $handle]} {
+	set user $handle
+	}
+}
+
+if {[regexp {\*} $user]} {
+if {[matchattr $hand nmo]} {
+	set check [info:process:host $nick $host $hand $chan $chan1 $user]
+if {$check == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.hostnotexist $user
+		}
+	return
+	}
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none 
+	return
+}
+
+if {(![matchattr $user nmaBgo|OwgaAHSMNV $chan]) && [matchattr $hand mno]} {
+	info:process:info_return $nick $host $hand $chan $chan1 $user
+	return
+} else {
+if {[matchattr $user B] && ![matchattr $hand n] && [matchattr $hand mo]} {
+	info:process:info_return $nick $host $hand $chan $chan1 $user
+	return	
+}
+if {![matchattr $user nmgao|OwgaAHSMNV $chan]} {
+if {[matchattr $user B] && ![matchattr $hand n]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none  
+	return
+		}
+	}
+}
+
+if {[matchattr $hand nmo|- $chan]} {
+foreach c [channels] {
+if {[matchattr $user -|H $c]} { 
+	set fl [blacktools:getlevelname 7 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|V $c]} { 
+	set fl [blacktools:getlevelname 6 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|O $c]} { 
+	set fl [blacktools:getlevelname 5 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|A $c]} {
+	set fl [blacktools:getlevelname 4 $hand]
+	lappend flg($fl) $c
+} elseif {[matchattr $user -|M $c]} {
+	set fl [blacktools:getlevelname 3 $hand]
+	lappend flg($fl) $c 
+	}
+}
+foreach cf [array names flg] {
+lappend exit \002[join $flg($cf) ", "]\002 ($cf)
+	}
+}
+
+if {![info exists exit]} { set exit "N/A"}
+
+	set cflags [chattr $user | $chan]
+if {[matchattr $user a]} {
+	set automode_gl "OP"
+} elseif {[matchattr $user g]} {
+	set automode_gl "VOICE"
+} else {
+	set automode_gl "N/A"
+}
+
+if {[matchattr $user -|V $chan]} { set flags [blacktools:getlevelname 6 $hand] } elseif {[matchattr $user -|O $chan]} { set flags [blacktools:getlevelname 5 $hand] } elseif {[matchattr $user -|A $chan]} { set flags [blacktools:getlevelname 4 $hand] } elseif {[matchattr $user -|H $chan]} { set flags [blacktools:getlevelname 7 $hand] } else { set flags "\002N/A\002" }
+if {[matchattr $user n|- $chan]} { set flags [blacktools:getlevelname 1 $hand] } elseif {[matchattr $user m|- $chan]} { set flags [blacktools:getlevelname 2 $hand] } elseif {[matchattr $user o|- $chan]} { set flags [blacktools:getlevelname 8 $hand]} elseif {[matchattr $user B|- $chan]} { set flags [blacktools:getlevelname 9 $hand]} elseif {[matchattr $user -|M $chan]} { set flags [blacktools:getlevelname 3 $hand] } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE" } 
+
+if {[matchattr $user -|a $chan]} {
+	set automode "OP"
+} elseif {[matchattr $user -|g $chan]} {
+	set automode "VOICE"
+} else {
+	set automode "N/A"
+}
+
+if {[matchattr $user -|q $chan]} {
+	set suspended 1
+} else {
+	set suspended 0
+}
+	set getflags [getflags $user $chan]
+if {![string equal -nocase $show_user $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user\[[black:color 1 $hand $user]\] $flags"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user $flags"
+}
+if {![matchattr $user B]} {
+if {$automode_gl != "N/A"} {
+if {[matchattr $user mnaog]} {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode_gl\[all\] $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode_gl\[all\] $user"	
+}
+} else {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode_gl\[all\] $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode_gl\[all\] $user"
+	}
+}
+		} else {
+if {[matchattr $user mno]} {
+if {$getflags != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode $user"
+}
+	} else {
+if {$getflags != ""} {	
+	blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode $getflags $user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode $user"
+			}
+		}	
+	}
+}
+if {[matchattr $user B]} {
+	set get [getuser $user XTRA BLACK_REASON]
+if {$get != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.37 $get
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.37 $black(say.$getlang.handleban.1)
+	}
+}
+	set extra "CHANMODIF($chan)"
+	set get_chan $chan
+if {[matchattr $user mno]} {
+	set extra "CHANMODIF(GLOBAL)"
+	set get_chan "GLOBAL"
+}
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set read_user [lindex [split $line] 1]
+if {[string equal -nocase $read_chan $get_chan] && [string equal -nocase $read_user $user]} {
+	set read_time [lindex [split $line] 2]
+	
+if {[unixtime] > $read_time} {
+	set read_time [expr [unixtime] - $read_time]
+} else {
+	set read_time [expr $read_time - [unixtime]]
+}
+	set read_time [return_time_2 $getlang $read_time]
+	
+if {$read_time == 0} {
+	continue
+}
+	set split_readtime [split $read_time " "]
+	set days [lindex $split_readtime 0]
+	set the_time [lindex $split_readtime 1]
+	set read_level [lindex [split $line] 4]
+	set read_reason [lrange [split $line] 5 end]
+if {[string equal -nocase $get_chan "GLOBAL"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.9 "$read_time $read_level $read_reason"
+			} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.7 "$read_time $read_level $read_reason"
+			}
+		}
+	}
+
+if {[getuser $user INFO] != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.3 "[getuser $user INFO]"
+}
+	set lastmodify [getuser $user XTRA $extra]
+if {$lastmodify != ""} {
+	set split_last [split $lastmodify ":"]
+	set lastmodif_time [lindex $split_last 0]
+	set lastmodif_time [clock format $lastmodif_time -format %D-%H:%M:%S]
+	set lastmodif_hand [join [lindex [split $split_last] 1]]
+} else {
+	set date [getuser $user XTRA LASTMODIFDATE]
+	set last [getuser $user XTRA LASTMODIFBY]
+	set lastmodif_time $date
+	set lastmodif_hand $last
+}
+
+if {($lastmodif_time == "") && ($lastmodif_hand == "")} {
+	set lastmodif_time "N/A"
+	set lastmodif_hand "N/A"
+}
+
+	set lastseen [getuser $user LASTON $chan]
+	set hosts [getuser $user hosts]
+
+if {$lastseen == ""} {
+	set lastseen "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+if {![matchattr $user B]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.4 "$lastmodif_hand $lastmodif_time"
+}
+if {[matchattr $hand mno]} {
+	set laston [getuser $user laston]
+	set lastseen [lindex $laston 0]
+	set lastchan [lindex $laston 1]
+if {$laston == ""} {
+	set lastseen "N/A"
+	set lastchan "N/A"
+} else {
+	set lastseen [clock format $lastseen -format %D-%H:%M:%S]
+}
+if {![matchattr $user B]} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
+	}
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
+}
+if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
+foreach h [wordwrap $hosts 440] {
+	blacktools:tell $nick $host $hand $chan $chan1 info.6 $h
+	}
+}
+if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
+if {[getsettings $user] != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.36 [join [getsettings $user] " ; "]
+	}
+}
+if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
+	blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
+	}
+}
+
+proc getsettings {user} {
+	global black
+	set output ""
+	set settings "OUTPUT_LANG OUTPUT_TYPE autoinvite mychan mychar OUTPUT_COLORS NO_NOTES"
+foreach setting [string toupper $settings] {
+	set get [getuser $user XTRA $setting]
+if {$get != ""} {
+if {$setting == "OUTPUT_COLORS"} {
+	set setting "COLORS"
+}
+if {$setting == "NO_NOTES"} {
+	set setting "NOTES"
+	set get "OFF"
+}
+if {$setting == "OUTPUT_TYPE"} {
+	set setting "OUTPUT"
+	switch $get {
+	0 {
+	set get "NOTICE"
+	}
+	1 {
+	set get "CHAN"
+	}
+	2 {
+	set get "MSG"
+			}
+		}
+	}
+if {$setting == "OUTPUT_LANG"} {
+	set setting "LANG"
+	set get [string toupper $get]
+}
+if {$setting == "AUTOINVITE"} {
+	switch $get {
+	1 {
+	set get "ON"
+		}
+	0 {
+	set get "OFF"
+					}
+				}
+			}
+	lappend output "$setting\[[join $get ","]\]"
+		}
+	}
+	return $output
+}
+
+proc getflags {user chan} {
+	global black
+	set flags ""
+if {[matchattr $user -|f $chan]} {	
+	lappend flags "f"
+}
+if {[matchattr $user -|w $chan]} {	
+	lappend flags "w"
+}
+if {[matchattr $user -|P $chan]} {	
+	lappend flags "P"
+}
+	return [join $flags ""]
+}
+
+################################# s ###############################
+
+proc s:process {nick host hand chan chan1 user type suspend_time suspend_reason} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "s" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set show_user $user
+	set suspend_time $suspend_time
+	set show_suspend_reason $suspend_reason
+	set flags "-|q"
+	set gl_flags "+q"
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set unixtime [unixtime]
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "s"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "s"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "s"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+if {[matchattr $user -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.1 $show_user
+	return
+}
+
+if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+if {![regexp {^[0-9]} $suspend_time]} {
+	set suspend_time $black(s:default_time)
+}
+
+if {$suspend_reason == ""} {
+	set suspend_reason $black(say.$getlang.s.3)
+}
+	
+	set get_time [expr [time_return_minute $suspend_time] * 60]
+	set get_time [expr $unixtime + $get_time]
+
+if {[matchattr $hand n] && [matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+	}
+	return
+} elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+	}
+	return
+} elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
+	chattr $user $gl_flags
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
+if {![info exists black(s:timer_start)]} {
+	set black(s:timer_start) 1
+		}
+	}
+	return
+}
+	chattr $user $flags $chan
+	setuser $user XTRA CHANMODIF($chan) $get_time:$hand
+	set current_flags [s:process:getlevel $hand $chan]
+	set s_add [s:process:add $nick $hand $chan $chan1 $user $get_time $hand $suspend_reason]
+if {$s_add == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 s.2 $show_user
+if {![info exists black(s:timer_start)]} {
+	set black(s:timer_start) 1
+		}
+	}
+}
+
+proc s:process:add {nick hand chan chan1 user suspend_time bywho reason} {
+	global black username
+	set current_level [s:process:getlevel $bywho $chan]
+	set not_allowed 0
+	set found_timer 0
+	set found_entry 0
+	set lin 0
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+foreach line $data {
+	set lin [expr $lin + 1]
+	set get_channel [lindex [split $line] 0]
+	set get_username [lindex [split $line] 1]
+	set get_bywho [lindex [split $line] 3]
+if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
+	set found_entry 1
+	set get_level [lindex [split $line] 4]
+	set not_allowed [s:process:allow $get_level $current_level]
+	}
+}
+
+if {$not_allowed == "1"} {
+	blacktools:tell $nick "" $hand $chan $chan1 s.4 $user
+	return 0
+}
+
+if {$not_allowed == "0" && $found_entry == 1} {
+	set file [open $black(s_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/s_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set get_channel [lindex [split $line] 0]
+	set get_username [lindex [split $line] 1]
+if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
+	continue
+	} else {
+	puts $tempwrite $line
+	}
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(s_file)
+}
+	set who "$chan $user $suspend_time $bywho $current_level $reason"
+	set file [open $black(s_file) "a"]
+	puts $file $who
+	close $file
+	return 1
+}
+
+proc s:process:getlevel {hand chan} {
+	global black
+if {[matchattr $hand n]} {
+	set current_flags "BOSS-OWNER"
+} elseif {[matchattr $hand m]} {
+	set current_flags "OWNER"
+} elseif {[matchattr $hand o]} { 
+	set current_flags "MASTER" 
+} elseif {[matchattr $hand -|M $chan]} { 
+	set current_flags "MANAGER"
+} elseif {[matchattr $hand -|A $chan]} { 
+	set current_flags "ADMIN"
+	}
+	return $current_flags
+}
+
+proc s:process:allow {get_level current_level} {
+	global black
+if {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "OWNER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1			
+				} elseif {[string equal -nocase $get_level "MANAGER"] && [string equal -nocase $current_level "ADMIN"]} {
+	return 1
+	}
+	return 0
+}
+
+################################## us ################################
+
+proc us:process {nick host hand chan chan1 user type} {
+global botnick black
+set cmd_status [btcmd:status $chan $hand "us" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_user $user
+	set get_time [unixtime]
+	set flags "-|-q"
+	set gl_flags "-q"
+
+
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "us"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "us"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "us"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+if {![matchattr $user q|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.1 $show_user
+	return
+}
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+}
+	set current_level [s:process:getlevel $hand $chan]
+	
+if {[matchattr $hand n] && [matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
+} elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
+}  elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
+	setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
+	set type2 "1"
+	set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
+
+} else {
+	set type2 "0"
+	set inf [us:process:remove $nick $host $hand $chan $chan1 $user $type $current_level]
+	setuser $user XTRA CHANMODIF($chan) $get_time:$hand
+}
+if {$inf == "1"} {
+if {$type2 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 us.3 $show_user
+		} else {
+	blacktools:tell $nick $host $hand $chan $chan1 us.2 $show_user
+		}	
+	}
+}
+
+proc us:process:remove {nick host hand chan chan1 user type level} {
+	global black
+	set found_it 0
+	set not_allowed 0
+	set file [open $black(s_file) "r"]
+	set database [read -nonewline $file]
+	close $file
+	set data [split $database "\n"]
+foreach line $data {
+	set get_channel [lindex [split $line] 0]
+	set get_username [lindex [split $line] 1]
+	set get_bywho [lindex [split $line] 3]
+if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
+	set found_entry 1
+	set get_level [lindex [split $line] 4]
+	set not_allowed [s:process:allow $get_level $level]
+	}
+}
+
+if {$not_allowed == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 us.4 $user
+	return 0
+}
+	set file [open $black(s_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/s_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set tm [lindex [split $line] 2]
+	set suspend_chan [lindex [split $line] 0]
+	set suspend_user [lindex [split $line] 1]
+if {[string equal -nocase $user $suspend_user] && [string equal -nocase $suspend_chan $chan]} {
+	suspend:delete:action $suspend_user $suspend_chan
+	set found_it 1
+	continue
+	} else {
+	puts $tempwrite $line
+	}
+}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(s_file)
+	return $found_it
+}
+
+############################# auto #################################
+
+proc auto:join {nick host hand chan} {
+	global black
+if {[matchattr $hand a|a $chan]} {
+if {[matchattr $hand q|q $chan]} {
+	return
+}
+	pushmode $chan +o $nick
+}	
+
+if {[matchattr $hand g|g $chan]} {
+if {[matchattr $hand q|q $chan]} {
+	return
+}
+	pushmode $chan +v $nick
+	}	
+}
+
+proc auto:process {nick host hand chan chan1 user option global type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "auto" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_user $user
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+	
+}	
+
+if {$user == "" || ![regexp {^[+ -]} $option]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "auto"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "auto"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "auto"
+		}
+	}
+	return 0
+}
+
+set verify [string trim $option {"+","-"}]
+
+if {[string equal -nocase $verify "o"] || [string equal -nocase $verify "v"]} {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+
+if {![validuser $user]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none	
+	return	
+}
+
+	set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
+if {$get_status_access == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
+	return
+	}
+}
+
+if {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
+
+if {[string equal -nocase $option "+o"]} {
+if {[matchattr $user g]} {
+	chattr $user -g
+}
+	chattr $user +a
+	blacktools:tell $nick $host $hand $chan $chan1 auto.12 $show_user
+}
+
+if {[string equal -nocase $option "-o"]} {
+	chattr $user -a
+	blacktools:tell $nick $host $hand $chan $chan1 auto.20 $show_user
+}
+
+if {[string equal -nocase $option "+v"]} {
+if {[matchattr $user a]} {
+	chattr $user -a
+}
+	chattr $user +g
+	blacktools:tell $nick $host $hand $chan $chan1 auto.13 $show_user
+}
+
+if {[string equal -nocase $option "-v"]} {
+	chattr $user -g
+	blacktools:tell $nick $host $hand $chan $chan1 auto.21 $show_user
+}
+	return
+}
+
+if {![matchattr $user -|MAOV $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
+	return
+}
+
+if {[string equal -nocase $option "+o"]} {
+if {[matchattr $user -|g $chan]} {
+	chattr $user -|-g $chan
+}
+	chattr $user -|a $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.10 $show_user
+}
+
+if {[string equal -nocase $option "-o"]} {
+	chattr $user -|-a $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.18 $show_user
+}
+
+if {[string equal -nocase $option "+v"]} {
+if {[matchattr $user -|a $chan]} {
+	chattr $user -|-a $chan
+}
+	chattr $user -|g $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.11 $show_user
+}
+
+if {[string equal -nocase $option "-v"]} {
+	chattr $user -|-g $chan
+	blacktools:tell $nick $host $hand $chan $chan1 auto.19 $show_user
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 1397 - 0
BlackTools/Commands/BT.BanCmds.tcl

@@ -0,0 +1,1397 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+############################   BANCMDS TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+
+################################ Commands #############################
+
+################################ ub ###################################
+
+proc ub:link {mask} {
+	global black
+	set chanban 0
+	set chanlink 0
+foreach chan [link:get] {
+	set chanlink [expr $chanlink + 1]
+foreach b [blacktools:banlist $chan] {
+	set cidr 0
+	set bhost [lindex [split $b] 3]
+	set real_bhost [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $bhost]
+if {[regexp {[/]} $real_bhost]} {
+	set read_ip [lindex [split $real_bhost @] 1]
+	set theip [lindex [split $mask @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+if {$cidr_ip == "1"} {
+	set read_rest_ip [lindex [split $mask @] 0]
+	set read_theip [lindex [split $real_bhost @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {[string match -nocase $mask $real_bhost] || [string match -nocase $real_bhost $mask] || $cidr == "1"} {
+	set chanban [expr $chanban + 1]
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	pushmode $chan -b $bhost
+}
+	blacktools:delban $real_bhost $chan "0" "0"
+			}
+		}
+	}
+	return "$chanlink $chanban"
+}
+
+proc ub:process {user mask nick hand host chan chan1 type gl cmd whois link prv} {
+	global black
+	set mask [strip:all $mask]
+	set split_cmd [split $cmd ":"]
+	set id [lindex $split_cmd 1]
+	set cmd [lindex $split_cmd 0]
+	set cmd_status [btcmd:status $chan $hand "$cmd" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set vhost [lindex [split $mask @] 1]
+	blacktools:dns:ub $user $mask $nick $hand $host $vhost $chan $chan1 $type $gl $cmd $whois $link $id $prv
+}
+
+proc ub:act {user mask nick hand host vhost chan chan1 type gl cmd whois link id prv} {
+	global black
+	set split_cmd [split $cmd ":"]
+	set unbaned_host ""
+	set cmd [lindex $split_cmd 0]
+if {$host == "" && $mask == "" && $whois == "1"} { return }
+	set rest_host [lindex [split $mask @] 0]
+	set fulldns "$rest_host@$host"
+if {$host == ""} { set fulldns $mask}
+	set host $prv
+	set nounban 0
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return
+}
+	
+if {![validchan $chan] && $link != "1" && $gl != "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {$link != "1" && $gl != "1"} {
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+	}
+}
+	set show_mask $mask
+	set total_b 0
+	set rem_b 0
+	set xban 0
+
+if {![regexp {\*} $mask] && $whois != "1" && $id != "id"} {
+	putserv "USERHOST :$user"
+	bind RAW - 302 ub:get:host
+	set ::uuser $user
+	set ::unick $nick
+	set ::uhand $hand
+	set ::uhost $host
+	set ::uchan $chan
+	set ::uchan1 $chan1
+	set ::utype $type
+	set ::ugl $gl
+	set ::ucmd $cmd
+	set ::ulink $link
+	set ::prv $prv
+return
+}
+
+if {$link == "1"} {
+	set return [ub:link $mask]
+	set chanlink [lindex $return 0]
+	set chanban [lindex $return 1]
+	blacktools:tell $nick $host $hand $chan $chan1 ub.7 "$chanban $chanlink"
+	return
+} 
+
+if {$gl != "1"} {
+if {(($mask == "*") || ($mask == "*!*@*")) && [matchattr $hand -|OA $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.5 none
+	return
+} 
+foreach b [blacktools:banlist $chan] {
+	set bhost [lindex [split $b] 3]
+	set btime [lindex [split $b] 5]
+	set num [lindex [split $b] 1]
+if {[string match -nocase $mask $bhost] || [string match -nocase $fulldns $bhost] || [matchaddr $fulldns $bhost] || [matchaddr $mask $bhost] || ([matchaddr $bhost $fulldns] && $whois == "1") || ([matchaddr $bhost $mask] && $whois == "1") || [string equal -nocase $num $mask]} {
+	set bywho [lindex [split $b] 4]
+	set match_time [lindex [split $b] 5]
+	set read_tr [lindex [split $b] 7]
+	set total_b [expr $total_b + 1]
+	set split_bywho [split $bywho ":"]
+	set level [lindex $split_bywho 1]
+	set check [blacktools:check:levelub $hand $chan $level]
+if {$check == "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nounban $bhost
+	set nounban 1
+	continue
+}
+if {$btime == "0" && [matchattr $hand -|O $chan]} {
+	continue
+}
+if {([blacktools:sticky $mask $chan] == "1") && [matchattr $hand -|OA $chan]} {
+	continue
+}
+	set rem_b [expr $rem_b + 1]
+
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	set unbaned_host $bhost
+	blacktools:delban $bhost $chan "0" "0"
+if {$read_tr == "2"} {
+	troll:del $bhost $chan
+			}
+			continue
+		}
+	}
+foreach b [banlist $chan] {
+	set bhost [lindex $b 0]
+	set btime [lindex $b 2]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set total_b [expr $total_b + 1]
+if {$btime == "0" && [matchattr $hand -|O $chan]} {
+	continue
+}
+if {[isbansticky $bhost] && [matchattr $hand -|OA $chan]} {
+	continue
+}
+	set rem_b [expr $rem_b + 1]
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	set unbaned_host $bhost
+	killchanban $chan $bhost
+	}
+}
+
+if {$total_b == "0"} {
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.8 $show_mask
+	return
+}
+	set return [checkischanban_ub "" $show_mask $chan $whois]
+	set return_dns [checkischanban_ub "" $fulldns $chan $whois]
+
+if {$nounban == "1"} {
+	set return 0
+	set return_dns 0
+}
+if {$return == "1"} {
+	set bans [returnchanbans_ub $show_mask $chan $whois]
+foreach b $bans {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $b"
+} else {
+	pushmode $chan -b $b
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 ub.2 "[llength $bans] [llength $bans] $show_mask"
+	return
+} elseif {$return_dns == "1"} {
+	set bans [returnchanbans_ub $fulldns $chan $whois]
+foreach b $bans {
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $b"
+} else {
+	pushmode $chan -b $b
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 ub.2 "[llength $bans] [llength $bans] $fulldns"
+	return
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.1 $show_mask
+}
+if {[ischanban $mask $chan]} {
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $mask"
+} else {
+	putserv "MODE $chan -b $mask"
+}
+	blacktools:tell $nick $host $hand $chan $chan1 ub.6 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 ub.1 $show_mask
+	} else {
+	set return [checkischanban_ub "" $show_mask $chan $whois]
+	set return_dns [checkischanban_ub "" $fulldns $chan $whois]
+if {$nounban == "1"} {
+	set return 0
+	set return_dns 0
+}
+if {$return == "1"} {
+	set bans [returnchanbans_ub $show_mask $chan $whois]
+foreach b $bans {
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $b"
+} else {
+	pushmode $chan -b $b
+		}
+	}
+} elseif {$return_dns == "1"} {
+	set bans [returnchanbans_ub $fulldns $chan $whois]
+foreach b $bans {
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $b"
+} else {
+	pushmode $chan -b $b
+			}
+		}
+	}
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.9 "$rem_b $total_b $show_mask"
+} else {
+if {$nounban == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.2 "$rem_b $total_b $show_mask"
+	blacktools:ub:getlast
+				}
+			}
+		}
+if {$total_b != "0" && $rem_b != "0"} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan != ""} {
+	set replace(%nick%) $hand
+	set replace(%msg.1%) $rem_b
+	set replace(%msg.2%) $total_b
+	set replace(%chan%) $chan
+if {[regexp {^[0-9]} $mask]} {
+	set replace(%msg.3%) $unbaned_host
+} else {
+	set replace(%msg.3%) $mask
+}
+	set text [black:color:set "" $black(say.$getlang.reportchan.3)]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	puthelp "PRIVMSG $backchan :$reply"
+			}
+		}
+	} else {
+foreach b [blacktools:banlist:gl] {
+	set bhost [lindex [split $b] 3]
+	set num [lindex [split $b] 1]
+	set btime [lindex [split $b] 4]
+if {[string match -nocase $mask $bhost] || [string match -nocase $fulldns $bhost] || [matchaddr $fulldns $bhost] || [matchaddr $mask $bhost] || ([matchaddr $bhost $fulldns] && $whois == "1") || ([matchaddr $bhost $mask] && $whois == "1") || [string equal -nocase $num $mask]} {
+	set total_b [expr $total_b + 1]
+	set rem_b [expr $rem_b + 1]
+	set match_time [lindex [split $b] 5]
+	blacktools:delban $bhost $chan "1" "0"
+if {$gl == "1"} {
+	blacktools:ub:global $bhost [channels] 0
+}
+	continue
+		}
+	}
+foreach b [banlist] {
+	set bhost [lindex $b 0]
+	set btime [lindex $b 2]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set total_b [expr $total_b + 1]
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	killban $bhost
+		}
+	}
+if {$total_b == "0"} {
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.11 $show_mask
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.3 $show_mask
+}
+	} else {
+if {$id == "id"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.10 "$total_b $show_mask"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 ub.4 "$total_b $show_mask"
+	blacktools:ub:getlast
+			}
+		}
+	}
+}
+
+proc blacktools:ub:getlast {} {
+	global black
+	set lastban [blacktools:getlastban]
+if {$lastban == "-1"} {
+	foreach tmr [utimers] {
+if {[string match "*blacktools:autounban*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {[info exists black(lastban)]} {
+	unset black(lastban)
+}
+	return
+}
+if {[info exists black(lastban)]} {
+if {$lastban == $black(lastban)} {
+	return
+	}
+}
+	set black(lastban) $lastban
+foreach tmr [utimers] {
+if {[string match "*blacktools:autounban*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+	utimer $black(lastban) [list blacktools:autounban]	
+}
+
+proc blacktools:ub:global {bhost channels num} {
+	global black
+	set chan [lindex $channels $num]
+	set incnum [expr $num + 1]
+if {([setting:get $chan xtools] || [setting:get $chan xonly]) && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :unban $chan $bhost"
+} else {
+	putserv "MODE $chan -b $bhost"
+}
+	if {[lindex $channels $incnum] != ""} {
+	blacktools:ub:global $bhost $channels $incnum
+	}
+}
+
+################################ sb ###################################
+
+proc sb:act {bhost what nick hand host vhost chan chan1 type cmd entry} {
+	global black
+
+if {$bhost == "-"} {
+	blacktools:tell $nick $what $hand $chan $chan1 gl.hostnotexist "none"
+	return
+}
+
+if {($bhost != "") && ($entry == "")} {
+	putserv "USERHOST :$bhost"
+	bind RAW - 302 sb:get:host
+	set ::suser $bhost
+	set ::snick $nick
+	set ::shand $hand
+	set ::shost $host
+	set ::schan $chan
+	set ::schan1 $chan1
+	set ::stype $type
+	set ::scmd $cmd
+	set ::swhat $what
+	return
+}
+
+if {[matchattr $hand mn]} {
+	sb:search $nick $what $hand $chan $chan1 $bhost $vhost "1" $entry $type
+	return
+}
+	sb:search $nick $what $hand $chan $chan1 $bhost $vhost "0" $entry $type
+}
+
+proc sb:process {bhost what nick hand host chan chan1 type cmd entry} {
+global botnick black tcldir
+	set cmd_status [btcmd:status $chan $hand "sb" 0]
+	set bhost [strip:all $bhost]
+if {$cmd_status == "1"} {
+	return
+}
+	set vhost [lindex [split $bhost @] 1]
+	blacktools:dns:sb $bhost $what $nick $hand $host $vhost $chan $chan1 $type $cmd $entry
+}
+
+proc sb:search {nick host hand chan chan1 bhost vhost gl entry type1} {
+	global black
+	set show_bhost $bhost
+	set gl_bans 0
+	set cidr 0
+	set local_bans 0
+	set rest_host [lindex [split $bhost @] 0]
+	set fulldns "$rest_host@$vhost"
+if {$vhost == ""} { set fulldns $bhost }
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$bhost == ""} {
+switch $type1 {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "sb"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "sb"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "sb"
+		}
+	}
+	return 0
+}
+if {$gl == "1"} {
+foreach b [blacktools:banlist:gl] {
+	set cidr 0
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \\ {\\}] $mask]
+if {[regexp {[/]} $real_mask]} {
+	set read_ip [lindex [split $real_mask @] 1]
+	set theip [lindex [split $bhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_ip_dns [ipcidr $read_ip $theip_dns] 
+if {$cidr_ip == "1" || $cidr_ip_dns == "1"} {
+	set read_rest_ip [lindex [split $bhost @] 0]
+	set read_theip [lindex [split $real_mask @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {([string match -nocase $fulldns $real_mask] || [string match -nocase $real_mask $fulldns]) || ([string match -nocase $bhost $real_mask] || [string match -nocase $real_mask $bhost]) || $bhost == $id || $cidr == "1"} {
+	set gl_bans [expr $gl_bans + 1]
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set created [clock format $created -format %D-%H:%M:%S]
+	set breason [lrange [split $b] 9 end]
+	set comment [join [blacktools:get_comment $breason]]
+	set breason [blacktools:rem_comment $breason]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [lindex [split $b] 4]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.3 "$id $mask $bywho $created $expire $breason"
+if {$comment != "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.12 $comment
+	}
+} else { 
+	set expire $black(say.$getlang.banlist.13)
+	blacktools:tell $nick $host $hand $chan $chan1 sb.10 "$id $mask $bywho $created $expire $breason"
+if {$comment != "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.12 $comment
+				}
+			}
+		}
+	}
+}
+foreach b [blacktools:banlist $chan] {
+	set cidr 0
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set real_mask [string map [list \[ {\[} \] {\]} \\ {\\}] $mask]
+if {[regexp {[/]} $real_mask]} {
+	set read_ip [lindex [split $real_mask @] 1]
+	set theip [lindex [split $bhost @] 1]
+	set theip_dns [lindex [split $fulldns @] 1]
+	set cidr_ip [ipcidr $read_ip $theip]
+	set cidr_ip_dns [ipcidr $read_ip $theip_dns]
+if {$cidr_ip == "1" || $cidr_ip_dns == "1"} {
+	set read_rest_ip [lindex [split $bhost @] 0]
+	set read_theip [lindex [split $real_mask @] 0]
+if {[string match -nocase $read_rest_ip $read_theip] || [string match -nocase $read_theip $read_rest_ip]} {
+	set cidr 1
+		}
+	}
+}
+if {([string match -nocase $fulldns $real_mask] || [string match -nocase $real_mask $fulldns]) || ([string match -nocase $bhost $real_mask] || [string match -nocase $real_mask $bhost]) || $bhost == $id || $cidr == "1"} {
+	set local_bans [expr $local_bans + 1]
+	set mask [lindex [split $b] 3]
+	set id [lindex [split $b] 1]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set sticky [lindex [split $b] 7]
+	set created [clock format $created -format %D-%H:%M:%S]
+	set breason [lrange [split $b] 9 end]
+	set comment [join [blacktools:get_comment $breason]]
+	set breason [blacktools:rem_comment $breason]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [lindex [split $b] 4]
+	set split_bywho [split $bywho ":"]
+	set handle [lindex $split_bywho 0]
+	set type [lindex $split_bywho 1]
+if {$type != "" && $type != "bot"} {
+	set bywho "$handle\([encoding convertfrom utf-8 $type]\)"
+} elseif {$sticky == "1"} { 
+	set bywho "$handle\(STICKY\)"
+} else {
+	set bywho $handle
+}
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.4 "$id $mask $bywho $created $expire $breason"
+if {$comment != "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.12 $comment
+	}
+} else { 
+	set expire $black(say.$getlang.banlist.13)
+	blacktools:tell $nick $host $hand $chan $chan1 sb.9 "$id $mask $bywho $created $expire $breason"
+if {$comment != "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.12 $comment
+				}
+			}
+		}
+	}
+if {[expr $local_bans + $gl_bans] > 0} {
+	return
+} else {
+	set gl_bans 0
+	set local_bans 0
+}
+
+foreach b [banlist $chan] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set local_bans [expr $local_bans + 1]
+	}
+}
+if {$gl == "1"} {
+	foreach b [banlist] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set gl_bans [expr $gl_bans + 1]
+	}
+}
+if {[expr $local_bans + $gl_bans] == "0"} {
+if {$entry == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.11 $show_bhost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.2 $show_bhost
+}
+	return
+}
+if {[expr $local_bans + $gl_bans] > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.5 "none"
+	return
+	}
+} else {
+
+if {$local_bans == "0"} {
+if {$entry == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.11 $show_bhost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.2 $show_bhost
+}
+	return
+}
+if {$local_bans > 10} {
+	blacktools:tell $nick $host $hand $chan $chan1 sb.5 "none"
+	return
+	}
+}
+if {$gl_bans > "0"} {
+foreach b [banlist] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set bywho [split [lindex $b 5]]
+	set created [clock format $created -format %D-%H:%M:%S]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.3 "- $mask $bywho $created $expire $breason"
+} else { 
+	set expire "NEVER" 
+	blacktools:tell $nick $host $hand $chan $chan1 sb.10 "- $mask $bywho $created $expire $breason"
+				}
+			}
+		}
+	}
+
+if {$local_bans > "0"} {
+foreach b [banlist $chan] {
+	set mask [lindex $b 0]
+if {[string match -nocase $mask $bhost] || [string match -nocase $bhost $mask]} {
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set bywho [split [lindex $b 5]]
+	set created [clock format $created -format %D-%H:%M:%S]
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.4 "- $mask $bywho $created $expire $breason"
+} else { 
+	set expire "NEVER" 
+	blacktools:tell $nick $host $hand $chan $chan1 sb.9 "- $mask $bywho $created $expire $breason"
+				}
+			}
+		}
+	}	
+}
+
+################################### banlist ###################################
+
+proc banlist:process {nick host hand chan chan1 user type cmd next} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "banlist" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set i 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+
+if {[matchattr $hand nm] && [string equal -nocase "global" $user]} {
+	set gl "1"
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [blacktools:banlist:gl] ""
+	return
+}
+
+if {[string match -nocase "all" $user]} {
+	set gl ""
+	set user ""
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [blacktools:banlist $chan] ""
+	return
+}
+
+if {[string match -nocase "other" $user]} {
+	set gl ""
+	set user ""
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next $gl [banlist $chan] "2"
+	return
+}
+
+if {[onchan $user $chan] && ![validuser $user]} {
+	set handle $user
+	set user [nick2hand $user]
+} else {
+	set handle ""
+}
+
+if {![validuser $user] && (![string equal -nocase "all" $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+
+if {![matchattr $user nmo|OASMN $chan] && (![string equal -nocase "all" $user])} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none 
+	return
+}	
+	set gl ""
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set file_temp "temp.$timestamp"
+if {![file exists $file_temp]} {
+	set file [open $file_temp w]
+	close $file
+}
+	set file [open $file_temp a]
+foreach b [blacktools:banlist $chan] {
+	set bywho [lindex [split $b] 4]
+	set split_bywho [split $bywho ":"]
+	set handz [join [lindex [split $split_bywho] 0]]
+	set type [lindex [split $split_bywho] 1]
+if {[string equal -nocase $handz $user]} {
+	set id [lindex [split $b] 1]
+	set mask [lindex [split $b] 3]
+	set expire [lindex [split $b] 5]
+	set created [lindex [split $b] 6]
+	set sticky [lindex [split $b] 7]
+	set breason [lrange [split $b] 9 end]
+	set breason [blacktools:rem_comment $breason]
+if {$type != ""} {
+	puts $file "$id $mask $expire $created $bywho $sticky [join $breason]"
+			} else {
+	puts $file "$id $mask $expire $created $bywho $sticky [join $breason]"		
+			}
+		}
+	}
+	close $file
+
+	set file [open $file_temp r]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	banlist:getbans $nick $host $hand $chan $chan1 $user $handle $type $next $gl $data "1"
+	file delete $file_temp
+}
+
+proc banlist:remain {nick host hand count chan chan1 type gl user userb prv} {
+	global black lastbind botnick
+if {$count == "0"} { return }
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+if {[lsearch -exact $black(cmdchar) $charbind] < 0} {
+	set charbind ""
+}
+	set firstchar [lindex $black(cmdchar) 0]
+if {[string equal $lastbind "*"]} { set charbind "prv" }
+if {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " }
+if {[string equal -nocase "***" $lastbind]} { set charbind "$host" }
+if {$charbind == ""} {
+	set charbind $firstchar
+if {[validuser $hand]} {
+	set getchar [getuser $hand XTRA MYCHAR]
+if {$getchar != ""} {
+	set charbind $getchar
+		}
+	}
+}
+if {$charbind == "prv"} { set charbind "" }
+	set replace(%char%) $charbind
+	set replace(%counter%) $count
+	set replace(%user%) $user
+	set replace(%chan%) $chan
+
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.3)]
+} 
+if {$userb == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.8)]	
+} 
+if {$user == ""} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.10)]
+}
+if {$userb == "2"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.15)]
+}
+if {$userb == "3"} {
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.exempt.3)]
+} else {
+	set msg [black:color:set $hand $black(say.$getlang.exempt.10)]
+	}
+}
+
+if {$prv == "prv"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.14)]
+if {$userb == "2"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.15)]
+}
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.banlist.3)]
+}
+if {$userb == "3"} {
+if {$gl == "1"} {
+	set msg [black:color:set $hand $black(say.$getlang.exempt.3)]
+} else {
+	set msg [black:color:set $hand $black(say.$getlang.exempt.10)]
+	}
+}
+	puthelp "PRIVMSG $nick :[string map [array get replace] $msg]"
+	return
+}
+	switch $type {
+	0 {
+	puthelp "NOTICE $nick :[string map [array get replace] $msg]"
+}
+	1 {
+	puthelp "PRIVMSG $chan1 :[string map [array get replace] $msg]"	
+}
+	2 {
+	puthelp "PRIVMSG $nick :[string map [array get replace] $msg]"
+	}
+}
+
+}
+
+proc banlist:getbans {nick host hand chan chan1 user handle type next gl banlist userb} {
+	global black
+	set show_user $user
+	set show_handle $handle
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getmethod [getuser $hand XTRA OUTPUT_TYPE]
+if {$getmethod == ""} { set getmethod "0" }
+	if {[string equal -nocase $next "-next"]} {
+if {[info exists black(morebans:$chan:$hand)]} {
+if {$black(morebans:$chan:$hand) >= $black(modul:nr:entries)} {
+for {set i $black(showbans:$chan:$hand)} { $i < [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)] } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+	set black(morebans:$chan:$hand) [expr $black(morebans:$chan:$hand) - $black(modul:nr:entries)]
+	banlist:remain $nick $host $hand $black(morebans:$chan:$hand) $chan $chan1 $getmethod $gl $user $userb $host
+	set black(showbans:$chan:$hand) [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)]
+	} else {
+if {$black(morebans:$chan:$hand) < 1} {
+	return
+}
+for {set i $black(showbans:$chan:$hand)} { $i <= [expr $black(showbans:$chan:$hand) +  $black(morebans:$chan:$hand)]} { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+	set black(morebans:$chan:$hand) [expr $black(morebans:$chan:$hand) - $black(showbans:$chan:$hand)]
+	}
+	foreach tmr [utimers] {
+if {[string match -nocase "*banlist:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 30 [list banlist:unset:more $chan $hand]
+if {$black(morebans:$chan:$hand) < 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
+	}
+}	
+	return
+}
+	set black(cbanlist:$chan:$hand) [llength $banlist]
+	set black(showbans:$chan:$hand) 0
+if {$black(cbanlist:$chan:$hand) > $black(modul:nr:entries)} {
+if {$userb == "3"} {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.2 "$black(cbanlist:$chan:$hand)"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.6 "$black(cbanlist:$chan:$hand)"
+	}
+} else {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.2 "$black(cbanlist:$chan:$hand)"
+}
+if {$user == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.6 "$black(cbanlist:$chan:$hand)"
+}
+if {$userb == "1" && $handle != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user\($show_handle\)"
+}
+if {$userb == "1" && $handle == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user"
+	}
+}
+
+	set black(morebans:$chan:$hand) [expr $black(cbanlist:$chan:$hand) - $black(modul:nr:entries)]
+	for {set i 0} { $i < $black(modul:nr:entries) } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+	}
+	set black(showbans:$chan:$hand) [expr $black(showbans:$chan:$hand) + $black(modul:nr:entries)]
+if {$black(morebans:$chan:$hand) > 0} {
+	banlist:remain $nick $host $hand $black(morebans:$chan:$hand) $chan $chan1 $getmethod $gl $user $userb $host
+}
+	foreach tmr [utimers] {
+if {[string match -nocase "*banlist:unset:more $chan $hand*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+	utimer 60 [list banlist:unset:more $chan $hand]
+} else {
+if {$userb == "3"} {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.2 "$black(cbanlist:$chan:$hand)"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.6 "$black(cbanlist:$chan:$hand)"
+	}
+} else {
+if {$gl == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.2 "$black(cbanlist:$chan:$hand)"
+}
+if {$user == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.6 "$black(cbanlist:$chan:$hand)"
+}
+if {$userb == "1" && $handle != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user\($show_handle\)"
+}
+if {$userb == "1" && $handle == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.7 "$black(cbanlist:$chan:$hand) $show_user"
+	}
+}
+for {set i 0} { $i < $black(modul:nr:entries) } { incr i } {
+	set current_ban [lindex $banlist $i]
+	show:bans $nick $host $hand $chan $chan1 $gl $current_ban $userb
+		}
+if {$userb == "3"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.4 none
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
+		}
+	}
+}
+
+proc banlist:unset:more {chan hand} {
+	global black
+if {[info exists black(morebans:$chan:$hand)]} {
+	unset black(morebans:$chan:$hand)
+}
+if {[info exists black(cbanlist:$chan:$hand)]} {
+	unset black(cbanlist:$chan:$hand)
+	}
+if {[info exists black(showbans:$chan:$hand)]} {
+	unset black(showbans:$chan:$hand)
+	}
+}
+
+proc show:bans {nick host hand chan chan1 gl b userb} {
+	global black
+if {$b == ""} { return }
+	set never_expire 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$userb == "1"} {
+	set id [lindex [split $b] 0]
+	set mask [lindex [split $b] 1]
+	set expire [lindex [split $b] 2]
+	set created [lindex [split $b] 3]
+	set bywho [lindex [split $b] 4]
+	set sticky [lindex [split $b] 5]
+	set breason [lrange [split $b] 6 end]
+	set breason [blacktools:rem_comment $breason]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+} elseif {$userb == "2"} {
+	set id "-"
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [split [lindex $b 5]]
+if {[isbansticky [lindex $b 0] $chan]} {
+	set sticky 1
+} else {
+	set sticky 0
+}
+
+} elseif {$userb == "3"} {
+	set id "-"
+	set mask [lindex $b 0]
+	set expire [lindex $b 2]
+	set created [lindex $b 3]
+	set breason [split [lindex $b 1]]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+	set bywho [split [lindex $b 5]]
+	set sticky 0
+if {$breason == ""} { set breason "N/A" }
+} else {
+	set id [lindex [split $b] 1]
+	set mask [lindex [split $b] 3]
+	set expire [lindex [split $b] 5]
+	set bywho [lindex [split $b] 4]
+	set created [lindex [split $b] 6]
+	set sticky [lindex [split $b] 7]
+	set breason [lrange [split $b] 9 end]
+	set breason [blacktools:rem_comment $breason]
+	set breason [join [encoding convertfrom utf-8 $breason]]
+}
+	set split_bywho [split $bywho ":"]
+	set handle [lindex $split_bywho 0]
+	set type [lindex $split_bywho 1]
+if {$type != ""} {
+	set type "BAN([join [encoding convertfrom utf-8 $type]])"
+	set bywho "$handle"
+} elseif {$sticky == "1"} {
+	set type "BAN(STICK)"
+	set bywho "$handle"
+} else {
+	set bywho $handle
+	set type "BAN"
+}
+if {$userb == "3"} {
+	set type "EXEMPT"
+}
+if {$expire != "0"} {
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+} else {
+	set expire $black(say.$getlang.banlist.13)
+	set never_expire 1
+}
+	set created [clock format $created -format %D-%H:%M:%S]
+
+if {$never_expire == "0"} {
+if {$userb == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.9 "$id $type $mask $created $expire $breason"
+	return
+}
+if {$userb == "3"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.5 "$id $type $mask $bywho $created $expire $breason"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.5 "$id $type $mask $bywho $created $expire $breason"
+	} else {
+if {$userb == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.12 "$id $type $mask $created $expire $breason"
+	return
+}
+if {$userb == "3"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.11 "$id $type $mask $bywho $created $expire $breason"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 banlist.11 "$id $type $mask $bywho $created $expire $breason"
+	}        
+}
+
+################################ w ####################################
+
+proc w:process {wnick nick hand host chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "w" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set handle [nick2hand $wnick]
+	set show_wnick $wnick
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$wnick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "w"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "w"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "w"
+		}
+	}
+	return 0
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {![onchan $wnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_wnick
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[isbotnick $wnick]} {
+	return
+}
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+}
+	set getreason [setting:get $chan w-reason]
+if {$getreason == ""} { 
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getreason $black(say.$getlang.w.5)
+	set len [llength $getreason] 
+    set random [expr int(rand()*$len)] 
+    set getreason [lindex $getreason $random]
+}
+
+if {[setting:get $chan showhandle]} {
+	set reason "($hand) $getreason"
+	} else { set reason "$getreason"
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	blacktools:banner3_stats "w" $chan $hand ""
+if {[setting:get $chan showcount]} {
+	set reason "$reason - $kcount -" 
+} else {
+	set reason "$reason" 
+}
+if {[setting:get $chan xtools] || [setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $wnick $reason"
+} else {
+	putserv "KICK $chan $wnick :$reason"
+}
+	puthelp "PRIVMSG $wnick :[black:color:set $hand $black(say.$getlang.w.6)]"
+}
+
+################################### k #################################
+
+proc k:process {knick nick hand host reason chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "k" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set handle [nick2hand $knick]
+	set found_host ""
+	set kick_host 0
+	set found_access ""
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$knick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "k"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "k"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "k"
+		}
+	}
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+if {[string match -nocase "*!*" $knick]} {
+	set kick_host 1
+	set finduser [finduser $knick]
+foreach user [chanlist $chan] {
+	set gethand [nick2hand $user]
+	set gethost "$user![getchanhost $user $chan]"
+if {[string match -nocase $knick $gethost]} {
+if {[matchattr $gethand $black(exceptflags) $chan]} {
+	lappend found_access $user
+	continue
+		}	
+	lappend found_host $user
+		}
+	}
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+}
+
+if {$found_access != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 k.2 $found_access
+	return
+}
+
+if {![onchan $knick $chan] && $kick_host == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $knick
+	return
+}
+
+if {$kick_host == "1"} {
+if {$found_host == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 k.1 none
+	return
+	}
+}
+
+if {[isbotnick $knick]} {
+	return
+}
+
+if {$reason == ""} {
+if {[setting:get $chan k-reason] != ""} {
+	set reason [join [setting:get $chan k-reason]]
+	}
+}
+if {$reason == ""} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set reason1 "$black(say.$getlang.k.5)"
+	set len [llength $reason1] 
+    set random [expr int(rand()*$len)] 
+    set reason1 [lindex $reason1 $random]
+ } else { set reason1 "$reason" }
+if {[setting:get $chan showhandle]} {
+	set reason "($hand) $reason1"
+	} else { set reason "$reason1" 
+}
+	set getcount [setting:get $chan kickcount]
+	set kcount [expr $getcount +1]
+	setting:set $chan kickcount $kcount
+	blacktools:banner3_stats "k" $chan $hand ""
+if {[setting:get $chan showcount]} {
+	set reason "$reason - $kcount -" 
+} else {
+	set reason "$reason" 
+}
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+if {$found_host != ""} {
+foreach f $found_host {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $f $reason"
+	}
+} else {
+	putserv "PRIVMSG $black(chanserv) :kick $chan $knick $reason"
+	}
+} else {
+if {$found_host != ""} {
+	foreach f $found_host {
+	putserv "KICK $chan $f :$reason"
+	}
+} else {
+	putserv "KICK $chan $knick :$reason"
+		}
+	}
+}
+
+################################ exempt ###############################
+
+proc exempt:process {nick host hand chan chan1 type ecmd ehost return_time reason gl next} {
+	global black
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+switch $ecmd {
+	list {
+	set user ""
+if {[string equal -nocase $ehost "global"]} {
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next 1 [exemptlist] "3"
+} else {
+	banlist:getbans $nick $host $hand $chan $chan1 $user "" $type $next 0 [exemptlist $chan] "3"
+		}
+	}
+	
+	add {
+	if {$ehost == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "exempt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "exempt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "exempt"
+		}
+	}
+	return
+}
+if {$gl == "0"} {
+	newchanexempt $chan $ehost $hand $reason $return_time
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.7 $ehost
+	} else {
+	newexempt $ehost $hand $reason $return_time
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.8 $ehost
+		}
+	}
+	
+	del {
+	if {$ehost == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "exempt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "exempt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "exempt"
+		}
+	}
+	return
+}
+if {$gl == "0"} {
+	set rem [killchanexempt $chan $ehost]
+if {$rem == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.15 $ehost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.9 $ehost
+	who:chan $chan
+	}
+} else {
+	set rem [killexempt $ehost]
+if {$rem == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.16 $ehost
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 exempt.12 $ehost
+		}
+	}			
+}
+	
+	default {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "exempt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "exempt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "exempt"
+				}
+			}	
+		}
+	}		
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 2269 - 0
BlackTools/Commands/BT.ChanCmds.tcl

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

+ 2113 - 0
BlackTools/Commands/BT.ForCmds.tcl

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

+ 1239 - 0
BlackTools/Commands/BT.H.tcl

@@ -0,0 +1,1239 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   HCMDS TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	          	       ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc h:process {nick host hand chan chan1 command type} {
+global black botnick config lastbind
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "h" 0]
+if {$cmd_status == "1"} {
+	return
+}
+	set number [scan $black(antiflood:cmd) %\[^:\]]
+	set show_cmds ""
+	set timer [scan $black(antiflood:cmd) %*\[^:\]:%s]
+	set split_lastbind [split $lastbind ""]
+	set charbind [lindex $split_lastbind 0]
+if {[lsearch -exact $black(cmdchar) $charbind] < 0} {
+	set charbind ""
+}
+	set replace(%botnick%) $botnick
+if {[string equal $lastbind "*"]} { set charbind "" }
+if {[string equal -nocase "**" $lastbind]} { set charbind "$botnick " }
+	set replace(%char%) $charbind
+if {[info exists black(flood:activ:$host)]} {
+foreach tmr [utimers] {
+if {[string match "*black(flood:activ:$host)*" [join [lindex $tmr 1]]]} {
+	set time [lindex $tmr 0]
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 h.16 "$time h"
+	return
+}
+	foreach tmr [utimers] {
+if {[string match "*black(floodcmd:$host:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(floodcmd:$host:$chan)]} { 
+	set black(floodcmd:$host:$chan) 0 
+}
+	incr black(floodcmd:$host:$chan)
+	utimer $timer [list unset black(floodcmd:$host:$chan)]
+
+if {$black(floodcmd:$host:$chan) == "$number"} {
+	blacktools:tell $nick $host $hand $chan $chan1 h.16 "30 h"
+	set black(flood:activ:$host) 1
+	utimer 30 [list unset black(flood:activ:$host)]
+	return
+}
+	set replace(%chan%) $chan
+	set greeting [getuser $hand XTRA BT_WELCOME]
+	set chanlang [string tolower [setting:get $chan lang]]
+
+if {[matchattr $hand -|V $chan]} {
+	set access "VOICE"
+} elseif {[matchattr $hand -|O $chan]} {
+	set access "OP"
+} elseif {[matchattr $hand -|A $chan]} {
+	set access "ADMIN"
+} elseif {[matchattr $hand -|M $chan]} {
+	set access "MANAGER"
+} elseif {[matchattr $hand n]} {
+	set access "BOSS"
+} elseif {[matchattr $hand m]} {
+	set access "OWNER"
+} elseif  {[matchattr $hand o]} {
+	set access "MASTER"
+}
+
+if {$chanlang == ""} { set chanlang "[string tolower $black(default_lang)]" }
+if {$greeting == ""} {
+	set text1 [black:color:set "" $black(say.$chanlang.greeting.1)]
+	set reply1 [join $text1]
+	set text2 [black:color:set "" $black(say.$chanlang.greeting.2)]
+	set reply2 [join $text2]
+	set text3 [black:color:set "" $black(say.$chanlang.greeting.3)]
+	set reply3 [join $text3]
+	set text4 [black:color:set "" $black(say.$chanlang.greeting.4)]
+	set reply4 [join $text4]
+	set text5 [black:color:set "" $black(say.$chanlang.greeting.5)]
+	set reply5 [join $text5]
+	set text6 [black:color:set "" $black(say.$chanlang.greeting.6)]
+	set reply6 [join $text6]
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply1]"
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply2]"
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply3]"
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply4]"
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply5]"
+	putserv "PRIVMSG $nick :[string map [array get replace] $reply6]"
+	setuser $hand XTRA BT_WELCOME 1
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+if {$command == ""} {
+	switch $access {
+
+	VOICE {
+	blacktools:tell $nick $host $hand $chan $chan1 h.5 $black(say.$getlang.level.6)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.6 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.24 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.20 none
+		}
+	}
+}
+	OP {
+	blacktools:tell $nick $host $hand $chan $chan1 h.7 $black(say.$getlang.level.5)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.8 none	
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.24 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.20 none
+		}
+	}	
+}
+
+	ADMIN {
+	blacktools:tell $nick $host $hand $chan $chan1 h.11 $black(say.$getlang.level.4)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.12 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.23 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.19 none
+		}
+	}
+}
+
+	MANAGER {
+	blacktools:tell $nick $host $hand $chan $chan1 h.13 $black(say.$getlang.level.3)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.14 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.22 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.18 none
+		}
+	}	
+}
+
+	OWNER {
+	blacktools:tell $nick $host $hand $chan $chan1 h.3 $black(say.$getlang.level.2)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.4 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.21 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.17 none
+			}	
+		}	
+	}	
+	
+	MASTER {
+	blacktools:tell $nick $host $hand $chan $chan1 h.1 $black(say.$getlang.level.8)
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.25 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.27 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.26 none
+			}
+		}
+	}
+	
+	BOSS {
+	blacktools:tell $nick $host $hand $chan $chan1 h.1 $black(say.$getlang.level.1)
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.4 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.21 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 h.17 none
+			}	
+		}
+	}
+}
+	return
+}
+
+switch -exact -- [string tolower $command] {
+
+	cmds {
+	switch $access {
+
+VOICE {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdsvoice)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}	
+	
+OP {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdsop)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;" }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+ADMIN {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdadmin)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+MANAGER {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdmanager)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+OWNER {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdbossowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+BOSS {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdbossowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { 
+	set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;" 
+}												
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+	
+MASTER {
+	set cmds [string map [array get replace] $black(say.$getlang.cmdmaster)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+		}
+	}	
+}
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+		}
+	}
+}
+
+	ban {
+switch $access {
+
+VOICE {
+	set cmds [string map [array get replace] $black(say.$getlang.banvoice)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 450] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+	}
+}
+
+OP {
+	set cmds [string map [array get replace] $black(say.$getlang.banop)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 450] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+	}
+}
+
+ADMIN {
+	set cmds [string map [array get replace] $black(say.$getlang.banadmin)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 450] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+	}
+}
+
+
+MANAGER {
+	set cmds [string map [array get replace] $black(say.$getlang.banmanager)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 450] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+	}
+}
+
+OWNER {
+	set cmds [string map [array get replace] $black(say.$getlang.banbossowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 440] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+	}
+}
+
+BOSS {
+	set cmds [string map [array get replace] $black(say.$getlang.banbossowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 440] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+		}
+	}
+	
+MASTER {
+	set cmds [string map [array get replace] $black(say.$getlang.banmaster)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "\002$thecmd\002 [join $rest_of] ;" }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 440] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+		}
+	}	
+}
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+		}
+	}
+}
+
+	add {
+	switch $access {
+ADMIN {
+	set cmds [string map [array get replace] $black(say.$getlang.addadmin)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	continue
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+MASTER {
+	set cmds [string map [array get replace] $black(say.$getlang.addmaster)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+MANAGER {
+	set cmds [string map [array get replace] $black(say.$getlang.addmanager)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+OWNER {
+	set cmds [string map [array get replace] $black(say.$getlang.addowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+}
+
+BOSS {
+	set cmds [string map [array get replace] $black(say.$getlang.addbossowner)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+				}
+			}
+		}	
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+		}
+	}
+}
+
+	manager {
+if {$access == "MANAGER"} {
+	set cmds [string map [array get replace] $black(say.$getlang.hmanager.1)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+}
+foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 $txt
+	}
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+			}
+		}	
+	}
+}
+
+	master {
+if {$access == "MASTER"} {
+	set cmds [string map [array get replace] $black(say.$getlang.hmaster.1)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+		}
+	foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+		}
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+				}
+			}
+		}
+	}
+	
+	owner {
+if {[matchattr $hand nm]} {
+	set cmds [string map [array get replace] $black(say.$getlang.hbossowner.1)]
+	set split_cmds [split $cmds ";"]
+foreach cmd $split_cmds {
+	set thecmd [lindex $cmd 0]
+	set rest_of [lrange $cmd 1 end]
+	set status [btcmd:status $chan $hand $thecmd 1]
+if {$status == "1"} {
+	set applycmd "\00300,14$thecmd [join $rest_of]\003"
+} else { set applycmd "[black:color 1 $hand $thecmd] [black:color 6 $hand [join $rest_of]] ;"  }
+	lappend show_cmds [join $applycmd " "]
+		}
+	}
+	foreach txt [h:wrap [string map [array get replace] [join $show_cmds]] 330] {	
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$txt"
+}
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.2 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.3 none
+		}
+	}
+}
+
+btinfo {
+if {[matchattr $hand nmo|M $chan]} {
+	set btstr_list ""
+foreach setting $black(extra_flag) {
+if {$setting != ""} {
+if {[string equal -nocase $setting "chanlink"]} {
+	continue
+}
+if {([string equal -nocase $setting "invisible"] || [string equal -nocase $setting "forward"]) && [matchattr $hand mo|M $chan] && ![matchattr $hand n]} {
+	continue
+}
+if {[string equal -nocase $setting "settingsaved"]} {
+	continue
+}
+if {[setting:get $chan $setting]} {
+	lappend btflags +[black:color 2 $hand $setting]
+	} else {
+	lappend btflags -[black:color 4 $hand $setting]
+		}
+	}
+}
+
+foreach setting $black(extra_str) {
+if {$setting != ""} {
+if {[setting:get $chan $setting] != ""} {
+if {![string equal -nocase $setting "joincount"] && ![string equal -nocase $setting "jointime"] && ![string equal -nocase $setting "kickcount"]} {
+	set str_length [llength [setting:get $chan $setting]]
+	set text [setting:get $chan $setting]
+if {$str_length > 1} {
+if {$str_length > 3 } {
+	set text "[lrange $text 0 3] .."
+}
+	set text \"[join $text]\"
+} else { set text [join $text] }
+	lappend btstr_list [black:color 1 $hand $setting] $text
+			}
+		}
+	}
+}
+
+if {$btstr_list == ""} {
+	set btstr_list "N/A"
+}
+
+	set btflag_list "$black(say.$getlang.hchaninfo.2) $btflags"
+	set btstr_list "$black(say.$getlang.hchaninfo.4) $btstr_list"
+foreach flag [wordwrap [join $btflag_list]  440] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$flag"
+}
+foreach str [wordwrap [join $btstr_list]  440] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$str"
+}
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.4 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.5 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.6 none
+			}
+		}
+	}
+}
+
+chaninfo {
+
+if {[matchattr $hand nmo|M $chan]} {
+	set flag_list ""
+foreach info [channel info $chan] { 
+if {[regexp {^[+]} $info]} {
+ lappend flag_list [black:color 2 $hand $info] 
+	}
+if {[regexp {^[-]} $info]} {
+ lappend flag_list [black:color 4 $hand $info] 
+	}
+}
+	set expirebans [setting:get $chan expirebans]
+if {$expirebans == ""} {
+	set expirebans $black(default:bantime)
+}
+	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]
+
+	set floodchan [string map {" " ":"} $floodchan]
+	set floodjoin [string map {" " ":"} $floodjoin]
+	set floodkick [string map {" " ":"} $floodkick]
+	set floodctcp [string map {" " ":"} $floodctcp]
+	set floodnick [string map {" " ":"} $floodnick]
+	set flooddeop [string map {" " ":"} $flooddeop]
+	set eggdrop_flags "[black:color 1 $hand flood-chan] $floodchan [black:color 1 $hand flood-join] $floodjoin [black:color 1 $hand flood-kick]  $floodkick [black:color 1 $hand flood-ctcp] $floodctcp [black:color 1 $hand flood-nick] $floodnick [black:color 1 $hand flood-deop] $flooddeop [black:color 1 $hand expirebans] $expirebans [black:color 1 $hand chanmode]  $chanmode"
+foreach flag [wordwrap $flag_list 400] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 " $black(say.$getlang.hchaninfo.1) $flag"
+		}
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "$black(say.$getlang.hchaninfo.3) : $eggdrop_flags"
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.4 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.5 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.6 none
+			}
+		}
+	}
+}
+
+module {
+
+set allmodules "Anunt AutoBroadcast BadChan Idle Limit XTools Xonly Seen VoiceMe VoiceOnMsg CloneScan EGG ChanLink SecureMode Private GuestNick Greet Leave Count Topic Timer Next TopWords BackChan ReportNick Quote Note Language"
+set manager_module "Anunt BadChan Idle Limit XTools Xonly Seen VoiceMe VoiceOnMsg Clonescan Securemode Private Guestnick Greet Leave Count Topic Next TopWords BackChan ReportNick Quote Note Language"
+set owner_modules "Anunt AutoBroadcast BadChan Idle Limit CloneScan XTools Xonly Seen VoiceMe VoiceOnMsg CloneScan EGG ChanLink SecureMode Private GuestNick Greet Leave Count Topic Timer Next TopWords BackChan ReportNick Quote Note Language"
+set module_output ""
+set other_module "Note"
+set master_module "Anunt BadChan Idle Limit XTools Xonly Seen VoiceMe VoiceOnMsg Clonescan Securemode Private Guestnick Greet Leave Count Topic Next TopWords BackChan ReportNick Quote Note Language"
+
+if {[matchattr $hand n]} {
+	set current_modules $allmodules
+} elseif {[matchattr $hand m]} {
+	set current_modules $owner_modules
+} elseif {[matchattr $hand o]} {
+	set current_modules $master_module
+} elseif {[matchattr $hand -|M $chan]} {
+	set current_modules $manager_module
+} else {
+	set current_modules $other_module
+}
+foreach m $current_modules {
+if {[string equal -nocase $m "quote"]} {
+	set m "q"
+}
+if {[string equal -nocase $m "autobroadcast"]} {
+	set m "bt"
+}
+	set cmd_status [btcmd:status $chan $hand $m 1]
+if {[string equal -nocase $m "Topic"]} {
+	set m "AutoTopic"
+}
+if {[string equal -nocase $m "q"]} {
+	set m "Quote"
+}
+if {[string equal -nocase $m "bt"]} {
+	set m "AutoBroadcast"
+}
+
+if {$cmd_status == "1"} {
+	set m "\0034$m\003"
+}
+	switch [string tolower [color:filter $m]] {
+	
+count {
+if {[setting:get $chan greet]} {
+	set read_msg ""
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $read_modul "greet"] && [string equal -nocase $chan $enc_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set getgreet [encoding convertfrom utf-8 $read_msg]
+	}
+}
+	close $file
+if {[lsearch -exact [color:filter $read_msg] "%count%"] > -1} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+	} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+anunt {
+if {[setting:get $chan anunt]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+quote {
+if {[setting:get $chan quote]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+note {
+if {[setting:get $chan note]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+chanlink {
+if {[link:status $chan] == "1"} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"
+	}
+}
+
+autobroadcast {
+	set found_module 0
+	foreach tmr [timers] {
+if {[string match "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+	set found_module 1
+	}
+}
+if {$found_module == "0"} {
+	lappend module_output "[black:color 4 $hand $m]\[-\] ;"
+	}
+}
+
+badchan {
+if {[setting:get $chan antibadchan]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+idle {
+	set idle_type ""
+if {[setting:get $chan idleop]} {
+	lappend idle_type "@"
+}
+if {[setting:get $chan idlevoice]} {
+	lappend idle_type "+"
+}
+if {[setting:get $chan idlehalfop]} {
+	lappend idle_type "%"
+}
+if {$idle_type == ""} {
+	set idle_type ""
+}
+	lappend module_output "[black:color 1 $hand $m]\[$idle_type\] ;"
+}
+
+limit {
+if {[setting:get $chan limit]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+clonescan {
+if {[setting:get $chan clonescan]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+xtools {
+if {[setting:get $chan xtools]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+xonly {
+if {[setting:get $chan xonly]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+seen {
+if {[setting:get $chan seen]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+voiceme {
+if {[setting:get $chan voiceme]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+voiceonmsg {
+if {[setting:get $chan voiceonmsg]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+egg {
+	lappend module_output "[black:color 1 $hand $m]\[\] ;"
+}
+
+note {
+if {[setting:get $chan note]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}
+}
+
+securemode {
+if {[setting:get $chan securemode]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;" }	
+}
+
+private {
+if {[setting:get $chan private]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;" }	
+}
+
+
+guestnick {
+if {[setting:get $chan guestnick]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+greet {
+if {[setting:get $chan greet]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+leave {
+if {[setting:get $chan leave]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+autotopic {
+if {[setting:get $chan autotopic]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+timer {
+	lappend module_output "[black:color 1 $hand $m]\[\] ;"
+}
+
+topwords {
+if {[setting:get $chan topwords]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+next {
+if {[setting:get $chan next]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+quote {
+if {[setting:get $chan quoteofday]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+backchan {
+if {[setting:get $chan backchan] != ""} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+reportnick {
+if {[setting:get $chan reportnick]} {
+	lappend module_output "[black:color 2 $hand $m]\[+\] ;"
+} else { lappend module_output "[black:color 4 $hand $m]\[-\] ;"}	
+}
+
+language {
+	set lang [string toupper [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string toupper $black(default_lang)]" }
+	lappend module_output "[black:color 1 $hand $m]\[$lang\] ;"
+					}
+				}
+			}					
+	blacktools:tell:h $nick $host $hand $chan $chan1 h.15 "[join $module_output]"
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.7 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.8 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hcommand.9 none
+				}
+			}
+		}
+egg {
+	set tcl_config $black(tclconfig)
+	set eggcmds ""
+	set egg_cmds "nick realname away homechan chanserv hostchanserv userlogin userpass chanremove-setting add-defaultmask add-mask user-expire banmethod-expire broadcast-showtime cmdchar defaultlang defaultoutput floodmenuprot userfloodmsgprot massfloodmsgprot massfloodsilencetime floodnotcprot pagelimit"
+	set split_cmds [split $egg_cmds " "]
+foreach cmd [color:filter $split_cmds] {
+	switch $cmd {
+	away {
+	set get_info [config:getinfo $tcl_config "set black(default_away) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	add-mask {
+	set get_info [config:getinfo $tcl_config "set black(hostdefaultadd) \"*\""]
+	switch $get_info {
+	1 {
+	set get_info "*!*@host"
+	}
+	2 {
+	set get_info "*!user@host"
+	}
+	3 {
+	set get_info "nick!user@host"
+	}
+	4 {
+	set get_info "nick!*@*"
+	}
+	5 {
+	set get_info "*!user@*"
+			}
+		}
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	hostchanserv {
+	set get_info [config:getinfo $tcl_config "set black(hostchanserv) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	add-defaultmask {
+	set get_info [config:getinfo $tcl_config "set black(hostadd) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	realname {
+	set get_info [config:getinfo $config "set realname \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	userlogin {
+	set get_info [config:getinfo $tcl_config "set black(username) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	userpass {
+	set get_info [config:getinfo $tcl_config "set black(password) \"*\""]
+if {$get_info == ""} { set get_info "N/A" }
+	set getc [string length $get_info]
+	set password ""
+	for {set i 0} { $i < $getc } { incr i} {
+	lappend password "*"
+	}
+	set get_info [join $password ""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	chanserv {
+	set get_info [config:getinfo $tcl_config "set black(chanserv) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	nick {
+	set get_info [config:getinfo $config "set nick \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	cmdchar {
+	set get_info [config:getinfo $tcl_config "set black(cmdchar) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	defaultlang {
+	set get_info [config:getinfo $tcl_config "set black(default_lang) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	defaultoutput {
+	set get_info [config:getinfo $tcl_config "set black(default_output) \"*\""]
+	switch $get_info {
+	0 {
+	set get_info "NOTICE"
+	}
+	1 {
+	set get_info "CHAN"
+	}
+	2 {
+	set get_info "PRIVMSG"
+		}
+	}
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	homechan {
+	set get_info [config:getinfo $tcl_config "set black(homechan) \"*\""]
+if {[string equal -nocase $get_info "#no_home_chan"]} {
+	set get_info "N/A"
+}
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	floodmenuprot {
+	set get_info [config:getinfo $tcl_config "set black(antiflood:cmd) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	userfloodmsgprot {
+	set get_info [config:getinfo $tcl_config "set black(msg:flood) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	massfloodmsgprot {
+	set get_info [config:getinfo $tcl_config "set black(mass:msg:flood) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	massfloodsilencetime {
+	set get_info [config:getinfo $tcl_config "set black(mass:msg:silence_time) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info$black(say.$getlang.timeout.9)\]
+	}
+	
+	floodnotcprot {
+	set get_info [config:getinfo $tcl_config "set black(notice:flood) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	chanremove-setting {
+	set get_info [config:getinfo $tcl_config "set black(chanremove_all) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	user-expire {
+	set get_info [config:getinfo $tcl_config "set black(user_expire_time) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info$black(say.$getlang.timeout.4)\]
+	}
+	banmethod-expire {
+	set get_info [config:getinfo $tcl_config "set black(banmethod_memory_time) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	broadcast-showtime {
+	set get_info [config:getinfo $tcl_config "set black(bttime) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	
+	pagelimit {
+	set get_info [config:getinfo $tcl_config "set black(modul:nr:entries) \"*\""]
+	lappend eggcmds [black:color 2 $hand $cmd]\[$get_info\]
+	}
+	login {
+	lappend eggcmds [black:color 2 $hand $cmd]
+	}
+	default {
+	lappend eggcmds [black:color 2 $hand $cmd]\[\]
+		}
+	}
+}
+	foreach option [h:wrap [join $eggcmds " ; "]  450] {
+	blacktools:tell:h $nick $host $hand $chan $chan1 hegg.1 "$option"
+		}
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 hegg.2 none
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 hegg.3 none
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 hegg.4 none
+				}
+			}
+		}		
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 3158 - 0
BlackTools/Commands/BT.LocalCmds.tcl

@@ -0,0 +1,3158 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   LOCAL CMDS TCL   ############################
+#########################################################################
+##						                       						   ##
+##   BlackTools  : http://blacktools.tclscripts.net	        	       ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	    	           ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               					   ##
+#########################################################################
+
+
+################################ Commands ###################################
+
+################################## report ###################################
+
+proc report:process {nick host host1 hand chan chan1 type what message} {
+	global black
+if {[setting:get $chan reportnick]} {
+	set cmd_status [btcmd:status $chan $hand "report" 0]
+if {$cmd_status == "1"} {
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set number [scan $black(report:flood) %\[^:\]]
+	set timer [scan $black(report:flood) %*\[^:\]:%s]
+	
+if {[info exists black(floodreport:$host1:$chan)]} {
+if {$black(floodreport:$host1:$chan) >= "$number"} {
+	return
+	}
+}
+
+foreach tmr [utimers] {
+if {[string match "*black(floodreport:$host1:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(floodreport:$host1:$chan)]} { 
+	set black(floodreport:$host1:$chan) 0 
+}
+	incr black(floodreport:$host1:$chan)
+	utimer $timer [list unset black(floodreport:$host1:$chan)]
+	
+if {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "report"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "report"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "report"
+}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![botisop $chan]} {
+	return
+}
+
+if {[isbotnick $what]} {
+	return
+}
+
+	set handle [nick2hand $what]
+if {[validuser $handle]} {
+	set found_acces 0
+foreach c [channels] {
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	set found_acces 1
+		}
+	}
+if {$found_acces == "1"} {
+	return
+	}
+}
+
+if {[string equal -nocase $what $nick]} {
+	blacktools:tell $nick $host $hand $chan $chan1 report.5 none
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[onchan $what $chan]} {
+	set replace(%msg.1%) $what
+	set replace(%msg.2%) $nick
+	set replace(%msg.8%) $message
+if {$message != ""} {
+	set text [black:color:set "" $black(say.$getlang.report.2)]
+} else {
+	set text [black:color:set "" $black(say.$getlang.report.3)]
+}	
+	set reply [join $text]
+	set output [string map [array get replace] $reply]
+	putserv "NOTICE @$chan :$output"
+	blacktools:tell $nick $host $hand $chan $chan1 report.4 none
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $what
+		}
+	}
+}
+
+################################# disable ###################################
+
+proc disable:process {nick host hand chan chan1 type what user} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "disable" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	
+if {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "disable"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "disable"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "disable"
+}
+	return
+}
+	set local_cmds "h omsg o v ho man version mode cycle broadcast say act i stats t myset b black stick dr bot n id spam bw vr gag sb banlist k w anunt bt badchan idle limit seen clonescan securemode private guestnick greet leave topic next helped noidle skip topwords q note report"
+
+if {[matchattr $hand -|M $chan] && [lsearch -exact $what $local_cmds] < 0} {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+	return
+}
+
+if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
+	set return_cmd [btcmd:global:set $hand $what 1]
+		switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.6 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.7 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
+		}
+	3 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+		}
+	}
+	return
+}
+
+if {$user != ""} {
+	btcmd:set:user $nick $host $hand $chan $chan1 $user $what "1"
+	return
+}
+	set return_cmd [btcmd:set $chan $hand $what 1]
+	
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.1 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.2 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
+}
+	3 {
+	blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
+		}
+	}
+}
+
+################################# enable ####################################
+
+proc enable:process {nick host hand chan chan1 type what user} {
+	global black
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$what == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "enable"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "enable"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "enable"
+}
+	return
+}
+
+if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
+	set return_cmd [btcmd:global:set $hand $what 0]
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.7 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.6 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
+		}
+	}
+	return
+}
+
+if {$user != ""} {
+	btcmd:set:user $nick $host $hand $chan $chan1 $user $what "0"
+	return
+}
+	set gl_check [btcmd:gl:status $what]
+if {$gl_check == "1" && $type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.8 $what
+}
+
+if {[matchattr $hand -|M $chan]} {
+	set access "MANAGER"
+} elseif {[matchattr $hand n]} {
+	set access "BOSS"
+} elseif {[matchattr $hand m]} {
+	set access "OWNER"
+} elseif {[matchattr $hand o]} {
+	set access "MASTER"
+} 
+
+	set disable_level [btcmd:getlevel $chan $what]
+
+if {$access == "MANAGER" && $disable_level == "OWNER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "OWNER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MANAGER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MANAGER" && $disable_level == "MASTER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+if {$access == "MASTER" && $disable_level == "OWNER"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+
+if {$access == "MASTER" && $disable_level == "BOSS"} {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
+	return
+}
+	set return_cmd [btcmd:set $chan $hand $what 0]
+	switch $return_cmd {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.2 $what
+}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.1 $what
+}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
+}
+	}
+}
+
+################################### t #################################
+
+proc t:process {nick host hand chan chan1 topics type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "t" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$topics == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "t"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "t"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "t"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[setting:get $chan showhandle]} {
+	set topics "($hand) $topics"
+	} else { set topics "$topics" 
+}
+
+if {[setting:get $chan xonly]} {
+	if {![botisop $chan]} {
+	putserv "PRIVMSG $black(chanserv) :topic $chan $topics"
+	return
+	}
+}
+
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	putserv "TOPIC $chan :$topics"
+}
+
+################################# i ###################################
+
+proc i:process {nick host hand chan chan1 inick type} {
+global botnick black
+	set show_inick $inick
+	set cmd_status [btcmd:status $chan $hand "i" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$inick == "" && $chan != $chan1} {
+	set inick $nick
+}
+
+if {$inick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "i"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "i"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "i"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan]} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	putserv "USERHOST :$inick"
+	bind RAW - 302 i:online:check
+	set ::getnick $nick
+	set ::hand $hand
+	set ::host $host
+	set ::chan $chan
+	set ::chan1 $chan1
+	set ::type $type
+	set ::inick $inick
+	set ::show_inick $show_inick
+}
+
+proc i:online:check {from keyword arguments } {
+	global black
+	set anick $::getnick
+	set hand $::hand
+	set host $::host
+	set chan $::chan
+	set chan1 $::chan1
+	set inick $::inick
+	set show_inick $::show_inick 
+	
+set hostname [lindex [split $arguments] 1]
+if {[regexp {\+} $hostname]} {
+	set split_host [split $hostname "+"]
+} else {
+	set split_host [split $hostname "-"]
+}
+	set mask [lindex $split_host 1]
+	set getnick [string map {
+			"=" ""
+			":" ""
+			} [lindex $split_host 0]]
+if {$getnick != ""} {
+	set replace(%nick%) $anick
+	set replace(%chan%) $chan
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set text [black:color:set "" $black(say.$getlang.i.7)]
+	set getmsg [join $text]
+if {[info exists black(say.$getlang.i.7)]} {
+	set imessage [string map [array get replace] $getmsg]
+}
+
+if {$inick != ""} {
+if {[onchan $inick $chan]} {
+	blacktools:tell $anick $host $hand $chan $chan1 i.1 $show_inick
+	check:if:bind "i:online:check" "302"
+	return
+}
+	putserv "INVITE $inick $chan"
+	putserv "PRIVMSG $inick :$imessage"
+	blacktools:tell $anick $host $hand $chan $chan1 i.2 $show_inick
+		}
+	} else {
+	blacktools:tell $anick $host $hand $chan $chan1 gl.notonline "$inick"
+}
+	check:if:bind "i:online:check" "302"
+}
+
+############################### purge ###############################
+
+proc purge:process {nick host hand chan chan1 reason} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "purge" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
+if {[string equal -nocase $chan $black(homechan)]} {
+	blacktools:tell:prv $nick $host $hand delchan.5 $chan
+	return
+	}
+}
+	channel remove $chan
+	delchan:all $chan
+	topwords:delete $chan
+	putserv "PART $chan :PURGED by $hand :$reason"
+}
+
+################################### v #################################
+
+proc v:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "v" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none	
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {$arg == ""} {
+	set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	set noxonly 0
+	set userlist ""
+	foreach voicenick [chanlist $chan] {
+if {[isvoice $voicenick $chan]} { continue }
+if {[isbotnick $voicenick]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan +v $voicenick	
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {![isvoice $getuser $chan]} {
+	lappend userlist $getuser
+			}
+		}
+		putserv "PRIVMSG $black(chanserv) :voice $chan [join $userlist]"
+	}	
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	set noxonly 0
+	set userlist ""
+	foreach voicenick [chanlist $chan] {
+if {[isbotnick $voicenick]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan -v $voicenick	
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {[isvoice $getuser $chan]} {
+	lappend userlist $getuser
+			}
+		}
+		putserv "PRIVMSG $black(chanserv) :devoice $chan [join $userlist]"
+	}	
+	return
+}
+	set voicelist ""
+	set devoicelist ""
+foreach voicenick [split $arg] {
+if {[isbotnick $voicenick]} { continue }
+if {[isvoice $voicenick $chan]} {
+if {$xban == "0"} {
+	pushmode $chan -v $voicenick
+} else { lappend devoicelist $voicenick }
+} else {
+if {$xban == "0"} {
+	pushmode $chan +v $voicenick
+			} else { lappend voicelist $voicenick }
+		}
+	}
+if {$devoicelist != ""} {
+	putserv "PRIVMSG $black(chanserv) :devoice $chan [join $devoicelist]"
+}
+if {$voicelist != ""} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan [join $voicelist]"
+	}
+}
+
+################################## ho #################################
+
+proc ho:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "ho" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return
+}
+
+if {$arg == ""} {
+set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	foreach hopnick [chanlist $chan] {
+if {[ishalfop $hopnick $chan]} { continue }
+if {$xban == "0"} {
+	pushmode $chan +h $hopnick
+		} else { return }
+	}
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	foreach hopnick [chanlist $chan] {
+if {![ishalfop $hopnick $chan]} { continue }
+if {[isbotnick $hopnick]} { continue }
+if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 massdeop.429 $black(chanserv)
+	return
+		}
+if {$xban == "0"} {
+	pushmode $chan -h $hopnick	
+		} else { return }
+	}
+	return
+}
+
+foreach hopnick [split $arg] {
+if {[isbotnick $hopnick]} { continue }
+if {[ishalfop $hopnick $chan]} {
+if {$xban == "0"} {
+	pushmode $chan -h $hopnick
+} else { return }
+} else {
+if {![setting:get $chan xonly]} {
+pushmode $chan +h $hopnick
+			} else { return }
+		}
+	}
+}
+
+################################## o ##################################
+
+proc o:process {nick host hand chan chan1 arg} {
+global botnick black
+	set xban 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "o" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return
+}
+if {![onchan $botnick $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+return
+}
+
+if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+ return
+}
+
+if {$arg == ""} {
+set arg $nick
+}
+
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	set xban 1
+}
+
+if {[string equal -nocase $arg "+"]} {
+	set userlist ""
+	set noxonly 0
+	foreach opnick [chanlist $chan] {
+if {[isop $opnick $chan]} { continue }
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan +o $opnick
+		}
+	}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {![isop $getuser $chan]} {
+	lappend userlist $getuser
+		}
+	}
+		putserv "PRIVMSG $black(chanserv) :op $chan [join $userlist]"
+	}	
+	return
+}
+
+if {[string equal -nocase $arg "-"]} {
+	set userlist ""
+	set noxonly 0
+	foreach opnick [chanlist $chan] {
+if {![isop $opnick $chan]} { continue }
+if {[isbotnick $opnick]} { continue }
+if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
+	blacktools:tell $nick $host $hand $chan $chan1 o.1 $black(chanserv)
+	return
+}
+if {$xban == "0"} {
+	set noxonly 1
+	pushmode $chan -o $opnick	
+	}
+}
+if {$noxonly == "0"} {
+foreach getuser [chanlist $chan] {
+if {[isop $getuser $chan]} {
+	lappend userlist $getuser
+		}
+	}
+		putserv "PRIVMSG $black(chanserv) :deop $chan [join $userlist]"
+	}
+	return
+}
+	set oplist ""
+	set deoplist ""
+foreach opnick [split $arg] {
+if {[isbotnick $opnick]} { continue }
+if {[isop $opnick $chan]} {
+if {$xban == "0"} {
+pushmode $chan -o $opnick
+} else { lappend deoplist $opnick } 
+} else {
+if {$xban == "0"} {
+pushmode $chan +o $opnick
+			} else { lappend oplist $opnick }
+		}
+	}
+if {$deoplist != ""} {
+	putserv "PRIVMSG $black(chanserv) :deop $chan [join $deoplist]"
+}
+if {$oplist != ""} {
+	putserv "PRIVMSG $black(chanserv) :op $chan [join $oplist]"
+	}
+}
+
+################################ say ##################################
+
+proc say:process {nick host hand chan chan1 text type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "say" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "say"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "say"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "say"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	putserv "PRIVMSG $chan :$text"
+}
+
+################################ act ##################################
+
+proc act:process {nick host hand chan chan1 text type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "act" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "act"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "act"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "act"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	putserv "PRIVMSG $chan :\001ACTION $text\001"
+}
+
+
+
+############################## version ################################
+
+proc version:process {nick host hand chan chan1 arg} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "version" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {$arg != ""} { return }
+	blacktools:tell $nick $host $hand $chan $chan1 version.1 $black(vers)
+}
+
+############################### cycle #################################
+
+proc cycle:process {nick host hand chan chan1 reason} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "cycle" 0]
+	set reply ""
+if {$cmd_status == "1"} { 
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+return
+}
+
+if {![validchan $chan]} {
+blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[regexp {^[0-9]} $reason] && [matchattr $hand nmo|M $chan]} {
+	set replace(%msg.1%) $reason
+	set text [black:color:set "" $black(say.$getlang.cycle.2)]
+	set reply [join $text]
+	putserv "PART $chan :[string map [array get replace] $reply]"
+	channel set $chan +inactive
+	utimer $reason [list channel set $chan -inactive]
+	return
+}
+
+if {$reason == ""} { 
+	set reason "$black(say.$getlang.cycle.1)" 
+	set len [llength $reason] 
+    set random [expr int(rand()*$len)] 
+    set reason [lindex $reason $random]
+	set text [black:color:set "" $reason]
+	set reply [join $text]
+} else {
+	set reply $reason
+}
+	putserv "PART $chan :$reply"
+	putserv "JOIN $chan"
+}
+
+
+################################### mode ######################################
+
+proc mode:process {nick host hand chan chan1 modes type hosts} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "mode" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$modes == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {![regexp {^[+ -]} $modes]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
+		}
+	}
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 mode.6 $modes
+if {![string equal -nocase $modes "+b"] && ![string equal -nocase $modes "-b"]} {
+	putserv "MODE $chan $modes"
+	channel set $chan chanmode $modes
+	} else {
+	putserv "MODE $chan $modes $hosts"
+	}
+}
+
+################################## myset #############################
+
+proc myset:process {nick host hand chan chan1 flags typez type chan2 arg} {
+global black
+	set cmd_status [btcmd:status $chan $hand "myset" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_greet $arg
+	set show_typez $typez
+if {$flags == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return 0
+}
+switch -exact -- [string tolower $flags] {
+lang {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA OUTPUT_LANG
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA OUTPUT_LANG]
+if {$get == ""} { set get "N/A" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![file exists "$black(dirname)/BlackTools/lang/BT.[string tolower $typez].lang.tcl"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.5 \002[string tolower $typez]\002
+	return
+}
+	setuser $hand XTRA OUTPUT_LANG $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.1 $typez
+	return
+}
+addhost {
+if {[matchattr $hand mno]} {
+	set found_it 0
+	set found_user ""
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {![string equal -nocase $typez "-telnet!*@*"]} {
+foreach u [userlist] {
+	set h [getuser $u hosts]
+foreach hs $h {
+if {[string match -nocase $hs $typez]} {
+	set found_it 1
+	set found_user $u
+			}
+		}	
+	}
+}
+if {$found_it == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $typez"
+	return
+}
+	setuser $hand HOSTS $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.7 $typez
+	}
+}
+
+delhost {
+if {[matchattr $hand mno]} {
+	set found_it 0
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set h [getuser $hand hosts]
+foreach hs $h {
+if {[string match -nocase $hs $typez]} {
+	set found_it 1
+	}
+}
+
+if {$found_it == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.9 $typez
+	return
+}
+	delhost $hand $typez
+	blacktools:tell $nick $host $hand $chan $chan1 myset.8 $typez
+	}
+}
+
+greet {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand INFO]
+if {$get == ""} { set get "N/A" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand INFO ""
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+	setuser $hand INFO $arg
+	blacktools:tell $nick $host $hand $chan $chan1 myset.6 $show_greet
+}
+
+auto {
+if {[matchattr $hand mno|M $chan]} {
+if {[regexp {^[&#]} $chan2]} {
+	set actchan $chan2
+} else {
+if {[string equal -nocase $chan2 "global"]} {
+	set actchan "global"
+} else {
+	set actchan $chan
+	}
+}
+if {![regexp {^[+ -]} $typez]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set verify [string trim $typez {"+","-"}]
+
+if {![string equal -nocase $verify "o"] && ![string equal -nocase $verify "v"]} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	return
+}
+if {[matchattr $hand mno] && [string equal -nocase "$actchan" "global"]} {
+if {[string match -nocase $typez "+o"]} {
+if {[matchattr $hand g]} {
+	chattr $hand -g
+}
+	chattr $hand +a
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.6 $hand
+}
+if {[string match -nocase $typez "-o"]} {
+	chattr $hand -a 
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.14 $hand
+}
+if {[string match -nocase $typez "+v"]} {
+if {[matchattr $hand a]} {
+	chattr $hand -a
+}
+	chattr $hand +g
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.7 $hand
+}
+if {[string match -nocase $typez "-v"]} {
+	chattr $hand -g
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.15 $hand
+	}
+	return
+}
+if {[string match -nocase $typez "+o"]} {
+if {[matchattr $hand -|g $actchan]} {
+	chattr $hand -|-g $actchan
+}
+	chattr $hand -|a $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.8 $hand
+}
+if {[string match -nocase $typez "-o"]} {
+	chattr $hand -|-a $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.16 $hand
+}
+if {[string match -nocase $typez "+v"]} {
+if {[matchattr $hand -|a $actchan]} {
+	chattr $hand -|-a $actchan
+}
+	chattr $hand -|g $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.9 $hand
+}
+if {[string match -nocase $typez "-v"]} {
+	chattr $hand -|-g $actchan
+	blacktools:tell $nick $host $hand $actchan $chan1 auto.17 $hand
+		}
+	}
+}
+
+handle {
+if {[matchattr $hand mno|M $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+	}
+if {[string equal -nocase $typez "show"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $hand"
+	return
+}
+if {[validuser $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
+return
+}	
+	blacktools:tell $nick $host $hand $chan $chan1 myset.4 "$show_typez"
+	chhandle $hand $typez
+	}
+}
+
+notes {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	switch $typez {
+	on {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.19 "myset"
+	setuser $hand XTRA NO_NOTES
+	}
+	
+	off {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.20 "myset"
+	setuser $hand XTRA NO_NOTES 1
+	}
+	
+	show {
+	set get [getuser $hand XTRA NO_NOTES]
+if {$get != ""} { set get "OFF" }  else { set get "ON" } 
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}	
+	default {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+				}
+			}
+		}
+	}
+}
+
+noteexpire {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA NOTE_EXPIRE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA NOTE_EXPIRE]
+if {$get == ""} { set get "N/A" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![regexp {^[0-9]} $typez]} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	set return_time [time_return_minute $typez]
+if {$return_time == "-1"} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+	setuser $hand XTRA NOTE_EXPIRE [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.13 $typez
+}
+
+
+autoinvite {
+	switch [string tolower $typez] {
+	
+	show {
+	set get [getuser $hand XTRA AUTOINVITE]
+if {$get == ""} { set get "N/A" }
+if {$get == "1"} { set get "on"} else { set get "off" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+}
+
+	reset {
+	setuser $hand XTRA AUTOINVITE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+}
+
+	on {
+	setuser $hand XTRA AUTOINVITE 1
+	blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
+}
+	off {
+	setuser $hand XTRA AUTOINVITE 0
+	blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
+		}
+	}
+}
+
+output {
+	switch [string tolower $typez] {
+	show {
+	set get [getuser $hand XTRA OUTPUT_TYPE]
+if {$get == ""} { set get "N/A" }
+if {$get == "0"} { set get "NOTICE" } elseif {$get == "1"} { set get "CHAN" } elseif {$get == "2"} { set get "MSG" } else { set get "NOTICE"}
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+}
+
+	reset {
+	setuser $hand XTRA OUTPUT_TYPE
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+}
+	notice {
+	setuser $hand XTRA OUTPUT_TYPE 0
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+}
+	chan {
+	setuser $hand XTRA OUTPUT_TYPE 1
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+}
+	msg {
+	setuser $hand XTRA OUTPUT_TYPE 2
+	blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
+		}
+	}
+}
+
+colors {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA OUTPUT_COLORS
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA OUTPUT_COLORS]
+if {$get == ""} { set get $black(default_colors) }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+	set validcolors "bold underline red blue green yellow orange cyan grey brown purple pink black"
+	set notvalid 0
+if {[llength $arg] > 4 || [llength $arg] < 4} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.14 none
+	return
+		}
+foreach color $arg {
+if {[lsearch [string tolower $color] $validcolors] < -1} {
+	set notvalid 1
+	}
+}
+if {$notvalid == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 myset.15 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 myset.16 $show_greet
+	setuser $hand XTRA OUTPUT_COLORS [string tolower $arg]
+	}
+}
+
+mychan {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA MYCHAN
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA MYCHAN]
+if {$get == ""} { set get "N/A" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+
+if {![regexp {^[&#]} $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+		}
+if {![validchan $typez]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+		}
+	setuser $hand XTRA MYCHAN [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.10 $typez
+	}
+}
+
+mychar {
+if {[matchattr $hand mno|MAOV $chan]} {
+if {$typez == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+		}
+	}
+	return
+}
+if {[string equal -nocase $typez "reset"]} {
+	setuser $hand XTRA MYCHAR
+	blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
+	return
+}
+if {[string equal -nocase $typez "show"]} {
+	set get [getuser $hand XTRA MYCHAR]
+if {$get == ""} { set get "N/A" }
+	blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
+	return
+}
+	setuser $hand XTRA MYCHAR [string tolower $typez]
+	blacktools:tell $nick $host $hand $chan $chan1 myset.18 $typez
+	}
+}
+
+default {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
+				}
+			}
+		}
+	}
+}
+
+################################# set #################################
+
+proc set:process {nick host hand chan chan1 flags type type1} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "set" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set flags [string tolower $flags]
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set choption [check_option $nick $host $hand $chan $chan1 $flags $type1 "$flags"]
+if {$choption == "0"} { return }
+if {[regexp {^[+-]} $flags]} {
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set black_setting [setting:exists $flags]
+if {$black_setting == "1"} {
+	set iflag [string map {"+" ""
+							"-" ""} $flags]
+if {![matchattr $hand n]} {
+if {[string equal -nocase "$iflag" "invisible"] || [string equal -nocase "$iflag" "forward"]} {
+		blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+		return
+	}
+}
+if {[string equal -nocase "$iflag" "settingsaved"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+	return
+}
+	set status [setting:status $chan $flags ""]
+	switch $status {
+	0 {
+if {[regexp {^[-]} $flags]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
+	return
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
+	}
+	1 {
+if {[regexp {^[+]} $flags]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
+	return
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
+	}
+}
+
+if {[string equal -nocase "+xonly" $flags]} {
+if {![info exists black(logged)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 login.3 none
+	return
+	}
+}
+
+	setting:set $chan $flags ""
+	
+if {[string equal -nocase "+anunt" $flags]} {
+if {[setting:get $chan anunt-showtime] != ""} {
+	set time [setting:get $chan anunt-showtime]
+		} else {
+	set time $black(anunttime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(anunt:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "+topwords" $flags]} {
+	set black(topwords:$chan:timer_start) 1
+}
+
+if {[string equal -nocase "-anunt" $flags]} {
+if {[info exists black(anunt:$chan:timer_start)]} {
+	unset black(anunt:$chan:timer_start)
+	}
+if {[info exists black(anunt:counter:$chan)]} {
+	unset black(anunt:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "-topwords" $flags]} {
+	set black(topwords:$chan:timer_start) 1
+if {[info exists black(topwords:$chan:timer_start)]} {
+	unset black(topwords:$chan:timer_start)
+	}
+if {[info exists black(topwords:counter:$chan)]} {
+	unset black(topwords:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "-voiceme"]} {
+if {[info exists black(voiceme:stat:$chan)]} {
+	unset black(voiceme:stat:$chan)
+	}
+}
+
+if {[string equal -nocase "-voiceonmsg"]} {
+if {[info exists black(voiceonmsg:stat:$chan)]} {
+	unset black(voiceonmsg:stat:$chan)
+	}
+}
+
+if {[string equal -nocase "+quoteofday" $flags]} {
+if {[setting:get $chan quote-showtime] != ""} {
+	set time [setting:get $chan quote-showtime]
+		} else {
+	set time $black(quote:msgtime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(quote:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "-quoteofday" $flags]} {
+if {[info exists black(quote:$chan:timer_start)]} {
+	unset black(quote:$chan:timer_start)
+	}
+if {[info exists black(quote:counter:$chan)]} {
+	unset black(quote:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "+clonescan" $flags]} {
+if {[setting:get $chan clonescan-scantime] != ""} {
+	set time [setting:get $chan clonescan-scantime]
+		} else {
+	set time $black(clonescantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(clonescan:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "-clonescan" $flags]} {
+if {[info exists black(clonescan:$chan:timer_start)]} {
+	unset black(clonescan:$chan:timer_start)
+	}
+if {[info exists black(clonescan:counter:$chan)]} {
+	unset black(clonescan:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "+antibadchan" $flags]} {
+if {[setting:get $chan badchan-scantime] != ""} {
+	set time [setting:get $chan badchan-scantime]
+		} else {
+	set time $black(badchan:scantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(badchan:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "+voiceme" $flags]} {
+if {[setting:get $chan voiceme-showtime] != ""} {
+	set time [setting:get $chan voiceme-showtime]
+		} else {
+	set time $black(voiceme:msgtime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(voiceme:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "-voiceme" $flags]} {
+if {[info exists black(voiceme:$chan:timer_start)]} {
+	unset black(voiceme:$chan:timer_start)
+	}
+if {[info exists black(voiceme:counter:$chan)]} {
+	unset black(voiceme:counter:$chan)
+	}
+}
+
+
+if {[string equal -nocase "-antibadchan" $flags]} {
+if {[info exists black(badchan:$chan:timer_start)]} {
+	unset black(badchan:$chan:timer_start)
+	}
+if {[info exists black(badchan:counter:$chan)]} {
+	unset black(badchan:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "+xonly" $flags]} {
+if {![info exists black(logged)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noxonly none
+	return
+	}
+}
+
+if {[string equal -nocase "+limit" $flags]} {
+	set black(limit:$chan:timer_start) 1
+}
+
+if {[string equal -nocase "+voiceonmsg" $flags]} {
+	set black(voiceonmsg:$chan:timer_start) 1
+}
+
+if {[string equal -nocase "-limit" $flags]} {
+if {[info exists black(limit:$chan:timer_start)]} {
+	unset black(limit:$chan:timer_start)
+	}
+}
+
+if {[string equal -nocase "+idleop" $flags] || [string equal -nocase "+idlevoice" $flags] || [string equal -nocase "+idlehalfop" $flags]} {
+	antidle:set $chan
+}
+
+if {[string equal -nocase "-idleop" $flags] || [string equal -nocase "-idlevoice" $flags] || [string equal -nocase "-idlehalfop" $flags]} {
+	antidle:unset $chan
+}
+
+if {[string equal -nocase "+antispam" $flags]} {
+if {[setting:get $chan antispam-scantime] != ""} {
+	set time [setting:get $chan antispam-scantime]
+		} else {
+	set time $black(spamcycle)
+		}
+	set scan_time [time_return_minute $time]
+	set black(antispam:$chan:timer_start) $scan_time
+}
+
+if {[string equal -nocase "-antispam" $flags]} {
+if {[info exists black(antispam:$chan:timer_start)]} {
+	unset black(antispam:$chan:timer_start)
+	}
+if {[info exists black(antispam:counter:$chan)]} {
+	unset black(antispam:counter:$chan)
+	}
+}
+
+if {[string equal -nocase "+securemode" $flags]} {
+	putserv "MODE $chan :+Dm"
+foreach tmr [utimers] {
+if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
+	return
+	}
+}
+	utimer 30 [list securemode:timer]
+}
+
+if {[string equal -nocase "-securemode" $flags]} {
+	set found_list 0
+	foreach tmr [utimers] {
+if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
+	putserv "MODE $chan :-Dm"
+	set replace(%chan%) $chan1
+	set text2 [black:color:set "" $black(say.$getlang.securemode.11)]
+	set reply2 [join $text2]
+	putserv "PRIVMSG $chan :[string map [array get replace] $reply2]"
+if {[info exists black(secure:$chan:list)]} {
+	set found_list 1
+if {[llength $black(secure:$chan:list)] > 0} {
+	foreach entry $black(secure:$chan:list) {
+	putserv "MODE $chan +v $entry"
+if {[info exists black(securecode:$entry:$chan)]} {
+	unset black(securecode:$entry:$chan)
+						}
+					}
+				}
+			}
+		}
+	}
+if {$found_list == "1"} {
+if {[info exists black(secure:$chan:list)]} {
+	unset black(secure:$chan:list)
+		}
+	}
+}
+	return
+}
+	set why [catch {channel set $chan $flags} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
+	return
+} else {
+	channel set $chan $flags ; blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags	
+}
+
+} else {
+if {[matchattr $hand nm]} {
+	set check_eggcmd [egg:setting_check $flags]
+if {$check_eggcmd == "1"} {
+	set return [egg:process $nick $host $hand $chan $chan1 $flags $type]
+if {$return == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.2 "$flags $type"
+	} elseif {$return == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.1 "$flags $type"
+	return
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 set.9 "$flags $type"
+	return
+		}
+	return	
+	}
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set black_setting [setting:exists $flags]
+	set int_set [catch {channel set $chan $flags $type} error]
+if {$black_setting == "0" && $int_set == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+}
+	set choption 1
+	set checkflags $flags
+if {$choption == "0"} { return }
+
+if {[string equal -nocase "joinflood" $flags] || [string equal -nocase "badchan-floodcontrol" $flags] || [string equal -nocase "antijoinflood-userset" $flags] || [string equal -nocase "antirepeat-setting" $flags] || [string equal -nocase "chanflood" $flags]} {
+if {![regexp {[0-9]:[0-9]} $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase "url" $flags]} {
+if {$type == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase "badchan-bmethod" $flags] || [string equal -nocase "badnick-bmethod" $flags]} {
+if {[regexp {^[0-9]} $type] && [regexp {[a-z]} $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"	
+	return
+	} elseif {![regexp {^[0-9]} $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"	
+	return
+	} elseif {$type < 1 || $type > 2} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"	
+	return
+	}
+}
+
+if {[string equal -nocase "anunt-showtime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(anunttime)
+	set scan_time [time_return_minute $time]
+}
+	set black(anunt:$chan:timer_start) $scan_time
+if {[info exists black(anunt:counter:$chan)]} {
+	set black(anunt:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "voiceme-showtime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(voiceme:msgtime)
+	set scan_time [time_return_minute $time]
+}
+	set black(voiceme:$chan:timer_start) $scan_time
+if {[info exists black(voiceme:counter:$chan)]} {
+	set black(voiceme:counter:$chan) 0
+		}
+	}
+}
+
+
+if {[string equal -nocase "quote-showtime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(quote:msgtime)
+	set scan_time [time_return_minute $time]
+}
+	set black(quote:$chan:timer_start) $scan_time
+if {[info exists black(quote:counter:$chan)]} {
+	set black(quote:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "badchan-scantime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(badchan:scantime)
+	set scan_time [time_return_minute $time]
+}
+	set black(badchan:$chan:timer_start) $scan_time
+if {[info exists black(badchan:counter:$chan)]} {
+	set black(badchan:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "idle-scantime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(idleinterval)
+	set scan_time [time_return_minute $time]
+}
+	set black(idle:$chan:timer_start) $scan_time
+if {[info exists black(idle:counter:$chan)]} {
+	set black(idle:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "antispam-scantime" $flags]} {
+if {$type != ""} {
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(spamcycle)
+	set scan_time [time_return_minute $time]
+}
+	set black(antispam:$chan:timer_start) $scan_time
+if {[info exists black(antispam:counter:$chan)]} {
+	set black(antispam:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "clonescan-scantime" $flags]} {
+if {$type != ""} {
+	set time ""
+	set scan_time [time_return_minute $type]
+if {$scan_time == "-1"} { 
+	set time $black(clonescantime) 
+	set scan_time [time_return_minute $time]
+}
+	set black(clonescan:$chan:timer_start) $scan_time
+if {[info exists black(clonescan:counter:$chan)]} {
+	set black(clonescan:counter:$chan) 0
+		}
+	}
+}
+
+if {[string equal -nocase "leave-method" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "leave"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "greet-method" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "greet"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "guestnick-msgmethod" $flags]} {
+	if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type] && ![string equal -nocase "chan" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "guestnick"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string match -nocase "backchan" $flags]} {
+if {![validchan $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none	
+	return
+	}
+}
+
+if {[string equal -nocase "xbanlevel" $flags]} {
+if {![regexp {^[0-9]} $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+if {$type < 75 || $type > 500} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase "vprotect" $flags]} {
+if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "vprotect"]
+if {$choption == "0"} { return }
+	}
+} 
+
+if {[string equal -nocase "oprotect" $flags]} {
+if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "oprotect"]
+if {$choption == "0"} { return }
+	}
+}
+
+if {[string equal -nocase "clonescan-action" $flags]} {
+if {![string equal -nocase "message" $type] && ![string equal -nocase "ban" $type]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "clonescan"]
+if {$choption == "0"} { return }
+	}	
+}
+
+if {[string equal -nocase "lang" $flags]} {
+if {![file exists "$black(dirname)/BlackTools/lang/BlackTools.[string tolower $type].lang.tcl"]} {
+	set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "language"]
+if {$choption == "0"} { return }
+	}
+}
+	set black_setting [setting:exists $flags]
+if {$black_setting == "2"} {
+	set status [setting:status $chan $flags $type]
+if {$status != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.3 "$flags $type"
+	return
+}
+	set split_flags [split $flags "-"]
+	set flags_2 [lindex $split_flags 1]
+if {[string equal -nocase $flags_2 "banmethod"] || [string equal -nocase $flags "banmethod"]} {
+	set validnum [check:validnum $type "banmethod" $type1 $nick $host $hand $chan $chan1]
+	if {$validnum == "0"} { return }
+}
+
+if {[string equal -nocase $flags_2 "bantime"] || [string equal -nocase $flags "banmethod"]} {
+	set return_time [time_return_minute $type]
+if {$return_time == "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+	}
+}
+
+if {[string equal -nocase $flags_2 "banmask"] || [string equal -nocase $flags "banmask"]} {
+	set validnum [check:validnum2 $type "banmask" $type1 $nick $host $hand $chan $chan1]
+	if {$validnum == "0"} { return }
+}
+	set encoded [join [encoding convertto utf-8 $type]]
+	setting:set $chan $flags $encoded
+	blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type"
+	return
+}
+	set why [catch {channel set $chan $flags $type} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
+	return
+} else {
+if {[string equal -nocase $flags "backchan"]} {
+if {![validchan $type]} {
+	blacktools:tell $nick $host $hand $chan $chan1 set.12 $type
+	return
+	}	
+}
+	channel set $chan $flags $type ; blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type" 
+		}
+	}
+}
+
+################################# unset #######################################
+
+proc unset:process {nick host hand chan chan1 setting type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "unset" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$setting == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "unset"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "unset"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "unset"
+		}
+	}
+	return
+}
+	
+if {[string equal -nocase $setting "flag"]} {
+foreach f $black(extra_flag) {
+if {([string equal -nocase $f "invisible"] || [string equal -nocase $f "forward"]) && [matchattr $hand mo|M $chan] && ![matchattr $hand n]} {
+	continue
+}
+	unset:all $chan $f
+}
+	blacktools:tell $nick $host $hand $chan $chan1 unset.4 none
+	return
+}
+
+if {[string equal -nocase $setting "str"]} {
+foreach f $black(extra_str) {
+	unset:all $chan $f
+}
+	blacktools:tell $nick $host $hand $chan $chan1 unset.5 none
+	return
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/extra_temp.$timestamp"
+	set black_setting [setting:exists $setting]
+if {$black_setting != "0"} {
+if {[string equal -nocase $setting "invisible"] || [string equal -nocase $setting "forward"] && ![matchattr $hand n]} {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
+	return
+}
+if {[string equal -nocase $setting "settingsaved"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
+	return
+}
+	set status [setting:get $chan $setting]
+if {$status != "" && $status != "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.2 $setting
+	set file [open $black(extra_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {$black_setting == "1"} {
+	set comp [string map {
+	"+" ""
+	"-" ""} $comp]
+}
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(extra_file)
+	
+if {[string equal -nocase $setting "clonescan-scantime"]} {
+if {[info exists black(clonescan:counter:$chan)]} {
+	unset black(clonescan:counter:$chan)
+		}
+if {[info exists black(clonescan:$chan:timer_start)]} {
+	set black(clonescan:$chan:timer_start) 0
+	}
+}
+
+if {[string equal -nocase $setting "anunt-showtime"]} {
+if {[info exists black(anunt:counter:$chan)]} {
+	unset black(anunt:counter:$chan)
+		}
+if {[info exists black(anunt:$chan:timer_start)]} {
+	set black(anunt:$chan:timer_start) 0
+	}
+}
+
+if {[string equal -nocase $setting "quote-showtime"]} {
+if {[info exists black(quote:counter:$chan)]} {
+	unset black(quote:counter:$chan)
+		}
+if {[info exists black(quote:$chan:timer_start)]} {
+	set black(quote:$chan:timer_start) 0
+	}
+}
+
+if {[string equal -nocase $setting "badchan-scantime"]} {
+if {[info exists black(badchan:counter:$chan)]} {
+	unset black(badchan:counter:$chan)
+		}
+if {[info exists black(badchan:$chan:timer_start)]} {
+	set black(badchan:$chan:timer_start) 0
+	}
+}
+
+if {[string equal -nocase $setting "idle-scantime"]} {
+if {[info exists black(idle:counter:$chan)]} {
+	unset black(idle:counter:$chan)
+		}
+if {[info exists black(idle:$chan:timer_start)]} {
+	set black(idle:$chan:timer_start) 0
+	}
+}
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.3 $setting 
+	}
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
+	}		
+}
+
+proc unset:all {chan setting} {
+	global black
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/extra_temp.$timestamp"
+	set file [open $black(extra_file) r]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set c [lindex [split $line] 0]
+	set gettype [lindex [split $line] 1]
+	set comp [lindex [split $line] 2]
+if {[regexp {^[+-]} $comp]} {
+	set comp [string map {
+	"+" ""
+	"-" ""} $comp]
+}
+if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {	
+		continue
+		} else {
+	puts $tempwrite $line
+		}	
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(extra_file)
+}
+
+proc check:validnum {num flags type1 nick host hand chan chan1} {
+	global black
+	if {![regexp {^[0-9]} $num]} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+if {($num < 1) || ($num > 7)} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+	return 1
+}
+
+proc check:validnum2 {num flags type1 nick host hand chan chan1} {
+	global black
+	if {![regexp {^[0-9]} $num]} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+if {($num < 1) || ($num > 5)} {
+if {$type1 == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
+}
+if {$type1 == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
+		}
+	return 0
+	}
+	return 1
+}
+
+
+############################### ignore ######################################
+
+proc ignore:process {nick host hand chan chan1 what mask time reason type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "ignore" 0]
+	set show_mask $mask
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$what == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+}
+switch -exact -- [string tolower $what] {
+
+list {
+if {[llength [ignorelist]] == "0"} { blacktools:tell $nick $host $hand $chan $chan1 ignore.3 none
+	return
+}
+
+foreach ig [ignorelist] {
+	set hostig [lindex $ig 0]
+	set byig [lindex $ig 4]
+	set bytime [lindex $ig 2]
+	set reasig [lindex $ig 1]
+if {$bytime != "0"} {
+	set bytime [clock format $bytime -format %D-%H:%M:%S]
+} else { set bytime "-"}
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.4 "$hostig $byig $bytime [join $reasig]" 
+	}
+}
+
+add {
+
+if {$mask == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+	return
+}
+
+if {[isignore $mask]} {
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.5 $show_mask
+	return
+}
+
+if {![regexp {[!]} $mask]} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+	return
+}
+	set check_ignore [ignore:stop $mask]
+if {$check_ignore != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.validuser $check_ignore
+	return
+}
+
+if {![regexp {^[0-9]} $time]} {
+	set time $black(ignore:default_time)
+}
+	set ignore_time [time_return_minute $time]
+
+if {$reason == ""} { set reason "N/A" }
+	newignore $mask $hand $reason $ignore_time
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.6 "$show_mask $time $reason"
+}
+
+del {
+if {$mask == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+	}
+	return
+}
+
+if {[isignore $mask]} {
+	killignore $mask
+} else { blacktools:tell $nick $host $hand $chan $chan1 ignore.8 $show_mask
+	return
+} 
+	blacktools:tell $nick $host $hand $chan $chan1 ignore.9 $show_mask
+		}
+default {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
+		}
+			}
+		}
+	}
+}
+
+proc ignore:stop {host} {
+	global black
+		set finduser ""
+if {[userlist] != ""} {
+foreach usr [userlist] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $host $hhost] || [string match -nocase $hhost $host]} {
+	set finduser $usr
+				}
+			}
+		}
+	}
+	return $finduser
+}
+
+################################# show ################################
+
+proc show:process {nick host hand chan chan1 wich type} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "show" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$wich == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "show"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "show"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "show"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set setting_exists [setting:exists $wich]
+if {$setting_exists == "0"} {
+	set why [catch {channel get $chan $wich} error]
+if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
+	return
+} else {
+	set replyinfo [channel get $chan $wich]
+if {($replyinfo != "") && ($replyinfo == "1")} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 "$wich"
+	return
+}
+if {($replyinfo != "") && ($replyinfo == "0")} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 "$wich"
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
+	}
+	return
+}
+	set replyinfo [setting:get $chan $wich]
+if {$setting_exists == "1"} {
+
+if {([string equal -nocase $wich "invisible"] || [string equal -nocase $wich "forward"]) && ![matchattr $hand n]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
+	return
+}
+	
+if {[regexp {^[1]} $replyinfo]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
+	return
+}
+
+if {[regexp {^[0]} $replyinfo]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
+	return
+	}
+if {($replyinfo == "") && [string equal -nocase $wich "oprotect"] || [string equal -nocase $wich "vprotect"] || [string equal -nocase $wich "hoprotect"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
+	return
+}
+if {$replyinfo == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
+	}
+	return
+}
+	set split_wich [split $wich "-"]
+	set name [lindex $split_wich 0]
+if {$replyinfo == ""} {
+switch -exact -- [string tolower $wich] {
+
+badnick-bmethod {
+	set replyinfo $black(badnbanmethod)
+}
+
+voiceme-showtime {
+	set replyinfo $black(voiceme:msgtime)
+}
+
+quote-showtime {
+	set replyinfo $black(quote:msgtime)
+}
+
+anunt-showtime {
+	set replyinfo $black(anunttime)
+}
+
+quitpartmsgflood-char {
+	set replyinfo $black(badquitpartmsgchar)
+}
+
+repetitivechars-char {
+	set replyinfo $black(repetitivechars:num)
+}
+
+antispam-scantime {
+	set replyinfo $black(spamcycle)
+}
+
+clonescan-scantime {
+	set replyinfo $black(clonescantime)
+}
+
+badchan-scantime {
+	set replyinfo $black(badchan:scantime)
+}
+badchan-floodcontrol {
+	set replyinfo $black(badchan:join:seconds)
+}
+
+idle-scantime {
+	set replyinfo $black(idleinterval)
+}
+
+lang {
+	set replyinfo $black(default_lang)
+}
+
+greet-method {
+	set replyinfo $black(greet:method)
+}
+
+leave-method {
+	set replyinfo $black(leave:method)
+}
+
+backchan {
+	set replyinfo $black(say.ro.gl.noset)
+}
+
+url {
+	set replyinfo $black(say.ro.gl.noset)
+}
+
+idlehalfopmax {
+	set replyinfo $black(idlehalfopmax)
+}
+
+nickflood-repeat {
+	set replyinfo $black(nickfloodrepeats)
+}
+
+w-message {
+	set replyinfo $black(say.$getlang.w.6)
+}
+
+antilongtextmax {
+	set replyinfo $black(longchar)
+}
+
+joinflood {
+	set replyinfo $black(joinflood:protect)
+}
+antijoinflood-userset {
+	set replyinfo $black(antijoinflood_user_joins)
+}
+
+chanflood {
+	set replyinfo $black(antichanfloodrepeats)
+}
+
+idleopmax {
+	set replyinfo $black(idleopmax)
+}
+
+idlevoicemax {
+	set replyinfo $black(idlevoicemax)
+}
+
+expirebans {
+	set replyinfo $black(default:bantime)
+}
+
+antirepeat-setting {
+set replyinfo $black(antirepeat:repeats)
+}
+
+gag-reason {
+	set replyinfo $black(say.$getlang.gag.6)
+}
+
+w-reason {
+	set len [llength $black(say.$getlang.w.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.w.5) $random]
+	set replyinfo $reply
+}
+
+k-reason {
+	set len [llength $black(say.$getlang.k.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.k.5) $random]
+	set replyinfo $reply
+}
+
+b-reason {
+	set len [llength $black(say.$getlang.b.5)] 
+    set random [expr int(rand()*$len)] 
+    set reply [lindex $black(say.$getlang.b.5) $random]
+	set replyinfo $reply
+}
+
+badchan-bmethod {
+	set replyinfo $black(badcbanmethod)
+}
+
+d-bantime {
+	set replyinfo $black(dbtime)
+}
+
+antispam-message {
+	set replyinfo $black(say.$getlang.antispam.2)
+}
+
+limit-default {
+	set replyinfo $black(limit:default)
+}
+
+clonescan-maxclone {
+	set replyinfo $black(maxclone)
+}
+
+clonescan-action {
+	set replyinfo "message"
+				}
+guestnick-message {
+	set replyinfo $black(say.$getlang.guestnick.10)
+				}
+guestnick-msgmethod {
+	set replyinfo $black(guestnick:msgmethod)
+				}
+voiceonmsg-idletime {
+	set replyinfo $black(voiceonmsg:idletime)
+}
+voiceonmsg-linenum {
+	set replyinfo $black(voiceonmsg:linenum)
+			}
+xbantime {
+	set replyinfo $black(chanserv:bantime)
+}
+
+xbanlevel {
+	set replyinfo $black(chanserv:banlevel)
+}
+default {
+	set replyinfo [show:details $wich $name $setting_exists $chan ""]
+			}
+		}
+	} else {
+	set replyinfo [show:details $wich $name $setting_exists $chan $replyinfo]
+	}
+	set remain_timer [show:getscantime:remain $wich $chan]
+if {$remain_timer == "-1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich [join $replyinfo]"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 show.4 "$wich [join $replyinfo] $remain_timer"
+	}
+}
+
+proc show:getscantime:remain {setting chan} {
+	global black
+	set remain ""
+if {[string equal -nocase $setting "badchan-floodcontrol"]} {
+	return -1
+}
+	set mod [split $setting "-"]
+	set mod [lindex $mod 0]
+if {[info exists black($mod:$chan:timer_start)] && [info exists black($mod:counter:$chan)]} {
+	set remain [expr $black($mod:$chan:timer_start) - $black($mod:counter:$chan)]
+	}
+if {$remain == ""} {
+		return -1
+	} else { return $remain }
+}
+
+proc show:details {wich name setting_exists chan set} {
+	global black
+	set getlang [string tolower [setting:get $chan lang]]
+	set cmds "dr vr troll bot n id spam bw black stick d next badchan spam"
+	set replyinfo ""
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[string equal -nocase $wich "$name-banmethod"]} {
+if {$set == ""} {
+	set replyinfo [show:getbanmethod $black($name:banmethod)]
+	} else {
+	set replyinfo [show:getbanmethod $set]
+	}
+}
+if {[string equal -nocase $wich "$name-banmask"]} {
+if {$set == ""} {
+	set replyinfo [show:getbanmask $black($name:banmask)]
+	} else {
+	set replyinfo [show:getbanmask $set]
+	}
+}
+
+if {$setting_exists == "2"} {
+	if {[string equal -nocase $wich "$name-bantime"]} {
+if {$set == ""} {
+	set replyinfo $black($name:bantime)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$setting_exists == "2"} {
+if {[string equal -nocase $wich "$name-warn"]} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.2)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$setting_exists == "2"} {
+	if {[string equal -nocase $wich "$name-reason"] && [lsearch -exact [string tolower $cmds] [string tolower $name]] > -1} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.5)
+				} else {
+	set replyinfo $set
+				}
+			}
+		}
+if {$setting_exists == "2" && $replyinfo == ""} {
+	if {[string equal -nocase $wich "$name-reason"]} {
+if {$set == ""} {
+	set replyinfo $black(say.$getlang.$name.1)
+			} else {
+	set replyinfo $set
+			}
+		}
+	}
+if {$replyinfo == ""} {
+	set replyinfo $set
+}
+	return $replyinfo
+}
+
+
+proc show:getbanmask {num} {
+	global black
+switch $num {
+	1 {
+	return "#1 - *!*@host"
+	}
+	2 {
+	return "#2 - *!user@host"
+	}
+	3 {
+	return "#3 - nick!user@host"
+	}
+	4 {
+	return "#4 - nick!*@*"
+	}
+	5 {
+	return "#5 - *!user@*"
+		}
+	}
+}
+
+proc show:getbanmethod {num} {
+	global black
+switch $num {
+	1 {
+	return "#1 - warn"
+	}
+	
+	2 {
+	return "#2 - kick"
+	}
+	
+	3 {
+	return "#3 - ban"
+	}
+	
+	4 {
+	return "#4 - warn -> kick"
+	}
+	
+	5 {
+	return "#5 - warn -> kick -> ban"
+	}
+	
+	6 {
+	return "#6 - kick -> ban"
+	}
+	7 {
+	return "#7 - warn -> ban"
+		}
+	}	
+}
+
+############################## stats ##################################
+
+proc stats:process {nick host hand chan chan1 user option type} {
+global botnick black timezone
+	set cmd_status [btcmd:status $chan $hand "stats" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set handle ""
+	set show_user $user
+	set validuser 0
+	set mask ""
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "stats"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "stats"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "stats"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[validuser $user]} {
+	set validuser 1
+} else {
+	set handle [nick2hand $user]
+if {[validuser $handle]} {
+	set user $handle
+	set validuser 1
+		}
+	}
+if {$validuser == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotexist $user
+	return
+}
+switch [string tolower $option] {
+	reset {
+if {[matchattr $hand nmo|M]} {
+	set reseted 0
+	set cmds_today [getuser $user XTRA CMD_STATS_TODAY($chan)]
+	set cmds_total [getuser $user XTRA CMD_STATS($chan)]
+
+if {$cmds_today != ""} {
+	set reseted 1
+	setuser $user XTRA CMD_STATS_TODAY($chan)
+}
+if {$cmds_total != ""} {
+	set reseted 1
+	setuser $user XTRA CMD_STATS($chan)
+}
+if {$reseted == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.5 $user
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.1 $user	
+			}
+		}
+	}
+	total {
+	stats:process:show $nick $host $hand $chan $chan1 $user "CMD_STATS($chan)"
+	}
+	default {
+	stats:process:show $nick $host $hand $chan $chan1 $user "CMD_STATS_TODAY($chan)"
+		}
+	}
+}
+
+proc stats:process:show {nick host hand chan chan1 user option} {
+	global black lastbind
+	set cmds [getuser $user XTRA $option]
+	set stats ""
+	set total 0
+	set total_k 0
+	set cmds_gl ""
+if {[matchattr $hand nmo]} {
+	set cmds_gl [getuser $user XTRA BANS(GLOBAL)]
+if {$cmds_gl == ""} {set cmds_gl 0 }
+}
+	
+if {$cmds == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.1 $user
+	return
+}
+foreach stat $cmds {
+if {$stat != ""} {
+	set split_stat [split $stat ":"]
+	set cmd [lindex $split_stat 0]
+	set num [lindex $split_stat 1]
+if {[string equal -nocase "k" $cmd] || [string equal -nocase "w" $cmd]} {
+	set total_k [expr $total_k + $num]
+} else {
+	set total [expr $total + $num]
+}
+	lappend stats "[black:color "1" $hand $cmd] ([black:color "2" $hand $num])"
+	}
+}
+
+if {[matchattr $hand nmo]} {
+if {[string equal -nocase "CMD_STATS_TODAY($chan)" $option]} {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.2 "$user $total $total_k [join $stats " ; "]"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.4 "$user $total $cmds_gl $total_k [join $stats " ; "]"
+		}
+	} else {
+if {[string equal -nocase "CMD_STATS_TODAY($chan)" $option]} {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.2 "$user $total $total_k [join $stats " ; "]"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 stats.3 "$user $total $total_k [join $stats " ; "]"
+		}	
+	}
+}
+
+################################# r #######################################
+
+proc topic:refresh {nick host hand chan chan1 arg} {
+	global black lastbind botnick
+	set cmd_status [btcmd:status $chan $hand "r" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	set chantopic [topic $chan]
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$chantopic != ""} {
+	set top "$black(say.$getlang.r.1)" 
+	set len [llength $top] 
+    set random [expr int(rand()*$len)] 
+    set top [lindex $top $random]
+	set text [black:color:set "" $top]
+	set reply [join $text]
+	putserv "TOPIC $chan :$reply"
+	putserv "TOPIC $chan :$chantopic"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 r.2 none
+	}
+}
+
+
+############################### omsg ###################################
+
+
+proc omsg:process {nick host hand chan chan1 who msg type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "omsg" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set chans ""
+
+if {$who == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "omsg"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "omsg"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "omsg"
+		}
+	}
+	return
+}
+
+if {$msg == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "omsg"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "omsg"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "omsg"
+		}
+	}
+	return
+}
+
+if {[string equal -nocase $who "all"]} {
+	foreach c [channels] {
+if {![setting:get $c invisible]} {
+if {[matchattr $hand $black(accessflags) $c]} {
+if {[botisop $c]} {
+	lappend chans $c
+				}
+			}
+		}
+	}
+if {$chans == ""} {
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 omsg.1 [join $chans ", "]
+	omsg:act $hand $chans 0 $msg
+	return
+}
+
+if {![validchan $who]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {[matchattr $hand $black(accessflags) $who]} {
+if {![botisop $who]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+	putserv "NOTICE @$who :\[BT\] ($hand) $msg"
+	blacktools:tell $nick $host $hand $chan $chan1 omsg.1 $who
+	}
+}
+
+proc omsg:act {hand chans number msg} {
+	global black
+	set chan [lindex $chans $number]
+	putserv "NOTICE @$chan :\[BT\] ($hand) $msg"
+	set number [expr $number + 1]
+if {[lindex $chans $number] != ""} {
+	utimer 2 [list omsg:act $hand $chans $number $msg]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 2570 - 0
BlackTools/Commands/BT.Manual.tcl

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

+ 2111 - 0
BlackTools/Commands/BT.MeCmds.tcl

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

+ 497 - 0
BlackTools/Commands/BT.OwnerCmds.tcl

@@ -0,0 +1,497 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   OWNER CMDS TCL   ############################
+#########################################################################
+##						                      						   ##
+##   BlackTools  : http://blacktools.tclscripts.net	            	   ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                              					   ##
+#########################################################################
+
+
+################################ Commands ###################################
+
+################################## login ####################################
+
+proc login:process {nick host hand chan chan1} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "login" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[info exists black(logged)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 login.2 "$black(chanserv)"
+	return
+}
+	putserv "PRIVMSG $black(hostchanserv) :login $black(username) $black(password)"
+   	putserv "MODE $botnick :$black(xmod)"
+
+if {[info exists black(notlogged)] || [info exists black(notlogged:failed)] || [info exists black(notlogged:invalid)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 login.3 "$black(chanserv)"
+	}
+}
+
+################################## cp #######################################
+
+proc cp:process {nick host hand chan chan1 type what from to} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "cp" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set notvalid ""
+if {![regexp {^[&#]} $from] || (![regexp {^[&#]} $to] && ![string equal -nocase $to "all"])} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "cp"
+}
+	return
+}
+
+if {![validchan $from]} {
+	lappend notvalid $from
+}
+if {![validchan $to]} {
+	lappend notvalid $to
+}
+if {$notvalid != ""} {
+	if {[llength $notvalid] > 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.3 $notvalid
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.2 $notvalid
+	}
+	return
+}
+	switch $what {
+	
+banlist {
+	set counter 0
+if {[llength [blacktools:banlist $from]] < 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 cp.1 $from
+	return
+}
+foreach b [blacktools:banlist $from] {
+	set file [open $black(bans_file) "a"]
+	set num [blacktools:ban:find_id]
+	set enc_chan [encoding convertto utf-8 $to]
+	set read_type [lindex [split $b] 0]
+	set read_host [lindex [split $b] 3]
+	set read_hand [lindex [split $b] 4]
+	set read_time1 [lindex [split $b] 5]
+	set read_time2 [lindex [split $b] 6]
+	set read_num1 [lindex [split $b] 7]
+	set read_num2 [lindex [split $b] 8]
+	set read_reason [join [lrange [split $b] 9 end]]
+	
+	set return [blacktools:ban:exists $read_host $enc_chan]
+if {$return == ""} {
+	set counter [expr $counter + 1]
+	puts $file "$read_type $num [string tolower $enc_chan] [string tolower $read_host] $read_hand $read_time1 $read_time2 $read_num1 $read_num2 $read_reason"
+	}
+	close $file
+}
+	blacktools:tell $nick $host $hand $chan $chan1 cp.4 "$counter"
+}
+
+badchans {
+	set total_counter 0
+	set inc 0
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set num 0
+	set temp_num 0
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $from] && [string match -nocase $read_type "BADCHAN"]} {
+	set total_counter [expr $total_counter + 1]
+	set bdchan [lindex [split $line] 3]
+	set reason [join [lrange [split $line] 4 end]]
+	set findchan [prot:findbadchan $to $bdchan]
+if {$findchan != "1"} {
+	while {$temp_num == 0} {
+	set get [find:num $num $to "BADCHAN"]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set inc [expr $inc + 1]
+	set file [open $black(add_file) a]
+	puts $file "$to BADCHAN $num $bdchan $reason"
+	close $file
+		}
+	}
+}
+	blacktools:tell $nick $host $hand $chan $chan1 cp.7 "$inc $total_counter"
+}
+
+userlist {
+	set time [unixtime]
+	set counter 0
+	set total_counter 0
+foreach u [userlist] {
+if {[matchattr $u $black(exceptflags) $from]} {
+	set total_counter [expr $total_counter + 1]
+	set cflags [chattr $u | $from]
+if {![matchattr $cflags $to]} {
+	set counter [expr $counter + 1]
+	chattr $u $cflags $to
+	setuser $u XTRA CHANMODIF($to) $time:cp_from_$from
+			}
+		}
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 cp.5 "$counter $total_counter"
+}
+
+settings {
+	set getflags [get:flags $from]
+	set getstr [get:str $from]
+	set counter 0
+	set file [open $black(extra_file) a]
+foreach flag $getflags {
+if {[string equal -nocase $flag "+forward"]} {
+	continue
+}
+	set return [blacktools:flag:exists $to $flag]
+if {$return == "0"} {
+	set counter [expr $counter + 1]
+	puts $file "$to XTRA $flag"
+	}
+}
+foreach str $getstr {
+	set split_str [split $str "&&"]
+	set s [lindex $split_str 0]
+if {[string equal -nocase $s "backchan"]} {
+	continue
+}
+	set why [join [lrange $split_str 1 end]]
+	set return [blacktools:flag:exists $to $s]
+if {$return == "0"} {
+	set counter [expr $counter + 1]
+	puts $file "$to XTRA $s [concat $why]"
+	}
+}
+	set gettopic [topic:get $from]
+if {$gettopic != ""} {
+	set counter [expr $counter + 1]
+	msg:add $gettopic $to "TOPIC"
+}
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 cp.6 "$counter"
+}
+
+	default {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"	
+				}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
+			}
+		}
+	}
+}
+
+############################## status #################################
+
+proc status:process {nick host hand chan} {
+	global black botnick server uptime {server-online} countusers version getowner tcl_patchLevel
+	set cmd_status [btcmd:status $chan $hand "status" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}	
+foreach c [channels] {
+if {![setting:get $c invisible]} {
+	lappend channels $c
+	} else {
+if {[matchattr $hand n]} {
+	lappend channels \002$c\002
+		}
+	}
+}
+	set chan1 "$chan"
+	blacktools:tell $nick $host $hand $chan $chan1 status.1 "$black(name) $black(vers) $version $tcl_patchLevel"
+	blacktools:tell $nick $host $hand $chan $chan1 status.4 [join $channels]
+	blacktools:tell $nick $host $hand $chan $chan1 status.5 "[countusers] [userlist n]"
+}
+
+############################## broadcast ##############################
+
+proc broadcast:cmd:process {nick host hand chan chan1 text type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "broadcast" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$text == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "broadcast"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "broadcast"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "broadcast"
+		}
+	}
+	return 0
+}
+
+foreach c [channels] {
+if {![setting:get $c silent]} {
+	putserv "PRIVMSG $c :\[\002BROADCAST\002\] $text"
+		}
+	}
+}
+
+############################## msg ####################################
+
+proc msg:process {nick host hand chan chan1 who msg type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "msg" 0]
+if {$cmd_status == "1"} { 
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {$who == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "msg"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "msg"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "msg"
+		}
+	}
+	return
+}
+
+
+if {[isbotnick $who]} { 
+	return
+}
+	putserv "USERHOST :$who"
+	bind RAW - 302 msg:online:check
+	set ::msgnick $nick
+	set ::hand $hand
+	set ::host $host
+	set ::chan $chan
+	set ::chan1 $chan1
+	set ::type $type
+	set ::msg $msg
+	set ::who $who
+}
+
+proc msg:online:check {from keyword arguments } {
+	global black
+	set msgnick $::msgnick
+	set hand $::hand
+	set host $::host
+	set chan $::chan
+	set chan1 $::chan1
+	set who $::who
+	set msg $::msg
+	
+	set hostname [lindex [split $arguments] 1]
+if {[regexp {\+} $hostname]} {
+	set split_host [split $hostname "+"]
+} else {
+	set split_host [split $hostname "-"]
+}
+	set mask [lindex $split_host 1]
+	set getnick [string map {
+			"=" ""
+			":" ""
+			} [lindex $split_host 0]]
+if {$getnick != ""} {
+if {[matchattr $hand -|A $chan] && [string equal -nocase $who $black(chanserv)]} {
+	check:if:bind "msg:online:check" "302"
+	return
+}
+if {$host != ""} {
+if {[matchattr $hand -|AM $chan] && [onchan $who $chan]} {
+	putserv "PRIVMSG $who :$msg"
+	check:if:bind "msg:online:check" "302"
+	return
+	}
+}
+if {[matchattr $hand mno]} {
+	putserv "PRIVMSG $who :$msg"
+}
+	} else {
+	blacktools:tell $msgnick $host $hand $chan $chan1 gl.notonline "$who"
+}
+	check:if:bind "msg:online:check" "302"
+}
+
+proc msg:getmessage {nick host hand arg} {
+	global black
+	
+	
+	
+}
+
+############################### channels ########################
+
+proc channels:process {nick host hand chan chan1} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "channels" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+	set num [llength [channels]]
+	set minusers "5"
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+foreach c [channels] {
+if {![setting:get $c invisible]} {
+	set usersnumber [llength [chanlist $c]]
+if {[channel get $c inactive]} {
+if {[info exists black(abuse:$c)]} {
+	lappend message_aschan "[join $c ", "]"
+} else {
+	lappend message_schan "[join $c ", "]"
+}
+} elseif {![onchan $botnick $c]} {
+	lappend message_nchan "[join $c ", "]"	
+} elseif {[onchan $botnick $c] && (![botisop $c]) && ($usersnumber >= $minusers)} {
+	lappend message_ok "[join $c ", "]"
+} elseif {[onchan $botnick $c] && ($usersnumber < $minusers)} {
+	lappend message_nmin "[join $c ", "]"
+}
+if {[botisop $c] && ($usersnumber >= $minusers)} {
+	lappend message_ok "[join @$c ", "]"
+			}
+		} else {
+if {[matchattr $hand n]} {
+	lappend message_inv "[join $c ", "]"
+			}		
+		}
+	}
+
+	blacktools:tell $nick $host $hand $chan $chan1 channels.1 $num
+if {[info exists message_ok]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.3)\]: $message_ok"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_nchan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.4)\]: $message_nchan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_nmin]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.7) < $minusers\]: $message_nmin"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+	}
+}
+if {[info exists message_schan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.5)\]: $message_schan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+if {[info exists message_aschan]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.6)\]: $message_aschan"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+if {[info exists message_inv]} {
+foreach word [wordwrap [join "\[$black(say.$getlang.channels.8)\]: $message_inv"] 350 ,] {
+	blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
+		}
+	}
+}
+
+############################### nick ##################################
+
+proc tempnick:process {thenick tonick host hand chan chan1 type} {
+	global nick lastbind black
+	set cmd_status [btcmd:status $chan $hand "nick" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {$thenick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr "nick"
+	}
+	1 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_nick "nick"
+	}
+	2 {
+	blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_priv "nick"
+		}
+	}
+	return
+}
+if {$black(nickserv:identify) == "1"} {
+	putserv "PRIVMSG $black(nickserv:host) :RELEASE $thenick $black(nickserv:pass)"
+	}
+	set nick $thenick
+	blacktools:tell $tonick $host $hand $chan $chan1 nick.4 $thenick	
+}
+
+proc nick:process {who newnick host hand chan} {
+global black nick config
+	set chan1 "$chan"
+if {$newnick == ""} {
+	blacktools:tell $who $host $hand $chan $chan1 nick.2 $newnick
+	return
+}
+	blacktools:tell $who $host $hand $chan $chan1 nick.1 $newnick
+	set ::lastnick [config:getinfo $config "set nick \"*\""]
+if {$black(nickserv:identify) == "1"} {
+	putserv "PRIVMSG $black(nickserv:host) :RELEASE $newnick $black(nickserv:pass)"
+}
+	set nick [join $newnick]
+	set error [config:save $config "set nick \"*\"" "set nick \"$newnick\""]
+if {$error == "0"} {
+	blacktools:tell $who $host $hand $chan $chan1 nick.3 ""
+	}
+	bind RAW - 432 check:validnickname
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 2326 - 0
BlackTools/Commands/BT.PrvCmds.tcl

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

+ 63 - 0
BlackTools/Modules/BT.AntiTake.tcl

@@ -0,0 +1,63 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   ANTITAKE TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc dontdeoppublic {nick host hand chan args} {
+global black botnick
+	set dnick [lindex $args 1]
+	set handle [nick2hand $nick]
+if {[setting:get $chan dontdeop] } {
+if {[string match -nocase $nick $botnick]} {
+	return
+}
+if {![matchattr $handle $black(exceptflags) $chan]} {
+	putquick "MODE $chan -o $nick"
+	putquick "MODE $chan +o $dnick"
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set text [black:color:set "" $black(say.$getlang.antitake.1)]
+	set text [join $text]
+	puthelp "NOTICE $nick :$text"
+		}
+	}
+}
+ 
+proc dontoppublic {nick host hand chan args} {
+global black botnick
+	set onick [lindex $args 1]
+	set handle [nick2hand $nick]
+if {[setting:get $chan dontop]} {
+if {[string match -nocase $nick $botnick]} { 
+	return
+}
+if {[string match -nocase $onick $botnick]} {
+	return
+}
+if {![matchattr $handle $black(exceptflags) $chan]} {
+	putquick "MODE $chan -o $nick"
+	putquick "MODE $chan -o $onick"
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set text [black:color:set "" $black(say.$getlang.antitake.2)]
+	set text [join $text]
+	puthelp "NOTICE $nick :$text"
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 276 - 0
BlackTools/Modules/BT.Anunt.tcl

@@ -0,0 +1,276 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   ANUNT/ADVERT TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc anunt:process {nick host hand chan chan1 who message number type} {
+global botnick black username
+	set cmd_status [btcmd:status $chan $hand "anunt" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set show_message $message
+	set num 0
+	set temp_num 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$who == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "anunt"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "anunt"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "anunt"
+}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	switch $who {
+on {
+	setting:set $chan +anunt ""
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.3 none
+if {[setting:get $chan anunt-showtime] != ""} {
+	set time [setting:get $chan anunt-showtime]
+		} else {
+	set time $black(anunttime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(anunt:$chan:timer_start) $scan_time
+}
+
+off {
+	setting:set $chan -anunt ""
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.4 none
+if {[info exists black(anunt:$chan:timer_start)]} {
+	unset black(anunt:$chan:timer_start)
+	}
+if {[info exists black(anunt:counter:$chan)]} {
+	unset black(anunt:counter:$chan)
+	}
+}
+
+add {
+if {$message == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "anunt"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "anunt"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "anunt"
+}
+	return
+}
+	
+	while {$temp_num == 0} {
+	set get [find:num $num $chan "ANUNT"]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set file [open $black(add_file) a]
+	set encoded [encoding convertto utf-8 $message]
+	set enc_chan [encoding convertto utf-8 $chan]
+	puts $file "$enc_chan ANUNT $num $encoded"
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.5 $num
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.1 $show_message
+}
+list {
+	array set anuntlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/anunt_temp.$timestamp"
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "ANUNT"]} {
+	set msg_num [lindex [split $line] 2]
+	set message [join [lrange [split $line] 3 end]]
+lappend anuntlist($msg_num) $message
+	}
+}
+	set tempwrite [open $temp w]
+foreach msg [lsort -integer -increasing [array names anuntlist]] {
+	puts $tempwrite "$msg [join $anuntlist($msg)]"
+	}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "anunt" "0" $number
+}
+
+del {
+	
+if {![regexp {^[0-9]} $number]} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "anunt"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "anunt"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "anunt"
+}
+	return
+}
+	set ret [find:num $number $chan "ANUNT"]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.13 $number
+	return
+}
+	set file [open $black(add_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/anunt_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string equal $number $read_num] && [string equal -nocase $enc_chan $chan] && [string equal -nocase $read_type "ANUNT"]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+
+	blacktools:tell $nick $host $hand $chan $chan1 anunt.10 $number
+		}
+	}
+}
+
+proc anuntpublic:show {chans} {
+global black
+	set channels ""
+foreach chan $chans {
+if {[validchan $chan]} {
+	lappend channels $chan
+	}
+}
+if {$channels != ""} {
+		anunt:time $channels 0
+	}
+}
+
+proc anunt:time {channels counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	anunt:show $chan
+} 
+if {[lindex $channels $cc] == ""} {
+	return
+} else {
+	anunt:time $channels $cc
+	}
+}
+
+proc anunt:show {chan} {
+	global black botnick
+	set replace(%botnick%) $botnick
+	set replace(%chan%) $chan
+if {[info exists black(lastaction:$chan)]} {
+	set total_anunt 0
+	set unixtime [unixtime]
+if {[setting:get $chan anunt-showtime] != ""} {
+	set return_time [time_return_minute [setting:get $chan anunt-showtime]]
+} else {
+	set return_time [time_return_minute $black(anunttime)]
+}
+	set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
+if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
+	return
+	}
+} else { return }
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp_dir "$black(tempdir)/anunt_temp.$timestamp"
+if {![file exists $temp_dir]} {
+	set file [open $temp_dir w]
+	close $file
+}
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+if {$data != ""} {
+	set file [open $temp_dir "a"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "ANUNT"]} {
+	puts $file [lrange [split $line] 3 end]
+	set total_anunt [expr $total_anunt + 1]
+		}
+	}
+	close $file
+}
+	set file [open $temp_dir "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data != ""} {
+
+if {![info exists black(anuntshow:$chan)]} {
+	set black(anuntshow:$chan) 0
+}
+	set lines [split $data "\n"]
+	set line [lindex $lines $black(anuntshow:$chan)]
+	
+if {$line == ""} { 
+	set black(anuntshow:$chan) 0
+	set line [lindex $lines $black(anuntshow:$chan)]
+}
+	set split_line [split $line "~"]
+	set black(anuntshow:$chan) [expr $black(anuntshow:$chan) + 1]
+foreach mes $split_line {
+	set mes [string map [array get replace] $mes]
+	set encoded [encoding convertfrom utf-8 $mes]
+	
+if {$black(anunthow) == "1"} {
+	puthelp "PRIVMSG $chan :\001ACTION \[$black(anuntshow:$chan)/$total_anunt\] [join $encoded]\001"
+} else { 
+	puthelp "PRIVMSG $chan :\[$black(anuntshow:$chan)/$total_anunt\] [join $encoded]"
+			}
+		}
+	}
+	file delete $temp_dir
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 314 - 0
BlackTools/Modules/BT.AutoBroadcast.tcl

@@ -0,0 +1,314 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   AUTOBROADCAST TCL   ##########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc broadcast:process {nick host hand chan chan1 who message number type} {
+global botnick black username
+	set cmd_status [btcmd:status $chan $hand "bt" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_message $message
+	set btnum 0
+	set lin 0
+	set temp_num 0
+	set sdir $black(status_file)
+if {$who == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
+		}
+	}
+	return
+}
+
+switch [string tolower $who] {
+
+on {
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.4 none
+	set type1 "broadcastpublic:show ON"
+	set file [open $black(status_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set who [lindex  [split $line] 0]
+	set stats [lindex [split $line] 1]]
+if {[string match -nocase "broadcastpublic:show" $who]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(status_file)
+	
+	set file [open $black(status_file) "a"]
+	puts $file "$type1"
+	close $file
+	set scan_time [time_return_minute $black(bttime)]
+	set black(broadcast:timer_start) $scan_time
+}
+
+off {
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.5 none
+	set file [open $black(status_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set who [lindex  [split $line] 0]
+	set stats [lindex [split $line] 1]]
+if {[string match -nocase "broadcastpublic:show" $who]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(status_file)
+	
+if {[info exists black(broadcast:timer_start)]} {
+	unset black(broadcast:timer_start)
+	}
+if {[info exists black(broadcast:counter)]} {
+	unset black(broadcast:counter)
+	}
+}
+
+add {
+if {$message == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
+		}
+	}
+	return
+}
+
+while {$temp_num == 0} {
+	set get [find:num $btnum "-" "AUTOBROADCAST"]
+if {$get == "$btnum"} {
+	set btnum [expr $btnum + 1]
+	} else { set temp_num 1 }
+}
+
+	set file [open $black(add_file) a]
+	set encoded [encoding convertto utf-8 $message]
+	puts $file "- AUTOBROADCAST $btnum $encoded"
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.6 $btnum
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.1 $show_message
+}
+
+list {
+	array set btlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+if {$data == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.8 none
+	return
+}
+foreach line $data {
+	set read_type [lindex [split $line] 1]
+if {[string equal -nocase $read_type "AUTOBROADCAST"]} {
+	set msg_num [lindex [split $line] 2]
+	set message [join [lrange [split $line] 3 end]]
+lappend btlist($msg_num) $message
+	}	
+}
+	set tempwrite [open $temp "w"]
+foreach msg [lsort -integer -increasing [array names btlist]] {
+	puts $tempwrite "$msg [join $btlist($msg)]"
+}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "autobroadcast" "0" $number
+}
+
+del {
+
+if {![regexp {^[0-9]} $number]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "bt"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "bt"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "bt"
+		}
+	}
+	return
+}
+	set ret [find:num $number "-" "AUTOBROADCAST"]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.2 $number
+	return
+}
+	set file [open $black(add_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set read_type [lindex [split $line] 1]
+if {[string equal $number $read_num] && [string equal $read_type "AUTOBROADCAST"]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+	blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.11 $number		
+		}
+	}
+}
+
+proc broadcast:check {} {
+	global black
+	set file [open $black(status_file) r]
+	set size [file size $black(status_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set broadcast_act 0
+if {$data != ""} {
+foreach line $data {
+	set type [lindex [split $line] 0]
+	set stats [lindex [split $line] 1]
+if {[string equal -nocase $type "broadcastpublic:show"] && [string equal -nocase $stats "ON"]} {
+	set broadcast_act 1
+			}
+		}
+	}
+	return $broadcast_act
+}
+
+proc broadcastpublic:show {} {
+global black
+if {![info exists black(broadcast:count)]} {
+	set black(broadcast:count) 0
+}
+	set channels ""
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set tempwrite [open $temp w]
+foreach line $data {
+	set read_type [lindex [split $line] 1]
+if {[string equal $read_type "AUTOBROADCAST"]} { 
+	set read_message [lrange [split $line] 3 end]
+	puts $tempwrite $read_message
+	}
+}
+	close $tempwrite	
+
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	
+if {$data != ""} {
+	set line [lindex $data $black(broadcast:count)]
+	
+if {$line == ""} {
+	set black(broadcast:count) 0
+	set line [lindex $data $black(broadcast:count)]
+}
+	set black(broadcast:count) [expr $black(broadcast:count) +1]
+	
+foreach chan [channels] {
+if {[validchan $chan] && [isdynamic $chan] && (![setting:get $chan silent])} {
+	lappend channels $chan
+			}
+		}
+	} else { file delete $temp }
+	file delete $temp
+if {$channels != "" && $line != ""} {
+		broadcast:act $channels 0 $line
+	}
+}
+
+proc broadcast:act {channels counter line} {
+	global black
+	set split_line [split $line "~"]
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+	set notshow 0
+if {$chan != ""} {
+if {[info exists black(lastaction:$chan)]} {
+	set unixtime [unixtime]
+	set return_time [time_return_minute $black(bttime)]
+	set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
+if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
+	set notshow 1
+	}
+} else { set notshow 1 }
+if {$notshow == "0"} {
+foreach mes $split_line {
+	set message [join [lrange [split $mes] 0 end]]
+	set encoded [encoding convertfrom utf-8 $message]
+if {$black(bthow) == "1"} {
+	puthelp "PRIVMSG $chan :\001ACTION \[AUTO\] [join $encoded]\001"
+} else { 
+	puthelp "PRIVMSG $chan :\[AUTO\] [join $encoded]"
+			}
+		}
+	}
+}
+if {[lindex $channels $cc] == ""} {
+	return 
+	} else {
+	utimer 5 [list broadcast:act $channels $cc $line]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 643 - 0
BlackTools/Modules/BT.BadChan.tcl

@@ -0,0 +1,643 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   BADCHAN TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badchan:getlist {nick host hand chan chan1 type next} {
+	global black
+	set userlang [getuser $hand XTRA OUTPUT_LANG]
+if {$userlang == ""} { set userlang "[string tolower $black(default_lang)]" }
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/badchan_temp.$timestamp"
+	array set badchanlist [list]
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "BADCHAN"]} {
+	set msg_num [lindex [split $line] 2]
+	set bdchan [lindex [split $line] 3]
+if {[regexp {^[+]} $bdchan]} {
+	set text [black:color:set $hand $black(say.$userlang.gl.protexcept)]
+	lappend badchanlist($msg_num) [string map {"+" ""} $bdchan] \[$text\]	
+} else {
+	lappend badchanlist($msg_num) $bdchan
+		}
+	}
+}
+	set tempwrite [open $temp w]
+foreach msg [lsort -integer -increasing [array names badchanlist]] {
+	puts $tempwrite "$msg [join $badchanlist($msg)]"
+}
+	close $tempwrite
+	set file [open $temp r]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+if {[string equal -nocase $chan "GLOBAL"]} {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "badchan" "1" $next
+	} else {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "badchan" "0" $next
+	}
+}
+
+proc badchan:delchan {nick host hand chan chan1 number} {
+	global black
+	
+if {![regexp {^[0-9]} $number]} {
+	if {$type == "0"} {	
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "badchan"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "badchan"	
+}
+	return
+}
+	set ret [find:num $number $chan "BADCHAN"]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.17 $number
+	return
+}
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/badchan_temp.$timestamp"
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set tempwrite [open $temp w]
+foreach line $data {
+if {$line != ""} {
+	set read_num [lindex [split $line] 2]
+	set read_chan [lindex [split $line] 0]
+	set read_type [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal $number $read_num] && [string equal -nocase $chan $enc_chan] && [string equal -nocase $read_type "BADCHAN"]} {
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+}
+	close $tempwrite
+    file rename -force $temp $black(add_file)
+if {[string equal -nocase $chan "GLOBAL"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.19 $number	
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.18 $number
+	}
+}
+
+proc badchan:process {nick host hand chan chan1 why bdchan type1 type reason} {
+	global botnick black
+	set cmd_status [btcmd:status $chan $hand "badchan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_bdchan $bdchan
+	set cmd "badchan"
+	set num 0
+	set temp_num 0
+	set gl 0
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+
+switch $why {
+	on {
+	setting:set $chan +antibadchan ""
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.6 none
+	if {[setting:get $chan badchan-scantime] != ""} {
+	set time [setting:get $chan badchan-scantime]
+		} else {
+	set time $black(badchan:scantime)
+		}
+	set scan_time [time_return_minute $time]
+	set black(badchan:$chan:timer_start) $scan_time
+}
+
+off {
+	setting:set $chan -antibadchan ""
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.8 none
+if {[info exists black(badchan:$chan:timer_start)]} {
+	unset black(badchan:$chan:timer_start)
+	}
+if {[info exists black(badchan:counter:$chan)]} {
+	unset black(badchan:counter:$chan)
+	}
+}
+
+add {
+if {![validchan $chan] && ![string equal -nocase $type "global"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![regexp {^[+&#]} $bdchan]} {
+switch $type1 {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "badchan"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "badchan"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "badchan"
+		}
+	}
+	return
+}
+	set findchan [prot:findbadchan $chan $bdchan]
+if {$findchan == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.1 $show_bdchan
+	return
+}
+
+if {$reason == ""} {
+	set reason "$black(say.$getlang.badchan.5)"
+}
+	set reason [join [encoding convertto utf-8 $reason]]
+if {[matchattr $hand mn] && [string equal -nocase $type "global"]} {
+	set findchan [prot:findbadchan "GLOBAL" $bdchan]
+if {$findchan == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.42 $show_bdchan
+	return
+}
+	while {$temp_num == 0} {
+	set get [find:num $num "GLOBAL" "BADCHAN"]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}	
+	set file [open $black(add_file) a]
+	puts $file "GLOBAL BADCHAN $num $bdchan $reason"
+	close $file
+	set gl 1
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.11  "$show_bdchan $num"
+	return
+} 
+	while {$temp_num == 0} {
+	set get [find:num $num $chan "BADCHAN"]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set encoded [encoding convertto utf-8 $bdchan]
+	set enc_chan [encoding convertto utf-8 $chan]
+	set file [open $black(add_file) a]
+	puts $file "$enc_chan BADCHAN $num $encoded $reason"
+	close $file
+	set gl 0
+if {[regexp {^[+]} $bdchan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.45  "[string map {"+" ""} $bdchan] $num"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 badchan.12  "$bdchan $num"
+	}
+}
+
+list {
+if {![validchan $chan] && ![string equal -nocase $bdchan "global"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {[string equal -nocase $bdchan "global"] && [matchattr $hand nm]} {
+	badchan:getlist $nick $host $hand "GLOBAL" $chan1 $type1 $type
+	return
+	}
+	badchan:getlist $nick $host $hand $chan $chan1 $type1 $bdchan
+}
+
+del {
+if {![validchan $chan] && ![string equal -nocase $type "global"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![regexp {^[0-9]} $bdchan]} {
+switch $type1 {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "badchan"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "badchan"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "badchan"
+		}
+	}
+	return
+}
+if {[string equal -nocase $type "global"] && [matchattr $hand nm]} {
+	badchan:delchan $nick $host $hand "GLOBAL" $chan1 $bdchan
+	return
+}
+	badchan:delchan $nick $host $hand $chan $chan1 $bdchan
+}
+
+default {
+switch $type1 {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "badchan"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "badchan"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "badchan"
+		}
+	}
+	return
+		}
+	}
+}
+
+proc prot:findbadchan {chan word} {
+	global black
+	set found_it 0
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+	set b [lindex [split $line] 3]
+	set enc_bchan [encoding convertfrom utf-8 $b]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "BADCHAN"] && [string equal -nocase $word $enc_bchan] && ![regexp {^[+]} $read_chan] && ![regexp {^[+]} $word]} {
+	set found_it 1
+		} elseif {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "BADCHAN"] && [string equal -nocase $word $enc_bchan] && [regexp {^[+]} $read_chan] && [regexp {^[+]} $word]} {
+	set found_it 1	
+		}
+	}
+	return $found_it
+}
+
+proc badchanpublic:join {nick host hand chan} {
+	global black
+	set ::bad_chan $chan
+if {![validchan $chan]} { return }
+if {[setting:get $chan antibadchan]} {
+if {[matchattr $hand $black(exceptflags) $chan]} {
+	return
+}
+if {[isbotnick $nick]} { return }
+if {(![botisop $chan]) && (![setting:get $chan xonly])} { return }
+	set getset [setting:get $chan badchan-floodcontrol]
+if {$getset == ""} { set getset $black(badchan:join:seconds) }
+	set num_control [scan $getset %\[^:\]]
+	set time_control [scan $getset %*\[^:\]:%s]
+if {[info exists black(floodcontrol:act:$chan)]} {
+	return
+}
+foreach tmr [utimers] {
+if {[string match "*badchan:joinflood:unset $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {![info exists black(badchan_floodcontrol:$chan)]} {
+	set black(badchan_floodcontrol:$chan) 0
+}
+	incr black(badchan_floodcontrol:$chan)
+	utimer $time_control [list badchan:joinflood:unset $chan]
+	
+if {$black(badchan_floodcontrol:$chan) >= "$num_control"} {
+	set black(floodcontrol:act:$chan) 1
+	utimer 30 [list badchan:joinflood:unset:act $chan]
+	return
+}
+	utimer 5 [list putserv "WHOIS $nick"]
+	bind RAW - 319 badchan:execute
+	}
+}
+
+proc badchan:joinflood:unset {chan} {
+	global black
+if {[info exists black(badchan_floodcontrol:$chan)]} {
+	unset black(badchan_floodcontrol:$chan)
+	}
+}
+
+proc badchan:joinflood:unset:act {chan} {
+	global black
+if {[info exists black(floodcontrol:act:$chan)]} {
+	unset black(floodcontrol:act:$chan)
+	}
+}
+
+proc badchan:scantimer {channels} {
+	global black
+	set badchanscan_list ""
+foreach chan $channels {
+if {[validchan $chan]} {
+foreach nick [chanlist $chan] {
+	set hand [nick2hand $nick]
+if {[isbotnick $nick]} { continue  }
+if {[matchattr $hand $black(exceptflags) $chan]} {
+	continue
+}
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { continue }
+	set position [lsearch -exact [string tolower $badchanscan_list] "[string tolower $nick]:[string tolower $chan]"]
+if {$position < 0} {
+	lappend badchanscan_list "$nick:$chan"
+				}
+			}
+		}	
+	}
+if {$badchanscan_list != ""} {
+	badchan:scan $badchanscan_list
+	}
+}
+
+proc badchan:scan {badchanlist} {
+	global black
+if {![info exists black(badchan:scan:counter)]} {
+	set black(badchan:scan:counter) 0 
+}
+	set person [lindex $badchanlist $black(badchan:scan:counter)]
+if {$person == ""} {
+	unset black(badchan:scan:counter)
+	return
+}
+	set black(badchan:scan:counter) [expr $black(badchan:scan:counter) + 1]
+	set split_person [split $person ":"]
+	set nick [lindex $split_person 0]
+	set channel [lindex $split_person 1]
+	set ::bad_chan $channel
+	putserv "WHOIS $nick"
+	bind RAW - 319 badchan:execute
+	utimer 10 [list badchan:scan $badchanlist]
+}
+
+proc badchan:execute {from keyword arguments } {
+global botnick badchan black
+	set chan $::bad_chan
+	set cmd "badchan"
+	set file_found 0
+	set chan1 $chan
+	set arguments [split $arguments]
+	set nick [string tolower [lindex $arguments 1]]
+	set show_nick [lindex $arguments 1]
+	set channels [string tolower [lrange $arguments 2 end]]
+	set text [join [check:badchan:except $channels $chan]]
+	set banmask [return_mask [return_host_num $cmd $chan [getchanhost $nick $chan]] [getchanhost $nick $chan] $nick]
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {![onchan $nick $chan]} {
+	return
+}
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set mainchan [lindex [split $line] 0]
+	set read_type [lindex [split $line] 1]
+if {([string equal -nocase $chan $mainchan] || [string equal -nocase "GLOBAL" $mainchan]) && [string equal -nocase $read_type "BADCHAN"]} {
+		set readchan [lindex [split $line] 3]
+		set encoded [encoding convertfrom utf-8 $readchan]
+foreach c $text {
+	set ch [string trimleft $c ":@+"]
+if {[string match -nocase $encoded $ch]} {
+	set file_found 1
+	set reason [lrange [split $line] 4 end]
+	set badchan($banmask:$chan) $reason
+	set badchan(channels:$banmask:$chan) $ch
+	break
+			}			
+		}
+	}
+}
+
+if {$file_found == "0"} {
+foreach defchan $black(badcchannels) {
+	set encoded [encoding convertfrom utf-8 $defchan]
+foreach c $text {
+	set ch [string trimleft $c ":@+"]
+	set ch [check:except $ch $chan $black(badcchannels) $black(exceptchannels) "BADCHAN"]
+if {[string match -nocase $encoded $ch]} {
+	set badchan(channels:$banmask:$chan) $ch
+	set badchan($banmask:$chan) $black(say.$getlang.badchan.5)
+	break
+			}
+		}
+	}
+}
+
+if {[info exists badchan($banmask:$chan)]} {
+if {[string equal -nocase $badchan($banmask:$chan) $black(say.$getlang.badchan.5)]} {
+if {[setting:get $chan badchan-reason] != ""} {
+	set getreason [join [setting:get $chan badchan-reason]]
+} else {
+	set getreason $black(say.$getlang.badchan.5)
+	}
+} else {
+	set getreason [join $badchan($banmask:$chan)]
+}
+	
+if {[info exists badchan(checkagain:$banmask:$chan)]} {
+if {[info exists badchan($banmask:$chan)]} {
+	blacktools:banner:2 $nick "BADCHAN,[encoding convertto utf-8 $badchan(channels:$banmask:$chan)]" $chan $chan1 [getchanhost $nick $chan] "0"
+	who:chan $chan
+if {[setting:get $chan showbadchan]} {
+	set replace(%nick%) $show_nick
+	set replace(%chans%) $badchan(channels:$banmask:$chan)
+	set mes [string map [array get replace] $black(say.$getlang.badchan.44)]
+	putserv "NOTICE @$chan :$mes"
+}
+	unset badchan(checkagain:$banmask:$chan)
+	unset badchan($banmask:$chan)
+	unset badchan(channels:$banmask:$chan)
+	return
+}
+	unset badchan(checkagain:$banmask:$chan)
+	return
+	}
+}
+if {[info exists badchan($banmask:$chan)]} {
+if {[setting:get $chan badchan-bmethod] == "0" || [setting:get $chan badchan-bmethod] == ""} {
+	set bmethod $black(badcbanmethod)
+} else { set bmethod [setting:get $chan badchan-bmethod] }
+if {$bmethod == "2"} {
+	blacktools:banner:2 $nick "BADCHAN,[encoding convertto utf-8 $badchan(channels:$banmask:$chan)]" $chan $chan1 [getchanhost $nick $chan] "0"
+	who:chan $chan
+if {[setting:get $chan showbadchan]} {
+	set replace(%nick%) $nick
+	set replace(%chans%) $badchan(channels:$banmask:$chan)
+	set text [black:color:set "" $black(say.$getlang.badchan.44)]
+	set text [join $text]
+	set mes [string map [array get replace] $text]
+	putserv "NOTICE @$chan :$mes"
+}
+	unset badchan($banmask:$chan)
+	unset badchan(channels:$banmask:$chan)
+	return
+}
+	set replace(%badchans%) [join $badchan(channels:$banmask:$chan) ", "]
+	set text [black:color:set "" $black(say.$getlang.badchan.40)]
+	set reply [join $text]
+if {[setting:get $chan badchan-banwait] == ""} {
+	set wait_time $black(badcbanwait)
+	utimer $black(badcbanwait) [list badchan:check:again $nick $chan]
+} else {
+	set wait_time [setting:get $chan badchan-banwait]
+	utimer $wait_time [list badchan:check:again $nick $chan]
+}
+	set replace(%time%) $wait_time
+	set message [string map [array get replace] $reply]
+	putquick "PRIVMSG $nick :\[$chan\] $message"
+	unset badchan($banmask:$chan)
+	unset badchan(channels:$banmask:$chan)
+	set badchan(checkagain:$banmask:$chan) 1
+} else {
+if {[info exists badchan(checkagain:$banmask:$chan]} {
+	unset badchan(checkagain:$banmask:$chan
+}
+if {[info exists badchan($banmask:$chan)]} {
+	unset badchan($banmask:$chan)
+}
+if {[info exists badchan(channels:$banmask:$chan)]} {
+	unset badchan(channels:$banmask:$chan)
+		}
+	}
+	unbind RAW - 319 badchan:execute
+}
+
+proc badchan:check:again {nick chan} {
+	global black badchan
+	putserv "WHOIS $nick"
+	set ::bad_chan $chan
+	bind RAW - 319 badchan:execute
+}
+
+proc badchan:nickchange {nick host hand chan newnick} { 
+	global badchan
+	set found_time 0
+	set current_time ""
+foreach tmr [utimers] {
+if {[string match -nocase "*badchan:check:again $nick $chan*" [join [lindex $tmr 1]]]} {
+	set current_time [get:timer:time $nick $chan]
+	set found_time 1
+killutimer [lindex $tmr 2]
+	}
+}
+if {$found_time == "1"} {
+	utimer $current_time [list badchan:check:again $newnick $chan] 
+	}
+}
+
+proc badchan:split {nick host hand chan args} {
+	global badchan	
+	badchan:part $nick $host $hand $chan "none"
+}
+
+proc badchan:kick {nick host hand chan kicked reason} {
+	global badchan
+	badchan:part $kicked $host $hand $chan "none"	
+}
+
+proc badchan:part {nick host hand chan arg} {
+	global badchan
+if {![validchan $chan]} { return }
+	set banmask *!*@[lindex [split [getchanhost $nick $chan] "@"] 1]	
+foreach tmr [utimers] {
+if {[string match -nocase "*badchan:check:again $nick $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {[info exists badchan(checkagain:$banmask:$chan)]} {
+	unset badchan(checkagain:$banmask:$chan)
+}
+
+if {[info exists badchan($banmask:$chan)]} {
+	unset badchan($banmask:$chan)
+}
+
+if {[info exists badchan(channels:$banmask:$chan)]} {
+	unset badchan(channels:$banmask:$chan)
+	}	
+}
+
+proc get:timer:time {nick chan} {
+	global black
+	set time_left 0
+foreach tmr [utimers] {
+if {[string match -nocase "*badchan:check:again $nick $chan*" [join [lindex $tmr 1]]]} {
+	set time_left [lindex $tmr 0]
+	}
+}
+	return $time_left
+}
+
+
+proc check:badchan:except {text chan} {
+	global black
+	set counter_word 0
+	set counter_except 0
+	set found_it 0
+foreach word $text {
+	set w [string trimleft $word ":@+"]
+foreach ex $black(exceptchannels) {
+if {[string match -nocase $ex $w] || [string match -nocase $w $ex]} {
+	set position [lsearch -exact [string tolower $text] [string tolower $word]]
+if {$position > -1} {
+	set text [lreplace $text $position $position]
+			}
+		}
+	}	
+}
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+if {$line != ""} {
+	set channel [lindex [split $line] 0]
+	set getype [lindex [split $line] 1]
+	set badchan [lindex [split $line] 3]
+if {[string equal -nocase "BADCHAN" $getype] && [regexp {^[+]} $badchan]} {
+if {[string equal -nocase $channel $chan] } {
+	set badchan [string map {"+" ""} $badchan]
+foreach word $text {
+	set w [string trimleft $word ":@+"]
+if {[string match -nocase $badchan $w] || [string match -nocase $w $badchan]} {
+	set position [lsearch -exact [string tolower $text] [string tolower $word]]
+if {$position > -1} {
+	set text [lreplace $text $position $position]
+						}
+					}
+				}
+			}
+		}
+	}
+}
+	return $text
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 176 - 0
BlackTools/Modules/BT.ChanLink.tcl

@@ -0,0 +1,176 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   CHANLINK TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc link:process {nick host hand chan chan1 type what channels delchan} {
+	global black
+	
+if {$what == ""} {
+		switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "link"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "link"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "link"
+		}
+	}
+}
+
+switch $what {
+
+list {
+	set return [link:show]
+if {$return == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.5 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.3 [join $return]
+}
+
+reset {
+	link:reset
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.2 none
+}
+
+all {
+	link:set $what
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.4 none
+}
+
+del {
+if {![validchan $delchan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+	set return [link:del $delchan]
+if {$return == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.7 $delchan
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.8 $delchan
+	}
+}
+
+default {
+	set return [link:set $channels]
+	set split_return [split $return ":"]
+	set validchan [lindex $split_return 0]
+	set notvalid [lindex $split_return 1]
+if {$validchan != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.1 [join $validchan]
+	}
+if {$notvalid != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 chanlink.6 [join $notvalid]
+			}
+		}
+	}
+}
+
+proc link:show {} {
+	global black botnick
+	set return [link:get]
+if {$return == ""} {
+	return 0
+	}
+	return $return
+}
+
+proc link:set {channels} {
+	global black botnick
+	set validchan ""
+	set notvalid ""
+if {[string equal -nocase $channels "all"]} {
+	foreach chan [channels] {
+if {[setting:get $chan chanlink] == "0"} {
+	setting:set $chan +chanlink ""
+		}
+	}
+	return 1
+}
+foreach chan $channels {
+if {[validchan $chan]} {
+	lappend validchan $chan
+if {[setting:get $chan chanlink] == "0"} {
+	setting:set $chan +chanlink ""
+		}
+	} else {
+	lappend notvalid $chan
+	}
+}
+	return "$validchan:$notvalid"
+}
+
+proc link:reset {} {
+	global black botnick
+	foreach chan [channels] {
+if {[setting:get $chan chanlink]} {
+	setting:set $chan -chanlink ""
+		}
+	}
+}
+
+proc link:del {chan} {
+	global black
+if {[setting:get $chan chanlink]} {
+	setting:set $chan -chanlink ""
+	return 1
+	} else {	
+	return 0
+	}
+}
+
+proc link:get {} {
+	global black botnick
+	set channels ""
+foreach chan [channels] {
+if {[setting:get $chan chanlink]} {
+	lappend channels $chan
+		}
+	}
+	return $channels
+}
+
+proc link:status {chan} {
+	global black
+if {[setting:get $chan chanlink]} {
+	return 1
+	} else {
+	return 0
+	}
+}
+
+proc link:chan:get {readchan} {
+	global black
+	set channels ""
+	set readchan [string tolower $readchan]
+if {[setting:get $readchan chanlink] == "0"} {
+	return ""
+}
+	foreach chan [string tolower [channels]] {
+if {[setting:get $chan chanlink]} {	
+if {$readchan != $chan} {
+	lappend channels $chan
+			}
+		}
+	}
+	return $channels
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 131 - 0
BlackTools/Modules/BT.CloneScan.tcl

@@ -0,0 +1,131 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   CLONESCAN TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc scanner:process {nick host hand chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "clonescan" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	array set clones [list]
+	if {$chan == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "clonescan"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "clonescan"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "clonescan"
+		}
+	}
+	return 0
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 clonescan.11 none
+	clonescan:act $chan $nick $hand $chan1 $type 0
+}
+
+proc clonescan:timer {chans} {
+	global black
+	set type 1
+foreach chan $chans {
+if {[validchan $chan]} {
+	lappend channels $chan
+		}
+	}
+if {$channels != ""} {
+	clonescan:act $channels "nick" "" "chan1" $type 0
+	}
+}
+
+proc clonescan:act {channels nick hand chan1 type counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+	set found_clones 0
+	set found_mask ""
+	set theclones ""
+	array set clones [list]
+if {$chan != ""} {
+	set replace(%chan%) $chan
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[setting:get $chan clonescan-maxclone] == "0" || [setting:get $chan clonescan-maxclone] == ""} {
+	set maxclone $black(maxclone)
+} else { set maxclone [setting:get $chan clonescan-maxclone] }
+if {$maxclone < "2"} { return }
+foreach user [chanlist $chan] {
+	set host [string tolower [lindex [split [getchanhost $user $chan] @] 1]]
+	set findword [prot:findword $chan "CLONESCAN-EXCEPT" $host]
+if {$findword == "1"} {
+	continue
+}
+if {[string match "*undernet.org*" $host]} {
+	continue
+}
+
+	set replace(%host%) $host
+	lappend clones($host) $user
+}
+foreach clone [array names clones] {
+	set userlist [join $clones($clone)]
+if {[llength [split $userlist]] >= $maxclone} {
+	set found_clones 1
+	lappend found_mask $clone
+	lappend theclones $clones($clone)
+if {$type == "0"} {
+	blacktools:tell $nick "" $hand $chan $chan1 clonescan.10 "[llength [split $userlist]] $clone [join $clones($clone) ", "]"
+		}
+	}
+}
+if {$found_clones == "1"} {
+if {$type == "1"} {
+	set replace(%msg.1%) [llength [split $theclones]]
+	set replace(%msg.2%) $found_mask
+	set replace(%msg.7%) [join $theclones " ,"]
+	set replace(%chan%) $chan
+	set text [black:color:set "" $black(say.$getlang.clonescan.10)]
+	set message [string map [array get replace] $text]
+	putserv "NOTICE @$chan :$message"
+foreach m $found_mask {
+	set mask "*!*@$m"
+	blacktools:banner:2 $nick "CLONESCAN" $chan $chan1 $mask "0"
+}
+	who:chan $chan
+		}
+	}
+}
+if {([lindex $channels $cc] != "") && ($type == "1")} {
+	utimer 5 [list clonescan:act $channels $nick $hand $chan1 $type $cc]
+		}
+if {($type == "0") && ($found_clones == "0")} {
+	blacktools:tell $nick "" $hand $chan $chan1 clonescan.2 none
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 398 - 0
BlackTools/Modules/BT.Egg.tcl

@@ -0,0 +1,398 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##############################   EGG TCL   ##############################
+#########################################################################
+##						                       						   ##
+##   BlackTools  : http://blacktools.tclscripts.net	               	   ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               	   ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               					   ##
+#########################################################################
+
+proc egg:setting_check {setting} {
+	global black
+	set settings "nick realname away homechan chanserv hostchanserv userlogin userpass chanremove-setting add-mask add-defaultmask user-expire banmethod-expire broadcast-showtime cmdchar defaultlang defaultoutput floodmenuprot userfloodmsgprot massfloodmsgprot massfloodsilencetime floodnotcprot pagelimit"
+if {[lsearch -exact [string tolower $settings] [string tolower $setting]] < 0} {
+	return 0
+	} else { return 1 }
+}
+
+proc egg:process {unick host hand chan chan1 setting result} {
+	global black config nick botnick
+	set tcl_config $black(tclconfig)
+	
+switch [string tolower $setting] {
+
+nick {
+	set result [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set return [config:getinfo $config "set nick \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set ::lastnick [config:getinfo $config "set nick \"*\""]
+	set error [config:save $config "set nick \"*\"" "set nick \"$result\""]
+	set result [string map [list {\[} \[ {\]} \] {\?} \? {\\} \\] $result]
+	set nick [join $result]
+if {$error == "0"} {
+	return 0
+}
+	bind RAW - 432 check:validnickname
+	return 1
+}
+
+realname {
+	set result [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set return [config:getinfo $config "set realname \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $config "set realname \"*\"" "set realname \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+homechan {
+	set result [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set return [config:getinfo $tcl_config "set black(homechan) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(homechan) \"*\"" "set black(homechan) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+chanserv {
+	set return [config:getinfo $tcl_config "set black(chanserv) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(chanserv) \"*\"" "set black(chanserv) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+hostchanserv {
+	set return [config:getinfo $tcl_config "set black(hostchanserv) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(hostchanserv) \"*\"" "set black(hostchanserv) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+userlogin {
+	set result [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set return [config:getinfo $tcl_config "set black(username) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(username) \"*\"" "set black(username) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+userpass {
+	set result [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set return [config:getinfo $tcl_config "set black(password) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(password) \"*\"" "set black(password) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+add-defaultmask {
+	set return [config:getinfo $tcl_config "set black(hostadd) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(hostadd) \"*\"" "set black(hostadd) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash 
+	return 1
+}
+
+broadcast-showtime {
+	set return [config:getinfo $tcl_config "set black(bttime) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(bttime) \"*\"" "set black(bttime) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash 
+	return 1
+if {[info exists black(broadcast:timer_start)]} {
+	set scan_time [time_return_minute $result]
+	set black(broadcast:timer_start) $scan_time
+	}
+if {[info exists black(broadcast:counter)]} {
+	set black(broadcast:counter) 0
+	}
+}
+
+user-expire {
+	set return [config:getinfo $tcl_config "set black(user_expire_time) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(user_expire_time) \"*\"" "set black(user_expire_time) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash
+	return 1
+}
+
+banmethod-expire {
+	set return [config:getinfo $tcl_config "set black(banmethod_memory_time) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(banmethod_memory_time) \"*\"" "set black(banmethod_memory_time) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+if {[info exists black(banmethod_rem:timer_start)]} {
+	set black(banmethod_rem:timer_start) [time_return_minute $result]
+}
+if {[info exists black(banmethod_rem:counter)]} {
+	set black(banmethod_rem:counter) 0
+}
+	rehash
+	return 1
+}
+
+cmdchar {
+	set return [config:getinfo $tcl_config "set black(cmdchar) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(cmdchar) \"*\"" "set black(cmdchar) \"$result\""]
+if {$error == "0"} {
+	return 0 
+	}
+	rehash
+	return 1
+}
+
+defaultlang {
+	set return [config:getinfo $tcl_config "set black(default_lang) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set found_lang 0
+	set get_lang_files [glob -directory "$black(dirname)/BlackTools/lang" "*lang.tcl"]
+foreach lang $get_lang_files {
+	set split_lang [split $lang "."]
+	set the_lang [lindex $split_lang 1]
+if {[string equal -nocase $result $the_lang]} {
+	set found_lang 1
+	}
+}
+if {$found_lang == 0} {
+	blacktools:tell $unick $host $hand $chan $chan1 egg.5 "defaultlang $result"
+	return
+}
+	set error [config:save $tcl_config "set black(default_lang) \"*\"" "set black(default_lang) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash
+	return 1
+}
+
+defaultoutput {
+	set return [config:getinfo $tcl_config "set black(default_output) \"*\""]
+switch $return {
+	0 {
+if {[string equal -nocase $result "notice"]} {
+	return 2
+}	
+	}
+		
+	1 {
+if {[string equal -nocase $result "chan"]} {
+	return 2
+}			
+	}
+		
+	2 {
+if {[string equal -nocase $result "msg"]} {
+	return 2
+		}	
+	}
+}
+	set error ""
+switch [string tolower $result] {
+	notice {
+	set error [config:save $tcl_config "set black(default_output) \"*\"" "set black(default_output) \"0\""]
+}
+	chan {
+	set error [config:save $tcl_config "set black(default_output) \"*\"" "set black(default_output) \"1\""]
+}
+
+	msg {
+	set error [config:save $tcl_config "set black(default_output) \"*\"" "set black(default_output) \"2\""]
+}
+	default {
+	return 0
+	}
+}
+	
+if {$error == "0"} {
+	return 0
+	}
+	rehash 
+	return 1
+}
+
+floodmenuprot {
+	set return [config:getinfo $tcl_config "set black(antiflood:cmd) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(antiflood:cmd) \"*\"" "set black(antiflood:cmd) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+userfloodmsgprot {
+	set return [config:getinfo $tcl_config "set black(msg:flood) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(msg:flood) \"*\"" "set black(msg:flood) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+massfloodmsgprot {
+	set return [config:getinfo $tcl_config "set black(mass:msg:flood) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(mass:msg:flood) \"*\"" "set black(mass:msg:flood) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+massfloodsilencetime {
+	set return [config:getinfo $tcl_config "set black(mass:msg:silence_time) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(mass:msg:silence_time) \"*\"" "set black(mass:msg:silence_time) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+floodnotcprot {
+	set return [config:getinfo $tcl_config "set black(notice:flood) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(notice:flood) \"*\"" "set black(notice:flood) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+pagelimit {
+	set return [config:getinfo $tcl_config "set black(modul:nr:entries) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set error [config:save $tcl_config "set black(modul:nr:entries) \"*\"" "set black(modul:nr:entries) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	return 1
+}
+
+away {
+	set return [config:getinfo $tcl_config "set black(default_away) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+	set result [string map [list \" {\"} \[ {\[} \] {\]} \? {\?} \\ {\\}] $result]
+	set error [config:save $tcl_config "set black(default_away) \"*\"" "set black(default_away) \"$result\""]
+if {$error == "0"} {
+	return 0
+}
+	set result [string map [list {\[} \[ {\]} \] {\?} \? {\\} \\] $result]
+	putserv "AWAY :"
+	putserv "AWAY :$result"
+	return 1
+}
+
+chanremove-setting {
+	set return [config:getinfo $tcl_config "set black(chanremove_all) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+if {![regexp {^[12]} $result]} {
+	return 0
+}
+	set error [config:save $tcl_config "set black(chanremove_all) \"*\"" "set black(chanremove_all) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash
+	return 1
+}
+
+add-mask {
+	set return [config:getinfo $tcl_config "set black(hostdefaultadd) \"*\""]
+if {[string equal -nocase $return $result]} {
+	return 2
+}
+if {![regexp {^[12345]} $result]} {
+	return 0
+}
+	set error [config:save $tcl_config "set black(hostdefaultadd) \"*\"" "set black(hostdefaultadd) \"$result\""]
+if {$error == "0"} {
+	return 0
+	}
+	rehash
+	return 1
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 323 - 0
BlackTools/Modules/BT.Gag.tcl

@@ -0,0 +1,323 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   GAG TCL   ###############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc gag:process {gagger time reason nick hand host chan chan1 type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "gag" 0]
+if {$cmd_status == "1"} {
+	return 
+}	
+	set split_hand [split $hand ":"]
+	set gethand [lindex $split_hand 0]
+	set getlang [string tolower [setting:get $chan lang]]
+	set return_time [time_return_minute $time]
+	set counter 0
+	set num 0
+	set temp_num 0
+	set cmd "gag"
+	set show_gagger $gagger
+	set show_reason $reason
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set handle [nick2hand $gagger]
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$gagger == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
+		}
+	}
+	return 0
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+if {[matchattr $handle $black(exceptflags) $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
+	return
+}
+
+if {[isbotnick $gagger]} {
+	return
+}
+
+if {![botisop $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
+	return
+}
+
+if {[isop $gagger $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.hasop none
+	return
+}
+if {[onchan $gagger $chan]} {
+    set mask [return_mask [return_host_num $cmd $chan [getchanhost $gagger $chan]] [getchanhost $gagger $chan] $gagger] 
+} else { 
+	set mask ""
+}
+
+if {[blacktools:isban $mask $chan] == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gag.4 $show_gagger
+	return
+}
+if {[blacktools:isgag $mask $chan] == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gag.3 $show_gagger
+	return
+}
+
+if {[string equal -nocase $gagger "-list"]} {
+foreach b [blacktools:gaglist $chan] {
+	set bhost [lindex [split $b] 2]
+	set counter [expr $counter + 1]
+	set mask [lindex [split $b] 2]
+	set expire [lindex [split $b] 4]
+	set created [lindex [split $b] 5]
+	set created [clock format $created -format %D-%H:%M:%S]
+	set breason [lrange [split $b] 8 end]
+	set bywho [lindex [split $b] 3]
+	set split_bywho [split $bywho ":"]
+	set handle [lindex [split $split_bywho] 0]
+	set type [lindex [split $split_bywho] 1]
+	set bywho "$handle\([string toupper $type]\)"
+if {$type != ""} {
+	set bywho "$handle\([string toupper $type]\)"
+} else { set bywho $handle }
+	set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
+	blacktools:tell $nick $host $hand $chan $chan1 sb.4 "$mask $bywho $created $expire $breason"
+	}
+	blacktools:tell $nick $host $hand $chan $chan1 gag.2 none
+	return
+}
+	set split_hand [split $hand ":"]
+	set handle [lindex $split_hand 0]
+	set type [lindex $split_hand 1]
+if {($return_time > "20160" || $return_time == "0")  && [matchattr $handle -|OS $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gag.7 none
+	return
+}
+
+if {$return_time == "-1"} {
+	set return_time $black(gag_time)
+}
+	set return_time [time_return_minute $return_time]
+	
+if {$mask == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
+	return
+}
+
+if {$show_reason == ""} {
+	set getreason [setting:get $chan gag-reason]
+if {$getreason == ""} {
+	set show_reason $black(say.$getlang.gag.6)
+	} else {
+	set show_reason $getreason
+	}
+}
+
+if {[isvoice $gagger $chan]} {
+	pushmode $chan -v $gagger
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set replace(%chan%) $chan
+	set replace(%time%) [return_time $getlang [expr [expr [unixtime] + [expr $return_time * 60]] - [unixtime]]]
+	set replace(%gagger%) $gagger
+	set text1 [black:color:set "" $black(say.$getlang.gag.10)]
+	set text2 [black:color:set "" $black(say.$getlang.gag.11)]
+	set reply1 [join $text1]
+	set reply2 [join $text2]
+	set gag_user_message [string map [array get replace] $reply1]
+	set gag_chan_message [string map [array get replace] $reply2]
+	putserv "PRIVMSG $chan :$gag_chan_message"
+	putserv "PRIVMSG $gagger :$gag_user_message"
+	pushmode $chan +b $mask
+	set num [blacktools:ban:find_id]
+	blacktools:addban $nick $mask $hand $chan $chan1 $return_time "GAG" "0" "0" $show_reason "0" "" "" "" 0 $num
+
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan == ""} { 
+	return
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+	return
+}
+	set bantime [time_return_minute $return_time]
+	set bantime [expr $bantime * 60]
+	set expire [return_time_2 $getlang $bantime]
+if {$reason == ""} { set reason "N/A" }	
+	set replace(%banmask%) $mask
+	set replace(%bantime%) $expire
+	set replace(%reason%) $reason
+	set replace(%chan%) $chan
+	set replace(%nick%) $gethand
+	set text [black:color:set "" $black(say.$getlang.reportchan.2)]
+	set reply [join $text]
+	puthelp "PRIVMSG $backchan :[string map [array get replace] $reply]"
+}
+
+proc gag:part {nick host hand chan arg} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+	set uhost "$nick![getchanhost $nick $chan]"
+	gag:leave $nick $uhost $chan
+}
+
+proc gag:split {nick host hand chan args} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+	set uhost "$nick![getchanhost $nick $chan]"
+	gag:leave $nick $uhost $chan
+}
+
+proc gag:kick {nick host hand chan kicked reason} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+	set uhost "$kicked![getchanhost $kicked $chan]"
+	gag:leave $kicked $uhost $chan
+}
+
+proc gag:leave {nick host chan} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+	foreach g [blacktools:gaglist $chan] {
+	set read_host [lindex [split $g] 3]
+if {[string match -nocase $read_host $host]} {
+		pushmode $chan -b $read_host
+		}
+	}
+}
+
+################################# ungag ###############################
+
+proc ungag:process {gagger nick hand host chan chan1 type} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand "ungag" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set show_gagger $gagger
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {$gagger == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ungag"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ungag"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ungag"
+		}
+	}
+	return 0
+}
+
+if {![validchan $chan]} {
+	return
+}
+if {[onchan $gagger $chan]} {
+	 set mask [return_mask [return_host_num "gag" $chan [getchanhost $gagger $chan]] [getchanhost $gagger $chan] $gagger] 
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
+	return
+}
+
+if {[blacktools:isgag $mask $chan] == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 ungag.5 $show_gagger
+	return
+} else {
+	blacktools:delban $mask $chan "0" "1"
+if {[ischanban $mask $chan]} {
+	pushmode $chan -b $mask
+}
+	set replace(%chan%) $chan
+	set replace(%gagger%) $gagger
+	set textgagger [black:color:set "" $black(say.$getlang.ungag.7)]
+	set textchan [black:color:set "" $black(say.$getlang.ungag.8)]
+	set reply1 [join $textgagger]
+	set reply2 [join $textchan]
+	set ungag_user_message [string map [array get replace] $reply1]
+	set ungag_chan_message [string map [array get replace] $reply2]
+
+	putserv "PRIVMSG $gagger :$ungag_user_message"
+	putserv "PRIVMSG $chan :$ungag_chan_message"
+	set backchan [join [setting:get $chan backchan]]
+if {$backchan == ""} { 
+	return
+}
+if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
+	return
+}
+	set replace(%banmask%) $mask
+	set replace(%chan%) $chan
+	set replace(%nick%) $hand
+	set text [black:color:set "" $black(say.$getlang.reportchan.4)]
+	set reply [join $text]
+	puthelp "PRIVMSG $backchan :[string map [array get replace] $reply]"
+	}
+}
+
+proc gag:reban {nick host hand chan args} {
+global black
+	set bans [lindex $args 1]
+if {![botisop $chan]} { return }
+	set check_gag [blacktools:isgag $bans $chan]
+if {$check_gag == "1"} {
+foreach user [chanlist $chan] {
+	set gethost "$nick![getchanhost $user $chan]"
+if {[string match -nocase $gethost $bans] || [string match -nocase $bans $gethost]} {
+	pushmode $chan +b $bans
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 119 - 0
BlackTools/Modules/BT.GreetLeave.tcl

@@ -0,0 +1,119 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   GREET & LEAVE TCL   ##########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc greetpublic:join {nick host hand chan} {
+	global black
+if {[setting:get $chan greet]} {
+if {[isbotnick $nick]} { return }
+if {[info exists black(turnOnFlood:$chan)]} {
+	return
+}
+	set getgreet ""
+	set get_time [setting:get $chan jointime]
+if {$get_time == ""} { set jointime [unixtime] }
+	set replace(%nick%) $nick
+	set replace(%chan%) $chan
+	set replace(%countchan%) $chan
+	set replace(%count%) [setting:get $chan joincount]
+	set replace(%time%) [clock format $get_time -format %D-%H:%M:%S]
+	set greet_method [string toupper [setting:get $chan greet-method]]
+if {$greet_method == ""} {
+	set greet_method $black(greet:method)
+}
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $read_modul "greet"] && [string equal -nocase $chan $enc_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set getgreet [encoding convertfrom utf-8 $read_msg]
+	}
+}
+	close $file
+if {$getgreet != ""} {
+	set split_greet [split $getgreet "~"]
+	foreach line $split_greet {
+	set line [string map [array get replace] $line]
+if {$greet_method == "NOTICE"} {
+	putserv "NOTICE $nick :[join $line]"
+				} else { putserv "PRIVMSG $nick :[join $line]" }
+			}
+		}
+	}
+}
+
+proc leavepublic:part {nick host hand chan args} {
+	global black
+	set number [scan $black(leaveflood) %\[^:\]]
+	set time [scan $black(leaveflood) %*\[^:\]:%s]
+	if {[isbotnick $nick]} { return }
+if {[setting:get $chan leave]} {
+if {[isbotnick $nick]} { return }
+	set getleave ""
+foreach tmr [utimers] {
+if {[string match "*black(leaveflood:$chan)*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {[info exists black(leavestopped:$chan)]} {
+	return
+}
+
+if {![info exists black(leaveflood:$chan)]} { 
+	set black(leaveflood:$chan) 0 
+}
+	set black(leaveflood:$chan) [expr $black(leaveflood:$chan) + 1]
+	utimer $time [list unset black(leaveflood:$chan)]
+
+if {$black(leaveflood:$chan) >= $number} {
+	set black(leavestopped:$chan) 1
+	utimer 60 [list unset black(leavestopped:$chan)]
+	return
+}
+	set replace(%nick%) $nick
+	set replace(%chan%) $chan
+	set leave_method [string toupper [setting:get $chan leave-method]]
+if {$leave_method == ""} {
+	set leave_method "NOTICE"
+}
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $read_modul "leave"] && [string equal -nocase $chan $enc_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set getleave [encoding convertfrom utf-8 $read_msg]
+	}
+}
+	close $file
+if {$getleave != ""} {
+	set split_leave	[split $getleave "~"]
+	foreach line $split_leave {
+	set line [string map [array get replace] $line]
+if {$leave_method == "NOTICE"} {
+	putserv "NOTICE $nick :[join $line]"
+				} else { putserv "PRIVMSG $nick :[join $line]" }
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 221 - 0
BlackTools/Modules/BT.GuestNick.tcl

@@ -0,0 +1,221 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   GUESTNICK TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc guestnick:process {nick host hand chan chan1 who gnick type number modul} {
+	global black
+	set num 0
+	set temp_num 0
+	set cmd_status [btcmd:status $chan $hand "guestnick" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul
+	return
+}
+
+switch $who {
+
+	on {
+	setting:set $chan +guestnick ""
+	blacktools:tell $nick $host $hand $chan $chan1 guestnick.1 none
+}
+	off {
+	setting:set $chan -guestnick ""
+	blacktools:tell $nick $host $hand $chan $chan1 guestnick.2 none
+}
+	add {
+if {$gnick == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
+		}
+	}
+	return
+}
+
+	set findword [prot:findword $chan "GUESTNICK" $gnick]
+if {$findword == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.wordexists $gnick
+	return
+}
+
+while {$temp_num == 0} {
+	set get [find:num $num $chan "GUESTNICK"]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set file [open $black(add_file) a]
+	set enc_chan [encoding convertto utf-8 $chan]
+	puts $file "$enc_chan GUESTNICK $num $gnick"
+	close $file
+	blacktools:tell $nick $host $hand $chan $chan1 guestnick.3 "$gnick $num"
+}
+del {
+
+if {![regexp {^[0-9]} $number]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
+		}
+	}
+	return
+}
+	set ret [find:num $number $chan "GUESTNICK"]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 guestnick.5 $number
+	return
+}
+	set file [open $black(add_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/bt_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set read_type [lindex [split $line] 1]
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal $number $read_num] && [string equal $read_type "GUESTNICK"] && [string equal $enc_chan $chan]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(add_file)
+	blacktools:tell $nick $host $hand $chan $chan1 guestnick.4 $number		
+}
+
+list {
+	array set nicklist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/nick_temp.$timestamp"
+	set file [open $black(add_file) "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "GUESTNICK"]} {
+	set msg_num [lindex [split $line] 2]
+	set message [lrange [split $line] 3 end]
+lappend nicklist($msg_num) $message
+	}
+}
+	set tempwrite [open $temp w]
+foreach msg [lsort -integer -increasing [array names nicklist]] {
+	puts $tempwrite "$msg [join $nicklist($msg)]"
+	}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "guestnick" "0" $number
+		}
+default {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
+				}
+			}
+		}		
+	}	
+}
+
+proc guestnick:module {nick host hand chan} {
+	global black
+if {![validchan $chan]} {
+		return
+}
+if {[setting:get $chan guestnick]} {
+if {[info exists black(turnOnFlood:$chan)]} {
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set method [setting:get $chan guestnick-msgmethod]
+if {$method == ""} {
+	set method $black(guestnick:msgmethod)
+}
+	set file [open $black(add_file) r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_type [lindex [split $line] 1]
+	set read_msg [lrange [split $line] 3 end]
+if {[string equal -nocase $read_chan $chan] && [string equal -nocase $read_type "GUESTNICK"] && [string match -nocase $read_msg $nick]} {
+	set replace(%nick%) $nick
+	set replace(%chan%) $chan
+	set message [setting:get $chan guestnick-message]
+if {$message == ""} {
+	set message $black(say.$getlang.guestnick.10)
+}
+	set text [black:color:set "" $message]
+	set reply [join $text]
+	set message [string map [array get replace] $reply]
+	switch [string tolower $method] {
+	chan {
+	putserv "PRIVMSG $chan :$message"
+	}	
+	privmsg {
+	putserv "PRIVMSG $nick :$message"
+	}
+	notice {
+	putserv "NOTICE $nick :$message"
+	}
+				}
+			}
+		}
+	close $file
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 309 - 0
BlackTools/Modules/BT.Idle.tcl

@@ -0,0 +1,309 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   IDLE TCL   ##############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antidle:process {why type user host nick hand chan chan1} {
+global botnick black
+	set show_user $user
+	set flag "-|+f"
+	set handle [nick2hand $user]
+if {[matchattr $hand q]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {($why == "") && ($type == "0")} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
+	return
+}
+if {($why == "") && ($type == "1")} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
+	return
+}
+if {($why == "") && ($type == "2")} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "idle"
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+
+switch [string tolower $why] {
+
++o {
+	antidle:set $chan
+	setting:set $chan +idleop ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.11 none
+}
+-o {
+	setting:set $chan -idleop ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.12 none
+	antidle:unset $chan
+}
+-ho {
+	setting:set $chan -idlehalfop ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.26 none
+	antidle:unset $chan
+}
++v {
+	antidle:set $chan
+	setting:set $chan +idlevoice ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.14 none
+}
++ho {
+	antidle:set $chan
+	setting:set $chan +idlehalfop ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.25 none
+}
+-v {
+	setting:set $chan -idlevoice ""
+	blacktools:tell $nick $host $hand $chan $chan1 idle.15 none
+	antidle:unset $chan
+}
+
+add {
+
+if {$user == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
+}
+	return
+}
+
+if {[onchan $user $chan]} {
+	set getuser [nick2hand $user]
+if {$getuser != "*"} {
+	set user $getuser
+	}
+}
+
+if {[validuser $user]} { 
+	chattr $user $flag $chan	
+	blacktools:tell $nick $host $hand $chan $chan1 idle.18 $show_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 "$show_user $uhost"
+	}
+}
+
+list {
+	set list [userlist "-|f" $chan]
+	blacktools:tell $nick $host $hand $chan $chan1 idle.20 "none"
+if {$list == ""} {set list "NONE"}
+	blacktools:tell $nick $host $hand $chan $chan1 idle.21 "$list"
+}
+
+del {
+
+if {$user == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
+}
+	return
+}
+
+if {[onchan $user $chan]} {
+	set getuser [nick2hand $user]
+if {$getuser != "*"} {
+	set user $getuser
+	}
+}
+
+if {![validuser $user]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 idle.22 "$show_user"
+	return
+}
+
+if {![matchattr $user "-|f" $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 idle.23 "$show_user"
+	return
+}
+	chattr $user -|-f $chan
+	blacktools:tell $nick $host $hand $chan $chan1 idle.24 "$show_user"
+}
+
+default {
+	
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
+	return
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
+			}
+		}
+	}
+}
+
+proc antidle:unset {chan} {
+	global black
+	set idle_activ 0
+	set options {idleop idlevoice idlehalfop}
+foreach option $options {
+	if {[setting:get $chan $option]} {
+	set idle_activ 1
+	}
+}
+if {$idle_activ == "0"} {
+if {[info exists black(idle:$chan:timer_start)]} {
+	unset black(idle:$chan:timer_start)
+			}
+if {[info exists black(idle:counter:$chan)]} {
+	unset black(idle:counter:$chan)
+		}
+	}	
+}
+
+proc antidle:set {chan} {
+	global black
+	set idle_activ 0
+	set options {idleop idlevoice idlehalfop}
+foreach option $options {
+	if {[setting:get $chan $option]} {
+	set idle_activ 1
+	}
+}
+
+if {$idle_activ == "0"} {
+if {[setting:get $chan idle-scantime] != ""} {
+	set time [setting:get $chan idle-scantime]
+		} else {
+	set time $black(idleinterval)
+		}
+	set scan_time [time_return_minute $time]
+	set black(idle:$chan:timer_start) $scan_time
+	}
+}
+
+proc antidle:module {chans} {
+	global black
+	set channels ""
+foreach chan $chans {
+if {[validchan $chan]} {
+	lappend channels $chan
+		}
+	}
+if {$channels != ""} {
+	idlewhois $channels 0
+	}
+}
+
+proc idlewhois {channels counter} {
+global black botnick
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	black:check:idle $chan
+	utimer 30 [list idlewhois $channels $cc] 
+} else {
+	return
+	}
+}
+
+proc black:check:idle {chan} {
+	global black
+	set ::idle_chan $chan
+foreach user [chanlist $chan] {
+	set handle [nick2hand $user]
+if {[isop $user $chan] || [isvoice $user $chan] || [ishalfop $user $chan]} {
+if {![isbotnick $user]} { 
+	putserv "WHOIS $user $user"
+				}
+			}
+		}
+	bind raw - 317 idleprocespublic
+}
+
+proc idleprocespublic {nick int arg} {
+global black
+	set nick [string tolower [lindex [split $arg] 1]]
+	set handle [nick2hand $nick]
+	set idler [string tolower [lindex [split $arg] 2]]
+	set minutesidle [expr $idler / 60]
+	set chan $::idle_chan
+if {[onchan $nick $chan]} {
+	set idlevoicetime [setting:get $chan idlevoicemax]
+if {$idlevoicetime == ""} { set idlevoicetime "$black(idlevoicemax)" }
+	set idleoptime [setting:get $chan idleopmax]
+if {$idleoptime == ""} { set idleoptime "$black(idleopmax)" }
+	set idlehalfoptime [setting:get $chan idlehalfopmax]
+if {$idlehalfoptime == ""} { set idlehalfoptime "$black(idlehalfopmax)" }
+	set idlevoicetime [time_return_minute $idlevoicetime]
+	set idleoptime [time_return_minute $idleoptime]
+	set idlehalfoptime [time_return_minute $idlehalfoptime]
+if {![info exists black(voiceonmsg:$nick:$chan)]} {
+if {[setting:get $chan idlevoice]} {
+if {(![matchattr $handle "-|gf" $chan]) && [isvoice $nick $chan]} {
+if {$minutesidle > $idlevoicetime} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :devoice $chan $nick"
+} else {
+	pushmode $chan -v $nick
+			}
+		}
+	}
+}
+
+if {[setting:get $chan idleop]} {
+if {(![matchattr $handle "-|af" $chan]) && [isop $nick $chan]} {
+if {$minutesidle > $idleoptime} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :deop $chan $nick"
+} else {
+	pushmode $chan -o $nick
+						}
+					}
+				}
+			}
+if {[setting:get $chan idlehalfop]} {
+if {(![matchattr $handle "-|f" $chan]) && [ishalfop $nick $chan]} {
+if {$minutesidle > $idlehalfoptime} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	return
+} else {
+	pushmode $chan -h $nick
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 154 - 0
BlackTools/Modules/BT.Limit.tcl

@@ -0,0 +1,154 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   LIMIT TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc limit:process {nick host hand chan chan1 why lm type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "limit" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$why == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "limit"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "limit"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "limit"
+		}
+	}
+	return
+}
+
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![onchan $botnick $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
+	return
+}
+	set usersnum [llength [chanlist $chan]]
+	
+    switch $why {
+
+on {
+	set limt [setting:get $chan limit-default]
+	setting:set $chan +limit ""
+	blacktools:tell $nick $host $hand $chan $chan1 limit.5 none
+if {[regexp {^[0-9]} $limt] && ($limt != "0")} { 
+	putserv "MODE $chan +l [expr $usersnum + $limt]"
+} else {
+	putserv "MODE $chan +l [expr $usersnum + $black(limit:default)]"
+	setting:set $chan limit-default $black(limit:default)
+	blacktools:tell $nick $host $hand $chan $chan1 limit.6 $black(limit:default)
+	}
+	set black(limit:$chan:timer_start) 1
+}
+off {
+	setting:set $chan -limit ""
+	blacktools:tell $nick $host $hand $chan $chan1 limit.7 none
+	putquick "MODE $chan -l"
+if {[info exists black(limit:$chan:timer_start)]} {
+	unset black(limit:$chan:timer_start)
+	}
+}
+
+set {
+if {![regexp {^[0-9]} $lm]} {
+	if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "limit"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "limit"
+}
+	return
+}
+if {$lm < 2} { blacktools:tell $nick $host $hand $chan $chan1 limit.9 none
+	set lm [expr $lm + 1]
+	setting:set $chan limit-default 2
+	putserv "MODE $chan +l [expr $usersnum + $lm]"
+	blacktools:tell $nick $host $hand $chan $chan1 limit.10 none
+	return
+}
+if {$lm > 500} { blacktools:tell $nick $host $hand $chan $chan1 limit.11 none
+	return
+}
+	setting:set $chan limit-default $lm
+	blacktools:tell $nick $host $hand $chan $chan1 limit.12 $lm
+	putserv "MODE $chan +l [expr $usersnum + $lm]"
+		}
+	}
+}
+
+proc limit:timer {chans} {
+	global black
+		set channels ""
+foreach chan $chans {
+	lappend channels $chan
+	}
+if {$channels != ""} {
+	limit:act $channels 0
+	}
+}
+
+proc limit:act {channels counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	set usersnum [llength [chanlist $chan]]
+	set setnum [setting:get $chan limit-default]
+if {$setnum == "0" || $setnum == ""} { set setnum $black(limit:default) }
+	set limitcount [expr $usersnum + $setnum]
+if {![botisop $chan]} { return }
+	set chanmode [getchanmode $chan]
+if {[string match "*l*" "$chanmode"]} {
+	set lim [lindex $chanmode 1]
+if {$lim == $limitcount} {
+	if {[lindex $channels $cc] == ""} {
+	return
+	} else {
+	utimer 5 [list limit:act $channels $cc]
+	return
+		}
+	}
+} else { set lim "0" }
+if {$usersnum > $lim} { set dif [expr $usersnum - $lim] } else { set dif [expr $lim - $usersnum] }
+if {($dif >= $setnum) || ($dif <= $setnum)} {
+	puthelp "MODE $chan +l $limitcount"	
+	}
+}
+if {[lindex $channels $cc] == ""} {
+	return
+	} else {
+	utimer 5 [list limit:act $channels $cc]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 452 - 0
BlackTools/Modules/BT.Next.tcl

@@ -0,0 +1,452 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   NEXT TCL   ##############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc black:next:join {nick host hand chan} {
+		global black
+		set counter 0
+		set time [unixtime]
+		set handle [nick2hand $nick]
+		set lang [setting:get $chan lang]
+if {$lang == ""} { set lang [string tolower $black(default_lang)] }
+if {[setting:get $chan next]} {
+if {[matchattr $hand $black(exceptflags) $chan]} { 
+	pushmode $chan +v $nick
+	return
+}
+if {[string equal -nocase $nick $black(chanserv)]} {
+	return
+}
+if {[isbotnick $nick]} { 
+	black:next:joincheck $chan
+	return
+}
+if {[info exists black(next:$chan:list)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $nick]] == -1} {
+	set black(next:$chan:list) "$black(next:$chan:list) $nick"
+	set black(next:$chan:$nick:time) $time
+	} else {
+	set black(next:$chan:$nick:time) $time
+	}
+} else {
+	set black(next:$chan:list) $nick
+	set black(next:$chan:$nick:time) $time
+}
+	set counter [llength [split $black(next:$chan:list)]]
+	set replace(%counter%) $counter
+	set replace(%nick%) $nick
+	set replace(%chan%) $chan
+	set text1 [black:color:set "" $black(say.$lang.next.6)]
+	set reply1 [join $text1]
+	set text2 [black:color:set "" $black(say.$lang.next.1)]
+	set reply2 [join $text2]
+	set message [string map [array get replace] $reply1]
+	puthelp "NOTICE @$chan :$message"
+	set message [string map [array get replace] $reply2]
+	puthelp "NOTICE $nick :$message"
+	}
+}
+
+proc black:next:clear:all {nick chan mode} {
+	global black
+if {[info exists black(next:$chan:list)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:list)]] [string tolower $nick]]
+	set black(next:$chan:list) [join [lreplace [split $black(next:$chan:list)] $position $position]]
+	}
+}
+if {$mode == "0"} {
+if {[info exists black(next:$chan:served)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:served)]]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:served)]] [string tolower $nick]]
+	set black(next:$chan:served) [join [lreplace [split $black(next:$chan:served)] $position $position]]
+		}
+	}
+}
+
+if {[info exists black(next:$chan:$nick:time)]} {
+	unset black(next:$chan:$nick:time)
+}
+
+if {[info exists black(next:$chan:served)]} {
+if {$black(next:$chan:served) == ""} {
+	unset black(next:$chan:served)	
+		}	
+	}
+if {[info exists black(next:$chan:list)]} {
+if {$black(next:$chan:list) == ""} {
+	unset black(next:$chan:list)	
+		}	
+	}
+}
+
+proc black:next:clear {nick chan} {
+	global black
+if {[info exists black(next:$chan:list)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:list)]] [string tolower $nick]]
+	set black(next:$chan:list) [join [lreplace [split $black(next:$chan:list)] $position $position]]
+	}
+}
+if {[info exists black(next:$chan:$nick:time)]} {	
+	unset black(next:$chan:$nick:time)
+	}
+}
+
+proc black:next:joincheck {chan} {
+global black
+if {[info exists black(next:$chan:list)]} {
+foreach user $black(next:$chan:list) {
+if {(![onchan $user $chan]) || [isop $user $chan]} {
+	black:next:clear:all $user $chan 0
+			}
+		}
+	}
+}
+
+proc black:next:part {nick host hand chan arg} {
+	global black
+if {![validchan $chan]} { return }
+if {[setting:get $chan next]} {
+if {![info exists black(next:$chan:list)] && ![info exists black(next:$chan:served)]} {
+	return
+}
+	black:next:clear:all $nick $chan 0
+	}
+}
+
+proc black:next:sign {nick host hand chan arg} {
+	global black
+if {[setting:get $chan next]} {
+if {![info exists black(next:$chan:list)] && ![info exists black(next:$chan:served)]} {
+	return
+		}
+	black:next:clear:all $nick $chan 0
+	}
+}
+
+proc black:next:split {nick host hand chan args} {
+	global black
+if {[setting:get $chan next]} {
+if {![info exists black(next:$chan:list)] && ![info exists black(next:$chan:served)]} {
+	return
+		}
+	black:next:clear:all $nick $chan 0
+	}
+}
+
+proc black:next:kick {nick host hand chan kicked arg} {
+	global black
+if {[setting:get $chan next]} {
+if {![info exists black(next:$chan:list)] && ![info exists black(next:$chan:served)]} {
+	return
+		}
+	black:next:clear:all $kicked $chan 0
+	}
+}
+
+proc black:next:mode {nick host hand chan moded mod_nick} {
+	global black
+if {[setting:get $chan next]} {
+if {($moded == "+v") || ($moded == "+o")} {	
+if {![info exists black(next:$chan:list)] && ![info exists black(next:$chan:served)]} {
+	return
+			}
+	black:next:clear:all $mod_nick $chan 1
+		}
+	}
+}
+
+proc black:next:chnick {nick host hand chan newnick} {
+global black
+if {![validchan $chan]} {
+	return
+}
+if {[setting:get $chan next]} {
+if {[info exists black(next:$chan:served)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:served)]]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:served)]] [string tolower $nick]]
+	set black(next:$chan:served) [join [lreplace [split $black(next:$chan:served)] $position $position]]
+	set black(next:$chan:served) [linsert $black(next:$chan:served) $position $newnick]
+	} 
+}
+if {[info exists black(next:$chan:list)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $nick]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:list)]] [string tolower $nick]]
+	set black(next:$chan:list) [join [lreplace [split $black(next:$chan:list)] $position $position]]
+	set black(next:$chan:list) [linsert $black(next:$chan:list) $position $newnick]
+	set black(next:$chan:$newnick:time) $black(next:$chan:$nick:time)
+			}
+		}
+	}
+}
+
+proc nextpublic:process {nick host hand chan chan1 option} {
+	global black
+if {![setting:get $chan next]} {	
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "next" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {$option != ""} {
+
+switch -exact -- [string tolower $option] {
+
+list  {
+	set counter 0
+
+if {![info exists black(next:$chan:list)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+if {$black(next:$chan:list) == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 next.7 none
+foreach name [split $black(next:$chan:list)] {
+if {$name != ""} {
+	set get_hand [nick2hand $name]
+if {![matchattr $get_hand $black(exceptflags) $chan]} { 	
+	set counter [expr $counter + 1]
+	lappend field_name "\#$counter $name "
+		}
+	}
+}
+if {![info exists field_name]} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 next.9 [join $field_name]
+		}
+	}
+	return
+}
+
+if {![info exists black(next:$chan:list)]} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+
+if {[llength [split $black(next:$chan:list)]] < 0} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set current_nick [lindex [split [concat $black(next:$chan:list)]] 0]
+	set time [return_time $getlang [expr [unixtime] - $black(next:$chan:$current_nick:time)]]
+	set text1 [black:color:set "" $black(say.$getlang.next.2)]
+	set reply1 [join $text1]
+	set replace(%nick%) $nick
+	set message_1 [string map [array get replace] $reply1]
+	puthelp "NOTICE $current_nick :$message_1"
+	blacktools:tell $nick $host $hand $chan $chan1 next.3 "$current_nick $time"
+	black:next:clear $current_nick $chan
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan $current_nick"
+} else {
+	putserv "MODE $chan +v $current_nick"
+}
+	
+if {[info exists black(next:$chan:served)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:served)]] [string tolower $current_nick]] == -1} {
+	set black(next:$chan:served) "$black(next:$chan:served) $current_nick"
+			}	
+		} else {
+	set black(next:$chan:served) $current_nick
+	}
+}
+
+proc helpedpublic:process {nick host hand chan chan1 user type} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "helped" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set show_user [split $user]
+	set handle [nick2hand $user]
+	set entry_find 0
+if {![setting:get $chan next]} {
+	return
+}
+if {[isbotnick $user]} { return }
+
+if {[matchattr $handle $black(exceptflags) $chan]} { 
+	return
+}	
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "next"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "next"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "next"
+		}
+	}
+	return
+}
+if {![onchan $user $chan]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_user	
+	return
+}
+
+if {[info exists black(next:$chan:list)]} {
+if {([lsearch -exact [string tolower [split $black(next:$chan:list)]] [string tolower $user]] > -1)} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.13 $show_user
+	return
+	}	
+} 
+
+if {[info exists black(next:$chan:served)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:served)]]  [string tolower $user]] > -1} {
+	set entry_find 1
+	set position [lsearch -exact [string tolower [split $black(next:$chan:served)]] [string tolower $user]]
+	set black(next:$chan:served) [join [lreplace [split $black(next:$chan:served)] $position $position]]
+		}	
+	} else { 
+	blacktools:tell $nick $host $hand $chan $chan1 next.14 $show_user
+	return
+}
+if {$entry_find == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 next.14 $show_user
+	return
+}
+if {[isvoice $user $chan]} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :devoice $chan $user"
+} else {
+	putserv "MODE $chan -v $user"
+	}
+}
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set text1 [black:color:set "" $black(say.$getlang.next.4)]
+	set reply1 [join $text1]
+	set replace(%current%) $user
+	set replace(%chan%) $chan
+	set message_1 [string map [array get replace] $reply1]
+	puthelp "NOTICE $user :$message_1"
+}
+
+proc noidlepublic:process {nick host hand chan chan1 user type} {
+	global black
+if {![setting:get $chan next]} {
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "noidle" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set show_user $user
+	set handle [nick2hand $user]
+if {![setting:get $chan next]} {
+	return
+}	
+if {[isbotnick $user]} { return }
+
+if {[matchattr $handle $black(exceptflags) $chan]} { 
+	return
+}	
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "next"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "next"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "next"
+		}
+	}
+	return
+}
+
+if {![onchan $user $chan]} {
+	blacktools:tell:h $nick $host $hand $chan $chan1 gl.usernotonchan $user
+	return
+}
+
+if {[info exists black(next:$chan:list)]} {
+if {([lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $user]] > -1)} {
+	blacktools:tell:h $nick $host $hand $chan $chan1 next.13 $user
+	return
+	}	
+}
+if {[info exists black(next:$chan:served)]} {
+if {([lsearch -exact [string tolower [split $black(next:$chan:served)]] [string tolower $user]] > -1)} {
+	blacktools:tell:h $nick $host $hand $chan $chan1 next.17 $user
+	return
+	}
+}
+	blacktools:banner:2 $user "NEXT" $chan $chan1 [getchanhost $user $chan] "0"
+	who:chan $chan
+}
+
+proc skippublic:process {nick host hand chan chan1 user type} {
+	global black
+if {![setting:get $chan next]} {
+	return
+}
+	set cmd_status [btcmd:status $chan $hand "skip" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {$user == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "next"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "next"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "next"
+		}
+	}
+	return
+}
+
+if {![onchan $user $chan]} {
+	blacktools:tell:h $nick $host $hand $chan $chan1 gl.usernotonchan $user
+	return
+}
+
+if {[info exists black(next:$chan:list)]} {
+if {[lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $user]] > -1} {
+	set position [lsearch -exact [string tolower [split $black(next:$chan:list)]]  [string tolower $user]]
+	set black(next:$chan:list) [join [lreplace [split $black(next:$chan:list)] $position $position]]
+	set black(next:$chan:list) "$black(next:$chan:list) $user"
+	} else {
+	blacktools:tell:h $nick $host $hand $chan $chan1 next.14 $user
+	return
+}
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 next.8 none
+	return
+}
+	blacktools:tell:h $nick $host $hand $chan $chan1 next.19 $user
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 503 - 0
BlackTools/Modules/BT.Notes.tcl

@@ -0,0 +1,503 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   NOTES TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc note:process {nick host hand chan chan1 who note user_send note_send number type} {
+	global black botnick
+	set cmd_status [btcmd:status $chan $hand "note" 0]
+if {$cmd_status == "1"} { 
+	return 
+} 
+if {![setting:get $chan note] && ![matchattr $hand nmo]} {
+	return
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+switch $who {
+
+list {
+	set notes_total 0
+	array set listlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/list_temp.$timestamp"
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set handle [lindex [split $line] 4]
+	set readtype [lindex [split $line] 0]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $readtype "LIST"]} {
+	set notes_total [expr $notes_total + 1]
+	set num [lindex [split $line] 2]
+	set readnote [lrange [split $line] 6 end]
+if {[llength [lrange [split $line] 6 end]] > 7	} {
+	set readnote [lrange [split $line] 6 13]
+	set readnote "$readnote .."
+}
+	set encoded [encoding convertfrom utf-8 $readnote]
+	lappend listlist($num) [join "$encoded"]
+	}
+}
+	close $file
+	set tempwrite [open $temp w]
+foreach note [lsort -integer -increasing [array names listlist]] {
+	puts $tempwrite [join "$note $listlist($note)"]
+	}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+if {$notes_total == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.13 none
+	return
+}
+	blacktools:tell $nick $host $hand $chan $chan1 notes.14 "$notes_total"
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "noteslist" "0" $number
+}
+
+inbox {
+	set notes_read 0
+	set notes_total 0
+	set notes_unread ""
+	array set inboxlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/inbox_temp.$timestamp"
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set handle [lindex [split $line] 4]
+	set readtype [lindex [split $line] 0]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $readtype "INBOX"]} {
+	set notes_total [expr $notes_total + 1]
+	set num [lindex [split $line] 2]
+	set readnote [lrange [split $line] 7 end]
+	set readit [lindex [split $line] 3]
+if {$readit == "0"} {
+	set notes_read [expr $notes_read + 1]
+	lappend notes_unread $num
+}
+if {[llength $readnote] > 7	} {
+	set readnote [lrange [split $line] 7 14]
+	set readnote "$readnote .."
+}
+	set encoded [encoding convertfrom utf-8 $readnote]
+if {$readit == "0"} {
+	lappend inboxlist($num) "$black(say.$getlang.notes.10) $encoded"
+		} else {
+	lappend inboxlist($num) "$black(say.$getlang.notes.9) $encoded"
+		}
+	}
+}
+	close $file
+	set tempwrite [open $temp w]
+foreach note [lsort -integer -increasing [array names inboxlist]] {
+	puts $tempwrite [join "$note $inboxlist($note)"]
+	}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+if {$notes_unread != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.11 "$notes_read $notes_total $notes_unread"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.12 "$notes_read $notes_total"
+}
+if {$notes_total == "0"} {
+	return
+}
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "notesinbox" "0" $number
+}
+
+del {
+if {[string equal -nocase $number "all"]} {
+	set delall [notes:delall $hand]
+	blacktools:tell $nick $host $hand $chan $chan1 notes.15 none
+	return
+}
+	set status [notes:del $number $hand]
+if {$status == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.8 $number
+	} else { blacktools:tell $nick $host $hand $chan $chan1 notes.4 $number 
+	return
+	}
+}
+
+read {
+	if {![regexp {^[0-9]} $number]} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "note"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "note"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "note"
+		}
+	}
+	return
+}
+	set ret [find:note:num $number]
+	set found_note 0
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 notes.4 $number
+	return
+}
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set num [lindex [split $line] 2]
+	set handle [lindex [split $line] 4]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $number $num]} {
+	set found_note 1
+	set readtype [lindex [split $line] 0]
+	set time [lindex [split $line] 5]
+	set time [clock format $time -format %D]
+	set sender [lindex [split $line] 6]
+if {$readtype == "LIST"} {
+	set readnote [lrange [split $line] 6 end]
+} else {
+	set readnote [lrange [split $line] 7 end]
+}
+	continue
+	}
+}
+	close $file
+if {$found_note == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 notes.4 $number
+	return
+
+}
+	set split_note [split $readnote "~"]
+if {$readtype == "LIST"} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.5 "$number $readtype $time"
+foreach line $split_note {
+	set encoded [encoding convertfrom utf-8 $line]
+	set text [black:color:set $botnick $encoded]
+	blacktools:tell $nick $host $hand $chan $chan1 notes.6 "[join $text]"
+	}
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.7 "$number $readtype $sender $time"
+foreach line $split_note {
+	set encoded [encoding convertfrom utf-8 $line]
+	set text [black:color:set $botnick $encoded]
+	blacktools:tell $nick $host $hand $chan $chan1 notes.6 "[join $text]"
+		}
+	}
+	notes:read $number $hand
+}
+
+send {
+	set num_user 0
+	set sent_user 0
+	set invalid_user ""
+if {$user_send == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "note"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "note"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "note"
+		}
+	}
+	return
+}
+if {[llength [split $note_send]] == "0"} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "note"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "note"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "note"
+		}
+	}
+	return
+}
+	set split_usersend [split $user_send ","]
+foreach user $split_usersend {
+if {[onchan $user $chan] && ![validuser $user]} {
+	set user [nick2hand $user]
+}
+	set num_user [expr $num_user + 1]
+if {[validuser $user]} {
+	set nonotes [getuser $user XTRA NO_NOTES]
+if {$nonotes == ""} {
+	set sent_user [expr $sent_user + 1]
+	set black(notes:announce:$user) 1
+	set return [notes:add $nick $host $user "DB" "INBOX" $note_send $hand 0]
+	} else {
+	lappend invalid_user $user\($black(say.$getlang.notes.17)\)
+	}
+		} else {
+	lappend invalid_user $user
+		}
+	}
+if {$invalid_user == ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.2 "$sent_user $num_user"
+	} else {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.3 "$sent_user $num_user $invalid_user"
+	}
+}
+
+default {
+if {$who == ""} {
+	set notes_read 0
+	set notes_total 0
+	set notes_unread ""
+		array set inboxlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/inbox_temp.$timestamp"
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set handle [lindex [split $line] 4]
+	set readtype [lindex [split $line] 0]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $readtype "INBOX"]} {
+	set notes_total [expr $notes_total + 1]
+	set num [lindex [split $line] 2]
+	set readnote [lrange [split $line] 7 end]
+	set readit [lindex [split $line] 3]
+if {$readit == "0"} {
+	set notes_read [expr $notes_read + 1]
+	lappend notes_unread $num
+		}
+	}
+}
+	close $file
+if {$notes_unread != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.11 "$notes_read $notes_total $notes_unread"
+	blacktools:tell $nick $host $hand $chan $chan1 notesinbox.13 "none"
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.12 "$notes_read $notes_total"
+}
+	return
+}
+	set return [notes:add $nick $host $hand "DB" "LIST" $note "" 0]
+	blacktools:tell $nick $host $hand $chan $chan1 notes.1 $return
+		}
+	}
+}
+
+proc notes:del {num hand} {
+	global black
+	set found_it 0
+	set file [open $black(notes_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/notes_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set handle [lindex [split $line] 4]
+if {[string equal $num $read_num] && [string equal $handle $hand]} {
+	set found_it 1
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(notes_file)
+	
+	return $found_it
+}
+
+proc notes:delall {hand} {
+	global black
+	set found_it 0
+	set file [open $black(notes_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/notes_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set type [lindex [split $line] 0]
+	set handle [lindex [split $line] 4]
+if {[string equal $handle $hand] && [string equal $type "INBOX"]} {
+	set found_it [expr $found_it + 1]
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(notes_file)
+	return $found_it
+}
+
+proc notes:read {num hand} {
+	global black
+	set read_it 0
+	set file [open $black(notes_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/notes_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set handle [lindex [split $line] 4]
+	set read_type [lindex [split $line] 0]
+	set readit [lindex [split $line] 3]
+if {[string equal $num $read_num] && [string equal $handle $hand] && [string equal -nocase $read_type "INBOX"] && ($readit == "0")} {
+	set db [lindex [split $line] 1]
+	set readtype [lindex [split $line] 0]
+	set readnum [lindex [split $line] 2]
+	set read_it 1
+	set time [lindex [split $line] 5]
+	set readhandle [lindex [split $line] 4]
+	set readsender [lindex [split $line] 6]
+	set readnote [join [lrange [split $line] 7 end]]
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(notes_file)
+if {$read_it == "1"} {	
+	set file [open $black(notes_file) "a"]
+	puts $file "$readtype $db $readnum $read_it $readhandle $time $readsender $readnote"
+	close $file
+}
+	return $read_it
+}
+
+proc notes:add {nick host handle chan type note sender read} {
+	global black
+	set type [string toupper $type]
+	set temp_num 0
+	set num 0
+	set time [unixtime]
+	
+	while {$temp_num == 0} {
+	set get [find:note:num $num]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set file [open $black(notes_file) a]
+	set encoded [encoding convertto utf-8 $note]
+if {$type == "LIST"} {
+	puts $file "$type $chan $num $read $handle $time $encoded"
+}
+if {$type == "INBOX"} {
+	puts $file "$type $chan $num $read $handle $time $sender $encoded"
+}
+	close $file
+	return $num
+}
+
+proc notes:announce:pub {nick host hand chan arg} {
+	global black
+	set found_access 0
+	set hand [nick2hand $nick]
+foreach c [channels] {
+if {[matchattr $hand nmo|MAOV $c]} {
+	set found_access 1
+	}
+}
+if {$found_access == "1"} {
+
+if {[info exists black(notes:announce:$hand)]} {
+if {$black(notes:announce:$hand) == "0"} {
+	return
+	}
+} else { return }
+	set chan1 $chan
+	set notes_read 0
+	set notes_total 0
+	set notes_unread ""
+	array set inboxlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/inbox_temp.$timestamp"
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set handle [lindex [split $line] 4]
+	set readtype [lindex [split $line] 0]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $readtype "INBOX"]} {
+	set notes_total [expr $notes_total + 1]
+	set num [lindex [split $line] 2]
+	set readnote [join [lrange [split $line] 7 end]]
+	set readit [lindex [split $line] 3]
+if {$readit == "0"} {
+	set notes_read [expr $notes_read + 1]
+	lappend notes_unread $num
+		}
+	}
+}
+	close $file
+if {$notes_unread != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.11 "$notes_read $notes_total $notes_unread"
+	blacktools:tell $nick $host $hand $chan $chan1 notes.16 "none"
+	set black(notes:announce:$hand) 0
+		}
+	}
+}
+
+proc notes:announce {nick host hand chan} {
+	global black
+	set hand [nick2hand $nick]
+if {[matchattr $hand nmo|AOVM $chan]} {
+if {[info exists black(notes:announce:$hand)]} {
+	if {$black(notes:announce:$hand) == "0"} {
+	return
+	}
+} else { return }
+	set chan1 $chan
+	set notes_read 0
+	set notes_total 0
+	set notes_unread ""
+	array set inboxlist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/inbox_temp.$timestamp"
+	set file [open $black(notes_file) "r"]
+while {[gets $file line] != -1} {
+	set handle [lindex [split $line] 4]
+	set readtype [lindex [split $line] 0]
+if {[string equal -nocase $handle $hand] && [string equal -nocase $readtype "INBOX"]} {
+	set notes_total [expr $notes_total + 1]
+	set num [lindex [split $line] 2]
+	set readnote [lrange [split $line] 7 end]
+	set readit [lindex [split $line] 3]
+if {$readit == "0"} {
+	set notes_read [expr $notes_read + 1]
+	lappend notes_unread $num
+		}
+	}
+}
+	close $file
+if {$notes_unread != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 notes.11 "$notes_read $notes_total $notes_unread"
+	blacktools:tell $nick $host $hand $chan $chan1 notes.16 "none"
+	set black(notes:announce:$hand) 0
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 164 - 0
BlackTools/Modules/BT.Private.tcl

@@ -0,0 +1,164 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   PRIVATE TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc private:process {nick host hand chan chan1 why user type} {
+global botnick black
+	set cmd_status [btcmd:status $chan $hand "private" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set flags "-|P"
+	set cmd "private"
+	set show_user $user
+
+if {$why == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "private"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "private"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "private"
+		}
+	}
+	return
+}
+    switch $why {
+	
+add {
+if {($user == "") && ($type == "0")} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	return
+}
+if {($user == "") && ($type == "1")} {
+		blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	return
+}
+if {[onchan $user $chan]} {
+	set getuser [nick2hand $user]
+if {$getuser != "*"} {
+	set user $getuser
+	}
+}
+
+if {[validuser $user]} {
+if {[matchattr $user $flags $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 private.10 $show_user
+	return
+}
+	chattr $user $flags $chan
+	blacktools:tell $nick $host $hand $chan $chan1 private.7 $show_user
+} else {
+	set hosts [getchanhost $user $chan]
+	set uhost [return_mask $black(addusermask) $hosts $user]
+	
+	if {[userlist] != ""} {
+foreach usr [userlist] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $uhost] && (![string match -nocase $usr $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.5 $usr
+	set user $usr
+	set show_user $usr
+			}
+		}
+	}
+}
+
+if {[validuser $user]} {
+	chattr $user $flags $chan
+	blacktools:tell $nick $host $hand $chan $chan1 private.7 $show_user
+	return
+}
+	adduser $user $uhost
+	chattr $user $flags $chan
+	blacktools:tell $nick $host $hand $chan $chan1 private.8 "$show_user $uhost"
+	}
+}
+
+del {
+if {($user == "") && ($type == "0")} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	return
+}
+if {($user == "") && ($type == "1")} {
+		blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	return
+}
+if {[onchan $user $chan]} {
+	set getuser [nick2hand $user]
+if {$getuser != "*"} {
+	set user $getuser
+	}
+}
+
+if {[validuser $user]} {
+if {[matchattr $user $flags $chan]} {
+	chattr $user -|-P $chan
+	blacktools:tell $nick $host $hand $chan $chan1 private.9 $show_user
+} else { blacktools:tell $nick $host $hand $chan $chan1 private.6 $show_user
+		}
+	} else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
+}
+
+list {
+	set list [join [userlist $flags $chan]]
+if {$list == ""} { set list "NONE" }
+	blacktools:tell $nick $host $hand $chan $chan1 private.11 none
+	blacktools:tell $nick $host $hand $chan $chan1 private.5 $list
+}
+
+default {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
+	return
+}
+if {$type == "1"} {
+		blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
+	return
+			}
+		}
+	}
+}
+
+proc private:module {nick host hand chan} {
+global black botnick
+	set handle [nick2hand $nick]
+if {![validchan $chan]} {
+	return
+}
+	set chan1 $chan
+if {[setting:get $chan private]} {
+if {[matchattr $handle nmo|oMASOVP $chan]} { 
+	return 
+}
+	blacktools:banner:2 $nick "PRIVATE" $chan $chan1 $host "0"
+	who:chan $chan
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 415 - 0
BlackTools/Modules/BT.Quote.tcl

@@ -0,0 +1,415 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   QUOTE TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc quote:announce {chans} {
+	global black
+	set channels ""
+foreach chan $chans {
+if {[validchan $chan]} {
+	lappend channels $chan
+	}
+}
+if {$channels != ""} {
+		quote:time $channels 0
+	}
+}
+
+proc quote:time {channels counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	quoteofday:show $chan
+} 
+if {[lindex $channels $cc] == ""} {
+	return
+} else {
+	quote:time $channels $cc
+	}
+}
+
+proc quoteofday:show {chan} {
+	global black botnick
+if {[info exists black(lastaction:$chan)]} {
+	set unixtime [unixtime]
+if {[setting:get $chan quote-showtime] != ""} {
+	set return_time [time_return_minute [setting:get $chan quote-showtime]]
+} else {
+	set return_time [time_return_minute $black(quote:msgtime)]
+}
+	set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
+if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
+	return
+	}
+} else { return }
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp_dir "$black(tempdir)/quote_temp.$timestamp"
+	set day [clock format [clock seconds] -format {%d}]
+	set file [open $black(quote_file) "r"]
+	set temp [open $temp_dir "a"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string match -nocase $enc_chan $chan]} {
+	set quote [join [lrange [split $line] 6 end]]
+	set gettime [lindex [split $line] 4]
+	set getday [clock format $gettime -format %d]
+if {$getday == $day} {
+	puts $temp $quote
+		}
+	}
+}
+	close $temp
+	close $file
+	set file [open $temp_dir "r"]
+	set data [read -nonewline $file]
+	close $file
+if {$data != ""} {
+if {![info exists black(quoteshow:$chan)]} {
+	set black(quoteshow:$chan) 0
+}
+	set lines [split $data "\n"]
+	set line [lindex $lines $black(quoteshow:$chan)]
+if {$line == ""} {
+	set black(quoteshow:$chan) 0
+	set line [lindex $lines $black(quoteshow:$chan)]
+}
+	set black(quoteshow:$chan) [expr $black(quoteshow:$chan) + 1]
+	set encoded [encoding convertfrom utf-8 $line]
+	set replace(%msg%) $encoded
+	set text [black:color:set "" $black(say.$getlang.quote.16)]
+	set reply [join $text]
+	set text2 [black:color:set "" $black(say.$getlang.quote.12)]
+	set reply2 [join $text2]
+	set message [string map [array get replace] $reply]
+if {[onchan $botnick $chan]} {
+if {[regexp {[~]} $message]} {
+	set split_message [split $message "~"]
+if {$black(quote:outtype) == "1"} {
+	puthelp "PRIVMSG $chan :\001ACTION $reply2\001"
+} else {
+	puthelp "PRIVMSG $chan :$reply2"
+}
+foreach mes $split_message {
+	set encoded [encoding convertto utf-8 $mes]
+if {$black(quote:outtype) == "1"} {
+	puthelp "PRIVMSG $chan :\001ACTION \"[join $encoded]\"\001"
+} else { 
+	puthelp "PRIVMSG $chan :\"[join $encoded]\""
+				}
+			}
+		} else {
+		set encoded [encoding convertto utf-8 $message]
+if {$black(quote:outtype) == "1"} {
+	puthelp "PRIVMSG $chan :\001ACTION $reply2 [join $encoded]\001"
+} else { 
+	puthelp "PRIVMSG $chan :$reply2 [join $encoded]"
+			}
+		}
+	}
+}
+	file delete $temp_dir
+}
+
+proc quote:process {nick host hand chan chan1 type who quote arg next} {
+	global black
+	set cmd_status [btcmd:status $chan $hand "q" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[setting:get $chan quote]} {
+	set show_who $who
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+	set split_host [split $host ":"]
+if {[lindex $split_host 1] == "chan"} {
+	set host [lindex $split_host 1]
+	set charbind [lindex $split_host 0]
+	} else {
+	set charbind "$host"
+}
+
+switch $who {
+	list {
+if {[matchattr $hand nmo|M $chan]} {
+	array set nicklist [list]
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/quote_temp.$timestamp"
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_type [lindex [split $line] 1]
+if {[string match -nocase $enc_chan $chan]} {
+	set msg_num [lindex [split $line] 2]
+	set by_who [lindex [split $line] 3]
+	set time [lindex [split $line] 4]
+	set time [clock format $time -format %D]
+	set quote [join [lrange [split $line] 6 end]]
+lappend nicklist($msg_num) "$quote :: $black(say.$getlang.quote.15) $by_who :: $black(say.$getlang.quote.20) \002$time\002"
+		}
+	}
+	close $file
+	set tempwrite [open $temp w]
+foreach msg [lsort -integer -increasing [array names nicklist]] {
+	puts $tempwrite "$msg [join $nicklist($msg)]"
+}
+	close $tempwrite
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $charbind $hand $chan $chan1 $type $data "quote" "0" $next
+	}
+}
+
+del {
+if {[matchattr $hand nmo|M $chan]} {
+if {![regexp {^[0-9]} $next]} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "quote"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "quote"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "quote"
+		}
+	}
+	return
+}
+	set ret [find:q:num $next $chan]
+if {$ret == 0} { 
+	blacktools:tell $nick $host $hand $chan $chan1 quote.13 $next
+	return
+}
+	set file [open $black(quote_file) "r"]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/quote_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_num [lindex [split $line] 2]
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal $next $read_num] && [string equal -nocase $enc_chan $chan]} { 
+	continue
+} else {
+	puts $tempwrite $line
+		}	 
+    }
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(quote_file)
+	blacktools:tell $nick $charbind $hand $chan $chan1 quote.10 $next
+	}
+}
+	default {
+	if {[llength [split $arg]] > 1} {
+	set ret_num [quote:add $nick $host $chan $who $quote]
+	blacktools:tell $nick $charbind $hand $chan $chan1 quote.1 $ret_num
+}
+if {[llength [split $arg]] == 1} {
+	quote:show $nick $host $hand $chan $chan1 $type $show_who
+}
+if {[llength [split $arg]] == 0} {
+	quote:rand $nick $host $hand $chan $chan1 $type $show_who 
+				}
+			}
+		}
+	}
+}
+
+proc quote:rand {nick host hand chan chan1 type who} {
+	global black
+	set total [quote:total $chan]
+	set length [llength $total]
+if {$length > 0} {
+	set random [expr int(rand()*$length)] 
+    set quote [lindex $total $random]
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set num [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $chan $enc_chan] && [string equal -nocase $quote $num]} {
+	set readquote [join [lrange [split $line] 6 end]]
+	set encoded [encoding convertfrom utf-8 $readquote]
+	continue
+			}			
+		}
+	}
+	close $file
+	set split_encoded [split $encoded "~"]
+	foreach enc $split_encoded {
+	blacktools:tell $nick $host $hand $chan $chan1 quote.3 "$quote $enc"
+	}
+}
+
+proc quote:show {nick host hand chan chan1 type who} {
+	global black
+	set quote_numbers ""
+	set find_num 0
+	set found_quote 0
+	set show_who $who
+if {[regexp {^[0-9]} $who]} {
+	set quote_num $who
+	set find_num 1
+} else {
+	set quote_list [quote:count $who $chan]
+	set length [llength $quote_list]
+if {$length > 0} {
+	set found_quote 1
+}
+	set random [expr int(rand()*$length)] 
+    set quote [lindex $quote_list $random]
+	set split_quote [split $quote ":"]
+	set quote_num [lindex $split_quote 0]
+	set quote_show [lindex $split_quote 1]
+foreach q $quote_list {
+	set q_split [split $q ":"]
+	set q_num [lindex $q_split 0]
+if {$quote_num != $q_num} {
+	lappend quote_numbers \#$q_num
+			}
+		}
+if {$found_quote == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 quote.11 none
+	return
+	}
+}
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set num [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $chan $enc_chan] && [string equal -nocase $quote_num $num]} {
+	set found_quote 1
+	set readquote [join [lrange [split $line] 6 end]]
+	set encoded [encoding convertfrom utf-8 $readquote]
+	continue
+			}			
+		}
+	close $file
+if {$found_quote == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 quote.11 none
+	return
+}
+if {$find_num == "0"} {
+	blacktools:tell:h $nick $host $hand $chan $chan1 quote.4 "$quote_show/$length $show_who"
+}
+	set split_encoded [split $encoded "~"]
+foreach enc $split_encoded {
+	blacktools:tell $nick $host $hand $chan $chan1 quote.17 "$quote_num $enc"
+	}
+if {$quote_numbers != ""} {
+	blacktools:tell $nick $host $hand $chan $chan1 quote.18 [join $quote_numbers]
+	}
+}
+
+proc quote:total {chan} {
+	global black
+	set nums ""
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $chan $enc_chan]} {
+	set read_num [lindex [split $line] 2]
+	lappend nums $read_num
+		}	
+	}
+	close $file
+	return $nums
+}
+
+proc quote:count {who chan} {
+	global black
+	set q_count 0
+	set return ""
+	set found_nick 0
+	set found_quote 0
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_who [lindex [split $line] 5]
+	set read_who [string map { "<" ""
+								">" ""
+								"@" ""
+								"+" ""
+										} $read_who]
+										
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_who [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $read_who]
+if {[string equal -nocase $chan $enc_chan] && [string match -nocase $read_who $who]} { 
+	set found_nick 1
+	set q_count [expr $q_count + 1]
+	set num [lindex [split $line] 2]
+	set return "$return $num:$q_count"
+		}
+	}
+	close $file
+if {$found_nick == "0"} {
+	set file [open $black(quote_file) "r"]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set readquote [color:filter [lrange [split $line] 6 end]]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $chan $enc_chan] && ([lsearch -exact $readquote $who] > -1)} { 
+	set found_quote 1
+	set q_count [expr $q_count + 1]
+	set num [lindex [split $line] 2]
+	set return "$return $num:$q_count"
+		}
+	}
+		close $file
+}
+	return $return
+}
+	
+proc quote:add {nick host chan who quote} {
+	global black
+	set temp_num 0
+	set num 0
+	set time [unixtime]
+	
+	while {$temp_num == 0} {
+	set get [find:q:num $num $chan]
+if {$get == "$num"} {
+	set num [expr $num + 1]
+	} else { set temp_num 1 }
+}
+	set file [open $black(quote_file) a]
+	set enc_chan [encoding convertto utf-8 $chan]
+	set encoded [encoding convertto utf-8 $quote]
+	puts $file "$enc_chan QUOTE $num $nick $time $who $encoded"
+	close $file
+	return $num
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 282 - 0
BlackTools/Modules/BT.SecureMode.tcl

@@ -0,0 +1,282 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   SECUREMODE TCL   ##########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc securemode:findexcept {chan host} {
+	global black
+	set found_it 0
+	set file [open $black(add_file) "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan]} {
+	set read_type [lindex [split $line] 1]
+if {[string equal -nocase $read_type "SECUREMODE-EXCEPT"]} {
+	set read_host [lindex [split $line] 3]
+	set real_read_host [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $read_host]
+if {[string match -nocase $host $real_read_host] || [string match -nocase $real_read_host $host]} {
+	set found_it 1
+				}
+			}
+		}
+	}
+	return $found_it
+}
+
+proc securemode:kickremove {nick host hand chan kicked reason} {
+	global black
+	set host [getchanhost $kicked $chan]
+if {[setting:get $chan securemode]} {
+	set chanmode [getchanmode $chan]
+if {[string match -nocase "*D*" $chanmode] && [string match -nocase "*m*" $chanmode]} {
+if {[info exists black(secure:$chan:allowlist)]} {
+if {[lsearch -exact [string tolower $black(secure:$chan:allowlist)] [string tolower $host]] > -1} {
+	set position [lsearch -exact [string tolower $black(secure:$chan:allowlist)] [string tolower $host]]
+	set black(secure:$chan:allowlist) [lreplace $black(secure:$chan:allowlist) $position $position]
+				}
+if {[info exists black(secure:$chan:list)]} {
+if {[lsearch -exact [string tolower $black(secure:$chan:list)]  [string tolower $kicked]] > -1} {
+	set position [lsearch -exact [string tolower $black(secure:$chan:list)] [string tolower $kicked]]
+	set black(secure:$chan:list) [lreplace $black(secure:$chan:list) $position $position]
+					}
+				}	
+			}
+		}
+	}
+}
+
+proc secured:allowlist:reset {minute hour day month year} {
+	global black
+foreach chan [channels] {
+if {[validchan $chan]} {
+if {[info exists black(secure:$chan:allowlist)]} {
+	unset black(secure:$chan:allowlist)
+			}
+		}
+	}		
+}
+
+proc securemode:timer {} {
+	global black botnick
+	set channels ""
+	set secure_act 0
+foreach chan [channels] {
+if {[setting:get $chan securemode]} {
+	lappend channels $chan
+if {[onchan $botnick $chan]} {
+	set chanmode [getchanmode $chan]
+if {[string match -nocase "*D*" $chanmode] && [string match -nocase "*m*" $chanmode]} {
+	set secure_act 1
+			}
+		}	
+	}
+}
+if {$channels == ""} {
+	return
+}
+if {$secure_act == "1"} {
+	securemode:act $channels 0
+}
+	utimer 30 [list securemode:timer]
+}
+
+proc securemode:reply {nick host hand chan mod who} {
+	global black
+if {[setting:get $chan securemode]} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[string match "*+D*" $mod]} {
+	set replace(%chan%) $chan
+	set text [black:color:set "" $black(say.$getlang.securemode.10)]
+	set reply [join $text]
+	putserv "PRIVMSG $chan :[string map [array get replace] $reply]"
+}
+if {[string match "*-D*" $mod]} {
+	set replace(%chan%) $chan
+	set text2 [black:color:set "" $black(say.$getlang.securemode.11)]
+	set reply2 [join $text2]
+	putserv "PRIVMSG $chan :[string map [array get replace] $reply2]"
+		}
+	}
+}
+
+proc securemode:act {channels counter} {
+	global black
+
+if {$channels == ""} {
+	return
+}
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	securemode:raw $chan
+} else {
+	return
+}
+	utimer 5 [list securemode:act $channels $cc]
+}
+
+proc securemode:raw {chan} {
+	global black
+	putquick "NAMES -d $chan"
+	set ::securechan $chan
+	bind RAW - 355 get:nameslist
+	bind RAW - 366 end:nameslist
+}
+
+proc get:nameslist {from keyword arguments} {
+	global black
+	set found_it 0
+	set chan $::securechan
+	set split_arg [split $arguments ":"]
+	set names [lindex $split_arg 1]
+if {[info exists black(secure:$chan:list)]} {
+foreach entry $black(secure:$chan:list) {
+if {[lsearch -exact [string tolower [split $names]] [string tolower $entry]] < 0} {
+	set position [lsearch -exact [string tolower $black(secure:$chan:list)] [string tolower $entry]]
+	set black(secure:$chan:list) [lreplace $black(secure:$chan:list) $position $position]
+if {[info exists black(securecode:$entry:$chan)]} {
+	unset black(securecode:$entry:$chan)
+			}
+		}
+	}
+}
+if {[info exists black(secure:$chan:list)]} {
+if {[llength $black(secure:$chan:list)] == "0"} {
+	unset black(secure:$chan:list)
+	}
+}
+	secure:gethost $names $chan 0
+}
+
+proc end:nameslist {from keyword arguments} {
+	global black
+	check:if:bind "get:nameslist" "355"
+	check:if:bind "end:nameslist" "366"
+}
+
+proc secure:gethost {names chan counter} {
+	global black
+	set name [lindex [split $names] $counter]
+	set cc [expr $counter + 1]
+if {$name != ""} {
+	securemode:gethost:raw $name $chan
+} else {
+	return
+}
+	utimer 3 [list secure:gethost $names $chan $cc]
+}
+
+proc securemode:gethost:raw {name chan} {
+	global black
+	putserv "USERHOST :$name"
+	set ::shchan $chan
+	set ::shnick $name
+	bind RAW - 302 get:securemode:host
+}
+
+proc get:securemode:host {from keyword arguments} {
+	global black botnick
+	set is_allowed 0
+	set has_access 0
+	set securemode_activ 0
+	set hosts [lindex [split $arguments] 1]
+	set hostname [lindex [split $hosts "="] 1]
+	regsub {^[-+]} $hostname "" mask
+	set nick $::shnick
+	set except_mask "$nick!$mask"
+	set chan $::shchan
+if {[setting:get $chan securemode]} {
+	set chanmode [getchanmode $chan]
+if {[string match -nocase "*D*" $chanmode] && [string match -nocase "*m*" $chanmode]} {
+	set securemode_activ 1
+	}
+}
+if {$securemode_activ == "0"} {
+	return
+}
+	set replace(%botnick%) $botnick
+	set replace(%chan%) $chan
+	set lang [setting:get $chan lang]
+if {$lang == ""} { set lang [string tolower $black(default_lang)] }
+	set getaccess [finduser $except_mask]
+if {[matchattr $getaccess $black(exceptflags) $chan]} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan $nick"
+		} else {
+	putserv "MODE $chan +v $nick"
+	}
+	return
+}
+if {[securemode:findexcept $chan $except_mask] == "1"} { 
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan $nick"
+		} else {
+	putserv "MODE $chan +v $nick"
+	}
+	return
+}
+if {[info exists black(secure:$chan:allowlist)]} {
+if {[setting:get $chan strictsecured] == "" || [setting:get $chan strictsecured] == "0"} {
+if {[lsearch -exact [string tolower $black(secure:$chan:allowlist)]  [string tolower $mask]] > -1} {
+	set is_allowed 1
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
+	putserv "PRIVMSG $black(chanserv) :voice $chan $nick"
+		} else {
+	putserv "MODE $chan +v $nick"
+		}
+	}
+	if {$is_allowed == "1"} {
+	return
+		}
+	}
+}
+if {[info exists black(secure:$chan:list)]} {
+if {[lsearch -exact [string tolower $black(secure:$chan:list)]  [string tolower $nick]] < 0} {
+	set black(securecode:$nick:$chan) [string toupper [bot:setcode]]
+	set replace(%msg.1%) $black(securecode:$nick:$chan)
+	set message "$black(say.$lang.securemode.1)"
+	set len [llength $message] 
+    set random [expr int(rand()*$len)] 
+    set message [lindex $message $random]
+	set text [black:color:set "" $message]
+	set reply [join $text]
+	set message [string map [array get replace] $reply]
+	putserv "PRIVMSG $nick :$message"
+	lappend black(secure:$chan:list) $nick
+	}
+} else {
+	set black(securecode:$nick:$chan) [string toupper [bot:setcode]]
+	set replace(%msg.1%) $black(securecode:$nick:$chan)
+	set message "$black(say.$lang.securemode.1)"
+	set len [llength $message] 
+    set random [expr int(rand()*$len)] 
+    set message [lindex $message $random]
+	set text [black:color:set "" $message]
+	set reply [join $text]
+	set message [string map [array get replace] $reply]
+	putserv "PRIVMSG $nick :$message"
+	lappend black(secure:$chan:list) $nick
+}
+	check:if:bind "get:securemode:host" "302"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 769 - 0
BlackTools/Modules/BT.Seen.tcl

@@ -0,0 +1,769 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   SEEN TCL   ##############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc seen:process {nick host hand chan chan1 what type gl} {
+global black botnick
+	set cmd_status [btcmd:status $chan $hand "seen" 0]
+	set number [scan $black(seenflood) %\[^:\]]
+	set timer [scan $black(seenflood) %*\[^:\]:%s]
+	set i 0
+	set host_search 0
+	set find_host ""
+	set isonchan 0
+if {$cmd_status == "1"} { 
+	return 
+}
+	set split_host [split $host ":"]
+	set the_host [lindex $split_host 1]
+	set host [lindex $split_host 0]
+if {$the_host == ""} {
+	set the_host $host
+}
+if {![validchan $chan] && $gl == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+if {$host != "prv" && $gl == "0"} {
+if {![setting:get $chan seen]} {
+	return
+	}
+}
+	
+	set first_host ""
+	set seenlist_all ""
+	
+if {$what == ""} {
+	switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "seen"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "seen"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "seen"
+		}
+	}
+	return
+}
+
+if {![matchattr $hand nmo]} {
+foreach tmr [utimers] {
+if {[string match "*remove:seenflood:host $the_host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+
+if {![info exists black(flood:$the_host:$chan)]} { 
+	set black(flood:$the_host:$chan) 0 
+}
+	incr black(flood:$the_host:$chan)
+	utimer $timer [list remove:seenflood:host $the_host $chan]
+
+if {$black(flood:$the_host:$chan) >= "$number"} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.5 none
+	return
+}
+
+if {[string equal -nocase $what $nick] && ($chan1 == $chan)} { blacktools:tell $nick $host $hand $chan $chan1 seen.6 $nick
+	return
+	}
+}
+
+if {[string equal -nocase $what $botnick]} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.4 $show_nick
+	return
+}
+
+if {$gl == "0"} {
+if {[onchan $what $chan]} {
+if {[setting:get $chan seenreply]} {
+	set isonchan 1
+	set read_time [clock format [unixtime] -format %D-%H:%M:%S]
+	blacktools:tell $what "prv" "" $chan $chan1 seen.39 "$what $nick $read_time"
+		}
+	}
+}
+
+	set file [open $black(seen_file) r]
+	set size [file size $black(seen_file)]
+	set data [split [read $file $size] \n]
+	close $file
+	set what [string map [list \[ {\[} \] {\]} \? {\?} \\ {\\}] $what]
+if {[regexp {\!} $what]} {
+	set first_host $what
+	set host_search 1
+	} else {
+	set addsearch [join $what]
+if {[regexp -- {^[a-zA-Z\|\[\]`^\{\}][a-zA-Z0-9\-_\|\[\]`^\{\}\\]*$} $addsearch]} {
+if {$gl == "0"} {
+if {[setting:get $chan seenreply]} {
+if {$isonchan == "0"} {
+	seen:add_whosearch $nick $the_host $what $chan
+			}
+		}
+	}
+}
+if {$gl == "1"} {
+	set find [lsearch -all [string tolower $data] [string tolower "* *#* $what *"]]
+} else {
+	set find [lsearch -all [string tolower $data] [string tolower "* $chan $what *"]]
+}
+
+if {[llength $find] > 99} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.41 none
+	return
+}
+
+if {[llength $find] > 0} {
+foreach i $find {
+	set line [lindex $data $i]
+if {$line != ""} {
+	set userentry [lindex [split $line] 2]
+	set readhost [lindex [split $line] 3]
+	set chanentry [lindex [split $line] 1]
+	set time [lindex [split $line] 4]
+if {[info exists entry]} {
+if {[lsearch -exact [string tolower "$i%$userentry%$readhost%$time"] [string tolower $entry]] == "-1"} {	
+	lappend entry "$i%$userentry%$readhost%$time"
+					}
+				} else { lappend entry "$i%$userentry%$readhost%$time" }
+			}
+		}
+	}
+	array set seensort [list]
+	array set seennick [list]
+if {![info exists entry]} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.18 "$what"
+	return
+}
+foreach e $entry {
+	set split_e [split $e "%"]
+	set read_time [lindex $split_e 3]
+	set read_host [lindex $split_e 2]
+	set read_pos [lindex $split_e 0]
+	set seensort($read_time) "$read_host $read_pos"
+}
+foreach line [lsort -integer -decreasing -unique [array names seensort]] {
+	lappend seenlist $seensort($line)
+}
+	set first_entry [lindex $seenlist 0]
+	set first_host [lindex $first_entry 0]
+	set first_pos [lindex $first_entry 1]
+}
+if {$gl == "1"} {
+	set find_other [lsearch -all [string tolower $data] [string tolower "* *#* * $first_host *"]]
+} else {
+	set find_other [lsearch -all [string tolower $data] [string tolower "* $chan * $first_host *"]]
+}
+
+if {[llength $find_other] > 99} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.41 none
+	return
+}
+
+foreach k $find_other {
+	set line [lindex $data $k]
+	set userentry [lindex [split $line] 2]
+	set time [lindex [split $line] 4]
+	set readhost [string map {"~" ""} [lindex [split $line] 3]]
+if {[info exists entry]} {
+if {[lsearch -exact [string tolower "$k%$userentry%$readhost%$time"] [string tolower $entry]] == "-1"} {
+	lappend entry "$k%$userentry%$readhost%$time"
+				}					
+		} else { lappend entry "$k%$userentry%$readhost%$time" }	
+	}
+
+if {![info exists entry] && $host_search == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 seen.18 "$what"
+	return
+}
+	
+if {$find_other != ""} {
+	foreach e $entry {
+	set split_e [split $e "%"]
+	set read_time [lindex $split_e 3]
+	set read_host [lindex $split_e 2]
+	set read_pos [lindex $split_e 0]
+	set seennick($read_time) $read_pos
+	}
+foreach line [lsort -integer -decreasing -unique [array names seennick]] {
+	lappend seenlist_all $seennick($line)
+		}
+	}
+	seen:reply $seenlist_all $nick $host $hand $chan $chan1 $data
+}
+
+proc seen:add_whosearch {nick host what chan} {
+	global black
+	set time [unixtime]
+if {![info exists black(seen:searched:$chan)]} {
+	set black(seen:searched:$chan) "$what%$nick%$host%$time"
+} elseif {$black(seen:searched:$chan) == ""} {
+	set black(seen:searched:$chan) "$what%$nick%$host%$time"
+} else {
+	set search_it [lsearch -nocase $black(seen:searched:$chan) "$what%*"]
+if {$search_it < 0} {
+	lappend black(seen:searched:$chan) [join "$what%$nick%$host%$time"]
+		}
+	}
+}
+
+proc seen:reply:src {nick host chan} {
+	global black
+if {![info exists black(seen:searched:$chan)]} {
+	return
+}
+if {$black(seen:searched:$chan) == ""} { return }
+	set search_it [lsearch -nocase $black(seen:searched:$chan) "$nick%*"]
+if {$search_it == "-1"} { return }
+	set line [lindex $black(seen:searched:$chan) $search_it]
+	set split_line [split $line "%"]
+	set who [lindex $split_line 0]
+	set bywho [lindex $split_line 1]
+	set thehost [lindex [split $split_line] 2]
+	set time [lindex [split $split_line] 3]
+	set read_time [clock format $time -format %D-%H:%M:%S]
+	blacktools:tell $nick "prv" "" $chan $chan seen.39 "$who $bywho!$thehost $read_time"
+	set black(seen:searched:$chan) [lreplace $black(seen:searched:$chan) $search_it $search_it]
+}
+
+proc seen:reply {entry nick thehost hand chan chan1 data} {
+	global black
+	set results ""
+	set onchan ""
+	set nojointime 0
+	set more_entry 0
+	set lastmessage 0
+	set isonchan 0
+	set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set first_entry [lindex $entry 0]
+	set line [lindex $data $first_entry]
+foreach e $entry {
+	set getline [lindex $data $e]
+	set getnick [lindex [split $getline] 2]
+	lappend results $getnick
+}
+	set results [lsort -unique $results]
+	set latest_entry [lindex [split $line] 2]
+	set num_results [llength $results]
+	set type [lindex [split $line] 0]
+	set chanentry [lindex [split $line] 1]
+	set jointime [lindex [split $line] 5]
+	set newnick [lindex [split $line] 6]
+	set split_newnick [wsplit $newnick "%MSG%"]
+	set newnick [concat [lindex $split_newnick 0]]
+	set extra [join [lrange [split $line] 6 end]]
+	set host [lindex [split $line] 3]
+	set host [string trim $host "*!~"]
+	set tm [lindex [split $line] 4]
+	set split_it [wsplit $extra "%MSG%"]
+	set message [concat [lindex $split_it 1]]
+	set extra [concat [lindex $split_it 0]]
+	set output [return_time $getlang [expr [unixtime] - $tm]]
+if {[regexp {[0-9]} $jointime]} {
+	set staytime [expr [unixtime] - $jointime]
+	set staytime [return_time $getlang [expr $tm - $jointime]]
+} else { set staytime 0 }
+	set time [clock format $tm -format %D-%H:%M:%S]
+	
+	set replace(%latest%) $latest_entry
+	set replace(%num%) $num_results
+	set replace(%entry%) "[join $results]"
+	set replace(%host%) "$host"
+	set replace(%output%) "$output"
+	set replace(%date%) "($time)"
+	set replace(%newnick%) "$newnick"
+	set replace(%userentry%) "$latest_entry"
+	set replace(%chan%) "$chanentry"
+	set replace(%reason%) "$extra"
+	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 {$staytime == "0"} { set nojointime 1 }
+if {$num_results > 1} { set more_entry 1 }
+if {$message != ""} { set lastmessage 1 }
+if {[onchan $latest_entry $chanentry]} { set isonchan 1 }
+if {$type == "NICKCHANGE"} {
+	if {[onchan $newnick $chanentry]} { set isonchan 1 }
+}
+if {$more_entry == "1"} {
+	switch $type {
+	JOIN {
+if {$isonchan == "1"} {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.19)]"
+	set replace(%nowon%) "$nowon"
+} else { 
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.20)]"
+	set replace(%nowon%) "$nowon"
+}
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.35)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.23)]"
+	}
+}
+	
+	SPLIT {
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.36)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.24)]"
+	}
+}
+	
+	PART {
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.33)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.21)]"
+	}
+}
+	
+	KICK {
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.37)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.25)]"
+	}
+}
+
+	SIGN {
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.34)]"
+	} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.22)]"
+	}
+}
+
+	NICKCHANGE {
+if {$isonchan == "1"} {
+	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"
+	}
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.38)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.26)]"
+	}
+}
+	
+	LASTMSG {
+if {$isonchan == "1"} {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.19)]"
+	set replace(%nowon%) "$nowon"
+} else { 
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.20)]"
+	set replace(%nowon%) "$nowon"
+}
+if {$num_results >= 10} {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.40)]"
+} else {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.30)]"
+			}
+		}
+	}
+} else {
+	switch $type {
+	JOIN {
+if {$isonchan == "1"} {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.19)]"
+	set replace(%nowon%) "$nowon"
+		} else {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.20)]"
+	set replace(%nowon%) "$nowon"
+	}
+	set reply "[string map [array get replace] $black(say.$getlang.seen.14)]"	
+}
+	SPLIT {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.15)]"
+	}
+	PART {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.12)]"
+	}
+	
+	SIGN {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.13)]"
+}
+	KICK {
+	set reply "[string map [array get replace] $black(say.$getlang.seen.16)]"
+	}
+	NICKCHANGE {
+if {$isonchan == "1"} {
+	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)]"
+}
+	LASTMSG {
+if {$isonchan == "1"} {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.19)]"
+	set replace(%nowon%) "$nowon"
+} else {
+	set nowon "[string map [array get replace] $black(say.$getlang.seen.20)]"
+	set replace(%nowon%) "$nowon"
+			}
+	set reply "[string map [array get replace] $black(say.$getlang.seen.29)]"
+		}
+	}
+}
+	set text [black:color:set "" $reply]
+	blacktools:tell $nick $thehost $hand $chan $chan1 seen.27 $text
+if {$lastmessage == "1"} {
+	set replace(%lastmsg%) $message
+	set lastmsg "[string map [array get replace] $black(say.$getlang.seen.32)]"
+} else {
+	set lastmsg "[string map [array get replace] $black(say.$getlang.seen.31)]"
+	}
+	set lastmsg [black:color:set "" $lastmsg]
+	blacktools:tell $nick $thehost $hand $chan $chan1 seen.27 $lastmsg
+}
+
+	
+proc seen:join {nick host hand chan} {
+global botnick black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}
+
+if {[isbotnick $nick]} { return }
+
+if {[setting:get $chan seenreply]} {
+	seen:reply:src $nick $host $chan
+}
+	set time [unixtime]
+	set host "*!$host"
+	set type "JOIN"
+	seen:save $nick $chan $host $type $time "NONE"
+}
+
+proc seen:part {nick host hand chan arg} {
+	global botnick black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}
+	set time [unixtime]
+	set staytimer "0"
+	set type "PART"
+	set reason [join [lrange [split $arg] 0 end]]
+if {$reason == ""} { set reason "N/A" }
+	set host "*!$host"
+if {[isbotnick $nick]} { return }
+	seen:save $nick $chan $host $type $time $reason
+}
+
+proc seen:sign {nick host hand chan arg} {
+	global botnick black
+if {![validchan $chan]} { return }
+if {![setting: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 "N/A" }
+if {[isbotnick $nick]} { return }
+	seen:save $nick $chan $host $type $time $reason
+}
+
+proc seen:kick {nick host hand chan kicked reason} {
+global botnick black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}	
+	set time [unixtime]
+	set host [getchanhost $kicked $chan]
+	set host "*!$host"
+	set reason [join [lrange [split $reason] 1 end]]
+if {$reason == ""} { set reason "N/A" }
+if {[isbotnick $kicked]} { return }
+	set type "KICK"
+	seen:save $kicked $chan $host $type $time $reason
+}
+
+proc seen:split {nick host hand chan args} {
+global botnick black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}
+	set time [unixtime]	
+	set type "SPLIT"
+	set host "*!$host"	
+	set reason [join [lrange [split $args] 0 end]]
+if {[isbotnick $nick]} { return }
+	seen:save $nick $chan $host $type $time "NONE"
+}
+
+proc seen:changenick {nick host hand chan newnick} {
+global botnick black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}
+	set time [unixtime]
+	set host "*!$host"
+	set type "NICKCHANGE"
+if {[isbotnick $nick]} { return }
+	seen:save $nick $chan $host $type $time $newnick
+}
+
+proc seen:lastmsg {nick host hand chan arg} {
+	global black
+if {![validchan $chan]} { return }
+if {![setting:get $chan seen]} {
+	return
+}
+	set time [unixtime]
+	set text [join [lrange [split $arg] 0 end]]
+	set host "*!$host"
+	set type "LASTMSG"
+if {[isbotnick $nick]} { return }
+	seen:save $nick $chan $host $type $time $text
+}
+
+proc seen:save {nick chan host type time extra} {
+	global black
+	set staytimer 0
+if {$type != "JOIN" && $type != "LASTMSG"} {
+if {[info exists black(seen:entry:$nick:$chan)]} {
+	set getextra [join [lrange [split $black(seen:entry:$nick:$chan)] 4 end]]
+	set split_it [wsplit $getextra "%MSG%"]
+	set message [concat [lindex $split_it 1]]
+if {$message != ""} {
+	set extra [concat [lindex $split_it 0]]
+	set extra "$extra%MSG%$message"
+}
+	set get_type [lindex [split $black(seen:entry:$nick:$chan)] 0]
+if {$get_type == "JOIN"} {
+	set staytimer [lindex [split $black(seen:entry:$nick:$chan)] 2]
+if {[regexp {[0-9]} $staytimer]} {
+	set black(seen:entry:$nick:$chan) "$type $host $time $staytimer $extra"
+			} else {
+	set black(seen:entry:$nick:$chan) "$type $host $time 0 $extra"
+			}
+		} else {
+	set black(seen:entry:$nick:$chan) "$type $host $time 0 $extra"	
+		}
+	} else {
+	set black(seen:entry:$nick:$chan) "$type $host $time 0 $extra"
+	}
+} elseif {$type == "LASTMSG"} {
+if {[info exists black(seen:entry:$nick:$chan)]} {
+	set staytimer [lindex [split $black(seen:entry:$nick:$chan)] 3]
+	set jointime [lindex [split $black(seen:entry:$nick:$chan)] 2]
+	set gettype [lindex [split $black(seen:entry:$nick:$chan)] 0]
+if {$gettype == "JOIN"} {
+	set staytimer $jointime
+}
+if {[regexp {[0-9]} $staytimer]} {
+	set black(seen:entry:$nick:$chan) "$type $host $time $staytimer NONE%MSG%$extra"
+		} else {
+	set black(seen:entry:$nick:$chan) "$type $host $time 0 NONE%MSG%$extra"
+		}
+	} else {
+	set black(seen:entry:$nick:$chan) "$type $host $time $time NONE%MSG%$extra"
+	}
+} else {
+if {[info exists black(seen:entry:$nick:$chan)]} {
+	set getextra [join [lrange [split $black(seen:entry:$nick:$chan)] 4 end]]
+	set split_it [wsplit $getextra "%MSG%"]
+	set message [concat [lindex $split_it 1]]
+if {$message != ""} {
+	set extra [concat [lindex $split_it 0]]
+	set extra "$extra%MSG%$message"
+	}
+}
+	set black(seen:entry:$nick:$chan) "$type $host $time 0 $extra"
+}
+if {[info exists black(seen_list:$chan)]} {
+if {$black(seen_list:$chan) != ""} {
+	set find_entry [lsearch -exact -nocase $black(seen_list:$chan) $nick]
+if {$find_entry > -1} {
+	return
+			}
+	lappend black(seen_list:$chan) $nick
+		} else {
+	set black(seen_list:$chan) $nick
+		}
+	} else {
+	set black(seen_list:$chan) $nick
+	}
+}
+
+proc seen:save_file {min hour day mon year} {
+	global black
+	set channels ""
+foreach chan [channels] {
+if {[setting:get $chan seen]} {
+if {[info exists black(seen_list:$chan)]} {
+if {$black(seen_list:$chan) != ""} {
+	lappend channels $chan
+			}
+		}
+	}
+}
+if {$channels != ""} {
+	seen:save_chan $channels 0
+	}
+}
+
+proc seen:save_remove {entry chan} {
+	global black
+	set staytime 0
+	set message ""
+	set jointime 0
+	set action ""
+	set host [lindex [split $black(seen:entry:$entry:$chan)] 1]
+	set type [lindex [split $black(seen:entry:$entry:$chan)] 0]
+	set time [lindex [split $black(seen:entry:$entry:$chan)] 2]
+	set thestay [lindex [split $black(seen:entry:$entry:$chan)] 3]
+	set extra [join [lrange [split $black(seen:entry:$entry:$chan)] 4 end]]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/seen_temp.$timestamp"
+	set file [open $black(seen_file) "r"]
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set read_type [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+	set read_nick [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $chan $enc_chan] && [string equal -nocase $entry $read_nick]} {
+	set staytime [lindex [split $line] 5]
+	set readmsg [join [lrange [split $line] 6 end]]
+	set jointime [lindex [split $line] 4]
+	set action [lindex [split $line] 0]
+	set split_it [wsplit $readmsg "%MSG%"]
+	set message [concat [lindex $split_it 1]]
+if {[string match -nocase "*%MSG*" $extra]} {
+	set message ""
+}
+	continue
+		} else {
+	puts $tempwrite $line
+	}
+}
+	close $file
+if {$type != "JOIN"} {
+if {$action == "JOIN"} {
+if {$message != ""} {
+	puts $tempwrite "$type $chan $entry $host $time $jointime $extra%MSG%$message"
+} else {
+	puts $tempwrite "$type $chan $entry $host $time $jointime $extra"
+}
+	} else {
+if {$message != ""} {
+	puts $tempwrite "$type $chan $entry $host $time $staytime $extra%MSG%$message"
+} else {
+	puts $tempwrite "$type $chan $entry $host $time $staytime $extra"
+		}
+	}
+} else {
+if {$message != ""} {
+	puts $tempwrite "$type $chan $entry $host $time 0 $extra%MSG%$message"
+} else {
+	puts $tempwrite "$type $chan $entry $host $time 0 $extra"
+	}
+}
+	close $tempwrite
+    file rename -force $temp $black(seen_file)
+if {[info exists black(seen:entry:$entry:$chan)]} {
+	unset black(seen:entry:$entry:$chan)
+	}
+}
+
+proc seen:save_chan {channels num} {
+	global black
+	set chan [lindex $channels $num]
+	set x 0
+if {[info exists black(seen_list:$chan)]} {
+while {$x <= [llength $black(seen_list:$chan)]} {
+	set entry [lindex $black(seen_list:$chan) $x]
+if {[info exists black(seen:entry:$entry:$chan)]} {
+	seen:save_remove $entry $chan
+		}
+	set x [expr $x + 1]
+	}
+}
+
+if {[info exists black(seen_list:$chan)]} {
+	unset black(seen_list:$chan)
+}
+	set c [expr $num + 1]
+if {[lindex $channels $c] != ""} {
+	seen:save_chan $channels $c
+	}
+}
+
+proc seen:entry:delete {minute hour day month year} {
+	global black username
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/seen_temp.$timestamp"
+	set file [open $black(seen_file) "r"]
+	set tempwrite [open $temp w]
+	set counter 0
+while {[gets $file line] != -1} {
+	set tm [lindex [split $line] 4]
+if {![regexp {[0-9]} $tm]} {
+	continue
+}
+	set read_days [expr [expr [expr [expr [unixtime] - $tm] / 60]] / 1440]
+if {$read_days >= $black(seen:expire:time)} {
+	set counter [expr $counter + 1]
+	continue
+		} else {
+		puts $tempwrite $line
+		} 
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $black(seen_file)
+	
+foreach chan [channels] {
+if {![info exists black(seen:searched:$chan)]} { continue }
+if {$black(seen:searched:$chan) == ""} {
+	unset black(seen:searched:$chan)
+	continue
+}
+foreach entry $black(seen:searched:$chan) {
+	set split_entry [split $entry "%"]
+	set time [lindex $split_entry 3]
+	set read_days [expr [expr [expr [expr [unixtime] - $time] / 60]] / 1440]
+if {$read_days >= $black(seen:expire:seenreply)} {
+	set search_it [lsearch -all $black(seen:searched:$chan) $entry]
+if {$search_it > -1} {
+	set black(seen:searched:$chan) [lreplace $black(seen:searched:$chan) $search_it $search_it]
+				}
+			}
+		}
+	}
+}

+ 307 - 0
BlackTools/Modules/BT.TCL.tcl

@@ -0,0 +1,307 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###############################   TCL   #################################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc tcl:process {nick host hand chan chan1 type the_script who} {
+	global black config
+	set cmd_status [btcmd:status $chan $hand "tcl" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+	set current_tcl ""
+	set tcl_exists 0
+
+if {$who == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+
+switch $who {
+
+wget {
+if {$the_script == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+
+if {![string match -nocase "*.tcl" $the_script]} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+	set split_thescript [split $the_script "/"]
+foreach s $split_thescript {
+if {[string match -nocase "*.tcl" $s]} {
+if {[check:if:valid $s] == "1"} {
+	set current_tcl $s
+	set tcl_exists 1
+		} else {
+	set current_tcl $s
+		}
+	}
+}
+
+if {$tcl_exists == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.21 $s
+	return
+}
+	set wget [catch {exec wget $the_script -P $black(dirname)/ 2>/dev/null} wget_stat]
+if {[string match -nocase "*exited abnormally*" $wget_stat]} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.19 $current_tcl
+	return
+	}
+	putserv "PRIVMSG $chan :$wget_stat"
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.20 $current_tcl
+}
+	
+load {
+if {$the_script == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+	set black(tcl_load) [catch {source "$black(dirname)/$the_script"} black(tcl_load_error)]
+	
+if {$black(tcl_load) == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.3 "$the_script [split $black(tcl_load_error)]"
+	return
+}
+	set file [open "$config" r]
+	set w [read -nonewline $file]
+	close $file
+	set counter -1
+	set data [split $w "\n"]
+	set tcl_position -1
+	set found_it 0
+foreach line $data {
+if {[string match -nocase "source $black(dirname)/*" $line]} {
+	set the_split [split $line "/"]
+	set script [lindex $the_split 1]
+if {[string equal -nocase $script $the_script]} {
+	set found_it 1
+		}		
+	}
+}
+if {$found_it == 1} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.4 $the_script
+	return
+}
+	set file [open "$config" a]
+	puts $file "source $black(dirname)/$the_script"
+	close $file
+	rehash
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.5 $the_script
+
+}
+unload {
+if {$the_script == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+if {[string match -nocase "*BlackTools*" $the_script]} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.18 none
+	return
+}
+
+	set file [open "$config" r]
+	set w [read -nonewline $file]
+	close $file
+	set counter -1
+	set data [split $w "\n"]
+	set tcl_position -1
+	set found_it 0
+foreach line $data {
+	set counter [expr $counter + 1]
+if {[string match -nocase "*source $black(dirname)/*" $line]} {
+	set the_split [split $line "/"]
+	set script [lindex $the_split 1]
+if {[string equal -nocase $script $the_script]} {
+	set found_it 1
+	set tcl_position $counter
+			}	
+		}
+	}
+if {$found_it == 0} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.7 $the_script
+	return
+}
+
+	set delete [lreplace $data $tcl_position $tcl_position]
+	set file [open "$config" "w"] 
+	puts $file [join $delete "\n"]
+	close $file
+	rehash
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.8 [split $the_script]
+}
+
+list {
+	set the_files [glob -directory $black(dirname) "*.tcl"]
+	set current_tcl ""
+	set counter 0
+	set found_tcl 0
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/tcl_temp.$timestamp"
+	array set tcllist [list]
+	set num_l 1
+	set num 0
+foreach file $the_files {
+	set split_file [split $file "/"]
+	set the_file [lindex $split_file 1]
+if {[string match -nocase "*.tcl" $the_file]} {
+	set found_tcl 1
+}
+	set status [check:if:load $the_file]
+if {$status == "1"} {
+	lappend tcllist(1) $the_file
+	} else {
+	lappend tcllist(2) $the_file
+	}
+	unset status
+}
+
+if {$found_tcl == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.2 "tcl"
+	return
+}
+
+	set tempwrite [open $temp w]
+foreach n [lsort -integer -increasing [array names tcllist]] {
+foreach tcl $tcllist($n) {
+	set counter [expr $counter + 1]
+if {$n == "1"} {
+	puts $tempwrite "$counter \002$tcl\002"
+	} elseif {$n == "2"} {
+	puts $tempwrite "$counter $tcl"
+		}
+	}
+}
+	close $tempwrite
+	
+	set file [open $temp "r"]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "tcl" "0" $the_script
+	}
+info {
+if {$the_script == ""} {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+}
+	set status_valid [check:if:valid $the_script]
+	set status [check:if:load $the_script]
+if {$status_valid == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.12 $the_script
+	return
+	}
+if {$status == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.13 $the_script
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 tcl.14 $the_script
+			}
+		}
+default {
+if {$type == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "tcl"
+}
+if {$type == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "tcl"
+}
+if {$type == "2"} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "tcl"
+}
+	return
+		}
+	}
+}
+
+proc check:if:valid {tcl} {
+	global black
+	set the_files [glob -directory $black(dirname) "*.tcl"]
+	foreach file $the_files {
+	set split_file [split $file "/"]
+	set the_file [lindex $split_file 1]
+if {[string equal -nocase $tcl $the_file]} {
+	return 1
+	}
+}
+	return 0
+}
+
+proc check:if:load {tcl} {
+	global black config
+	set file [open "$config" r]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	set return [lsearch -all -inline $data "source scripts/$tcl"]
+if {$return != ""} {
+	return 1
+} else {
+	return 0
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 136 - 0
BlackTools/Modules/BT.Timer.tcl

@@ -0,0 +1,136 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   TIMER TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc timer:process {nick host hand chan chan1 cmd pid timer_args type} {
+	global black
+	set counter 0
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {$cmd == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "timer"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "timer"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "timer"
+		}
+	}
+	return
+}
+switch [string tolower $cmd] {
+	list {
+	blacktools:tell $nick $host $hand $chan $chan1 timer.1 none
+foreach tmr [timers] {
+	set counter [expr $counter + 1]
+	set time [lindex $tmr 0]
+	set process [join [lindex $tmr 1]]
+	set pid [lindex $tmr 2]
+	blacktools:tell $nick $host $hand $chan $chan1 timer.2 "$counter $pid $time $process"
+		}
+foreach tmr [utimers] {
+	set counter [expr $counter + 1]
+	set time [lindex $tmr 0]
+	set process [join [lindex $tmr 1]]
+	set pid [lindex $tmr 2]
+	blacktools:tell $nick $host $hand $chan $chan1 timer.3 "$counter $pid $time $process"
+			}
+	blacktools:tell $nick $host $hand $chan $chan1 timer.4 none		
+		}
+		
+kill {
+	set found_pid 0
+if {$pid == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "timer"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "timer"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "timer"
+		}
+	}
+	return
+}
+
+foreach tmr [timers] {
+	set getpid [lindex $tmr 2]
+if {[string equal -nocase $getpid $pid]} {
+	set found_pid 1
+	killtimer $getpid
+	break
+				}
+			}
+foreach tmr [utimers] {
+	set getpid [lindex $tmr 2]
+if {[string equal -nocase $getpid $pid]} {
+	set found_pid 1
+	killutimer $getpid
+	break
+				}
+			}
+if {$found_pid == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 timer.5 $pid
+			} else {
+	blacktools:tell $nick $host $hand $chan $chan1 timer.6 $pid
+		}
+	}
+start {		
+	set return_time [time_return_minute $pid]
+	set found_timer 0
+if {$timer_args == "" || $return_time == "-1"} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "timer"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "timer"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "timer"
+		}
+	}
+	return
+}
+
+foreach tm [timers] {
+	set process [join [lindex $tm 1]]
+if {[string equal -nocase $process [lindex [split $timer_args] 0]]} {
+	set found_timer 1
+	}
+}
+if {$found_timer == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 timer.8 none
+	return
+}
+	set check_timer [timer $return_time $timer_args]
+	blacktools:tell $nick $host $hand $chan $chan1 timer.7 $check_timer
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 667 - 0
BlackTools/Modules/BT.TopWords.tcl

@@ -0,0 +1,667 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   TOPWORDS TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc topwords:delexcept {user nick host hand chan chan1} {
+	global black
+	set user [join $user]
+	set show_user [split $user]	
+if {[onchan $user $chan]} {
+	set getuser [nick2hand $user]
+if {$getuser != "*"} {
+	set user $getuser
+	}
+}
+
+if {![validuser $user]} { 
+	blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
+	return
+}
+
+if {![matchattr $user "-|w" $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.20 "$show_user"
+	return
+}
+	chattr $user -|-w $chan
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.21 "$show_user"
+}
+
+proc topwords:addexcept {user nick host hand chan chan1} {
+	global black
+	set user [join $user]
+	set show_user [split $user]
+if {![onchan $user $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_user
+	return
+}
+	set mask [return_mask [return_host_num "topwords" $chan [getchanhost $user $chan]] [getchanhost $user $chan] $user]
+	
+if {[validuser $user]} {
+	set user $user
+} else {
+if {[nick2hand $user] == "*"} {
+	set user $user
+	} else {
+	set user [nick2hand $user]
+	}	
+}
+foreach usr [userlist] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $mask] && (![string match -nocase $usr $user])} {
+	blacktools:tell $nick $host $hand $chan $chan1 add.5 [split $usr]
+	set user $usr
+	set show_user [split $usr]
+		}
+	}
+}
+
+if {[validuser $user]} {
+if {[matchattr $user -|w $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.17 $show_user
+	return
+}
+	chattr $user -|+w $chan
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.15 $show_user
+} else {
+	adduser $user $mask
+	chattr $user -|+w $chan
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.16 "$show_user $mask"
+	}
+}
+
+proc topwords:process {nick host hand chan chan1 cmd type next} {
+global botnick black username
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+	set cmd_status [btcmd:status $chan $hand "topwords" 0]
+if {$cmd_status == "1"} { 
+	return 
+}
+if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
+	return
+}
+if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
+	return
+}
+if {![setting:get $chan topwords]} {
+	return
+}
+if {![validchan $chan]} {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
+	return
+}
+
+if {![file isdirectory "$black(dirname)/BlackTools/FILES/TOPWORDS"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.7 none
+	return
+}
+if {![file exists $topwords_file]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.7 none
+	return
+}
+
+if {[string equal -nocase $cmd "list"]} {
+	set list [userlist "-|w" $chan]
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.18 "none"
+if {$list == ""} {set list "NONE"}
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.19 "$list"
+	return
+}
+
+if {[regexp {:} $cmd]} {
+	set split_cmd [split $cmd ":"]
+	set theuser [lindex $split_cmd 1]
+if {[onchan $theuser $chan]} {
+	set mask [return_mask [return_host_num "topwords" $chan [getchanhost $theuser $chan]] [getchanhost $theuser $chan] $theuser]
+} else {
+	set mask ""
+}
+	topwords:user $nick $host $hand $chan $chan1 $cmd $mask $type
+	return
+}
+
+if {[string equal -nocase $cmd "del"]} {
+if {$next == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "topwords"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "topwords"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "topwords"
+		}
+	}
+	return
+}
+	topwords:delexcept $next $nick $host $hand $chan $chan1
+	return
+}
+
+if {[string equal -nocase $cmd "add"]} {
+if {$next == ""} {
+switch $type {
+	0 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr "topwords"
+	}
+	1 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "topwords"
+	}
+	2 {
+	blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "topwords"
+		}
+	}
+	return
+}
+	topwords:addexcept $next $nick $host $hand $chan $chan1
+	return
+}
+if {[string equal -nocase $cmd "reset"]} {
+	set reset [topwords:reset $chan]
+if {$reset == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.8 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.10 none
+}
+	return
+}
+	array set topwordslist [list]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/topwords_temp.$timestamp"
+	set counter 0
+	set file [open $topwords_file r]
+	while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string match -nocase $enc_chan $chan]} {
+if {[string equal -nocase $cmd "total"]} {
+	set words_count [lindex [split $line] 6]
+} elseif {[string equal -nocase $cmd "week"]} {
+	set words_count [lindex [split $line] 7]
+} else {
+	set words_count [lindex [split $line] 8]
+}
+	set read_nick [lindex [split $line] 1]
+if {$words_count > 0} {
+lappend topwordslist($words_count) $read_nick
+		}
+	}
+}
+	close $file
+	set tempwrite [open $temp w]
+	set latestuser ""
+	set latesttime 0
+foreach words [lsort -integer -decreasing [array names topwordslist]] {
+	set counter [expr $counter + 1]
+foreach user $topwordslist($words) {
+	puts $tempwrite "$user $words $counter"
+	}
+}
+	close $tempwrite
+
+	set file [open $temp r]
+	set w [read -nonewline $file]
+	close $file
+	set data [split $w "\n"]
+	file delete $temp
+if {$data == ""} {
+if {[string equal -nocase $cmd "total"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.7 none
+} elseif {[string equal -nocase $cmd "week"]} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.23 none
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.14 none
+}
+	return
+}
+if {[string equal -nocase $cmd "total"]} {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "topwords:total" "0" $next
+} elseif {[string equal -nocase $cmd "week"]} {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "topwords:week" "0" $next
+	} else {
+	module:getinfo $nick $host $hand $chan $chan1 $type $data "topwords" "0" $next
+	}
+}
+
+proc topwords:user {nick host hand chan chan1 user mask type1} {
+	global black username
+	set found_it 0
+	set split_user [split $user ":"]
+	set theuser [lindex $split_user 1]
+	set type [lindex $split_user 0]
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+switch $type {
+	reset {
+	set reset [topwords:user:reset $theuser $chan]
+if {$reset == "1"} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.29 $theuser
+} else {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.4 $theuser
+		}
+	}
+default {
+	set file [open $topwords_file r]
+	set size [file size $topwords_file]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+	set read_user [lindex [split $line] 1]
+	set read_mask [lindex [split $line] 2]
+if {$mask != ""} {
+if {[string equal -nocase $enc_chan $chan] && [string match -nocase $read_mask $mask]} {
+	set found_it 1
+	set read_user [lindex [split $line] 1]
+	set get_lines [lrange [split $line] 3 5]
+	set get_words [lrange [split $line] 6 8]
+	set get_chars [lrange [split $line] 9 11]
+	set get_actions [lrange [split $line] 12 14]
+	set get_smiles [lrange [split $line] 15 17]
+	set get_ques [lrange [split $line] 18 20]
+	show:topwords:user $nick $host $hand $chan $chan1 $read_user $read_mask $get_lines $get_words $get_chars $get_actions $get_smiles $get_ques $type
+	continue
+	}
+} elseif {[string equal -nocase $enc_chan $chan] && [string equal -nocase $read_user $theuser]} {
+	set found_it 1
+	set read_mask [lindex [split $line] 2]
+	set get_lines [lrange [split $line] 3 5]
+	set get_words [lrange [split $line] 6 8]
+	set get_chars [lrange [split $line] 9 11]
+	set get_actions [lrange [split $line] 12 14]
+	set get_smiles [lrange [split $line] 15 17]
+	set get_ques [lrange [split $line] 18 20]
+	show:topwords:user $nick $host $hand $chan $chan1 $read_user $read_mask $get_lines $get_words $get_chars $get_actions $get_smiles $get_ques $type
+	continue			
+				}
+			}
+if {$found_it == "0"} {
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.27 $theuser
+			}
+		}	
+	}	
+}
+
+proc topwords:user:reset {user chan} {
+	global black username
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+	set found_it 0
+	set file [open $topwords_file r]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/othermodule_temp.$timestamp"
+	set tempwrite [open $temp w]
+while {[gets $file line] != -1} {
+	set getuser [lindex [split $line] 1]
+if {[string equal -nocase $getuser $user]} {
+	set found_it 1
+	continue
+		} else {
+	puts $tempwrite $line
+		}	 
+	}
+	close $tempwrite
+	close $file
+    file rename -force $temp $topwords_file
+	return $found_it
+}
+
+proc show:topwords:user {nick host hand chan chan1 read_user read_mask get_lines get_words get_chars get_actions get_smiles get_ques type} {
+	global black
+	set place [getactivplace $read_mask $chan $type]
+	set split_place [split $place ":"]
+	set total [lindex $split_place 1]
+	set theplace [lindex $split_place 0]
+switch $type {
+total {
+	set lines [lindex $get_lines 0]
+	set words [lindex $get_words 0]
+	set chars [lindex $get_chars 0]
+	set actions [lindex $get_actions 0]
+	set smiles [lindex $get_smiles 0]
+	set ques [lindex $get_ques 0]
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.22 "$read_user $read_mask $words $lines $chars $smiles $actions $ques $theplace $total"
+}
+
+week {
+	set lines [lindex $get_lines 1]
+	set words [lindex $get_words 1]
+	set chars [lindex $get_chars 1]
+	set actions [lindex $get_actions 1]
+	set smiles [lindex $get_smiles 1]
+	set ques [lindex $get_ques 1]
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.28 "$read_user $read_mask $words $lines $chars $smiles $actions $ques $theplace $total"
+}
+
+user {
+	set lines [lindex $get_lines 2]
+	set words [lindex $get_words 2]
+	set chars [lindex $get_chars 2]
+	set actions [lindex $get_actions 2]
+	set smiles [lindex $get_smiles 2]
+	set ques [lindex $get_ques 2]
+	blacktools:tell $nick $host $hand $chan $chan1 topwords.3 "$read_user $read_mask $words $lines $chars $smiles $actions $ques $theplace $total"
+		}
+	}
+}
+
+
+proc getactivplace {host chan type} {
+	global black username
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+	array set activlist [list]
+	set counter 0
+	set all_count 0
+	set place 0
+	set file [open $topwords_file r]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan]} {
+	set all_count [expr $all_count + 1]
+if {[string equal -nocase $type "user"]} {
+	set nr_words [lindex [split $line] 8]
+} elseif {[string equal -nocase $type "week"]} {
+	set nr_words [lindex [split $line] 7]
+} elseif {[string equal -nocase $type "total"]} {
+	set nr_words [lindex [split $line] 6]
+}
+	set read_host [lindex [split $line] 2]
+	lappend activlist($nr_words) $read_host
+		}
+	}
+	close $file
+foreach h [lsort -integer -decreasing [array names activlist]] {
+	set counter [expr $counter + 1]
+if {[string equal -nocase $activlist($h) $host]} {
+	set place $counter
+	}
+}	
+if {$place == "0"} { set place $counter }
+	return $place:$all_count
+}
+
+proc topwords:module {nick host hand chan arg} {
+	global black username
+	set arg [split $arg]
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+	set mask [return_mask [return_host_num "topwords" $chan $host] $host $nick]
+	set handle [nick2hand $nick]
+	set topwords_run 0
+if {[setting:get $chan topwords]} {
+if {![file isdirectory "$black(dirname)/BlackTools/FILES/TOPWORDS/"]} {
+	file mkdir "$black(dirname)/BlackTools/FILES/TOPWORDS/"
+}
+if {![file exists $topwords_file]} {
+	set file [open $topwords_file w]
+	close $file
+}
+
+	foreach tmr [timers] {
+if {[string match "*blacktools:timers:runtime*" [join [lindex $tmr 1]]]} {
+	set topwords_run 1
+	}
+}
+
+if {$topwords_run == "0"} {
+	return
+}
+
+if {[isbotnick $nick]} {
+	return
+}
+if {[validuser $handle]} {
+if {[matchattr $handle -|w $chan]} {
+	return
+	}
+}
+if {[setting:get $chan accessonly]} {
+if {![validuser $handle]} {
+	return
+}
+if {![matchattr $handle $black(exceptflags) $chan]} {
+	return
+	}
+}
+if {![info exist black(topwords:$chan:list)]} {
+	set black(topwords:$chan:list) $mask
+} else {
+if {[lsearch -exact -nocase $black(topwords:$chan:list) $mask] < 0} {
+	lappend black(topwords:$chan:list) $mask
+	}
+}
+	set lines 1
+	set last_message [unixtime]
+	set smile_num 0
+	set ques_num 0
+if {[string equal -nocase $hand "ACTION"]} {
+	set actions 1
+} else { set actions 0 }
+	set arg [regsub -all {\s+} $arg " "]
+	set words [llength $arg]
+	set chars [string length $arg]
+if {[regexp {[?]} $arg]} {
+	set ques_num [expr $ques_num + 1]
+}
+foreach text $arg {
+	set smile_stat [topwords:smile $text]
+if {$smile_stat != "-1"} {
+	set smile_num [expr $smile_num + 1]
+	}
+}
+if {![info exists black(topwords:$chan:$mask)]} {
+	set black(topwords:$chan:$mask) "$nick $lines $words $chars $actions $smile_num $ques_num"
+} else {
+	set get_lines [lindex [split $black(topwords:$chan:$mask)] 1]
+	set get_words [lindex [split $black(topwords:$chan:$mask)] 2]
+	set get_chars [lindex [split $black(topwords:$chan:$mask)] 3]
+	set get_actions [lindex [split $black(topwords:$chan:$mask)] 4]
+	set get_smiles [lindex [split $black(topwords:$chan:$mask)] 5]
+	set get_ques [lindex [split $black(topwords:$chan:$mask)] 6]
+	set black(topwords:$chan:$mask) "$nick [expr $get_lines + $lines] [expr $get_words + $words] [expr $get_chars + $chars] [expr $get_actions + $actions] [expr $get_smiles + $smile_num] [expr $get_ques + $ques_num]"	
+		}	
+	} 
+}
+
+
+proc topwords:save:channels {chans} {
+	global black
+foreach chan $chans {
+if {[validchan $chan]} {
+	lappend channels $chan
+		}
+	}
+if {$channels != ""} {
+		topwords:time $channels 0
+	}
+}
+
+proc topwords:time {channels counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {$chan != ""} {
+	topwords:module:save $chan
+} 
+if {[lindex $channels $cc] == ""} {
+	return
+} else {
+	topwords:time $channels $cc
+	}
+}
+
+proc topwords:module:save {chan} {
+	global black username
+if {![info exists black(topwords:$chan:list)]} {
+	return
+}
+if {$black(topwords:$chan:list) == ""} {
+	return
+}
+	set topwords_file "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+if {![file exists $topwords_file]} {
+	return
+}
+if {$black(topwords:$chan:list) == ""} {
+	return
+}
+	topwords:remove_it $topwords_file $chan $black(topwords:$chan:list) 0
+}
+
+proc topwords:remove_it {files chan list position} {
+	global black
+	set mask [lindex $list $position]
+if {$mask != ""} {
+if {[info exists black(topwords:$chan:$mask)]} {
+	set file [open $files r]
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/topwords_temp.$timestamp"
+	set tempwrite [open $temp w]
+	set found_mask 0
+	set counter 0
+	set get_nick [lindex [split $black(topwords:$chan:$mask)] 0]
+	set curr_lines [lindex [split $black(topwords:$chan:$mask)] 1]
+	set curr_words [lindex [split $black(topwords:$chan:$mask)] 2]
+	set curr_chars [lindex [split $black(topwords:$chan:$mask)] 3]
+	set curr_actions [lindex [split $black(topwords:$chan:$mask)] 4]
+	set curr_smiles [lindex [split $black(topwords:$chan:$mask)] 5]
+	set curr_ques [lindex [split $black(topwords:$chan:$mask)] 6]
+while {[gets $file line] != -1} {
+	set read_chan [lindex [split $line] 0]
+	set read_host [lindex [split $line] 2]
+	set enc_chan [encoding convertfrom utf-8 $read_chan]
+if {[string equal -nocase $enc_chan $chan] && [string equal -nocase $mask $read_host]} {
+	set found_mask 1
+	set get_lines [lrange [split $line] 3 5]
+	set get_words [lrange [split $line] 6 8]
+	set get_chars [lrange [split $line] 9 11]
+	set get_actions [lrange [split $line] 12 14]
+	set get_smiles [lrange [split $line] 15 17]
+	set get_ques [lrange [split $line] 18 20]
+	continue
+			} else {
+		puts $tempwrite $line
+	}
+}
+if {$found_mask == "0"} {
+	puts $tempwrite "$chan $get_nick $mask $curr_lines $curr_lines $curr_lines $curr_words $curr_words $curr_words $curr_chars $curr_chars $curr_chars $curr_actions $curr_actions $curr_actions $curr_smiles $curr_smiles $curr_smiles $curr_ques $curr_ques $curr_ques"
+	} else {
+	puts $tempwrite "$chan $get_nick $mask [expr $curr_lines + [lindex $get_lines 0]] [expr $curr_lines + [lindex $get_lines 1]] [expr $curr_lines + [lindex $get_lines 2]] [expr $curr_words + [lindex $get_words 0]] [expr $curr_words + [lindex $get_words 1]] [expr $curr_words + [lindex $get_words 2]] [expr $curr_chars + [lindex $get_chars 0]] [expr $curr_chars + [lindex $get_chars 1]] [expr $curr_chars + [lindex $get_chars 2]] [expr $curr_actions + [lindex $get_actions 0]] [expr $curr_actions + [lindex $get_actions 1]] [expr $curr_actions + [lindex $get_actions 2]] [expr $curr_smiles + [lindex $get_smiles 0]] [expr $curr_smiles + [lindex $get_smiles 1]] [expr $curr_smiles + [lindex $get_smiles 2]] [expr $curr_ques + [lindex $get_ques 0]] [expr $curr_ques + [lindex $get_ques 1]] [expr $curr_ques + [lindex $get_ques 2]]"	
+	}
+	close $file
+	close $tempwrite
+	file rename -force $temp $files
+if {[info exists black(topwords:$chan:$mask)]} {
+	unset black(topwords:$chan:$mask)
+		}
+	set place [lsearch -exact -nocase $black(topwords:$chan:list) $mask]
+if {$place > 0} {
+	set black(topwords:$chan:list) [lreplace $black(topwords:$chan:list) $place $place]
+			}
+		}
+	}
+	set counter [expr $position + 1]
+if {[lindex $list $counter] != ""} {
+	topwords:remove_it $files $chan $list $counter
+	}
+}
+
+proc topwords:module:me {nick host hand chan keyword arg} {
+	global black
+if {[string equal -nocase $keyword "ACTION"]} {
+	topwords:module $nick $host "ACTION" $chan $arg
+	}
+}
+
+proc topwords:reset {chan} {
+	global black username
+	set found_entry 0
+if {[file exists "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"]} {
+	set found_entry 1
+	set file [open "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt" w]
+	close $file
+}
+	return $found_entry
+}
+
+proc topwords:delete {chan} {
+	global black username
+if {$black(chanremove_all) == "0"} {
+	return
+		}
+if {[file exists "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"]} {
+	file delete "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+	}	
+}
+
+proc topwords:day:reset {minute hour day month year} {
+	global black username
+	set week_reset 0
+if {[clock format [clock seconds] -format "%w"] == 0} {
+	set week_reset 1
+}
+foreach chan [channels] {
+	set tpfile "$black(dirname)/BlackTools/FILES/TOPWORDS/$username.$chan.txt"
+if {[setting:get $chan topwords]} {
+if {![file exists $tpfile]} {
+	continue
+}
+	set file [open $tpfile r]
+	set size [file size $tpfile]
+	set data [split [read $file $size] \n]
+	close $file
+	set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
+	set temp "$black(tempdir)/topwords_temp.$timestamp"
+	set tempwrite [open $temp w]
+foreach line $data {
+if {$line != ""} {
+	set get_chan [lindex [split $line] 0]
+	set get_nick [lindex [split $line] 1]
+	set get_host [lindex [split $line] 2]
+	set curr_lines [lrange [split $line] 3 5]
+	set curr_words [lrange [split $line] 6 8]
+	set curr_chars [lrange [split $line] 9 11]
+	set curr_actions [lrange [split $line] 12 14]
+	set curr_smiles [lrange [split $line] 15 17]
+	set curr_ques [lrange [split $line] 18 20]
+if {$week_reset == "1"} {
+	puts $tempwrite "$get_chan $get_nick $get_host [lindex $curr_lines 0] 0 0 [lindex $curr_words 0] 0 0 [lindex $curr_chars 0] 0 0 [lindex $curr_actions 0] 0 0 [lindex $curr_smiles 0] 0 0 [lindex $curr_ques 0] 0 0"
+		} else {
+	puts $tempwrite "$get_chan $get_nick $get_host [lindex $curr_lines 0] [lindex $curr_lines 1] 0 [lindex $curr_words 0] [lindex $curr_words 1] 0 [lindex $curr_chars 0] [lindex $curr_chars 1] 0 [lindex $curr_actions 0] [lindex $curr_actions 1] 0 [lindex $curr_smiles 0] [lindex $curr_smiles 1] 0 [lindex $curr_ques 0] [lindex $curr_ques 1] 0"
+		}
+	}
+}
+	close $tempwrite
+    file rename -force $temp $tpfile
+		}
+	}
+}
+
+
+proc topwords:smile {text} {
+	global black
+	set found_it [regexp -inline {(:|8|;)(-|o)?(>|D|\)|\]|\})} $text]
+if {$found_it != ""} {
+	return 1
+	} else {
+	return -1
+	}
+}
+
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 91 - 0
BlackTools/Modules/BT.Topic.tcl

@@ -0,0 +1,91 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#############################   TOPIC TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc topic:get {chan} {
+	global black
+	set getline ""
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+if {[string equal -nocase $read_modul "TOPIC"] && [string equal -nocase $chan $read_chan]} {	
+	set read_msg [join [lrange [split $line] 2 end]]
+	set getline [encoding convertfrom utf-8 $read_msg]
+	continue
+		}
+	}
+	close $file
+	return $getline
+}
+
+proc topic:autotopic {nick host hand chan} {
+	global black
+if {![validchan $chan]} { return }
+if {[setting:get $chan autotopic]} {
+	utimer 5 [list  topic:join:act $chan]
+	}
+}
+
+proc topic:join:act {chan} {
+	global black
+if {![botisop $chan]} {
+	return
+}
+	set gettopic ""
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+if {[string equal -nocase $read_modul "topic"] && [string equal -nocase $chan $read_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set gettopic [encoding convertfrom utf-8 $read_msg]
+	}
+}
+	close $file
+if {$gettopic != ""} {
+	set chantopic [topic $chan]
+	set url [join [setting:get $chan url]]
+if {$url != ""} {
+	set chantopic [string map [list "($url)" ""] $chantopic]
+}
+if {![string equal -nocase [concat [color:filter $chantopic]] [concat [color:filter $gettopic]]]} {
+if {$url != ""} {
+	putserv "TOPIC $chan :[join $gettopic] ($url)"
+			} else { putserv "TOPIC $chan :[join $gettopic]" }
+		}
+	}
+}
+
+proc topic:return {chan} {
+	global black
+	set gettopic ""
+	set file [open $black(join_file) r]
+while {[gets $file line] != -1} {
+	set read_modul [lindex [split $line] 0]
+	set read_chan [lindex [split $line] 1]
+if {[string equal -nocase $read_modul "topic"] && [string equal -nocase $chan $read_chan]} {	
+	set read_msg [lrange [split $line] 2 end]
+	set gettopic [encoding convertfrom utf-8 $read_msg]
+		}
+	}
+	close $file
+	return $gettopic
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 149 - 0
BlackTools/Modules/BT.VoiceMe.tcl

@@ -0,0 +1,149 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   VOICEME TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc voiceme:join {nick host hand chan} {
+	global black
+if {[isbotnick $nick]} {
+if {[setting:get $chan voiceme]} {
+	utimer 30 [list voiceme:check:valid $chan]	
+		}
+	}	
+}
+
+proc voiceme:mode {nick host hand chan mod who} {
+	global black
+if {[setting:get $chan voiceme]} {
+if {$mod == "+m"} {
+	utimer 30 [list voiceme:check:valid $chan]
+}
+if {$mod == "-m"} {
+	utimer 15 [list voiceme:check:nomod $chan]
+		}
+	}
+}
+
+proc voiceme:check:nomod {chan} {
+	global black botnick
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set chanmode [getchanmode $chan]
+if {[string match "*m*" $chanmode]} {
+	return
+}
+if {[info exists black(voiceme:stat:$chan)]} {
+	set replace(%chan%) $chan
+	set replace(%botnick%) $botnick
+	set text [black:color:set "" $black(say.$getlang.voiceme.2)]
+	set text [join $text]
+	puthelp "PRIVMSG $chan :[string map [array get replace] $text]"
+if {[info exists black(voiceme:stat:$chan)]} {
+	unset black(voiceme:stat:$chan)
+		}
+if {[info exists black(voiceme:$chan:timer_start)]} {
+	unset black(voiceme:$chan:timer_start)
+		}
+	}
+}
+
+proc voiceme:get:time {chan} {
+	global black
+if {[setting:get $chan voiceme-showtime] != ""} {
+	set return_time [time_return_minute [setting:get $chan voiceme-showtime]]
+} else {
+	set return_time [time_return_minute $black(voiceme:msgtime)]
+	}
+	return $return_time
+}
+
+proc voiceme:check:valid {chan} {
+	global black botnick
+	set found_timer 0
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set replace(%chan%) $chan
+	set replace(%botnick%) $botnick
+	set replace(%chanserv%) $black(chanserv)
+	set chanmode [getchanmode $chan]
+if {[info exists black(voiceme:stat:$chan)]} {
+	return
+}
+if {[string match "*m*" $chanmode]} {
+	set black(voiceme:stat:$chan) 1
+if {[setting:get $chan nologged]} {
+	set text [black:color:set "" $black(say.$getlang.voiceme.6)]
+} else {
+	set text [black:color:set "" $black(say.$getlang.voiceme.1)]
+}
+	set text [join $text]
+	puthelp "PRIVMSG $chan :[string map [array get replace] $text]"
+if {![info exists black(voiceme:$chan:timer_start)]} {
+	set black(voiceme:$chan:timer_start) [voiceme:get:time $chan]
+		}
+	}
+}
+
+proc voiceme:showmsg_timer {chans} {
+	global black botnick
+	set found_entry 0
+	set unixtime [unixtime]
+foreach chan $chans {
+if {[setting:get $chan voiceme]} {
+
+if {[info exists black(lastaction:$chan)]} {
+	set total_anunt 0
+	set unixtime [unixtime]
+if {[setting:get $chan voiceme-showtime] != ""} {
+	set return_time [time_return_minute [setting:get $chan voiceme-showtime]]
+} else {
+	set return_time [time_return_minute $black(voiceme:msgtime)]
+}
+	set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
+if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
+	continue
+	}
+} else { continue }
+	set getlang [string tolower [setting:get $chan lang]]
+	set replace(%botnick%) $botnick
+	set replace(%chanserv%) $black(chanserv)
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set replace(%chan%) $chan
+if {![info exists black(voiceme:stat:$chan)]} {
+	continue
+			} else {
+if {[setting:get $chan nologged]} {
+	set text [black:color:set "" $black(say.$getlang.voiceme.6)]
+} else {
+	set text [black:color:set "" $black(say.$getlang.voiceme.1)]
+}
+	set text [join $text]
+	puthelp "PRIVMSG $chan :[string map [array get replace] $text]"
+	set found_entry 1
+			}
+		} else {
+if {[info exists black(voiceme:stat:$chan)]} {		
+	unset black(voiceme:stat:$chan)	
+			}
+if {[info exists black(voiceme:$chan:timer_start)]} {
+	unset black(voiceme:$chan:timer_start)
+			}
+		}
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 216 - 0
BlackTools/Modules/BT.VoiceOnMsg.tcl

@@ -0,0 +1,216 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   VOICEONMSG TCL   ##########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc voiceonmsg:public:me {nick host hand chan keyword arg} {
+	global black
+if {[string equal -nocase $keyword "ACTION"]} {
+	voiceonmsg:public $nick $host $hand $chan $arg
+	}
+}
+
+proc voiceonmsg:public {nick host hand chan arg} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+if {[setting:get $chan voiceonmsg]} {
+if {[matchattr $hand "nmo|MAOV" $chan]} {
+	return
+}
+
+if {![info exists black(voiceonmsg:list:$chan)]} {
+	set black(voiceonmsg:list:$chan) ""
+}
+if {[isvoice $nick $chan]} { return }
+if {[isop $nick $chan]} { return }
+if {![botisop $chan]} { return }
+if {![info exists black(voiceonmsg:$host:$chan)]} {
+if {[lsearch -exact [string tolower $black(voiceonmsg:list:$chan)]  [string tolower $host]] == -1} {
+	lappend black(voiceonmsg:list:$chan) $host
+}
+	set black(voiceonmsg:$host:$chan) 1
+	utimer 300 [list voiceonmsg:remove $host $chan]
+	return
+}
+if {[lsearch -exact [string tolower $black(voiceonmsg:list:$chan)]  [string tolower $host]] == -1} {
+	lappend black(voiceonmsg:list:$chan) $host
+}
+	set current_count $black(voiceonmsg:$host:$chan)
+	set black(voiceonmsg:$host:$chan) [expr $current_count + 1]
+	
+foreach tmr [utimers] {
+if {[string match -nocase "*voiceonmsg:remove:expire $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+			}	
+		}
+	utimer 300 [list voiceonmsg:remove:expire $host $chan]
+	set linenum [setting:get $chan voiceonmsg-linenum]
+if {$linenum == ""} {
+	set linenum $black(voiceonmsg:linenum)
+}
+if {$black(voiceonmsg:$host:$chan) >= $linenum} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {	
+	putserv "PRIVMSG $black(chanserv) :voice $chan $nick"
+} else {
+	pushmode $chan +v $nick
+}
+	voiceonmsg:remove $host $chan
+		}
+	}
+}
+
+proc voiceonmsg:remove {host chan} {
+	global black
+	foreach tmr [utimers] {
+if {[string match "*voiceonmsg:remove:expire $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+if {[string match "*voiceonmsg:remove $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+}
+
+proc voiceonmsg:remove:the_list {h chan} {
+	global black
+if {[info exists black(voiceonmsg:list:$chan)]} {
+if {[lsearch -exact [string tolower $black(voiceonmsg:list:$chan)] [string tolower $h]] > -1} {
+	set position [lsearch -exact [string tolower $black(voiceonmsg:list:$chan)] [string tolower $h]]
+	set black(voiceonmsg:list:$chan) [lreplace $black(voiceonmsg:list:$chan) $position $position]
+		}
+	}
+}
+
+proc voiceonmsg:remove:expire {host chan} {
+	global black
+	foreach tmr [utimers] {
+if {[string match "*voiceonmsg:remove:expire $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+		}
+	}
+if {[info exists black(voiceonmsg:$host:$chan)]} {
+	unset black(voiceonmsg:$host:$chan)
+	}
+}
+
+proc voiceonmsg:changenick {nick host hand chan newnick} {
+	global black
+if {![validchan $chan]} {
+	return
+}
+if {[setting:get $chan voiceonmsg]} {
+if {[info exists black(voiceonmsg:list:$chan)] && $black(voiceonmsg:list:$chan) != ""} {
+	set h $nick
+if {[lsearch -exact [string tolower $black(voiceonmsg:list:$chan)] [string tolower $h]] > -1} {
+	set position [lsearch -exact [string tolower $black(voiceonmsg:list:$chan)] [string tolower $h]]
+	set black(voiceonmsg:list:$chan) [lreplace $black(voiceonmsg:list:$chan) $position $position]
+			}
+	lappend black(voiceonmsg:list:$chan) $newnick
+if {[info exists black(voiceonmsg:$h:$chan)]} {
+	set black(voiceonmsg:$newnick:$chan) $black(voiceonmsg:$h:$chan)
+	unset black(voiceonmsg:$h:$chan)
+			}
+		}
+	}
+}
+
+proc voiceonmsg:part {nick host hand chan arg} {
+	global black
+	voiceonmsg:remove:expire $host $chan
+	voiceonmsg:remove:the_list $host $chan
+}
+
+proc voiceonmsg:split {nick host hand chan args} {
+	global black
+	voiceonmsg:remove:expire $host $chan
+	voiceonmsg:remove:the_list $host $chan
+}
+
+proc voiceonmsg:kick {nick host hand chan kicked reason} {
+	global black
+	set kickhost [getchanhost $kicked $chan]
+	voiceonmsg:remove:expire $kickhost $chan
+	voiceonmsg:remove:the_list $kickhost $chan
+}
+
+proc voiceonmsg:timer {chans} {
+	global black
+	set channels ""
+foreach chan $chans {
+	lappend channels $chan
+	}
+if {$channels != ""} {
+	voiceonmsg:act $channels 0
+	}
+}
+
+proc voiceonmsg:act {channels counter} {
+	global black
+	set chan [lindex $channels $counter]
+	set cc [expr $counter + 1]
+if {[info exists black(voiceonmsg:list:$chan)] && $black(voiceonmsg:list:$chan) != ""} {
+foreach nick [chanlist $chan] {
+	set h [getchanhost $nick $chan]
+	set position [lsearch -exact [string tolower $black(voiceonmsg:list:$chan)] [string tolower $h]]
+if {$position > -1} {
+	set handle [nick2hand $nick $chan]
+if {![matchattr $handle "-|gf" $chan]} {
+	set idletime [setting:get $chan voiceonmsg-idletime]
+if {$idletime == ""} {
+	set idletime $black(voiceonmsg:idletime)
+}
+	set idletime [time_return_minute $idletime]
+if {[getchanidle $nick $chan] >= $idletime} {
+if {[isvoice $nick $chan]} {
+if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {	
+	putserv "PRIVMSG $black(chanserv) :devoice $chan $nick"
+} else {
+	utimer 2 [list pushmode $chan -v $nick]
+				}
+			}	
+	voiceonmsg:remove:expire $h $chan
+	voiceonmsg:remove:the_list $h $chan
+		}
+	}
+} else {
+
+if {![info exists black(voiceonmsg:$h:$chan)]} {
+	voiceonmsg:remove:the_list $h $chan
+		} else {	
+	voiceonmsg:remove:expire $h $chan
+	voiceonmsg:remove:the_list $h $chan
+				}
+			}
+		}
+	}
+if {[lindex $channels $cc] == ""} {
+	return
+	} else {
+	voiceonmsg:act $channels $cc
+	}
+}
+
+proc remove:flood:join {chan} {
+	global black
+if {[info exists black(countflood:join:$chan)]} {
+	unset black(countflood:join:$chan)
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 155 - 0
BlackTools/Protections/BT.antibadquitpart.tcl

@@ -0,0 +1,155 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+######################   ANTIBADQUITPART TCL   ##########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badquitpart:protect {nick host hand chan arg} {
+global botnick black
+	set chan1 $chan
+	set arg [split $arg]
+	set found_pub ""
+	set found_color 0
+	set found_msgflood 0
+	set banmask [return_mask [return_host_num "antibadquitpart" $chan $host] $host $nick]
+if {![validchan $chan]} { return }
+if {[setting:get $chan badquitpart]} {
+	set handle [nick2hand $nick]
+foreach usr [userlist "-|AOMV" $chan] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $banmask]} {
+	return
+		}
+	}
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	set text [check:except $arg $chan $black(badquitpartwords) $black(badquitpartexcept) "BADQUITPART"]
+	set check_word [check:file:word $chan $text "BADQUITPART"]
+if {$check_word != ""} {
+	set found_pub $check_word
+}
+if {$found_pub != ""} {
+	blacktools:banner:2 $nick "ANTIBADQUITPART:$found_pub" $chan $chan1 $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "ANTIBADQUITPART:$found_pub" $c $c $host "1"
+				}
+	blacktools:link_ban2 [link:get] 0
+			} else { who:chan $chan }
+	return
+		}
+	}
+if {[setting:get $chan quitpartcolor]} {
+	set handle [nick2hand $nick]
+foreach usr [userlist "-|AOMV" $chan] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $banmask]} {
+	return
+		}
+	}
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+foreach color $black(badcolors) {
+if {[setting:get $chan quitpartcolor] && [string match -nocase $color $arg]} {
+	set found_color 1			
+	}
+}
+if {$found_color == "1"} {
+	blacktools:banner:2 $nick "ANTIBADQUITPART:COLOR" $chan $chan $host "0"	
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "ANTIBADQUITPART:COLOR" $c $c $host "1"
+				}
+			}
+	return
+		}
+	}
+if {[setting:get $chan quitpartmsgflood]} {
+	set handle [nick2hand $nick]
+foreach usr [userlist "-|AOMV" $chan] {
+	set hst [getuser $usr hosts]
+foreach hhost $hst {
+if {[string match -nocase $hhost $banmask]} {
+	return
+		}
+	}
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	set getlongchar [setting:get $chan quitpartmsgflood-char]
+if {$getlongchar == ""} { set getlongchar "$black(badquitpartmsgchar)" }
+if {[string length $arg] >= $getlongchar} {
+	set found_msgflood 1
+		}
+if {$found_msgflood == "1"} {
+if {$black(badquitpartmode) != ""} {
+	putserv "MODE $chan +$black(badquitpartmode)"
+	utimer $black(badquitpartsecunde) [list badquitpart:removemode $chan]
+}
+	blacktools:banner:2 $nick "ANTIBADQUITPART:MSGFLOOD" $chan $chan $host "0"	
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "ANTIBADQUITPART:MSGFLOOD" $c $c $host "1"
+				}
+			}
+	return
+		}
+	}
+}
+
+proc badquitpart:removemode {chan} {
+	global black
+	putserv "MODE $chan -$black(badquitpartmode)"
+}
+
+proc badquitpartsign:protect {nick host hand chan arg} {
+	badquitpart:protect $nick $host $hand $chan $arg
+}
+
+proc badquitpart:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set except [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set except [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $except $type $number "badquitpart"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 108 - 0
BlackTools/Protections/BT.antibadtext.tcl

@@ -0,0 +1,108 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   ANTIBADTEXT TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+############################# AntiColor ################################
+
+proc colortext:process {nick host hand chan arg type} {
+	global black
+if {![validchan $chan]} { return }
+	set handle [nick2hand $nick]
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {[isbotnick $nick]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+switch $type {
+anticolor {
+	set textfind "\003" 
+}
+
+antibold  {
+	set textfind "\002"
+}
+
+antiunderline {
+	set textfind "\037"
+	}	
+}
+if {[string match "*$textfind*" $arg]} {
+	blacktools:banner:1 $nick [string toupper "$type"] $chan $host [get:banmethod $type $chan] [link:chan:get $chan]	
+	return 1	
+	}	
+}
+
+proc anticolor:protect {nick host hand chan arg} {
+	colortext:process $nick $host $hand $chan $arg "anticolor"
+}
+
+############################# AntiBold ################################
+
+proc antibold:protect {nick host hand chan arg} {
+	colortext:process $nick $host $hand $chan $arg "antibold"
+}
+
+############################ AntiUnderline ###############################
+
+proc antiunderline:protect {nick host hand chan arg} {
+	colortext:process $nick $host $hand $chan $arg "antiunderline"
+}
+
+############################## AntiCaps #################################
+
+proc anticaps:protect {nick host hand chan arg} {
+global black botnick
+	set handle [nick2hand $nick]
+	set found_caps 0
+	set argz [split $arg]
+if {![validchan $chan]} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	set caps($nick:$host) 0
+foreach a [split $arg] {
+if {[onchan $a $chan]} {
+	set search [lsearch -exact $argz $a]
+	set argz [lreplace $argz $search $search]
+	}
+}
+foreach word [split $argz {}] {
+if [string match \[A-Z\] $word] {
+	incr caps($nick:$host)
+	}
+}
+
+if {$caps($nick:$host) == 0} {
+  return
+}
+
+if {[string length $argz] < 20} {return}
+	set capchar [string length $argz]
+if {[expr 100 * $caps($nick:$host) / $capchar] > $black(anticapscount)} {
+	set found_caps 1
+}
+if {$found_caps == "1"} {
+	blacktools:banner:1 $nick "ANTICAPS" $chan $host [get:banmethod "anticaps" $chan] [link:chan:get $chan]	
+	return 1	
+	}
+}
+
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 71 - 0
BlackTools/Protections/BT.antibadword.tcl

@@ -0,0 +1,71 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   ANTIBADWORD TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antibadword:protect {nick host hand chan arg} {
+global black botnick username
+	if {![validchan $chan]} { return }
+	set handle [nick2hand $nick]
+	set found_word ""
+	set text [color:filter [split $arg]]
+	set split_check ""
+	set get_pers ""
+if {![validchan $chan]} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	set text [check:except $text $chan $black(antibadword) $black(except_badwords) "BADWORD"]
+	set check_word [check:file:word $chan $text "BADWORD"]
+if {$check_word != ""} {
+if {[regexp {[:]} $check_word]} {
+	set split_check [split $check_word ":"]
+	set check_word [join [lindex $split_check 0]]
+	set get_pers [lindex $split_check 1]
+}
+if {$get_pers != ""} {
+	blacktools:banner:1 $nick "ANTIBADWORD:$check_word" $chan $host [get:banmethod "antibadword:$get_pers" $chan] [link:chan:get $chan]
+} else {
+	blacktools:banner:1 $nick "ANTIBADWORD:$check_word" $chan $host [get:banmethod "antibadword" $chan] [link:chan:get $chan]
+}	
+	return 1
+	}
+}
+
+proc badword:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set badw [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set badw [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badw $type $number "badword"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 57 - 0
BlackTools/Protections/BT.antichanflood.tcl

@@ -0,0 +1,57 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#######################   ANTICHANFLOOD TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antifloodchan:protect {nick host hand chan arg} {
+global black
+if {![validchan $chan]} { return }
+	set handle [nick2hand $nick]
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {[isbotnick $nick]} { return  }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+	set getset [setting:get $chan chanflood]
+if {$getset == ""} { set getset "$black(antichanfloodrepeats)" }
+	set number [scan $getset %\[^:\]]
+	set time [scan $getset %*\[^:\]:%s]
+if {![info exists black(repeat:$host:$chan:flood)]} { 
+	set black(repeat:$host:$chan:flood) 0 
+}
+foreach tmr [utimers] {
+if {[string match "*chanflood:unset $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+	incr black(repeat:$host:$chan:flood)
+	utimer $time [list chanflood:unset $host $chan]
+if {$black(repeat:$host:$chan:flood) >= $number} {
+	blacktools:banner:1 $nick "ANTICHANFLOOD" $chan $host [get:banmethod "antichanflood" $chan] [link:chan:get $chan]
+	chanflood:unset $host $chan
+	return 1
+	}
+}
+
+proc chanflood:unset {host chan} {
+	global black
+if {[info exists black(repeat:$host:$chan:flood)]} { 
+	unset black(repeat:$host:$chan:flood)
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 35 - 0
BlackTools/Protections/BT.antictcp.tcl

@@ -0,0 +1,35 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   ANTICTCP TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antictcp:protect {nick host hand chan keyword arg} {
+global black botnick
+if {![validchan $chan]} { return }
+if {[setting:get $chan antictcp]} {
+	set handle [nick2hand $nick]
+if {[string equal -nocase "action" $keyword] || [string equal -nocase "chat" $keyword]} {return}
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return}
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	blacktools:banner:1 $nick "ANTICTCP" $chan $host [get:banmethod "antictcp" $chan] [link:chan:get $chan]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 121 - 0
BlackTools/Protections/BT.antijoinflood.tcl

@@ -0,0 +1,121 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#######################   ANTIJOINFLOOD TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc joinflood:unlock {chan modes} {
+	global black
+	putquick "MODE $chan -$modes"
+if {[info exists black(floodjoin:on:$chan)]} {
+	unset black(floodjoin:on:$chan)
+	}
+}
+
+proc joinflood:unset {chan} {
+	global black
+if {[info exists black(antijoinflood:$chan)]} {
+	unset black(antijoinflood:$chan)
+	}
+}
+
+proc joinflood:unset:host {chan host} {
+	global black
+if {[info exists black(antijoinflood:$host:$chan)]} {
+	unset black(antijoinflood:$host:$chan)
+	}
+}
+
+proc joinflood:protect {nick host hand chan} {
+global black
+if {[setting:get $chan antijoinflood]} {
+if {[isbotnick $nick]} { return }
+	set check_webchat [check:webchat $host]
+if {$check_webchat == "1"} {
+	set ident [lindex [split $host "@"] 0]
+	set host "*!$ident@*"
+}
+	set user_getset [setting:get $chan antijoinflood-userset]
+	set getset [setting:get $chan joinflood]
+if {$user_getset == ""} { set user_getset $black(antijoinflood_user_joins) }
+if {$getset == ""} { set getset $black(joinflood:protect) }
+	set user_num [scan $user_getset %\[^:\]]
+	set user_time [scan $user_getset %*\[^:\]:%s]
+	set num [scan $getset %\[^:\]]
+	set time [scan $getset %*\[^:\]:%s]
+	set replace(%chan%) $chan
+	
+if {![info exists black(floodjoin:on:$chan)]} {
+foreach tmr [utimers] {
+if {[string match "*joinflood:unset $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {![info exists black(antijoinflood:$chan)]} { 
+	set black(antijoinflood:$chan) 0 
+}
+	incr black(antijoinflood:$chan)
+	utimer $time [list joinflood:unset $chan]
+if {$black(antijoinflood:$chan) >= "$num"} {
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+	set black(floodjoin:on:$chan) 1
+	set modes [joinflood:getmodes $chan]
+if {$modes != ""} {
+	putquick "MODE $chan +$modes" ; utimer $black(nomodetime) [list joinflood:unlock $chan $modes]
+}
+if {$black(fjoinhow) == "1"} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set getmessage $black(say.$getlang.antijoinflood.2)
+	set message [string map [array get replace] $getmessage]
+	puthelp "NOTICE @$chan :$message"
+				}
+			}
+		}
+foreach tmr [utimers] {
+if {[string match "*joinflood:unset:host $chan $host*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {![info exists black(antijoinflood:$host:$chan)]} { 
+	set black(antijoinflood:$host:$chan) 0 
+}
+	incr black(antijoinflood:$host:$chan)
+	utimer $user_time [list joinflood:unset:host $chan $host]
+if {$black(antijoinflood:$host:$chan) >= "$user_num"} {
+	blacktools:banner:2 $nick "ANTIJOINFLOOD" $chan $chan $host "0"
+	who:chan $chan
+if {[info exists black(antijoinflood:$host:$chan)]} {
+	unset black(antijoinflood:$host:$chan)
+			}
+		}	
+	}
+}
+
+proc joinflood:getmodes {chan} {
+	global black
+	set current_modes [getchanmode $chan]
+	set putmode ""
+	set chanmodes [string map {"+" ""} [split [lindex $current_modes 0] ""]]
+foreach mod [split $black(modes) ""] {
+if {[lsearch $chanmodes $mod] < 0} {
+	lappend putmode $mod
+	}
+}
+	return $putmode	
+}
+	
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 37 - 0
BlackTools/Protections/BT.antilongtext.tcl

@@ -0,0 +1,37 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   ANTILONGTEXT TCL   ###########################
+#########################################################################
+##						                          					   ##
+##   BlackTools  : http://blacktools.tclscripts.net	                   ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	                   ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                              					   ##
+#########################################################################
+
+proc antilongtext:protect {nick host hand chan arg} {
+global black botnick
+if {![validchan $chan]} { return }
+	set handle [nick2hand $nick]
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return } 
+	set getlongchar [setting:get $chan antilongtextmax]
+if {$getlongchar == ""} { set getlongchar "$black(longchar)" }
+if {[string length $arg] >= $getlongchar} {
+	blacktools:banner:1  $nick "ANTILONGTEXT" $chan $host [get:banmethod "antilongtext" $chan] [link:chan:get $chan]
+	return 1	
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 35 - 0
BlackTools/Protections/BT.antinotice.tcl

@@ -0,0 +1,35 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   ANTINOTICE TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antinotice:protect {nick host hand arg chan} {
+global black botnick
+if {![validchan $chan]} { return }
+if {[setting:get $chan antinotice]} {
+	set handle [nick2hand $nick]
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+if {[string equal -nocase $chan $botnick]} { return }
+	blacktools:banner:1 $nick "ANTINOTICE" $chan $host [get:banmethod "antinotice" $chan] [link:chan:get $chan]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 95 - 0
BlackTools/Protections/BT.antipub.tcl

@@ -0,0 +1,95 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   ANTIPUB TCL   ##############################
+#########################################################################
+##						                      						   ##
+##   BlackTools  : http://blacktools.tclscripts.net		               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	  	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                              					   ##
+#########################################################################
+
+proc antipub:protect {nick host hand chan arg} {
+global black botnick
+	set text [color:filter [split $arg]]
+	set found_pub 0
+	set handle [nick2hand $nick]
+	set found_pub ""
+	set banword ""
+if {![validchan $chan]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+	set text [check:except $text $chan $black(antipubword) $black(antipubexcept) "ANTIPUB"]
+	set check_word [check:file:word $chan $text "ANTIPUB"]
+if {$check_word != ""} {
+	blacktools:banner:1 $nick "ANTIPUB:$check_word" $chan $host [get:banmethod "antipub" $chan] [link:chan:get $chan]
+	return 1
+	}
+}
+
+proc check:except {text chan type except prot} {
+	global black
+	set text [split $text]
+	set counter_word 0
+	set counter_except 0
+	set found_it 0
+	
+foreach ex $except {
+	set position [lsearch -exact [string tolower $text] [string tolower $ex]]
+if {$position > -1} {
+	set text [lreplace $text $position $position]
+	}	
+}
+	set file [open $black(add_file) r]
+	set size [file size $black(add_file)]
+	set data [split [read $file $size] \n]
+	close $file
+foreach line $data {
+if {$line != ""} {
+	set channel [lindex [split $line] 0]
+	set getype [lindex [split $line] 1]
+	set link [join [lrange [split $line] 3 end]]
+foreach word $text {
+if {[string equal -nocase $channel $chan] && [string equal -nocase $getype $prot] && [regexp {^[+]} $link] && [string match -nocase [string map {"+" ""} $link] $word]} {
+	set position [lsearch -exact [string tolower $text] [string tolower $word]]
+if {$position > -1} {
+	set text [lreplace $text $position $position]
+				}
+			}
+		}
+	}
+}
+	return $text
+}
+
+proc antipub:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set except [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set except [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $except $type $number "antipub"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 71 - 0
BlackTools/Protections/BT.antirepeat.tcl

@@ -0,0 +1,71 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+########################   ANTIREPEAT TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antirepeat:protect {nick host hand chan arg} {
+global black botnick
+	set arg [color:filter [join [split $arg]]]
+	set handle [nick2hand $nick]
+if {![validchan $chan]} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[isbotnick $nick]} { return }
+	set repeatset [setting:get $chan antirepeat-setting]
+if {$repeatset == ""} { set repeatset "$black(antirepeat:repeats)" }
+	set number [scan $repeatset %\[^:\]]
+	set time [scan $repeatset %*\[^:\]:%s]
+foreach tmr [utimers] {
+if {[string match "*antirepeat:remove $host $chan $arg*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}	
+}
+
+if {![info exists black(repeat:$host:$chan:$arg)]} { 
+	set black(repeat:$host:$chan:$arg) 0 
+}
+	incr black(repeat:$host:$chan:$arg)
+	utimer $time [list antirepeat:remove $host $chan $arg]
+
+if {$black(repeat:$host:$chan:$arg) >= $number} {
+	blacktools:banner:1 $nick "ANTIREPEAT" $chan $host [get:banmethod "antirepeat" $chan] [link:chan:get $chan]
+	antirepeat:remove $host $chan $arg
+	return 1
+	}
+}
+
+proc antirepeat:remove {host chan arg} {
+	global black
+	
+foreach tmr [utimers] {
+if {[string match "*antirepeat:remove $host $chan $arg*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}	
+}
+
+if {[info exists black(repeat:$host:$chan:$arg)]} {
+	unset black(repeat:$host:$chan:$arg)
+	}
+}
+
+proc antirepeat:protect:me {nick host hand chan keyword arg} {
+	antirepeat:protect $nick $host $hand $chan $arg
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 170 - 0
BlackTools/Protections/BT.antispam.tcl

@@ -0,0 +1,170 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   ANTISPAM TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc antispam:protect {nick host hand arg} {
+global botnick black
+	set handle [nick2hand $nick]
+	set channels ""
+foreach chans [channels] {
+if {[setting:get $chans antispam]} {
+	set found_spam ""
+	set text [color:filter $arg]
+	set text [check:except $text $chans $black(spamword) $black(spamwordexcept) "ANTISPAM"]
+	set check_word [check:file:word $chans $text "ANTISPAM"]
+if {$check_word == ""} {
+	continue
+} else {
+	set found_spam $check_word
+}
+	set chan1 $chans
+if {![validchan $chans]} { return }
+if {[matchattr $handle $black(exceptflags) $chans]} { return }
+	set bl_protect [blacktools:protect $nick $chans]
+if {$bl_protect == "1"} { return }
+if {[onchan $nick $chans]} {
+if {![botisop $chans] && ![setting:get $chans xonly]} { return }
+if {[isbotnick $nick]} { return }
+	lappend channels $chans
+if {[link:status $chans] == "1"} {
+	foreach c [link:chan:get $chans] {
+	lappend channels $c
+					}
+				}
+			}
+		}
+	}
+if {$channels != ""} {
+	antispam:act:ban [join $channels] 0 $nick $host $found_spam
+	}
+}
+
+proc antispam:act:ban {channels num nick host found_spam} {
+	global black
+	set chan [join [lindex [split $channels] $num]]
+	set inc 0
+if {$chan == ""} {
+	return
+}
+if {[onchan $nick $chan]} {
+	blacktools:banner:2 $nick "ANTISPAM:$found_spam" $chan $chan $host "0"
+	who:chan $chan
+}
+	set inc [expr $num + 1]
+if {[lindex $channels $inc] != ""} {
+	utimer 5 [list antispam:act:ban $channels $inc $nick $host $found_spam]
+	}
+}
+
+proc antispam:protect:msg {nick host hand chan} {
+global black
+if {![validchan $chan]} { return }
+if {[setting:get $chan antispam]} {
+if {[isbotnick $nick]} { return }
+if {[info exists black(turnOnFlood:$chan)]} {
+	return
+}
+if {[setting:get $chan spamjoinmessage]} {
+if {[matchattr $hand $black(exceptflags) $chan]} { return }
+	set getmsg [setting:get $chan antispam-message]
+if {$getmsg == ""} { 
+	set getlang [string tolower [setting: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 text [black:color:set "" $getmsg]
+	set reply [join $text]
+	set reply [string map [array get replace] $reply]
+	puthelp "PRIVMSG $nick :$reply"
+		} 
+	}
+}
+
+proc antispam:protect:cycle {channels} {
+global black
+	set chans ""
+foreach chan $channels {
+if {![channel get $chan inactive]} {
+	lappend chans $chan
+		}
+	}
+if {$chans != ""} {
+	antispam:act $chans 0
+	}
+}
+
+proc antispam:act {channels counter} {
+	global black
+	set notcycle 0
+	set chan [join [lindex [split $channels] $counter]]
+	set cc [expr $counter + 1]
+if {[info exists black(lastaction:$chan)]} {
+	set total_anunt 0
+	set unixtime [unixtime]
+if {[setting:get $chan antispam-scantime] != ""} {
+	set return_time [time_return_minute [setting:get $chan antispam-scantime]]
+} else {
+	set return_time [time_return_minute $black(spamcycle)]
+}
+	set time [expr [expr [expr $return_time * $black(entry:shown)] * 60] + $unixtime]
+if {[expr $unixtime - $black(lastaction:$chan)] > [expr $time - $unixtime]} {
+	set notcycle 1
+	}
+} else { set notcycle 1 }
+if {$notcycle != "1"} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+	set reason $black(say.$getlang.antispam.11)
+	set len [llength $reason] 
+    set random [expr int(rand()*$len)] 
+    set reason [lindex $reason $random]
+	set text [black:color:set "" $reason]
+	set reply [join $text]
+	putserv "PART $chan :$reply"; putserv "JOIN $chan"
+	}
+if {[lindex $channels $cc] == ""} {
+	return
+	} else {
+	utimer 10 [list antispam:act $channels $cc]
+	}
+}
+
+
+proc antispam:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set antisp [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set antisp [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badh $type $number "antispam"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 68 - 0
BlackTools/Protections/BT.badhost.tcl

@@ -0,0 +1,68 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   BADHOST TCL   ##############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badhost:protect {nick host hand chan} {
+global black botnick
+	set uhost [lindex [split $host @] 1]
+	set chan1 $chan
+	set found_bad ""
+if {![validchan $chan]} { return }
+if {[setting:get $chan badhost]} {
+if {[matchattr $hand $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+	set gethost [check:except $uhost $chan $black(badhostword) $black(badhostexcept) "BADHOST"]
+	set check_word [check:file:word $chan $gethost "BADHOST"]
+if {$check_word != ""} {
+	set found_bad $check_word
+}
+if {$found_bad != ""} {
+	blacktools:banner:2 $nick "BADHOST:$found_bad" $chan $chan1 $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "BADHOST:$found_bad" $c $c $host "1"
+				}
+	blacktools:link_ban2 [link:get] 0
+			} else { who:chan $chan }
+		}
+	}	
+}
+
+proc badhost:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set badh [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set badh [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badh $type $number "badhost"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 67 - 0
BlackTools/Protections/BT.badident.tcl

@@ -0,0 +1,67 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   BADIDENT TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badident:protect:join {nick host hand chan} {
+global black botnick
+	set found_ident ""
+if {![validchan $chan]} { return }
+if {[setting:get $chan badident]} {
+	set chan1 $chan
+if {[matchattr $hand $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+	set ident "[string map {"~" ""} [string tolower [lindex [split $host "@"] 0]]]"
+	set text [check:except $ident $chan $black(badidentwords) $black(badidentexcept) "BADIDENT"]
+	set check_word [check:file:word $chan $text "BADIDENT"]
+if {$check_word != ""} {
+	set found_ident $check_word
+}
+if {$found_ident != ""} {
+	blacktools:banner:2 $nick "BADIDENT:$found_ident" $chan $chan1 $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "BADIDENT:$found_ident" $c $c $host "1"
+				}
+	blacktools:link_ban2 [link:get] 0
+			} else { who:chan $chan }	
+		}
+	}
+}
+
+proc badident:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set badi [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set badi [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badi $type $number "badident"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 164 - 0
BlackTools/Protections/BT.badnick.tcl

@@ -0,0 +1,164 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+###########################   BADNICK TCL   #############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badnick:protect:join {nick host hand chan} {
+global black botnick
+	set found_nick ""
+if {![validchan $chan]} { return }
+	set chan1 $chan
+if {[setting:get $chan badnick]} {
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+if {[matchattr $hand $black(exceptflags) $chan]} { return }
+	set getnick [check:except $nick $chan $black(badnickwords) $black(badnickexcept) "BADNICK"]
+	set check_word [check:file:word $chan $getnick "BADNICK"]
+if {$check_word != ""} {
+	set found_nick $check_word
+}
+if {$found_nick != ""} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[setting:get $chan badnick-bmethod] == ""} {
+	set bmethod $black(badnbanmethod)
+} else { set bmethod [setting:get $chan badnick-bmethod] }
+
+if {$bmethod == "2"} {
+	blacktools:banner:2 $nick "BADNICK:$found_nick" $chan $chan1 $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "BADNICK:$found_nick" $c $c $host "1"
+					}
+	blacktools:link_ban2 [link:get] 0
+				} else { who:chan $chan }
+	return
+			}
+	foreach tmr [utimers] {
+if {[string match "*badnick:check:again $nick $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {[setting:get $chan badnick-banwait] == ""} {
+	set wait_time $black(badnbanwait)
+	utimer $black(badnbanwait) [list badnick:check:again $nick $chan $host]
+} else {
+	set wait_time [setting:get $chan badnick-banwait]
+	utimer $wait_time [list badnick:check:again $nick $chan $host]
+}
+	set text [black:color:set "" $black(say.$getlang.badnick.10)]
+	set reply [join $text]
+	set replace(%time%) $wait_time
+	set message [string map [array get replace] $reply]
+	putquick "PRIVMSG $nick :\[$chan\] $message"
+		}			
+	}
+}
+
+proc badnick:check:again {nick chan host} {
+	global black
+if {[onchan $nick $chan]} {
+	blacktools:banner:2 $nick "BADNICK:$nick" $chan $chan $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "BADNICK:$nick" $c $c $host "1"
+			}
+	blacktools:link_ban2 [link:get] 0
+		} else { who:chan $chan }
+	}
+}
+
+proc badnick:protect:change {nick host hand chan newnick} {
+global black botnick
+	set handle [nick2hand $nick]
+	set found_nick ""
+if {![validchan $chan]} { return }
+if {[setting:get $chan badnick]} {
+	set chan1 $chan
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+	set newnick [check:except $newnick $chan $black(badnickwords) $black(badnickexcept) "BADNICK"]
+	set check_word [check:file:word $chan $newnick "BADNICK"]
+if {$check_word != ""} {
+	set found_nick $check_word
+}
+foreach badnick [string tolower $black(badnickwords)] {
+if {[string match $badnick [string tolower $newnick]]} {
+	set found_nick $badnick
+			}
+		}
+if {$found_nick != ""} {
+	set getlang [string tolower [setting:get $chan lang]]
+if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
+if {[setting:get $chan badnick-bmethod] == ""} {
+	set bmethod $black(badnbanmethod)
+} else { set bmethod [setting:get $chan badnick-bmethod] }
+
+if {$bmethod == "2"} {
+	blacktools:banner:2 $newnick "BADNICK:$found_nick" $chan $chan $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $newnick "BADNICK:$found_nick" $c $c $host "1"			
+					}
+	blacktools:link_ban2 [link:get] 0
+				} else { who:chan $chan }
+	return
+				}
+foreach tmr [utimers] {
+if {[string match "*badnick:check:again $newnick $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {[setting:get $chan badnick-banwait] == ""} {
+	set wait_time $black(badnbanwait)
+	utimer $black(badnbanwait) [list badnick:check:again $newnick $chan $host]
+} else {
+	set wait_time [setting:get $chan badnick-banwait]
+	utimer $wait_time [list badnick:check:again $newnick $chan $host]
+}
+	set text [black:color:set "" $black(say.$getlang.badnick.10)]
+	set reply [join $text]
+	set replace(%time%) $wait_time
+	set message [string map [array get replace] $reply]
+	putquick "PRIVMSG $newnick :\[$chan\] $message"
+		}		
+	}
+}
+proc badnick:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set badn [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set badn [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badn $type $number "badnick"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 84 - 0
BlackTools/Protections/BT.badrealname.tcl

@@ -0,0 +1,84 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#########################   BADREALNAME TCL   ###########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc badrealname:protect:join {nick host hand chan} {
+global botnick black
+	set ::cchan $chan
+	set ::nnick $nick
+	set ::hhost $host
+	set handle [nick2hand $nick]
+if {[setting:get $chan badrealname]} {
+if {[isbotnick $nick]} {
+	return
+}
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {[onchan $nick $chan]} {
+	putquick "WHOIS $nick"
+	bind RAW - 311 badrealname:protect
+		}
+	}
+}
+
+proc badrealname:protect { from keyword arguments } {
+global botnick black
+	set chan $::cchan
+	set nick $::nnick	
+	set host $::hhost
+	set chan1 $chan
+	set found_realname ""
+	set fullname [string range [join [lrange [split $arguments] 5 end]] 1 end]
+	set text [check:except $fullname $chan $black(badfwords) $black(badfexcept) "BADREALNAME"]
+	set check_word [check:file:word $chan $text "badrealname"]
+if {$check_word != ""} {
+	set found_realname $check_word
+}
+if {$found_realname != ""} {
+	blacktools:banner:2 $nick "badrealname:$found_realname" $chan $chan1 $host "0"
+if {[link:status $chan] == "1"} {
+	foreach c [link:chan:get $chan] {
+	blacktools:banner:2 $nick "badrealname:$found_realname" $c $c $host "1"
+		}
+	blacktools:link_ban2 [link:get] 0
+	} else { who:chan $chan }
+}
+	unbind RAW - 311 badrealname:protect
+}
+
+proc badrealname:module {nick host hand chan arg} {
+	global black lastbind
+	set type 0
+	set chan1 "$chan"
+	set why [lindex [split $arg] 0]
+	set badf [join [lrange [split $arg] 1 end]]
+	set number [lindex [split $arg] 1]
+if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
+	set chan "$why"
+	set why [lindex [split $arg] 1]
+	set badf [join [lrange [split $arg] 2 end]]
+	set number [lindex [split $arg] 2]
+}
+	set return [blacktools:mychar $lastbind $hand]
+if {$return == "0"} {
+		return
+}
+	prot:module:process $nick $host $hand $chan $chan1 $why $badf $type $number "badrealname"
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 91 - 0
BlackTools/Protections/BT.inviteban.tcl

@@ -0,0 +1,91 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   INVITEBAN TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc inviteban:protect {from type arg} {
+	global black
+	set invitechan [lindex [split $arg] 1]
+	set ::invitechan $invitechan
+if {[string match -nocase "*!*" $from]} {
+	set split_from [split $from "!"]
+	set from_nick [lindex [split $split_from] 0]
+if {[string equal -nocase $from_nick $black(chanserv)]} {
+	return
+}
+	putserv "USERHOST :$from_nick"
+	bind RAW - 302 inviteban:gethost
+	return
+}
+if {[string equal -nocase $from $black(chanserv)]} {
+	return
+}
+	putserv "USERHOST :$from"
+	bind RAW - 302 inviteban:gethost
+}
+
+proc inviteban:gethost {from keyword arguments} {
+	global black
+	set invitechan $::invitechan
+	set hostname [lindex [split $arguments] 1]
+	set channels ""
+if {[regexp {\+} $hostname]} {
+	set split_host [split $hostname "+"]
+} else {
+	set split_host [split $hostname "-"]
+}
+	set mask [lindex $split_host 1]
+	set getnick [string map {
+			"=" ""
+			":" ""
+			} [lindex $split_host 0]]
+if {$getnick != ""} {
+foreach chan [channels] {
+	set bl_protect [blacktools:protect $getnick $chan]
+if {$bl_protect == "1"} { continue }
+if {[matchattr [nick2hand $getnick] $black(exceptflags) $chan]} {
+	continue
+}
+	lappend channels $chan
+		}
+	}
+if {$channels != ""} {
+	inviteban:act $channels 0 $mask $invitechan $getnick
+}
+	check:if:bind "inviteban:gethost" "302"
+}
+
+proc inviteban:act {channels num mask invitechan nick} {
+	global black
+	set chan [join [lindex [split $channels] $num]]
+	set inc 0
+if {$chan == ""} {
+	return
+}
+if {[setting:get $chan inviteban]} {
+if {[onchan $nick $chan]} {
+	blacktools:banner:2 $nick "INVITEBAN:[encoding convertto utf-8 $invitechan]" $chan $chan $mask "0"
+	who:chan $chan
+	}
+}
+	set inc [expr $num + 1]
+if {[lindex $channels $inc] != ""} {
+	utimer 5 [list inviteban:act $channels $inc $mask $invitechan $nick]
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 64 - 0
BlackTools/Protections/BT.nickflood.tcl

@@ -0,0 +1,64 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+##########################   NICKFLOOD TCL   ############################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc nickflood:protect {nick host hand chan arg} {
+global black
+if {![validchan $chan]} { return }
+if {[setting:get $chan nickflood]} {
+	set handle [nick2hand $nick]
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {[isbotnick $nick]} { return  }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+	set getset [setting:get $chan nickflood-repeat]
+if {$getset == ""} { set getset "$black(nickfloodrepeats)" }
+	set number [scan $getset %\[^:\]]
+	set time [scan $getset %*\[^:\]:%s]
+if {![info exists black(nick:$host:$chan:flood)]} { 
+	set black(nick:$host:$chan:flood) 0 
+}
+foreach tmr [utimers] {
+if {[string match "*nickflood:unset $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+	incr black(nick:$host:$chan:flood)
+	utimer $time [list nickflood:unset $host $chan]
+if {$black(nick:$host:$chan:flood) >= $number} {
+	blacktools:banner:1 $nick "NICKFLOOD:$arg" $chan $host [get:banmethod "nickflood" $chan] [link:chan:get $chan]
+	nickflood:unset $host $chan
+		}
+	}
+}
+
+
+proc nickflood:unset {host chan} {
+	global black
+foreach tmr [utimers] {
+if {[string match "*nickflood:unset $host $chan*" [join [lindex $tmr 1]]]} {
+	killutimer [lindex $tmr 2]
+	}
+}
+if {[info exists black(nick:$host:$chan:flood)]} { 
+	unset black(nick:$host:$chan:flood)
+	}
+}
+
+##############
+#########################################################################
+##   END                                                               ##
+#########################################################################

+ 50 - 0
BlackTools/Protections/BT.repetitivechars.tcl

@@ -0,0 +1,50 @@
+#########################################################################
+##          BlackTools - The Ultimate Channel Control Script           ##
+##                    One TCL. One smart Eggdrop                       ##
+#########################################################################
+#######################   RepetitiveChars TCL   #########################
+#########################################################################
+##						                       ##
+##   BlackTools  : http://blacktools.tclscripts.net	               ##
+##   Bugs report : http://www.tclscripts.net/	                       ##
+##   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
+##   Online Help : irc://irc.undernet.org/tcl-help 	               ##
+##                 #TCL-HELP / UnderNet                                ##
+##                 You can ask in english or romanian                  ##
+##					                               ##
+#########################################################################
+
+proc repetitivechars:protect {nick host hand chan arg} {
+global black
+if {![validchan $chan]} { return }
+	set handle [nick2hand $nick]
+if {![botisop $chan] && ![setting:get $chan xonly]} { return }
+if {[matchattr $handle $black(exceptflags) $chan]} { return }
+if {[isbotnick $nick]} { return  }
+	set bl_protect [blacktools:protect $nick $chan]
+if {$bl_protect == "1"} { return }
+	set getnum [setting:get $chan repetitivechars-char]
+if {$getnum == ""} { set getnum "$black(repetitivechars:num)" }
+	set llength_chars [string length $arg]
+	set chars [split $arg ""]
+	set counter 0
+	set current_char ""
+for {set i 0 } { $i < $llength_chars } { set i [expr $i + 1] } {
+	set char [lindex $chars $i]
+if {$current_char == ""} {
+	set current_char $char
+	set counter [expr $counter + 1]
+} else {
+if {$char != "$current_char"} {
+	set current_char $char
+	set counter 1
+	} else {
+	set counter [expr $counter + 1]
+		}
+	}
+}
+if {$counter >= $getnum} {
+	blacktools:banner:1 $nick "repetitivechars" $chan $host [get:banmethod "repetitivechars" $chan] [link:chan:get $chan]
+		return 1
+	}
+}

+ 349 - 0
BlackTools/README/CHANGELOG.txt

@@ -0,0 +1,349 @@
+==================================================================================
+                  BlackTools - The Ultimate Channel Control Script
+                            One TCL. One smart Eggdrop
+==================================================================================
+
++++ Change Log 2.5.3 (summary)
+-------------------------------------------------------------
+
+**** GENERAL CHANGES
+- All protections supports now addition of exceptions and customization of the ban method on each word.
+- More major code changes for better and faster performance.
+--- Other new commands have been added.
+---- Fixed some ipv6 bugs.
+
+**** SEEN
+- Code fixes and enhancements.
+-- Upgraded with a global seen search method.
+
+**** EXEMPT
+- Adds a ban exempt to the list of exempts, with optional comment and exempt period of time.
+
+**** FOR
+- This is a new command that will allow multiple eggdrops to execute simultaneously the same command.
+
+**** NICKSERV
+- Implementated a new login method that will allow the eggdrop identifying with Nickserv.
+
+**** ANTISPAM
+- You can now add/list/del words to be exempted.
+
+**** BAN/UNBAN
+- Minor bugs fixed.
+
+**** SECUREMODE
+- Minor bugs fixed.
+
+**** BLACK COMMAND
+- Minor bugs fixed.
+
+**** BACKCHAN
+- Minor bugs fixed.
+
+**** BADCHAN
+- Added a badchan scan flood protection setting with role of protecting the eggdrop from massjoin actions by stopping the on join scan of users for a period of time.
+
+
++++ Change Log 2.5.2 (summary)
+-------------------------------------------------------------
+
+**** GENERAL CHANGES
+- Major coding changes for better and faster performance.
+-- Added a helpful information system to show, after each info request from BlackTools manual, some important TIPS about how to use this script.
+--- All major protections supports now addition of exceptions and customization of the ban method on each word.
+----- The bot now understands some CIDR notation and dnslookup bans.
+------ All protections and ban methods recognize webirc hostmask like: mibbit.com, kiwiirc.com, irccloud.com.
+
+**** IDLE
+- Code fixes and enhancements.
+-- Minor bugs fixed.
+
+**** SECUREMODE
+- Added multiple random code messages for a better security.
+
+**** ANTIJOINFLOOD
+- Recoded and combined antijoinflood with antijoinpartquit in only one protection.
+
+**** TOPWORDS
+- Upgraded to show more statistical informations about: smiles, actions, questions, etc.
+
+**** NOTES
+- Automated abuse system to report directly to the BOSS OWNER.
+-- Possibility for owners to decide whether they want to receive notes or not.
+ 
+**** SILENCE
+- Added a personal protection for the bot against ctcp, notice, msg & ctcr using the server silence command.
+
+**** AWAYACTION
+- warn-ban-kick
+-- Changed the output method of showing the adverts.
+
+**** BANLIST CLEANER
+- Implementated an automatic banlist clean system to remove a certain number of bans when the channel banlist is full.
+
+**** BANS DISTICTIONS
+- Added (global) to distinguish local bans from global ones.
+
+**** CONSECUTIVE LETTERS PROTECT
+- Added a new protection againts chars/consecutive repeated letters.
+
+**** REPORT SYSTEM
+- Added a flood protection settings against those who abuse the use of command.
+-- Added the possibility that the report to be sent in eggdrop's PRIVMSG.
+
+**** BADCHAN
+- Code fixes and enhancements.
+-- Added extra option ShowBadChan-bwait and words to be exempted.
+--- Minor bugs fixed.
+
+**** BADNICK
+- Added extra an option badnick-bmethod.
+-- You can now add words to be exempted.
+
+**** BADIDENT
+- Added possibility of being able to modify the banmask method.
+--- You can now add words to be exempted.
+
+**** INVITEBAN 
+- Added exception for Undernet Official Bot *X*.
+
+**** QUOTE
+- Minor text fixes: spelling and grammar mistakes.
+-- Minor bugs fixed.
+
+**** CP SYSTEM
+- Some major bugs fixed.
+
+**** SEEN
+- Minor bugs fixed.
+
+**** XTOOLS
+- Minor bugs fixed.
+
+**** LINK SYSTEM
+- Minor bugs fixed.
+
+**** BADREALNAME
+- Minor bugs fixed.
+
+**** ADD/ADDUSER/USERLIST
+- Minor bugs fixed.
+-- Removed the adduser command and included all it's functions to the add command.
+
+**** COUNT
+- Reintroduced count module, but only as informative thing and how to use it.
+
+**** ANTISPAM
+- Added exception from on-join message for all users with access.
+
+**** ANTISPAM
+- Minor bugs fixed.
+
+**** STATS
+- Reintroduced the statistics for ban commands used by each user with access.
+
+
++++ Change Log 2.5.1 (summary)
+-------------------------------------------------------------
+
+**** MULTI-CHANNEL SUPPORT
+-- Fixed some differences of eggdrop bantimes.
+-- All options/settings are now case sensitive.
+
+**** ANUNT
+--- Changed the output method of showing the adverts.
+
+**** BACKCHAN
+-- Minor text fixes: spelling and grammar mistakes and some differences of bantimes.
+--- Removed nextback-chan option.
+
+**** BADCHAN
+-- Added extra option 'ShowBadChan' - who sends a message to all users with OP (@/&)
+   about the banned user and the forbidden channels on which that was found.
+
+**** BADIDENT
+-- Added possibility of being able to modify the banmask method.
+
+**** IDLE 
+-- Added anti-idle option for halfop users.
+
+**** INVITEBAN 
+-- Added exception for Undernet Official Bot *X*.
+
+**** LIMIT 
+-- Fixed some error regarding the way on how the eggdrop sets the channel limit.
+
+**** OMSG 
+-- This is a new command that will allow you to send specified messages to all
+   users with OP (@/&) from a channel..
+
+**** QUOTE
+-- Minor text fixes: spelling and grammar mistakes.
+--- Changed the output method of showing the quotes.
+
+**** TROLL
+-- Minor text fixes: spelling and grammar mistakes.
+--- Added extra option 'ShowTroll' - once activated, makes the eggdrop to display a
+    notice message list of current trolls of the day, when users with access joins
+    the channel (the list is reset everyday at midnight).
+
+**** VOICEME
+-- Added extra option 'NoLogged' - once activated, will allow the command
+  /msg botnick voiceme <#chan> to be used and by users without a CService Username.
+
+
++++ Change Log 2.5 (summary)
+-------------------------------------------------------------
+
+**** MULTI-CHANNEL SUPPORT
+-- Intelligent IRC channel management, every channel manager can now customise this 
+   script and its component settings to his liking (add/remove users, activate or 
+   disable desired commands, protections or modules).
+
+**** FLEXIBILE AND EASY OF USE
+-- Now 100% flexible to be configured via channel.
+---- Possibility of being able to modify, directly into the eggdrop config file
+     (eggdrop.conf) without having to log on to the shell machine to do that.
+     (i.e. nickname, realname, homechan, chanserv, chanserv username, chanserv
+     password, etc.)
+---- All the warn/kick/ban reasons are highly customizable. 
+---- Every channel manager can set different settings for each channel, add or 
+     remove anything as want easily.
+
+**** ANUNT
+-- A new and better version of ANUNT/ADVERT module that will display, one by one
+   in order, announcements/ads on a channel over a certain amount of time, but ONLY
+   if the channel is active.
+
+**** AUTOINVITE 
+-- This new autoinvite, is a new personal channel setting, the first of it's kind. 
+---- When turned on and banned, this engine makes the eggdrop to remove your ban and
+     invite you to that channel, saving you the trouble of doing by yourself.
+
+**** AUTOTOPIC
+-- This new autotopic makes your eggdrop to reset the topic to the channel TOPIC and
+   URL every time is changed by someone.
+---- If the channel is idle, the topic will not be reset during that time
+     (idle = no users joining).
+---- The old topic module was removed from this version with all system functions,
+     except the '.r' command for refreshing topic manually.
+
+**** BACKCHAN 
+-- This system is the old well-known ChanReport system but now renamed in BackChan
+   and in a new and better version.
+---- When enabled, will give the option for every channel to have a back-channel,
+     in which eggdrop will say the bans given by him to the mainchannel..                 
+
+**** BADCHAN 
+-- The new badchan system will perform scans not only on users are joining channels,
+   but also while they are still on the channel where badchan is enabled. 
+---- Now the badchans list supports wildcards.
+
+**** BADHOST
+-- This is a new protection module that bans users who use IPs/vhosts containing
+   specified bad words. 
+---- This new system module supports wildcards.
+
+**** BAN/UNBAN SYSTEM
+-- The new BlackTools version brings also a new and very well-implemented ban system 
+   which performs accurate and efficient searches through global banlist and every
+   channel banlists for a better management and an easier removal/unban.
+
+**** BANSTATS
+-- A new system module that will allow the eggdrop to keep statistics of each kick
+   and ban given on a specified channel.
+
+**** CHANLINK
+-- This new system allows synchronization of all protections modules on 2 or more
+   channels at the same time.
+---- Once enabled, the eggdrop will add the same ban from a given channel
+     simultaneously to all other channels and vice versa.
+---- Works only between linked channels, not the others.
+
+*** GAG
+-- A new and better version of gag module that will silence/mute a user for a period
+   of time (cannot write on channel). 
+---- If you do not specify a period will be used a default value.
+
+**** GUESTNICK
+-- A system module that, once activated, sends a predefined message to all users
+   who join a channel and whose nick contains words defined in the eggdrop's database.
+
+**** IDLE
+-- A new and better version of the well-known IDLE module that will not allow users
+   with op (@) or voice (+v) to idle.
+
+**** NICKFLOOD
+-- A new protection module that bans users for changing their nicknames too often
+   within a certain period of time.
+
+**** NOTE
+-- Note module system where users can send messages to each other or save personal notes. 
+---- Also, eggdrop will send notes to global owner(s) to inform them every time is abused 
+     (banned or can't join a channel).
+
+**** QUOTE
+-- Perfect navigational system through the pages of every module which has this option
+   and a quote support system module.
+
+**** SECUREMODE
+-- This is a protection module made to prevent join/part flood from botnets (users with
+   access are ignored in this checks). This module is made specifically for Undernet.
+-- It only works with channel modes +Dm and based on a system that generates a unique
+   code for each user who joins the channel, which needs to be confirmed only once
+   (first time join) if they wish to be allowed to join in the channel.
+---- This system comes packed with an extra option that, once enabled, will generate
+     the unique code for each user who joins the channel and every time re-joins, which
+     needs to be confirmed every time.
+
+**** SEENLASTMSG
+-- This new engine is a seen module extra info, who shows the specified nick what 
+   their last message was to that channel.
+
+**** SEENREPLY
+-- This new engine is a seen module extra info that will make the eggdrop send a info
+   message to user who has just been searched with .seen command.
+---- The message includes information about the person who searched for them, as well
+     as the date, time or channel where the .seen command was used.
+
+**** SHOWURL 
+-- Will append the channel URL to the ban reason.
+
+**** SHOWID
+-- Will append a ID number of each ban from the eggdrop banlist to the ban reason.
+---- Also now the bans can be removed using this ID number too.
+
+**** TIMER
+-- Timer module system which allows owners to start timers to execute certain processes 
+   (proc) and in case you want to kill/stop a timer you can do this through this module too. 
+---- Also provides and a list of active timers running.
+
+**** TOPWORDS
+-- This is a new system module which will record users activity from a channel, like: 
+   number of written words, lines, letters, etc.
+---- This new engine comes packed with AccessOnly, an extra option that restricts its
+     operation only to users who owns access to eggdrop."
+---- If this extra option is not enabled, the TopWords module will work for all channel
+     users (both for those with access and for others)."
+
+**** VOICEME
+-- A new system module which, once activated, will give users without access to the
+   eggdrop, but logged with *X* the Undernet Service Bot, the ability to have voice
+   (+v) simply sending a command to the eggdrop.
+--- This system comes packed with an extra option that, once activated, will allow
+    the command to be used ONLY when mode +m is set on the channel.
+
+**** WGET TCL
+-- Now you can you to upload files that match the pattern *.tcl from a url inside your 
+   eggdrop's scripts directory.
+
+**** XONLY
+-- A new system module that allows a complete channel administration via Undernet's
+   official bot.
+---- The eggdrop will perform all BlackToolS commands through *X*, even if is not an op (@).
+
+
+------------------------------------------------------------------------------------   
+BlackTools - The Ultimate Channel Control Script.
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+------------------------------------------------------------------------------------

+ 66 - 0
BlackTools/README/FAQ.txt

@@ -0,0 +1,66 @@
+==================================================================================
+                       -= BLaCkShaDoW Production Presents =-
+                   BlackTools - The Ultimate Channel Control Script
+                            One TCL. One smart Eggdrop
+==================================================================================
+
+                              Frequently Asked Questions
+                            ==============================
+		   The best solution is often the most simple one
+
+
+    ------------------------------------------------------------------------------
+    o I have just installed your script and restart my eggdrop, what I do now ?
+    
+      If you don't have set the eggdrop UnderNet's username in 
+      * BlackTools.tcl:
+            set black(username) <Undernet's username> 
+            set black(password) <password_2_X>
+      * Verify with BlackTools.tcl 'scripts' folder if is the right one.
+      * Now, you can run your eggdrop and use script:
+            type .h in any channel to start using the script.
+      * As a owner you can use the '.h' command to manage all the settings. 
+        By default script's protections and modules are disabled.
+
+    ------------------------------------------------------------------------------
+    o What's happend when eggdrop received "Can't join (Banned) " message from
+      IRC server ?
+
+        When eggdrop can't join for any reason sends an invite request to X. 
+        (When someone is invited on a channel he can join even if he is banned, 
+        channel is invite only, is full or have a key).
+
+    -----------------------------------------------------------------------------
+    o Whats does this message mean : "There was an error. Please check if your 
+      eggdrop config exists or if BlackTools.tcl is found in scripts directory" ?
+
+        This message is an important warning. This means that one of global
+        setting is empty and cause probably the script can't work.
+        Please verify setting "scripts" directory from BlackTools.tcl.
+        Please do what the script says :) and so verify global setting.
+        
+    ------------------------------------------------------------------------------
+    o What does this message mean : "Sorry $yournick, no help available on that" ?
+
+        This means that the information you asked for is not a Blacktools command
+	or setting, or there is simply no information about it.
+
+    ------------------------------------------------------------------------------
+    o The script send me notes to inform me every time the eggdrop is banned or
+      can't join a channel. How can I disable this ?
+	
+	Eggdrop sends those notes ONLY to global owner(s). You can enable/disable 
+      them by using the command: note <on|off>
+
+    ------------------------------------------------------------------------------
+
+You can post your question to http://tclscripts.net forum in english or in romanian.
+      
+We offer a lot of support for BlackTools - however you can also support us:
+
+Donations will help me to keep working on this project.
+
+----------------------------------------------------------------------------------    
+BlackTools - The Ultimate Channel Control Script.
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+----------------------------------------------------------------------------------

+ 45 - 0
BlackTools/README/INSTALL.txt

@@ -0,0 +1,45 @@
+================================================================================
+                  BlackTools - The Ultimate Channel Control Script
+                           One TCL. One smart Eggdrop
+================================================================================
+
+  o Before starting with this script, please read the README and FAQ file :)
+    Thank you for this.
+
+  o gunzip and untar tar.gz file: 
+            some/where> tar xvzf BlackTools2.5.3.tar.gz
+        OR 
+            some/where> gzip -d BlackTools2.5.3.tar.gz
+            some/where> tar xvf BlackTools2.5.3.tar
+
+  o Edit the BlackTools.tcl file.
+  o Copy dir 'BlackTools/' into your 'scripts/' dir of your eggdrop
+    (This is case sensitive!). 
+            cp BlackTools/ /home/of/your_eggdrop/scripts/
+  o Copy BlackTools.tcl file into your 'scripts/' directory:
+            cp BlackTools.tcl /home/of/your_eggdrop/scripts/
+  o Add the following line at the end of your eggdrop config file:
+        source scripts/BlackTools.tcl
+  
+  o Now restart your eggdrop and type .h (in any channel) to start using
+    your eggdrop and to configure this script. 
+    Remember to use .man feature to learn about all functions and commands on 
+    how to use BlackTools.
+
+  o WARNING!! USERS WHO USE BOTH A&A AND BLACKTOOLS SCRIPTS TOGETHER SHOULD
+    KNOW THAT THIS WORKS IN THEORY.
+    SO DON'T ASK ME FOR HELP FOR THIS SCRIPT IF YOU USE IT TOGETHER WITH A&A SCRIPT...
+
+  o Read the MANUAL before asking me or saying: 'this script don't work ;)'
+
+  o If you don't like this script, either live with the fact that not everything 
+    can be made perfectly the way you want it, or don't use it.
+
+  o Otherwise if you have any problem with this script or if you find a bug, post 
+    on tclscripts.net forum an explanation of the problem/bug. You can also meet 
+    me on IRC on #TCL-HELP (On UnderNet of course).
+
+--------------------------------------------------------------------------------
+BlackTools - The Ultimate Channel Control Script.
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+--------------------------------------------------------------------------------

+ 114 - 0
BlackTools/README/README.txt

@@ -0,0 +1,114 @@
+===========================================================================================================
+                                -= BLaCkShaDoW Production Presents =-
+                         BlackTools - The Ultimate Channel Control Script
+                                     One TCL. One smart Eggdrop
+===========================================================================================================
+
+   BlackTools is the most complete channel management script who can manage channels from all 
+   the IRC networks, although some modules are specifically designed only for Undernet network.
+
+                                      -----------------------
+
+   Download    : http://blacktools.tclscripts.net
+   Bugs report : http://www.tclscripts.net
+   History     : http://www.tclscripts.net/release-notes
+   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script
+   Online help : irc://irc.undernet.org/tcl-help 
+                 #TCL-HELP / UnderNet
+                 You can ask in english or romanian
+
+                     / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+                    ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )
+                     \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ /
+                     
+                        You want a customised TCL Script for your eggdrop? 
+                            Easy-peasy, just tell us what you need!
+             We can create almost anything in TCL based on your ideas and donations. 
+    Email: blackshadow@tclscripts.net or info@tclscripts.net with your request informations 
+                            and we'll contact you as soon as possible.
+
+                                      -----------------------
+
+   Ideas, suggestions, comments ?
+
+      This script is free of charge but I accept donations, old computers, free shells :))
+      In any case, if you have any comment (good or bad) go to www.tclscripts.net.
+
+Minimum requirements:
+     o Eggdrop 1.8.x
+     o Tcl 8.5 or higher.
+
+Most important features:
+
+    o Multi-channels support: intelligent IRC channel management, every owner(s)/manager(s) can
+      customise this script and its component settings for each channel to his liking.
+      (add/remove users, activate or disable desired protections, modules or commands)
+    o Global boss owner(s) now have the possibility of being able to modify, directly into, their
+      eggdrop config file (eggdrop.conf) without having to log on to the shell machine to do that. 
+      (i.e. nickname, realname, homechan, chanserv, chanserv username, chanserv password, etc.)
+    o Designed for flexibility and ease of use: BlackTools is now 100% flexible to be configured
+      via channel, you can set different settings for each channel.
+    o Owner(s) timer module system which allows to start timers to execute certain processes (proc)
+      and in case you want to kill/stop a timer you can do this through this module too. 
+      Also provides and a list of active timers running.
+    o Allows you to upload files that match the pattern *.tcl from a url inside your
+      eggdrop's scripts directory.
+    o Note module system where users can send messages to each other or save personal notes. 
+      Also, eggdrop will send notes to global owner(s) to inform them every time is abused
+      (banned/can't join a channel).
+    o CIDR support, dnslookup support and webirc hosts support.
+    o All commands works through private message (PRIVMSG) and possibility that all users, who have
+      access to eggdrop, can set their own cmdchar such as '!'.
+    o All the warn/kick/ban reasons are highly customizable. 
+      Every channel manager can add or remove anything as want easily.
+    o The new BlackTools version brings also a new and very well-implemented ban system which performs
+      accurate and efficient searches through global banlist and every channel banlists for a better
+      management and an easier removal/unban.
+    o Perfect navigational system through the pages of every module which has this option and a 
+      quote support system module.
+    o Protection against botnet (mass) and private floods.
+    o And lots of cool features for your eggdrop :)
+
+Important:
+
+     Read BlackTools MANUAL (.man command) for help and information about configuration.
+     Read INSTALL file to know how to install it.
+     Read FAQ file for the most frequently asked questions.
+
+Credits:
+
+    o Settore for hosting the tclscripts.net project website.
+      settore@tclscripts.net [ www.codegeenie.world ]
+         
+    o Florian (most craziest imagination guy) for spotting some major and important issues, also for
+      provinding all the required and necessary materials needed for this script to be ready.
+      florian@tclscripts.net [ www.tntradio.ro ]
+
+Utenti italiani:
+---------------------
+      Italian Language: Nessuna traduzione ufficiale ancora (puo essere fatta su richiesta).
+
+Usuarios espanoles:
+---------------------
+      Spanish Language: Sin traduccion oficial todavia (se puede realizar a peticion).
+
+-----------------------------------------------------------------------------------------------------------
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+-----------------------------------------------------------------------------------------------------------
+AUTHOR   : Daniel Voipan
+NICK     : BLaCkShaDoW
+MEET ME  : On *UnderNet.org: #TCL-HELP, #UnBan, #TNTRadio
+EMAIL    : blackshadow@tclscripts.net
+URL      : https://github.com/DanielVoipan/
+GREETS   : o Special thanks to QueenElsa and Florian for testing, suggesting fixes and new features
+             inspiration for many parts of BlackTools.tcl that led to the improvement of this script. 
+           o Thanks also to Time2Go > Ionut (retired..) without whom this script would not have gone
+             so far.
+             - admin of #TCL-HELP Channel
+           o As well, many thanks to psycho & WildMan for the interest shown in testing & searching
+             for errors.
+           o Thank you to all those people who found bugs in the script and reported them and to all
+             the users who joined #TCL-HELP and shared their ideas and suggestions.
+             - Website: wWw.TclScriptS.NeT
+             - #TCL-HELP (BlackTools TCL Project Official Channel)
+-----------------------------------------------------------------------------------------------------------

+ 1346 - 0
BlackTools/lang/BT.en.lang.tcl

@@ -0,0 +1,1346 @@
+##################################################################################################################################
+#                                   _   _   _   _   _   _   _   _   _   _   _   _   _   _                                        #
+#                                  / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \                                       #
+#                                 ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )                                      #
+#                                  \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/                                       #
+#                                                                                                                                #
+##################################################################################################################################
+##                                     BlackTools - The Ultimate Channel Control Script                                         ##
+##                                                 One TCL. One smart Eggdrop                                                   ##
+##################################################################################################################################
+## This file goes along with BlackTools.tcl and is loaded automatically if exist in /lang folder (this file is required)        ##
+##################################################################################################################################
+#                                                                                                                                #
+#                                                  *** The Future is Here ***                                                    #
+#                                                                                     Copyright 2008 - 2018 @ www.tclscripts.net #
+##################################################################################################################################
+#                                                                                                                         ®      #
+#     ######  #          #     #####  #    # ####### ####### ####### #        #####        #          #    #     #  #####        #
+#     #     # #         # #   #     # #   #     #    #     # #     # #       #     #       #         # #   ##    # #     #       #
+#     #     # #        #   #  #       #  #      #    #     # #     # #       #             #        #   #  # #   # #             #
+#     ######  #       #     # #       ###       #    #     # #     # #        #####   ###  #       #     # #  #  # #  ####       #
+#     #     # #       ####### #       #  #      #    #     # #     # #             #       #       ####### #   # # #     #       #
+#     #     # #       #     # #     # #   #     #    #     # #     # #       #     #       #       #     # #    ## #     #       #
+#     ######  ####### #     #  #####  #    #    #    ####### ####### #######  #####        ####### #     # #     #  #####        #
+#                                                                                                                                #
+##################################################################################################################################
+#   				           #                             translation updated by Florian | Florian@tclscripts.net #
+#             ENGLISH LANGUAGE (EN)	   #                     retouches and corrections by QueenElsa | QueenElsa@undernet.org #
+#				           #	                                                        Date: 25.02.2018 14:26PM #
+##################################################################################################################################
+
+##################################################################################################################################
+#                                                                                                                                #
+#                                                         ACCESS LEVELS                                                          #
+#                                                                                                                                #
+##################################################################################################################################
+
+set black(say.en.level.1) "BOSS OWNER"
+set black(say.en.level.2) "OWNER"
+set black(say.en.level.3) "MANAGER"
+set black(say.en.level.4) "ADMIN"
+set black(say.en.level.5) "OP"
+set black(say.en.level.6) "VOICE"
+set black(say.en.level.7) "PROTECT"
+set black(say.en.level.8) "MASTER"
+set black(say.en.level.9) "BAN"
+
+##################################################################################################################################
+#                                                                                                                                #
+#                                                       STANDARD MESSAGES                                                        #
+#                                                                                                                                #
+##################################################################################################################################
+
+set black(say.en.gl.instr) "\005\[BT\]\005 For more information check: \002%char%man %msg.1%\002"
+set black(say.en.gl.instr_nick) "\005\[BT\]\005 For more information check: \002%botnick% man %msg.1%\002"
+set black(say.en.gl.instr_priv) "\005\[BT\]\005 For more information check: \002man %msg.1%\002"
+set black(say.en.gl.noban) "\005\[BT\]\005 FAILED: Cannot execute, user has ACCESS."
+set black(say.en.gl.notonchan) "\005\[BT\]\005 FAILED: I am not on \001%chan%\001"
+set black(say.en.gl.suspend) "\005\[BT\]\005 You are suspended on \002%chan%\002, you cannot use this command."
+set black(say.en.gl.glsuspend) "\005\[BT\]\005 You are \002GLOBALLY\002 suspended, you cannot use this command."
+set black(say.en.gl.novalidchan) "\005\[BT\]\005 FAILED: Invalid channel."
+set black(say.en.gl.nomem) "\005\[BT\]\005 I have no memory record of that user."
+set black(say.en.gl.noaccess) "\005\[BT\]\005 FAILED: Doesn't have access on \002%chan%\002."
+set black(say.en.gl.noop) "\005\[BT\]\005 FAILED: I'm not opped on \002%chan%\002."
+set black(say.en.gl.nomodif) "\005\[BT\]\005 FAILED: Cannot modify a user with equal or higher access than your own."
+set black(say.en.gl.usernotonchan) "\005\[BT\]\005 FAILED: \001%msg.1%\001 is not on \002%chan%\002."
+set black(say.en.gl.nocmem) "\005\[BT\]\005 I have no memory record of channel \001%msg.1%\001"
+set black(say.en.gl.isowner) "\005\[BT\]\005 \002%msg.1%\002 has already \002%msg.set%\002 access."
+set black(say.en.gl.usernotexist) "\005\[BT\]\005 FAILED: \002%msg.1%\002 does not exist."
+set black(say.en.gl.hostnotexist) "\005\[BT\]\005 I could not found any information about this hostmask."
+set black(say.en.gl.reason) "reason"
+set black(say.en.gl.invalidlevel) "\005\[BT\]\005 Sorry, you have insufficient access to perform that command (must be \002%msg%\002)"
+set black(say.en.gl.nounban) "\005\[BT\]\005 Sorry, you have insufficient access to remove the ban \002%msg.1%\002."
+set black(say.en.gl.hasop) "\005\[BT\]\005 FAILED: User is opped. I can't proceed."
+set black(say.en.gl.notonline) "\005\[BT\]\005 \002%msg.1%\002 it's NOT online."
+set black(say.en.gl.xonlyban) "\005\[BT\]\005 Added ban to \001%msg.1%\001 via \002%msg.2%\002 on %chan% \[\002XonlY\002 activated.\]"
+set black(say.en.gl.showline) "#\001%msg.1%\001) %msg.8%"
+set black(say.en.gl.wordexists) "\005\[BT\]\005 \001%msg.1%\001 already exists in \002%chan%\002's database."
+set black(say.en.gl.noset) "N/A"
+set black(say.en.gl.validuser) "\005\[BT\]\005 FAILED: Cannot execute ( the host belongs to \002%msg.1%\002 )."
+set black(say.en.gl.banexists) "\005\[BT\]\005 \002%msg.1%\002 it's already covered by host \002%msg.2%\002"
+set black(say.en.gl.noipv4) "\005\[BT\]\005 \002%msg.1%\002 is not an IPv4 to use CIDR ban."
+set black(say.en.gl.fullbans) "\005\[BT\]\005 \002WARNING\002: \002%chan%\002's banlist currently was detected to be *FULL* with \002%numbans%\002 entries. Clearing the channel banlist.."
+set black(say.en.gl.noxonly) "\005\[BT\]\005 FAILED: I'm not logged to \002*X*\002."
+set black(say.en.gl.banblack) "\005\[BT\]\005 FAILED: Cannot execute, user is in BLACKLIST."
+set black(say.en.gl.protexcept) "\002except\002"
+set black(say.en.gl.nobanlevel) "\005\[BT\]\005 Sorry, you have insufficient access to place the ban \002%msg.1%\002."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                            Internal AntiFlood Protections                                                 #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.en.antiflood.1) "\005\[BT\]\005 You're sending requests too fast. Calm down and try again after \002%msg.1% minute\002. Thanks!"
+set black(say.en.antiflood.2) "\005\[BT\]\005 Ignoring \002%msg.1%\002. Reason: \002%msg.8%\002"
+set black(say.en.antiflood.3) "\002\005\[BT\]\005\002 SILENCE enabled. Reason :\002%msg%\002"
+set black(say.en.antiflood.4) "\002\005\[BT\]\005\002 SILENCE disabled."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                    Time Outputs                                                           #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.en.timeout.1) "year"
+set black(say.en.timeout.2) "years"
+set black(say.en.timeout.3) "day"
+set black(say.en.timeout.4) "days"
+set black(say.en.timeout.5) "hour"
+set black(say.en.timeout.6) "hours"
+set black(say.en.timeout.7) "minute"
+set black(say.en.timeout.8) "minutes"
+set black(say.en.timeout.9) "seconds"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                    MAX UPTIME                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.en.maxup.1) "\005\[BT\]\005 Starting time: \002%msg.1% %msg.2% %msg.3%\002 - Max UpTIME: \001%msg.9%\001"
+set black(say.en.maxon.1) "\005\[BT\]\005 Time online: \002%msg.1% %msg.2% %msg.3%\002 - Max OnTIME: \001%msg.9%\001"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                      STATS                                                                #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.en.stats.1) "\005\[BT\]\005 No stats informations found about \002%msg.1%\002."
+set black(say.en.stats.2) "\005\[BT\]\005 Today's \002Stats\002: (\001%msg.1%\001) Bans: \002%msg.2%\002 Kicks: \002%msg.3%\002 Cmds: %msg.6%"
+set black(say.en.stats.3) "\005\[BT\]\005 Total \002Stats\002: (\001%msg.1%\001) Bans: local \002%msg.2%\002 ; Kicks: \002%msg.3%\002 ; Cmds: %msg.6%"
+set black(say.en.stats.4) "\005\[BT\]\005 Total \002Stats\002: (\001%msg.1%\001) Bans: local \002%msg.2%\002 global \002%msg.3%\002 ; Kicks: \002%msg.4%\002 ; Cmds: %msg.10%" 
+set black(say.en.stats.5) "\005\[BT\]\005 Reset stats of \001%msg.1%\001 from \002%chan%\002."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                   PROTECTIONS                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+#################################### InviteBan #################################
+
+set black(say.en.inviteban.1) "\[INVITEBAN\] Lame invite crap"
+
+#################################### AntiPub ###################################
+
+set black(say.en.antipub.1) "Advertisements are not allowed on this channel"
+set black(say.en.antipub.2) "Advertisements are \002NOT\002 not allowed and will result in a ban next time"
+set black(say.en.antipub.3) "\005\[BT\]\005 *** END Antipub List ***"
+set black(say.en.antipub.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002Antipub List\002 of %chan%."
+set black(say.en.antipub.5) "\005\[BT\]\005 Removed \002antipub entry\002 with nr. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.antipub.6) "\005\[BT\]\005 Added \002%msg.8%\002 with nr. \001%msg.1%\001 to Antipub list for \002%chan%\002."
+set black(say.en.antipub.7) "\005\[BT\]\005 \002Antipub List\002 for %chan% is:"
+set black(say.en.antipub.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%antipub list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.antipub.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%antipub %chan% list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.antipub.10) "\005\[BT\]\005 Added \002%msg.8%\002 with nr. \001%msg.1%\001 to Antipub Exceptions for \002%chan%\002."
+
+#################################### BadHost ##################################
+
+set black(say.en.badhost.1) "Your VHOST/IP is considered to be improper"
+set black(say.en.badhost.3) "\005\[BT\]\005 *** END BadHosts List ***"
+set black(say.en.badhost.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002BadHosts List\002 of \001%chan%\001."
+set black(say.en.badhost.5) "\005\[BT\]\005 Removed \002badhost\002 with no. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.badhost.6) "\005\[BT\]\005 Added \001%msg.8%\001 with no. \001%msg.1%\001 to BadHosts List for \002%chan%\002."
+set black(say.en.badhost.7) "\005\[BT\]\005 \002BadHosts List\002 for \001%chan%\001 is:"
+set black(say.en.badhost.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badhost list -next\001 (\002%counter%\002 BadHosts left)"
+set black(say.en.badhost.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badhost %chan% list -next\001 (\002%counter%\002 BadHosts left)"
+set black(say.en.badhost.10) "\005\[BT\]\005 Added \001%msg.8%\001 as exception with no. \001%msg.1%\001 to BadHosts List for \002%chan%\002."
+
+#################################### AntiNotice ###############################
+
+set black(say.en.antinotice.1) "Channel NOTICEs are not allowed"
+set black(say.en.antinotice.2) "Please do not use NOTICE in here"
+
+#################################### AntiCtcp #################################
+
+set black(say.en.antictcp.1) "Channel CTCP's are not allowed"
+set black(say.en.antictcp.2) "Stop using CTCP's in here"
+
+#################################### AntiBadWord ###############################
+
+set black(say.en.antibadword.1) "Bad language is not fun, you should never have said that"
+set black(say.en.antibadword.2) "Stop using bad words/language"
+set black(say.en.antibadword.3) "\005\[BT\]\005 *** END BadWords List ***"
+set black(say.en.badword.4) "\005\[BT\]\005 No entries matching for no. \001%msg.1%\001 in \002BadWords List\002 of \001%chan%\001."
+set black(say.en.badword.5) "\005\[BT\]\005 Removed \002badword\002 entry with no. \001%msg.1%\001 from %chan%."
+set black(say.en.badword.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to BadWords List for \002%chan%\002."
+set black(say.en.antibadword.7) "\005\[BT\]\005 \002BadWords List\002 for \001%chan%\001 is:"
+set black(say.en.antibadword.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badword list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.antibadword.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badword %chan% list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.badword.7) "\005\[BT\]\005 Added \002%msg.18%\002 with no. \001%msg.1%\001 with banmethod nr.\001%msg.2%\ to BadWords List for \002%chan%\002."
+set black(say.en.badword.8) "\005\[BT\]\005 Added \002%msg.8%\002 as exception with no. \001%msg.1%\001 to BadWords List for \002%chan%\002."
+
+#################################### AntiLongText ##############################
+
+set black(say.en.antilongtext.1) "Your message is too long. Please use shorter lines"
+set black(say.en.antilongtext.2) "Your messages are too long, you need to make them shorter"
+
+#################################### AntiBadQuitPart ###########################
+
+set black(say.en.antibadquitpart.1) "Unacceptable part/quit message"
+set black(say.en.antibadquitpart.3) "\005\[BT\]\005 *** END Bad parts/quits List ***"
+set black(say.en.badquitpart.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002Bad part/quit List\002 of \001%chan%\001."
+set black(say.en.badquitpart.5) "\005\[BT\]\005 Removed \002bad part/quit\002 with no. \001%msg.1%\001 from %chan%."
+set black(say.en.badquitpart.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to Bad part/quit List for \002%chan%\002."
+set black(say.en.antibadquitpart.7) "\005\[BT\]\005 \002Bad part/quit List\002 for \001%chan%\001 is:"
+set black(say.en.antibadquitpart.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badquitpart list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.antibadquitpart.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badquitpart %chan% list -next\001 (\002%counter%\002 entries left)"
+set black(say.en.badquitpart.10) "\005\[BT\]\005 Added \002%msg.8%\002 as exception with no. \001%msg.1%\001 to Bad part/quit List for \002%chan%\002."
+
+################################### AntiJoinPart ###############################
+
+set black(say.en.antijoinpart.1) "Join/part floods are not permissable on this channel"
+set black(say.en.antijoinpart.2) "Join/part flood detected"
+
+################################## AntiSpam ###################################
+
+set black(say.en.antispam.1) "Message spam (spambot) detected"
+set black(say.en.antispam.2) "\[SPAMCHECK\] Welcome to \002%chan%\002, please do NOT reply to this message or else you will be considered a spammer and you'll be banned! Thank You!"
+set black(say.en.antispam.3) "\005\[BT\]\005 *** END antispam List ***"
+set black(say.en.antispam.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002antispam List\002 of \001%chan%\001."
+set black(say.en.antispam.5) "\005\[BT\]\005 Removed \002antispam\002 with no. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.antispam.6) "\005\[BT\]\005 Added \001%msg.8%\001 with no. \001%msg.1%\001 to antispam List for \002%chan%\002."
+set black(say.en.antispam.7) "\005\[BT\]\005 \002antispam List\002 for \001%chan%\001 is:"
+set black(say.en.antispam.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%antispam list -next\001 (\002%counter%\002 antispam entries left)"
+set black(say.en.antispam.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%antispam %chan% list -next\001 (\002%counter%\002 antispam entries left)"
+set black(say.en.antispam.10) "\005\[BT\]\005 Added \001%msg.8%\001 as exception with no. \001%msg.1%\001 to antispam List for \002%chan%\002."
+set black(say.en.antispam.11) {	"Checking for spam.."
+				"Hunting wabbits.."
+				"Refreshing my uHost.."
+				}
+
+################################# AntiRepeat ##################################
+
+set black(say.en.antirepeat.1) "Repeating text abuse"
+set black(say.en.antirepeat.2) "Stop repeating yourself"
+
+################################# AntiColor ###################################
+
+set black(say.en.anticolor.1) "Stop using 4C8O12L7O11R3S"
+set black(say.en.anticolor.2) "Please do NOT use 4C8O12L7O11R3S"
+
+################################# AntiBold ###################################
+
+set black(say.en.antibold.1) "Stop using \002BOLD\002 characters"
+set black(say.en.antibold.2) "Please do NOT use \002BOLD\002 characters"
+
+################################# AntiUnderline ###################################
+
+set black(say.en.antiunderline.1) "Stop using \037UNDERLINE\037 characters"
+set black(say.en.antiunderline.2) "Please do NOT use \037UNDERLINE\037 characters"
+
+################################# AntiCaps #######################################
+
+set black(say.en.anticaps.1) "Stop using CAPSLOCK"
+set black(say.en.anticaps.2) "Please do NOT use excessive capital letters"
+
+################################# BadRealname ###################################
+
+set black(say.en.badrealname.1) "Inappropriate real-name field, please change it before returning"
+set black(say.en.badrealname.3) "\005\[BT\]\005 *** END BadRealnames List ***"
+set black(say.en.badrealname.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002BadRealname List\002 of \001%chan%\001."
+set black(say.en.badrealname.5) "\005\[BT\]\005 Removed \002badrealname\002 with no. \001%msg.1%\001 from \001%chan%\001."
+set black(say.en.badrealname.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to BadRealname List for \002%chan%\002."
+set black(say.en.badrealname.7) "\005\[BT\]\005 \002BadRealname List\002 for \001%chan%\001 is:"
+set black(say.en.badrealname.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badrealname list -next\001 (\002%counter%\002 BadRealnames left)"
+set black(say.en.badrealname.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badrealname %chan% list -next\001 (\002%counter%\002 BadRealnames left)"
+set black(say.en.badrealname.10) "\005\[BT\]\005 Added \002%msg.8%\002 as exception with no. \001%msg.1%\001 to BadRealname List for \002%chan%\002."
+
+################################# BadNick #####################################
+
+set black(say.en.badnick.1) "Your NICKNAME is not appropriate for this channel"
+set black(say.en.badnick.3) "\005\[BT\]\005 *** END BadNicks List ***"
+set black(say.en.badnick.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002BadNicks List\002 of \001%chan%\001."
+set black(say.en.badnick.5) "\005\[BT\]\005 Removed \002badnick\002 with no. \001%msg.1%\001 from \001%chan%\001."
+set black(say.en.badnick.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to BadNicks List for \002%chan%\002."
+set black(say.en.badnick.7) "\005\[BT\]\005 \002BadNicks List\002 for \001%chan%\001 is:"
+set black(say.en.badnick.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badnick list -next\001 (\002%counter%\002 BadNicks left)"
+set black(say.en.badnick.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badnick %chan% list -next\001 (\002%counter%\002 BadNicks left)"
+set black(say.en.badnick.10) "If you do not change your nick in \002%time%\002 seconds, you will be removed from the channel! "
+set black(say.en.badnick.11) "\005\[BT\]\005 Added \002%msg.8%\002 as exception with no. \001%msg.1%\001 to BadNicks List for \002%chan%\002."
+
+################################# BadIdent #####################################
+
+set black(say.en.badident.1) "Your IDENT is not appropriate for this channel"
+set black(say.en.badident.3) "\005\[BT\]\005 *** END BadIdents List ***"
+set black(say.en.badident.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002BadIdents List\002 of \001%chan%\001."
+set black(say.en.badident.5) "\005\[BT\]\005 Removed \002badident\002 with no. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.badident.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to BadIdents List for \002%chan%\002."
+set black(say.en.badident.7) "\005\[BT\]\005 \002BadIdents List\002 for \001%chan%\001 is:"
+set black(say.en.badident.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badident list -next\001 (\002%counter%\002 BadIdents left)"
+set black(say.en.badident.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badident %chan% list -next\001 (\002%counter%\002 BadIdents left)"
+set black(say.en.badident.10) "\005\[BT\]\005 Added \002%msg.8%\002 as exception with no. \001%msg.1%\001 to BadIdents List for \002%chan%\002."
+
+################################# AntiJoinFlood #####################################
+
+set black(say.en.antijoinflood.1) "Join flooding not tolerated"
+set black(say.en.antijoinflood.2) "\002ATTENTION\002! Joinflood detected on \002%chan%\002! Please check it out!"
+
+################################# AntiChanFlood #####################################
+
+set black(say.en.antichanflood.1) "Text flood detected"
+set black(say.en.antichanflood.2) "You are writing too many lines, slow down your typing"
+
+################################### NickFlood #######################################
+
+set black(say.en.nickflood.1) "Nick flood"
+set black(say.en.nickflood.2) "Choose a nickname and keep it, please.."
+
+################################ Repetitive Chars ###################################
+
+set black(say.en.repetitivechars.1) "Repetitive chars abuse"
+set black(say.en.repetitivechars.2) "Please do not use excessive characters repeat.."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                       MODULES                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+################################## SecureMode ##################################
+
+set black(say.en.securemode.1) {
+"\002ATTENTION:\002 You just tried to join %chan% but the channel is \002lockdown\002 (\002+mD\002). Since we're being attacked by bots, please type: \002/msg %botnick% check %chan% %msg.1%\002 to prove that you're a human. If you do, you will be permitted to join. If you mess up, nothing will happen."
+"\002ATTENTION:\002 Welcome to %chan%. Since we're being  attacked by bots, the channel is \002lockdown\002 (\002+mD\002), please type: \002/msg %botnick% check %chan% %msg.1%\002"
+"\002ATTENTION:\002 our channel is \002lockdown\002 (\002+mD\002) and since we're being  attacked by bots and you just tried to join %chan%, please type: \002/msg %botnick% check %chan% %msg.1%\002"
+}
+
+set black(say.en.securemode.2) "\002%msg.1%\002: have a nice chat! Sorry for the inconvienence you experienced!"
+set black(say.en.securemode.3) "\005\[BT\]\005 *** END SecureMode Exceptions List ***"
+set black(say.en.securemode.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002SecureMode Exceptions List\002 of \001%chan%\001."
+set black(say.en.securemode.5) "\005\[BT\]\005 Removed \002securemode exception\002 with no. \002%msg.1%\002 from %chan%."
+set black(say.en.securemode.6) "\005\[BT\]\005 Added \002%msg.8%\002 with no. \001%msg.1%\001 to SecureMode Exceptions List for \002%chan%\002."
+set black(say.en.securemode.7) "\005\[BT\]\005 \002SecureMode Exceptions List\002 for \001%chan%\001 is:"
+set black(say.en.securemode.8) "\005\[BT\]\005 To see the next set of exceptions, type: \001%char%securemode list -next\001 (\002%counter%\002 Exceptions left)"
+set black(say.en.securemode.9) "\005\[BT\]\005 To see the next set of exceptions, type: \001%char%securemode %chan% list -next\001 (\002%counter%\002 Exceptions left)"
+set black(say.en.securemode.10) "Defensive mode: on"
+set black(say.en.securemode.11) "Defensive mode: off"
+
+################################## VoiceMe #####################################
+
+set black(say.en.voiceme.1) "The channel is \002moderated (mode +m)\002. If you wanna be able to chat in \002%chan%\002 then use:\002 /msg %botnick% voiceme %chan%\002. Requires to be \002registered and logged to X\002. If you don't have a Cservice username, go to \002https://cservice.undernet.org/live\002 and create one."
+set black(say.en.voiceme.2) "The channel is NOT \002moderated (mode +m)\002 anymore. Enjoy!"
+set black(say.en.voiceme.3) "You received \002voice(+v)\002 on \002%chan%\002. Have a nice chat!"
+set black(say.en.voiceme.4) "You are already \002voiced\002 in \002%chan%\002."
+set black(say.en.voiceme.5) "If *HUMAN* -> \002/msg %botnick% voiceme %chan% %msg%\002"
+set black(say.en.voiceme.6) "The channel is \002moderated (mode +m)\002. If you wanna be able to chat in \002%chan%\002 then use:\002 /msg %botnick% voiceme %chan%\002. Enjoy!"
+
+################################# TopWords #####################################
+
+set black(say.en.topwords.1) "Total \002TopWords\002: \001%msg%\001"
+set black(say.en.topwords.2) "Today's \002TopWords\002: \001%msg%\001"
+set black(say.en.topwords.3) "TopWords: (\001%msg.1%\001) Host: \001%msg.2%\001 Words: \002%msg.3%\002 Lines: \002%msg.4%\002 Letters: \002%msg.12%\002 Smiles: \002%msg.13%\002 Actions: \002%msg.15%\002 Questions: \002%msg.17%\002 (Place \002%msg.19%\002/\002%msg.21%\002 users)."
+set black(say.en.topwords.4) "TopWords: Sorry, I don't have any stats about \002%msg.1%\002."
+set black(say.en.topwords.7) "\005\[BT\]\005 I don't have any \002TopWords\002 for \001%chan%\001."
+set black(say.en.topwords.8) "\005\[BT\]\005 \002TopWords\002 reseted on \001%chan%\001"
+set black(say.en.topwords.9) "(To see the next ranks, type: \002%char%topwords -next\002)"
+set black(say.en.topwords.10) "\005\[BT\]\005 I don't have any \002TopWords\002 for \001%chan%\001"
+set black(say.en.topwords.11) "(To see the next ranks, type: \002%char%topwords total -next\002)"
+set black(say.en.topwords.12) "(To see the next ranks, type: \002%char%topwords %chan% total -next\002)"
+set black(say.en.topwords.13) "(To see the next ranks, type: \002%char%topwords %chan% -next\002)"
+set black(say.en.topwords.14) "\005\[BT\]\005 Today's \002TopWords\002 for \001%chan%\001 is empty."
+set black(say.en.topwords.15) "\005\[BT\]\005 Added \001%msg.1%\001 to \002TopWords Exceptions List\002 for \001%chan%\001"
+set black(say.en.topwords.16) "\005\[BT\]\005 Added \001%msg.1%\001 with mask \002%msg.2%\002 to \002TopWords Exceptions List\002 for \001%chan%\001"
+set black(say.en.topwords.17) "\005\[BT\]\005 \001%msg.1%\001 already exists in \002TopWords Exceptions List\002."
+set black(say.en.topwords.18) "\005\[BT\]\005 \002TopWords Exceptions List\002 for \001%chan%\001 is:"
+set black(say.en.topwords.19) "%msg%"
+set black(say.en.topwords.20) "\005\[BT\]\005 \001%msg.1%\001 is not added as an exception to \002TopWords\002."
+set black(say.en.topwords.21) "\005\[BT\]\005 Removed \001%msg.1%\001 from \002TopWords Exceptions List\002."
+set black(say.en.topwords.22) "Total TopWords: (\001%msg.1%\001) Host: \001%msg.2%\001 Words: \002%msg.3%\002 Lines: \002%msg.4%\002 Letters: \002%msg.12%\002 Smiles: \002%msg.13%\002 Actions: \002%msg.15%\002 Questions: \002%msg.17%\002 (Place \002%msg.19%\002/\002%msg.21%\002 users)."
+set black(say.en.topwords.23) "\005\[BT\]\005 This week's \002TopWords\002 for \001%chan%\001 is empty."
+set black(say.en.topwords.24) "This week's \002TopWords\002: \001%msg%\001"
+set black(say.en.topwords.25) "(To see the next ranks, type: \002%char%topwords %chan% week -next\002)"
+set black(say.en.topwords.26) "(To see the next ranks, type: \002%char%topwords %chan% week -next\002)"
+set black(say.en.topwords.27) "\005\[BT\]\005 No entries found about \002%msg.1%\002, i guess he/she hasn't spoken :("
+set black(say.en.topwords.28) "Week's TopWords: (\001%msg.1%\001) Host: \001%msg.2%\001 Words: \002%msg.3%\002 Lines: \002%msg.4%\002 Letters: \002%msg.12%\002 Smiles: \002%msg.13%\002 Actions: \002%msg.15%\002 Questions: \002%msg.17%\002 (Place \002%msg.19%\002/\002%msg.21%\002 users)."
+set black(say.en.topwords.29) "\005\[BT\]\005 Reset topwords of \001%msg.1%\001 from \002%chan%\002"
+
+################################ GuestNick ####################################
+
+set black(say.en.guestnick.1) "\005\[BT\]\005 \002GuestNick\002 module turned \001ON\001."
+set black(say.en.guestnick.2) "\005\[BT\]\005 \002GuestNick\002 module turned \001OFF\001."
+set black(say.en.guestnick.3) "\005\[BT\]\005 Added \001%msg.1%\001 with no. \002%msg.2%\002 in \002GuestNicks List\002"
+set black(say.en.guestnick.4) "\005\[BT\]\005 Removed \002guestnick\002 with no. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.guestnick.5) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002GuestNicks List\002."
+set black(say.en.guestnick.6) "\005\[BT\]\005 There are no GuestNicks for \002%chan%\002."
+set black(say.en.guestnick.7) "\005\[BT\]\005 \002GuestNicks List\002 for \001%chan%\001 is:"
+set black(say.en.guestnick.8) "\005\[BT\]\005 To see the next set of entries, type: \001%char%GuestNick list -next\001 (\002%counter%\002 GuestNicks left)"
+set black(say.en.guestnick.9) "\005\[BT\]\005 *** END GuestNicks List ***"
+set black(say.en.guestnick.10) "Hello \002$nick\002: if you want to change your actual nickname with something more appropriate to your name, using \002/nick YourName\002 will accomplish this.."
+set black(say.en.guestnick.11) "\005\[BT\]\005 To see the next set of entries, type: \001%char%GuestNick %chan% list -next\001 (\002%counter%\002 GuestNicks left)"
+
+################################ BackChan ###################################
+
+set black(say.en.reportchan) "\005\[BT\]\005 Added ban on \002%chan%\002 for host \002%banmask%\002 with reason: \002%reason%\002. Expires after: \002%bantime%\002."
+set black(say.en.reportchan.1) "\005\[BT\]\005 \[\002%nick%\002\] added ban on \002%chan%\002 for host \002%banmask%\002 with reason: \002%reason%\002. Expires after: \002%bantime%\002."
+set black(say.en.backchan.1) "\005\[BT\]\005 Found \002%msg.1%\002 in \002%chan%\002's BanList matching \002%msg.2%\002."
+set black(say.en.reportchan.2) "\005\[BT\]\005 \[\002%nick%\002\] added Gag on \002%chan%\002 for host \002%banmask%\002 with reason: \002%reason%\002. Expires after: \002%bantime%\002."
+set black(say.en.reportchan.3) "\005\[BT\]\005 \[\002%nick%\002\] removed \002%msg.1%\002 bans (\002%msg.2%\002 found) from %chan% that matched %msg.3%" 
+set black(say.en.reportchan.4) "\005\[BT\]\005 \[\002%nick%\002\] removed Gag on \002%chan%\002 for host \002%banmask%\002"
+
+################################ CloneScan ###################################
+
+set black(say.en.clonescan.1) "Excessive connections from \002*@%clone%\002. Clones are prohibited!"
+set black(say.en.clonescan.2) "\005\[BT\]\005 No clones on \001%chan%\001."
+set black(say.en.clonescan.3) "*** END Clones Exceptions List ***"
+set black(say.en.clonescan.4) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002Clones Exceptions List\002."
+set black(say.en.clonescan.5) "\005\[BT\]\005 Removed \002exception\002 with no. \001%msg.1%\001 from \002%chan%\002."
+set black(say.en.clonescan.6) "\005\[BT\]\005 Added \001%msg.8%\001 with no. \002%msg.1%\002 in \002Clones Exceptions List\002"
+set black(say.en.clonescan.7) "\005\[BT\]\005 \002Clones Exceptions List\002 for \001%chan%\001 is:"
+set black(say.en.clonescan.8) "\005\[BT\]\005 To see the next set of exceptions, type: \001%char%clonescan list -next\001 (\002%counter%\002 exceptions ramase)"
+set black(say.en.clonescan.9) "\005\[BT\]\005 To see the next set of exceptions, type: \001%char%clonescan %chan% list -next\001 (\002%counter%\002 exceptions ramase)"
+set black(say.en.clonescan.10) "\005\[BT\]\005 Found \001%msg.1%\001 clones in \002%chan%\002 from mask \001%msg.2%\001. Nicks are: \002%msg.7%\002"
+set black(say.en.clonescan.11) "\005\[BT\]\005 Scanning for clones .."
+
+################################# Private ######################################
+
+set black(say.en.private.1) "\002Restricted\002 Channel"
+set black(say.en.private.5) "%msg%"
+set black(say.en.private.6) "\005\[BT\]\005 \001%msg.1%\001 is not added as an exception."
+set black(say.en.private.7) "\005\[BT\]\005 \001%msg.1%\001 is already in my database. Adding as an exception on \002%chan%\002."
+set black(say.en.private.8) "\005\[BT\]\005 Added \001%msg.1%\001 with mask \002%msg.2%\002 as an exception on \001%chan%\001."
+set black(say.en.private.9) "\005\[BT\]\005 Removed \001%msg.1%\001 from my \002Exception List\002 on \002%chan%\002."
+set black(say.en.private.10) "\005\[BT\]\005 \001%msg.1%\001 added as an exception on \002%chan%\002."
+set black(say.en.private.11) "\005\[BT\]\005 Users in \002Exception List\002 from \002%chan%\002 are: \001%msg%\001."
+
+################################# BadChan ######################################
+
+set black(say.en.badchan.1) "\005\[BT\]\005 \001%msg.1%\001 already exists on \002%chan%\002's BadChans List."
+set black(say.en.badchan.2) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badchan list global -next\001 (\002%counter%\002 BadChans left)"
+set black(say.en.badchan.3) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badchan list -next\001 (\002%counter%\002 BadChans left)"
+set black(say.en.badchan.4) "\005\[BT\]\005 *** END BadChans List ***"
+set black(say.en.badchan.5) "You have been found co-channeling in one or more blacklisted channels"
+set black(say.en.badchan.6) "\005\[BT\]\005 \002BadChan\002 turned \001ON\001."
+set black(say.en.badchan.8) "\005\[BT\]\005 \002BadChan\002 turned \001OFF\001."
+set black(say.en.badchan.11) "\005\[BT\]\005 Added \001%msg.1%\001 with no. \002%msg.2%\002 in my \002GLOBAL\002 BadChans List."
+set black(say.en.badchan.12) "\005\[BT\]\005 Added \001%msg.1%\001 with no. \002%msg.2%\002 in \002%chan%\002's BadChans List."
+set black(say.en.badchan.14) "\005\[BT\]\005 \002BadChans List\002 for \001%chan%\001 is:"
+set black(say.en.badchan.15) "\005\[BT\]\005 \002Global BadChans List\002 is:"
+set black(say.en.badchan.16) "#\002%msg.1%\002) %msg.2%"
+set black(say.en.badchan.17) "\005\[BT\]\005 FAILED: No entries matching for no. \002%msg.1%\002 in my BadChans List."
+set black(say.en.badchan.18) "\005\[BT\]\005 Removed no. \001%msg.1%\001 from \002%chan%\002's BadChans List."
+set black(say.en.badchan.19) "\005\[BT\]\005 Removed no. \001%msg.1%\001 from \002GLOBAL\002 BadChans List."
+set black(say.en.badchan.39) "You have been found co-channeling in one or more blacklisted channels"
+set black(say.en.badchan.40) "\002ATTENTION!\002 You were found sitting in one or more blacklisted channels! You have\002 %time% seconds\002 to leave:\002 %badchans%\002, otherwise you'll be banned. Thank You!"
+set black(say.en.badchan.41) "\005\[BT\]\005 To see the next set of entries, type: \001%char%badchan %chan% list -next\001 (\002%counter%\002 BadChans left)"
+set black(say.en.badchan.42) "\005\[BT\]\005 \001%msg.1%\001 is already added to \002GLOBAL\002 BadChans List"
+set black(say.en.badchan.43) "\005\[BT\]\005 \002BadChan\002 is already activated."
+set black(say.en.badchan.44) "( \002%nick%\002 ) found in bad channels: ( \002%chans%\002 )"
+set black(say.en.badchan.45) "\005\[BT\]\005 Added \001%msg.1%\001 as exception with no. \002%msg.2%\002 in \002%chan%\002's BadChans List."
+
+################################# AntiTaKe ######################################
+
+set black(say.en.antitake.1) "\005\[BT\]\005 You cannot give \002DEOP\002 because you are not in my database with access."
+set black(say.en.antitake.2) "\005\[BT\]\005 You cannot give \002OP\002 because you are not in my database with access."
+
+################################# Anunt (advert) ######################################
+
+set black(say.en.anunt.1) "%msg%"
+set black(say.en.anunt.2) "\005\[BT\]\005 *** END Adverts List ***"
+set black(say.en.anunt.3) "\005\[BT\]\005 \002Adverts\002 module turned \001ON\001."
+set black(say.en.anunt.4) "\005\[BT\]\005 \002Adverts\002 module turned \001OFF\001."
+set black(say.en.anunt.5) "\005\[BT\]\005 Advert with no. \002%msg.1%\002 added on \001%chan%\001:"
+set black(say.en.anunt.6) "\002%msg.1%\002) %msg.8%"
+set black(say.en.anunt.7) "\005\[BT\]\005 There are no Adverts for \001%chan%\001."
+set black(say.en.anunt.8) "\005\[BT\]\005 \002Adverts List\002 for \001%chan%\001 is:"
+set black(say.en.anunt.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%anunt list -next\001 (\002%counter%\002 Adverts left)"
+set black(say.en.anunt.10) "\005\[BT\]\005 Removed no. \001%msg.1%\001 from %chan%'s Adverts List."
+set black(say.en.anunt.13) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002%chan%'s\002 Adverts List."
+set black(say.en.anunt.14) "\005\[BT\]\005 To see the next set of entries, type: \001%char%anunt %chan% list -next\001 (\002%counter%\002 Adverts left)"
+
+################################# AutoBroadcast ######################################
+
+set black(say.en.autobroadcast.1) "%msg%"
+set black(say.en.autobroadcast.2) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in my \002AutoBroadcast List\002."
+set black(say.en.autobroadcast.3) "\005\[BT\]\005 \002AUTOBROADCAST\002 is already enabled."
+set black(say.en.autobroadcast.4) "\005\[BT\]\005 \002AUTOBROADCAST\002 module turned \001ON\001."
+set black(say.en.autobroadcast.5) "\005\[BT\]\005 \002AUTOBROADCAST\002 module turned \001OFF\001."
+set black(say.en.autobroadcast.6) "\005\[BT\]\005 AutoBroadcast with no. \001%msg.2%\001 added in my database list."
+set black(say.en.autobroadcast.7) "#\002%msg.1%\002) %msg.8%"
+set black(say.en.autobroadcast.8) "\005\[BT\]\005 There are no \002AutoBroadcasts\002 in my database list..."
+set black(say.en.autobroadcast.9) "\005\[BT\]\005 \002AutoBroadcasts List\002 is:"
+set black(say.en.autobroadcast.10) "\005\[BT\]\005 *** END AutoBroadcasts List ***"
+set black(say.en.autobroadcast.11) "\005\[BT\]\005 Removed no. \001%msg.1%\001 from AutoBroadcasts List."
+set black(say.en.autobroadcast.12) "\005\[BT\]\005 To see the next set of entries, type: \001%char%bt list -next\001 (\002%counter%\002 AutoBroadcasts left)"
+
+################################# Limit ######################################
+
+set black(say.en.limit.5) "\005\[BT\]\005 \002AutoLimit\002 module turned \001ON\001 in \002%chan%\002."
+set black(say.en.limit.6) "\005\[BT\]\005 Current channel limit is \002%msg.1%\002."
+set black(say.en.limit.7) "\005\[BT\]\005 \002AutoLimit\002 module turned \001OFF\001 in \002%chan%\002."
+set black(say.en.limit.9) "\005\[BT\]\005 FAILED: You cannot set limit less than \0022\002."
+set black(say.en.limit.10) "\005\[BT\]\005 Setting limit to \002+2\002."
+set black(say.en.limit.11) "\005\[BT\]\005 FAILED: You cannot set limit higher than \002500\002."
+set black(say.en.limit.12) "\005\[BT\]\005 Channel limit successfully set to: \002+%msg.1%\002"
+
+################################# Topic ######################################
+
+set black(say.en.topic.1) "\005\[BT\]\005 Topic for \002%chan%\002 is now: \001%msg%\001"
+set black(say.en.topic.2) "\005\[BT\]\005 I can not set the topic because \002it's empty\002."
+set black(say.en.topic.3) "\005\[BT\]\005 Topic for \002%chan%\002 is now: \001%msg%\001 (current topic)"
+set black(say.en.topic.4) "\005\[BT\]\005 Reset topic from \002%chan%\002"
+
+####################################### Seen ######################################
+
+set black(say.en.seen.4) "\005\[BT\]\005 \002%msg.1%\002 I am right here :P"
+set black(say.en.seen.5) "\005\[BT\]\005 Wait\002 1 minute\002 to search."
+set black(say.en.seen.6) "\005\[BT\]\005 \001%msg.1%\001 look in a mirror :0"
+set black(say.en.seen.7) "\005\[BT\]\005 \001%msg.1%\001 is in \002%chan%\002. Get a pair of glasses.."
+set black(say.en.seen.8) "i have no record how long it stayed."
+set black(say.en.seen.9) "after it stayed \002%staytime%\002 on \001%chan%\001."
+set black(say.en.seen.10) " \002%newnick%\002 is still on \002%chan%\002."
+set black(say.en.seen.11) " Unable to see \002%userentry%\002 right now on \002%chan%\002"
+set black(say.en.seen.12) "\005\[BT\]\005 \002%entry%\002 (%host%) left \001%chan%\001 about %output% ago %date%, with message: %reason%, %staymsg%"
+set black(say.en.seen.13) "\005\[BT\]\005 \002%entry%\002 (%host%) left IRC %output% ago %date%, with message: %reason%, %staymsg%"
+set black(say.en.seen.14) "\005\[BT\]\005 \002%entry%\002 (%host%) joined %chan% %output% ago %date%.%nowon%"
+set black(say.en.seen.15) "\005\[BT\]\005 \002%entry%\002 (%host%) left in *.net *.split %output% ago %date%, %staymsg%"
+set black(say.en.seen.16) "\005\[BT\]\005 \002%entry%\002 (%host%) was kicked out from %chan% %output% ago %date% with reason (%reason%), %staymsg%"
+set black(say.en.seen.17) "\005\[BT\]\005 \002%entry%\002 (%host%) changed his/her nickname in %newnick% %output% ago %date%.%nowon%"
+set black(say.en.seen.18) "\005\[BT\]\005 I dont remember seeing \002%msg.1%\002 lately.."
+set black(say.en.seen.19) " \002%latest%\002 is still on \002%chan%\002."
+set black(say.en.seen.20) " Unable to see \002%latest%\002 right now on \002%chan%\002."
+set black(say.en.seen.21) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) left %chan% about %output% ago %date% with message: \"%reason%\", %staymsg%"
+set black(say.en.seen.22) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) left IRC about %output% ago %date% with message: \"%reason%\", %staymsg%"
+set black(say.en.seen.23) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) joined %chan% about %output% ago %date%.%nowon%"
+set black(say.en.seen.24) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) left in *.net *.split %output% ago %date%, %staymsg%"
+set black(say.en.seen.25) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) was kicked out from %chan% about %output% ago %date% with reason \"%reason%\", %staymsg%"
+set black(say.en.seen.26) "\005\[BT\]\005 Found (\002%num%\002) results \"%entry%\". Most recently \002%latest%\002 (%host%) changed his/her nickname in %newnick% about %output% ago %date%.%nowon%"
+set black(say.en.seen.27) "%msg%"
+set black(say.en.seen.28) "\005\[BT\]\005 Found more than (%msg.1%) results"
+set black(say.en.seen.29) "\005\[BT\]\005 %entry% (%host%) was last seen on %chan%.%nowon%"
+set black(say.en.seen.30) "\005\[BT\]\005 Found (%num%) results \"%entry%\". Most recently \002%latest%\002 (%host%) was last seen on %chan%.%nowon%"
+set black(say.en.seen.31) "\005\[BT\]\005 As far as I know, \002%userentry%\002 hasnt said anything."
+set black(say.en.seen.32) "\005\[BT\]\005 As far as I know, %output% ago, \002%userentry%\002 (%host%) said on %chan%: \"%lastmsg%\""
+set black(say.en.seen.33) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) left %chan% about %output% ago %date% with message: \"%reason%\", %staymsg%"
+set black(say.en.seen.34) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) left IRC about %output% ago %date% with message: \"%reason%\", %staymsg%"
+set black(say.en.seen.35) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) joined %chan% about %output% ago %date%.%nowon%"
+set black(say.en.seen.36) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) left in *.net *.split about %output% ago %date%, %staymsg%"
+set black(say.en.seen.37) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) was kicked out from %chan% about %output% ago %date% with reason: \"%reason%\", %staymsg%"
+set black(say.en.seen.38) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) changed his/her nickname in %newnick% about %output% ago %date%. %nowon%"
+set black(say.en.seen.39) "\005\[BT\]\005 Heya %msg.1%, you need to know that \002%msg.2%\002 was looking for you with \002seen\002 on \002%chan%\002 about \002%msg.3%\002 ago."
+set black(say.en.seen.40) "\005\[BT\]\005 Found more than (\002%num%\002) results. Most recently \002%latest%\002 (%host%) was last seen on %chan%.%nowon%"
+set black(say.en.seen.41) "\005\[BT\]\005 Found more than (\002%num%\002) results. Please be more explicit."
+
+################################# Greet ######################################
+
+set black(say.en.greet.1) "\005\[BT\]\005 Set greet message for \002%chan%\002 as: \001%msg%\001"
+set black(say.en.greet.2) "\005\[BT\]\005 \002Greet\002 module turned \001ON\001."
+set black(say.en.greet.3) "\005\[BT\]\005 \002Greet\002 module turned \001OFF\001."
+
+################################# Leave #######################################
+
+set black(say.en.leave.1) "\005\[BT\]\005 Set leave message for \002%chan%\002 as: \001%msg%\001"
+set black(say.en.leave.2) "\005\[BT\]\005 \002Leave\002 module turned \001ON\001."
+set black(say.en.leave.3) "\005\[BT\]\005 \002Leave\002 module turned \001OFF\001."
+
+################################# Idle ######################################
+
+set black(say.en.idle.11) "\005\[BT\]\005 \002Idle-Deop\002 module turned \001ON\001 on \001%chan%\001."
+set black(say.en.idle.12) "\005\[BT\]\005 \002Idle-Deop\002 module turned \001OFF\001 on \001%chan%\001."
+set black(say.en.idle.14) "\005\[BT\]\005 \002Idle-Voice\002 module turned \001ON\001 on \001%chan%\001."
+set black(say.en.idle.15) "\005\[BT\]\005 \002Idle-Voice\002 module turned \001OFF\001 on \001%chan%\001."
+set black(say.en.idle.17) "\005\[BT\]\005 \001%msg.1%\001 is not on \002%chan%\002."
+set black(say.en.idle.18) "\005\[BT\]\005 \001%msg.1%\001 is already in my database, adding as an exception only.."
+set black(say.en.idle.19) "\005\[BT\]\005 I have added as an exception \001%msg.1%\001 with host \002%msg.2%\002 on \001%chan%\001."
+set black(say.en.idle.20) "\005\[BT\]\005 \002Idle Exceptions List\002 for \001%chan%\001 is:"
+set black(say.en.idle.21) "%msg%"
+set black(say.en.idle.22) "\005\[BT\]\005 \002%msg.1%\002 is not in my database."
+set black(say.en.idle.23) "\005\[BT\]\005 \002%msg.1%\002 is not added as an exception to idle."
+set black(say.en.idle.24) "\005\[BT\]\005 \001%msg.1%\001 was removed from my \002Idle Exceptions List\002."
+set black(say.en.idle.25) "\005\[BT\]\005 \002Idle-HalfOp\002 module turned \001ON\001 on \001%chan%\001."
+set black(say.en.idle.26) "\005\[BT\]\005 \002Idle-HalfOp\002 module turned \001OFF\001 on \001%chan%\001."
+
+################################# TCL ######################################
+
+set black(say.en.tcl.2) "\005\[BT\]\005 *** END tcls List ***"
+set black(say.en.tcl.3) "\005\[BT\]\005 Couldn't load the script: \001%msg.1%\001. Reason: \002%msg.8%\002"
+set black(say.en.tcl.4) "\005\[BT\]\005 The script \002\"%msg.1%\"\002 is already loaded."
+set black(say.en.tcl.5) "\005\[BT\]\005 The script \002\"%msg.1%\"\002 has been successfuly loaded."
+set black(say.en.tcl.7) "\005\[BT\]\005 The script \002\"%msg.1%\"\002 is not loaded."
+set black(say.en.tcl.8) "\005\[BT\]\005 Disabled the script \002\"%msg.1%\"\002."
+set black(say.en.tcl.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%tcl list -next\001 (\002%counter%\002 tcls left)"
+set black(say.en.tcl.10) "\005\[BT\]\005 \002TCL\002 list (those with bold are loaded) is:"
+set black(say.en.tcl.12) "\005\[BT\]\005 \002\"%msg.1%\"\002 \002doesn't exists\002 in scripts."
+set black(say.en.tcl.13) "\005\[BT\]\005 \002\"%msg.1%\"\002 exists but \002is not loaded\002"
+set black(say.en.tcl.14) "\005\[BT\]\005 \002\"%msg.1%\"\002 exists and \002it's loaded\002"
+set black(say.en.tcl.17) "%msg%."
+set black(say.en.tcl.18) "\005\[BT\]\005 FAILED: You cannot unload this script!"
+set black(say.en.tcl.19) "\005\[BT\]\005 FAILED: I was \002unable to download\002 the script \001%msg.1%\001 from the given link."
+set black(say.en.tcl.20) "\005\[BT\]\005 Download completed! To load the script use: \002%char%tcl load %msg.1%\002"
+set black(say.en.tcl.21) "\005\[BT\]\005 The script \002%msg.1%\002 is already downloaded."
+
+#################################### Next #####################################
+
+set black(say.en.next.1) "Welcome \002%nick%\002, please wait... As soon as a helper is free you will be voiced. Please do \002NOT\002 msg \002+v/+o\002. You are number \002%counter%\002 in line. Thank you!"
+set black(say.en.next.2) "You are now being helped by \002%nick%\002. Please ask your question in \002one\002 line and \002wait\002 for an answer from your designated helper!"
+set black(say.en.next.3) "\005\[BT\]\005 \001%msg.1%\001 was waiting for \002%msg.set%\002, please help him/her now :)"
+set black(say.en.next.4) "\001%current%\001 now that you've been helped, please \002/part %chan%\002. If you have more questions, please \001/hop %chan%\001. Thank you!"
+set black(say.en.next.5) "You are not permitted to idle in here. Please rejoin the channel when you require help"
+set black(say.en.next.6) "\005\[BT\]\005 \002ATTENTION\002: \002%nick%\002 needs help on \002%chan%\002. This is number \002%counter%\002 in line."
+set black(say.en.next.7) "\005\[BT\]\005 List of users awaiting help:"
+set black(say.en.next.8) "\005\[BT\]\005 No one needs help at this time."
+set black(say.en.next.9) "%msg%"
+set black(say.en.next.11) "\005\[BT\]\005 \002ATTENTION\002: \002%current%\002 is being helped \002right now\002 by \002%nick%\002 (%hand%)"
+set black(say.en.next.13) "\005\[BT\]\005 FAILED: \001%msg.1%\001 is in the help list, but hasn't been helped yet."
+set black(say.en.next.14) "\005\[BT\]\005 FAILED: \001%msg.1%\001 is not in help list."
+set black(say.en.next.15) "\005\[BT\]\005 \002ATTENTION\002: \002%current%\002 has received \002help\002 from \002%nick%\002 (%hand%)."
+set black(say.en.next.17) "\005\[BT\]\005 FAILED: \002%msg.1%\002 has to receive help first \001%msg.1%\001"
+set black(say.en.next.19) "\005\[BT\]\005 Skipped \002%msg.1%\002 (user has been moved to the end of the list)"
+
+#################################### Quote #####################################
+
+set black(say.en.quote.1) "\005\[BT\]\005 Successfully stored quote no. \002%msg.1%\002 to database."
+set black(say.en.quote.2) "\005\[BT\]\005 *** END Quote List ***"
+set black(say.en.quote.3) "\005\[BT\]\005 Quote \001#%msg.1%\001: %msg.8%"
+set black(say.en.quote.4) "\005\[BT\]\005 \001%msg.1%\001 :: %msg.2% ::"
+set black(say.en.quote.6) "#\002%msg.1%\002) %msg.8%"
+set black(say.en.quote.7) "\005\[BT\]\005 No entries in \002Quote List\002 for \001%chan%\001"
+set black(say.en.quote.8) "\005\[BT\]\005 \002Quote List\002 for \001%chan%\001 is:"
+set black(say.en.quote.9) "\005\[BT\]\005 To see the next set of entries, type: \001%char%q list -next\001 (\002%counter%\002 quotes left)"
+set black(say.en.quote.10) "\005\[BT\]\005 Successfully removed quote no. \001%msg.1%\001 from \002%chan%\002's database."
+set black(say.en.quote.11) "\005\[BT\]\005 FAILED: I have no record of that quote."
+set black(say.en.quote.12) "\005\[BT\]\005 \002\[Quote of Day\]\002"
+set black(say.en.quote.13) "\005\[BT\]\005 FAILED: No entries matching for no. \001%msg.1%\001 in \002Quote List\002 of \002%chan%\002"
+set black(say.en.quote.14) "\005\[BT\]\005 To see the next set of entries, type: \001%char%q %chan% list -next\001 (\002%counter%\002 quotes left)"
+set black(say.en.quote.15) "\002Added by\002:"
+set black(say.en.quote.16) "%msg%"
+set black(say.en.quote.17) "\005\[BT\]\005 \002Quote\002 \001#%msg.1%: %msg.set%\001"
+set black(say.en.quote.18) "\005\[BT\]\005 Other quote numbers: \002%msg%\002"
+set black(say.en.quote.19) "\005\[BT\]\005 \002Quote\002: \001%msg%\001"
+set black(say.en.quote.20) "Created on:"
+
+#################################### Notes #####################################
+
+set black(say.en.notes.1) "\005\[BT\]\005 Saved \002note\002 with no. \002%msg.1%\002 to your database."
+set black(say.en.notes.2) "\005\[BT\]\005 Note sent to \002%msg.1%\002/%msg.2% users."
+set black(say.en.notes.3) "\005\[BT\]\005 Note sent to \002%msg.1%\002/%msg.2% users. Invalid users: \001%msg.7%\001."
+set black(say.en.notes.4) "\005\[BT\]\005 FAILED: No entries matching for no. #\002%msg.1%\002."
+set black(say.en.notes.5) "\005\[BT\]\005 \002Note\002 #%msg.1%: \002Location\002: %msg.2% \002Since\002: %msg.3%"
+set black(say.en.notes.6) "\005\[BT\]\005 \002Message\002: %msg%"
+set black(say.en.notes.7) "\005\[BT\]\005 \002Note\002 #%msg.1%: \002Location\002: %msg.2% \002From\002: %msg.3% \002Since\002: %msg.4%"
+set black(say.en.notes.8) "\005\[BT\]\005 Successfully removed note no. \002%msg.1%\002."
+set black(say.en.notes.9) "\002Status\002: READ \002Message\002: "
+set black(say.en.notes.10) "\002Status\002: UNREAD \002Message\002: "
+set black(say.en.notes.11) "\005\[BT\]\005 You have \001%msg.1%\001 unread note(s) pending. Those are: \002%msg.7%\002. Total notes: \001%msg.2%\001"
+set black(say.en.notes.12) "\005\[BT\]\005 You have \001%msg.1%\001 unread note(s) pending.. Total notes: \002%msg.2%\002"
+set black(say.en.notesinbox.13) "\005\[BT\]\005 Type: \002%char%note read <number>\002 to view it."
+set black(say.en.notesinbox.15) "\005\[BT\]\005 To see the next set of entries, type: \001%char%note inbox -next\001 (\002%counter%\002 notes left)"
+set black(say.en.notesinbox.16) "\005\[BT\]\005 To see the next set of entries, type: \001%char%note %chan% inbox -next\001 (\002%counter%\002 notes left)"
+set black(say.en.notes.13) "\005\[BT\]\005 FAILED: Your \002Notes List\002 is empty."
+set black(say.en.notes.14) "\005\[BT\]\005 You have \002%msg.1%\002 personal notes added:"
+set black(say.en.noteslist.15) "\005\[BT\]\005 To see the next set of entries, type: \001%char%note list -next\001 (\002%counter%\002 note-uri ramase)"
+set black(say.en.noteslist.16) "\005\[BT\]\005 To see the next set of entries, type: \001%char%note %chan% list -next\001 (\002%counter%\002 note-uri ramase)"
+set black(say.en.noteslist.13) "\005\[BT\]\005 Type: \002%char%note read <number>\002 to view it."
+set black(say.en.notes.15) "\005\[BT\]\005 Erased \002ALL\002 notes from inbox."
+set black(say.en.notes.16) "\005\[BT\]\005 Type: \002%char%note read <number>\002 to view it."
+set black(say.en.notes.17) "NOTES_DISABLED"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                      COMMANDS                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+###################################### ReportNick #################################
+
+set black(say.en.report.1) "\005\[BT\]\005 You're sending requests too fast. Calm down and try again after \002%msg.1% seconds\002. Thanks!"
+set black(say.en.report.2) "\[REPORT\] Nick: \002%msg.1%\002 was reporter by: \001%msg.2%\001 ; Reason: \002%msg.8%\002"
+set black(say.en.report.3) "\[REPORT\] Nick: \002%msg.1%\002 was reporter by: \001%msg.2%\001"
+set black(say.en.report.4) "\005\[BT\]\005 Your report has been sent to our operators team. Thanks you!"
+set black(say.en.report.5) "\005\[BT\]\005 You can't report yourself dork!!"
+
+###################################### cp #####################################
+
+set black(say.en.cp.1) "\005\[BT\]\005 Copy failure. (\002%msg.1%\002's BanList it's empty.)"
+set black(say.en.cp.2) "\005\[BT\]\005 Copy failure. (\002%msg%\002 is not a valid channel.)"
+set black(say.en.cp.3) "\005\[BT\]\005 Copy failure. (\002%msg%\002 there are no valid channels.)"
+set black(say.en.cp.4) "\005\[BT\]\005 Copy done. (\002%msg.1%\002 copied recordings.)"
+set black(say.en.cp.5) "\005\[BT\]\005 Copy done. (\002%msg.1%\002 users out of \001%msg.2%\001 copied.)"
+set black(say.en.cp.6) "\005\[BT\]\005 Copy done. (\002%msg.1%\002 settings copied.)"
+set black(say.en.cp.7) "\005\[BT\]\005 Copy done. (\002%msg.1%\002 badchans copied.)"
+
+#################################### mySet ####################################
+
+set black(say.en.myset.1) "\005\[BT\]\005 \002Language\002 is now set to: \001%msg.1%\001."
+set black(say.en.myset.2) "\005\[BT\]\005 You will receive all bot messages via \002%msg.1%\001."
+set black(say.en.myset.3) "\005\[BT\]\005 \002Autoinvite\002 is now set to: \001%msg.1%\001."
+set black(say.en.myset.4) "\005\[BT\]\005 Your \002handle\002 is now set to: \001%msg.1%\001."
+set black(say.en.myset.5) "\005\[BT\]\005 Unable to set language \001%msg.1%\001 because the file does not exists."
+set black(say.en.myset.6) "\005\[BT\]\005 Your personal \002infoline\002 (greet) is now set to: \001%msg%\001."
+set black(say.en.myset.7) "\005\[BT\]\005 Added \001%msg.1%\001 as your hostname."
+set black(say.en.myset.8) "\005\[BT\]\005 Deleted \001%msg.1%\001 from hostnames database."
+set black(say.en.myset.9) "\005\[BT\]\005 \001%msg.1%\001 is not in hostnames database."
+set black(say.en.myset.10) "\005\[BT\]\005 Your \002mychan\002 is now set to: \001%msg.1%\001."
+set black(say.en.myset.11) "\005\[BT\]\005 Your \001%msg.1%\001 has been reseted."
+set black(say.en.myset.12) "\005\[BT\]\005 \002%msg.1%\002 is now set to: \001%msg.8%\001."
+set black(say.en.myset.13) "\005\[BT\]\005 \002NoteExpire\002 is now set to: \001%msg.1%\001."
+set black(say.en.myset.14) "\005\[BT\]\005 You have to specify 4 colors from those available. Available colors are:\002bold\002 \001underline\001 \0034red\003 \00312blue\003 \0033green\003 \0038yellow\003 \0037orange\003 \00310cyan\003 \00314grey\003 \0035brown\003 \0036purple\003 \00313pink\003 black"
+set black(say.en.myset.15) "\005\[BT\]\005 One of the colors is invalid. Available colors are: \002bold\002 \001underline\001 \0034red\003 \00312blue\003 \0033green\003 \0038yellow\003 \0037orange\003 \00310cyan\003 \00314grey\003 \0035brown\003 \0036purple\003 \00313pink\003 black"
+set black(say.en.myset.16) "\005\[BT\]\005 Your \002colors\002 are now set to: \001%msg%\001"
+set black(say.en.myset.17) "\005\[BT\]\005 You have to specify one of the available chars. Available chars are: \001%msg%\001"
+set black(say.en.myset.18) "\005\[BT\]\005 Your \002mychar\002 is now set to: \001%msg.1%\001"
+set black(say.en.myset.19) "\005\[BT\]\005 You can now receive \002NOTES\002"
+set black(say.en.myset.20) "\005\[BT\]\005 Yo can't receive \002NOTES\002 from now"
+
+################################# Troll ######################################
+
+set black(say.en.troll.5) "Constantly trolling, never learned to behave"
+set black(say.en.troll.6) "Current miserable trolls (not wanted here) are: \002%msg%\002"
+
+#################################### dr #######################################
+
+set black(say.en.dr.5) "Drone/possible malware infection"
+
+#################################### vr #######################################
+
+set black(say.en.vr.5) "Infected/eXploited with a worm/virus, please clean your computer"
+
+################################### Bot #######################################
+
+set black(say.en.bot.5) "Possible BOT"
+set black(say.en.bot.6) "For unban use: \002/msg %botnick% unbanme %chan% %msg%\002"
+set black(say.en.bot.7) "Congratulations! Your ban from \002%chan%\002 has been removed. You can now rejoin!" 
+set black(say.en.bot.8) "If *HUMAN* -> \002/msg %botnick% unbanme %chan%\002"
+
+################################## b #####################################
+
+set black(say.en.b.5) {"You are banned!"
+			"Problem solved"
+			"Houston, we have lift off"
+			"well, you're UNWANTED"
+			"Talk to the foot!"
+			"Thank you, please drive through!"
+			}
+set black(say.en.b.6) "\005\[BT\]\005 The maximum duration for your ban level is \0027d\002 (20160 minute)"
+set black(say.en.b.7) "\005\[BT\]\005 Added a \[LOCAL\] ban to \002%chan%\002"
+set black(say.en.b.8) "\005\[BT\]\005 Added a \[GLOBAL\] ban."
+set black(say.en.b.9) "\005\[BT\]\005 \002MassBan\002 is not allowed!"
+set black(say.en.b.10) "\005\[BT\]\005 \002%msg.1%\002 is NOT a valid banmask."
+
+################################## n #####################################
+
+set black(say.en.n.5) "Your NICKNAME is inappropiate for this channel. Please change it or face a ban."
+
+################################## id ####################################
+
+set black(say.en.id.5) "Your IDENT is inappropiate for this channel. Please change it or face a ban."
+
+################################## Black #################################
+
+set black(say.en.black.5) "You are no longer welcome here"
+
+################################## w #####################################
+
+set black(say.en.w.5) { "What you've been saying is inappropriate and will not be tolerated here. Please change your behaviour."
+		        "Your behavior is not conducive to the desired environment."
+		        "Your behaviour is inappropriate, please change your way of chatting."
+		        "Please be friendly and watch your language"
+		        }
+set black(say.en.w.6) "This was the last warning. Next time you'll be banned!"
+
+################################# spam ###################################
+
+set black(say.en.spam.5) "MSG Advertising/Invite/Possible Spam"
+
+################################# k #######################################
+
+set black(say.en.k.1) "\005\[BT\]\005 Didn't found any user on %chan%."
+set black(say.en.k.2) "\005\[BT\]\005 %msg.1% has access on %chan%"
+set black(say.en.k.5)  {"Sorry, please rejoin so I can kick you again"
+			"There's the exit, learn it well"
+			"Oooops, I did it again"
+			"go ewey"
+			}
+
+################################# Gag ######################################
+
+set black(say.en.gag.1) "- ATTENTION - \002%gag%\002 still needs to serve a \001%minute%\001 penance for breaking the channel rules. Enjoy the sound of silence :-)"
+set black(say.en.gag.2) "\005\[BT\]\005 *** END GAGList ***"
+set black(say.en.gag.3) "\005\[BT\]\005 \002%msg.1%\002 has already GAGged on \001%chan%\001."
+set black(say.en.gag.4) "\005\[BT\]\005 \002%msg.1%\002 is already Banned on \001%chan%\001."
+set black(say.en.gag.5) "- ATTENTION - \002%nick%\002 can now type again on \002%chan%\002."
+set black(say.en.gag.6) "N/A"
+set black(say.en.gag.7) "\005\[BT\]\005 The maximum \002GAG duration\002 for your access level is \0017d\001 (20160 minutes)"
+set black(say.en.gag.10) "\005\[BT\]\005 You have been silenced on \002%chan%\002 for \001%time%\001 because you are violating the channel \002rules\002."
+set black(say.en.gag.11) "- ATTENTION - \002%gagger%\002 will be unable to type in \002%chan%\002 for \001%time%\001 because broke the channel \002rules\002."
+
+################################# unGag #####################################
+
+set black(say.en.ungag.5) "\005\[BT\]\005 There is no GAG for \001%msg.1%\001 on \002%chan%\002."
+set black(say.en.ungag.6) "\005\[BT\]\005 Removed GAG for \001%msg.1%\001 on \002%chan%\002."
+set black(say.en.ungag.7) "Now you can type again on \002%chan%\002. Please be more careful and do NOT break again the channel \002rules\002."
+set black(say.en.ungag.8) "- ATTENTION - \002%gagger%\002 can now type again on %chan%."
+
+################################ bw #########################################
+
+set black(say.en.bw.5) "Unwanted user due to abusive behavior"
+
+############################### sb ##########################################
+
+set black(say.en.sb.1) "\005\[BT\]\005 Found \001%msg.1%\001 bans (\002%msg.2%\002 global, \002%msg.3%\002 local)"
+set black(say.en.sb.2) "\005\[BT\]\005 There are \002NO\002 bans matching \001%msg.1%\001."
+set black(say.en.sb.3) "\005\[BT\]\005 \[ID: %msg.1%\] | \[CHAN\]: * | \002%msg.2%\002 | Added by: \002%msg.3%\002 | Since: \002%msg.4%\002 | EXP: \002%msg.12%\002 \002%msg.13%\002 \002%msg.15%\002 | Reason: \002%msg.16%\002"
+set black(say.en.sb.4) "\005\[BT\]\005 \[ID: %msg.1%\] | \[CHAN\]: \002%chan%\002 | \002%msg.2%\002 | Added by: \002%msg.3%\002 | Since: \002%msg.4%\002 | EXP: \002%msg.12%\002 \002%msg.13%\002 \002%msg.15%\002 | Reason: \002%msg.16%\002"
+set black(say.en.sb.5) "\005\[BT\]\005 There are too many results (>10) matching. Please be more specific."
+set black(say.en.sb.6) "\005\[BT\]\005 Found \002%msg.1%\002 local bans."
+set black(say.en.sb.7) "\005\[BT\]\005 Said on chan: \002%msg%\002"
+set black(say.en.sb.8) "\005\[BT\]\005 Co-channeling in bad channels: \002%msg%\002"
+set black(say.en.sb.9) "\005\[BT\]\005 \[ID: %msg.1%\] | \[CHAN\]: \002%chan%\002 | \002%msg.2%\002 | Added by: \002%msg.3%\002 | Since: \002%msg.4%\002 | EXP: \002%msg.12%\002 | Reason: \002%msg.11%\002"
+set black(say.en.sb.10) "\005\[BT\]\005 \[ID: %msg.1%\] | \[CHAN\]: * | \002%msg.2%\002 | Added by: \002%msg.3%\002 | Since: \002%msg.4%\002 | EXP: \002%msg.12%\002 | Reason: \002%msg.11%\002"
+set black(say.en.sb.11) "\005\[BT\]\005 There is \002NO\002 such ID record matching \001%msg.1%\001."
+set black(say.en.sb.12) "\005\[BT\]\005 \[\002BAN COMMENT\002\] %msg%"
+
+############################### Stick ########################################
+
+set black(say.en.stick.5) "Sticky ban"
+
+################################## BanList ##################################### 
+
+set black(say.en.banlist.1) "Permanent"
+set black(say.en.banlist.2) "\005\[BT\]\005 \[CHAN\]: * (\002%msg.1%\002 bans found)"
+set black(say.en.banlist.3) "\005\[BT\]\005 To see the next set of entries, type \001%char%banlist global -next\001 (\002%counter%\002 bans left)"
+set black(say.en.banlist.4) "\005\[BT\]\005 *** END BanList ***"
+set black(say.en.banlist.5) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Added by: \002%msg.4%\002 ; Since: \002%msg.12%\002 ; EXP: \002%msg.13%\002 \002%msg.15%\002 \002%msg.17%\002 ; Reason: \002%msg.20%\002"
+set black(say.en.banlist.6) "\005\[BT\]\005 \[CHAN\]: %chan% (\002%msg.1%\002 bans found)"
+set black(say.en.banlist.7) "\005\[BT\]\005 \[USER\]: %msg.2% (\002%msg.1%\002 bans found)"
+set black(say.en.banlist.8) "\005\[BT\]\005 To see the next set of entries, type %char%banlist \002%user%\002 -next (\002%counter%\002 bans left)"
+set black(say.en.banlist.9) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Since: \002%msg.4%\002 ; EXP: %msg.12% \002%msg.13%\002 \002%msg.15%\002 ; Reason: \002%msg.16%\002"
+set black(say.en.banlist.10) "\005\[BT\]\005 To see the next set of entries, type %char%banlist all -next (\002%counter%\002 bans left)"
+set black(say.en.banlist.11) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Added by: \002%msg.4%\002 ; Since: \002%msg.12%\002 ; EXP: \002%msg.13%\002 ; Reason: \002%msg.14%\002"
+set black(say.en.banlist.12) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Since: \002%msg.4%\002 ; EXP: \002%msg.12%\002 ; Reason: \002%msg.11%\002"
+set black(say.en.banlist.13) "NEVER"
+set black(say.en.banlist.14) "\005\[BT\]\005 To see the next set of entries, type \001%char%banlist %chan% all -next\001 (\002%counter%\002 bans left)"
+set black(say.en.banlist.15) "\005\[BT\]\005 To see the next set of entries, type \001%char%banlist %chan% other -next\001 (\002%counter%\002 bans left)"
+
+############################### Status #######################################
+
+set black(say.en.status.1) "\005\[BT\]\005 Script version: \001%msg.1% %msg.2%\001 - Eggdrop version: \002%msg.3%\002 - TCL version: \001%msg.12%\003"
+set black(say.en.status.2) "\005\[BT\]\005 Started time: \002%msg%\002"
+set black(say.en.status.3) "\005\[BT\]\005 Online time: \002%msg%\002"
+set black(say.en.status.4) "\005\[BT\]\005 Channels monitored: \002%msg%\002"
+set black(say.en.status.5) "\005\[BT\]\005 Total users: \001%msg.1%\001 - Eggdrop owner: \002%msg.2%\002"
+
+############################## upTime #######################################
+
+set black(say.en.uptime.2) "\005\[BT\]\005 Server uptime: \002%msg%\002"
+set black(say.en.uptime.3) "\005\[BT\]\005 Connected to: \002%msg%\002"
+
+################################ i ##########################################
+
+set black(say.en.i.1) "\005\[BT\]\005 \001%msg.1%\001 is already on \002%chan%\002."
+set black(say.en.i.2) "\005\[BT\]\005 Inviting \001%msg.1%\001 to \002%chan%\002."
+set black(say.en.i.7) "You are invited in \002%chan%\002 by\001 %nick%\001, to join type:\002 /join %chan%\002. Thanks!"
+
+################################ Cycle #####################################
+
+set black(say.en.cycle.1) { "Doing exercise.."
+			    "Trying to fix something.."
+			    "Coming back.."
+			    "I'll return in a moment.."
+			    }
+set black(say.en.cycle.2) "I'll be back in %msg.1% seconds.."
+
+################################ Purge #####################################
+
+set black(say.en.purge.1) "\005\[BT\]\005 Please specify a reason.."
+
+################################## Chat #####################################
+
+set black(say.en.chat.1) "\005\[BT\]\005 DCC Chat - Initializing..."
+set black(say.en.chat.2) "\005\[BT\]\005 You have not set a password, please do so now: /msg %botnick% pass \001<your password>\001"
+
+################################## Version ##################################
+
+set black(say.en.version.1) "\005\[BT\]\005 SCRIPT VERSION: \001BlackTools %msg.1%\001 coded by \002BLaCkShaDoW\002. For other details ---= \002WwW.TclScripts.Net\002 or #TCL-HELP @ UNDERNET"
+
+################################# ub ######################################
+
+set black(say.en.ub.1) "\005\[BT\]\005 I haven't found any bans matching \002%msg.1%\002"
+set black(say.en.ub.2) "\005\[BT\]\005 Removed \001%msg.1%\001 bans (\002%msg.2%\002 found) that matched \001%msg.3%\001"
+set black(say.en.ub.3) "\005\[BT\]\005 I haven't found any \[GLOBAL\] bans that matched \002%msg.1%\002"
+set black(say.en.ub.4) "\005\[BT\]\005 Removed \001%msg.1%\001 \[GLOBAL\] bans that matched \002%msg.2%\003"
+set black(say.en.ub.5) "\005\[BT\]\005 You don't have enough access to delete BanList."
+set black(say.en.ub.6) "\005\[BT\]\005 Ban removed from \002%chan%\002's BanList."
+set black(say.en.ub.7) "\005\[BT\]\005 Removed \001%msg.1%\001 bans from \002%msg.2%\002 channels \002LINKED\002"
+set black(say.en.ub.8) "\005\[BT\]\005 I haven't found any bans matching \[ID: \002%msg.1%\002\]"
+set black(say.en.ub.9) "\005\[BT\]\005 Removed ban with \[ID: \002%msg.3%\003\]"
+set black(say.en.ub.10) "\005\[BT\]\005 Removed \[GLOBAL\] ban that matched \[ID: \002%msg.2%\003\]"
+set black(say.en.ub.11) "\005\[BT\]\005 I haven't found any \[GLOBAL\] bans matching the \[ID: \002%msg.1%\002\]"
+
+################################## Mode ###################################
+
+set black(say.en.mode.6) "\005\[BT\]\005 Done! Modes \001%msg.1%\001 set on \002%chan%\002."
+
+################################### Set ###################################
+
+set black(say.en.set.1) "\005\[BT\]\005 Set \001%msg.1%\001 \004%msg.set%\004 ."
+set black(say.en.set.2) "\005\[BT\]\005 FAILED: Unable to set \001%msg.1%\001 \004%msg.set%\004"
+set black(say.en.set.3) "\005\[BT\]\005 \001%msg.1%\001 is already set to \002%msg.set%\002 on \002%chan%\002"
+set black(say.en.set.4) "\005\[BT\]\005 \001%msg.1%\001 is already set on \002%chan%\002."
+set black(say.en.set.5) "\005\[BT\]\005 FAILED: Unable to set \001%msg.1%\001 on \002%chan%\002"
+set black(say.en.set.6) "\005\[BT\]\005 Set \001%msg.1%\001 for \002%chan%\002"
+set black(say.en.set.7) "\005\[BT\]\005 FAILED: Unable to set \001%msg.1%\001 \004%msg.set%\004 on \002%chan%\002."
+set black(say.en.set.8) "\005\[BT\]\005 Set \001%msg.1%\001 \004%msg.set%\004 for \002%chan%\002"
+set black(say.en.set.9) "\005\[BT\]\005 \001%msg.1%\001 is already set to \002%msg.set%\002"
+set black(say.en.set.14) "\005\[BT\]\005 Invalid setting."
+
+#################################### unSet #################################
+
+set black(say.en.unset.1) "\005\[BT\]\005 There is no setting that matches \002%msg.1%\002."
+set black(say.en.unset.2) "\005\[BT\]\005 Reset \001%msg.1%\001 on \002%chan%\002 to the default value."
+set black(say.en.unset.3) "\005\[BT\]\005 \001%msg.1%\001 is not set on \002%chan%\002."
+set black(say.en.unset.4) "\005\[BT\]\005 Disabled all \002flag\002 settings from \001%chan%\001."
+set black(say.en.unset.5) "\005\[BT\]\005 Disabled all \002string\002 settings from \001%chan%\001."
+
+#################################### Timer ####################################
+
+set black(say.en.timer.1) "\005\[BT\]\005 Active timers are:"
+set black(say.en.timer.2) "\001%msg.1%\001) PID: \002%msg.2%\002 | Activ Time: \001%msg.3%\001 minutes | Process name: \002%msg.4%\002"
+set black(say.en.timer.3) "\001%msg.1%\001) PID: \002%msg.2%\002 | Activ Time: \001%msg.3%\001 seconds | Process name: \"\002%msg.9%\002\""
+set black(say.en.timer.4) "\005\[BT\]\005 *** END Timers List ***"
+set black(say.en.timer.5) "\005\[BT\]\005 Timer with pid \002%msg.1%\002 was killed."
+set black(say.en.timer.6) "\005\[BT\]\005 There is no such timer matching pid \002%msg.1%\002"
+set black(say.en.timer.7) "\005\[BT\]\005 Timer started with pid \002%msg.1%"
+set black(say.en.timer.8) "\005\[BT\]\005 There is already a timer started of that process."
+
+#################################### Ignore ################################
+
+set black(say.en.ignore.2) "\005\[BT\]\005 Can't ignore because the host belongs to a user who has greater access than you."
+set black(say.en.ignore.3) "\005\[BT\]\005 There are no ignores."
+set black(say.en.ignore.4) "\005\[BT\]\005 Mask: \001%msg.1%\001 | Added by: \002%msg.2%\002 | Reason: \001%msg.6%\001 | EXP: \002%msg.3%\002"
+set black(say.en.ignore.5) "\005\[BT\]\005 FAILED: \002%msg.1%\002 has ignore already."
+set black(say.en.ignore.6) "\005\[BT\]\005 Added ignore for \001%msg.1%\001 with reason: \002%msg.7%\002 expires after: \001%msg.2%\001"
+set black(say.en.ignore.8) "\005\[BT\]\005 Can't find \002%msg.1%\002 in the ignore list."
+set black(say.en.ignore.9) "\005\[BT\]\005 Removed ignore: \002%msg.1%\002."
+
+################################## Show ####################################
+
+set black(say.en.show.4) "\005\[BT\]\005 Current \001%msg.1%\001 is set to: \002%msg.2%\002. Time remain to the next timer: \002%msg.3%\002 minutes"
+set black(say.en.show.5) "\005\[BT\]\005 I could not get any info about \002%msg.1%\002."
+set black(say.en.show.6) "\005\[BT\]\005 Current \001%msg.1%\001 is set to: \002%msg.8%\002 on \002%chan%\002."
+set black(say.en.show.7) "\005\[BT\]\005 Currently \002%msg.1%\002 is enabled on \002%chan%\002."
+set black(say.en.show.8) "\005\[BT\]\005 Currently \002%msg.1%\002 is disabled on \002%chan%\002."
+
+################################### Rehash #####################################
+
+set black(say.en.rehash.1) "\005\[BT\]\005 Reloading scripts/settings.."
+
+################################### Restart ####################################
+
+set black(say.en.restart.1) "\005\[BT\]\005 System Reset. Back in a few.."
+
+################################### Save #######################################
+
+set black(say.en.save.1) "\005\[BT\]\005 Saving files.."
+
+################################### Jump #######################################
+
+set black(say.en.jump.1) "\005\[BT\]\005 Changing server to: %msg%"
+
+################################### Die #######################################
+
+set black(say.en.die.1) "\005\[BT\]\005 Suicide committed.."
+set black(say.en.die.2) "\005\[BT\]\005 ** BOOM ** This BlackTools eggdrop was terminated.." 
+
+################################### Nick #####################################
+
+set black(say.en.nick.1) "\005\[BT\]\005 Changing nickname to \002%msg.1%\002 (permanent setting)"
+set black(say.en.nick.2) "\005\[BT\]\005 Use: \"nick <new nick>\""
+set black(say.en.nick.3) "\005\[BT\]\005 Attention! The nickname was changed only until the next restart (check if \"set nick\" setting exist in your eggdrop config)."
+set black(say.en.nick.4) "\005\[BT\]\005 Changing nickname to \002%msg.1%\002 (temporary setting)"
+
+################################### AddChan ##################################
+
+set black(say.en.addchan.2) "\005\[BT\]\005 \002%msg.1%\002 is already in my channel list."
+set black(say.en.addchan.3) "\005\[BT\]\005 Added \002%msg.1%\002 in my channel list."
+
+################################### DelChan ##################################
+
+set black(say.en.delchan.1) "Channel %chan% was removed by \002%hand%\002 with the reason: %reason%"
+set black(say.en.delchan.2) "\005\[BT\]\005 \002%msg.1%\002 is not in my channel list."
+set black(say.en.delchan.3) "\005\[BT\]\005 Removed \002%msg.1%\002 from my channel list."
+set black(say.en.delchan.5) "\005\[BT\]\005 Unable to delete the channel \001%msg.1%\001 because it's the eggdrop \002HOMECHAN\002."
+
+################################### Suspend ##################################
+
+set black(say.en.suspend.2) "\005\[BT\]\005 Channel \002%chan%\002 was suspended by \001%hand%\001 with the reason: \002%reason%\002"
+set black(say.en.suspend.3) "\005\[BT\]\005 \002%msg.1%\002 is already suspend." 
+set black(say.en.suspend.4) "\005\[BT\]\005 Channel \002%msg.1%\002 is now suspended."
+
+################################### unSuspend ##################################
+
+set black(say.en.unsuspend.3) "\005\[BT\]\005 \002%msg.1%\002 isn't suspended."
+set black(say.en.unsuspend.4) "\005\[BT\]\005 Suspension for channel \002%msg.1%\002 is cancelled."
+
+################################### add #########################################
+
+set black(say.en.add.5) "\005\[BT\]\005 There is \002already another user\002 in my database with the same host known as \001%msg.1%\001."
+set black(say.en.add.6) "\005\[BT\]\005 Unable to add \002%msg.1%\002 because it is higher than your access level."
+set black(say.en.add.7) "\005\[BT\]\005 Unable to add \002%msg.2%\002 because this is your access level."
+set black(say.en.add.8) "\005\[BT\]\005 Unable to add \002%msg.3%\002 because this is your access level."
+set black(say.en.add.10) "\005\[BT\]\005 Added user \001%msg.1%\001 with hostmask: \002%msg.2%\002"
+set black(say.en.add.17) "\005\[BT\]\005 User \001%msg.1%\001 is too long. Was automatically truncated to \002%msg.2%\002"
+set black(say.en.add.18) "\005\[BT\]\005 Please use a valid user format containing only alphanumeric characters."
+set black(say.en.add.19) "\005\[BT\]\005 \001%msg.1%\001 it has \002%msg.2%\002 level access on \002%chan%\002"
+set black(say.en.add.20) "\005\[BT\]\005 \001%msg.1%\001 it has \002%msg.2%\002 level access."
+
+################################### DelAcc #########################################
+
+set black(say.en.delacc.1) "\005\[BT\]\005 Removed \001%msg.1%\001's access from \002%chan%\002."
+set black(say.en.delacc.2) "\005\[BT\]\005 Removed \002OWNER\002 access of \001%msg.1%\001."
+set black(say.en.delacc.3) "\005\[BT\]\005 Has no \002OWNER\002 access."
+set black(say.en.delacc.4) "\005\[BT\]\005 Removed \002MASTER\002 access of \001%msg.1%\001."
+
+#################################### Del ###########################################
+
+set black(say.en.del.1) "\005\[BT\]\005 Deleted \002%msg.1%\002 out of my memory.."
+set black(say.en.del.2) "\005\[BT\]\005 Unable to delete the user \001%msg.1%\001 because has access on other channels. Use: \002delacc %msg.1%\002"
+
+################################### AddHost ########################################
+
+set black(say.en.addhost.1) "\005\[BT\]\005 Hostmask \001%msg.2%\001 already exists in \002%msg.1%\002's database."
+set black(say.en.addhost.2) "\005\[BT\]\005 Added hostmask \001%msg.2%\001 for user \002%msg.1%\002."
+
+################################### DelHost ########################################
+
+set black(say.en.delhost.1) "\005\[BT\]\005 Hostmask \001%msg.2%\001 does not exist in \002%msg.1%\002's database."
+set black(say.en.delhost.2) "\005\[BT\]\005 Removed hostmask \001%msg.2%\001 from user \002%msg.1%\002."
+
+################################### chUser ########################################
+
+set black(say.en.chuser.1) "\005\[BT\]\005 Changed \001%msg.1%\001's handle in: \002%msg.2%\002."
+set black(say.en.chuser.2) "\005\[BT\]\005 Changed your handle in: \002%msg.1%\002."
+set black(say.en.chuser.3) "\005\[BT\]\005 There is already a user with the same handle. Please choose another one."
+
+################################### UserList ########################################
+
+set black(say.en.userlist.1) "\005\[BT\]\005 %msg%"
+set black(say.en.userlist.2) "\005\[BT\]\005 There are \001%msg.1%\001 users with access on \002%chan%\002."
+
+#################################### Channels #####################################
+
+set black(say.en.channels.1) "\005\[BT\]\005 I have \002%msg.1%\002 channels.."
+set black(say.en.channels.2) "%msg%"
+set black(say.en.channels.3) "\002OK\002"
+set black(say.en.channels.4) "\002NOT ON CHAN\002"
+set black(say.en.channels.5) "\002SUSPENDED\002"
+set black(say.en.channels.6) "\002AUTOSUSPEND\002"
+set black(say.en.channels.7) "\002Users\002"
+set black(say.en.channels.8) "\002Invisible\002"
+
+#################################### Info ########################################
+
+set black(say.en.info.1) "\005\[BT\]\005 \[USER\] \002%msg.1%\002 ACCESS level: \002%msg.8%\002"
+set black(say.en.info.2) "\005\[BT\]\005 \[CHAN\] \002%msg.1%\002 -- AUTOMODE: \001%msg.2%\001 -- STATS: \002%char%stats %msg.3%\002"
+set black(say.en.info.3) "\005\[BT\]\005 \[Info\] %msg%"
+set black(say.en.info.4) "\005\[BT\]\005 \[Last modified by\] \002%msg.1%\002 on: \001%msg.8%\001"
+set black(say.en.info.5) "\005\[BT\]\005 \[Last ONLINE seen\] \001%msg.1%\001"
+set black(say.en.info.6) "\005\[BT\]\005 \[HOSTS\] \002%msg%\002"
+set black(say.en.info.7) "\005\[BT\]\005 ** SUSPENDED ** - Expires in \001%msg.1%\001 %msg.2% %msg.3% (Level \002%msg.4%\002) - Reason: \002%msg.10%\002"
+set black(say.en.info.8) "\005\[BT\]\005 \[Channels with access\] %msg%."
+set black(say.en.info.9) "\005\[BT\]\005 ** GLOBAL SUSPENDED ** - Expires in \001%msg.1%\001 %msg.2% %msg.3% (Level \002%msg.4%\002) - Reason: \002%msg.10%\002"
+set black(say.en.info.10) "\005\[BT\]\005 \[Last ONLINE seen\] \001%msg.1%\001 in: \002%msg.2%\002"
+set black(say.en.info.11) "\005\[BT\]\005 \[USER\] \002%msg.1%\002"
+set black(say.en.info.12) "\005\[BT\]\005 Found (%msg.1%) records: \002%msg.8%\002."
+set black(say.en.info.13) "\005\[BT\]\005 Found (%msg.1%) records. Please restrict your search." 
+set black(say.en.info.14) "\005\[BT\]\005 For more info about the right one, type \002%char%info <user>\002"
+set black(say.en.info.15) "\005\[BT\]\005 \[CHAN\] \002%msg.1%\002 -- modes: \002%msg.8%\002"
+set black(say.en.info.16) "\005\[BT\]\005 \[MANAGER\] \002%msg%\002"
+set black(say.en.info.17) "\005\[BT\]\005 \[TOPIC\] \002%msg%\002"
+set black(say.en.info.18) "\005\[BT\]\005 \[URL\] \002%msg%\002"
+set black(say.en.info.19) "\005\[BT\]\005 \[STATUS\] \002%msg%\002"
+set black(say.en.info.20) "\005\[BT\]\005 \[REGISTERED\] \002%msg.1%\002 (\002%msg.8%\002)"
+set black(say.en.info.21) "\005\[BT\]\005 \[STATS\] joins: \002%msg.1%\002 | users: \002%msg.2%\002 (%msg.3% with access) | bans: \002%msg.4%\002 | seen: \002%msg.5%\002"
+set black(say.en.info.22) "\001SUSPENDED\001"
+set black(say.en.info.23) "\001NOT on chan\001"
+set black(say.en.info.24) "\001NO OP\001"
+set black(say.en.info.25) "\005\[BT\]\005 \[CHAN\] \002%msg.1%\002 -- AUTOMODE: \002%msg.2%\002 -- Flags: \002%msg.3%\002 -- STATS: \002%char%activ %msg.4%\002"
+set black(say.en.info.26) "AUTOSUSPENDED -- Reason: channel is full (+l)"
+set black(say.en.info.27) "AUTOSUSPENDED -- Reason: channel requires key (+k)"
+set black(say.en.info.28) "AUTOSUSPENDED -- Reason: channel is invite only (+i)"
+set black(say.en.info.29) "AUTOSUSPENDED -- Reason: banned (+b)"
+set black(say.en.info.30) "NOT ON CHAN -- Reason: unable to join channel (+l)"
+set black(say.en.info.31) "NOT ON CHAN -- Reason: unable to join channel (+k)"
+set black(say.en.info.32) "NOT ON CHAN -- Reason: unable to join channel (+i)"
+set black(say.en.info.33) "NOT ON CHAN -- Reason: unable to join channel (+b)"
+set black(say.en.info.34) "NOT ON CHAN -- Reason: unable to join channel (+r)"
+set black(say.en.info.35) "AUTOSUSPENDED -- Reason: registered users only (+r)"
+set black(say.en.info.36) "\005\[BT\]\005 \[Settings\] \001%msg%\001"
+set black(say.en.info.37) "\[BT\] \[BLACKLIST\] %msg%"
+
+################################## s #############################################
+
+set black(say.en.s.1) "\005\[BT\]\005 \001%msg.1%\001's access on \002%chan%\002 is already suspended."
+set black(say.en.s.2) "\005\[BT\]\005 \001%msg.1%\001's access on \002%chan%\002 is now suspended."
+set black(say.en.s.3) "No reason supplied."
+set black(say.en.s.4) "\005\[BT\]\005 \001%msg.1%\001's access is already suspended by someone with higher level."
+set black(say.en.s.5) "\005\[BT\]\005 \001%msg.1%\001's access was GLOBALLY suspended."
+
+################################## us #############################################
+
+set black(say.en.us.1) "\005\[BT\]\005 \001%msg.1%\001 isn't suspended on \002%chan%\002."
+set black(say.en.us.2) "\005\[BT\]\005 SUSPENSION for \001%msg.1%\001 on \002%chan%\002 is cancelled."
+set black(say.en.us.3) "\005\[BT\]\005 Global SUSPENSION for \001%msg.1%\001 is cancelled."
+set black(say.en.us.4) "\005\[BT\]\005 \002%msg.1%\002 is suspended by a user with higher access."
+
+################################## r ##############################################
+
+set black(say.en.r.1) {	"Refreshing topic pls wait...."
+			"Refreshing topic please hold on...."
+				}
+set black(say.en.r.2) "\005\[BT\]\005 Cannot proceed. There is no topic set."
+
+################################## Auto ##########################################
+
+set black(say.en.auto.6) "\005\[BT\]\005 Set your global AUTOMODE to \002OP\002 (+o)"
+set black(say.en.auto.7) "\005\[BT\]\005 Set your global AUTOMODE to \002VOICE\002 (+v)"
+set black(say.en.auto.8) "\005\[BT\]\005 Set your AUTOMODE to \002OP\002 (+o) on %chan%"
+set black(say.en.auto.9) "\005\[BT\]\005 Set your AUTOMODE to \002VOICE\002 (+v) on %chan%"
+set black(say.en.auto.10) "\005\[BT\]\005 Set AUTOMODE to \002OP\002 (+o) for %msg.1% on %chan%"
+set black(say.en.auto.11) "\005\[BT\]\005 Set AUTOMODE to \002VOICE\002 (+v) for %msg.1% on %chan%"
+set black(say.en.auto.12) "\005\[BT\]\005 Set global AUTOMODE to \002OP\002 (+o) for %msg.1%"
+set black(say.en.auto.13) "\005\[BT\]\005 Set global AUTOMODE to \002VOICE\002 (+v) for %msg.1%"
+set black(say.en.auto.14) "\005\[BT\]\005 Your global AUTOMODE \002OP\002 (+o) was removed."
+set black(say.en.auto.15) "\005\[BT\]\005 Your global AUTOMODE \002VOICE\002 (+v) was removed."
+set black(say.en.auto.16) "\005\[BT\]\005 Your AUTOMODE \002OP\002 (+o) was removed on %chan%"
+set black(say.en.auto.17) "\005\[BT\]\005 Your AUTOMODE \002VOICE\002 (+v) was removed on %chan%"
+set black(say.en.auto.18) "\005\[BT\]\005 Removed AUTOMODE \002OP\002 (+o) of %msg.1% on %chan%"
+set black(say.en.auto.19) "\005\[BT\]\005 Removed AUTOMODE \002VOICE\002 (+v) of %msg.1% on %chan%"
+set black(say.en.auto.20) "\005\[BT\]\005 Removed global AUTOMODE \002OP\002 (+o) of %msg.1%"
+set black(say.en.auto.21) "\005\[BT\]\005 Removed global AUTOMODE \002VOICE\002 (+v) of %msg.1%"
+
+################################# Login #########################################
+
+set black(say.en.login.1) "\005\[BT\]\005 Logging to \002%msg.1%\002.."
+set black(say.en.login.2) "\005\[BT\]\005 I am already logged to \002%msg.1%\002.."
+set black(say.en.login.3) "\005\[BT\]\005 I couldn't login. Please check the login informations or if ChanServ (X, Q, L) is online."
+set black(say.en.login.4) "\005\[BT\]\005 Login unsuccesful (Wrong password)"
+set black(say.en.login.5) "\005\[BT\]\005 Login succeded"
+set black(say.en.login.6) "\005\[BT\]\005 Login unsuccesful (Maximum concurrent logins exceeded)"
+set black(say.en.login.7) "\005\[BT\]\005 Login unsuccesful (No username specified)"
+set black(say.en.login.8) "\005\[BT\]\005 Login unsuccesful (Invalid Username)"
+set black(say.en.login.9) "\005\[BT\]\005 Ma identific la NICKSERV..."
+set black(say.en.login.10) "\005\[BT\]\005 Successful identification with NickServ"
+set black(say.en.login.11) "\005\[BT\]\005 Failed to identify with NickServ (Wrong password)"
+set black(say.en.login.13) "Wrong password"
+set black(say.en.login.15) "This nickname is owned by someone else"
+set black(say.en.login.16) "\005\[BT\]\005 Failed to identify with NickServ (nickname is owned by someone else)"
+
+################################# Enable #####################################
+
+set black(say.en.enable.1) "\005\[BT\]\005 Enabled \001%msg.1%\001 on \002%chan%\002"
+set black(say.en.enable.2) "\005\[BT\]\005 \001%msg.1%\001 is already enabled on \002%chan%\002"
+set black(say.en.enable.3) "\005\[BT\]\005 The command \002%msg.1%\002 does not exist."
+set black(say.en.enable.4) "\005\[BT\]\005 Enabled \001%msg.1%\001 for \002%msg.2%\002 on \002%chan%\002"
+set black(say.en.enable.5) "\005\[BT\]\005 \001%msg.1%\001 is already enabled for \002%msg.2%\002 on \002%chan%\002"
+set black(say.en.enable.6) "\005\[BT\]\005 \002GLOBALLY\002 enabled \001%msg.1%\001"
+set black(say.en.enable.7) "\005\[BT\]\005 \001%msg.1%\001 is already \002GLOBALLY\002 enabled."
+set black(say.en.enable.8) "\005\[BT\]\005 CAREFUL, \001%msg.1%\001 it is \002GLOBALLY\002 disabled."
+set black(say.en.enable.9) "\005\[BT\]\005 I can not execute, \002%msg.1%\002 is disabled by a user with higher access."
+
+################################# Disable #####################################
+
+set black(say.en.disable.1) "\005\[BT\]\005 Disabled \001%msg.1%\001 on \002%chan%\002"
+set black(say.en.disable.2) "\005\[BT\]\005 \001%msg.1%\001 is already disabled on \002%chan%\002"
+set black(say.en.disable.3) "\005\[BT\]\005 The command \002%msg.1%\002 does not exist."
+set black(say.en.disable.4) "\005\[BT\]\005 Disabled \001%msg.1%\001 for \002%msg.2%\002 on \002%chan%\002"
+set black(say.en.disable.5) "\005\[BT\]\005 \001%msg.1%\001 is already disabled for \002%msg.2%\002 on \002%chan%\002"
+set black(say.en.disable.6) "\005\[BT\]\005 \002GLOBALLY\002 disabled \001%msg.1%\001"
+set black(say.en.disable.7) "\005\[BT\]\005 \001%msg.1%\001 is already \002GLOBALLY\002 disabled."
+set black(say.en.disable.8) "\005\[BT\]\005 Can't disable \002%msg.1%\002 command."
+
+################################### Module #######################################
+
+set black(say.en.hmodule.1) "Modules: \002%msg%\002"
+set black(say.en.hmodule.3) "To see the \001BlackToolS Manual\001 for a specific module, use: \002%char%man\002 <module> | \002%botnick% man\002 <module> | \002(PRIVMSG) man\002 <module>"
+
+####################################### h ########################################
+
+set black(say.en.h.1) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.2) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001add\001 ; %char%\002h\002 \001chaninfo\001 ; %char%\002h\002 \001BTinfo\001 ; %char%\002h\002 \001module\001 ; %char%\002h\002 \001egg\001 ; %char%\002h\002 \001owner\001"
+set black(say.en.h.3) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.4) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001add\001 ; %char%\002h\002 \001chaninfo\001 ; %char%\002h\002 \001BTinfo\001 ; %char%\002h\002 \001module\001 ; %char%\002h\002 \001egg\001 ; %char\002%h\002 \001owner\001"
+set black(say.en.h.5) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.6) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001module\001"
+set black(say.en.h.7) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.8) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001module\001"
+set black(say.en.h.11) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.12) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001add\001 ; %char%\002h\002 \001module\001"
+set black(say.en.h.13) "\005\[BT\]\005 \001ACCESS LEVEL\001 \002-= \001%msg%\001 =-\002"
+set black(say.en.h.14) "\005\[BT\]\005 %char%\002h\002 \001cmds\001 ; %char%\002h\002 \001ban\001 ; %char%\002h\002 \001add\001 ; %char%\002h\002 \001chaninfo\001 ; %char%\002h\002 \001BTinfo\001 ; %char%\002h\002 \001module\001"
+set black(say.en.h.15) "%msg%"
+set black(say.en.h.16) "\005\[BT\]\005 You're sending requests too fast. Calm down and try again after \002%msg.1% seconds\002. Thanks!"
+set black(say.en.h.17) "\005\[BT\]\005 \002h\002 \001cmds\001 ; \002h\002 \001ban\001 ; \002h\002 \001add\001 ; \002h\002 \001chaninfo\001 ; \002h\002 \001BTinfo\001 ; \002h\002 \001module\001 ; \002h\002 \001egg\001 ; \002h\002 \001owner\001"
+set black(say.en.h.18) "\005\[BT\]\005 \002h\002 \001cmds\001 ; \002h\002 \001ban\001 ; \002h\002 \001add\001 ; \002h\002 \001chaninfo\001 ; \002h\002 \001BTinfo\001 ; \002h\002 \001module\001"
+set black(say.en.h.19) "\005\[BT\]\005 \002h\002 \001cmds\001 ; \002h\002 \001ban\001 ; \002h\002 \001add\001 ; \002h\002 \001module\001"
+set black(say.en.h.20) "\005\[BT\]\005 \002h\002 \001cmds\001 ; \002h\002 \001ban\001 ; \002h\002 \001module\001"
+set black(say.en.h.21) "\005\[BT\]\005 %botnick% \002h\002 \001cmds\001 ; %botnick% \002h\002 \001ban\001 ; %botnick% \002h\002 \001add\001 ; %botnick% \002h\002 \001chaninfo\001 ; %botnick% \002h\002 \001BTinfo\001 ; %botnick% \002h\002 \001module\001 ; %botnick% \002h\002 \001egg\001 ; %botnick% \002h\002 \001owner\001"
+set black(say.en.h.22) "\005\[BT\]\005 %botnick% \002h\002 \001cmds\001 ; %botnick% \002h\002 \001ban\001 ; %botnick% \002h\002 \001add\001 ; %botnick% \002h\002 \001chaninfo\001 ; %botnick% \002h\002 \001BTinfo\001 ; %botnick% \002h\002 \001module\001"
+set black(say.en.h.23) "\005\[BT\]\005 %botnick% \002h\002 \001cmds\001 ; %botnick% \002h\002 \001ban\001 ; %botnick% \002h\002 \001add\001 ; %botnick% \002h\002 \001module\001"
+set black(say.en.h.24) "\005\[BT\]\005 %botnick% \002h\002 \001cmds\001 ; %botnick% \002h\002 \001ban\001 ; %botnick% \002h\002 \001module\001"
+set black(say.en.h.25) "\005\[BT\]\005 \002%char%h\002 \001cmds\001 ; \002%char%h\002 \001ban\001 ; \002%char%h\002 \001add\001 ; \002%char%h\002 \001chaninfo\001 ; \002%char%h\002 \001BTinfo\001 ; \002%char%h\002 \001module\001 ; \002%char%h\002 \001master\001"
+set black(say.en.h.26) "\005\[BT\]\005 \002h\002 \001cmds\001 ; \002h\002 \001ban\001 ; \002h\002 \001add\001 ; \002h\002 \001chaninfo\001 ; \002h\002 \001BTinfo\001 ; \002h\002 \001module\001 ; \002h\002 \001master\001"
+set black(say.en.h.27) "\005\[BT\]\005 %botnick% \002h\002 \001cmds\001 ; %botnick% \002h\002 \001ban\001 ; %botnick% \002h\002 \001add\001 ; %botnick% \002h\002 \001module\001 ; %botnick% \002h\002 \001master\001"
+
+set black(say.en.hcommand.1) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific command, use: \001%char%man <command>\001"
+set black(say.en.hcommand.2) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific command, use: \001%botnick% man <command>\001"
+set black(say.en.hcommand.3) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific command, use: \001man <command>\001"
+set black(say.en.hcommand.4) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific setting, use: \001%char%man <setting>\001"
+set black(say.en.hcommand.5) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific setting, use: \001%botnick% man <setting>\001"
+set black(say.en.hcommand.6) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific setting, use: \001man <setting>\001"
+set black(say.en.hcommand.7) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific module, use: \001%char%man <module>\001"
+set black(say.en.hcommand.8) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific module, use: \001%botnick% man <module>\001"
+set black(say.en.hcommand.9) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific module, use: \001man <module>\001"
+
+set black(say.en.cmdsvoice) "v \[#chan\] \[nick\] ; man <command> ; version ; i \[#chan\] <nick> ; seen \[#chan\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; activ \[#chan\] <nick> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\]"
+set black(say.en.cmdsop) "o \[#chan\] \[nick\] ; v \[#chan\] \[nick\] ; ho \[#chan\] \[nick\] ; man <command> ; version ; mode \[#chan\] <+/-mode> ; cycle \[#chan\] \[duration|reason\] ; i \[#chan\] <nick> ; seen \[#chan\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; activ \[#chan\] <nick> ; t \[#chan\] <text> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\] ; r \[#chan\] ; omsg \[#chan|all\] <text>"
+set black(say.en.cmdadmin) "o \[#chan\] \[nick\] ; v \[#chan\] \[nick\] ; ho \[#chan\] \[nick\] ; man <command> ; version ; mode \[#chan\] <+/-mode> ; cycle \[#chan\] \[duration|reason\] ; say \[#chan\] <text> ; act \[#chan\] <text> ; i \[#chan\] <nick> ; seen \[#chan\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; activ \[#chan\] <nick> ; t \[#chan\] <text> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\] ; r \[#chan\] ; omsg \[#chan|all\] <text>"
+set black(say.en.cmdmanager) "o \[#chan\] \[nick\] ; v \[#chan\] \[nick\] ; ho \[#chan\] \[nick\] ; man <command> ; version ; mode \[#chan\] <+/-mode> ; cycle \[#chan\] \[duration|reason\] ; say \[#chan\] <text> ; act \[#chan\] <text> ; i \[#chan\] <nick> ; seen \[#chan\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; activ \[#chan\] <nick> ; t \[#chan\] <text> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\] ; r \[#chan\] ; omsg \[#chan|all\] <text>"
+set black(say.en.cmdbossowner) "o \[#chan\] \[nick\] ; v \[#chan\] \[nick\] ; ho \[#chan\] \[nick\] ; man <command> ; version ; mode \[#chan\] <+/-mode> ; cycle \[#chan\] \[duration|reason\] ; say \[#chan\] <text> ; act \[#chan\] <text> ; seen \[#chan|global\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; broadcast <text> ; i \[#chan\] <nick> ; activ \[#chan\] <nick> ; t \[#chan\] <text> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\] ; r \[#chan\] ; msg <nick> <text> ; omsg \[#chan|all\] <text>"
+set black(say.en.cmdmaster) "o \[#chan\] \[nick\] ; v \[#chan\] \[nick\] ; ho \[#chan\] \[nick\] ; man <command> ; version ; mode \[#chan\] <+/-mode> ; cycle \[#chan\] \[duration|reason\] ; say \[#chan\] <text> ; act \[#chan\] <text> ; seen \[#chan|global\] <nick|ip|host> ; for <botnick1>,<botnick2> <command> \[option\] ; i \[#chan\] <nick> ; activ \[#chan\] <nick> ; t \[#chan\] <text> ; myset <option> \[description\] \[show|reset\] ; h \[#chan\] \[category\] ; r \[#chan\] ; msg <nick> <text> ; omsg \[#chan|all\] <text>"
+
+set black(say.en.banvoice) "k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+set black(say.en.banop) "b \[#chan\] <nick|host> \[-level\] \[duration\] \[reason\] ; dr \[#chan\] <nick|host> ; bot \[#chan\] <nick|host> ; n \[#chan\] <nick> ; id \[#chan\] <nick> ; spam \[#chan\] <nick|host> ; bw \[#chan\] <nick|host> ; vr \[#chan\] <nick|host> ; gag \[#chan\] <nick> \[duration\] \[reason\] ; ungag \[#chan\] <nick|host> ; troll \[#chan\] <nick> ; mb \[#chan\] <nick> \[reason\] ; ub \[#chan\] <nick|host|id> ; sb \[#chan\] <nick|host|id> ; banlist \[#chan\] <all|user|other> ; k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+set black(say.en.banadmin) "b \[#chan\] <nick|host> \[-level\] \[duration\] \[reason\] ; black \[#chan\] <nick|host> \[reason\] ; stick \[#chan\] <nick|host> \[duration\] \[reason\] ; dr \[#chan\] <nick|host> ; bot \[#chan\] <nick|host> ; n \[#chan\] <nick> ; id \[#chan\] <nick> ; spam \[#chan\] <nick|host> ; bw \[#chan\] <nick|host> ; vr \[#chan\] <nick|host> ; gag \[#chan\] <nick> \[duration\] \[reason\] ; ungag \[#chan\] <nick|host> ; troll \[#chan\] <nick> ; mb \[#chan\] <nick> \[reason\] ; ub \[#chan\] <nick|host|id> ; sb \[#chan\] <nick|host|id> ; banlist \[#chan\] <all|user|other> ; stats <nick> \[total\] ; k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+set black(say.en.banmanager) "b \[#chan\] <nick|host> \[-level\] \[duration\] \[reason\] ; black \[#chan\] <nick|host> \[reason\] ; stick \[#chan\] <nick|host> \[duration\] \[reason\] ; dr \[#chan\] <nick|host> ; bot \[#chan\] <nick|host> ; n \[#chan\] <nick> ; id \[#chan\] <nick> ; spam \[#chan\] <nick|host> ; bw \[#chan\] <nick|host> ; vr \[#chan\] <nick|host> ; gag \[#chan\] <nick> \[duration\] \[reason\] ; ungag \[#chan\] <nick|host> ; troll \[#chan\] <nick> ; mb \[#chan\] <nick> \[reason\] ; ub \[#chan\] <nick|host|id> ; sb \[#chan\] <nick|host|id> ; exempt \[#chan\] <add|list|del> <ip|host> \[period\] \[reason\] ; banlist \[#chan\] <all|user|other> ; stats <nick> \[total|reset\] ; k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+set black(say.en.banbossowner) "b \[#chan\] <nick|host> \[-level\] \[duration\] \[global|link\] \[reason\] ; black \[#chan\] <nick|host> \[reason\] ; stick \[#chan\] <nick|host> \[duration\] \[reason\] ; dr \[#chan\] <nick|host> ; bot \[#chan\] <nick|host> ; n \[#chan\] <nick> ; id \[#chan\] <nick> ; spam \[#chan\] <nick|host> ; bw \[#chan\] <nick|host> ; vr \[#chan\] <nick|host> ; gag \[#chan\] <nick> \[duration\] \[reason\] ; ungag \[#chan\] <nick|host> ; troll \[#chan\] <nick> ; mb \[#chan\] <nick> \[reason\] ; ub \[#chan\] <nick|host|id> \[global|link\] ; sb \[#chan\] <nick|host|id> \[global\] ; exempt \[#chan\] <add|list|del> <ip|host> \[period\] \[global\] \[reason\] ; banlist \[#chan\] <all|user|other|global> ; stats <nick> \[total|reset\] ; k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+set black(say.en.banmaster) "b \[#chan\] <nick|host> \[-nivel\] \[duration\] \[reason\] ; black \[#chan\] <nick|host> \[reason\] ; stick \[#chan\] <nick|host> \[duration\] \[reason\] ; dr \[#chan\] <nick|host> ; bot \[#chan\] <nick|host> ; n \[#chan\] <nick> ; id \[#chan\] <nick> ; spam \[#chan\] <nick>/<host> ; bw \[#chan\] <nick|host> ; vr \[#chan\] <nick|host> ; gag \[#chan\] <nick> \[duration\] \[reason\] ; ungag \[#chan\] <nick|host> ; troll \[#chan\] <nick> ; mb \[#chan\] <nick> \[reason\] ; ub \[#chan\] <nick|host|id> ; sb \[#chan\] <nick|host|id> ; exempt \[#chan\] <add|list|del> <ip|host> \[period\] \[global\] \[reason\] ; banlist \[#chan\] <all|user|other> ; stats <nick> \[total|reset\] ; k \[#chan\] <nick|host> \[reason\] ; w \[#chan\] <nick>"
+
+set black(say.en.addadmin) "add \[#chan\] <level> <user chanserv|nickname> ; userlist \[#chan\] <level|all> ; info \[#chan\] <user|#chan> ; delacc \[#chan\] <user> ; auto \[#chan\] <+/-o> <user> ; auto \[#chan\] <+/-v> <user> ; s \[#chan\] <user> \[duration\] \[reason\] ; us \[#chan\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.en.addmanager) "add \[#chan\] <level> <user chanserv|nickname> ; userlist \[#chan]\ <level|all> ; info \[#chan\] <user|#chan> ; delacc \[#chan\] <user> ; del <user> ; auto \[#chan\] <+/-o> <user> ; auto \[#chan\] <+/-v> <user> ; chuser <user> <new user> ; s \[#chan\] <user> \[duration\] \[reason\] ; us \[#chan\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.en.addowner) "add \[#chan\] <level> <user chanserv|nickname> ; userlist \[#chan\] <level|all> ; info \[#chan\] <user|#chan> ; delacc \[#chan\] <user> ; del <user> ; auto \[#chan\] <+/-o> <user> ; auto \[#chan\] <+/-v> <user> ; chuser <user> <new user> ; s \[#chan\] <user> \[duration\] \[reason\] ; us \[#chan\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.en.addbossowner) "add \[#chan\] <level> <user chanserv|nickname> ; userlist \[#chan\] <level> ; info \[#chan\] <user|#chan> ; delacc \[#chan\] <user> ; del <user> ; auto \[#chan\] <+/-o> <user> ; auto \[#chan\] <+/-v> <user> ; chuser <user> <new user> ; s \[#chan\] <user> \[duration\] \[reason\] ; us \[#chan\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.en.addmaster) "add \[#chan\] <nivel> <user chanserv|nickname> ; userlist \[#chan\] <nivel> ; info \[#chan\] <user|#chan> ; delacc \[#chan\] <user> ; del <user> ; auto \[#chan\] <+/-o> <user> ; auto \[#chan\] <+/-v> <user> ; chuser <user> <new user> ; s \[#chan\] <user> \[duration\] \[reason\] ; us \[#chan\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+
+set black(say.en.hmanager.1) "purge \[#chan\] <reason> ; set \[#chan\] <+/-option> ; set \[#chan\] <option> <description> ; unset \[#chan\] <option> ; show \[#chan\] <option> ; ignore <add|list|del> <host> \[duration\] \[reason\] ; enable <command|all> \[user\] ; disable <command|all> \[user\]"
+set black(say.en.hbossowner.1) "addchan <#chan> ; delchan <#chan> <reason> ; suspend <#chan> <reason> ; unsuspend <#chan>; set \[#chan|global\] <option> <description> ; unset \[#chan|global\] <option> ; show \[#chan\] <option> ; channels ; die \[reason\] ; restart ; jump \[server\] ; save ; rehash ; login ; nick <nick> ; uptime ; status ; cp <option> <#chan1> <#chan2> ; ignore <add|list|del> <host> \[duration\] \[reason\] ; enable <command|all> \[user\] \[global\] ; disable <command|all> \[user\] \[global\] ; chat"
+set black(say.en.hmaster.1) "addchan <#chan> ; delchan <#chan> <reason> ; suspend <#chan> <reason> ; unsuspend <#chan>; set \[#chan\] <option> <description> ; unset \[#chan\] <option> ; show \[#chan\] <option> ; channels ; uptime ; status ; ignore <add|list|del> <host> \[duration\] \[reason\]  ; enable <command|all> \[user\] \[global\] ; disable <command|all> \[user\] \[global\]"
+set black(say.en.hchaninfo.1) "\002Eggdrop Flags\002: "
+set black(say.en.hchaninfo.2) "\002BT Settings\002: "
+set black(say.en.hchaninfo.3) "\002Eggdrop Str\002"
+set black(say.en.hchaninfo.4) "\002BT Str\002: "
+set black(say.en.hegg.1) "\005\[BT\]\005 %msg%"
+set black(say.en.hegg.2) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific option, use: \001%char%man <option>\001"
+set black(say.en.hegg.3) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific option, use: \001%botnick% man <option>\001"
+set black(say.en.hegg.4) "\005\[BT\]\005 To see the \002BlackToolS Manual\002 for a specific option, use: \001man <option>\001"
+
+############################### GREETING #######################################
+
+set black(say.en.greeting.1) "\005\[BT\]\005 Welcome in \002BlackToolS WORLD\002 version \002$black(vers)\002. To start please define the following settings for you:"
+set black(say.en.greeting.2) "\002%char%myset mychar\002 <trigger> ( set desired trigger ) ; \002%char%myset lang <language> ( RO | EN )"
+set black(say.en.greeting.3) "\002%char%myset mychan\002 <#chan> ; \002%char%myset output\002 <method> ( CHAN | NOTICE )"
+set black(say.en.greeting.4) "\002%char%myset noteexpire <no. days> ; \002%char%myset greet\002 <message> (onjoin gree message) ; \002%char%myset autoinvite\002 <ON|OFF>"
+set black(say.en.greeting.5) "\005\[BT\]\005 Use \002%char%h\002 in any channel that the bot is in to get a complete list with all \002available commands\002."
+set black(say.en.greeting.6) "\005\[BT\]\005 To read the \002BlackToolS manual\002 of each setting use: \001%char%man <setting>\001. Have Fun! >:)"
+
+################################### Abuse Report ###############################
+
+set black(say.en.abuse.1) "\005\[BT\]\005 Cannot join \001%msg.1%\001. Reason: \002banned (+b)\002."
+set black(say.en.abuse.2) "Unable to join \002%chan%\002 (banned (+b))"
+set black(say.en.abuse.3) "\005\[BT\]\005 Cannot join \001%msg.1%\001. Reason: \002channel invite only (+i)\002."
+set black(say.en.abuse.4) "Unable to join \002%chan%\002 (invite only (+i))"
+set black(say.en.abuse.5) "\005\[BT\]\005 Cannot join \001%msg.1%\001. Reason: \002channel requires key (+k)\002."
+set black(say.en.abuse.6) "Unable to join \002%chan%\002 (channel is locked (+k))"
+set black(say.en.abuse.7) "\005\[BT\]\005 Cannot join \001%msg.1%\001. Reason: \002channel is full (+l)\002"
+set black(say.en.abuse.8) "Unable to join \002%chan%\002 (channel is full (+l))"
+set black(say.en.abuse.9) "\005\[BT\]\005 Suspended \001%msg.1%\001 for abuse."
+set black(say.en.abuse.10) "Channel \001%msg.1%\001 has been suspended for abuse."
+set black(say.en.abuse.11) "Unable to join \002%chan%\002 (registered users only (+r)))"
+set black(say.en.abuse.12) "\005\[BT\]\005 Cannot join \001%msg.1%\001. Reason: \002registered users only (+r)\002."
+
+################################### ChanLink ###################################
+
+set black(say.en.chanlink.1) "\005\[BT\]\005 \002LINK\002 set with channels: \001%msg%\001."
+set black(say.en.chanlink.2) "\005\[BT\]\005 \002LINK\002 has been reset."
+set black(say.en.chanlink.3) "\005\[BT\]\005 \002LINKED\002 channels are: \001%msg%\001."
+set black(say.en.chanlink.4) "\005\[BT\]\005 \002LINKED\002 \002all\002 channels."
+set black(say.en.chanlink.5) "\005\[BT\]\005 There aren't any \002LINKED\002 channels."
+set black(say.en.chanlink.6) "\005\[BT\]\005 Unable to \002LINK\002. Invalid channels: \001%msg%\001."
+set black(say.en.chanlink.7) "\005\[BT\]\005 \002LINK\002 for \001%msg.1%\001 has been removed."
+set black(say.en.chanlink.8) "\005\[BT\]\005 \002LINK\002 not enabled on \001%msg.1%\001."
+
+###################################### O #######################################
+
+set black(say.en.o.1) "\005\[BT\]\005 \001%msg.1%\001 is on \002%chan%\002 you can't do massdeop."
+
+################################### man ########################################
+
+set black(say.en.man.1_1) "\005\[BT\]\005 Sorry \002%msg.1%\002, there is no help available for that topic."
+
+#################################### User Expire ###############################
+
+set black(say.en.userexpire.1) "\005\[BT\]\005 User expire: \002%msg.1%\002 expired users found."
+
+##################################### Hello ####################################
+
+set black(say.en.hello.1) "*** HOORAH! *** You have \001%msg%\001 access level to my commands."
+set black(say.en.hello.2) "\005\[BT\]\005 Hi \002%msg.1%\002. I'm \004%botnick%\004, an eggdrop bot running \001%msg.2%\001 %msg.3%."
+set black(say.en.hello.3) "\005\[BT\]\005 I'll recognize you by hostmask '\001%msg.1%\001' from now on. Please set your password, typing: /msg \001%botnick%\001 <pass> <yourpassword>"
+set black(say.en.hello.4) "\005\[BT\]\005 You can use \002%char%h\002 in any channel that the bot is in to get a complete list with all \002available commands\002. Have fun :D"
+
+##################################### Pass #####################################
+
+set black(say.en.pass.1) "\005\[BT\]\005 Done. Your password is now: \002%msg%\002"
+
+#################################### oMsg ######################################
+
+set black(say.en.omsg.1) "\005\[BT\]\005 Message sent to all @'s from: \002%msg%\002"
+
+#################################### forward ###################################
+
+set black(say.en.forward.1) "\005\[PRIVATE MSG\]\005 from -- <\002%msg.1%\002> »»» \001%msg.8%\001"
+
+##################################### mb #######################################
+
+set black(say.en.mb.5) "This IRC client is used for abuse. Consider getting a different one."
+
+################################### handleban ##################################
+
+set black(say.en.handleban.1) "BLackListed User!"
+
+##################################### Exempt ###################################
+
+set black(say.en.exempt.1) "Permanent"
+set black(say.en.exempt.2) "\005\[BT\]\005 \[CHAN\]: * (\002%msg.1%\002 exempts found)"
+set black(say.en.exempt.3) "\005\[BT\]\005 To see the next set of entries, type \001%char%exempt list global -next\001 (\002%counter%\002 exempts left)"
+set black(say.en.exempt.4) "\005\[BT\]\005 *** END exempts ***"
+set black(say.en.exempt.5) "\005\[BT\]\005 \002%msg.2%\002 ; \002%msg.3%\002 ; Added by: \002%msg.4%\002 ; Date: \002%msg.12%\002 ; Expires: %msg.13% \002%msg.15%\002 \002%msg.17%\002 ; Reason: %msg.20%"
+set black(say.en.exempt.6) "\005\[BT\]\005 \[CHAN\]: %chan% (\002%msg.1%\002 exempts found)"
+set black(say.en.exempt.10) "\005\[BT\]\005 To see the next set of entries, type \001%char%exempt list -next\001 (\002%counter%\002 exempts left)"
+set black(say.en.exempt.11) "\005\[BT\]\005 \002%msg.2%\002 ; \002%msg.3%\002 ; Added by: \002%msg.4%\002 ; Date: \002%msg.12%\002 ; Expires: %msg.13% ; Reason: %msg.14%"
+set black(say.en.exempt.13) "NEVER"
+set black(say.en.exempt.14) "\005\[BT\]\005 To see the next set of entries, type \001%char%exempt %chan% list -next\001 (\002%counter%\002 exempts left)"
+set black(say.en.exempt.7) "\005\[BT\]\005 Added exempt \002%msg.1%\002 on %chan%"
+set black(say.en.exempt.8) "\005\[BT\]\005 Added exempt \002%msg.1%\002 for all channels"
+set black(say.en.exempt.9) "\005\[BT\]\005 Removed exempt \002%msg.1%\002 on %chan%"
+set black(say.en.exempt.12) "\005\[BT\]\005 Removed exempt \002%msg.1%\002 on all channels"
+set black(say.en.exempt.15) "\005\[BT\]\005 There is not exempt that matches \002%msg.1%\002 on %chan%"
+set black(say.en.exempt.16) "\005\[BT\]\005 There is not exempt that matches \002%msg.1%\002 for all channels"
+
+##############################
+############################################################################################################
+#   END                                                                                                    #
+############################################################################################################

+ 1756 - 0
BlackTools/lang/BT.man-en.lang.tcl

@@ -0,0 +1,1756 @@
+#########################################################################################################################################
+#                                         _   _   _   _   _   _   _   _   _   _   _   _   _   _                                         #
+#                                        / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \                                        #
+#                                       ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )                                       #
+#                                        \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/                                        #
+#                                                                                                                                       #
+#########################################################################################################################################
+##                                          BlackTools - The Ultimate Channel Control Script                                           ##
+##                                                     One TCL. One smart Eggdrop                                                      ##
+#########################################################################################################################################
+## This file goes along with BlackTools.tcl and is loaded automatically if exist in /lang folder (this file is required)               ##
+#########################################################################################################################################
+#                                                                                                                                       #
+#                                                      *** The Future is Here ***                                                       #
+#                                                                                            Copyright 2008 - 2018 @ www.tclscripts.net #
+#########################################################################################################################################
+#                                                                                                                                       #
+#   ENGLISH LANGUAGE                                                                                                            ®       #
+#   ######  #          #     #####  #    # ####### ####### ####### #        #####     #     #    #    #     # #     #    #    #         #
+#   #     # #         # #   #     # #   #     #    #     # #     # #       #     #    ##   ##   # #   ##    # #     #   # #   #         #
+#   #     # #        #   #  #       #  #      #    #     # #     # #       #          # # # #  #   #  # #   # #     #  #   #  #         #
+#   ######  #       #     # #       ###       #    #     # #     # #        #####     #  #  # #     # #  #  # #     # #     # #         #
+#   #     # #       ####### #       #  #      #    #     # #     # #             #    #     # ####### #   # # #     # ####### #         #
+#   #     # #       #     # #     # #   #     #    #     # #     # #       #     #    #     # #     # #    ## #     # #     # #         #
+#   ######  ####### #     #  #####  #    #    #    ####### ####### #######  #####     #     # #     # #     #  #####  #     # #######   #
+#                                                                                                                                       #
+#########################################################################################################################################
+
+
+################################################# MAN COMMANDS ##########################################################################
+
+
+set black(say.en.man.1) "\005\[BT\]\005 Usage: \002%char%man\002 <command>"
+set black(say.en.man.2) "\005\[BT\]\005 Usage: \002%botnick% man\002 <command>"
+set black(say.en.man.2_1) "\005\[BT\]\005 Usage: \002man\002 <command>"
+
+#Man
+
+set black(say.en.man.3) "\[MAN\] \002Man\002 is the second most important from BlackTools Channel Control Script used to read the \001user manual\001."
+set black(say.en.man.4) "\[MAN\] Displays information about how to use or set each commands, protections and modules."
+set black(say.en.man.4_1) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.5) "\[MAN\] \002%char%man\002 <command> ; \002%botnick% man\002 <command> ; \002(PRIVMSG) man\002 <command>"
+
+#h
+
+set black(say.en.man.6) "\[MAN\] \002h\002 is the most important command from Blacktools Channel Control Script."
+set black(say.en.man.7) "\[MAN\] Displays all available commands and allows users to browse the script menu according to their access level on a specified channel."
+set black(say.en.man.8) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.9) "\[MAN\] \002%char%h\002 <category> ; \002%botnick% h\002 <category> ; \002(PRIVMSG) h\002 \[#chan\] <category>"
+set black(say.en.man.10) "\[MAN\] To find out what commands are available to you, try: \002%char%h\002 ; \002%botnick% h\002 ; \002(PRIVMSG) h\002 \[#chan\]"
+
+#tip
+
+set black(say.en.man.6666) "\[MAN\] \002tip\002 shows automatically \002random tips\002 at the end of each information from the \001user manual\001."
+
+#v
+
+set black(say.en.man.11) "\[MAN\] \002v\002 gives/removes voice \002(+v)\002 to/from one or more users in the channel."
+set black(say.en.man.12) "\[MAN\] ** Note: If no nick is specified, and you are not voiced on the channel, it will voice \002(+v)\002 you. **"
+set black(say.en.man.13) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.14) "\[MAN\] \002%char%v\002 <nick1> <nick2>.. ; \002%botnick% v\002 <nick1 <nick2>.. ; \002(PRIVMSG) v\002 <#chan> <nick1 <nick2>.."
+set black(say.en.man.15) "\[MAN\] \002%char%v +\002 (performs a mass voice) ; \002%char%v -\002 (performs a mass devoice)"
+
+#o
+
+set black(say.en.man.16) "\[MAN\] \002o\002 gives/removes op \001(@)\001 to/from one or more users in the channel."
+set black(say.en.man.17) "\[MAN\] ** Note: If no nick is specified, and you are not opped on the channel, it will op \002(@)\002 you. **"
+set black(say.en.man.18) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.19) "\[MAN\] \002%char%o\002 <nick1> <nick2>.. ; \002%botnick% o\002 <nick1 <nick2>.. ; \002(PRIVMSG) o\002 <#chan> <nick1 <nick2>.."
+set black(say.en.man.20) "\[MAN\] \002%char%o +\002 (performs a mass op)\002 ; %char%o -\002 (performs a mass deop)"
+
+#UserList
+
+set black(say.en.man.22) "\[MAN\] \002UserList\002 shows the entire access list for a specified channel."
+set black(say.en.man.23) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.24) "\[MAN\] \002%char%userlist\002 <level|all> ; \002%botnick% userlist\002 <level|all> ; \002(PRIVMSG) userlist\002 <#chan> <level|all>"
+set black(say.en.man.25) "\[MAN\] As access \002<level>\002 you have: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002"
+set black(say.en.man.26) "\[MAN\] As access \002<level>\002 you have: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002 ; \002%msg.12%\002"
+set black(say.en.man.27) "\[MAN\] As access \002<level>\002 you have: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002 ; \002%msg.12%\002 ; \002%msg.13%\002 ; \002%msg.15%\002"
+set black(say.en.man.28_1) "\[MAN\] As access \002<level>\002 you have: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002"
+
+#Version
+
+set black(say.en.man.28) "\[MAN\] \002Version\002 displays information about the \001BlackTools version\001 that the eggdrop is running."
+set black(say.en.man.29) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.30) "\[MAN\] \002%char%version\002 ; %botnick% version ; \002(PRIVMSG) version\002"
+
+#Info
+
+set black(say.en.man.31) "\[MAN\] \002Info\002 displays information about users or channels from eggdrop's database."
+set black(say.en.man.32) "\[MAN\] Informations such as access level, channel mode, greet, user added host(s), automode, last seen information, etc."
+set black(say.en.man.33) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.34) "\[MAN\] \002%char%info\002 <handle|#chan> ; \002%botnick% info\002 <handle|#chan> ; \002(PRIVMSG) info\002 <handle|#chan>"
+
+#Act
+
+set black(say.en.man.35) "\[MAN\] \002Act\002 makes the eggdrop send an action (\001/me\001) with <message> on channels."
+set black(say.en.man.36) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.37) "\[MAN\] \002%char%act\002 <message> ; \002%botnick% act\002 <message> ; \002(PRIVMSG) act\002 <#chan> <message>"
+
+#t
+
+set black(say.en.man.38) "\[MAN\] \002t\002 sets a topic with your desired <text>."
+set black(say.en.man.39) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.40) "\[MAN\] \002%char%t\002 \[#chan\] <text> ; \002%botnick% t\002 \[#chan\] <text> ; \002(PRIVMSG) t\002 <#chan> <text>"
+set black(say.en.man.41) "\[MAN\] ** Note: If you want that the eggdrop to show in topic and the handle of the user who changed it, use: \002%char%set +showhandle\002 **"
+
+#Cycle
+
+set black(say.en.man.42) "\[MAN\] \002Cycle\002 makes the eggdrop cycle (\001/hop\001), or part and re-join, a specified channel."
+set black(say.en.man.43) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.44) "\[MAN\] \002%char%cycle\002 \[duration|reason\] ; \002%botnick% cycle\002 \[duration|reason\] ; \002(PRIVMSG) cycle\002 <#chan> \[duration|reason\]"
+
+#Mode
+
+set black(say.en.man.45) "\[MAN\] \002Mode\002 applies or removes specified <modes> on channels."
+set black(say.en.man.46) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.47) "\[MAN\] \002%char%mode\002 (+/-)<modes> ; %botnick% mode\002 (+/-)<modes> ; \002(PRIVMSG) mode\002 <#chan> (+/-)<modes>"
+
+#i
+
+set black(say.en.man.48) "\[MAN\] \002i\002 invites a specified user to a specified channel."
+set black(say.en.man.49) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.50) "\[MAN\] \002%char%i\002 <nick> ; \002%botnick% i\002 <nick> ; \002(PRIVMSG) i\002 <#chan> <nick>"
+
+#k
+
+set black(say.en.man.62) "\[MAN\] \002k\002 kicks specified user from channel. Reason is optional."
+set black(say.en.man.63) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.64) "\[MAN\] \002%char%k\002 <nick|mask> \[reason\] ; \002%botnick% k\002 <nick|mask> \[reason\] ; \002(PRIVMSG) k\002 <#chan> <nick|mask> \[reason\]"
+set black(say.en.man.65) "\[MAN\] Optional settings: \002k-reason\002 (default reason setting)"
+
+#w
+
+set black(say.en.man.66) "\[MAN\] \002w\002 delivers a warning kick to a user with a given reason."
+set black(say.en.man.67) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.68) "\[MAN\] \002%char%w\002 <nick> ; \002%botnick% w\002 <nick> ; \002(PRIVMSG) w\002 <#chan> <nick>"
+set black(say.en.man.69) "\[MAN\] Optional settings: \002w-reason\002 (default warning reason) ; \002w-message\002 (default warning message)"
+
+#Check
+
+set black(say.en.man.70) "\[MAN\] \002Check\002 verifies a user with a private message if is virused or making advertise."
+set black(say.en.man.71) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.72) "\[MAN\] \002%char%check\002 <nick>\002 ; \002%botnick% check\002 <nick> ; \002(PRIVMSG) check\002 \[#chan\] <nick>"
+set black(say.en.man.73) "\[MAN\] Optional settings: \002%char%set\002 check-message <message> ; \002(PRIVMSG) set\002 check-message <message> (default check message)"
+
+#sb
+
+set black(say.en.man.74) "\[MAN\] \002sb\002 search and/or show details about a given ban (supports wildcards)."
+set black(say.en.man.75) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.76) "\[MAN\] \002%char%sb\002 <nick|mask|id> ; \002%botnick% sb\002 <nick|mask|id> ; \002(PRIVMSG) sb\002 <#chan> <nick|mask|id>"
+set black(say.en.man.77) "\[MAN\] \002%char%sb\002 <nick|mask|id> \[global\] ; \002%botnick% sb\002 <nick|mask|id> \[global\] ; \002(PRIVMSG) sb\002 <#chan> <nick|mask|id> \[global\]"
+set black(say.en.man.78) "\[MAN\] ** Note: In case that \002<nick>\002 is not on %chan%, eggdrop will \002WHOIS\002 it and check if it has ban on \002ident/host/nick\002 showing information about. **"
+
+#id
+
+set black(say.en.man.79) "\[MAN\] \002id\002 sets a ban on a given \001IDENT\001. If a user nickname is specified, eggdrop will automatically take his ident."
+set black(say.en.man.80) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.81) "\[MAN\] \002%char%id\002 <nick|ident> ; \002%botnick% id\002 <nick|ident> ; \002(PRIVMSG) id\002 <#chan> <nick|ident>"
+set black(say.en.man.82) "\[MAN\] Optional settings: \002id-reason\002 (default reason); \002id-bantime\002 (default ban time); \002id-banmask\002 (default banmask)"
+
+#n
+
+set black(say.en.man.83) "\[MAN\] \002n\002 sets a ban on a given \001NICKNAME\001."
+set black(say.en.man.84) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.85) "\[MAN\] \002%char%n\002 <nick> ; \002%botnick% n\002 <nick> ; \002(PRIVMSG) n\002 <#chan> <nick>"
+set black(say.en.man.86) "\[MAN\] Optional settings: \002n-reason\002 (default reason); \002n-bantime\002 (default ban time) ; \002n-banmask\002 (default banmask)"
+
+#Spam
+
+set black(say.en.man.87) "\[MAN\] \002Spam\002 bans a user with a default \001SPAM\001 reason."
+set black(say.en.man.88) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.89) "\[MAN\] \002%char%spam\002 <nick|mask> ; \002%botnick% spam\002 <nick|mask> ; \002(PRIVMSG) spam\002 <#chan> <nick|mask>"
+set black(say.en.man.90) "\[MAN\] Optional settings: \002spam-reason\002 (default spam reason); \002spam-bantime\002 (default spam ban time); \002spam-banmask\002 (default spam banmask)"
+
+#dr
+
+set black(say.en.man.91) "\[MAN\] \002dr\002 bans a user with a default \001DRONE\001 reason."
+set black(say.en.man.92) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.93) "\[MAN\] \002%char%dr\002 <nick|mask> ; \002%botnick% dr\002 <nick|mask> ; \002(PRIVMSG) dr\002 <#chan> <nick|mask>"
+set black(say.en.man.94) "\[MAN\] Optional settings: \002dr-reason\002 (default reason); \002dr-bantime\002 (default ban time); \002dr-banmask\002 (default banmask)"
+
+#b
+
+set black(say.en.man.95) "\[MAN\] \002b\002 bans a user from a channel for a specified ban-time. If you do not specify a \001\[duration\]\001 will be used default value, but if you specify \0020\002 will become a permanent ban (blacklisted)."
+set black(say.en.man.96) "\[MAN\] Format duration: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days, \0020\002 = permanent"
+set black(say.en.man.97) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.98) "\[MAN\] \002%char%b\002 <nick|mask> \[-level\] \[duration\] \[reason\] \[-c/comment\] ; \002%botnick% b\002 <nick|mask> \[-level\] \[duration\] \[reason\] \[-c/comment\] ; \002(PRIVMSG) b\002 <#chan> <nick|mask> \[-level\] \[duration\] \[reason\] \[-c/comment\]"
+set black(say.en.man.98_1) "\[MAN\] ** Note: Using the optional \[-c/comment\] option will make eggdrop shows a second informations line of the ban entry with that comment. **"
+set black(say.en.man.99) "\[MAN\] \002%char%b\002 <nick|mask>  \[-level\] \[duration\] \[global|link\] \[reason\] \[-c/comment\] ; \002%botnick% b\002 <nick|mask> \[-level\] \[duration\] \[global|link\] \[reason\] \[-c/comment\] ; \002(PRIVMSG) b\002 <#chan> <nick|mask> \[-level\] \[duration\] \[global|link\] \[reason\] \[-c/comment\]"
+set black(say.en.man.100) "\[MAN\] Optional settings: \002b-reason\002 (default reason); \002b-bantime\002 (default ban time); \002b-banmask\002 (default banmask)"
+
+#ub
+
+set black(say.en.man.101) "\[MAN\] \002ub\002 removes a ban from a specified channel (supports wildcards). \002ATTENTION\002: If you specify ONLY \002*\002 the eggdrop removes all channel bans."
+set black(say.en.man.102) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.103) "\[MAN\] \002%char%ub\002 <nick|mask|id> ; \002%botnick% ub\002 <nick|mask|id> ; \002(PRIVMSG) ub\002 <#chan> <nick|mask|id>\002"
+set black(say.en.man.104) "\[MAN\] \002%char%ub\002 <nick|mask|id> \[global\]\002 ; \002%botnick% ub\002 <nick|mask|id> \[global|link\] ; \002(PRIVMSG) ub\002 <#chan> <nick|mask|id> \[global|link\]"
+set black(say.en.man.105) "\[MAN\] ** Note: In case that \002<nick>\002 is not on %chan% eggdrop will \002WHOIS\002 it and check if has ban on \002ident/host/nick\002 and will unban it. **"
+
+#Bot
+
+set black(say.en.man.106) "\[MAN\] \002Bot\002 bans a user with a default \001BOT\001 reason."
+set black(say.en.man.107) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.108) "\[MAN\] \002%char%bot\002 <nick|mask>\002 ; \002%botnick% bot\002 <nick|mask> ; \002(PRIVMSG) bot\002 <#chan> <nick|mask>"
+set black(say.en.man.109) "\[MAN\] Optional settings: \002bot-reason\002 (default reason); \002bot-bantime\002 (default ban time); \002bot-banmask\002 (default banmask)"
+
+#bw
+
+set black(say.en.man.110) "\[MAN\] \002bw\002 bans a user with a default reason."
+set black(say.en.man.111) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.112) "\[MAN\] \002%char%bw\002 <nick|mask> ; \002%botnick% bw\002 <nick|mask> ; \002(PRIVMSG) bw\002 <#chan> <nick|mask>\002"
+set black(say.en.man.113) "\[MAN\] Optional settings: \002bw-reason\002 (default reason); \002bw-bantime\002 (default ban time); \002bw-banmask\002 (default banmask)"
+
+#Black
+
+set black(say.en.man.114) "\[MAN\] \002Black\002 bans a user for \001UNLIMITED time\001 (permanent ban)."
+set black(say.en.man.115) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.116) "\[MAN\] \002%char%black\002 <nick|mask> \[reason\] \[-c/comment\] ; \002%botnick% black\002 <nick|mask> \[reason\] \[-c/comment\] ; \002(PRIVMSG) black\002 <#chan> <nick|mask> \[reason\] \[-c/comment\]\002"
+set black(say.en.man.116_1) "\[MAN\] ** Note: Using the optional \[-c/comment\] option will make eggdrop shows a second informations line of the ban entry with that comment. **"
+set black(say.en.man.117) "\[MAN\] Optional settings: \002black-reason\002 (default reason); \002black-banmask\002 (default banmask)"
+
+#Stick 
+
+set black(say.en.man.118) "\[MAN\] \002Stick\002 bans a user with a given reason and ban-time, but with a \001sticky\001 character. A sticky ban will be reactivated by the bot if anyone removes it from the channel."
+set black(say.en.man.118_1) "\[MAN\] Format duration: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days, \0020\002 = permanent"
+set black(say.en.man.119) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.120) "\[MAN\] \002%char%stick\002 <nick|mask> \[duration\] \[reason\] \[-c/comment\] ; %botnick% stick\002 <nick|mask> \[duration\] \[reason\] \[-c/comment\] ; \002(PRIVMSG) stick\002 <#chan> <nick|mask> \[duration\] \[reason\] \[-c/comment\]"
+set black(say.en.man.120_1) "\[MAN\] ** Note: Using the optional \[-c/comment\] option will make eggdrop shows a second informations line of the ban entry with that comment. **"
+set black(say.en.man.121) "\[MAN\] Optional settings: \002stick-reason\002 (default reason); \002stick-bantime\002 (default ban time); \002stick-banmask\002 (default banmask)"
+
+#Gag
+
+set black(say.en.man.122) "\[MAN\] \002Gag\002 silence/mute (cannot write on channel) a user for a period of time. If you do not specify a \002\[duration\]\002 will be used a default value."
+set black(say.en.man.122_1) "\[MAN\] Format duration: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days"
+set black(say.en.man.123) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.124) "\[MAN\] \002%char%gag\002 <nick> \[duration\] \[reason\] ; \002%botnick% gag\002 <nick> \[duration\] \[reason\] ; \002(PRIVMSG) gag\002 <#chan> <nick> \[duration\] \[reason\]\002."
+set black(say.en.man.125) "\[MAN\] Optional settings: \002gag-reason\002 (default reason); \002gag-bantime\002 (default ban time); \002gag-banmask\002 (default banmask)"
+
+#Add
+
+set black(say.en.man.126) "\[MAN\] \002Add\002 adds a user to the channel's userlist."
+set black(say.en.man.127) "\[MAN\] ** Note: If the user is on the channel, the automatically hostmask added for that user will be the current one. **"
+set black(say.en.man.128) "\[MAN\] ** Note: If the user is NOT on the channel, the automatically hostmask added for that user will be: *!*@%user%.users.undernet.org. **"
+set black(say.en.man.134) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.135) "\[MAN\] \002%char%add\002 <level> <nick|Xusername> ; \002%botnick% add\002 <level> <nick|Xusername> ; \002(PRIVMSG) add\002 <#chan> <level> <nick|Xusername>"
+
+#Adduser
+
+set black(say.en.man.136) "\[MAN\] For informations on \002how to give someone access\002 please check: \002%char%man add\002"
+
+#DelAcc
+
+set black(say.en.man.142) "\[MAN\] \002DelAcc\002 removes a user from the access list of a channel."
+set black(say.en.man.142_1) "\[MAN\] ** Note: You must have higher access than the user you want to delete (so, if you have \002OP\002 and specified user have \002ADMIN\002 you can't delete him). **"
+set black(say.en.man.143) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.144) "\[MAN\] \002%char%delacc\002 <handle> ; %botnick% delacc\002 <handle> ; \002(PRIVMSG) delacc\002 <#chan> <handle>"
+set black(say.en.man.145) "\[MAN\] \002%char%delacc\002 <owner|master> <handle> ; \002%botnick% delacc\002 <owner|master> <handle> ; \002(PRIVMSG) delacc\002 <#chan> <owner|master> <handle> (remove access global)"
+
+#Del
+
+set black(say.en.man.146) "\[MAN\] \002Del\002 removes a user totally from eggdrop's database."
+set black(say.en.man.147) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.148) "\[MAN\] \002%char%del\002 <handle> ; \002%botnick% del\002 <handle> ; \002(PRIVMSG) del\002 <#chan> <handle>"
+
+#unGag
+
+set black(say.en.man.149) "\[MAN\] \002unGag\002 removes the \002gag\002 from a specified user."
+set black(say.en.man.150) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.151) "\[MAN\] \002%char%ungag\002 <nick|mask> ; \002%botnick% ungag\002 <nick|mask> ; \002(PRIVMSG) ungag\002 <#chan> <nick|mask>"
+
+#BanList
+
+set black(say.en.man.152) "\[MAN\] \002BanList\002 shows the list of banned masks that are active on the specified channel."
+set black(say.en.man.153) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.154) "\[MAN\] \002%char%banlist\002 <handle|all|other> ; \002%botnick% banlist\002 <handle|all|other> ; \002(PRIVMSG) banlist\002 <#chan> <handle|all|other>"
+set black(say.en.man.155) "\[MAN\] \002%char%banlist\002 <handle|all|other|global> ; \002%botnick% banlist\002 <handle|all|other|global> ; \002(PRIVMSG) banlist\002 <#chan> <handle|all|other|global>"
+
+#AddHost
+
+set black(say.en.man.156) "\[MAN\] \002AddHost\002 adds a new hostmask to a specified user."
+set black(say.en.man.157) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.158) "\[MAN\] \002%char%addhost\002 <handle> <mask> ; \002%botnick% addhost\002 <handle> <mask> ; \002(PRIVMSG) addhost\002 <handle> <mask>"
+
+#DelHost
+
+set black(say.en.man.159) "\[MAN\] \002DelHost\002 removes a hostmask from a specified user."
+set black(say.en.man.160) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.161) "\[MAN\] \002%char%delhost\002 <handle> <mask> ; \002%botnick% delhost\002 <handle> <mask> ; \002(PRIVMSG) delhost\002 <handle> <mask>"
+
+#chUser
+
+set black(say.en.man.162) "\[MAN\] \002chUser\002 change the <handle> (name) of a user into <newhandle>."
+set black(say.en.man.163) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.164) "\[MAN\] \002%char%chuser\002 <handle> <newhandle> ; \002%botnick% chuser\002 <handle> <newhandle> ; \002(PRIVMSG) chuser\002 <handle> <newhandle>"
+
+#s
+
+set black(say.en.man.165) "\[MAN\] \002s\002 suspends a user's access on a channel for a specified period of time. If you do not specify a \002\[duration\]\002 it will be used a default value."
+set black(say.en.man.165_1) "\[MAN\] ** Note: You can only SUSPEND someone with access lower than your own. **"
+set black(say.en.man.165_2) "\[MAN\] Format duration: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days"
+set black(say.en.man.166) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.167) "\[MAN\] \002%char%s\002 <handle> \[duration\] \[reason\] ; \002%botnick% s\002 <handle> \[duration\] \[reason\] ; \002(PRIVMSG) s\002 <#chan> <handle> \[duration\] \[reason\]"
+
+#us
+
+set black(say.en.man.168) "\[MAN\] \002us\002 removes the suspension of a user access from a given channel."
+set black(say.en.man.168_1) "\[MAN\] ** Note: You can only UNSUSPEND someone with access lower than your own. Also, the suspension level must be less than or equal to your own access level. **"
+set black(say.en.man.169) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.170) "\[MAN\] \002%char%us\002 <handle> ; \002%botnick% us\002 <handle> ; \002(PRIVMSG) us\002 <#chan> <handle>"
+
+#Auto
+
+set black(say.en.man.171) "\[MAN\] \002Auto\002 changes the automode of a specified for a given channel. ATTENTION the user must have access on that channel first."
+set black(say.en.man.172) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.173) "\[MAN\] AutoVOICE: \002%char%auto (+/-)v\002 <nick|handle> ; %botnick% auto (+/-)v <nick|handle> ; \002(PRIVMSG) auto\002 <#chan> (+/-)v <nick|handle>"
+set black(say.en.man.174) "\[MAN\] AutoOP: \002%char%auto (+/-)o\002 <nick|handle> ; %botnick% auto (+/-)o <nick|handle> ; \002(PRIVMSG) auto\002 <#chan> (+/-)o <nick|handle>"
+set black(say.en.man.175) "\[MAN\] AutoVOICE: \002%char%auto (+/-)v\002 <nick|handle> \[-global\] ; %botnick% auto\002 (+/-)v <nick|handle> \[-global\] ; \002(PRIVMSG) auto\002 <#chan> (+/-)v <nick|handle> \[-global\]"
+set black(say.en.man.176) "\[MAN\] AutoOP: \002%char%auto (+/-)o\002 <nick|handle> \[-global\] ; %botnick% auto\002 (+/-)o <nick|handle> \[-global\] ; \002(PRIVMSG) auto\002 <#chan> (+/-)o <nick|handle> \[-global\]"
+
+
+################################################# MAN PROTECTIONS #####################################################
+
+
+#AntiPub
+
+set black(say.en.man.177) "\[MAN\] \002AntiPub\002 bans users who advertise using *#*, *http://* or *www.* (supports wildcards)."
+set black(say.en.man.178) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.179) "\[MAN\] \002%char%set\002 (+/-)antipub ; \002%botnick% set\002 (+/-)antipub ; \002(PRIVMSG) set\002 (+/-)antipub"
+set black(say.en.man.180) "\[MAN\] \002%char%antipub\002 \[#chan\] add <link|#chan> ; \002%char%antipub\002 \[#chan\] list"
+set black(say.en.man.180_1) "\[MAN\] \002%char%antipub\002 \[#chan\] add <+word> (add exceptions) ; \002%char%antipub\002 \[#chan\] del <no. list> (remove antipub from list)"
+set black(say.en.man.181) "\[MAN\] Optional settings: \002antipub-reason\002; antipub-bantime; \002antipub-warn\002; antipub-banmethod; \002antipub-banmask\002"
+
+#AntiNotice
+
+set black(say.en.man.183) "\[MAN\] \002AntiNotice\002 bans users who use \"NOTICE\" on a channel."
+set black(say.en.man.184) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.185) "\[MAN\] \002%char%set\002 (+/-)antinotice ; \002%botnick% set\002 (+/-)antinotice ; \002(PRIVMSG) set\002 <#chan> (+/-)antinotice"
+set black(say.en.man.186) "\[MAN\] Optional settings: \002antinotice-reason\002; antinotice-bantime; \002antinotice-warn\002; antinotice-banmethod; \002antinotice-banmask\002"
+set black(say.en.man.187) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiCtcp
+
+set black(say.en.man.188) "\[MAN\] \002AntiCtcp\002 bans users who use \"CTCP\" on a channel."
+set black(say.en.man.189) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.190) "\[MAN\] \002%char%set\002 (+/-)antictcp ; \002%botnick% set\002 (+/-)antictcp ; \002(PRIVMSG) set\002 <#chan> (+/-)antictcp"
+set black(say.en.man.191) "\[MAN\] Optional settings: \002antictcp-reason\002, antictcp-bantime, \002antictcp-warn\002, antictcp-banmethod, \002antictcp-banmask\002"
+set black(say.en.man.192) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiBadWord
+
+set black(say.en.man.193) "\[MAN\] \002AntiBadWord\002 bans users who use *bad/forbidden* words/phrases (supports wildcards)."
+set black(say.en.man.194) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.195) "\[MAN\] \002%char%set\002 (+/-)antibadword ; \002%botnick% set\002 (+/-)antibadword ; \002(PRIVMSG) set\002 <#chan> (+/-)antibadword"
+set black(say.en.man.196) "\[MAN\] \002%char%badword\002 \[#chan\] add <word|phrase> ; \002%char%badword\002 \[#chan\] list ; \002%char%badword\002 \[#chan\] del <no. list>"
+set black(say.en.man.197) "\[MAN\] \002%char%badword\002 \[#chan\] add <+word> (add exceptions) ; \002%char%badword\002 \[#chan\] add <word:no. method> (see \002%char%man banmethod\002)"
+set black(say.en.man.198) "\[MAN\] Optional settings: \002antibadword-reason\002, antibadword-bantime, \002antibadword-warn\002, antibadword-banmethod, \002antibadword-banmask\002"
+
+#AntiLongText
+
+set black(say.en.man.199) "\[MAN\] \002AntiLongText\002 bans users who write too many words in one line."
+set black(say.en.man.200) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.201) "\[MAN\] \002%char%set\002 (+/-)antilongtext ; \002%botnick% set\002 (+/-)antilongtext ; \002(PRIVMSG) set\002 <#chan> (+/-)antilongtext"
+set black(say.en.man.202) "\[MAN\] Optional settings: \002antilongtext-reason\002, antilongtext-bantime, \002antilongtext-warn\002, antilongtext-banmethod, \002antilongtextmax\002, antilongtext-banmask"
+set black(say.en.man.203) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#BadQuitPart
+
+set black(say.en.man.204) "\[MAN\] \002AntiBadQuitPart\002 bans users who use *bad/forbidden* words when parting a channel (supports wildcards)."
+set black(say.en.man.205) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.206) "\[MAN\] \002%char%set\002 (+/-)badquitpart ; \002%botnick% set\002 (+/-)badquitpart ; \002(PRIVMSG) set\002 <#chan> (+/-)badquitpart"
+set black(say.en.man.207) "\[MAN\] \002%char%badquitpart\002 \[#chan\] add <word> ; \002%char%badquitpart\002 \[#chan\] list"
+set black(say.en.man.208) "\[MAN\] \002%char%badquitpart\002 \[#chan\] add <+word> (add exceptions) ; \002%char%badquitpart\002 \[#chan\] del <no. list> (remove badquitpart from list)"
+set black(say.en.man.209) "\[MAN\] Optional settings: \002antibadquitpart-reason\002, antibadquitpart-bantime, \002antibadquitpart-banmethod\002, antibadquitpart-banmask"
+
+#AntiJoinPart
+
+set black(say.en.man.210) "\[MAN\] \002AntiJoinPart\002 bans users who join and part too fast on a channel."
+set black(say.en.man.211) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.212) "\[MAN\] \002%char%set (+/-)antijoinpart\002 ; %botnick% set (+/-)antijoinpart ; \002(PRIVMSG) set <#chan> (+/-)antijoinpart\002"
+set black(say.en.man.213) "\[MAN\] Optional settings: \002antijoinpart-reason\002, antijoinpart-bantime, \002antijoinpart-banmethod\002, antijoinpart-banmask"
+set black(say.en.man.214) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiSpam
+
+set black(say.en.man.215) "\[MAN\] \002AntiSpam\002 bans users who send spam messages containing \001#\001 or \001*www.*\001 (see also \002!man spamjoinmessage\002)."
+set black(say.en.man.216) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.217) "\[MAN\] \002%char%set\002 (+/-)antispam ; \002%botnick% set\002 (+/-)antispam ; \002(PRIVMSG) set\002 <#chan> (+/-)antispam"
+set black(say.en.man.217_1) "\[MAN\] \002%char%antispam\002 \[#chan\] add <*text*> ; \002%char%antispam \[#chan\] list\002"
+set black(say.en.man.217_2) "\[MAN\] \002%char%antispam\002 \[#chan\] add <+word> (add except) ; \002%char%antispam\002 \[#chan\] del <no. list> (remove antispam from list)"
+set black(say.en.man.218) "\[MAN\] Optional settings: \002antispam-reason\002, antispam-message, \002antispam-bantime\002, antispam-banmask, \002antispam-scantime\002"
+set black(say.en.man.219) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiRepeat
+
+set black(say.en.man.221) "\[MAN\] \002AntiRepeat\002 bans users who repeats the same text too often on a channel."
+set black(say.en.man.222) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.223) "\[MAN\] \002%char%set\002 (+/-)antirepeat ; \002%botnick% set\002 (+/-)antirepeat ; \002(PRIVMSG) set\002 <#chan> (+/-)antirepeat"
+set black(say.en.man.224) "\[MAN\] Optional settings: \002antirepeat-reason\002, antirepeat-bantime, \002antirepeat-warn\002, antirepeat-banmethod, \002antirepeat-banmask\002, antirepeat-setting"
+set black(say.en.man.225) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiColor
+
+set black(say.en.man.226) "\[MAN\] \002AntiColor\002 bans users who use \002COLORS\002 in their messages."
+set black(say.en.man.227) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.228) "\[MAN\] \002%char%set\002 (+/-)anticolor ; \002%botnick% set\002 (+/-)anticolor ; \002(PRIVMSG) set\002 <#chan> (+/-)anticolor"
+set black(say.en.man.229) "\[MAN\] Optional settings: \002anticolor-reason\002, anticolor-bantime, \002anticolor-warn\002, anticolor-banmethod, \002anticolor-banmask\002"
+set black(say.en.man.230) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiBold
+
+set black(say.en.man.231) "\[MAN\] \002AntiBold\002 bans users who use \002BOLD\002 characters."
+set black(say.en.man.232) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.233) "\[MAN\] \002%char%set\002 (+/-)antibold ; \002%botnick% set\002 (+/-)antibold ; \002(PRIVMSG) set\002 <#chan> (+/-)antibold"
+set black(say.en.man.234) "\[MAN\] Optional settings: \002antibold-reason\002, antibold-bantime, \002antibold-warn\002, antibold-banmethod, \002antibold-banmask\002"
+set black(say.en.man.235) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiUnderline
+
+set black(say.en.man.236) "\[MAN\] \002AntiUnderline\002 bans users who use \002UNDERLINE\002 characters."
+set black(say.en.man.237) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.238) "\[MAN\] \002%char%set\002 (+/-)antiunderline ; \002%botnick% set\002 (+/-)antiunderline ; \002(PRIVMSG) set\002 <#chan> (+/-)antiunderline"
+set black(say.en.man.239) "\[MAN\] Optional settings: \002antiunderline-reason\002, antiunderline-bantime, \002antiunderline-warn\002, antiunderline-banmethod, \002antiunderline-banmask\002"
+set black(say.en.man.240) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiCaps
+
+set black(say.en.man.241) "\[MAN\] \002AntiCaps\002 bans users who abuse using of \002CAPS LOCK\002 characters."
+set black(say.en.man.242) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.243) "\[MAN\] \002%char%set\002 (+/-)anticaps ; \002%botnick% set\002 (+/-)anticaps ; \002(PRIVMSG) set\002 <#chan> (+/-)anticaps"
+set black(say.en.man.244) "\[MAN\] Optional settings: \002anticaps-reason\002, anticaps-bantime, \002anticaps-warn\002, anticaps-banmethod, \002anticaps-banmask\002"
+set black(say.en.man.245) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#BadNick
+
+set black(say.en.man.246) "\[MAN\] \002BadNick\002 bans users who are using NICKNAMEs which contains *bad/forbidden* words/characters (supports wildcards)."
+set black(say.en.man.247) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.248) "\[MAN\] \002%char%set\002 (+/-)badnick ; \002%botnick% set\002 (+/-)badnick ; \002(PRIVMSG) set\002 <#chan> (+/-)badnick"
+set black(say.en.man.249) "\[MAN\] \002%char%badnick\002 \[#chan\] add <word> ; \002%char%badnick \[#chan\] list\002"
+set black(say.en.man.250) "\[MAN\] \002%char%badnick\002 \[#chan\] add <+word> (add exceptions) ; \002%char%badnick\002 \[#chan\] del <no. list> (remove badnick from list)"
+set black(say.en.man.251) "\[MAN\] Optional settings: \002badnick-reason\002, badnick-bantime, \002badnick-banmask\002, badnick-bmethod, \002badnick-banwait\002"
+
+#BadRealname
+
+set black(say.en.man.252) "\[MAN\] \002BadRealname\002 bans users who are using REALNAMEs which contains *bad/forbidden* words/characters (supports wildcards)."
+set black(say.en.man.253) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.254) "\[MAN\] \002%char%set\002 (+/-)badrealname ; \002%botnick% set\002 (+/-)badrealname ; \002(PRIVMSG) set\002 <#chan> (+/-)badrealname"
+set black(say.en.man.255) "\[MAN\] \002%char%badrealname\002 \[#chan\] add <word> ; \002%char%badrealname \[#chan\] list\002"
+set black(say.en.man.256) "\[MAN\] \002%char%badrealname\002 \[#chan\] add <+word> (add exceptions) ; \002%char%badrealname\002 \[#chan\] del <no. list> (remove badrealname from list)"
+set black(say.en.man.257) "\[MAN\] Optional settings: \002badrealname-reason\002, badrealname-bantime, \002badrealname-banmask\002"
+
+#AutoOp
+
+set black(say.en.man.258) "\[MAN\] \002AutoOp\002 gives the opportunity to every user who joins a channel to have \002OP (@)\002."
+set black(say.en.man.259) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.260) "\[MAN\] \002%char%set\002 (+/-)autoop ; \002%botnick% set\002 (+/-)autoop ; \002(PRIVMSG) set\002 <#chan> (+/-)autoop"
+
+#AutoVoice
+
+set black(say.en.man.261) "\[MAN\] \002AutoVoice\002 gives the opportunity to every user who joins a channel to have \002VOICE (+v)\002."
+set black(say.en.man.262) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.263) "\[MAN\] \002%char%set\002 (+/-)autovoice ; \002%botnick% set\002 (+/-)autovoice ; \002(PRIVMSG) set\002 <#chan> (+/-)autovoice"
+
+#AntiJoinFlood
+
+set black(say.en.man.264) "\[MAN\] \002AntiJoinFlood\002 sets certain channel modes and bans users who undertake \002massjoin\002 actions. Also bans users who joins and part/quit too fast."
+set black(say.en.man.265) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.266) "\[MAN\] \002%char%set\002 (+/-)antijoinflood ; \002%botnick% set\002 (+/-)antijoinflood ; \002(PRIVMSG) set\002 <#chan> (+/-)antijoinflood"
+set black(say.en.man.267) "\[MAN\] Optional settings: \002joinflood\002 (<number joins>:<seconds>)"
+set black(say.en.man.268) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AntiChanFlood
+
+set black(say.en.man.269) "\[MAN\] \002AntiChanFlood\002 bans users who flood a channel with text/words."
+set black(say.en.man.270) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.271) "\[MAN\] \002%char%set\002 (+/-)antichanflood ; \002%botnick% set\002 (+/-)antichanflood ; \002(PRIVMSG) set\002 <#chan> (+/-)antichanflood"
+set black(say.en.man.272) "\[MAN\] Optional settings: \002antichanflood-reason\002 (default reason), \002antichanflood-bantime\002 (default bantime), \002chanflood\002 (<number lines>:<seconds>)"
+set black(say.en.man.273) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#BadIdent
+
+set black(say.en.man.274) "\[MAN\] \002BadIdent\002 bans users who are using IDENTs which contains *bad/forbidden* words/characters (supports wildcards)."
+set black(say.en.man.275) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.276) "\[MAN\] \002%char%set\002 (+/-)badident ; \002%botnick% set\002 (+/-)badident ; \002(PRIVMSG) set\002 <#chan> (+/-)badident"
+set black(say.en.man.277) "\[MAN\] \002%char%badident\002 \[#chan\] add <word> ; \002%char%badident \[#chan\] list\002"
+set black(say.en.man.278) "\[MAN\] \002%char%badident\002 \[#chan\] add <+word> (add exceptions) ; \002%char%badident\002 \[#chan\] del <no. list> (remove badident from list)"
+set black(say.en.man.279) "\[MAN\] Optional settings: \002badident-reason\002 (default reason), \002badident-bantime\002 (default bantime), \002badident-banmask\002 (default banmask)"
+
+#ShowHandle
+
+set black(say.en.man.280) "\[MAN\] \002ShowHandle\002 will append the handle of user who adds a ban to the ban message."
+set black(say.en.man.281) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.282) "\[MAN\] \002%char%set\002 (+/-)showhandle ; \002%botnick% set\002 (+/-)showhandle ; \002(PRIVMSG) set\002 <#chan> (+/-)showhandle"
+
+#ShowCount
+
+set black(say.en.man.283) "\[MAN\] \002ShowCount\002 will append the total count number of bans to the ban message."
+set black(say.en.man.284) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.285) "\[MAN\] \002%char%set\002 (+/-)showcount ; \002%botnick% set\002 (+/-)showcount ; \002(PRIVMSG) set\002 <#chan> (+/-)showcount"
+
+#Showtime
+
+set black(say.en.man.286) "\[MAN\] \002Showtime\002 will append the expiration time to the ban message."
+set black(say.en.man.287) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.288) "\[MAN\] \002%char%set\002 (+/-)showtime ; \002%botnick% set\002 (+/-)showtime ; \002(PRIVMSG) set\002 <#chan> (+/-)showtime"
+
+#ShowUrl
+
+set black(say.en.man.289) "\[MAN\] \002ShowUrl\002 will append the channel URL to the ban reason (see \002!man url\002)."
+set black(say.en.man.290) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.291) "\[MAN\] \002%char%set\002 (+/-)showurl ; \002%botnick% set\002 (+/-)showurl ; \002(PRIVMSG) set\002 <#chan> (+/-)showurl"
+
+#xBanTime
+
+set black(say.en.man.292) "\[MAN\] \002xBanTime\002 sets the X ban-time (ONLY if \002+xonly\002 module is enabled)."
+set black(say.en.man.293) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.294) "\[MAN\] \002%char%set\002 xbantime <bantime X> ; %botnick% set\002 xbantime <bantime X> ; \002(PRIVMSG) set\002 <#chan> xbantime <bantime X>"
+
+#xBanLevel
+
+set black(say.en.man.295) "\[MAN\] \002xBanLevel\002 sets the X access-level (ONLY if \002+xonly\002 module is enabled)"
+set black(say.en.man.296) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.297) "\[MAN\] \002%char%set\002 xbanlevel <level X> ; \002%botnick% set\002 xbanlevel <level X> ; \002(PRIVMSG) set\002 <#chan> xbanlevel <level X>"
+
+#oProtect
+
+set black(say.en.man.298) "\[MAN\] \002oProtect\002 excepts those who have \002OP (@)\002 from all protection."
+set black(say.en.man.299) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.300) "\[MAN\] \002%char%set\002 (+/-)oprotect ; \002%botnick% set\002 (+/-)oprotect ; \002(PRIVMSG) set\002 <#chan> (+/-)oprotect"
+
+#vProtect
+
+set black(say.en.man.301) "\[MAN\] \002vProtect\002 excepts those who have \002VOICE (+v)\002 from all protection."
+set black(say.en.man.302) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.303) "\[MAN\] \002%char%set\002 (+/-)vprotect ; \002%botnick% set\002 (+/-)vprotect ; \002(PRIVMSG) set\002 <#chan> (+/-)vprotect"
+
+#hoProtect
+
+set black(say.en.man.304) "\[MAN\] \002hoProtect\002 excepts those who have \002HALFOP (+h %)\002 from all protection."
+set black(say.en.man.305) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.306) "\[MAN\] \002%char%set\002 (+/-)hoprotect ; \002%botnick% set\002 (+/-)hoprotect ; \002(PRIVMSG) set\002 <#chan> (+/-)hoprotect"
+
+#ShowID
+
+set black(say.en.man.307) "\[MAN\] \002ShowID\002 will append the \002ID number\002 of ban from the eggdrop banlist to the ban reason."
+set black(say.en.man.308) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.309) "\[MAN\] \002%char%set\002 (+/-)showid ; \002%botnick% set\002 (+/-)showid; \002(PRIVMSG) set\002 <#chan> (+/-)showid"
+
+
+################################################# MAN MODULES #####################################################
+
+ 
+#xTools
+
+set black(say.en.man.407) "\[MAN\] \002xTools\002 gives eggdrop the permission to request Op, Voice, Invite or to Unban himself by *X*."
+set black(say.en.man.408) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.409) "\[MAN\] \002%char%set\002 (+/-)xtools ; \002%botnick% set\002 (+/-)xtools ; \002(PRIVMSG) set\002 <#chan> (+/-)xtools"
+
+#BadChan
+
+set black(say.en.man.410) "\[MAN\] \002BadChan\002 forbids people who are co-channeling *bad/forbidden* channels to stay on a specified channel (supports wildcards)."
+set black(say.en.man.411) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.412) "\[MAN\] \002%char%badchan\002 <ON|OFF> ; \002%botnick% badchan\002 <ON|OFF> ; \002(PRIVMSG) badchan\002 <#chan> <ON|OFF>"
+set black(say.en.man.413) "\[MAN\] \002%char%badchan add\002 <#badchan> \[reason\] (add badchan) ; \002%char%badchan \[#chan\] list\002 (see badchans list)"
+set black(say.en.man.414) "\[MAN\] \002%char%badchan add\002 <#badchan> \[global\] \[reason\]\002 ; %char%badchan del\002 <no. list> \[-global\] ; \002%char%badchan list\002 \[-global\]"
+set black(say.en.man.415) "\[MAN\] \002%char%badchan add\002 <+#badchan> (add exceptions) ; \002%char%badchan del\002 <no. list> (remove badchan from list)"
+set black(say.en.man.416) "\[MAN\] Optional settings: \002badchan-reason\002, badchan-bantime, \002badchan-bmethod\002, badchan-scantime, \002badchan-banwait\002, badchan-floodcontrol, \002showbadchan\002"
+
+#Anunt
+
+set black(say.en.man.417) "\[MAN\] \002Anunt/Advert\002 displays announcements/ads on a channel over a certain amount of time and depending on the channel activity (see also \002%char%man anunt-showtime\002 & supports !%chan% and !%botnick%)."
+set black(say.en.man.417_1) "\[MAN\] ** Note: These messages will be displayed one by one and ONLY if there's activity on that channel. Otherwise the eggdrop waits in stand by until the first sign of channel activity (join, part, chat, etc.). **"
+set black(say.en.man.418) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.419) "\[MAN\] \002%char%anunt <ON|OFF>\002 ; %botnick% anunt <ON|OFF> ; \002(PRIVMSG) anunt <#chan> <ON|OFF>\002"
+set black(say.en.man.420) "\[MAN\] \002%char%anunt\002 \[#chan\] add <text> ; \002%char%anunt \[#chan\] list\002 ; \002%char%anunt\002 \[#chan\] del <no. list>"
+set black(say.en.man.421) "\[MAN\] \002Remember:\002 To add more than 1 sentence in an add use \002%char%anunt add <text1>~<text2>..\002 and eggdrop will show the add as 2 different senteces."
+
+#Limit
+
+set black(say.en.man.422) "\[MAN\] \002Limit\002 has the role of \"handling\" of the channel limit."
+set black(say.en.man.423) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.424) "\[MAN\] \002%char%limit\002 <ON|OFF> ; \002%botnick% limit\002 <ON|OFF> ; \002(PRIVMSG) limit\002 <#chan> <ON|OFF>"
+set black(say.en.man.425) "\[MAN\] \002%char%limit set <number>\002 (default limit number)"
+set black(say.en.man.426) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Topic
+
+set black(say.en.man.427) "\[MAN\] \002Topic\002 sets the channel topic, which can be seen in the \002%char%info #channel\002 reply. If no topic text is specified, the current channel topic will be added."
+set black(say.en.man.427_1) "\[MAN\] ** Note: If you want to reset/remove the topic use: \002%char%topic unset\002. **"
+set black(say.en.man.428) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.429) "\[MAN\] \002%char%topic\002 \[#chan\] set <text> ; \002%botnick% topic\002 \[#chan\] set <text> ; \002(PRIVMSG) topic\002 \[#chan\] set <text>"
+set black(say.en.man.430) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#CloneScan
+
+set black(say.en.man.431) "\[MAN\] \002CloneScan\002 scans channel for clones and ban them."
+set black(say.en.man.432) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.433) "\[MAN\] \002%char%set\002 (+/-)clonescan ; \002%botnick% set\002 (+/-)clonescan ; \002(PRIVMSG) set\002 <#chan> (+/-)clonescan"
+set black(say.en.man.433_1) "\[MAN\] \002%char%clonescan add\002 <ip|mask> ; \002%char%clonescan del\002 <no. list> ; \002%char%clonescan list\002"
+set black(say.en.man.434) "\[MAN\] Optional settings: \002clonescan-maxclone\002 (max clones number), \002clonescan-bantime\002 (default bantime), \002clonescan-reason\002 (default reason)"
+set black(say.en.man.435) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Seen
+
+set black(say.en.man.436) "\[MAN\] \002Seen\002 search for a person with specified nick (supports wildcards). Also, it has a database for each channel."
+set black(say.en.man.437) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.438_1) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.438) "\[MAN\] \002%char%set\002 (+/-)seen ; \002%botnick% set\002 (+/-)seen ; \002(PRIVMSG) set\002 <#canal> (+/-)seen"
+set black(say.en.man.438_2) "\[MAN\] \002%char%seen\002 <nick|ip|host> ; \002%botnick% seen\002 <nick|ip|host> ; \002(PRIVMSG) seen\002 \[#chan\] <nick|ip|host>"
+set black(say.en.man.438_3) "\[MAN\] \002%char%seen\002 \[global\] <nick|ip|host> ; \002%botnick% seen\002 \[global\] <nick|ip|host> ; \002(PRIVMSG) seen\002 \[#chan|global\] <nick|ip|host>"
+set black(say.en.man.439) "\[MAN\] Optional settings: \002%char%seenreply\002"
+set black(say.en.man.440) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Greet
+
+set black(say.en.man.441) "\[MAN\] \002Greet\002 adds a welcome message and send it to all users who joins that channel (see also \002%char%man infoline\002 and \002%char%man count\002)."
+set black(say.en.man.442) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.443) "\[MAN\] \002%char%greet\002 <ON|OFF> ; \002%botnick% greet\002 <ON|OFF> ; \002(PRIVMSG) greet\002 <#chan> <ON|OFF>"
+set black(say.en.man.444) "\[MAN\] \002%char%greet\002 \[#chan\] set <message>\002 ; \002%botnick% greet\002 \[#chan\] set <message> ; \002(PRIVMSG) greet\002 \[#chan\] set <message>"
+set black(say.en.man.445) "\[MAN\] \002%char%set greet-method <method>\002 ( NOTICE | PRIVMSG )"
+set black(say.en.man.446) "\[MAN\] ** Note: To add more than 1 sentence in an greet use \002%char%greet add <message1>~<message2>\002.. and eggdrop will show the greet as 2 different senteces (supports %countchan%, %nick%, %time% and %count%). **"
+
+#Leave
+
+set black(say.en.man.447) "\[MAN\] \002Leave\002 adds a part message and send it to all users who leaves that channel."
+set black(say.en.man.448) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.449) "\[MAN\] \002%char%leave\002 <ON|OFF> ; \002%botnick% leave\002 <ON|OFF> ; \002(PRIVMSG) leave\002 <#chan> <ON|OFF>"
+set black(say.en.man.450) "\[MAN\] \002%char%leave\002 \[#chan\] set <message>\002 ; \002%botnick% leave\002 \[#chan\] set <message> ; \002(PRIVMSG) leave\002 \[#chan\] set <message>"
+set black(say.en.man.451) "\[MAN\] \002%char%set leave-method <method>\002 ( NOTICE | PRIVMSG )"
+set black(say.en.man.452) "\[MAN\] ** Note: To add more than 1 sentence in an leave use \002%char%leave add <message1>~<message2>\002.. and eggdrop will show the leave as 2 different senteces. **"
+
+#Idle
+
+set black(say.en.man.453) "\[MAN\] \002Idle\002 forbids users with \002op (@)\002, \002halfop (+h %)\002 or \002voice (+v)\002 to idle."
+set black(say.en.man.453_1) "\[MAN\] Format period: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days"
+set black(say.en.man.454) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.455) "\[MAN\] \002%char%idle\002 <(+/-)o / (+/-)v / (+/-)ho> ; \002%botnick% idle\002 <(+/-)o / (+/-)v / (+/-)ho> ; \002(PRIVMSG) idle\002 <#chan> <(+/-)o / (+/-)v / (+/-)ho>"
+set black(say.en.man.456) "\[MAN\] \002%char%idle add\002 <nick> (add exception from idle), \002%char%idle <list>\002 (list exceptions), \002%char%idle del\002 <nick> (delete exception)"
+set black(say.en.man.457) "\[MAN\] Optional settings: \002idleopmax\002 <period> (default time idledeop) ; \002idlevoicemax\002 <period> (default time idlevoice) ; \002idlehalfopmax\002 <period> (default time idlehalfop)"
+set black(say.en.man.458) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+set black(say.en.man.458_1) "\[MAN\] For informations about \002idlevoice\002 please check: \002%char%man idle\002"
+set black(say.en.man.458_2) "\[MAN\] For informations about \002idleop\002 please check: \002%char%man idle\002"
+set black(say.en.man.458_3) "\[MAN\] For informations about \002idlehalfop\002 please check: \002%char%man idle\002"
+
+#BackChan
+
+set black(say.en.man.459) "\[MAN\] \002BackChan\002 gives the option for every channel to have a back-channel, in which eggdrop will say the bans given by him to the mainchannel."
+set black(say.en.man.460) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.461) "\[MAN\] \002%char%set\002 \[#chan\] backchan <#backchan> ; \002%botnick% set\002 \[#chan\] backchan <#backchan> ; \002(PRIVMSG) set\002 <#chan> backchan <#backchan>"
+set black(say.en.man.462) "\[MAN\] ** Note: After the set of the backchannel you will be able to use all the ban commands but they will be applied on \002<#chan>\002 (the main channel). Supports only one main channel with a single backchan, couldn't handle 2 or more channels with the same backchan. **"
+set black(say.en.man.463) "\[MAN\] \002ChanReport\002 (BackChan) is a module which, when enabled, will give the option for every channel to have a back-channel, in which eggdrop will say the bans given by him to \002<#chan>\002 (the main channel)."
+
+#TopWords
+
+set black(say.en.man.464) "\[MAN\] \002TopWords\002 records users activity from a channel (number of written words, lines, letters, etc.)."
+set black(say.en.man.465) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.466) "\[MAN\] \002%char%set\002 (+/-)topwords ; \002%botnick% set\002 (+/-)topwords ; \002(PRIVMSG) set\002 <#chan> (+/-)topwords"
+set black(say.en.man.467) "\[MAN\] \002%char%topwords\002 \[#chan\] <nick> \[total\] ; \002%char%topwords\002 \[#chan\] <nick> \[total\] ; \002(PRIVMSG) topwords\002 \[#chan\] <nick> \[total\]"
+set black(say.en.man.467_1) "\[MAN\] \002%char%topwords\002 \[#chan\] <nick> \[total|reset\]  ; \002(PRIVMSG) topwords\002 \[#chan\] <nick> \[total|reset\]"
+
+#AntiTake
+
+set black(say.en.man.473) "\[MAN\] \002Antitake\002 has 2 settings: The first setting stops users without access from \002taking OP (@)\002 from other ops. It will deop the op taking ops, and reop the op who lost ops. The second setting stops users without access from \002giving OP (@)\002 to another user. In such a case, both users will be deopped."
+set black(say.en.man.474) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.475) "\[MAN\] \002%char%set\002 (+/-)dontdeop ; \002%botnick% set\002 (+/-)dontdeop (deop protection) ; \002%char%set\002 (+/-)dontop ; \002%botnick% set\002 (+/-)dontop (op protection)"
+set black(say.en.man.475_1) "\[MAN\] For informations about \002dontdeop\002 please check: \002%char%man antitake\002"
+set black(say.en.man.475_2) "\[MAN\] For informations about \002dontop\002 please check: \002%char%man antitake\002"
+
+#Private
+
+set black(say.en.man.476) "\[MAN\] \002Private\002 forbids users without access to join a specified channel (by banning them) unless they have been added to the except list."
+set black(say.en.man.477) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.478) "\[MAN\] \002%char%set\002 (+/-)private ; \002%botnick% set\002 (+/-)private ; \002(PRIVMSG) set\002 <#chan> (+/-)private"
+set black(say.en.man.479) "\[MAN\] \002%char%private add\002 <nick> <ip|mask> (add exception), \002%char%private list\002 (list exceptions), \002%char%private del\002 <nick> (del exception)"
+set black(say.en.man.480) "\[MAN\] Optional settings: \002private-reason\002 (default reason); \002private-bantime\002 (default bantime)"
+set black(say.en.man.481) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#AutoBroadcast
+
+set black(say.en.man.482) "\[MAN\] \002AutoBroadCast\002 will broadcast messages, one at a time, on all channels the eggdrop is in."
+set black(say.en.man.483) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.484) "\[MAN\] \002%char%bt\002 <ON|OFF> ; \002%botnick% bt\002 <ON|OFF> ; \002(PRIVMSG) bt\002 <#chan> <ON|OFF>"
+set black(say.en.man.485) "\[MAN\] \002%char%bt add\002 <message> ; \002%char%bt\002 list ; \002%char%bt del\002 <no. list>"
+set black(say.en.man.486) "\[MAN\] \002%char%set\002 <#chan> (+/-)silent (it will NOT broadcast in that channel)"
+set black(say.en.man.486_1) "\[MAN\] For informations about \002silent\002 please check: \002%char%man autobroadcast\002"
+
+#Language
+
+set black(say.en.man.487) "\[MAN\] \002Lang\002 allows you to select the language in which eggdrop will reply to you and also sets the default language messages used in kick/ban reasons."
+set black(say.en.man.487_1) "\[MAN\] Languages available: \002RO\002 = romanian ; \002EN\002 = english"
+set black(say.en.man.488) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.489) "\[MAN\] \002%char%set\002 \[#chan\] lang <language> ; \002%botnick% set\002 \[#chan\] lang <language> ; \002(PRIVMSG) set\002 \[#chan\] lang <language>"
+set black(say.en.man.489_1) "\[MAN\] \002%char%myset\002 lang <language> ; \002%botnick% myset\002 lang <language> ; \002(PRIVMSG) myset\002 lang <language> (default user language)"
+
+#TCL
+
+set black(say.en.man.490) "\[MAN\] \002TCL\002 supports uploading, loading and unloading Tcl scripts directly through your eggdrop (uploading is restricted to \002.tcl\002 files ONLY)."
+set black(say.en.man.491) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.492) "\[MAN\] \002%char%tcl <list>\002 (see scripts); \002%char%tcl wget\002 <link/name.tcl>; \002%char%tcl load\002 <name.tcl> (load a tcl script); \002%char%tcl unload\002 <name.tcl> (unload a tcl script); \002%char%tcl info\002 <name.tcl> (information about a tcl) "
+
+#NeXt
+
+set black(say.en.man.493) "\[MAN\] \002Next\002 allows you to assist users who need your help in an orderly fashion (used in help channels)."
+set black(say.en.man.494) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.495) "\[MAN\] \002%char%set\002 (+/-)next ; \002%botnick% set\002 (+/-)next ; \002(PRIVMSG) set\002 <#chan> (+/-)next"
+set black(say.en.man.496) "\[MAN\] \002%char%next\002 (voice next user) ; \002%char%next list\002 (shows waiting list), \002%char%helped\002 <nick>, \002%char%noidle\002 <nick>, \002%char%skip\002 <nick> (moving to the end of the list)"
+set black(say.en.man.497) "\[MAN\] Optional settings: \002next-reason\002 (default reason), \002next-bantime\002 (default bantime)"
+set black(say.en.man.498) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+
+################################################# MAN COMANDS #####################################################
+
+
+#upTime
+
+set black(say.en.man.605) "\[MAN\] \002upTime\002 allows you to find out how long the eggdrop has been started for, what time was connected to the server and also the server is connected to."
+set black(say.en.man.606) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.607) "\[MAN\] \002%char%uptime\002 ; %botnick% uptime ; \002(PRIVMSG) uptime\002"
+
+#Status
+
+set black(say.en.man.608) "\[MAN\] \002Status\002 allows you to find information about the eggdrop like channels monitored, owner, version, total users and the eggdrop owner."
+set black(say.en.man.609) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.610) "\[MAN\] \002%char%status\002 ; %botnick% status ; \002(PRIVMSG) status\002"
+
+#Set
+
+set black(say.en.man.611) "\[MAN\] \002Set\002 applies or removes eggdrop flags for the channel (certain settings that tells your eggdrop how to behave under certain conditions)."
+set black(say.en.man.612) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.613) "\[MAN\] \002%char%set\002 (+/-)flag / <flag|str|option> <description> ; \002%botnick% set\002 (+/-)flag / <flag|str|option> <description> ; \002(PRIVMSG) set\002 <#chan> (+/-)flag / <flag|str|option> <description>"
+set black(say.en.man.614) "\[MAN\] \002%char%set\002 global <flag|str|option> <description> (setting for all channels)"
+set black(say.en.man.615) "\[MAN\] Example: \002%char%set\002 chanmode +k <key> (setting key)"
+
+#Jump
+
+set black(say.en.man.620) "\[MAN\] \002Jump\002 change which server your eggdrop is connected to."
+set black(say.en.man.621) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.622) "\[MAN\] \002%char%jump\002 <irc server> ; \002%botnick% jump\002 <irc server> ; \002(PRIVMSG) jump\002 <irc server>"
+
+#msg
+
+set black(say.en.man.623) "\[MAN\] \002MSG\002 sends specified <message> to \[target\] (channel, query or chat window)."
+set black(say.en.man.624) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.625) "\[MAN\] \002%char%msg\002 \[target\] <message> ; \002%botnick% msg\002 \[target\] <message> ; \002(PRIVMSG) msg\002 \[target\] <message>"
+
+#Broadcast
+
+set black(say.en.man.626) "\[MAN\] \002Broadcast\002 allows you to send messages to all channels the eggdrop is in."
+set black(say.en.man.627) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.628) "\[MAN\] \002%char%broadcast\002 <message> ; \002%botnick% broadcast\002 <message> ; \002(PRIVMSG) broadcast\002 <message>"
+
+#Ignore
+
+set black(say.en.man.629) "\[MAN\] \002Ignore\002 allows you to add, list and remove \002ignores\002 from your eggdrop. If you do not specify a \002\[duration\]\002, the default value will be used."
+set black(say.en.man.629_1) "\[MAN\] Format duration: <X>\002m\002 = minutes, <X>\002h\002 = hours, <X>\002d\002 = days"
+set black(say.en.man.630) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.631) "\[MAN\] \002%char%ignore list\002 ; \002%char%ignore add\002 <ip|mask> \[duration\] \[reason\] ; \002%char%ignore del\002 <ip|host>"
+
+#Chat
+
+set black(say.en.man.632) "\[MAN\] \002Chat\002 allows you to connect to your eggdrop's botnet (same as \002/CTCP CHAT\002 %botnick%)."
+set black(say.en.man.633) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.634) "\[MAN\] \002%char%chat\002 ; %botnick% chat ; \002(PRIVMSG) chat\002"
+
+#Channels
+
+set black(say.en.man.638) "\[MAN\] \002Channels\002 allows you to view all channels that your eggdrop is joined to."
+set black(say.en.man.639) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.640) "\[MAN\] \002%char%channels\002 ; %botnick% channels ; \002(PRIVMSG) channels\002"
+
+#Nick
+
+set black(say.en.man.641) "\[MAN\] \002Nick\002 allows you to change your eggdrop's nickname."
+set black(say.en.man.642) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.643) "\[MAN\] \002%char%nick\002 <newnick> ; \002%botnick% nick\002 <newnick> ; \002(PRIVMSG) nick\002 <newnick>"
+set black(say.en.man.643_1) "\[MAN\] \002%char%set\002 nick <newnick> ; \002%botnick% set nick\002 <newnick> ; \002(PRIVMSG) set nick\002 <newnick> (permanent setting)"
+
+#Restart 
+
+set black(say.en.man.644) "\[MAN\] \002Restart\002 allows you to make the eggdrop restart as a background process on the shell server."
+set black(say.en.man.645) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.646) "\[MAN\] \002%char%restart\002 ; %botnick% restart ; \002(PRIVMSG) restart\002"
+set black(say.en.man.647) "\[MAN\] ** Note: This command is mainly used if the bot is abnormally lagged or malfunctioning. **"
+
+#Rehash
+
+set black(say.en.man.648) "\[MAN\] \002Rehash\002 causes the bot to reload all files whenever changes are made to a eggdrop's user or channel records."
+set black(say.en.man.649) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.650) "\[MAN\] \002%char%rehash\002 ; %botnick% rehash ; \002(PRIVMSG) rehash\002"
+
+#Die
+
+set black(say.en.man.651) "\[MAN\] \002Die\002 sends a shutdown signal to your eggdrop."
+set black(say.en.man.652) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.653) "\[MAN\] \002%char%die\002 ; %botnick% die ; \002(PRIVMSG) die\002"
+
+#Suspend
+
+set black(say.en.man.654) "\[MAN\] \002Suspend\002 suspends a channel from your eggdrop's channels database. This prevents your bot from joining the channel or acting in it."
+set black(say.en.man.655) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.656) "\[MAN\] \002%char%suspend\002 <#chan> \[reason\] ; \002%botnick% suspend\002 <#chan> \[reason\] ; \002(PRIVMSG) suspend\002 <#chan> \[reason\]"
+
+#unSuspend
+
+set black(say.en.man.657) "\[MAN\] \002unSuspend\002 cancels the suspension for a channel from your eggdrop channels database. This allows your bot to join the channel and act in it."
+set black(say.en.man.658) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.659) "\[MAN\] \002%char%unsuspend\002 <#chan> ; \002%botnick% unsuspend\002 <#chan> ; \002(PRIVMSG) unsuspend\002 <#chan>"
+
+#Save
+
+set black(say.en.man.660) "\[MAN\] \002Save\002 saves changes whenever a change is made to any of the eggdrop channels or userfiles."
+set black(say.en.man.661) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.662) "\[MAN\] \002%char%save\002 ; %botnick% save ; \002(PRIVMSG) save\002"
+
+#AddChan
+
+set black(say.en.man.663) "\[MAN\] \002AddChan\002 adds a channel to your eggdrop channels database."
+set black(say.en.man.664) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.665) "\[MAN\] \002%char%addchan\002 <#chan> \[key\] ; \002%botnick% addchan\002 <#chan> \[\key\] ; \002(PRIVMSG) addchan\002 <#chan> \[\key\]\002"
+set black(say.en.man.666) "\[MAN\] ** Note: If \002\[key\]\002 is specified eggdrop will join that \002<#chan>\002 using that key. **"
+
+#DelChan
+
+set black(say.en.man.667) "\[MAN\] \002DelChan\002 removes a channel from your eggdrop channels database."
+set black(say.en.man.668) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.669) "\[MAN\] \002%char%delchan\002 <#chan> <reason> ; \002%botnick% delchan\002 <#chan> <reason> ; \002(PRIVMSG) delchan\002 <#chan> <reason>"
+
+#Purge
+
+set black(say.en.man.670) "\[MAN\] \002Purge\002 deletes a channel from eggdrop's channel database. This can ONLY be used by a channel manager."
+set black(say.en.man.671) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.672) "\[MAN\] \002%char%purge\002 <#chan> <reason> ; \002%botnick% purge\002 <#chan> <reason> ; \002(PRIVMSG) purge\002 <#chan> <reason>"
+
+#AddInfo
+
+set black(say.en.man.676) "\[MAN\] \002AddInfo\002 add a personalized greeting message for yourself. This will be available in \002%char%info\002 command but the eggdrop will say it when you join channel."
+set black(say.en.man.677) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.678) "\[MAN\] \002%char%addinfo\002 <text|reset> ; \002%botnick% addinfo\002 <text|reset> ; \002(PRIVMSG) addinfo\002 <text|reset>"
+
+#Invite 
+
+set black(say.en.man.679) "\[MAN\] \002Invite\002 invites a user to the channel. The eggdrop must be a channel operator (@)."
+set black(say.en.man.680) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.680) "\[MAN\] \002%char%invite\002 <#chan> <nick> ; \002%botnick% invite\002 <#chan> <nick> ; \002(PRIVMSG) invite\002 <#chan> <nick>"
+
+#Say
+
+set black(say.en.man.681) "\[MAN\] \002Say\002 makes the eggdrop say a specified <message> to a channel."
+set black(say.en.man.682) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.683) "\[MAN\] %char%say\002 \[#chan\] <message> ; \002%botnick% say\002 \[#chan\] <message> ; \002(PRIVMSG) say\002 <#chan> <message>"
+
+#Refresh
+
+set black(say.en.man.684) "\[MAN\] \002Topicrefresh\002 helps maintains topic of %chan% by re-applying the topic after a set interval of time."
+set black(say.en.man.685) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.686) "\[MAN\] \002%char%set\002 (+/-)refresh | \002%botnick% set\002 (+/-)refresh ; \002(PRIVMSG) set\002 <#chan> (+/-)refresh"
+
+
+############################################## MAN NEW MODULES/COMMANDS #####################################################
+
+
+#NoLogged
+
+set black(say.en.man.687) "\[MAN\] \002NoLogged\002 is an extra option for the \002voiceme\002 module that allows the command \002/msg %botnick% voiceme <#chan>\002 to be used and by users without a CService Username."
+set black(say.en.man.688) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.689) "\[MAN\] \002%char%set\002 (+/-)nologged | \002%botnick% set\002 (+/-)nologged ; \002(PRIVMSG) set\002 <#chan> (+/-)nologged"
+
+#Colors
+
+set black(say.en.man.771) "\[MAN\] \002Colors\002 allows users to set certains personal \002colors\002 (from colors list) for the eggdrop replies."
+set black(say.en.man.772) "\[MAN\] Colors list: bold, underline, red, blue, green, yellow, orange, cyan, grey, brown, purple, pink, black"
+set black(say.en.man.773) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.774) "\[MAN\] \002%char%myset\002 colors <color1 color2 color3 color4> ; \002%botnick% myset\002 colors <color1 color2 color3 color4> ; \002(PRIVMSG) myset\002 colors <color1 color2 color3 color4>"
+
+#ReportNick
+
+set black(say.en.man.775) "\[MAN\] \002ReportNick\002 is a command that allows channel regular users to report a specific nickname for doing adverts or sending spam/lame messages (also access levels \002voice\002 and \002protect\002 can use it)."
+set black(say.en.man.776) "\[MAN\] ** Note: If you want this command to work, the eggdrop must be opped (@) on channel (uses @onotice to inform the channel operators). **"
+set black(say.en.man.777) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.778) "\[MAN\] \002%char%set\002 (+/-)reportnick ; \002%botnick% set\002 (+/-)reportnick ; \002(PRIVMSG) set\002 <#chan> (+/-)reportnick"
+set black(say.en.man.779) "\[MAN\] \002%char%report\002 <nick> <comment> ; \002%botnick% report\002 <nick> <comment> ; \002(PRIVMSG) report\002 <#chan> <nick> <comment>"
+
+#InviteBan
+
+set black(say.en.man.780) "\[MAN\] \002InviteBan\002 bans users who attempt to invite the eggdrop to unauthorized channels."
+set black(say.en.man.781) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.782) "\[MAN\] \002%char%set\002 (+/-)inviteban ; \002%botnick% set\002 (+/-)inviteban ; \002(PRIVMSG) set\002 <#chan> (+/-)inviteban"
+set black(say.en.man.783) "\[MAN\] Optional settings: \002inviteban-reason\002 (default reason); \002inviteban-bantime\002 (default bantime)"
+
+#BadHost
+
+set black(say.en.man.784) "\[MAN\] \002BadHost\002 bans users who use IPs/vhosts containing specified \"bad\" words (supports wildcards)."
+set black(say.en.man.785) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.786) "\[MAN\] \002%char%set\002 (+/-)badhost ; \002%botnick% set\002 (+/-)badhost ; \002(PRIVMSG) set\002 <#chan> (+/-)badhost"
+set black(say.en.man.787) "\[MAN\] \002%char%badhost\002 \[#chan\] add <ip|mask> ; \002%char%badhost \[#chan\] list\002 ; \002%char%badhost \[#chan\] del <no. list>\002"
+set black(say.en.man.787_1) "\[MAN\] \002%char%badhost \[#chan\] add <+word> (add exception) ; \002%char%badhost\002 \[#chan\] del <no. list> (delete a badhost from list)"
+set black(say.en.man.788) "\[MAN\] Optional settings: \002badhost-reason\002; badhost-bantime; \002badhost-bmethod\002"
+
+#NickFlood
+
+set black(say.en.man.789) "\[MAN\] \002NickFlood\002 bans users for changing their nicknames too often within a certain period of time."
+set black(say.en.man.790) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.791) "\[MAN\] \002%char%set\002 (+/-)nickflood ; \002%botnick% set\002 (+/-)nickflood ; \002(PRIVMSG) set\002 <#chan> (+/-)nickflood"
+set black(say.en.man.792) "\[MAN\] Optional settings: \002nickflood-reason\002; nickflood-bantime; \002nickflood-warn\002; nickflood-repeat; \002nickflood-banmethod\002; nickflood-banmask"
+
+#SecureMode
+
+set black(say.en.man.793) "\[MAN\] \002SecureMode\002 prevents join/part flood from botnets (users with access are ignored in this checks). This module is made specifically for Undernet."
+set black(say.en.man.794) "\[MAN\] ** Note: It only works with channel modes \002+Dm\002 and based on a system that generates a unique code for each user who joins the channel, which needs to be confirmed only once (first time join) if they wish to be allowed to join in the channel. **"
+set black(say.en.man.795) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.796) "\[MAN\] \002%char%set\002 (+/-)securemode ; \002%botnick% set\002 (+/-)securemode ; \002(PRIVMSG) set <#chan> (+/-)securemode\002"
+set black(say.en.man.797) "\[MAN\] \002%char%securemode add\002 <ip|mask> (supports wildcards) ; \002%char%securemode del\002 <no. list> ; \002%char%securemode list\002"
+
+#VoiceMe
+
+set black(say.en.man.820) "\[MAN\] \002VoiceMe\002 gives logged users with \002*X*\002, the ability to have \002voice (+v)\002 simply using command \002/msg %botnick% voiceme <#chan>\002 (see also \002%char%man onlyonmode\002 and \002%char%man nologged\002)."
+set black(say.en.man.821) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.822) "\[MAN\] \002%char%set\002 (+/-)voiceme ; \002%botnick% set\002 (+/-)voiceme ; \002(PRIVMSG) set\002 <#chan> (+/-)voiceme"
+set black(say.en.man.823) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#OnlyOnMode
+
+set black(say.en.man.824) "\[MAN\] \002OnlyOnMode\002 is an extra option for the \002voiceme\002 module that allows the command \002/msg %botnick% voiceme <#chan>\002 to be used ONLY when \002mode +m\002 is set on the channel."
+set black(say.en.man.825) "\[MAN\] ** Note: It will also send a specified message to channel so all users know that if they are registered and logged into \002*X*\002 can use the above command to receive \002voice (+v)\002 on that channel. If they don't have a \002CService Username\002 they will be told in the message where they can go to register one. **"
+set black(say.en.man.826) "\[MAN\] \002Remember\002: This extra option works ONLY with \002voiceme\002 module and on \002+m\002 (moderate) channels (see also \002%char%man voiceme\002)."
+set black(say.en.man.827) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.828) "\[MAN\] \002%char%set\002 (+/-)onlyonmode ; \002%botnick% set\002 (+/-)onlyonmode ; \002(PRIVMSG) set\002 <#chan> (+/-)onlyonmode"
+
+#BanStats
+
+set black(say.en.man.834) "\[MAN\] \002BanStats\002 allows the eggdrop to keep statistics of each kick and ban given on a specified channel."
+set black(say.en.man.835) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.836) "\[MAN\] \002%char%set\002 (+/-)banstats ; \002%botnick% set\002 (+/-)banstats ; \002(PRIVMSG) set\002 <#chan> (+/-)banstats"
+set black(say.en.man.837) "\[MAN\] \002%char%banstats\002 <total|reset> ; \002%botnick% banstats\002 <total|reset> ; \002(PRIVMSG) banstats\002 <#chan> <total|reset>\002"
+
+#GuestNick
+
+set black(say.en.man.838) "\[MAN\] \002GuestNick\002 sends a predefined message to all users who join a channel and whose nick contains \"words\" defined in the eggdrop's database."
+set black(say.en.man.839) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.840) "\[MAN\] \002%char%guestnick\002 <ON|OFF> ; \002%botnick% guestnick\002 <ON|OFF> ; \002(PRIVMSG) guestnick\002 <#chan> <ON|OFF>"
+set black(say.en.man.841) "\[MAN\] Optional settings: \002%char%set guestnick-msgmethod\002 <method> ( CHAN | NOTICE | PRIVMSG ) ; \002%char%set guestnick-message\002 <text>"
+
+#CP
+
+set black(say.en.man.842) "\[MAN\] \002cp\002 allows you to copy a channel settings to another channel, including the userlist, banlist and badchans."
+set black(say.en.man.843) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.844) "\[MAN\] %char%cp\002 <option> <#chan1> <#chan2> ; \002%botnick% cp\002 <option> <#chan1> <#chan2> ; \002(PRIVMSG) cp\002 <option> <#chan1> <#chan2>"
+set black(say.en.man.845) "\[MAN\] As \002<options>\002 you have: \002<userlist>\002 (copy channel userlist); \002<banlist>\002 (copy channel banlist); \002<settings>\002 (copy channel settings); \002<badchans>\002 (copy badchans list)"
+
+#VoiceOnMsg 
+
+set black(say.en.man.846) "\[MAN\] \002VoiceOnMsg\002 voices users who have said a certain number of lines on a channel (active chatters). Also, users with access are excluded."
+set black(say.en.man.847) "\[MAN\] ** Note: It also devoices users who have been idling for more than a certain amount of time on the channel (inactive chatters). **"
+set black(say.en.man.848) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.849) "\[MAN\] \002%char%set\002 (+/-)voiceonmsg ; \002%botnick% set\002 (+/-)voiceonsmg ; \002(PRIVMSG) set <#chan> (+/-)voiceonsmg"
+set black(say.en.man.850) "\[MAN\] Optional settings: \002%char%set voiceonmsg-linenum\002 <no. lines> (default no. lines) ; \002%char%set voiceonmsg-idletime\002 <duration> (default idle time)"
+
+#Troll
+
+set black(say.en.man.851) "\[MAN\] \002Troll\002 bans a user with a default \002TROLL\002 reason (see also \002%char%man showtroll\002)."
+set black(say.en.man.852) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.853) "\[MAN\] \002%char%troll\002 <nick> ; \002%botnick% troll\002 <nick> ; \002(PRIVMSG) troll\002 <#chan> <nick>"
+set black(say.en.man.854) "\[MAN\] Optional settings: \002%char%set\002 troll-reason <text>; \002(PRIVMSG) set\002 <#chan> troll-reason <text> (default reason)"
+
+#vr
+
+set black(say.en.man.856) "\[MAN\] \002vr\002 bans a user with a default \002VIRUS/TROJAN\002 reason."
+set black(say.en.man.857) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.858) "\[MAN\] \002%char%vr\002 <nick|mask> ; \002%botnick% vr\002 <nick|mask> ; \002(PRIVMSG) vr\002 <#chan> <nick|mask>"
+set black(say.en.man.859) "\[MAN\] Optional settings: \002vr-reason\002 (default reason); \002vr-banmask\002 (default banmask); \002vr-bantime\002 (default bantime)"
+set black(say.en.man.860) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#XOnly
+
+set black(say.en.man.861) "\[MAN\] \002XOnly\002 allows a complete channel administration via Undernet's official bot \002*X*\002."
+set black(say.en.man.862) "\[MAN\] The eggdrop will perform all BlackToolS commands through \002X\002 even if is not an operator (@)."
+set black(say.en.man.863) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.864) "\[MAN\] \002%char%set\002 (+/-)xonly ; \002%botnick% set\002 (+/-)xonly ; \002(PRIVMSG) set\002 <#chan> (+/-)xonly"
+set black(say.en.man.865) "\[MAN\] Optional settings: \002xbantime\002 (default X bantime); \002xbanlevel\002 (default X ban level access)"
+
+#AutoTopic
+
+set black(say.en.man.866) "\[MAN\] \002AutoTopic\002 makes your eggdrop to reset the topic to the channel TOPIC and URL every time was changed by someone."
+set black(say.en.man.867) "\[MAN\] ** Note: If the channel is idle, the topic will not be reset during that time (idle = no users joining). **"
+set black(say.en.man.868) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.869) "\[MAN\] \002%char%set\002 (+/-)autotopic ; \002%botnick% set\002 (+/-)autotopic ; \002(PRIVMSG) autotopic\002 <#chan> (+/-)autotopic"
+set black(say.en.man.870) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#MySet
+
+set black(say.en.man.871) "\[MAN\] \002MySet\002 is a command through which every user with access can set his own settings/infos."
+set black(say.en.man.872) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.873) "\[MAN\] \002%char%myset\002 <option> \[description\] <show|reset> ; \002(PRIVMSG) myset\002 <option> \[description\] <show|reset>"
+set black(say.en.man.874) "\[MAN\] As \002<option>\002 you have:"
+set black(say.en.man.875) "\[MAN\] \002lang\002 <language> ; \002output\002 <method> ; \002mychar\002 <trigger> ; \002colors\002 <colors> ; \002noteexpire\002 <period> ; \002autoinvite\002 <ON|OFF>"
+set black(say.en.man.877) "\[MAN\] \002auto\002 (+/-)v/o (AUTOMODE OP/VOICE) ; \002greet\002 <message> ; \002mychan\002 <#chan>"
+set black(say.en.man.878) "\[MAN\] \002auto\002 (+/-)v/o \[-global\] (AUTOMODE OP/VOICE) ; \002addhost/delhost\002 <host> ; \002handle\002 <new handle> ; \002greet\002 <message> ; \002mychan\002 <#chan> ; \002notes\002 <ON|OFF>"
+
+#ho
+
+set black(say.en.man.882) "\[MAN\] \002ho\002 gives/removes halfop \002(+h %)\002 to/from specified users."
+set black(say.en.man.882_1) "\[MAN\] ** Note: If no nick is specified, and you are not halfoped on the channel, it will halfop you (rarely used). **"
+set black(say.en.man.883) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.884) "\[MAN\] \002%char%ho\002 <nick1> <nick2> .. ; \002%botnick% ho\002 <nick1> <nick2> .. ; \002(PRIVMSG) ho\002 <#chan> <nick1> <nick2> .."
+set black(say.en.man.884_1) "\[MAN\] \002%char%ho +\002 (performs a mass halfop) ; \002%char%ho -\002 (performs a mass halfdeop)"
+
+#r
+
+set black(say.en.man.885) "\[MAN\] \002r\002 manually makes the eggdrop refresh/reload the channel topic (if there is a topic)."
+set black(say.en.man.886) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.887) "\[MAN\] \002%char%r\002 \[#chan\] ; \002%botnick% r\002 \[#chan\] ; \002(PRIVMSG) r\002 <#chan>"
+
+#SeenLastMsg
+
+set black(say.en.man.888) "\[MAN\] \002SeenLastMsg\002 is a seen extra info who shows the specified nick what their last message was to that channel."
+set black(say.en.man.889) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.890) "\[MAN\] \002%char%set\002 (+/-)seenlastmsg ; \002%botnick% set\002 (+/-)seenlastmsg ; \002(PRIVMSG) set\002 <#chan> (+/-)seenlastmsg"
+set black(say.en.man.891) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Quote
+
+set black(say.en.man.892) "\[MAN\] \002Quote\002 is a quotes system with public commands for adding, removing and displaying quotes (includes also a search function)."
+set black(say.en.man.893) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.894) "\[MAN\] \002%char%set\002 (+/-)quote ; \002%botnick% set\002 (+/-)quote ; \002(PRIVMSG) set\002 <#chan> (+/-)quote"
+set black(say.en.man.895) "\[MAN\] \002%char%q\002 \[#chan\] <text> (add quote) ; \002%char%q\002 \[#chan\] <word> (search) ; \002%char%q\002 \[#chan\] <list> ; \002%char%q\002 \[#chan\] del <no. quote>"
+set black(say.en.man.896) "\[MAN\] ** Note: To add more than 1 sentence use \002%char%q add \[#chan\] <text1>~<text2>\002.. and eggdrop will show the quotes as 2 different senteces. **"
+
+#QuoteOfDay
+
+set black(say.en.man.897) "\[MAN\] \002QuoteOfDay\002 displays stored quotes randomly at a specified interval of time."
+set black(say.en.man.898) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.899) "\[MAN\] \002%char%set\002 (+/-)quoteofday ; \002%botnick% set\002 (+/-)quoteofday ; \002(PRIVMSG) set\002 <#chan> (+/-)quoteofday"
+set black(say.en.man.900) "\[MAN\] Optional settings: \002%char%set\002 quoteofday-showtime <period> ; \002(PRIVMSG) set\002 <#chan> quoteofday-showtime <period> (<X>\002h\002 = hours ; <X>\002m\002 = minutes)"
+
+#Note
+
+set black(say.en.man.901) "\[MAN\] \002Note\002 allows to store personal notes or sends a note <message> to <handle>."
+set black(say.en.man.902) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.903) "\[MAN\] \002%char%set\002 (+/-)note ; \002%botnick% set\002 (+/-)note ; \002(PRIVMSG) set\002 <#chan> (+/-)note"
+set black(say.en.man.904) "\[MAN\] \002%char%note\002 send <handle> <message> ; \002%char%note\002 <read|list|inbox> ; \002%char%note\002 del <no. note|all>"
+set black(say.en.man.905) "\[MAN\] ** Note: To add more than 1 sentence use \002%char%note send <user> <message1>~<message2>..\002 and eggdrop will show the notes as 2 different senteces. **"
+
+#bMethod
+
+set black(say.en.man.906) "\[MAN\] \002bMethod\002 (BanMethod) sets the way in which eggdrop will punish users (warn/kick/ban). This means, first time Warn, then Kick and then Ban (if offense is repeated)."
+set black(say.en.man.907) "\[MAN\] Available banmethods:"
+set black(say.en.man.908) "\[MAN\] \002#1\002 warn ; \002#2\002 kick ; \002#3\002 ban ; \002#4\002 warn -> kick ; \002#5\002 warn -> kick -> ban ; \002#6\002 kick -> ban ; \002#7\002 warn -> ban"
+set black(say.en.man.909) "\[MAN\] USAGE SYNTAX: \002%char%set\002 <setting> <no. method> ; \002%botnick% set\002 <setting> <no. method> ; \002(PRIVMSG) set\002 <#chan> <setting> <no. method>"
+set black(say.en.man.910) "\[MAN\] \002BanMethod\002 (bMethod) sets the way in which eggdrop will punish users (warn/kick/ban). This means, first time Warn, then Kick and then Ban (if offense is repeated)."
+
+#BanMask
+
+set black(say.en.man.911) "\[MAN\] \002BanMask\002 sets the way in which eggdrop will handle banmasks bans."
+set black(say.en.man.912) "\[MAN\] Available banmasks:"
+set black(say.en.man.913) "\[MAN\] \002#1\002 *!*@host ; \002#2\002 *!user@host ; \002#3\002 nick!user@host ; \002#4\002 nick!*@* ; \002#5\002 *!user@*"
+set black(say.en.man.914) "\[MAN\] USAGE SYNTAX: \002%char%set\002 <setting> <no. method> ; \002%botnick% set\002 <setting> <no. method> ; \002(PRIVMSG) set\002 <#chan> <setting> <no. method>"
+
+#Url
+
+set black(say.en.man.916) "\[MAN\] \002Url\002 indicates the URL of the channel website (up to 50 characters). The URL can be viewed at \002%char%info <#chan>\002. If no URL is specified, the current URL setting will be empty."
+set black(say.en.man.917) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.918) "\[MAN\] \002%char%set\002 url \[url(s)\] ; \002%botnick% set\002 url \[url(s)\] ; \002(PRIVMSG) set\002 <#chan> url \[url(s)\]"
+set black(say.en.man.919) "\[MAN\] To show the URL next to the ban reasons, use: \002%char%set\002 +showurl ; \002%botnick% set\002 +showurl ; \002(PRIVMSG) set\002 <#chan> +showurl"
+set black(say.en.man.920) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Timer
+
+set black(say.en.man.921) "\[MAN\] \002Timer\002 is a \002PRO\002 module that allows you to start/stop processes timers or see the list of active ones."
+set black(say.en.man.921_1) "\[MAN\] \002ATTENTION!\002 Do NOT touch this system module, unless you know very well what you are doing!"
+set black(say.en.man.922) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.923) "\[MAN\] \002%char%timer\002 start \[#chan\] <timer:setting> ; \002%char%timer\002 kill \[#chan\] <pid timer> (from list) ; \002%char%timer\002 list"
+
+#Enable
+
+set black(say.en.man.924) "\[MAN\] \002Enable\002 allows to enable a disabled command. If \002global\002 option used, the command will be enabled on all eggdrop's channels."
+set black(say.en.man.924_1) "\[MAN\] \002ATTENTION\002: The global activation option is available only for commands, not for users."
+set black(say.en.man.925) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.926) "\[MAN\] \002%char%enable\002 \[#chan\] <command|all> \[user\] \[global\] ; \002(PRIVMSG) enable\002 <#chan> <command|all> \[user\] \[global\]"
+
+#Disable
+
+set black(say.en.man.927) "\[MAN\] \002Disable\002 allows to disable a given command. If \002global\002 option used, the command will be disabled on all eggdrop's channels."
+set black(say.en.man.927_1) "\[MAN\] \002ATTENTION\002: The global deactivation option is available only for commands, not for users."
+set black(say.en.man.928) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.929) "\[MAN\] \002%char%disable\002 \[#chan\] <command|all> \[user\] \[global\] ; \002(PRIVMSG) disable\002 <#chan> <command|all> \[user\] \[global\]"
+
+#Stats
+
+set black(say.en.man.930) "\[MAN\] \002Stats\002 displays statistic informations about a specified user's bans and used commands."
+set black(say.en.man.930_1) "\[MAN\] For informations about \002any user activity\002 please check: \002%char%man stats\002"
+set black(say.en.man.931) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.932) "\[MAN\] \002%char%stats\002 \[#chan>\] <handle> \[total\] ; \002%botnick% stats\002 \[#chan>\] <handle> \[total\] ; \002(PRIVMSG) stats\002 \[#chan>\] <handle> \[total\]"
+set black(say.en.man.932_1) "\[MAN\] \002%char%stats\002 \[#chan>\] <handle> \[total|reset\] ; \002(PRIVMSG) stats\002 \[#chan>\] <handle> \[total|reset\]"
+
+#Output
+
+set black(say.en.man.933) "\[MAN\] \002Output\002 specifies how the eggdrop will reply to your message or channel commands (methods: CHAN|NOTICE)."
+set black(say.en.man.934) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.935) "\[MAN\] \002%char%myset output\002 <method> ; \002(PRIVMSG) myset output\002 <method>"
+
+#GreetLine
+
+set black(say.en.man.936) "\[MAN\] \002GreetLine\002 sets you a join greet (info) line. This is shown via \002%char%info\002 and/or whenever you join a channel (the second one only works if \002+greet\002 enabled)."
+set black(say.en.man.937) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.938) "\[MAN\] \002%char%myset greet\002 <text|reset> ; \002%botnick% myset\002 greet <text|reset> ; \002(PRIVMSG) myset greet\002 <text|reset> (\002reset\002 removes your greet (info) line)."
+
+#UnSet
+
+set black(say.en.man.939) "\[MAN\] \002UnSet\002 unset/reset specified settings/options (flags)."
+set black(say.en.man.940) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.941) "\[MAN\] %char%unset\002 <flag|str|option> ; \002%botnick% unset\002 <flag|str|option> ; \002(PRIVMSG) unset\002 <#chan> <flag|str|option>"
+set black(say.en.man.942) "\[MAN\] \002%char%unset\002 global <flag|str|option> (unset on all channels)"
+set black(say.en.man.943) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#NextShortCmd
+
+set black(say.en.man.944) "\[MAN\] \002NextShortCmd\002 the short version of the \002next module\002 used on help channels that allows you to assist users who need help."
+set black(say.en.man.945) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.946) "\[MAN\] \002%char%set\002 (+/-)nextshortcmd ; \002%botnick% set\002 (+/-)next nextshortcmd ; \002(PRIVMSG) set\002 (+/-)next nextshortcmd"
+set black(say.en.man.947) "\[MAN\] Commands: \002%char%n\002 (voice next user) ; \002%char%n\002 list (show waiting list) ; \002%char%h\002 <nick> (helped); \002%char%b\002 <nick> (noidle ban); \002%char%skip\002 <nick> (moving to the end of the list)"
+
+#AutoInvite
+
+set black(say.en.man.948) "\[MAN\] \002AutoInvite\002 when banned, the eggdrop will invite you to that channel, saving you the trouble of using \002/msg X invite #chan\002 either yourself."
+set black(say.en.man.949) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.950) "\[MAN\] \002%char%myset autoinvite\002 <#chan> <ON|OFF> ; \002%botnick% autoinvite\002 <#chan> <ON|OFF> ; \002(PRIVMSG) <#chan> autoinvite\002 <#chan> <ON|OFF>"
+
+#Show
+
+set black(say.en.man.952) "\[MAN\] \002Show\002 allows you to see the values of each setting."
+set black(say.en.man.953) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.954) "\[MAN\] \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Link
+
+set black(say.en.man.955) "\[MAN\] \002ChanLink\002 allows synchronization of all protections modules on 2 or more channels at the same time."
+set black(say.en.man.956) "\[MAN\] ** Note: Once enabled, the eggdrop will add the same ban from a given channel simultaneously to all other channels and vice versa (works only between linked channels, not the others). **"
+set black(say.en.man.957) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.958) "\[MAN\] \002%char%link\002 <#chan1> <#chan2> / <all> ; \002%char%link del\002 <#chan> ; \002%char%link <list|reset>\002"
+set black(say.en.man.958_1) "\[MAN\] Also works like this: \002%char%b\002 <nick|mask> \[duration\] link \[reason\] ; \002%char%ub\002 <nick|mask> link"
+
+#AccessOnly
+
+set black(say.en.man.959) "\[MAN\] \002AccessOnly\002 is an extra option for the \002topwords\002 module that restricts its operation only to users who owns access to eggdrop."
+set black(say.en.man.960) "\[MAN\] ** Note: If this extra option is not enabled, the module \002topwords\002 will work for all channel users (both for those with access and for others). **"
+set black(say.en.man.961) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.962) "\[MAN\] \002%char%set\002 (+/-)accessonly ; \002%botnick% set\002 (+/-)accessonly ; \002(PRIVMSG) set\002 <#chan> (+/-)accessonly"
+set black(say.en.man.963) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#SeenReply
+
+set black(say.en.man.964) "\[MAN\] \002SeenReply\002 is an extra option for the \002seen\002 module that will make the eggdrop send an info message to the user who has just been searched with \002%char%seen\002 command."
+set black(say.en.man.965) "\[MAN\] ** Note: This info message includes information about the person who searched for him/her, as well as the date, time or channel where the \002%char%seen\002 command was used. **"
+set black(say.en.man.966) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.967) "\[MAN\] \002%char%set\002 (+/-)seenreply ; \002%botnick% set\002 (+/-)seenreply ; \002(PRIVMSG) set\002 <#chan> (+/-)seenreply"
+
+#SpamJoinMessage
+
+set black(say.en.man.968) "\[MAN\] \002SpamJoinMessage\002 is an extra option for the \002antispam\002 protection module that makes the eggdrop to send a private verification message, containing a predefined text, to every user who joins the channel."
+set black(say.en.man.969) "\[MAN\] USAGE SYNTAXES:"
+set black(say.en.man.970) "\[MAN\] \002%char%set\002 (+/-)spamjoinmessage ; \002%botnick% set\002 (+/-)spamjoinmessage ; \002(PRIVMSG) set\002 <#chan> (+/-)spamjoinmessage"
+set black(say.en.man.971) "\[MAN\] \002%char%set\002 antispam-message <message> ; \002%botnick% set\002 antispam-message <message> ; \002(PRIVMSG) set\002 <#chan> <message> (default join message)"
+set black(say.en.man.972) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#StrictSecured
+
+set black(say.en.man.973) "\[MAN\] \002StricSecured\002 is an extra option for the \002securemode\002 protection module made to prevent join/part flood from botnets."
+set black(say.en.man.974) "\[MAN\] ** Note: Once enabled, this extra option will generate a unique code for each user who joins the channel and every time they re-join, which needs to be confirmed, every time, if they wish to be allowed to join the channel. **"
+set black(say.en.man.975) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.976) "\[MAN\] \002%char%set\002 (+/-)strictsecured ; \002%botnick% set\002 (+/-)strictsecured ; \002(PRIVMSG) set\002 <#chan> (+/-)strictsecured"
+
+#NoteExpire
+
+set black(say.en.man.977) "\[MAN\] \002NoteExpire\002 is an extra option for the \002note\002 module whereby each user can set a default time period for notes expiration (automatic deletion from database)."
+set black(say.en.man.977_1) "\[MAN\] Format period: <X>\002d\002 = days ; <X>\002h\002 = hours"
+set black(say.en.man.978) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.979) "\[MAN\] \002%char%myset\002 noteexpire <period> ; \002%botnick% myset\002 noteexpire <period> ; \002(PRIVMSG) myset\002 noteexpire <period>"
+
+#MyChan
+
+set black(say.en.man.980) "\[MAN\] \002MyChan\002 allows each user to set a \002base channel\002 (mychan) for which, when sends commands to eggdrop via PRIVMSG, it is no longer necessary to specify a <#channel>, eggdrop automatically applying commands directly to \002mychan\002."
+set black(say.en.man.981) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.982) "\[MAN\] \002%char%myset\002 mychan <#chan> ; \002%botnick% myset\002 mychan <#chan> ; \002(PRIVMSG) myset\002 mychan <#chan>"
+
+#Invisible
+
+set black(say.en.man.983) "\[MAN\] \002Invisible\002 toggles the invisibility setting for a channel, this means that channel will no longer appear in the eggdrop channels list."
+set black(say.en.man.984) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.985) "\[MAN\] \002%char%set\002 (+/-)invisible ; \002%botnick% set\002 (+/-)invisible ; \002(PRIVMSG) set\002 <#chan> (+/-)invisible"
+set black(say.en.man.986) "\[MAN\] View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#MyChar
+
+set black(say.en.man.987) "\[MAN\] \002MyChar\002 allows each user to choose and set a default \002trigger\002 to which they want the eggdrop to react to."
+set black(say.en.man.988) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.989) "\[MAN\] \002%char%myset\002 mychar <trigger> ; \002%botnick% myset\002 mychar <trigger> ; \002(PRIVMSG) myset\002 mychar <trigger>"
+
+#Omsg
+
+set black(say.en.man.1207) "\[MAN\] \002Omsg\002 sends a specified message to all users with \002OP (@/&)\002 on a channel."
+set black(say.en.man.1208) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1209) "\[MAN\] %char%omsg\002 <#chan|all> <text> ; \002%botnick% omsg\002 <#chan|all> <text> ; \002(PRIVMSG) omsg\002 <#chan|all> <text>"
+
+#ShowBadChan
+
+set black(say.en.man.1210) "\[MAN\] \002ShowBadChan\002 is an extra option for the \002BadChan\002 module who sends a message to all users with \002OP (@/&)\002 about the banned user and the forbidden channels on which that was found."
+set black(say.en.man.1211) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1212) "\[MAN\] \002%char%set\002 (+/-)showbadchan ; \002%botnick% set\002 (+/-)showbadchan ; \002(PRIVMSG) set\002 <#chan> (+/-)showbadchan"
+set black(say.en.man.1213) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#ShowTroll
+
+set black(say.en.man.1214) "\[MAN\] \002ShowTroll\002 is an extra option for the \002Troll\002 command that, once activated, makes the eggdrop to display a notice message list of current trolls of the day, when users with access joins the channel (the list is reset everyday at midnight)."
+set black(say.en.man.1215) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1216) "\[MAN\] \002%char%set\002 (+/-)showtroll ; \002%botnick% set\002 (+/-)showtroll ; \002(PRIVMSG) set\002 <#chan> (+/-)showtroll"
+set black(say.en.man.1217) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Forward
+
+set black(say.en.man.1218) "\[MAN\] \002Forward\002's private messages received by the eggdrop to a specified channel (except private messages from users with access)."
+set black(say.en.man.1219) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1220) "\[MAN\] \002%char%set\002 (+/-)forward ; \002%botnick% set\002 (+/-)forward ; \002(PRIVMSG) set\002 <#chan> (+/-)forward"
+
+#ExpireBans
+
+set black(say.en.man.1221) "\[MAN\] \002ExpireBans\002 sets the default period of time after which all bans from a channel will be removed. If this setting is set to \0020\002, the eggdrop will never remove bans."
+set black(say.en.man.1222) "\[MAN\] Format period: <X>\002h\002 = hours ; <X>\002m\002 = minutes"
+set black(say.en.man.1223) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1224) "\[MAN\] \002%char%set\002 expirebans <period> ; \002%botnick% set\002 expirebans <period> ; \002(PRIVMSG) set\002 <#chan> expirebans <period>"
+set black(say.en.man.1225) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#mb
+
+set black(say.en.man.1226) "\[MAN\] \002mb\002 bans a given nickname automatically on \001IDENT\001 with a given reason."
+set black(say.en.man.1227) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1228) "\[MAN\] \002%char%mb\002 <nick> \[reason\] ; \002%botnick% mb\002 <nick> \[reason\] ; \002(PRIVMSG) mb\002 <#chan> <nick> \[reason\]"
+set black(say.en.man.1229) "\[MAN\] Optional settings: \002mb-reason\002 (default reason); \002mb-bantime\002 (default ban time)"
+
+
+################################################# MAN EGG #####################################################
+
+
+#Egg
+
+set black(say.en.man.990) "\[MAN\] \002Egg\002 allows you to configure some options from the eggdrop's \002.conf\002 file structure."
+set black(say.en.man.991) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.992) "\[MAN\] \002%char%set\002 <option> <setting> ; \002%botnick% set\002 <option> <setting> ; \002(PRIVMSG) set\002 <option> <setting>"
+
+#Egg CmdChar
+
+set black(say.en.man.994) "\[MAN\] \002CmdChar\002 sets the default \002trigger\002 you want the eggdrop to react to (you can add more than one cmdchar)."
+set black(say.en.man.995) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.996) "\[MAN\] \002%char%set cmdchar\002 <trigger1 trigger2 ..> ; \002%botnick% set cmdchar\002 <trigger1 trigger2 ..> ; \002(PRIVMSG) set cmdchar\002 <trigger1 trigger2 ..>"
+
+#Egg DefaultLang
+
+set black(say.en.man.998) "\[MAN\] \002DefaultLang\002 sets the default language of the BlackToolS script."
+set black(say.en.man.998_1) "\[MAN\] Available languages: \002RO\002 = ROMANIAN ; \002EN\002 = ENGLISH"
+set black(say.en.man.999) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1100) "\[MAN\] \002%char%set defaultlang\002 <language> ; \002%botnick% set defaultlang\002 <language> ; \002(PRIVMSG) set defaultlang\002 <language>"
+
+#Egg HomeChan
+
+set black(say.en.man.1102) "\[MAN\] \002HomeChan\002 set the eggdrop's homechan. The eggdrop will enter this channel first. This channel will also be used to display all reported bans, kicks & any type of abuse."
+set black(say.en.man.1103) "\[MAN\] ** Note: this is a \002static\002 channel (the eggdrop will NOT purge/cycle this chan) and usually it's a private/secret channel. (supports ONLY one \002homechan\002 channel). **"
+set black(say.en.man.1104) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1105) "\[MAN\] \002%char%set homechan\002 <#chan> ; \002%botnick% set homechan\002 <#chan> ; \002(PRIVMSG) set homechan\002 <#chan>"
+
+#Egg RealName
+
+set black(say.en.man.1107) "\[MAN\] \002RealName\002 set what should be displayed in the \002real-name\002 field for the eggdrop on IRC (requires restart)."
+set black(say.en.man.1108) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1109) "\[MAN\] \002%char%set realname\002 <text> ; \002%botnick% set realname\002 <text> ; \002(PRIVMSG) set realname\002 <text>"
+
+#Egg Away
+
+set black(say.en.man.1111) "\[MAN\] \002Away\002 sets away mode to your eggdrop with <text> as away message when it connects to IRC."
+set black(say.en.man.1112) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1113) "\[MAN\] \002%char%set away\002 <message> ; \002%botnick% set away\002 <message> ; \002(PRIVMSG) set away\002 <message>"
+set black(say.en.man.1113_1) "\[MAN\] \002%char%set away\002; \002%botnick% set away\002; \002(PRIVMSG) set away\002 (disable away)"
+
+#Egg DefaultOutput
+
+set black(say.en.man.1115) "\[MAN\] \002DefaultOutput\002 sets the default method for receiving eggdrop's messages (default method is set via \002CHAN\002)."
+set black(say.en.man.1115_1) "\[MAN\] Available methods: \0020\002 = NOTICE ; \002 1\002 = CHAN ; \002 2\002 = PRIVMSG"
+set black(say.en.man.1116) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1117) "\[MAN\] \002%char%set defaultoutput\002 <method> ; \002%botnick% set defaultoutput\002 <method> ; \002(PRIVMSG) set defaultoutput\002 <method>"
+
+#Egg FloodMenuProt
+
+set black(say.en.man.1119) "\[MAN\] \002FloodMenuProt\002 protects the eggdrop from \002flood\002. Determines how many commands/seconds a user can send the eggdrop before it is considered a flood and ignores all commands from that user for a short period of time."
+set black(say.en.man.1120) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1121) "\[MAN\] \002%char%set floodmenuprot\002 <no. commands:seconds> ; \002%botnick% set floodmenuprot\002 <no. commands:seconds> ; \002(PRIVMSG) set floodmenuprot\002 <no. commands:seconds>"
+
+#Egg UserFloodMsgProt
+
+set black(say.en.man.1123) "\[MAN\] \002UserFloodMsgProt\002 protects the eggdrop from \002PRIVMSG flood\002. Determines how many PRIVMSG messages/seconds the eggdrop will accept before it is considered a flood and ignores all messages from that user for a short period of time."
+set black(say.en.man.1124) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1125) "\[MAN\] \002%char%set floodmsgprot\002 <no. messages:seconds> ; \002%botnick% set floodmsgprot\002 <no. messages:seconds> ; \002(PRIVMSG) set floodmsgprot\002 <no. messages:seconds>"
+
+#Egg FloodNotcProt
+
+set black(say.en.man.1127) "\[MAN\] \002FloodNotcProt\002 protects the eggdrop from \002NOTICE flood\002. Determines how many NOTICE messages/seconds the eggdrop will accept before it is considered a flood and ignores all notices from that user for a short period of time."
+set black(say.en.man.1128) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1129) "\[MAN\] \002%char%set floodnotcprot\002 <no. notices:seconds> ; \002%botnick% set floodnotcprot\002 <no. notices:seconds> ; \002(PRIVMSG) set floodnotcprot\002 <no. notices:seconds>"
+
+#Egg ChanRemove-Setting
+
+set black(say.en.man.1131) "\[MAN\] \002ChanRemove-Setting\002 once activated deletes all settings related to a channel, when that channel is deleted from the bot's channels list. This includes data such as the access userlist, the banlist, the seen database, etc."
+set black(say.en.man.1131_1) "\[MAN\] \0021\002 = yes ; \0020\002 = no"
+set black(say.en.man.1132) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1133) "\[MAN\] \002%char%set chanremove-setting\002 <1|0> ; \002%botnick% set chanremove-setting\002 <1|0> ; \002(PRIVMSG) set chanremove-setting\002 <1|0>"
+
+#Egg User-Expire
+
+set black(say.en.man.1135) "\[MAN\] \002User-Expire\002 allows you to define the time period after the eggdrop will remove users from the seen database that are older than a specified time period."
+set black(say.en.man.1135_1) "\[MAN\] Format period: <X>\002d\002 = days"
+set black(say.en.man.1136) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1137) "\[MAN\] \002%char%set user-expire\002 <period> ; \002%botnick% set user-expire\002 <period> ; \002(PRIVMSG) set user-expire\002 <period>"
+
+#Egg PageLimit
+
+set black(say.en.man.1139) "\[MAN\] \002PageLimit\002 sets the default \002number of entries per page\002 for all the modules that use the \002- list -\002 function."
+set black(say.en.man.1140) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1141) "\[MAN\] \002%char%set pagelimit\002 <no. entries> ; \002%botnick% set pagelimit\002 <no. entries> ; \002(PRIVMSG) set pagelimit\002 <no. entries>"
+
+#Egg Login
+
+set black(say.en.man.1143) "\[MAN\] \002Login\002 allows you to manually login your eggdrop to ChanServ (X, Q, etc.)."
+set black(say.en.man.1144) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1145) "\[MAN\] \002%char%login\002 ; %botnick% login ; \002(PRIVMSG) login\002"
+
+#Egg Chanserv
+
+set black(say.en.man.1147) "\[MAN\] \002Chanserv\002 sets the \002default nickname\002 that ChanServ (X, Q, etc.) uses, depending on the IRC network that the eggdrop will connect to."
+set black(say.en.man.1148) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1149) "\[MAN\] \002%char%set chanserv\002 <chanservnickname> ; \002%botnick% set chanserv\002 <chanservnickname> ; \002(PRIVMSG) set chanserv\002 <chanservnickname>"
+
+#Egg HostChanserv
+
+set black(say.en.man.1151) "\[MAN\] \002HostChanserv\002 sets the \002default hostmask\002 that ChanServ (X, Q, etc.) uses depending on the IRC network to which the eggdrop will connect to."
+set black(say.en.man.1152) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1153) "\[MAN\] \002%char%set hostchanserv\002 <chanservhostmask> ; \002%botnick% set hostchanserv\002 <chanservhostmask> ; \002(PRIVMSG) set hostchanserv\002 <chanserhostmask>"
+
+#Egg UserLogin
+
+set black(say.en.man.1155) "\[MAN\] \002UserLogin\002 sets the \002username\002 that eggdrop will use to login to ChanServ (X, Q, etc.)."
+set black(say.en.man.1156) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1157) "\[MAN\] \002%char%set userlogin\002 <chanservusername> ; \002%botnick% set userlogin\002 <chanservusername> ; \002(PRIVMSG) set userlogin\002 <chanservusername>"
+
+#Egg UserPass
+
+set black(say.en.man.1159) "\[MAN\] \002UserPass\002 sets the \002password\002 that eggdrop will use to login to ChanServ (X, Q, etc.)."
+set black(say.en.man.1160) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1161) "\[MAN\] \002%char%set userpass\002 <chanservpassword> ; \002%botnick% set userpass\002 <chanservpassword> ; \002(PRIVMSG) set userpass\002 <chanservpassword>"
+
+#Egg Add-Mask
+
+set black(say.en.man.1163) "\[MAN\] \002Add-Mask\002 sets the default hostmask that eggdrop will use when a new user is added with access."
+set black(say.en.man.1163_1) "\[MAN\] Available hostmasks:"
+set black(say.en.man.1163_2) "\[MAN\] \002#1\002 *!*@host ; \002#2\002 *!user@host ; \002#3\002 nick!user@host ; \002#4\002 nick!*@* ; \002#5\002 *!user@*"
+set black(say.en.man.1164) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1165) "\[MAN\] \002%char%set add-mask\002 <no. hostmask> ; \002%botnick% set add-mask\002 <no. hostmask> ; \002(PRIVMSG) set add-mask\002 <no. hostmask>"
+
+#Egg Add-DefaultMask
+
+set black(say.en.man.1167) "\[MAN\] \002Add-DefaultMask\002 sets the default hostmask, as\001 *!*@%user%.users.undernet.org\001, that eggdrop will use when a new user is added with access."
+set black(say.en.man.1168) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1169) "\[MAN\] \002%char%set add-defaultmask\002 <hostmask> ; \002%botnick% set add-defaultmask\002 <hostmask> ; \002(PRIVMSG) set add-defaultmask\002 <hostmask>"
+
+#AntiSpam-ScanTime
+
+set black(say.en.man.1175) "\[MAN\] \002AntiSpam-ScanTime\002 is an extra option for the \002antispam\002 module that allows you to define the maximum time interval between every\002 /cycle\002 that eggdrop executes to detect spammers."
+set black(say.en.man.1175_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1176) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1177) "\[MAN\] \002%char%set\002 antispam-scantime <period> ; \002%botnick% set\002 antispam-scantime <period> ; \002(PRIVMSG) set\002 antispam-scantime <period>"
+
+#Idle-ScanTime
+
+set black(say.en.man.1179) "\[MAN\] \002Idle-ScanTime\002 is an extra option for the \002idle\002 module that allows you to define the maximum time interval between scans after users with \002op (@)\002 or \002voice (+v)\002 who are idleing."
+set black(say.en.man.1179_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1180) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1181) "\[MAN\] \002%set%set\002 idle-scantime <period> ; \002%botnick% set\002 idle-scantime <period> ; \002(PRIVMSG) set\002 idle-scantime <period>"
+
+#CloneScan-ScanTime
+
+set black(say.en.man.1183) "\[MAN\] \002CloneScan-ScanTime\002 is an extra option for the \002clonescan\002 module that allows you to define the maximum time interval between scans after certain users who are using clones."
+set black(say.en.man.1183_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1184) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1185) "\[MAN\] \002%char%set\002 clonescan-scantime <period> ; \002%botnick% set\002 clonescan-scantime <period> ; \002(PRIVMSG) set\002 clonescan-scantime <period>"
+
+#Broadcast-ShowTime
+
+set black(say.en.man.1187) "\[MAN\] \002Broadcast-ShowTime\002 is an extra option for the \002broadcast\002 module that allows you to define the maximum time interval between the messages to be broadcast on channel."
+set black(say.en.man.1187_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1188) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1189) "\[MAN\] \002%char%set\002 broadcast-showtime <period> ; \002%botnick% egg\002 broadcast-showtime <period> ; \002(PRIVMSG) egg\002 broadcast-showtime <period>"
+
+#BadChan-ScanTime
+
+set black(say.en.man.1191) "\[MAN\] \002BadChan-ScanTime\002 is an extra option for the \002badchan\002 module that allows you to define the maximum time interval between scans after certain users who are on bad/non-allowed channels."
+set black(say.en.man.1191_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1192) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1193) "\[MAN\] \002%char%set\002 badchan-scantime <period> ; \002%botnick% set\002 badchan-scantime <period> ; \002(PRIVMSG) set\002 badchan-scantime <period>"
+
+#Anunt-ShowTime
+
+set black(say.en.man.1195) "\[MAN\] \002Anunt-ShowTime\002 is an extra option for the \002anunt/advert\002 module that allows you to define the maximum time interval between announcements/ads to be shown on channel."
+set black(say.en.man.1195_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1196) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1197) "\[MAN\] \002%char%set\002 anunt-showtime <period> ; \002%botnick% set\002 anunt-showtime <period> ; \002(PRIVMSG) set\002 anunt-showtime <period>"
+
+#QuoteOfDay-ShowTime
+
+set black(say.en.man.1199) "\[MAN\] \002QuoteOfDay-ShowTime\002 is an extra option for the \002quote\002 module that allows you to define the maximum time interval between quotes to be shown on channel."
+set black(say.en.man.1199_1) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1200) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1201) "\[MAN\] \002%char%set\002 quoteofday-showtime <period> ; \002%botnick% set\002 quoteofday-showtime <period> ; \002(PRIVMSG) set\002 quoteofday-showtime <period>"
+
+#QuitPartColor
+
+set black(say.en.man.1203) "\[MAN\] \002QuitPartColor\002 is an extra option for the \002AntiBadQuitPart\002 module that makes the eggdrop to take action against users who use *colors* words when parting a channel."
+set black(say.en.man.1204) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1205) "\[MAN\] \002%char%set\002 (+/-)quitpartcolor ; \002%botnick% set\002 (+/-)quitpartcolor ; \002(PRIVMSG) set\002 <#chan> (+/-)quitpartcolor"
+set black(say.en.man.1206) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#VoiceMe-ShowTime
+
+set black(say.en.man.1230) "\[MAN\] \002VoiceMe-ShowTime\002 is an extra option for the \002Voiceme\002 module that allows you to define the maximum time interval between the specific messages sent to the channel."
+set black(say.en.man.1231) "\[MAN\] Format period: <X>\002m\002 = minutes ; <X>\002h\002 = hours"
+set black(say.en.man.1232) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1233) "\[MAN\] \002%char%set\002 voiceme-showtime <period> ; \002%botnick% set\002 voiceme-showtime <period> ; \002(PRIVMSG) set\002 voiceme-showtime <period>"
+
+#BadChan-BanWait
+
+set black(say.en.man.1234) "\[MAN\] \002BadChan-BanWait\002 is an extra option for the \002BadChan\002 module that allows you to define the maximum time interval for users to leave bad/forbidden channels before gets banned for being in."
+set black(say.en.man.1235) "\[MAN\] Format period: <X>\002s\002 = seconds"
+set black(say.en.man.1236) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1237) "\[MAN\] \002%char%set\002 badchan-banwait <period> ; \002%botnick% set\002 badchan-banwait <period> ; \002(PRIVMSG) set\002 \[#chan\] badchan-banwait <period>"
+
+#BadNick-BanWait
+
+set black(say.en.man.1238) "\[MAN\] \002Badnick-BanWait\002 is an extra option for the \002BadNick\002 module that allows you to define the maximum time interval for users to change bad nicks before gets banned."
+set black(say.en.man.1239) "\[MAN\] Format period: <X>\002s\002 = seconds"
+set black(say.en.man.1240) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1241) "\[MAN\] \002%char%set\002 badnick-banwait <period> ; \002%botnick% set\002 badnick-banwait <period> ; \002(PRIVMSG) set\002 \[#chan\] badnick-banwait <period>"
+
+#BadNick-BMethod
+
+set black(say.en.man.1242) "\[MAN\] \002BadNick-BMethod\002 is an extra option for the \002BadNick\002 module that allows you to choose the method of ban."
+set black(say.en.man.1243) "\[MAN\] Format method:\002 #1\002 - warn message -> ban ;\002 #2\002 - ban"
+set black(say.en.man.1244) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1245) "\[MAN\] \002%char%set\002 badnick-bmethod <method> ; \002%botnick% set\002 badnick-bmethod <method> ; \002(PRIVMSG) set\002 \[#chan\] badnick-bmethod <method>"
+
+#BadChan-BMethod
+
+set black(say.en.man.1246) "\[MAN\] \002BadChan-BMethod\002 is an extra option for the \002BadChan\002 module that allows you to choose the method of ban."
+set black(say.en.man.1247) "\[MAN\] Format method:\002 #1\002 - warn message -> ban ;\002 #2\002 - ban"
+set black(say.en.man.1248) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1249) "\[MAN\] \002%char%set\002 badchan-bmethod <method> ; \002%botnick% set\002 badchan-bmethod <method> ; \002(PRIVMSG) set\002 \[#chan\] badchan-bmethod <method>"
+
+#RepetitiveChars
+
+set black(say.en.man.1250) "\[MAN\] \002RepetitiveChars\002 bans users who use consecutive repeated characters."
+set black(say.en.man.1251) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1252) "\[MAN\] \002%char%set\002 (+/-)repetitivechars ; \002%botnick% set\002 (+/-)repetitivechars ; \002(PRIVMSG) set\002 \[#chan\] (+/-)repetitivechars"
+set black(say.en.man.1253) "\[MAN\] Optional settings: \002repetitivechars-reason\002 ; repetitivechars-bantime ; \002repetitivechars-warn\002 ; repetitivechars-banmethod ; \002repetitivechars-banmask\002 ; repetitivechars-char"
+set black(say.en.man.1254) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#QuitPartMsgFlood
+
+set black(say.en.man.1255) "\[MAN\] \002QuitPartMsgFlood\002 is an extra option for the \002AntiBadQuitPart\002 module that makes the eggdrop to take action against users who use *flood messages* when part/quit from channel."
+set black(say.en.man.1256) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1257) "\[MAN\] \002%char%set (+/-)quitpartmsgflood\002 ; %botnick% set (+/-)quitpartmsgflood ; \002(PRIVMSG) set <#chan> (+/-)quitpartmsgflood\002"
+set black(say.en.man.1258) "\[MAN\] Optional settings: \002quitpartmsgflood-char\002"
+set black(say.en.man.1259) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#MassFloodSilenceTime
+
+set black(say.en.man.1260) "\[MAN\] \002MassFloodSilenceTime\002 protects the eggdrop against mass flood by ctcp/ctcr, notice or msg using the server silence command."
+set black(say.en.man.1261) "\[MAN\] ** Note: This is a personal bot protection that automatically triggers when gets mass botnet and private flood. **"
+set black(say.en.man.1262) "\[MAN\] Format period: <X>\002s\002 = seconds"
+set black(say.en.man.1263) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1264) "\[MAN\] \002%char%set\002 massfloodsilencetime <period> ; \002%botnick% set\002 massfloodsilencetime <period> ; \002(PRIVMSG) set\002 massfloodsilencetime <period>"
+
+#BanMethod-Expire
+
+set black(say.en.man.1265) "\[MAN\] \002BanMethod-Expire\002 allows you to define the time interval after each count of the protections will expire."
+set black(say.en.man.1266) "\[MAN\] Format period: <X>\002m\002 = minutes"
+set black(say.en.man.1267) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1268) "\[MAN\] \002%char%set\002 banmethod-expire <period> ; \002%botnick% set\002 banmethod-expire <period> ; \002(PRIVMSG) set\002 <#chan> banmethod-expire <period>"
+
+#Count
+
+set black(say.en.man.1269) "\[MAN\] \002Count\002 allows you to define a greet message on-join using some variables. To function requires \001+greet\001, for more info about see \002%char%man greet\002."
+set black(say.en.man.1270) "\[MAN\] Available variables: \002%countchan%\002 = channel name ; \002%nick%\002 = user who joins ; \002%count%\002 = joins count ; \002%time%\002 = date since"
+set black(say.en.man.1271) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1272) "\[MAN\] \002%char%greet\002 set <text> ; \002%botnick% greet\002 set <text> ; \002(PRIVMSG) greet\002 <#chan> set <text>"
+set black(say.en.man.1273) "\[MAN\] \001Example\001: Welcome %nick%, you are user with number %count% who joined in %countchan% since %time%."
+
+#BadChan-FloodControl
+
+set black(say.en.man.1274) "\[MAN\] \002BadChan-FloodControl\002 is an extra option for the \002BadChan\002 module with role of protecting the eggdrop from \002massjoin\002 actions by stopping the on join scan of users for a period of\002 30\002 seconds. After the expiration of this period, the \002BadChan\002 module resumes it's normal operation."
+set black(say.en.man.1275) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1276) "\[MAN\] \002%char%set\002 (+/-)badchan-floodcontrol <no. joins>:<no. seconds> ; \002%botnick% set\002 (+/-)badchan-floodcontrol <no. joins>:<no. seconds> ; \002(PRIVMSG) set\002 <#chan> (+/-)badchan-floodcontrol <no. joins>:<no. seconds>"
+set black(say.en.man.1277) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Exempt
+
+set black(say.en.man.1278) "\[MAN\] \002Exempt\002 Adds a ban exempt to the list of exempts stored on the bot, with optional comment and exempt period of time."
+set black(say.en.man.1279) "\[MAN\] ** NOTE: If <global> is specified, the exempt will be for every channel the bot is in. **"
+set black(say.en.man.1280) "\[MAN\] Format period: <X>\002h\002 = hours ; <X>\002m\002 = minutes ; <X>\002d\002 = days"
+set black(say.en.man.1281) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1282) "\[MAN\] \002%char%exempt\002 \[#chan\] add <ip/host> <period> <reason> (add exempt) ; \002%char%exempt\002 \[#chan\] list; \002%char%exempt\002 \[#chan\] del <ip/host> (remove exempt from list)"
+set black(say.en.man.1283) "\[MAN\] \002%char%exempt\002 \[#chan\] add <ip/host> <period> \[global\] <reason> (add exempt) ; \002%char%exempt\002 \[#chan\] list \[global\] ; \002%char%exempt\002 \[#chan\] del <ip/host> \[global\] (remove exempt from list)"
+
+#For
+
+set black(say.en.man.1284) "\[MAN\] \002For\002 allows multiple eggdrops to execute simultaneously the same command/ commands."
+set black(say.en.man.1285) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.1286) "\[MAN\] \002for\002 <botnick1>,<botnick2>.. <command> <option>"
+
+
+##################################### MAN TIPS #############################################
+
+
+set black(say.en.man.showtip) { 
+ "\[TIP\] Did you know that you can use as period for bans forms like:\002 10m\002 (minutes) ;\002 10h\002 (hours) ;\002 10d\002 (days)?"
+ "\[TIP\] If you have any problem with \002BlackTools script\002 or if you found a \002BUG\002, post to \002tclscripts.net forum\002 an explanation of the problem/bug."
+ "\[TIP\] Did you know that now you can use \002CIDR\002 in ban method? eq:\002 %char%b <ip/cidr>\002 | %char%b *!*@192.168.0.1/17"
+ "\[TIP\] \002(\$)\002 You want a \002customised TCL Script\002 for your eggdrop? Easy-peasy, just \002tell us what you need\002! We can create \002almost anything in TCL\002 based on your ideas and donations. Email \002blackshadow@tclscripts.net\002 or \002info@tclscripts.net\002 with your request informations and we'll contact you \002as soon as possible\002."
+ "\[TIP\] Did you know that you can add multi line ads? eq:\002 %char%anunt add <advert1>~<advert2>~<advert3>\002 | %char%anunt add Welcome to %chan%~Have fun~The Next Generation TCL"
+ "\[TIP\] \002ATTENTION!!\002 Users who use both \002a&a\002 and \002BlackTools\002 scripts \002together\002 should know that this works in theory. So \002DO NOT ask\002 about help for this script if you use it together with \002a&a script\002.."
+ "\[TIP\] Did you know that you copy settings and the banlist or users access list from one channel to another? eq:\002 %char%cp userlist <#chan1> <#chan2>\002 | For more info: \002%char%man cp\002"
+ "\[TIP\] Check our forum at\002 http://tclscripts.net\002 for the latest updates & informations."
+ "\[TIP\] Did you know that now you can upload files matching the pattern\002 *.tcl\002 from a url inside your eggdrop's \002scripts directory\002? eq:\002 %char%tcl wget <link/name.tcl>\002 | For more info: \002%char%man tcl\002"
+ "\[TIP\] Use tcl scripts you really need on your eggdrop. All the nice & funny scripts you find around may be buggy and unsecure. Look for functionality instead of fun in your eggdrop."
+ "\[TIP\] Did you know that now you can use \002for\002 command on multiple eggdrops \002to execute simultaneously\002 the same command? eq: for Bot1,Bot2,Bot3 say bla bla | For more info: \002%char%man for\002"
+ "\[TIP\] \002WwW.TclScripts.Net\002 offers for download a wide range of TCL's for your eggdrop (Blackip.tcl, YoutbeTitle.tcl, BlackCountry.tcl, CSC.tcl and many more), so you can run a professional and last generation bot."
+ "\[TIP\] Did you know that now you can add \002exceptions for particular words\002 from all protections \002to avoid kicking and banning users\002 when it is not really necessary? For more info: \002%char%man exempt\002"
+ "\[TIP\] Did you know that you can add \002a comment\002 to almost all ban commands\002, and other users with access at the eggdrop can see it,\002 when request informations of that ban entry?? eq: \002%char%b nick just a test -c do not remove\002 | \[BT\] Reason: just a test | \[BT\] \002\[BAN COMMENT\]\002 do not remove"
+}
+
+
+##################################### MAN EGGDROP INTERN SETTINGS #############################################
+
+
+#Ban-Time
+
+set black(say.en.man.2101) "\[MAN\] \002Ban-Time/BanTime\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how long temporary bans will last (in minutes). If this setting is set to 0, the bot will never remove bans."
+set black(say.en.man.2102) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2103) "\[MAN\] \002%char%set\002 ban-time <period> ; \002%botnick% set\002 ban-time <period> ; \002(PRIVMSG) set\002 <#chan> ban-time <period>"
+
+#ChanMode
+
+set black(say.en.man.2104) "\[MAN\] \002ChanMode\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and makes the bot enforce channel modes. It will always add the +<modes> and remove the -<modes> modes."
+set black(say.en.man.2105) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2106) "\[MAN\] \002%char%set\002 chanmode (+/-)<modes> ; \002%botnick% set\002 chanmode (+/-)<modes> ; \002(PRIVMSG) set\002 <#chan> chanmode (+/-)<modes>"
+
+#DontKickOps
+
+set black(say.en.man.2107) "\[MAN\] \002DontKickOps\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and stops the bot from kicking users who have the +o flag."
+set black(say.en.man.2108) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2109) "\[MAN\] \002%char%set\002 (+/-)dontkickops ; \002%botnick% set\002 (+/-)dontkickops ; \002(PRIVMSG) set\002 <#chan> (+/-)dontkickops"
+
+#EnforceBans 
+
+set black(say.en.man.2110) "\[MAN\] \002EnforceBans\002 is an internal eggdrop setting not related to \002BlackToolS script\002 and when a ban is set this setting will cause the bot kick to people who are on the channel and match the ban."
+set black(say.en.man.2111) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2112) "\[MAN\] \002%char%set\002 (+/-)enforcebans ; \002%botnick% set\002 (+/-)enforcebans ; \002(PRIVMSG) set\002 <#chan> (+/-)enforcebans"
+
+#DynamicBans 
+
+set black(say.en.man.2113) "\[MAN\] \002DynamicBans\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and only activates bans on the channel when necessary. This keeps the channel's ban list from getting excessively long. The bot still remembers every ban, but it only activates a ban on the channel when it sees someone join who matches that ban."
+set black(say.en.man.2114) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2115) "\[MAN\] \002%char%set\002 (+/-)dynamicbans ; \002%botnick% set\002 (+/-)dynamicbans ; \002(PRIVMSG) set\002 <#chan> (+/-)dynamicbans"
+
+#UserBans 
+
+set black(say.en.man.2116) "\[MAN\] \002UserBans\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and allow bans to be set by users on IRC directly. If this is turned off, the bot will require all bans to be set through the bot's console."
+set black(say.en.man.2117) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2118) "\[MAN\] \002%char%set\002 (+/-)userbans ; \002%botnick% set\002 (+/-)userbans ; \002(PRIVMSG) set\002 <#chan> (+/-)userbans"
+
+#AutoOp 
+
+set black(say.en.man.2119) "\[MAN\] \002AutoOp\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to op users with the +o flag as soon as they join the channel (this is insecure and not recommended)."
+set black(say.en.man.2120) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2121) "\[MAN\] \002%char%set\002 (+/-)autoop ; \002%botnick% set\002 (+/-)autoop ; \002(PRIVMSG) set\002 <#chan> (+/-)autoop"
+
+#AutoHalfOp 
+
+set black(say.en.man.2122) "\[MAN\] \002AutoHalfOp\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to halfop users with the +l flag as soon as they join the channel (this is insecure and not recommended)."
+set black(say.en.man.2123) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2124) "\[MAN\] \002%char%set\002 (+/-)autohalfop ; \002%botnick% set\002 (+/-)autohalfop ; \002(PRIVMSG) set\002 <#chan> (+/-)autohalfop"
+
+#AutoVoice 
+
+set black(say.en.man.2125) "\[MAN\] \002AutoVoice\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to voice users with the +v flag when they join the channel."
+set black(say.en.man.2126) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2127) "\[MAN\] \002%char%set\002 (+/-)autovoice ; \002%botnick% set\002 (+/-)autovoice ; \002(PRIVMSG) set\002 <#chan> (+/-)autovoice"
+
+#Bitch 
+
+set black(say.en.man.2128) "\[MAN\] \002Bitch\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to only let users with +o flag be opped on the channel (this is insecure and not recommended)."
+set black(say.en.man.2129) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2130) "\[MAN\] \002%char%set\002 (+/-)bitch ; \002%botnick% set\002 (+/-)bitch ; \002(PRIVMSG) set\002 <#chan> (+/-)bitch"
+
+#Greet 
+
+set black(say.en.man.2131) "\[MAN\] \002Greet\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to say a user's greet line when they join the channel (see also \002%char%man myset\002)."
+set black(say.en.man.2132) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2133) "\[MAN\] \002%char%set\002 (+/-)greet ; \002%botnick% set\002 (+/-)greet ; \002(PRIVMSG) set\002 <#chan> (+/-)greet"
+
+#ProtectOps 
+
+set black(say.en.man.2134) "\[MAN\] \002ProtectOps\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to re-op a user with the \002+o flag\002 if they get deopped."
+set black(say.en.man.2135) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2136) "\[MAN\] \002%char%set\002 (+/-)protectops ; \002%botnick% set\002 (+/-)protectops ; \002(PRIVMSG) set\002 <#chan> (+/-)protectops"
+
+#ProtectFriends 
+
+set black(say.en.man.2137) "\[MAN\] \002ProtectFriends\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to re-op a user with the \002+f flag\002 if they get deopped."
+set black(say.en.man.2138) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2139) "\[MAN\] \002%char%set\002 (+/-)protectfriends ; \002%botnick% set\002 (+/-)protectfriends ; \002(PRIVMSG) set\002 <#chan> (+/-)protectfriends"
+
+#ProtectHalfOps 
+
+set black(say.en.man.2140) "\[MAN\] \002ProtectHalfOps\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to re-halfop a user with the \002+l flag\002 if they get dehalfopped."
+set black(say.en.man.2141) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2142) "\[MAN\] \002%char%set\002 (+/-)protecthalfops ; \002%botnick% set\002 (+/-)protecthalfops ; \002(PRIVMSG) set\002 <#chan> (+/-)protecthalfops"
+
+#Inactive 
+
+set black(say.en.man.2143) "\[MAN\] \002Inactive\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and prevents the bot from joining the channel (or makes it leave the channel if it is already there). It can be useful to make the bot leave a channel without losing its settings, channel-specific user flags, channel bans, and without affecting sharing."
+set black(say.en.man.2144) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2145) "\[MAN\] \002%char%set\002 (+/-)inactive ; \002%botnick% set\002 (+/-)inactive ; \002(PRIVMSG) set\002 <#chan> (+/-)inactive"
+
+#StatusLog 
+
+set black(say.en.man.2146) "\[MAN\] \002StatusLog\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to log the channel status line every 5 minutes. This shows the bot's status on the channel (op, voice, etc.), the channel's modes, and the total number of members, ops, voices, regular users, and +b, +e, and +I modes on the channel."
+set black(say.en.man.2147) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2148) "\[MAN\] \002%char%set\002 (+/-)statuslog\002 ; \002%botnick% set\002 (+/-)statuslog ; \002(PRIVMSG) set\002 <#chan> (+/-)statuslog"
+
+#Static 
+
+set black(say.en.man.2149) "\[MAN\] \002Static\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and allow only permanent owners to remove the channel."
+set black(say.en.man.2150) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2151) "\[MAN\] \002%char%set\002 (+/-)static ; \002%botnick% set\002 (+/-)static ; \002(PRIVMSG) set\002 <#chan> (+/-)static"
+
+#Revenge 
+
+set black(say.en.man.2152) "\[MAN\] \002Revenge\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to remember people who deop/kick/ban the bot, valid ops, or friends and punish them. Users with the +f flag are exempt from revenge."
+set black(say.en.man.2153) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2154) "\[MAN\] \002%char%set\002 (+/-)revenge ; \002%botnick% set\002 (+/-)revenge ; \002(PRIVMSG) set\002 <#chan> (+/-)revenge"
+
+#RevengeBot 
+
+set black(say.en.man.2155) "\[MAN\] \002RevengeBot\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and is similar to to the 'revenge' option, but it only triggers if a bot gets deopped, kicked or banned."
+set black(say.en.man.2156) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2157) "\[MAN\] \002%char%set\002 (+/-)revengebot ; \002%botnick% set\002 (+/-)revengebot ; \002(PRIVMSG) set\002 <#chan> (+/-)revengebot"
+
+#Secret 
+
+set black(say.en.man.2158) "\[MAN\] \002Secret\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and prevent the channel from being listed on the botnet."
+set black(say.en.man.2159) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2160) "\[MAN\] \002%char%set\002 (+/-)secret ; \002%botnick% set\002 (+/-)secret ; \002(PRIVMSG) set\002 <#chan> (+/-)secret"
+
+#Shared 
+
+set black(say.en.man.2161) "\[MAN\] \002Shared\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to share channel-related user info for this channel."
+set black(say.en.man.2162) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2163) "\[MAN\] \002%char%set\002 (+/-)shared ; \002%botnick% set\002 (+/-)shared ; \002(PRIVMSG) set\002 <#chan> (+/-)shared"
+
+#Cycle 
+
+set black(say.en.man.2164) "\[MAN\] \002Cycle\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and will cause the bot to cycle the channel when it has no ops (@)."
+set black(say.en.man.2165) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2166) "\[MAN\] \002%char%set\002 (+/-)cycle ; \002%botnick% set\002 (+/-)cycle ; \002(PRIVMSG) set\002 <#chan> (+/-)cycle"
+
+#NodeSynch 
+
+set black(say.en.man.2167) "\[MAN\] \002NodeSynch\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and allow non-ops to perform channel modes. This can stop the bot from fighting with services such as ChanServ, or from kicking IRC Operators when setting channel modes without having ops."
+set black(say.en.man.2168) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2169) "\[MAN\] \002%char%set\002 (+/-)nodesynch ; \002%botnick% set\002 (+/-)nodesynch ; \002(PRIVMSG) set\002 <#chan> (+/-)nodesynch"
+
+#DynamicExempts 
+
+set black(say.en.man.2170) "\[MAN\] \002DynamicExempts\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and only activate exempts on the channel when necessary. This keeps the channel's exempt list from getting excessively long. The bot still remembers every exempt, but it only activates a exempt on the channel when it sees a ban set that matches the exempt. The exempt remains active on the channel for as long as the ban is still active."
+set black(say.en.man.2171) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2172) "\[MAN\] \002%char%set\002 (+/-)dynamicexempts ; \002%botnick% set\002 (+/-)dynamicexempts ; \002(PRIVMSG) set\002 <#chan> (+/-)dynamicexempts"
+
+#UserExempts 
+
+set black(say.en.man.2173) "\[MAN\] \002UserExempts\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and allow exempts to be made by users directly. If turned off, the bot will require all exempts to be made through the bot's console."
+set black(say.en.man.2174) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2175) "\[MAN\] \002%char%set\002 (+/-)userexempts ; \002%botnick% set\002 (+/-)userexempts ; \002(PRIVMSG) set\002 <#chan> (+/-)userexempts"
+
+#DynamicInvites 
+
+set black(say.en.man.2176) "\[MAN\] \002DynamicInvites\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and only activate invites on the channel when necessary. This keeps the channel's invite list from getting excessively long. The bot still remembers every invite, but the invites are only activated when the channel is set to invite only and a user joins after requesting an invite. Once set, the invite remains until the channel goes to -i."
+set black(say.en.man.2177) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2178) "\[MAN\] \002%char%set\002 (+/-)dynamicinvites ; \002%botnick% set\002 (+/-)dynamicinvites ; \002(PRIVMSG) set\002 <#chan> (+/-)dynamicinvites"
+
+#UserInvites 
+
+set black(say.en.man.2179) "\[MAN\] \002UserInvites\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and allow invites to be made by users directly. If turned off, the bot will require all invites to be made through the bot's console."
+set black(say.en.man.2180) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2181) "\[MAN\] \002%char%set\002 (+/-)userinvites ; \002%botnick% set\002 (+/-)userinvites ; \002(PRIVMSG) set\002 <#chan> (+/-)userinvites"
+
+#Flood-Ctcp
+
+set black(say.en.man.2182) "\[MAN\] \002Flood-Ctcp\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how many channel ctcps in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2183) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2184) "\[MAN\] \002%char%set\002 flood-ctcp <ctcp:seconds> ; \002%botnick% set\002 flood-ctcp <ctcp:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-ctcp <ctcp:seconds>"
+set black(say.en.man.2185) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Flood-Join
+
+set black(say.en.man.2186) "\[MAN\] \002Flood-Join\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how many joins in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2187) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2188) "\[MAN\] \002%char%set\002 flood-join <joins:seconds> ; \002%botnick% set\002 flood-join <joins:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-join <joins:seconds>"
+set black(say.en.man.2189) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Flood-Kick 
+
+set black(say.en.man.2190) "\[MAN\] \002Flood-Kick\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how many kicks in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2191) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2192) "\[MAN\] \002%char%set\002 flood-kick <kicks:seconds> ; \002%botnick% set\002 flood-kick <kicks:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-kick <kicks:seconds>"
+set black(say.en.man.2193) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Flood-Deop 
+
+set black(say.en.man.2194) "\[MAN\] \002Flood-Deop\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how many deops in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2195) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2196) "\[MAN\] \002%char%set\002 flood-deop <deops:seconds> ; \002%botnick% set\002 flood-deop <deops:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-deop <deops:seconds>"
+set black(say.en.man.2197) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Flood-Nick 
+
+set black(say.en.man.2198) "\[MAN\] \002Flood-Nick\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and how many nick changes in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2199) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2200) "\[MAN\] \002%char%set\002 flood-nick <nicks:seconds> ; \002%botnick% set\002 flood-nick <nicks:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-nick <nicks:seconds>"
+set black(say.en.man.2201) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+#Flood-Chan 
+
+set black(say.en.man.2202) "\[MAN\] \002Flood-Chan\002 this is an internal eggdrop setting not related to \002BlackToolS script\002 and defines how many channel messages in how many seconds from one host constitutes a flood (+f users will not be kicked). To turn this setting off, specify \0020\002 or \0020:0\002."
+set black(say.en.man.2203) "\[MAN\] USAGE SYNTAX:"
+set black(say.en.man.2204) "\[MAN\] \002%char%set\002 flood-chan <lines:seconds> ; \002%botnick% set\002 flood-chan <lines:seconds> ; \002(PRIVMSG) set\002 <#chan> flood-chan <lines:seconds>"
+set black(say.en.man.2205) "View options settings: \002%char%show\002 <setting> ; \002%botnick% show\002 <setting> ; \002(PRIVMSG) show\002 <#chan> <setting>"
+
+
+##############################
+############################################################################################################
+#   END                                                                                                    #
+############################################################################################################

+ 1757 - 0
BlackTools/lang/BT.man-ro.lang.tcl

@@ -0,0 +1,1757 @@
+#########################################################################################################################################
+#                                         _   _   _   _   _   _   _   _   _   _   _   _   _   _                                         #
+#                                        / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \                                        #
+#                                       ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )                                       #
+#                                        \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/                                        #
+#                                                                                                                                       #
+#########################################################################################################################################
+##                                          BlackTools - The Ultimate Channel Control Script                                           ##
+##                                                     One TCL. One smart Eggdrop                                                      ##
+#########################################################################################################################################
+# Acest fisier ruleaza impreuna cu BlackTools si este incarcat automat daca exista in folderul lang (fisier obligatoriu sa existe)      #
+#########################################################################################################################################
+#                                                                                                                                       #
+#                                                      *** The Future is Here ***                                                       #
+#                                                                                            Copyright 2008 - 2018 @ www.tclscripts.net #
+#########################################################################################################################################
+#                                                                                                                                       #
+#   LIMBA ROMANA                                                                                                                        #
+#   ######  #          #     #####  #    # ####### ####### ####### #        #####     #     #    #    #     # #     #    #    #         #
+#   #     # #         # #   #     # #   #     #    #     # #     # #       #     #    ##   ##   # #   ##    # #     #   # #   #         #
+#   #     # #        #   #  #       #  #      #    #     # #     # #       #          # # # #  #   #  # #   # #     #  #   #  #         #
+#   ######  #       #     # #       ###       #    #     # #     # #        #####     #  #  # #     # #  #  # #     # #     # #         #
+#   #     # #       ####### #       #  #      #    #     # #     # #             #    #     # ####### #   # # #     # ####### #         #
+#   #     # #       #     # #     # #   #     #    #     # #     # #       #     #    #     # #     # #    ## #     # #     # #         #
+#   ######  ####### #     #  #####  #    #    #    ####### ####### #######  #####     #     # #     # #     #  #####  #     # #######   #
+#                                                                                                                                       #
+#########################################################################################################################################
+
+
+################################################# MAN COMENZI #####################################################
+
+
+set black(say.ro.man.1) "\005\[BT\]\005 Sintaxa folosire: \002%char%man\002 <comanda>"
+set black(say.ro.man.2) "\005\[BT\]\005 Sintaxa folosire: \002%botnick% man\002 <comanda>"
+set black(say.ro.man.2_1) "\005\[BT\]\005 Sintaxa folosire: \002man\002 <comanda>"
+
+#Man
+
+set black(say.ro.man.3) "\[MAN\] \002Man\002 este a doua cea mai importanta comanda a Blacktools ce permite vizualizarea informatiilor din manualul de utilizare BlackTools."
+set black(say.ro.man.4) "\[MAN\] Aceasta dezvaluie informatii despre modul de utilizare al protectiilor, modulelor si comenzilor."
+set black(say.ro.man.4_1) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.5) "\[MAN\] \002%char%man\002 <comanda> ; \002%botnick% man\002 <comanda> ; \002(PRIVMSG) man\002 <comanda>"
+
+#h
+
+set black(say.ro.man.6) "\[MAN\] \002h\002 este cea mai importanta comanda din cadrul BlackTools."
+set black(say.ro.man.7) "\[MAN\] Aceasta permite navigarea prin categoriile de optiuni ale scriptului."
+set black(say.ro.man.8) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.9) "\[MAN\] \002%char%h\002 <categorie> ; \002%botnick% h\002 <categorie> ; \002(PRIVMSG) h\002 \[#canal\] <categorie>"
+set black(say.ro.man.10) "\[MAN\] Pentru a vedea ce comenzi iti sunt disponibile, foloseste: \002%char%h\002 ; %botnick% h ; \002(PRIVMSG) h\002 \[#canal\]"
+
+#tip
+
+set black(say.ro.man.6666) "\[MAN\] \002tip\002 afiseaza automat \002sfaturi aleatoare\002 la sfarsitul fiecarei informatii din \001manualul de utilizare BlackTools\001."
+
+#v
+
+set black(say.ro.man.11) "\[MAN\] \002v\002 este o comanda prin care puteti da \002VOICE/DEVOICE\002 (+v) unuia sau mai multor useri de pe canal."
+set black(say.ro.man.12) "\[MAN\] Daca nu e specificat niciun nick si nu aveti voice (+v) pe canal, atunci eggdrop-ul iti va da voice (+v)."
+set black(say.ro.man.13) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.14) "\[MAN\] \002%char%v\002 <nick1> <nick2>.. ; \002%botnick% v\002 <nick1 <nick2>.. ; \002(PRIVMSG) v\002 <#canal> <nick1> <nick2>.."
+set black(say.ro.man.15) "\[MAN\] \002%char%v +\002 (mass voice) ; \002%char%v -\002 (mass devoice)"
+
+#o
+
+set black(say.ro.man.16) "\[MAN\] \002o\002 este o comanda prin care puteti da \002OP/DEOP\002 (+@) unuia sau mai multor useri de pe canal."
+set black(say.ro.man.17) "\[MAN\] Daca nu e specificat niciun nick si nu aveti op (@) pe canal, atunci eggdrop-ul iti va da op (@)."
+set black(say.ro.man.18) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.19) "\[MAN\] \002%char%o\002 <nick1> <nick2>.. ; \002%botnick% o\002 <nick1 <nick2>.. ; \002(PRIVMSG) o\002 <#canal> <nick1> <nick2>.."
+set black(say.ro.man.20) "\[MAN\] \002%char%o +\002 (mass op)\002 ; %char%o -\002 (mass deop)"
+
+#UserList
+
+set black(say.ro.man.22) "\[MAN\] \002UserList\002 arata intreaga lista de accese a unui anumit canal."
+set black(say.ro.man.23) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.24) "\[MAN\] \002%char%userlist\002 <nivel|all> ; \002%botnick% userlist\002 <nivel|all> ; \002(PRIVMSG) userlist\002 <#canal> <nivel|all>"
+set black(say.ro.man.25) "\[MAN\] Ca \002<nivel>\002 de access avem: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002"
+set black(say.ro.man.26) "\[MAN\] Ca \002<nivel>\002 de access avem: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002 ; \002%msg.12%\002"
+set black(say.ro.man.27) "\[MAN\] Ca \002<nivel>\002 de access avem: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002 ; \002%msg.4%\002 ; \002%msg.12%\002 ; \002%msg.13%\002 ; \002%msg.15%\002"
+set black(say.ro.man.28_1) "\[MAN\] Ca \002<nivel>\002 de access avem: \002%msg.1%\002 ; \002%msg.2%\002 ; \002%msg.3%\002"
+
+#Version
+
+set black(say.ro.man.28) "\[MAN\] \002Version\002 este o comanda prin care puteti vizualiza versiunea scriptului BlackTools pe care o foloseste eggdrop-ul."
+set black(say.ro.man.29) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.30) "\[MAN\] \002%char%version\002 ; %botnick% version ; \002(PRIVMSG) version\002"
+
+#Info
+
+set black(say.ro.man.31) "\[MAN\] \002Info\002 arata informatii despre despre useri/canale din baza de date a eggdropului."
+set black(say.ro.man.32) "\[MAN\] Informatii precum nivelul de acces, modurile unui canal, mesajul de intampinare, hostmask-urile userilor, suspendarea, cand au fost vazuti ultima data, etc."
+set black(say.ro.man.33) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.34) "\[MAN\] \002%char%info\002 <handle|#canal> ; \002%botnick% info\002 <handle|#canal> ; \002(PRIVMSG) info\002 <handle|#canal>"
+
+#Act
+
+set black(say.ro.man.35) "\[MAN\] \002Act\002 este o comanda prin care eggdrop-ul va trimite un mesaj pe canal de tip /me (ACTION)."
+set black(say.ro.man.36) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.37) "\[MAN\] \002%char%act\002 <mesaj> ; \002%botnick% act\002 <mesaj> ; \002(PRIVMSG) act\002 <#canal> <mesaj>"
+
+#t
+
+set black(say.ro.man.38) "\[MAN\] \002t\002 este o comanda prin care eggdrop-ul va schimba TOPIC-ul canalului cu textul dvs."
+set black(say.ro.man.39) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.40) "\[MAN\] \002%char%t\002 \[#canal\] <text> ; \002%botnick% t\002 \[#canal\] <text> ; \002(PRIVMSG) t\002 <#canal> <text>"
+set black(say.ro.man.41) "\[MAN\] Pentru ca eggdrop-ul sa includa si nick-ul celui care a schimbat topicul folositi: \002%char%set +showhandle\002"
+
+#Cycle
+
+set black(say.ro.man.42) "\[MAN\] \002Cycle\002 este o comanda care face eggdrop-ul sa dea \002/hop\002, sau part-rejoin la un anumit canal."
+set black(say.ro.man.43) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.44) "\[MAN\] \002%char%cycle\002 \[durata|motiv\] ; \002%botnick% cycle\002 \[durata|motiv\] ; \002(PRIVMSG) cycle\002 <#canal> \[durata|motiv\]"
+
+#Mode
+
+set black(say.ro.man.45) "\[MAN\] \002Mode\002 seteaza sau scoate anumite moduri specificate pe canal."
+set black(say.ro.man.46) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.47) "\[MAN\] \002%char%mode\002 (+/-)<moduri> ; %botnick% mode\002 (+/-)<moduri> ; \002(PRIVMSG) mode\002 <#canal> (+/-)<moduri>"
+
+#i
+
+set black(say.ro.man.48) "\[MAN\] \002i\002 este o comanda prin care eggdrop-ul va invita un anumit user pe canalul specificat."
+set black(say.ro.man.49) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.50) "\[MAN\] \002%char%i\002 <nick> ; \002%botnick% i\002 <nick> ; \002(PRIVMSG) i\002 <#canal> <nick>"
+
+#k
+
+set black(say.ro.man.62) "\[MAN\] \002k\002 este o comanda prin care puteti da kick anumitor useri de pe canal. Motivul este optional."
+set black(say.ro.man.63) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.64) "\[MAN\] \002%char%k\002 <nick|host> \[motiv\] ; \002%botnick% k\002 <nick|host> \[motiv\] ; \002(PRIVMSG) k\002 <#canal> <nick|host> \[motiv\]"
+set black(say.ro.man.65) "\[MAN\] Setari optionale: \002k-reason\002 (setare motiv default)"
+
+#w
+
+set black(say.ro.man.66) "\[MAN\] \002w\002 este o comanda prin care un user primeste o avertizare printr-un kick cu motiv predefinit."
+set black(say.ro.man.67) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.68) "\[MAN\] \002%char%w\002 <nick> ; \002%botnick% w\002 <nick> ; \002(PRIVMSG) w\002 <#canal> <nick>"
+set black(say.ro.man.69) "\[MAN\] Setari optionale: \002w-reason\002 (setare motiv avertizare predefinit) ; \002w-message\002 (setare mesaj avertizare predefinit)"
+
+#Check
+
+set black(say.ro.man.70) "\[MAN\] \002Check\002 este o comanda prin care un user este verificat printr-un mesaj pe privat daca este virusat sau face reclama."
+set black(say.ro.man.71) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.72) "\[MAN\] \002%char%check\002 <nick>\002 ; \002%botnick% check\002 <nick> ; \002(PRIVMSG) check\002 \[#canal\] <nick>"
+set black(say.ro.man.73) "\[MAN\] Setari optionale: \002%char%set\002 check-message <mesaj> ; \002(PRIVMSG) set\002 check-message <mesaj> (setare mesaj verificare predefinit)"
+
+#sb
+
+set black(say.ro.man.74) "\[MAN\] \002sb\002 este o comanda prin care se pot cauta si vedea informatii despre un anumit ban (suporta wildcard-uri)."
+set black(say.ro.man.75) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.76) "\[MAN\] \002%char%sb\002 <nick|host|id> ; \002%botnick% sb\002 <nick|host|id> ; \002(PRIVMSG) sb\002 <#canal> <nick|host|id>"
+set black(say.ro.man.77) "\[MAN\] \002%char%sb\002 <nick|host|id> \[global\] ; \002%botnick% sb\002 <nick|host|id> \[global\] ; \002(PRIVMSG) sb\002 <#canal> <nick|host|id> \[global\]"
+set black(say.ro.man.78) "\[MAN\] In caz ca se specifica \002<nick>\002 si acesta nu este pe %chan%, eggdrop-ul va da \002WHOIS\002 si va verifica daca are ban  pe \002ident/host/nick\002 si afisa detalii despre el."
+
+#id
+
+set black(say.ro.man.79) "\[MAN\] \002id\002 este o comanda prin care se poate da ban pe \002IDENT\002. Daca se specifica nick-ul unui user, atunci eggdrop-ul ii va luat automat ident-ul."
+set black(say.ro.man.80) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.81) "\[MAN\] \002%char%id\002 <nick|ident> ; \002%botnick% id\002 <nick|ident> ; \002(PRIVMSG) id\002 <#canal> <nick|ident>"
+set black(say.ro.man.82) "\[MAN\] Setari optionale: \002id-reason\002 (setare motiv predefinit); \002id-bantime\002 (setare timp ban predefinit); \002id-banmask\002 (setare banmask predefinit)"
+
+#n
+
+set black(say.ro.man.83) "\[MAN\] \002n\002 este o comanda prin care se poate da ban pe \002NICK\002."
+set black(say.ro.man.84) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.85) "\[MAN\] \002%char%n\002 <nick> ; \002%botnick% n\002 <nick> ; \002(PRIVMSG) n\002 <#canal> <nick>"
+set black(say.ro.man.86) "\[MAN\] Setari optionale: \002n-reason\002 (setare motiv predefinit); \002n-bantime\002 (setare timp ban in minute) ; \002n-banmask\002 (setare banmask predefinit)"
+
+#Spam
+
+set black(say.ro.man.87) "\[MAN\] \002Spam\002 este o comanda prin care se poate da ban unui user cu un motiv predefinit de \002SPAM\002."
+set black(say.ro.man.88) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.89) "\[MAN\] \002%char%spam\002 <nick|host> ; \002%botnick% spam\002 <nick|host> ; \002(PRIVMSG) spam\002 <#canal> <nick|host>"
+set black(say.ro.man.90) "\[MAN\] Setari optionale: \002spam-reason\002 (setare motiv predefinit); \002spam-bantime\002 (setare timp ban in minute); \002spam-banmask\002 (setare banmask predefinit)"
+
+#dr
+
+set black(say.ro.man.91) "\[MAN\] \002dr\002 este o comanda prin care se poate da ban unui user cu un motiv predefinit de \002DRONA\002."
+set black(say.ro.man.92) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.93) "\[MAN\] \002%char%dr <nick|host> ; %botnick% dr <nick|host> ; (PRIVMSG) dr <#canal> <nick|host>\002"
+set black(say.ro.man.94) "\[MAN\] Setari optionale: \002dr-reason\002 (setare motiv predefinit); \002dr-bantime\002 (setare timp ban in minute); \002dr-banmask\002 (setare banmask predefinit)"
+
+#b
+
+set black(say.ro.man.95) "\[MAN\] \002b\002 este o comanda prin care se poate da ban unui user cu un motiv si un ban-time predefinit. Daca specificati durata \0020\002 banul devine permanent (blacklisted)."
+set black(say.ro.man.96) "\[MAN\] Format durata: <x>\002m\002 = minute, <x>\002h\002 = ore, \002d\002 = zile, \0020\002 = permanent"
+set black(say.ro.man.97) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.98) "\[MAN\] \002%char%b\002 <nick|host> \[-nivel\] \[durata\] \[motiv\] \[-c/comment\] ; \002%botnick% b\002 <nick|host> \[-nivel\] \[durata\] \[motiv\] \[-c/comment\] ; \002(PRIVMSG) b\002 <#canal> <nick|host> \[-nivel\] \[durata\] \[motiv\] \[-c/comment\]"
+set black(say.ro.man.98_1) "\[MAN\] ** Nota: Folosind optiunea \[-c/comment\] va face ca eggdropul sa arate o a doua linie cu informatii referitoare la acel ban incluzand si acel comentariu. **"
+set black(say.ro.man.99) "\[MAN\] \002%char%b\002 <nick|host> \[-nivel\] \[durata\] \[global|link\] \[motiv\] \[-c/comment\] ; \002%botnick% b\002 <nick|host> \[-nivel\] \[durata|link\] \[global\] \[motiv\] \[-c/comment\] ; \002(PRIVMSG) b\002 <#canal> <nick|host> \[-nivel\] \[durata\] \[global|link\] \[motiv\] \[-c/comment\]"
+set black(say.ro.man.100) "\[MAN\] Setari optionale: \002b-reason\002 (setare motiv predefinit); \002b-bantime\002 (setare timp ban in minute); \002b-banmask\002 (setare banmask predefinit)"
+
+#ub
+
+set black(say.ro.man.101) "\[MAN\] \002ub\002 este o comanda prin care se poate sterge unul sau mai multe banuri de pe un canal specificat (suporta wildcard). \002ATENTIE\002: Daca specificai DOAR \002*\002 eggdrop-ul va elimina toate banurile canalului."
+set black(say.ro.man.102) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.103) "\[MAN\] \002%char%ub\002 <nick|host|id> ; \002%botnick% ub\002 <nick|host|id> ; \002(PRIVMSG) ub\002 <#canal> <nick|host|id>\002"
+set black(say.ro.man.104) "\[MAN\] \002%char%ub\002 <nick|host|id> \[global\]\002 \[link\] ; \002%botnick% ub\002 <nick|host|id> \[global\] \[link\] ; \002(PRIVMSG) ub\002 <#canal> <nick|host|id> \[global\] \[link\]"
+set black(say.ro.man.105) "\[MAN\] In caz ca se specifica \002<nick>\002 si acesta nu este pe %chan%, eggdrop-ul va da \002WHOIS\002 si va verifica daca exista ban pe \002ident/host/nick\002 si va da unban."
+
+#Bot
+
+set black(say.ro.man.106) "\[MAN\] \002Bot\002 este o comanda prin care se poate da ban unui user cu un motiv predefinit de \002BOT\002."
+set black(say.ro.man.107) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.108) "\[MAN\] \002%char%bot\002 <nick|host>\002 ; \002%botnick% bot\002 <nick|host> ; \002(PRIVMSG) bot\002 <#canal> <nick|host>"
+set black(say.ro.man.109) "\[MAN\] Setari optionale: \002bot-reason\002 (setare motiv predefinit); \002bot-bantime\002 (setare timp ban in minute); \002bot-banmask\002 (setare banmask predefinit)"
+
+#bw
+
+set black(say.ro.man.110) "\[MAN\] \002bw\002 este o comanda prin care se poate da ban unui user cu un motiv predefinit de \002CUVANT INTERZIS\002."
+set black(say.ro.man.111) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.112) "\[MAN\] \002%char%bw\002 <nick|host> ; \002%botnick% bw\002 <nick|host> ; \002(PRIVMSG) bw\002 <#canal> <nick|host>\002"
+set black(say.ro.man.113) "\[MAN\] Setari optionale: \002bw-reason\002 (setare motiv predefinit); \002bw-bantime\002 (setare timp ban in minute); \002bw-banmask\002 (setare banmask predefinit)"
+
+#Black
+
+set black(say.ro.man.114) "\[MAN\] \002Black\002 este o comanda prin care se poate da ban unui user cu un motiv dat pe o durata \002NELIMITATA\002 (ban permanent)."
+set black(say.ro.man.115) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.116) "\[MAN\] \002%char%black\002 <nick|host> \[motiv\] \[-c/comment\] ; \002%botnick% black\002 <nick|host> \[motiv\] \[-c/comment\] ; \002(PRIVMSG) black\002 <#canal> <nick|host> \[motiv\] \[-c/comment\]\002"
+set black(say.ro.man.116_1) "\[MAN\] ** Nota: Folosind optiunea \[-c/comment\] va face ca eggdropul sa arate o a doua linie cu informatii referitoare la acel ban incluzand si acel comentariu. **"
+set black(say.ro.man.117) "\[MAN\] Setari optionale: \002black-reason\002 (setare motiv predefinit); \002black-banmask\002 (setare banmask predefinit)"
+
+#Stick 
+
+set black(say.ro.man.118) "\[MAN\] \002Stick\002 este o comanda prin care se poate da ban de tip \sticky\ unuia sau mai multor useri cu anumit motiv si durata. Acest ban va fi mentinut mereu in lista de ban-uri a canalului."
+set black(say.ro.man.118_1) "\[MAN\] Format durata: <x>\002m\002 = minute, <x>\002h\002 = ore, \002d\002 = zile, \0020\002 = permanent"
+set black(say.ro.man.119) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.120) "\[MAN\] \002%char%stick\002 <nick|host> \[durata\] \[motiv\] \[-c/comment\] ; %botnick% stick\002 <nick|host> \[durata\] \[motiv\] \[-c/comment\] ; \002(PRIVMSG) stick\002 <#canal> <nick|host> \[durata\] \[motiv\] \[-c/comment\]"
+set black(say.ro.man.120_1) "\[MAN\] ** Nota: Folosind optiunea \[-c/comment\] va face ca eggdropul sa arate o a doua linie cu informatii referitoare la acel ban incluzand si acel comentariu. **"
+set black(say.ro.man.121) "\[MAN\] Setari optionale: \002stick-reason\002 (setare motiv predefinit); \002stick-bantime\002 (setare timp ban in minute); \002stick-banmask\002 (setare banmask predefinit)"
+
+#Gag
+
+set black(say.ro.man.122) "\[MAN\] \002Gag\002 este o comanda prin care se poate reduce la tacere un user pe o anumita durata de timp (acesta numai poate tasta pe canal)."
+set black(say.ro.man.122_1) "\[MAN\] Format durata: <x>\002m\002 = minute, <x>\002h\002 = ore, \002d\002 = zile"
+set black(say.ro.man.123) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.124) "\[MAN\] \002%char%gag\002 <nick> \[durata\] \[motiv\] ; \002%botnick% gag\002 <nick> \[durata\] \[motiv\] ; \002(PRIVMSG) gag\002 <#canal> <nick> \[durata\] \[motiv\]\002."
+set black(say.ro.man.125) "\[MAN\] Setari optionale: \002gag-reason\002 (setare motiv predefinit); \002gag-bantime\002 (setare timp predefinit); \002gag-banmask\002 (setare banmask predefinit)"
+
+#Add
+
+set black(say.ro.man.126) "\[MAN\] \002Add\002 adauga un user in lista de accese a canalului."
+set black(say.ro.man.127) "\[MAN\] ** Nota: Daca userul este pe canal, hostmask-ul automat folosit la adaugarea acelui user va fi cel curent. **"
+set black(say.ro.man.128) "\[MAN\] ** Nota: Daca userul nu este pe canal, hostmask-ul automat folosit la adaugarea acelui user va fi: *!*@%user%.users.undernet.org. **"
+set black(say.ro.man.134) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.135) "\[MAN\] \002%char%add\002 <nivel> <nick|Xusername> ; \002%botnick% add\002 <nivel> <nick|Xusername> ; \002(PRIVMSG) add\002 <#canal> <nivel> <nick|Xusername>"
+
+#Adduser
+
+set black(say.ro.man.136) "\[MAN\] Pentru informatii despre\002 cum sa dai access cuiva \002vezi: \002%char%man add\002"
+
+#DelAcc
+
+set black(say.ro.man.142) "\[MAN\] \002DelAcc\002 este o comanda prin care se sterge un user din lista de accese a canalului."
+set black(say.ro.man.142_1) "\[MAN\] \002RETINETI\002: Trebuie sa ai acces mai mare decat acel user (deci, daca tu ai acces de \002OP\002, iar userul respectv are \002ADMIN\002 atunci nu ii poti sterge accesul)."
+set black(say.ro.man.143) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.144) "\[MAN\] \002%char%delacc\002 <handle> ; %botnick% delacc\002 <handle> ; \002(PRIVMSG) delacc\002 <#canal> <handle>"
+set black(say.ro.man.145) "\[MAN\] \002%char%delacc\002 <owner|master> <handle> ; \002%botnick% delacc\002 <owner|master> <handle> ; \002(PRIVMSG) delacc\002 <#canal> <owner|master> <handle> (stergere access global)"
+
+#Del
+
+set black(say.ro.man.146) "\[MAN\] \002Del\002 este o comanda prin care se sterge un user de tot din memoria eggdrop-ului."
+set black(say.ro.man.147) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.148) "\[MAN\] \002%char%del\002 <handle> ; \002%botnick% del\002 <handle> ; \002(PRIVMSG) del\002 <#canal> <handle>"
+
+#unGag
+
+set black(say.ro.man.149) "\[MAN\] \002unGag\002 este o comanda prin care se poate anula un \002gag\002 dat."
+set black(say.ro.man.150) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.151) "\[MAN\] \002%char%ungag\002 <nick|host> ; \002%botnick% ungag\002 <nick|host> ; \002(PRIVMSG) ungag\002 <#canal> <nick|host>"
+
+#BanList
+
+set black(say.ro.man.152) "\[MAN\] \002BanList\002 este o comanda prin care se pot vizualiza toate banurile din lista unui canal."
+set black(say.ro.man.153) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.154) "\[MAN\] \002%char%banlist\002 <handle|all|other> ; \002%botnick% banlist\002 <handle|all|other> ; \002(PRIVMSG) banlist\002 <#canal> <handle|all|other>"
+set black(say.ro.man.155) "\[MAN\] \002%char%banlist\002 <handle|all|other|global> ; \002%botnick% banlist\002 <handle|all|other|global> ; \002(PRIVMSG) banlist\002 <#canal> <handle|all|other|global>"
+
+#AddHost
+
+set black(say.ro.man.156) "\[MAN\] \002AddHost\002 este o comanda prin care se poate adauga un hostmask unui anumit user."
+set black(say.ro.man.157) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.158) "\[MAN\] \002%char%addhost\002 <handle> <host> ; \002%botnick% addhost\002 <handle> <host> ; \002(PRIVMSG) addhost\002 <handle> <host>"
+
+#DelHost
+
+set black(say.ro.man.159) "\[MAN\] \002DelHost\002 este o comanda prin care se sterge un hostmask unui anumit user."
+set black(say.ro.man.160) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.161) "\[MAN\] \002%char%delhost\002 <handle> <host> ; \002%botnick% delhost\002 <handle> <host> ; \002(PRIVMSG) delhost\002 <handle> <host>"
+
+#chUser
+
+set black(say.ro.man.162) "\[MAN\] \002chUser\002 este o comanda prin care se poate schimba <handle> (numele) unui anumit user in <handle nou>."
+set black(say.ro.man.163) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.164) "\[MAN\] \002%char%chuser\002 <handle> <handle nou> ; \002%botnick% chuser\002 <handle> <handle nou> ; (PRIVMSG) \002chuser\002 <handle> <handle nou>"
+
+#s
+
+set black(say.ro.man.165) "\[MAN\] \002s\002 suspenda accesul unui user pe un anumit canal si pe o perioada specificata. Daca nu se specificata o \002\[durata\]\002, va fi utilizata o valoare implicita."
+set black(say.ro.man.165_1) "\[MAN\] ** Nota: Poti SUSPENDA accesul cuiva doar daca este mai mic decat al tau. **"
+set black(say.ro.man.165_2) "\[MAN\] Format durata: <x>\002m\002 = minute, <x>\002h\002 = ore, <x>\002d\002 = zile"
+set black(say.ro.man.166) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.167) "\[MAN\] \002%char%s\002 <handle> \[durata\] \[motiv\] ; \002%botnick% s\002 <handle> \[durata\] \[motiv\] ; \002(PRIVMSG) s\002 <#canal> <handle> \[durata\] \[motiv\]"
+
+#us
+
+set black(say.ro.man.168) "\[MAN\] \002us\002 este o comanda prin care se scoate suspendul unui anumit user pe un anumit canal."
+set black(say.ro.man.168_1) "\[MAN\] ** Note: Poti folosi comanda UNSUSPEND doar pe un user cu access mai mic ca al tau. De asemenea, level-ul suspendului trebuie sa fie mai mic sau egal cu propriul tau acces. **"
+set black(say.ro.man.169) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.170) "\[MAN\] \002%char%us\002 <handle> ; \002%botnick% us\002 <handle> ; \002(PRIVMSG) us\002 <#canal> <handle>"
+
+#Auto
+
+set black(say.ro.man.171) "\[MAN\] \002Auto\002 schimba valoarea \002automode\002 a unui anumit user. ATENTIE: userul trebuie sa aiba access pe acel canal."
+set black(say.ro.man.172) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.173) "\[MAN\] AutoVOICE: \002%char%auto (+/-)v\002 <handle> ; %botnick% auto (+/-)v <handle> ; \002(PRIVMSG) auto\002 <#canal> (+/-)v <handle>"
+set black(say.ro.man.174) "\[MAN\] AutoOP: \002%char%auto (+/-)o\002 <handle> ; %botnick% auto (+/-)o <handle> ; \002(PRIVMSG) auto\002 <#canal> (+/-)o <handle>"
+set black(say.ro.man.175) "\[MAN\] AutoVOICE: \002%char%auto (+/-)v\002 <handle> \[-global\] ; %botnick% auto\002 (+/-)v <handle> \[-global\] ; \002(PRIVMSG) auto\002 <#canal> (+/-)v <handle> \[-global\]"
+set black(say.ro.man.176) "\[MAN\] AutoOP: \002%char%auto (+/-)o\002 <handle> \[-global\] ; %botnick% auto\002 (+/-)o <handle> \[-global\] ; \002(PRIVMSG) auto\002 <#canal> (+/-)o <handle> \[-global\]"
+
+
+################################################# MAN PROTECTII #####################################################
+
+
+#AntiPub
+
+set black(say.ro.man.177) "\[MAN\] \002AntiPub\002 este un modul de protectie impotriva userilor ce fac reclama de tipul \"#\" sau \"www.*\" (suporta wildcard-uri)."
+set black(say.ro.man.178) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.179) "\[MAN\] \002%char%set\002 (+/-)antipub ; \002%botnick% set\002 (+/-)antipub ; \002(PRIVMSG) set\002 (+/-)antipub"
+set black(say.ro.man.180) "\[MAN\] \002%char%antipub\002 \[#canal\] add <link|#canal> ; \002%char%antipub\002 \[#canal\] list"
+set black(say.ro.man.180_1) "\[MAN\] \002%char%antipub\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%antipub\002 \[#canal\] del <nr. lista> (sterge antipub din lista)"
+set black(say.ro.man.181) "\[MAN\] Setari optionale: \002antipub-reason\002; antipub-bantime; \002antipub-warn\002; antipub-banmethod; \002antipub-banmask\002"
+
+#AntiNotice
+
+set black(say.ro.man.183) "\[MAN\] \002AntiNotice\002 este un modul de protectie impotriva userilor ce executa o actiune tip \"NOTICE\" pe %chan%."
+set black(say.ro.man.184) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.185) "\[MAN\] \002%char%set\002 (+/-)antinotice ; \002%botnick% set\002 (+/-)antinotice ; \002(PRIVMSG) set\002 <#canal> (+/-)antinotice"
+set black(say.ro.man.186) "\[MAN\] Setari optionale: \002antinotice-reason\002; antinotice-bantime; \002antinotice-warn\002; antinotice-banmethod; \002antinotice-banmask\002"
+set black(say.ro.man.187) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiCtcp
+
+set black(say.ro.man.188) "\[MAN\] \002AntiCtcp\002 este un modul de protectie impotriva userilor ce executa o actiune tip \"CTCP\" pe %chan%."
+set black(say.ro.man.189) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.190) "\[MAN\] \002%char%set\002 (+/-)antictcp ; \002%botnick% set\002 (+/-)antictcp ; \002(PRIVMSG) set\002 <#canal> (+/-)antictcp"
+set black(say.ro.man.191) "\[MAN\] Setari optionale: \002antictcp-reason\002, antictcp-bantime, \002antictcp-warn\002, antictcp-banmethod, \002antictcp-banmask\002"
+set black(say.ro.man.192) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiBadWord
+
+set black(say.ro.man.193) "\[MAN\] \002AntiBadWord\002 este un modul de protectie impotriva userilor ce folosesc anumite cuvinte/fraze *interzise* pe %chan% (suporta wildcard-uri)."
+set black(say.ro.man.194) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.195) "\[MAN\] \002%char%set\002 (+/-)antibadword ; \002%botnick% set\002 (+/-)antibadword ; \002(PRIVMSG) set\002 <#canal> (+/-)antibadword"
+set black(say.ro.man.196) "\[MAN\] \002%char%badword\002 \[#canal\] add <cuvant|fraza> ; \002%char%badword \[#canal\] list\002 ; \002%char%badword\002 \[#canal\] del <nr. lista>"
+set black(say.ro.man.197) "\[MAN\] \002%char%badword\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badword\002 \[#canal\] add <cuvant:nr. metoda> (vezi \002%char%man banmethod\002)"
+set black(say.ro.man.198) "\[MAN\] Setari optionale: \002antibadword-reason\002, antibadword-bantime, \002antibadword-warn\002, antibadword-banmethod, \002antibadword-banmask\002"
+
+#AntiLongText
+
+set black(say.ro.man.199) "\[MAN\] \002AntiLongText\002 este un modul de protectie impotriva userilor ce scriu fraze mult prea mari pe %chan%."
+set black(say.ro.man.200) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.201) "\[MAN\] \002%char%set\002 (+/-)antilongtext ; \002%botnick% set\002 (+/-)antilongtext ; \002(PRIVMSG) set\002 <#canal> (+/-)antilongtext"
+set black(say.ro.man.202) "\[MAN\] Setari optionale: \002antilongtext-reason\002, antilongtext-bantime, \002antilongtext-warn\002, antilongtext-banmethod, \002antilongtextmax\002, antilongtext-banmask"
+set black(say.ro.man.203) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#BadQuitPart
+
+set black(say.ro.man.204) "\[MAN\] \002AntiBadQuitPart\002 este un modul de protectie impotriva userilor ce parasesc %chan% utilizand cuvinte *interzise* in mesajul de /part sau /quit (suporta wildcard-uri)."
+set black(say.ro.man.205) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.206) "\[MAN\] \002%char%set\002 (+/-)badquitpart ; \002%botnick% set\002 (+/-)badquitpart ; \002(PRIVMSG) set\002 <#canal> (+/-)badquitpart"
+set black(say.ro.man.207) "\[MAN\] \002%char%badquitpart\002 \[#canal\] add <cuvant> ; \002%char%badquitpart\002 \[#canal\] list"
+set black(say.ro.man.208) "\[MAN\] \002%char%badquitpart\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badquitpart\002 \[#canal\] del <nr. lista> (sterge badquitpart din lista)"
+set black(say.ro.man.209) "\[MAN\] Setari optionale: \002antibadquitpart-reason\002, antibadquitpart-bantime,  \002antibadquitpart-banmethod\002, antibadquitpart-banmask"
+
+#AntiJoinPart
+
+set black(say.ro.man.210) "\[MAN\] \002AntiJoinPart\002 este un modul de protectie impotriva userilor ce intra pe %chan% si dau part mult prea rapid."
+set black(say.ro.man.211) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.212) "\[MAN\] \002%char%set (+/-)antijoinpart\002 ; %botnick% set (+/-)antijoinpart ; \002(PRIVMSG) set <#canal> (+/-)antijoinpart\002"
+set black(say.ro.man.213) "\[MAN\] Setari optionale: \002antijoinpart-reason\002, antijoinpart-bantime, \002antijoinpart-banmethod\002, antijoinpart-banmask"
+set black(say.ro.man.214) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiSpam
+
+set black(say.ro.man.215) "\[MAN\] \002AntiSpam\002 este un modul de protectie impotriva userilor ce fac spam prin mesaje catre eggdrop continand \001#\001 sau \001*www.*\001 (vezi si \002!man spamjoinmessage\002)."
+set black(say.ro.man.216) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.217) "\[MAN\] \002%char%set\002 (+/-)antispam ; \002%botnick% set\002 (+/-)antispam ; \002(PRIVMSG) set\002 <#canal> (+/-)antispam"
+set black(say.ro.man.217_1) "\[MAN\] \002%char%antispam\002 \[#canal\] add <*text*> ; \002%char%antispam \[#canal\] list\002"
+set black(say.ro.man.217_2) "\[MAN\] \002%char%antispam\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%antispam\002 \[#canal\] del <nr. lista> (sterge antispam din lista)"
+set black(say.ro.man.218) "\[MAN\] Setari optionale: \002antispam-reason\002, antispam-message, \002antispam-bantime\002, antispam-banmask, \002antispam-scantime\002"
+set black(say.ro.man.219) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiRepeat
+
+set black(say.ro.man.221) "\[MAN\] \002AntiRepeat\002 este un modul de protectie impotriva userilor ce se repeta prea mult pe %chan%."
+set black(say.ro.man.222) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.223) "\[MAN\] \002%char%set\002 (+/-)antirepeat ; \002%botnick% set\002 (+/-)antirepeat ; \002(PRIVMSG) set\002 <#canal> (+/-)antirepeat"
+set black(say.ro.man.224) "\[MAN\] Setari optionale: \002antirepeat-reason\002, antirepeat-bantime, \002antirepeat-warn\002, antirepeat-banmethod, \002antirepeat-banmask\002, antirepeat-setting"
+set black(say.ro.man.225) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiColor
+
+set black(say.ro.man.226) "\[MAN\] \002AntiColor\002 este un modul de protectie impotriva userilor ce folosesc \002CULORI\002 pe %chan%."
+set black(say.ro.man.227) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.228) "\[MAN\] \002%char%set\002 (+/-)anticolor ; \002%botnick% set\002 (+/-)anticolor ; \002(PRIVMSG) set\002 <#canal> (+/-)anticolor"
+set black(say.ro.man.229) "\[MAN\] Setari optionale: \002anticolor-reason\002, anticolor-bantime, \002anticolor-warn\002, anticolor-banmethod, \002anticolor-banmask\002"
+set black(say.ro.man.230) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiBold
+
+set black(say.ro.man.231) "\[MAN\] \002AntiBold\002 este un modul de protectie impotriva userilor ce folosesc \002BOLD\002 pe %chan%."
+set black(say.ro.man.232) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.233) "\[MAN\] \002%char%set\002 (+/-)antibold ; \002%botnick% set\002 (+/-)antibold ; \002(PRIVMSG) set\002 <#canal> (+/-)antibold"
+set black(say.ro.man.234) "\[MAN\] Setari optionale: \002antibold-reason\002, antibold-bantime, \002antibold-warn\002, antibold-banmethod, \002antibold-banmask\002"
+set black(say.ro.man.235) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiUnderline
+
+set black(say.ro.man.236) "\[MAN\] \002AntiUnderline\002 este un modul de protectie impotriva userilor ce folosesc \002UNDERLINE\002 pe %chan%."
+set black(say.ro.man.237) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.238) "\[MAN\] \002%char%set\002 (+/-)antiunderline ; \002%botnick% set\002 (+/-)antiunderline ; \002(PRIVMSG) set\002 <#canal> (+/-)antiunderline"
+set black(say.ro.man.239) "\[MAN\] Setari optionale: \002antiunderline-reason\002, antiunderline-bantime, \002antiunderline-warn\002, antiunderline-banmethod, \002antiunderline-banmask\002"
+set black(say.ro.man.240) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiCaps
+
+set black(say.ro.man.241) "\[MAN\] \002AntiCaps\002 este un modul de protectie impotriva userilor ce folosesc \002CAPS LOCK\002 pe %chan%."
+set black(say.ro.man.242) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.243) "\[MAN\] \002%char%set\002 (+/-)anticaps ; \002%botnick% set\002 (+/-)anticaps ; \002(PRIVMSG) set\002 <#canal> (+/-)anticaps"
+set black(say.ro.man.244) "\[MAN\] Setari optionale: \002anticaps-reason\002, anticaps-bantime, \002anticaps-warn\002, anticaps-banmethod, \002anticaps-banmask\002"
+set black(say.ro.man.245) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#BadNick
+
+set black(say.ro.man.246) "\[MAN\] \002BadNick\002 este un modul de protectie impotriva userilor ce folosesc NICK-uri ce au in componenta caractere *interzise*."
+set black(say.ro.man.247) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.248) "\[MAN\] \002%char%set\002 (+/-)badnick ; \002%botnick% set\002 (+/-)badnick ; \002(PRIVMSG) set\002 <#canal> (+/-)badnick"
+set black(say.ro.man.249) "\[MAN\] \002%char%badnick\002 \[#canal\] add <*text*> ; \002%char%badnick \[#canal\] list\002"
+set black(say.ro.man.250) "\[MAN\] \002%char%badnick\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badnick\002 \[#canal\] del <nr. lista> (sterge badnick din lista)"
+set black(say.ro.man.251) "\[MAN\] Setari optionale: \002badnick-reason\002, badnick-bantime, \002badnick-banmask\002, badnick-bmethod, \002badnick-banwait\002"
+
+#BadRealname
+
+set black(say.ro.man.252) "\[MAN\] \002BadRealname\002 este un modul de protectie impotriva userilor ce folosesc realname-uri ce au in componenta cuvinte/caractere *interzise* (suporta wildcard-uri)."
+set black(say.ro.man.253) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.254) "\[MAN\] \002%char%set\002 (+/-)badrealname ; \002%botnick% set\002 (+/-)badrealname ; \002(PRIVMSG) set\002 <#canal> (+/-)badrealname"
+set black(say.ro.man.255) "\[MAN\] \002%char%badrealname\002 \[#canal\] add <cuvant> ; \002%char%badrealname \[#canal\] list\002"
+set black(say.ro.man.256) "\[MAN\] \002%char%badrealname\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badrealname\002 \[#canal\] del <nr. lista> (sterge badrealname din lista)"
+set black(say.ro.man.257) "\[MAN\] Setari optionale: \002badrealname-reason\002, badrealname-bantime, \002badrealname-banmask\002"
+
+#AutoOp
+
+set black(say.ro.man.258) "\[MAN\] \002AutoOp\002 este o optiune care odata activata va da \002OP\002 fiecarui user ce da join pe %chan%."
+set black(say.ro.man.259) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.260) "\[MAN\] \002%char%set\002 (+/-)autoop ; \002%botnick% set\002 (+/-)autoop\002 ; \002(PRIVMSG) set\002 <#canal> (+/-)autoop"
+
+#AutoVoice
+
+set black(say.ro.man.261) "\[MAN\] \002AutoVoice\002 este o optiune care odata activata va da \002VOICE\002 fiecarui user ce da join pe %chan%."
+set black(say.ro.man.262) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.263) "\[MAN\] \002%char%set\002 (+/-)autovoice ; \002%botnick% set\002 (+/-)autovoice ; \002(PRIVMSG) set\002 <#canal> (+/-)autovoice"
+
+#AntiJoinFlood
+
+set black(say.ro.man.264) "\[MAN\] \002AntiJoinFlood\002 este un modul de protectie impotriva actiunii de \002massjoin\002 prin blocarea canalului cu moduri. De asemenea, actioneaza si impotriva userilor ce executa join/part sau join/quit in exces."
+set black(say.ro.man.265) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.266) "\[MAN\] \002%char%set\002 (+/-)antijoinflood ; \002%botnick% set\002 (+/-)antijoinflood ; \002(PRIVMSG) set\002 <#canal> (+/-)antijoinflood"
+set black(say.ro.man.267) "\[MAN\] Setari optionale: \002joinflood\002 (<nr. joins>:<nr. secunde>)"
+set black(say.ro.man.268) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AntiChanFlood
+
+set black(say.ro.man.269) "\[MAN\] \002AntiChanFlood\002 este un modul de protectie impotriva userilor care fac text flood pe %chan%."
+set black(say.ro.man.270) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.271) "\[MAN\] \002%char%set\002 (+/-)antichanflood ; \002%botnick% set\002 (+/-)antichanflood ; \002(PRIVMSG) set\002 <#canal> (+/-)antichanflood"
+set black(say.ro.man.272) "\[MAN\] Setari optionale: \002antichanflood-reason\002 (setare motiv predefinit), \002antichanflood-bantime\002 (setare timp ban predefinit), \002chanflood\002 (<nr. linii>:<nr secunde>)"
+set black(say.ro.man.273) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#BadIdent
+
+set black(say.ro.man.274) "\[MAN\] \002BadIdent\002 este un modul de protectie impotriva userilor ce folosesc IDENT-uri ce au in componenta cuvinte/caractere *interzise*  (suporta wildcard-uri)."
+set black(say.ro.man.275) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.276) "\[MAN\] \002%char%set\002 (+/-)badident ; \002%botnick% set\002 (+/-)badident ; \002(PRIVMSG) set\002 <#canal> (+/-)badident"
+set black(say.ro.man.277) "\[MAN\] \002%char%badident\002 \[#canal\] add <cuvant> ; \002%char%badident \[#canal\] list\002"
+set black(say.ro.man.278) "\[MAN\] \002%char%badident\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badident\002 \[#canal\] del <nr. lista> (sterge badident din lista)"
+set black(say.ro.man.279) "\[MAN\] Setari optionale: \002badident-reason\002 (setare motiv predefinit), \002badident-bantime\002 (setare timp ban predefinit), \002badident-banmask\002 (setare metoda banmask)"
+
+#ShowHandle
+
+set black(say.ro.man.280) "\[MAN\] \002ShowHandle\002 este o optiune care odata activata va adauga langa motivul banurilor si userul celui care a dat banul, astfel incat persoana banata sa poata vedea cine i-a dat ban."
+set black(say.ro.man.281) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.282) "\[MAN\] \002%char%set\002 (+/-)showhandle ; \002%botnick% set\002 (+/-)showhandle ; \002(PRIVMSG) set\002 <#canal> (+/-)showhandle"
+
+#ShowCount
+
+set black(say.ro.man.283) "\[MAN\] \002ShowCount\002 este o optiune care odata activata va adauga langa motivul banurilor si numaratoarea acestora."
+set black(say.ro.man.284) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.285) "\[MAN\] \002%char%set\002 (+/-)showcount ; \002%botnick% set\002 (+/-)showcount ; \002(PRIVMSG) set\002 <#canal> (+/-)showcount"
+
+#Showtime
+
+set black(say.ro.man.286) "\[MAN\] \002Showtime\002 este o optiune care odata activata va adauga langa motivul banurilor si timpul de expirare, astfel incat persoana banata sa stie cand va expira respectivul ban."
+set black(say.ro.man.287) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.288) "\[MAN\] \002%char%set\002 (+/-)showtime ; \002%botnick% set\002 (+/-)showtime ; \002(PRIVMSG) set\002 <#canal> (+/-)showtime"
+
+#ShowUrl
+
+set black(say.ro.man.289) "\[MAN\] \002ShowUrl\002 este o optiune care odata activata va adauga langa motivul banurilor si URL-ul canalului (vezi si \002!man url\002)."
+set black(say.ro.man.290) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.291) "\[MAN\] \002%char%set\002 (+/-)showurl ; \002%botnick% set\002 (+/-)showurl ; \002(PRIVMSG) set\002 <#canal> (+/-)showurl"
+
+#Xbantime
+
+set black(say.ro.man.292) "\[MAN\] \002xbantime\002 este o optiune prin care se seteaza timpul de ban la X (doar daca \002+xban\002 este activat)."
+set black(say.ro.man.293) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.294) "\[MAN\] \002%char%set\002 xbantime <nr. ore> ; %botnick% set\002 xbantime <nr. ore> ; \002(PRIVMSG) set\002 <#canal> xbantime <nr. ore>"
+
+#XbanLevel
+
+set black(say.ro.man.295) "\[MAN\] \002xBanLevel\002 este o optiune prin care se seteaza nivelul de ban la X (doar daca \002+xban\002 este activat)"
+set black(say.ro.man.296) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.297) "\[MAN\] \002%char%set\002 xbanlevel <nivel X> ; \002%botnick% set\002 xbanlevel <nivel X> ; \002(PRIVMSG) set\002 <#canal> xbanlevel <nivel X>"
+
+#oProtect
+
+set black(say.ro.man.298) "\[MAN\] \002oProtect\002 este o optiune care odata activata va proteja pe cei cu \002OP (@)\002 de la protectii."
+set black(say.ro.man.299) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.300) "\[MAN\] \002%char%set\002 (+/-)oprotect ; \002%botnick% set\002 (+/-)oprotect ; \002(PRIVMSG) set\002 <#canal> (+/-)oprotect"
+
+#vProtect
+
+set black(say.ro.man.301) "\[MAN\] \002vProtect\002 este o optiune care odata activata va proteja pe cei cu \002VOICE (+v)\002 de la protectii."
+set black(say.ro.man.302) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.303) "\[MAN\] \002%char%set\002 (+/-)vprotect ; \002%botnick% set\002 (+/-)vprotect ; \002(PRIVMSG) set\002 <#canal> (+/-)vprotect"
+
+#hoProtect
+
+set black(say.ro.man.304) "\[MAN\] \002hoProtect\002 este o optiune care odata activata va proteja pe cei cu \002HALFOP (+h %)\002 de la protectii."
+set black(say.ro.man.305) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.306) "\[MAN\] \002%char%set\002 (+/-)hoprotect ; \002%botnick% set\002 (+/-)hoprotect ; \002(PRIVMSG) set\002 <#canal> (+/-)hoprotect"
+
+#ShowID
+
+set black(say.ro.man.307) "\[MAN\] \002ShowID\002 este o optiune care odata activata va adauga la motivul banurilor \002ID-ul\002 respectivului ban din lista de banuri a eggdrop-ului."
+set black(say.ro.man.308) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.309) "\[MAN\] \002%char%set\002 (+/-)showid ; \002%botnick% set\002 (+/-)showid; \002(PRIVMSG) set\002 <#canal> (+/-)showid"
+
+
+################################################# MAN MODULE #####################################################
+
+ 
+#xTools
+
+set black(say.ro.man.407) "\[MAN\] \002xTools\002 este un modul care va avea grija ca eggdrop-ul sa isi ia Op, Voice, sa isi dea Unban, Invite prin *X*."
+set black(say.ro.man.408) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.409) "\[MAN\] \002%char%set\002 (+/-)xtools ; \002%botnick% set\002 (+/-)xtools ; \002(PRIVMSG) set\002 <#canal> (+/-)xtools"
+
+#BadChan
+
+set black(say.ro.man.410) "\[MAN\] \002BadChan\002 este un modul de protectie care nu va lasa userii ce se afla pe anumite canale din blacklist sa intre pe %chan% (suporta wildcard-uri)."
+set black(say.ro.man.411) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.412) "\[MAN\] \002%char%badchan\002 <ON|OFF> ; \002%botnick% badchan\002 <ON|OFF> ; \002(PRIVMSG) badchan\002 <#canal> <ON|OFF>"
+set black(say.ro.man.413) "\[MAN\] \002%char%badchan add\002 <#badchan> \[motiv\] (adauga badchan) ; \002%char%badchan \[#canal\] list\002 (vezi lista badchans)"
+set black(say.ro.man.414) "\[MAN\] \002%char%badchan add\002 <#badchan> \[global\] \[motiv\]\002 ; %char%badchan del\002 <nr. lista> \[-global\] ; \002%char%badchan list\002 \[-global\]"
+set black(say.ro.man.415) "\[MAN\] \002%char%badchan add\002 <+#badchan> (adauga exceptie) ; \002%char%badchan del\002 <nr. lista> (sterge badchan din lista)"
+set black(say.ro.man.416) "\[MAN\] Setari optionale: \002badchan-reason\002, badchan-bantime, \002badchan-bmethod\002, badchan-scantime, \002badchan-banwait\002, badchan-floodcontrol, \002showbadchan\002"
+
+#Anunt
+
+set black(say.ro.man.417) "\[MAN\] \002Anunt\002 este un modul care va avea rolul de a afisa anunturi pe %chan% la un anumit interval de timp si in functie de activitatea de pe canal (vezi si \002%char%man anunt-showtime & suporta !%chan% sau !%botnick%)."
+set black(say.ro.man.417_1) "\[MAN\] ** Note: Aceste mesaje vor fi expuse unul cate unul si NUMAI daca pe acel canal exista activitate. In caz contrar eggdropul intra in stand by pana la primul semn de activitate (join, part, chat, etc.). **"
+set black(say.ro.man.418) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.419) "\[MAN\] \002%char%anunt <ON|OFF>\002 ; %botnick% anunt <ON|OFF> ; \002(PRIVMSG) anunt <#canal> <ON|OFF>\002"
+set black(say.ro.man.420) "\[MAN\] \002%char%anunt\002 \[#canal\] add <mesaj> ; \002%char%anunt \[#canal\] list\002 ; \002%char%anunt\002 \[#canal\] del <nr. lista>"
+set black(say.ro.man.421) "\[MAN\] Pentru a adauga mai mult de 1 propozitie intr-un anunt folositi \002%char%anunt add <mesaj1>~<mesaj2>..\002 iar eggdrop-ul va da anuntul ca doua propozitii diferite."
+
+#Limit
+
+set black(say.ro.man.422) "\[MAN\] \002Limit\002 este un modul care are rolul de a avea grija de limita canalului"
+set black(say.ro.man.423) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.424) "\[MAN\] \002%char%limit\002 <ON|OFF> ; \002%botnick% limit\002 <ON|OFF> ; \002(PRIVMSG) limit\002 <#canal> <ON|OFF>"
+set black(say.ro.man.425) "\[MAN\] \002%char%limit set <numar>\002 (setare valoare default pentru limita)"
+set black(say.ro.man.426) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Topic
+
+set black(say.ro.man.427) "\[MAN\] \002Topic\002 este un modul prin care se poate seta topic-ul, ce poate fi vazut la \002%char%info #canal\002. Daca se specifica niciun text, eggdrop-ul va adauga, automat, topic-ul curent al canalului."
+set black(say.ro.man.427_1) "\[MAN\] ** Note: Daca vreti sa resetati/eliminati topic folositi: \002%char%topic unset\002. **"
+set black(say.ro.man.428) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.429) "\[MAN\] \002%char%topic\002 \[#canal\] set <text> ; \002%botnick% topic\002 \[#canal\] set <text> ; \002(PRIVMSG) topic\002 \[#canal\] set <text>"
+set black(say.ro.man.430) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#CloneScan
+
+set black(say.ro.man.431) "\[MAN\] \002CloneScan\002 este un modul care odata activat la un interval de timp va scana %chan% de clone."
+set black(say.ro.man.432) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.433) "\[MAN\] \002%char%set\002 (+/-)clonescan ; \002%botnick% set\002 (+/-)clonescan ; \002(PRIVMSG) set\002 <#canal> (+/-)clonescan"
+set black(say.ro.man.433_1) "\[MAN\] \002%char%clonescan add\002 <ip|host> ; \002%char%clonescan del\002 <nr. lista> ; \002%char%clonescan list\002"
+set black(say.ro.man.434) "\[MAN\] Setari optionale: \002clonescan-maxclone\002 (setare nr. maxim de clone), \002clonescan-bantime\002 (setare timp ban predefinit), \002clonescan-reason\002 (setare motiv predefinit)"
+set black(say.ro.man.435) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Seen
+
+set black(say.ro.man.436) "\[MAN\] \002Seen\002 este un modul care odata activat va salva inregistrari cu join/part/quit/netsplit/nickchange/lastmsg a userilor de pe acel canal. Are o baza de date pentru fiecare canal."
+set black(say.ro.man.437) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.438_1) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.438) "\[MAN\] \002%char%set\002 (+/-)seen ; \002%botnick% set\002 (+/-)seen ; \002(PRIVMSG) set\002 <#canal> (+/-)seen"
+set black(say.ro.man.438_2) "\[MAN\] \002%char%seen\002 <nick|ip|host> ; \002%botnick% seen\002 <nick|ip|host> ; \002(PRIVMSG) seen\002 \[#canal\] <nick|ip|host>"
+set black(say.ro.man.438_3) "\[MAN\] \002%char%seen\002 \[global\] <nick|ip|host> ; \002%botnick% seen\002 \[global\] <nick|ip|host> ; \002(PRIVMSG) seen\002 \[#canal|global\] <nick|ip|host>"
+set black(say.ro.man.439) "\[MAN\] Setari optionale: \002seenreply\002"
+set black(say.ro.man.440) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Greet
+
+set black(say.ro.man.441) "\[MAN\] \002Greet\002 este un modul prin care puteti adauga un mesaj de intampinare catre userii care dau join pe %chan% (vezi si \002%char%man infoline\002 sau \002%char%man count\002)."
+set black(say.ro.man.442) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.443) "\[MAN\] \002%char%greet\002 <ON|OFF> ; \002%botnick% greet\002 <ON|OFF> ; \002(PRIVMSG) greet\002 <#canal> <ON|OFF>"
+set black(say.ro.man.444) "\[MAN\] \002%char%greet\002 \[#canal\] set <mesaj>\002 ; \002%botnick% greet\002 \[#canal\] set <mesaj> ; \002(PRIVMSG) greet\002 \[#canal\] set <mesaj>"
+set black(say.ro.man.445) "\[MAN\] Setari optionale: \002%char%set greet-method <metoda>\002 (NOTICE | PRIVMSG)"
+set black(say.ro.man.446) "\[MAN\] Pentru a adauga mai mult de 1 propozitie intr-un greet folositi \002%char%set \[#canal\] greet <mesaj1>~<mesaj2>..\002 iar eggdrop-ul va da greet-ul ca doua propozitii diferite (suporta %countchan%, %nick%, %time% and %count%)."
+
+#Leave
+
+set black(say.ro.man.447) "\[MAN\] \002Leave\002 este un modul prin care puteti adauga mesaje catre userii care dau part de pe %chan%."
+set black(say.ro.man.448) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.449) "\[MAN\] \002%char%leave\002 <ON|OFF> ; \002%botnick% leave\002 <ON|OFF> ; \002(PRIVMSG) leave\002 <#canal> <ON|OFF>"
+set black(say.ro.man.450) "\[MAN\] \002%char%leave\002 \[#canal\] set <mesaj>\002 ; \002%botnick% leave\002 \[#canal\] set <mesaj> ; \002(PRIVMSG) leave\002 \[#canal\] set <mesaj>"
+set black(say.ro.man.451) "\[MAN\] Setari optionale: \002%char%set leave-method <metoda>\002 (NOTICE | PRIVMSG)"
+set black(say.ro.man.452) "\[MAN\] Pentru a adauga mai mult de 1 propozitie intr-un greet folositi \002%char%set \[#canal\] leave <mesaj1>~<mesaj2>..\002 iar eggdrop-ul va da leave-ul ca doua propozitii diferite."
+
+#Idle
+
+set black(say.ro.man.453) "\[MAN\] \002Idle\002 este un modul care odata activat nu va lasa pe userii cu idle sa aibe \002op (@)\002 sau \002voice (+v)\002."
+set black(say.ro.man.453_1) "\[MAN\] Format perioada: <x>\002m\002 = minute, <x>\002h\002 = ore, <x>\002d\002 = zile"
+set black(say.ro.man.454) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.455) "\[MAN\] \002%char%idle\002 <(+/-)o / (+/-)v / (+/-)ho> ; \002%botnick% idle\002 <(+/-)o / (+/-)v / (+/-)ho> ; \002(PRIVMSG) idle\002 <#canal> <(+/-)o / (+/-)v / (+/-)ho>"
+set black(say.ro.man.456) "\[MAN\] \002%char%idle add\002 <nick> (adaugare exceptie de la idle), \002%char%idle <list>\002 (listare exceptii), \002%char%idle del\002 <nick> (stergere exceptie)"
+set black(say.ro.man.457) "\[MAN\] Setari optionale: \002idleopmax\002 <perioada> (perioada timp idledeop) ; \002idlevoicemax\002 <perioada> (perioada timp idlevoice) ; \002idlehalfopmax\002 <perioada> (perioada timp idlehalfop)"
+set black(say.ro.man.458) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+set black(say.ro.man.458_1) "\[MAN\] Pentru informatii despre \002idlevoice\002 vezi: \002%char%man idle\002"
+set black(say.ro.man.458_2) "\[MAN\] Pentru informatii despre \002idleop\002 vezi: \002%char%man idle\002"
+set black(say.ro.man.458_3) "\[MAN\] Pentru informatii despre \002idlehalfop\002 vezi: \002%char%man idle\002"
+
+#BackChan
+
+set black(say.ro.man.459) "\[MAN\] \002BackChan\002 este un modul care odata activat da posibilitatea ca un anumit canal sa aibe un backchan in care eggdrop-ul va anunta banurile date de catre acesta pe canalul principal."
+set black(say.ro.man.460) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.461) "\[MAN\] \002%char%set\002 \[#canal\] backchan <#backchan> ; \002%botnick% set\002 \[#canal\] backchan <#backchan> ; \002(PRIVMSG) set\002 <#canal> backchan <#backchan>"
+set black(say.ro.man.462) "\[MAN\] Odata cu setarea canalului \002backchan\002 puteti folosi pe acesta toate comenzile de ban, iar acestea vor fi aplicate pe \002<#canal>\002 (canalul principal). Nu suporta 2 sau mai multe canale main pe un singur bakchan. Fiecare canal main cu backchan-ul lui."
+set black(say.ro.man.463) "\[MAN\] \002ChanReport\002 (BackChan) este un modul care odata activat da posibilitatea ca un anumit canal sa aibe un backchan in care eggdrop-ul va anunta banurile date de catre acesta pe \002<#canal>\002 (canalul principal)."
+
+#TopWords
+
+set black(say.ro.man.464) "\[MAN\] \002TopWords\002 este un modul care odata activat va inregistra activitatea userilor de pe %chan% (numarul de cuvinte scrise)."
+set black(say.ro.man.465) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.466) "\[MAN\] \002%char%set\002 (+/-)topwords ; \002%botnick% set\002 (+/-)topwords ; \002(PRIVMSG) set\002 <#canal> (+/-)topwords"
+set black(say.ro.man.467) "\[MAN\] \002%char%topwords\002 \[#canal\] <nick> \[total\] ; \002%char%topwords\002 \[#canal\] <nick> \[total\] ; \002(PRIVMSG) topwords\002 \[#canal\] <nick> \[total\]"
+set black(say.ro.man.467_1) "\[MAN\] \002%char%topwords\002 \[#canal\] <nick> \[total|reset\]  ; \002(PRIVMSG) topwords\002 \[#canal\] <nick> \[total|reset\]"
+
+
+#AntiTake
+
+set black(say.ro.man.473) "\[MAN\] \002Antitake\002 este un modul care are doua componente: Prima avand functia de protejare impotriva celor care nu au access la Eggdrop si dau DEOP iar cea de-a doua pentru cei care nu au access la Eggdrop si dau OP."
+set black(say.ro.man.474) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.475) "\[MAN\] \002%char%set\002 (+/-)dontdeop ; \002%botnick% set\002 (+/-)dontdeop (protectie la deop) ; \002%char%set\002 (+/-)dontop ; \002%botnick% set\002 (+/-)dontop (protectie la op)"
+set black(say.ro.man.475_1) "\[MAN\] Pentru informatii despre \002dontdeop\002 vezi: \002%char%man antitake\002"
+set black(say.ro.man.475_2) "\[MAN\] Pentru informatii despre \002dontop\002 vezi: \002%char%man antitake\002"
+
+#Private
+
+set black(say.ro.man.476) "\[MAN\] \002Private\002 este un modul care odata activat nu va lasa pe cei fara access sau pe cei care nu se afla in lista de exceptii la Eggdrop sa dea join pe %chan%."
+set black(say.ro.man.477) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.478) "\[MAN\] \002%char%set\002 (+/-)private ; \002%botnick% set\002 (+/-)private ; \002(PRIVMSG) set\002 <#canal> (+/-)private"
+set black(say.ro.man.479) "\[MAN\] \002%char%private add\002 <nick> <host> (adaugare exceptie), \002%char%private list\002 (listare exceptii), \002%char%private del\002 <nick> (stergere exceptie)"
+set black(say.ro.man.480) "\[MAN\] Setari optionale: \002private-reason\002 (setare motiv predefinit); \002private-bantime\002 (setare timp ban in minute)"
+set black(say.ro.man.481) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AutoBroadcast
+
+set black(say.ro.man.482) "\[MAN\] \002AutoBroadCast\002 este un modul care odata activat va da mesaje pe toate canalele eggdrop-ului odata la un interval de timp"
+set black(say.ro.man.483) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.484) "\[MAN\] \002%char%bt\002 <ON|OFF> ; \002%botnick% bt\002 <ON|OFF> ; \002(PRIVMSG) bt\002 <#canal> <ON|OFF>"
+set black(say.ro.man.485) "\[MAN\] \002%char%bt add\002 <mesaj> ; \002%char%bt\002 list ; \002%char%bt del\002 <nr. lista>"
+set black(say.ro.man.486) "\[MAN\] \002%char%set\002 <#canal> (+/-)silent (nu va da broadcast pe canal)"
+set black(say.ro.man.486_1) "\[MAN\] Pentru informatii despre \002silent\002 vezi: \002%char%man autobroadcast\002"
+
+#Language
+
+set black(say.ro.man.487) "\[MAN\] \002Lang\002 permite schimbarea limbii in care eggdropul iti raspunde, precum si limba default a motivelor de kick/ban de pe un anumit canal."
+set black(say.ro.man.487_1) "\[MAN\] Limbi disponibile: \002RO\002 = romana ; \002EN\002 = engleza"
+set black(say.ro.man.488) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.489) "\[MAN\] \002%char%set\002 \[#canal\] lang <limba> ; \002%botnick% set\002 \[#canal\] lang <limba> ; \002(PRIVMSG) set\002 \[#canal\] lang <limba>"
+set black(say.ro.man.489_1) "\[MAN\] \002%char%myset\002 lang <limba> ; \002%botnick% myset\002 lang <limba> ; \002(PRIVMSG) myset\002 lang <limba> (setare limba default user)"
+
+#TCL
+
+set black(say.ro.man.490) "\[MAN\] \002TCL\002 este un modul cu care puteti incarca tcl-uri, lista atat cele incarcate cat si cele din scripts (upload restrictionat numai la fisiere\002 .tcl\002)."
+set black(say.ro.man.491) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.492) "\[MAN\] \002%char%tcl <list>\002 (vizualizare tcl-uri); %char%tcl wget <link/nume.tcl>; \002%char%tcl load\002 <nume.tcl> (incarcare tcl); \002%char%tcl \002unload\002 <nume.tcl> (dezactivare tcl); \002%char%tcl info\002 <nume.tcl> (informatii tcl) "
+
+#Next
+
+set black(say.ro.man.493) "\[MAN\] \002Next\002 este un modul folosit pentru canalele de help prin care puteti asista useri ce au nevoie de ajutor."
+set black(say.ro.man.494) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.495) "\[MAN\] \002%char%set\002 (+/-)next ; \002%botnick% set\002 (+/-)next ; \002(PRIVMSG) set\002 <#canal> (+/-)next"
+set black(say.ro.man.496) "\[MAN\] \002%char%next\002 (voice userul urmator) ; \002%char%next list\002 (afisare lista), \002%char%helped\002 <nick>, \002%char%noidle\002 <nick>, \002%char%skip\002 <nick>"
+set black(say.ro.man.497) "\[MAN\] Setari optionale: \002next-reason\002 (setare motiv predefinit), \002next-bantime\002 (setare timp ban in minute)"
+set black(say.ro.man.498) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+
+################################################# MAN COMENZI #####################################################
+
+
+#upTime
+
+set black(say.ro.man.605) "\[MAN\] \002upTime\002 este o comanda prin care puteti afla de cand este eggdrop-ul pornit, timpul de conectare la server, cat si server-ul pe care este conectat."
+set black(say.ro.man.606) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.607) "\[MAN\] \002%char%uptime\002 ; %botnick% uptime ; \002(PRIVMSG) uptime\002"
+
+#Status
+
+set black(say.ro.man.608) "\[MAN\] \002Status\002 este o comanda prin care puteti afla atat informatiile din comanda %char%uptime, cat si canalele eggdrop-ului si uptime-ul serverului pe care e ridicat."
+set black(say.ro.man.609) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.610) "\[MAN\] \002%char%status\002 ; %botnick% status ; \002(PRIVMSG) status\002"
+
+#Set
+
+set black(say.ro.man.611) "\[MAN\] \002Set\002 seteaza anumite flaguri pentru canal (anumite setari care ajuta eggdropul cum sa se comporte in anumite situatii)."
+set black(say.ro.man.612) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.613) "\[MAN\] \002%char%set\002 (+/-)flag / <flag|str|optiune> <descriere> ; \002%botnick% set\002 (+/-)flag / <flag|str|optiune> <descriere> ; \002(PRIVMSG) set\002 <#canal> (+/-)flag / <flag|str|optiune> <descriere>"
+set black(say.ro.man.614) "\[MAN\] \002%char%set\002 global <flag|str|optiune> <descriere> (set pe toate canalele)"
+set black(say.ro.man.615) "\[MAN\] Examplu: \002%char%set\002 chanmode +k <cheie> (setare cheie canal)"
+
+#Jump
+
+set black(say.ro.man.620) "\[MAN\] \002Jump\002 este o comanda prin care puteti schimba server-ul la care e conectat eggdrop-ul dvs."
+set black(say.ro.man.621) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.622) "\[MAN\] \002 %char%jump\002 <server irc> ; \002%botnick% jump\002 <server irc> ; \002(PRIVMSG) jump\002 <server irc>"
+
+#msg
+
+set black(say.ro.man.623) "\[MAN\] \002msg\002 este o comanda prin care puteti da mesaj catre un canal sau un user."
+set black(say.ro.man.624) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.625) "\[MAN\] \002 %char%msg\002 <nick> <mesaj> ; \002%botnick% msg\002 <nick> <mesaj> ; \002(PRIVMSG) msg\002 <nick> <mesaj>"
+
+#Broadcast
+
+set black(say.ro.man.626) "\[MAN\] \002Broadcast\002 este o comanda prin care puteti trimite un mesaj catre toate canalele eggdrop-ului."
+set black(say.ro.man.627) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.628) "\[MAN\] \002 %char%broadcast\002 <mesaj> ; \002%botnick% broadcast\002 <mesaj> ; \002(PRIVMSG) broadcast\002 <mesaj>"
+
+#Ignore
+
+set black(say.ro.man.629) "\[MAN\] \002Ignore\002 este o comanda prin care puteti lista, adauga, sterge inregistrarile de tip \002ignore\002."
+set black(say.ro.man.629_1) "\[MAN\] Format durata: <x>\002m\002 = minute, <x>\002h\002 = ore, \002d\002 = zile"
+set black(say.ro.man.630) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.631) "\[MAN\] \002%char%ignore list\002 ; \002%char%ignore add\002 <ip|host> \[durata\] \[motiv\] ; \002%char%ignore del\002 <ip|host>"
+
+#Chat
+
+set black(say.ro.man.632) "\[MAN\] \002Chat\002 este o comanda prin care va puteti conecta la botnet-ul eggdrop-ului dvs."
+set black(say.ro.man.633) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.634) "\[MAN\] \002%char%chat\002 ; %botnick% chat ; \002(PRIVMSG) chat\002"
+
+#Channels
+
+set black(say.ro.man.638) "\[MAN\] \002Channels\002 este o comanda prin care puteti vizualiza canalele aflate in memoria eggdrop-ului dvs."
+set black(say.ro.man.639) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.640) "\[MAN\] \002%char%channels\002 ; %botnick% channels ; \002(PRIVMSG) channels\002"
+
+#Nick
+
+set black(say.ro.man.641) "\[MAN\] \002Nick\002 este o comanda prin care puteti schimba nick-ul eggdrop-ului dvs."
+set black(say.ro.man.642) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.643) "\[MAN\] \002%char%nick\002 <nicknou> ; \002%botnick% nick\002 <nicknou> ; \002(PRIVMSG) nick\002 <nicknou>"
+set black(say.ro.man.643_1) "\[MAN\] \002%char%set nick\002 <nicknou> ; \002%botnick% set nick\002 <nicknou> ; \002(PRIVMSG) set nick\002 <nicknou> (setare permanenta)"
+
+#Restart 
+
+set black(say.ro.man.644) "\[MAN\] \002Restart\002 este o comanda prin care puteti da restart eggdrop-ului dvs."
+set black(say.ro.man.645) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.646) "\[MAN\] \002%char%restart\002 ; %botnick% nick restart ; \002(PRIVMSG) restart\002"
+set black(say.ro.man.647) "\[MAN\] \002Retine:\002 Aceasta este folosita DOAR in cazul in care eggdrop-ul are prea mult lag sau functioneaza defectuos."
+
+#Rehash
+
+set black(say.ro.man.648) "\[MAN\] \002Rehash\002 este o comanda prin care puteti reincarca fisierele eggdrop-ului dvs."
+set black(say.ro.man.649) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.650) "\[MAN\] \002%char%rehash\002 ; %botnick% nick rehash ; \002(PRIVMSG) rehash\002"
+
+#Die
+
+set black(say.ro.man.651) "\[MAN\] \002Die\002 este o comanda prin care puteti inchide eggdrop-ului dvs."
+set black(say.ro.man.652) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.653) "\[MAN\] \002%char%die\002 ; %botnick% die ; \002(PRIVMSG) die\002"
+
+#Suspend
+
+set black(say.ro.man.654) "\[MAN\] \002Suspend\002 este o comanda prin care puteti da suspend unui canal din lista eggdrop-ului dvs."
+set black(say.ro.man.655) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.656) "\[MAN\] \002%char%suspend\002 <#canal> \[motiv\] ; \002%botnick% suspend\002 <#canal> \[motiv\] ; \002(PRIVMSG) suspend\002 <#canal> \[motiv\]"
+
+#unSuspend
+
+set black(say.ro.man.657) "\[MAN\] \002unSuspend\002 este o comanda prin care puteti scoate suspend-ul unui canal din lista eggdrop-ului dvs."
+set black(say.ro.man.658) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.659) "\[MAN\] \002%char%unsuspend\002 <#canal> ; \002%botnick% unsuspend\002 <#canal> ; \002(PRIVMSG) unsuspend\002 <#canal>"
+
+#Save
+
+set black(say.ro.man.660) "\[MAN\] \002Save\002 este o comanda prin care puteti salva fisierele eggdrop-ului dvs."
+set black(say.ro.man.661) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.662) "\[MAN\] \002%char%save\002 ; %botnick% save ; \002(PRIVMSG) save\002"
+
+#AddChan
+
+set black(say.ro.man.663) "\[MAN\] \002AddChan\002 este o comanda prin care puteti adauga un canal in lista eggdrop-ului dvs."
+set black(say.ro.man.664) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.665) "\[MAN\] \002%char%addchan\002 <#canal> \[key\] ; \002%botnick% addchan\002 <#canal> \[\key\] ; \002(PRIVMSG) addchan\002 <#canal> \[\key\]\002"
+set black(say.ro.man.666) "\[MAN\] Daca se specifica \002\[key\]\002 eggdrop-ul va intra pe \002<#canal>\002 folosind cheia specificata."
+
+#DelChan
+
+set black(say.ro.man.667) "\[MAN\] \002DelChan\002 este o comanda prin care se sterge un canal din lista eggdrop-ului dvs."
+set black(say.ro.man.668) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.669) "\[MAN\] \002%char%delchan\002 <#canal> <motiv> ; \002%botnick% delchan\002 <#canal> <motiv> ; \002(PRIVMSG) delchan\002 <#canal> <motiv>"
+
+#Purge
+
+set black(say.ro.man.670) "\[MAN\] \002Purge\002 este o comanda prin care se sterge un canal din lista eggdrop-ului DOAR de catre managerul acelui canal."
+set black(say.ro.man.671) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.672) "\[MAN\] \002%char%purge\002 <#canal> <motiv> ; \002%botnick% purge\002 <#canal> <motiv> ; \002(PRIVMSG) purge\002 <#canal> <motiv>"
+
+#AddInfo
+
+set black(say.ro.man.676) "\[MAN\] \002AddInfo\002 este o comanda prin care iti poti adauga un mesaj personalizat la user. Acesta va fii disponibil in \002%char%info\002 dar va fii dat si la intrare pe canal."
+set black(say.ro.man.677) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.678) "\[MAN\] \002%char%addinfo\002 <text|reset> ; \002%botnick% addinfo\002 <text|reset> ; \002(PRIVMSG) addinfo\002 <text|reset>"
+
+#Invite 
+
+set black(say.ro.man.679) "\[MAN\] \002Invite\002 este o comanda care data pe PRIVAT pentru a primi invite pe un anumit canal."
+set black(say.ro.man.680) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.680) "\[MAN\] \002%char%invite\002 <#canal> <nick> ; \002%botnick% invite\002 <#canal> <nick> ; \002(PRIVMSG) invite\002 <#canal> <nick>"
+
+#Say
+
+set black(say.ro.man.681) "\[MAN\] \002Say\002 este o comanda folosita pentru a face eggdrop-ul sa zica un anumit text pe un canal specificat."
+set black(say.ro.man.682) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.683) "\[MAN\] %char%say\002 \[#canal\] <text> ; \002%botnick% say\002 \[#canal\] <text> ; \002(PRIVMSG) say\002 <#canal> <text>"
+
+#Refresh
+
+set black(say.ro.man.684) "\[MAN\] \002Topicrefresh\002 ajuta la mentinerea topicului de pe %chan% prin reaplicarea lui la un interval de timp."
+set black(say.ro.man.685) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.686) "\[MAN\] \002%char%set\002 (+/-)refresh | \002%botnick% set\002 (+/-)refresh ; \002(PRIVMSG) set\002 <#canal> (+/-)refresh"
+
+
+################################################# MAN MODULE/COMENZI NOI #####################################################
+
+
+#NoLogged
+
+set black(say.ro.man.687) "\[MAN\] \002NoLogged\002 este o extra optiune a modulului \002voiceme\002, care odata activata, va permite utilizarea comenzii \002/msg %botnick% voiceme <#canal>\002 si de catre acei utilizatori care nu detin un username Cservice."
+set black(say.ro.man.688) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.689) "\[MAN\] \002%char%set\002 (+/-)nologged | \002%botnick% set\002 (+/-)nologged ; \002(PRIVMSG) set\002 <#canal> (+/-)nologged"
+
+#Colors
+
+set black(say.ro.man.771) "\[MAN\] \002Colors\002 permite utilizatorilor sa-si seteze anumite \002culori\002 personale folosite in mesajele primite de la eggdrop."
+set black(say.ro.man.772) "\[MAN\] Lista culori: bold, underline, red, blue, green, yellow, orange, cyan, grey, brown, purple, pink, black"
+set black(say.ro.man.773) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.774) "\[MAN\] \002%char%myset\002 colors <culoare1 culoare2 culoare3 culoare4> ; \002%botnick% myset\002 colors <culoare1 culoare2 culoare3 culoare4> ; \002(PRIVMSG) myset\002 colors <culoare1 culoare2 culoare3 culoare4>"
+
+#ReportNick
+
+set black(say.ro.man.775) "\[MAN\] \002ReportNick\002 este o comanda care permite userilor regulari sa raporteze un anumit nick pentru ca face reclama sau trimite mesaje spam (de asemenea nivelele de acces \002voice\002 si \002protect\002 o pot folosi)."
+set black(say.ro.man.776) "\[MAN\] \002Retineti\002: Daca doriti ca aceasta comanda sa functioneze, eggdropul trebuie neaparat sa fie operator (@) pe canal (utilizeaza @onotice pentru a informa operatorii)."
+set black(say.ro.man.777) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.778) "\[MAN\] \002%char%set\002 (+/-)reportnick ; \002%botnick% set\002 (+/-)reportnick ; \002(PRIVMSG) set\002 <#canal> (+/-)reportnick"
+set black(say.ro.man.779) "\[MAN\] \002%char%report\002 <nick> <comentariu> ; \002%botnick% report\002 <nick> <comentariu> ; \002(PRIVMSG) report\002 <#canal> <nick> <comentariu>"
+
+#InviteBan
+
+set black(say.ro.man.780) "\[MAN\] \002InviteBan\002 este un modul de protectie impotriva userilor ce trimit eggdrop-ului invitatii pe alte canale."
+set black(say.ro.man.781) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.782) "\[MAN\] \002%char%set\002 (+/-)inviteban ; \002%botnick% set\002 (+/-)inviteban ; \002(PRIVMSG) set\002 <#canal> (+/-)inviteban"
+set black(say.ro.man.783) "\[MAN\] Setari optionale: \002inviteban-reason\002 (setare motiv predefinit); \002inviteban-bantime\002 (setare timp ban in minute)"
+
+#BadHost
+
+set black(say.ro.man.784) "\[MAN\] \002BadHost\002 este un modul de protectie impotriva acelor useri care folosesc IP-uri/vhost-uri \"interzise\" (suporta wildcard-uri)."
+set black(say.ro.man.785) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.786) "\[MAN\] \002%char%set\002 (+/-)badhost ; \002%botnick% set\002 (+/-)badhost ; \002(PRIVMSG) set\002 <#canal> (+/-)badhost"
+set black(say.ro.man.787) "\[MAN\] \002%char%badhost\002 \[#canal\] add <ip|host>\002 ; \002%char%badhost \[#canal\] list\002"
+set black(say.ro.man.787_1) "\[MAN\] \002%char%badhost\002 \[#canal\] add <+cuvant> (adauga exceptie) ; \002%char%badhost\002 \[#canal\] del <nr. lista> (sterge badhost din lista)"
+set black(say.ro.man.788) "\[MAN\] Setari optionale: \002badhost-reason\002; badhost-bantime; \002badhost-bmethod\002"
+
+#NickFlood
+
+set black(say.ro.man.789) "\[MAN\] \002NickFlood\002 este un modul de protectie impotriva userilor care isi schimba nickname-ul prea des intr-un anumit interval de timp."
+set black(say.ro.man.790) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.791) "\[MAN\] \002%char%set\002 (+/-)nickflood ; \002%botnick% set\002 (+/-)nickflood ; \002(PRIVMSG) set\002 <#canal> (+/-)nickflood"
+set black(say.ro.man.792) "\[MAN\] Setari optionale: \002nickflood-reason\002; nickflood-bantime; \002nickflood-warn\002; nickflood-repeat; \002nickflood-banmethod\002; nickflood-banmask"
+
+#SecureMode
+
+set black(say.ro.man.793) "\[MAN\] \002SecureMode\002 este un modul de protectie menit sa previna join/part flood-ul cu boti (userii cu acces sunt exclusi de la verificare). Acest modul este facut special pentru Undernet."
+set black(say.ro.man.794) "\[MAN\] Functioneaza doar cu modurile de canal \002+mD\002 si pe baza unui sistem ce genereaza un anumit cod pentru fiecare user care intra pe canal, pe care trebuie sa-l confirme o singura data (la primul join) daca vor le fie permisa intrarea pe canal."
+set black(say.ro.man.795) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.796) "\[MAN\] \002%char%set\002 (+/-)securemode ; \002%botnick% set\002 (+/-)securemode ; \002(PRIVMSG) set\002 <#canal> (+/-)securemode"
+set black(say.ro.man.797) "\[MAN\] \002%char%securemode add\002 <ip|host> (suporta wildcard-uri) ; \002%char%securemode del\002 <nr. lista> ; \002%char%securemode list\002"
+
+#VoiceMe
+
+set black(say.ro.man.820) "\[MAN\] \002VoiceMe\002 este un modul prin care li se poate oferi, userilor logati la \002*X*\002, posibilitatea de a primi \002voice (+v)\002 folosind comanda \002/msg %botnick% voiceme <#canal>\002 (vezi si \002%char%man onlyonmode\002)."
+set black(say.ro.man.821) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.822) "\[MAN\] \002%char%set\002 (+/-)voiceme ; \002%botnick% set\002 (+/-)voiceme ; \002(PRIVMSG) set\002 <#canal> (+/-)voiceme"
+set black(say.ro.man.823) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#OnlyOnMode
+
+set black(say.ro.man.824) "\[MAN\] \002OnlyOnMode\002 este o extra optiune a modulului \002voiceme\002, care odata activata, va permite utilizarea comenzii \002/msg %botnick% voiceme <#canal>\002 NUMAI atunci cand \002modul +m\002 este setat pe canal."
+set black(say.ro.man.825) "\[MAN\] De asemenea, eggdrop-ul va trimite pe canal, la un anumit interval de timp predefinit, un mesaj prin care toti userii sa afle ca, daca sunt inregistrati si logati la \002*X*\002, pot folosi comanda de mai sus pentru a primi \002voice (+v)\002 pe acel canal. Daca nu au un \002username Cservice\002 li se specifica in acelasi mesaj unde isi pot a crea unul."
+set black(say.ro.man.826) "\[MAN\] \002Retineti\002: Aceasta extra optiune functioneaza DOAR impreuna cu modulul \002voiceme\002 si pe canalele \002+m\002 (moderate) (vezi si \002%char%man voiceme\002)."
+set black(say.ro.man.827) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.828) "\[MAN\] \002%char%set\002 (+/-)onlyonmode ; \002%botnick% set\002 (+/-)onlyonmode ; \002(PRIVMSG) set\002 <#canal> (+/-)onlyonmode"
+
+#BanStats
+
+set black(say.ro.man.834) "\[MAN\] \002BanStats\002 este un modul ce va permite eggdrop-ului sa tine o statistica referitoare la fiecare kick si ban executat pe un anumit canal."
+set black(say.ro.man.835) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.836) "\[MAN\] \002%char%set\002 (+/-)banstats ; \002%botnick% set\002 (+/-)banstats ; \002(PRIVMSG) set\002 <#canal> (+/-)banstats"
+set black(say.ro.man.837) "\[MAN\] \002%char%banstats\002 <total|reset> ; \002%botnick% banstats\002 <total|reset> ; \002(PRIVMSG) banstats\002 <#canal> <total|reset>\002"
+
+#GuestNick
+
+set black(say.ro.man.838) "\[MAN\] \002GuestNick\002 este un modul care odata activat informeaza toti userii ce intra pe canal si folosesc un anumit \"cuvant\" definit in nick-ul lor."
+set black(say.ro.man.839) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.840) "\[MAN\] \002%char%guestnick\002 <ON|OFF> ; \002%botnick% guestnick\002 <ON|OFF> ; \002(PRIVMSG) guestnick\002 <#canal> <ON|OFF>"
+set black(say.ro.man.841) "\[MAN\] Setari optionale: \002%char%set guestnick-msgmethod\002 <metoda> (CHAN | NOTICE | PRIVMSG) ; \002%char%set guestnick-message\002 <mesaj>"
+
+#cp
+
+set black(say.ro.man.842) "\[MAN\] \002cp\002 este un modul care permite copierea setarilor unui canal pe alt canal, incluzand atat userii cu access, cat si lista de banuri, setarile canalului sau lista badchans."
+set black(say.ro.man.843) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.844) "\[MAN\] %char%cp\002 <optiune> <#canal1> <#canal2> ; \002%botnick% cp\002 <optiune> <#canal1> <#canal2> ; \002(PRIVMSG) cp\002 <optiune> <#canal1> <#canal2>"
+set black(say.ro.man.845) "\[MAN\] Ca \002<optiuni>\002 avem: \002<userlist>\002 (copiaza userlist-ul canalului); \002<banlist>\002 (copiaza banlist-ul canalului); \002<settings>\002 (copiaza setarile canalului); \002<badchans>\002 (copiaza lista badchans)"
+
+#VoiceOnMsg 
+
+set black(say.ro.man.846) "\[MAN\] \002VoiceOnMsg\002 este un modul care odata activat va face ca eggdrop-ul sa ofere voice (+v) utilizatorilor activi ce scriu un anumit numar predefinit de linii pe canal."
+set black(say.ro.man.847) "\[MAN\] Totodata, le va lua acel voice (-v) utilizatorilor inactivi, cei cu un idle mai mare decat perioada de timp predefinita."
+set black(say.ro.man.848) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.849) "\[MAN\] \002%char%set\002 (+/-)voiceonmsg ; \002%botnick% set\002 (+/-)voiceonsmg ; \002(PRIVMSG) set <#canal> (+/-)voiceonsmg"
+set black(say.ro.man.850) "\[MAN\] Setari optionale: \002%char%set voiceonmsg-linenum\002 <nr. linii> (setare linii default) ; \002%char%set voiceonmsg-idletime\002 <perioada> (setare interval idle default)"
+
+#Troll
+
+set black(say.ro.man.851) "\[MAN\] \002Troll\002 este o comanda prin care un utilizator va primi ban cu un motiv implicit de \002troll\002 (vezi si \002%char%man showtroll\002)."
+set black(say.ro.man.852) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.853) "\[MAN\] \002%char%troll\002 <nick> ; \002%botnick% troll\002 <nick> ; \002(PRIVMSG) troll\002 <#canal> <nick>"
+set black(say.ro.man.854) "\[MAN\] Setari optionale: \002%char%set\002 troll-reason (motiv ban default) ; \002(PRIVMSG) set\002 <#canal> troll-reason (motiv ban default)"
+
+#vr
+
+set black(say.ro.man.856) "\[MAN\] \002vr\002 este o comanda prin care un utilizator sau mai multi vor primi ban cu un motiv implicit de \002virus/troian\002."
+set black(say.ro.man.857) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.858) "\[MAN\] \002%char%vr\002 <nick|host> ; \002%botnick% vr\002 <nick|host> ; \002(PRIVMSG) vr\002 <#canal> <nick|host>"
+set black(say.ro.man.859) "\[MAN\] Setari optionale: \002vr-reason\002 (motiv ban default); \002vr-banmask\002 (metoda banmask default); \002vr-bantime\002 (timp ban default)"
+set black(say.ro.man.860) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#XOnly
+
+set black(say.ro.man.861) "\[MAN\] \002XOnly\002 este un modul de administrare al canalului prin botul oficial al Undernet \002*X*\002."
+set black(say.ro.man.862) "\[MAN\] Acest modul face ca ggdrop-ul sa efecteze toate comenzile BlackToolS prin \002*X*\002, chiar daca nu este operator (@)."
+set black(say.ro.man.863) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.864) "\[MAN\] \002%char%set\002 (+/-)xonly ; \002%botnick% set\002 (+/-)xonly ; \002(PRIVMSG) set\002 <#canal> (+/-)xonly"
+set black(say.ro.man.865) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#AutoTopic
+
+set black(say.ro.man.866) "\[MAN\] \002AutoTopic\002 este un modul care va face ca eggdrop dvs. sa reseteze topicul TOPIC-ul si URL-ul canalului de fiecare data cand a fost schimbat de cineva."
+set black(say.ro.man.867) "\[MAN\] Daca canalul este in idle, topicul nu va fi resetat in acel interval de timp. (idle = niciun utilizator nu a intrat pe canal)."
+set black(say.ro.man.868) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.869) "\[MAN\] \002%char%set\002 (+/-)autotopic ; \002%botnick% set\002 (+/-)autotopic ; \002(PRIVMSG) autotopic\002 <#canal> (+/-)autotopic"
+set black(say.ro.man.870) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#MySet
+
+set black(say.ro.man.871) "\[MAN\] \002MySet\002 este o comanda prin care fiecare user cu acces isi poate personaliza anumite optiuni."
+set black(say.ro.man.872) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.873) "\[MAN\] \002%char%myset\002 <optiune> \[descriere\] <show|reset> ; \002(PRIVMSG) myset\002 <optiune> \[descriere\] <show|reset>"
+set black(say.ro.man.874) "\[MAN\] Ca \002<optiune>\002 avem:"
+set black(say.ro.man.875) "\[MAN\] \002lang\002 <limba> ; \002output\002 <metoda> ; \002mychar\002 <trigger> ; \002colors\002 <culori> ; \002noteexpire\002 <perioda> ; \002autoinvite\002 <ON|OFF>"
+set black(say.ro.man.877) "\[MAN\] \002auto\002 (+/-)v/o (AUTOMODE OP/VOICE) ; \002greet\002 <mesaj personal de intampinare> ; \002mychan\002 <#canal>"
+set black(say.ro.man.878) "\[MAN\] \002auto\002 (+/-)v/o \[-global\] (AUTOMODE OP/VOICE) ; \002addhost/delhost\002 <host> ; \002handle\002 <handle nou> ; \002greet\002 <mesaj personal de intampinare> ; \002mychan\002 <#canal> ; \002notes\002 <ON|OFF>"
+
+#ho
+
+set black(say.ro.man.882) "\[MAN\] \002ho\002 reprezinta o comanda prin care puteti da \002halfop/dehalfop\002 (+h %) userilor de pe canal (rar folosita)."
+set black(say.ro.man.882_1) "\[MAN\] Daca nu e specificat niciun nick si nu aveti \002halfop\002 (+h %) pe canal, atunci eggdrop-ul iti va da halfop (+h %)."
+set black(say.ro.man.883) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.884) "\[MAN\] \002%char%ho\002 <nick> ; \002%botnick% ho\002 <nick> ; \002(PRIVMSG) ho\002 <#canal> <nick>"
+set black(say.ro.man.884_1) "\[MAN\] \002%char%ho +\002 (mass halfop) ; \002%char%ho -\002 (mass halfdeop)"
+
+#r
+
+set black(say.ro.man.885) "\[MAN\] \002r\002 reprezinta o comanda prin care puteti reimprospata/ reincarca topicul curent al unui canal (daca exista un topic)."
+set black(say.ro.man.886) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.887) "\[MAN\] \002%char%r\002 \[#canal\] ; \002%botnick% r\002 \[#canal\] ; \002(PRIVMSG) r\002 <#canal>"
+
+#SeenLastMsg
+
+set black(say.ro.man.888) "\[MAN\] \002SeenLastMsg\002 este o setare suplimentara la \002modulul seen\002 care afiseaza si ultimul mesaj scris de respectivul nick cautat de pe acel canal."
+set black(say.ro.man.889) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.890) "\[MAN\] \002%char%set\002 (+/-)seenlastmsg ; \002%botnick% set\002 (+/-)seenlastmsg ; \002(PRIVMSG) set\002 <#canal> (+/-)seenlastmsg"
+set black(say.ro.man.891) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Quote
+
+set black(say.ro.man.892) "\[MAN\] \002Quote\002 este un modul de citate (quote), cu comenzi publice de adaugare, stergere si afisare a citatelor (include si functie de cautare)."
+set black(say.ro.man.893) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.894) "\[MAN\] \002%char%set\002 (+/-)quote ; \002%botnick% set\002 (+/-)quote ; \002(PRIVMSG) set\002 <#canal> (+/-)quote"
+set black(say.ro.man.895) "\[MAN\] \002%char%q\002 \[#canal\] <citat> (adaugare quote) ; \002%char%q\002 \[#canal\] <cuvant> (cauta quote) ; \002%char%q\002 \[#canal\] <list> ; \002%char%q\002 \[#canal\] del <nr quote>"
+set black(say.ro.man.896) "\[MAN\] Pentru a adauga mai mult de o propozitie utilizati: \002%char%q add \[#canal\] <citat1>~<citat2>..\002 si eggdrop-ul va arata nota ca 2 propozitii diferite."
+
+#QuoteOfDay
+
+set black(say.ro.man.897) "\[MAN\] \002QuoteOfDay\002 este un modul care care odata activat va afisa aleatoriu citate (quote) stocate la un anumit interval de timp."
+set black(say.ro.man.898) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.899) "\[MAN\] %char%set\002 (+/-)quoteofday ; \002%botnick% set\002 (+/-)quoteofday ; \002(PRIVMSG) set\002 <#canal> (+/-)quoteofday"
+set black(say.ro.man.900) "\[MAN\] Setari optionale: \002%char%set\002 quoteofday-showtime <perioada> ; \002(PRIVMSG) set\002 <#canal> quoteofday-showtime <perioada> (X\002h\002 = ore ; X\002m\002 = minute)"
+
+#Note
+
+set black(say.ro.man.901) "\[MAN\] \002Note\002 este un modul care odata activat le va permite utilizatorilor sa stocheze note si sa trimita mesaje intre ei."
+set black(say.ro.man.902) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.903) "\[MAN\] \002%char%set\002 (+/-)note ; \002%botnick% set\002 (+/-)note ; \002(PRIVMSG) set\002 <#canal> (+/-)note"
+set black(say.ro.man.904) "\[MAN\] \002%char%note\002 send <handle> <mesaj> ; \002%char%note\002 <read|list|inbox> ; \002%char%note\002 del <nr. nota|all>"
+set black(say.ro.man.905) "\[MAN\] Pentru a adauga mai mult de o propozitie utilizati: \002%char%note send <user> <mesaj1>~<mesaj2>\002.. si eggdrop-ul va arata nota ca 2 propozitii diferite."
+
+#bMethod
+
+set black(say.ro.man.906) "\[MAN\] \002bMethod\002 (BanMethod) stabileste felul in care eggdrop-ul va pedepsi utilizatorii (warn/kick/ban). Si anume, prima oara warn, apoi Kick si apoi Ban (daca se repeta ofensarea)."
+set black(say.ro.man.907) "\[MAN\] Aveti la dispozitie urmatoarele metode de ban:"
+set black(say.ro.man.908) "\[MAN\] \002#1\002 warn ; \002#2\002 kick ; \002#3\002 ban ; \002#4\002 warn -> kick ; \002#5\002 warn -> kick -> ban ; \002#6\002 kick -> ban ; \002#7\002 warn -> ban"
+set black(say.ro.man.909) "\[MAN\] SINTAXA FOLOSIRE: \002%char%set\002 <setare> <nr. metoda> ; \002%botnick% set\002 <setare> <nr. metoda> ; \002(PRIVMSG) set\002 <#canal> <setare> <nr. metoda>"
+set black(say.ro.man.910) "\[MAN\] \002BanMethod\002 (bMethod) stabileste felul in care eggdrop-ul va pedepsi utilizatorii (warn/kick/ban). Si anume, prima oara warn, apoi Kick si apoi Ban (daca se repeta ofensarea)."
+
+#BanMask
+
+set black(say.ro.man.911) "\[MAN\] \002BanMask\002 stabileste felul in care eggdrop-ul va adauga banurile."
+set black(say.ro.man.912) "\[MAN\] Aveti la dispozitie urmatoarele metode de banmask-uri pentru ban:"
+set black(say.ro.man.913) "\[MAN\] \002#1\002 *!*@host ; \002#2\002 *!user@host ; \002#3\002 nick!user@host ; \002#4\002 nick!*@* ; \002#5\002 *!user@*"
+set black(say.ro.man.914) "\[MAN\] SINTAXA FOLOSIRE: \002%char%set\002 <setare> <nr. metoda> ; \002%botnick% set\002 <setare> <nr. metoda> ; \002(PRIVMSG) set\002 <#canal> <setare> <nr. metoda>"
+
+#Url
+
+set black(say.ro.man.916) "\[MAN\] \002Url\002 indica URL-ul site-ului web al canalului (maximum 50 de caractere). Adresa URL poate fi vizualizata la \002%char%info <#canal>\002. Daca nu este specificat niciun URL, setarea actuala a adresei URL este goala."
+set black(say.ro.man.917) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.918) "\[MAN\] \002%char%set\002 url \[url(s)\] ; \002%botnick% set\002 url \[url(s)\] ; \002(PRIVMSG) set\002 <#canal> url \[url(s)\]"
+set black(say.ro.man.919) "\[MAN\] Pentru a arata URL-ul langa motivul banurilor, folositi: \002%char%set\002 +showurl ; \002%botnick% set\002 +showurl ; \002(PRIVMSG) set\002 <#canal> +showurl"
+set black(say.ro.man.920) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Timer
+
+set black(say.ro.man.921) "\[MAN\] \002Timer\002 este un modul \002PRO\002 prin care puteti porni/opri timere ale proceselor si chiar vedea lista timerelor active."
+set black(say.ro.man.921_1) "\[MAN\] \002ATENTIE!\002 NU umblati cu acest modul decat daca stiti foarte bine ce faceti!"
+set black(say.ro.man.922) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.923) "\[MAN\] \002%char%timer\002 start \[#canal\] <timer:setare> ; \002%char%timer\002 kill \[#canal\] <nr timer> (din lista) ; \002%char%timer\002 list"
+
+#Enable
+
+set black(say.ro.man.924) "\[MAN\] \002Enable\002 este o comanda prin care se ACTIVEAZA o comanda dezactivata cu disable. Daca este folosita optiunea \002global\002, comanda va fi activata pe toate canalele eggdrop-ului."
+set black(say.ro.man.924_1) "\[MAN\] \002ATENTIE\002: Optiunea de activare globala este disponibila numai pentru comenzi, nu si pentru useri."
+set black(say.ro.man.925) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.926) "\[MAN\] %char%enable\002 \[#canal\] <comanda|all> \[user\] \[global\] ; \002(PRIVMSG) enable\002 <#canal> <comanda|all> \[user\] \[global\]"
+
+#Disable
+
+set black(say.ro.man.927) "\[MAN\] \002Disable\002 este o comanda prin care se DEZACTIVEAZA o comanda anume. Daca este folosita optiunea \002global\002, comanda va fi dezactivata pe toate canalele eggdrop-ului."
+set black(say.ro.man.927_1) "\[MAN\] \002ATENTIE\002: Optiunea de dezactivare globala este disponibila numai pentru comenzi, nu si pentru useri."
+set black(say.ro.man.928) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.929) "\[MAN\] %char%disable\002 \[#canal\] <comanda|all> \[user\] \[global\] ; \002(PRIVMSG) disable\002 <#canal> <comanda|all> \[user\] \[global\]"
+
+#Stats
+
+set black(say.ro.man.930) "\[MAN\] \002Stats\002 afiseaza informatii despre activitatea unui user cu acces (statistica banuri si comenzi utilizate, etc.)."
+set black(say.ro.man.930_1) "\[MAN\] Pentru informatii despre \002activitatea unui user\002 vezi: \002%char%man stats\002"
+set black(say.ro.man.931) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.932) "\[MAN\] \002%char%stats\002 \[#canal>\] <nick> \[total\] ; \002%botnick% stats\002 \[#canal>\] <nick> \[total\] ; \002(PRIVMSG) stats\002 \[#canal>\] <nick> \[total\]"
+set black(say.ro.man.932_1) "\[MAN\] \002%char%stats\002 \[#canal>\] <nick> \[total|reset\] ; \002(PRIVMSG) stats\002 \[#canal>\] <nick> \[total|reset\]"
+
+#Output
+
+set black(say.ro.man.933) "\[MAN\] \002Output\002 este o comanda care specifica modul in care eggdrop-ul va raspunde la mesajele sau comenzile folosite de dvs."
+set black(say.ro.man.934) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.935) "\[MAN\] \002%char%myset output\002 <metoda> ( CHAN | NOTICE ) ; \002(PRIVMSG) myset output\002 <metoda> ( CHAN | NOTICE )"
+
+#GreetLine
+
+set black(say.ro.man.936) "\[MAN\] \002Greet\002 seteaza mesajul tau de intampinare. Acesta va fi afisat la \002%char%info\002 si/sau atunci cand intrati pe un canal (a doua este valabila doar daca \002+greet\002 este activat)."
+set black(say.ro.man.937) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.938) "\[MAN\] \002%char%myset greet\002 <mesaj|reset> ; \002%botnick% myset\002 greet <mesaj|reset> ; \002(PRIVMSG) myset greet\002 <mesaj|reset>  (\002reset\002 sterge mesajul de intampinare)"
+
+#UnSet
+
+set black(say.ro.man.939) "\[MAN\] \002UnSet\002 este o comanda prin care se poate reseta orice optiune a eggdrop-ului (sau flaguri)."
+set black(say.ro.man.940) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.941) "\[MAN\] %char%unset\002 <flag|str|optiune> ; \002%botnick% unset\002 <flag|str|optiune> ; \002(PRIVMSG) unset\002 <#canal> <flag|str|optiune>"
+set black(say.ro.man.942) "\[MAN\] \002%char%unset\002 global <flag|str|optiune> (unset pe toate canalele)"
+set black(say.ro.man.943) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#NextShortCmd
+
+set black(say.ro.man.944) "\[MAN\] \002NextShortCmd\002 este versiunea scurta a modulului \002next\002 folosita pe canalele de ajutor prin care se asista utilizatorii care au nevoie de ajutor."
+set black(say.ro.man.945) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.946) "\[MAN\] %char%set\002 (+/-)nextshortcmd ; \002%botnick% set\002 (+/-)nextshortcmd ; \002(PRIVMSG) set\002 <#canal> (+/-)nextshortcmd"
+set black(say.ro.man.947) "\[MAN\] Comenzi: \002%char%n\002 (voice userul urmator) ; \002%char%n\002 list (afisare lista) ; \002%char%h\002 <nick> (helped); \002%char%b\002 <nick> (noidle ban); \002%char%skip\002 <nick>"
+
+#AutoInvite
+
+set black(say.ro.man.948) "\[MAN\] \002AutoInvite\002 este o noua setare personala, prima de genul acesta, prin care orice utilizator cu access daca primeste kick/ban, eggdrop-ul ii va scoate banul si ii va trimite invite pe acel canal."
+set black(say.ro.man.949) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.950) "\[MAN\] \002%char%myset autoinvite\002 <#canal> <ON|OFF> ; \002%botnick% autoinvite\002 <#canal> <ON|OFF> ; \002(PRIVMSG) <#canal> autoinvite\002 <#canal> <ON|OFF>"
+
+#Show
+
+set black(say.ro.man.952) "\[MAN\] \002Show\002 este o comanda prin care se pot vedea/verifica valorile fiecarei setari, precum si daca un anumit modul este activat sau nu pe canal."
+set black(say.ro.man.953) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.954) "\[MAN\] \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Link
+
+set black(say.ro.man.955) "\[MAN\] \002Link\002 este un modul care permite sincronizarea tuturor modulelor de protectie pe 2 sau mai multe canale in acelasi timp."
+set black(say.ro.man.956) "\[MAN\] Odata activat, eggdrop-ul va adauga, simultan, aceleasi ban-uri de pe un anumit canal pe toate celelalte canale si viceversa (functioneaza doar intre canalele linkate, nu si celelalte)."
+set black(say.ro.man.957) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.958) "\[MAN\] \002%char%link\002 <#canal1> <#canal2> / <all> ; \002%char%link del\002 <#canal> ; \002%char%link <list|reset>\002"
+set black(say.ro.man.958_1) "\[MAN\] De asemenea functioneaza si asa: \002%char%b\002 <nick|host> \[durata\] link \[motiv\] ; \002%char%ub\002 <nick|host> link"
+
+#AccessOnly
+
+set black(say.ro.man.959) "\[MAN\] \002AccessOnly\002 este o extra optiune a modulului \002topwords\002 care restrictioneaza functionarea acestuia doar cu si pentru userii ce au access la eggdrop."
+set black(say.ro.man.960) "\[MAN\] Daca aceasta extra optiune nu este activata, modulul \002topwords\002 va functiona pentru toti utilizatorii canalului (atat pentru cei cu access, cat si pentru ceilalti)."
+set black(say.ro.man.961) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.962) "\[MAN\] \002%char%set\002 (+/-)accessonly ; \002%botnick% set\002 (+/-)accessonly ; \002(PRIVMSG) set\002 <#canal> (+/-)accessonly"
+set black(say.ro.man.963) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#SeenReply
+
+set black(say.ro.man.964) "\[MAN\] \002SeenReply\002 este o extra optiune a modulului \002seen\002 care va face ca eggdrop-ul sa trimita un mesaj de informare celui care tocmai a fost cautat prin comanda \002%char%seen\002."
+set black(say.ro.man.965) "\[MAN\] Respectivul mesaj de avertizare include informatii despre persoana care l-a cautat, precum si data, ora sau canalul unde a avut loc cautarea."
+set black(say.ro.man.966) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.967) "\[MAN\] \002%char%set\002 (+/-)seenreply ; \002%botnick% set\002 (+/-)seenreply ; \002(PRIVMSG) set\002 <#canal> (+/-)seenreply"
+
+#SpamJoinMessage
+
+set black(say.ro.man.968) "\[MAN\] \002SpamJoinMessage\002 este o extra optiune a modulului de protectie \002antispam\002 care va face ca eggdrop-ul sa trimita un mesaj privat de verificare, continand un text predefinit, fiecarui user care intra pe canal."
+set black(say.ro.man.969) "\[MAN\] SINTAXE FOLOSIRE:"
+set black(say.ro.man.970) "\[MAN\] \002%char%set\002 (+/-)spamjoinmessage ; \002%botnick% set\002 (+/-)spamjoinmessage ; \002(PRIVMSG) set\002 <#canal> (+/-)spamjoinmessage"
+set black(say.ro.man.971) "\[MAN\] \002%char%set\002 antispam-message <mesaj> ; \002%botnick% set\002 antispam-message <mesaj> ; \002(PRIVMSG) set\002 <#canal> <mesaj> (mesaj join predefinit)"
+set black(say.ro.man.972) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#StrictSecured
+
+set black(say.ro.man.973) "\[MAN\] \002StricSecured\002 este o extra optiune a modulului de protectie \002securemode\002 menit sa previna join/part flood-ul cu boti."
+set black(say.ro.man.974) "\[MAN\] Odata activata, aceasta extra optiune va genera un random cod pentru fiecare user care intra pe canal, de fiecare data cand acesta re-intra, pe care trebuie sa-l confirme daca doreste sa-i fie permisa intrarea pe canal."
+set black(say.ro.man.975) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.976) "\[MAN\] \002%char%set\002 (+/-)strictsecured ; \002%botnick% set\002 (+/-)strictsecured ; \002(PRIVMSG) set\002 <#canal> (+/-)strictsecured"
+
+#NoteExpire
+
+set black(say.ro.man.977) "\[MAN\] \002NoteExpire\002 este o extra optiune a modulului \002note\002 prin care fiecare user isi poate seta o anumita perioada de timp predefinita pentru expirarea notelor (stergerea lor automata din baza)."
+set black(say.ro.man.977_1) "\[MAN\] Format perioada: X\002d\002 = zile ; X\002h\002 = ore"
+set black(say.ro.man.978) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.979) "\[MAN\] \002%char%myset\002 noteexpire <perioda> ; \002%botnick% myset\002 noteexpire <perioda> ; \002(PRIVMSG) myset\002 noteexpire <perioda>"
+
+#MyChan
+
+set black(say.ro.man.980) "\[MAN\] \002MyChan\002 este o comanda prin care fiecare user isi poate seta un \002canal de baza\002 (mychan) pentru care, atunci cand se trimit comenzi catre eggdrop prin PRIVMSG, sa nu mai fie necesar a se specifica un <#canal>, eggdrop-ul aplicand automat comenzile direct pe \002mychan\002."
+set black(say.ro.man.981) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.982) "\[MAN\] \002%char%myset\002 mychan <#canal> ; \002%botnick% myset\002 mychan <#canal> ; \002(PRIVMSG) myset\002 mychan <#canal>"
+
+#Invisible
+
+set black(say.ro.man.983) "\[MAN\] \002Invisible\002 face ca un anumit canal sa devina invizibil pentru restul userilor cu access si sa nu mai apara in lista de canale ale eggdrop-ului."
+set black(say.ro.man.984) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.985) "\[MAN\] \002%char%set\002 (+/-)invisible ; \002%botnick% set\002 (+/-)invisible ; \002(PRIVMSG) set\002 (+/-)invisible"
+set black(say.ro.man.986) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#MyChar
+
+set black(say.ro.man.987) "\[MAN\] \002MyChar\002 permite fiecarui utilizator sa isi aleaga si sa-si seteze un \002trigger\002 implicit la care vor ca eggdrop-ul sa reactioneze (sa raspunda la comenzi)."
+set black(say.ro.man.988) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.989) "\[MAN\] \002%char%myset\002 mychar <trigger> ; \002%botnick% myset\002 mychar <trigger> ; \002(PRIVMSG) myset\002 mychar <trigger>"
+
+#Omsg
+
+set black(say.ro.man.1207) "\[MAN\] \002Omsg\002 trimite un mesaj specific tuturor utilizatorilor care au \002OP (@/&/)\002 pe un anumit canal."
+set black(say.ro.man.1208) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1209) "\[MAN\] %char%omsg\002 <#canal|all> <mesaj> ; \002%botnick% omsg\002 <#canal|all> <mesaj> ; \002(PRIVMSG) omsg\002 <#canal|all> <mesaj>"
+
+#ShowBadChan
+
+set black(say.ro.man.1210) "\[MAN\] \002ShowBadChan\002 este o extra optiune a modulului \002BadChan\002 care trimite un mesaj specific tuturor celor cu \002OP (@/&/)\002 cu privire la userul banat si canalele interzise pe care se afla."
+set black(say.ro.man.1211) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1212) "\[MAN\] \002%char%set\002 (+/-)showbadchan ; \002%botnick% set\002 (+/-)showbadchan ; \002(PRIVMSG) set\002 <#canal> (+/-)showbadchan"
+set black(say.ro.man.1213) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#ShowTroll
+
+set black(say.ro.man.1214) "\[MAN\] \002ShowTroll\002 este o extra optiune a comenzii \002Troll\002 care, odata activata va face ca eggdrop-ul sa afiseze userilor cu acces, prin notice la join, o lista cu trollii zilei curente (lista se reseteaza in fiecare zi la orele 24:00)."
+set black(say.ro.man.1215) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1216) "\[MAN\] \002%char%set\002 (+/-)showtroll ; \002%botnick% set\002 (+/-)showtroll ; \002(PRIVMSG) set\002 <#canal> (+/-)showtroll"
+set black(say.ro.man.1217) "\[MAN\] Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Forward
+
+set black(say.ro.man.1218) "\[MAN\] \002Forward\002 redirectioneaza toate mesajele private primite de eggdrop catre un anumit canal (cu exceptia mesajelor private de la userii cu acces)."
+set black(say.ro.man.1219) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1220) "\[MAN\] \002%char%set\002 (+/-)forward ; \002%botnick% set\002 (+/-)forward ; \002(PRIVMSG) set\002 <#canal> (+/-)forward"
+
+#ExpireBans
+
+set black(say.ro.man.1221) "\[MAN\] \002ExpireBans\002 stabileste perioada prestabilita de timp dupa care toate banurile de pe un canal vor fi scoase. Daca se specifica \0020\002 la aceasta optiune, eggdrop-ul nu va scoate niciodata banurile."
+set black(say.ro.man.1222) "\[MAN\] Format perioada: X\002h\002 = ore ; X\002m\002 = minute"
+set black(say.ro.man.1223) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1224) "\[MAN\] \002%char%set\002 expirebans <perioada> ; \002%botnick% set\002 expirebans <perioada> ; \002(PRIVMSG) set\002 <#canal> expirebans <perioada>"
+set black(say.ro.man.1225) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#mb
+
+set black(say.ro.man.1226) "\[MAN\] \002mb\002 baneaza un anumit user automat pe IDENT si cu un motiv dat (folosit pentru clienti IRC precum: mibbit, irccloud, etc.)."
+set black(say.ro.man.1227) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1228) "\[MAN\] \002%char%mb\002 <nick> \[motiv\] ; \002%botnick% mb\002 <nick> \[motiv\] ; \002(PRIVMSG) mb\002 <#canal> <nick> \[motiv\]"
+set black(say.ro.man.1229) "\[MAN\] Setari optionale: \002mb-reason\002 (motiv predefinit); \002mb-bantime\002 (timp ban predefinit)"
+
+
+################################################# MAN EGG #####################################################
+
+
+#Egg
+
+set black(say.ro.man.990) "\[MAN\] \002Egg\002 este un modul care permite configurarea anumitor setari/optiuni din structura fisierului \002.conf\002 al eggdrop-ului."
+set black(say.ro.man.991) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.992) "\[MAN\] \002%char%egg\002 <optiune> <setare> ; \002%botnick% egg\002 <optiune> <setare> ; \002(PRIVMSG) egg\002 <optiune> <setare>"
+
+#Egg CmdChar
+
+set black(say.ro.man.994) "\[MAN\] \002CmdChar\002 este o comanda prin care puteti schimba \002cmdchar-ul default\002 la care vreti ca eggdrop-ul sa reactioneze (se pot adauga, de asemenea, mai multe cmdchar-uri)."
+set black(say.ro.man.995) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.996) "\[MAN\] \002%char%set cmdchar\002 <trigger1 trigger2 ..> ; \002%botnick% set cmdchar\002 <trigger1 trigger2 ..> ; \002(PRIVMSG) set cmdchar\002 <trigger1 trigger2 ..>"
+
+#Egg DefaultLang
+
+set black(say.ro.man.998) "\[MAN\] \002DefaultLang\002 este o comanda prin care puteti schimba limba default a scriptului BlackToolS."
+set black(say.ro.man.998_1) "\[MAN\] Limbi disponibile: \002RO\002 = ROMANA ; \002EN\002 = ENGLEZA"
+set black(say.ro.man.999) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1100) "\[MAN\] \002%char%set defaultlang\002 <limba> ; \002%botnick% set defaultlang\002 <limba> ; \002(PRIVMSG) set defaultlang\002 <limba>"
+
+#Egg HomeChan
+
+set black(say.ro.man.1102) "\[MAN\] \002HomeChan\002 este o comanda prin care puteti schimba canalul de origine (homechan) al eggdrop-ului. Canalul unde va intra eggdrop-ul sau va afisa anumite informatii, raporta kick/ban-urile si abuzurile."
+set black(say.ro.man.1103) "\[MAN\] \002Retineti\002: acest canal este si unul \002static\002 (eggdrop-ul NU va da purge/cycle acestui canal) si de obicei este un canal privat/secret (suporta DOAR un singur canal de tip \002homechan\002)."
+set black(say.ro.man.1104) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1105) "\[MAN\] \002%char%set homechan\002 <#canal> ; \002%botnick% set homechan\002 <#canal> ; \002(PRIVMSG) set homechan\002 <#canal>"
+
+#Egg RealName
+
+set black(say.ro.man.1107) "\[MAN\] \002RealName\002 este o comanda prin care puteti schimba textul din campul \002real-name\002 pe care il afiseaza eggdrop-ul pe IRC (necesita restart pentru activare)."
+set black(say.ro.man.1108) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1109) "\[MAN\] \002%char%set realname\002 <text> ; \002%botnick% set realname\002 <text> ; \002(PRIVMSG) set realname\002 <text>"
+
+#Egg Away
+
+set black(say.ro.man.1111) "\[MAN\] \002Away\002 este o comanda prin care puteti seta un mesaj de away pe care eggdrop-ul sa-l seteze automat la conectarea pe IRC."
+set black(say.ro.man.1112) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1113) "\[MAN\] \002%char%set away\002 <mesaj away> ; \002%botnick% set away\002 <mesaj away> ; \002(PRIVMSG) set away\002 <mesaj away>"
+set black(say.ro.man.1113_1) "\[MAN\] \002%char%set away\002; \002%botnick% set away\002; \002(PRIVMSG) set away\002 (dezactivare away)"
+
+#Egg DefaultOutput
+
+set black(say.ro.man.1115) "\[MAN\] \002DefaultOutput\002 este o comanda prin care puteti schimba metoda implicita de primire a mesajelor de la eggdrop (metoda implicita este \002CHAN\002)."
+set black(say.ro.man.1115_1) "\[MAN\] Metode disponibile: \0020\002 = NOTICE ; \002 1\002 = CHAN ; \002 2\002 = PRIVMSG"
+set black(say.ro.man.1116) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1117) "\[MAN\] \002%char%set defaultoutput\002 <metoda> ; \002(PRIVMSG) set defaultoutput\002 <metoda>"
+
+#Egg FloodMenuProt
+
+set black(say.ro.man.1119) "\[MAN\] \002FloodMenuProt\002 este o comanda menita sa protejeze eggdrop-ul de \002flood\002. Stabileste cate comenzi/secunde poate un user trimite eggdrop-ului inainte de a fi considerat flood, urmand ca sa ignore toate comenzile de la acel user pentru o perioada scurta de timp."
+set black(say.ro.man.1120) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1121) "\[MAN\] \002%char%set floodmenuprot\002 <nr. comenzi:secunde> ; \002%botnick% set floodmenuprot\002 <nr. comenzi:secunde> ; \002(PRIVMSG) set floodmenuprot\002 <nr. comenzi:secunde>"
+
+#Egg UserFloodMsgProt
+
+set black(say.ro.man.1123) "\[MAN\] \002UserFloodMsgProt\002 este o comanda menita sa protejeze eggdrop-ul de \002PRIVMSG flood\002. Stabileste cate mesage/secunde va accepta eggdrop-ul in privat inainte de a fi considerat un flood, urmand ca sa ignore toate mesajele de la acel user pentru o perioada scurta de timp."
+set black(say.ro.man.1124) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1125) "\[MAN\] \002%char%set floodmsgprot\002 <nr. mesaje:secunde> ; \002%botnick% set floodmsgprot\002 <nr. mesaje:secunde> ; \002(PRIVMSG) set floodmsgprot\002 <nr. mesaje:secunde>"
+
+#Egg FloodNotcProt
+
+set black(say.ro.man.1127) "\[MAN\] \002FloodNotcProt\002 este o comanda menita sa protejeze eggdrop-ul de \002NOTICE flood\002. Stabileste cate mesage/secunde va accepta eggdrop-ul in privat inainte de a fi considerat un flood, urmand ca sa ignore toate mesajele de la acel user pentru o perioada scurta de timp."
+set black(say.ro.man.1128) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1129) "\[MAN\] \002%char%set floodnotcprot\002 <nr. notice:secunde> ; \002%botnick% set floodnotcprot\002 <nr. notice:secunde> ; \002(PRIVMSG) set floodnotcprot\002 <nr. notice:secunde>"
+
+#Egg ChanRemove-Setting
+
+set black(say.ro.man.1131) "\[MAN\] \002ChanRemove-Setting\002 este o optiune care, odata activata, atunci cand un canal este sters din lista de canale, eggdrop-ul va sterge inclusiv toate datele referitoare la acel canal, precum lista de useri, lista de banuri, baza de date seen, etc."
+set black(say.ro.man.1131_1) "\[MAN\] \0021\002 = da ; \0020\002 = nu"
+set black(say.ro.man.1132) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1133) "\[MAN\] \002%char%set chanremove-setting\002 <1|0> ; \002%botnick% set chanremove-setting\002 <1|0> ; \002(PRIVMSG) set chanremove-setting\002 <1|0>"
+
+#Egg User-Expire
+
+set black(say.ro.man.1135) "\[MAN\] \002User-Expire\002 este o comanda prin care puteti defini perioada de timp dupa care eggdrop-ul va sterge din lista de seen userele ce sunt mai vechi decat acea perioada de timp."
+set black(say.ro.man.1135_1) "\[MAN\] Format perioada: X\002d\002 = zile"
+set black(say.ro.man.1136) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1137) "\[MAN\] \002%char%set user-expire\002 <perioada> ; \002%botnick% set user-expire\002 <perioada> ; \002(PRIVMSG) set user-expire\002 <perioada>"
+
+#Egg PageLimit
+
+set black(say.ro.man.1139) "\[MAN\] \002PageLimit\002 este o comanda prin care puteti defini \002numarul default de afisari pe pagina\002 pentru toate modulele care folosesc functia \002- list -\002."
+set black(say.ro.man.1140) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1141) "\[MAN\] \002%char%set pagelimit\002 <nr. intrari> ; \002%botnick% set pagelimit\002 <nr. intrari> ; \002(PRIVMSG) set pagelimit\002 <nr. intrari>"
+
+#Egg Login
+
+set black(say.ro.man.1143) "\[MAN\] \002Login\002 este o comanda prin care puteti loga manual eggdrop-ul dvs. la Chanserv (X, Q, etc.)."
+set black(say.ro.man.1144) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1145) "\[MAN\] \002%char%login\002 ; %botnick% login ; \002(PRIVMSG) login\002"
+
+#Egg Chanserv
+
+set black(say.ro.man.1147) "\[MAN\] \002Chanserv\002 este o comanda prin care puteti seta \002nick-ul default\002, pe care ChanServ (X, Q, etc.), il foloseste in functie de reteaua de IRC la care eggdrop-ul se conecteaza."
+set black(say.ro.man.1148) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1149) "\[MAN\] \002%char%set chanserv\002 <nickchanserv> ; \002\002%botnick% set chanserv\002 <nickchanserv> ; \002(PRIVMSG) set chanserv\002 <nickchanserv>"
+
+#Egg HostChanserv
+
+set black(say.ro.man.1151) "\[MAN\] \002HostChanserv\002 este o comanda prin care puteti seta \002host-ul default\002, pe care ChanServ (X, Q, etc.), il foloseste in functie de reteaua de IRC la care eggdrop-ul se conecteaza."
+set black(say.ro.man.1152) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1153) "\[MAN\] \002%char%egg hostchanserv\002 <hostchanserv> ; \002%botnick% egg hostchanserv\002 <hostchanserv> ; \002(PRIVMSG) set hostchanserv\002 <hostchanserv>"
+
+#Egg UserLogin
+
+set black(say.ro.man.1155) "\[MAN\] \002UserLogin\002 este o comanda prin care puteti seta \002userul\002 cu care eggdrop-ul se va loga automat la ChanServ (X, Q, etc.)."
+set black(say.ro.man.1156) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1157) "\[MAN\] \002%char%set userlogin\002 <userchanserv> ; \002%botnick% set userlogin\002 <userchanserv> ; \002(PRIVMSG) set userlogin\002 <userchanserv>"
+
+#Egg UserPass
+
+set black(say.ro.man.1159) "\[MAN\] \002UserPass\002 este o comanda prin care puteti seta \002parola userului\002 cu care eggdrop-ul se va loga automat la ChanServ (X, Q, etc.)."
+set black(say.ro.man.1160) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1161) "\[MAN\] \002%char%set userpass\002 <passchanserv> ; \002%botnick% set userpass\002 <passchanserv> ; \002(PRIVMSG) set userpass\002 <passchanserv>"
+
+#Egg Add-Mask
+
+set black(say.ro.man.1163) "\[MAN\] \002Add-Mask\002 este o comanda prin care puteti seta host-ul default pe care eggdrop-ul va il va folosi la adaugarea de noi useri cu acces."
+set black(say.ro.man.1163_1) "\[MAN\] Hostmask-uri disponibile:"
+set black(say.ro.man.1163_2) "\[MAN\] \002#1\002 *!*@host ; \002#2\002 *!user@host ; \002#3\002 nick!user@host ; \002#4\002 nick!*@* ; \002#5\002 *!user@*"
+set black(say.ro.man.1164) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1165) "\[MAN\] \002%char%set add-mask\002 <nr. hostmask> ; \002%botnick% set add-mask\002 <nr. hostmask> ; \002(PRIVMSG) set add-mask\002 <nr. hostmask>"
+
+#Egg Adduser-Mask
+
+set black(say.ro.man.1167) "\[MAN\] \002Adduser-Mask\002 este o comanda prin care puteti seta host-ul default, ca\001 *!*@%user%.users.undernet.org\001, pe care eggdrop-ul va il va folosi la adaugarea de noi useri cu acces."
+set black(say.ro.man.1168) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1169) "\[MAN\] \002%char%set adduser-mask\002 <hostmask> ; \002%botnick% set adduser-mask\002 <hostmask> ; \002(PRIVMSG) set adduser-mask\002 <hostmask>"
+
+#AntiSpam-ScanTime
+
+set black(say.ro.man.1175) "\[MAN\] \002AntiSpam-ScanTime\002 este o extra optiune a modulului \002antispam\002 prin care puteti defini perioada maxima de timp dintre fiecare\002 /cycle\002 pe care eggdrop-ul il executa pentru a detecta mesajele de spam."
+set black(say.ro.man.1175_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1176) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1177) "\[MAN\] \002%char%set\002 antispam-scantime <perioada> ; \002%botnick% set\002 antispam-scantime <perioada> ; \002(PRIVMSG) set\002 antispam-scantime <perioada>"
+
+#Idle-ScanTime
+
+set black(say.ro.man.1179) "\[MAN\] \002Idle-ScanTime\002 este o extra optiune a modulului \002idle\002 prin care puteti defini perioada maxima de timp dintre scanarile dupa utilizatorii cu \002op (@)\002 sau \002voice (+ v)\002 ce fac idle."
+set black(say.ro.man.1179_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1180) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1181) "\[MAN\] \002%char%set\002 idle-scantime <perioada> ; \002%botnick% set\002 idle-scantime <perioada> ; \002(PRIVMSG) set\002 idle-scantime <perioada>"
+
+#CloneScan-ScanTime
+
+set black(say.ro.man.1183) "\[MAN\] \002CloneScan-ScanTime\002 este o extra optiune a modulului \002clonescan\002 prin care puteti defini perioada maxima de timp dintre scanarile dupa utilizatorii ce sunt clone."
+set black(say.ro.man.1183_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1184) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1185) "\[MAN\] \002%char%set\002 clonescan-scantime <perioada> ; \002%botnick% set\002 clonescan-scantime <perioada> ; \002(PRIVMSG) set\002 clonescan-scantime <perioada>"
+
+#Broadcast-ShowTime
+
+set black(say.ro.man.1187) "\[MAN\] \002Broadcast-ShowTime\002 este o extra optiune a modulului \002broadcast\002 prin care puteti defini perioada maxima de timp dintre \002mesajele de tip broadcast\002 ce urmeaza sa fie difuzate pe canal."
+set black(say.ro.man.1187_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1188) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1189) "\[MAN\] \002%char%egg\002 broadcast-showtime <perioada> ; \002%botnick% egg\002 broadcast-showtime <perioada> ; \002(PRIVMSG) egg\002 broadcast-showtime <perioada>"
+
+#BadChan-ScanTime
+
+set black(say.ro.man.1191) "\[MAN\] \002BadChan-ScanTime\002 este o extra optiune a modulului \002badchan\002 prin care puteti defini perioada maxima de timp dintre scanarile dupa utilizatorii ce se gasesc pe anumite canale nepermise."
+set black(say.ro.man.1191_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1192) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1193) "\[MAN\] \002%char%set\002 badchan-scantime <perioada> ; \002%botnick% set\002 badchan-scantime <perioada> ; \002(PRIVMSG) set\002 badchan-scantime <perioada>"
+
+#Anunt-ShowTime
+
+set black(say.ro.man.1195) "\[MAN\] \002Anunt-ShowTime\002 este o extra optiune a modulului \002anunt\002 prin care puteti defini perioada maxima de timp dintre \002anunturile\002 ce urmeaza sa fie difuzate pe canal."
+set black(say.ro.man.1195_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1196) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1197) "\[MAN\] \002%char%set\002 anunt-showtime <perioada> ; \002%botnick% set\002 anunt-showtime <perioada> ; \002(PRIVMSG) set\002 anunt-showtime <perioada>"
+
+#QuoteOfDay-ShowTime
+
+set black(say.ro.man.1199) "\[MAN\] \002QuoteOfDay-ShowTime\002 este o extra optiune a modulului \002quote\002 prin care puteti defini perioada maxima de timp dintre \002citatele\002 (quotes) ce urmeaza sa fie difuzate pe canal."
+set black(say.ro.man.1199_1) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1200) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1201) "\[MAN\] \002%char%set\002 quoteofday-showtime <perioada> ; \002%botnick% set\002 quoteofday-showtime <perioada> ; \002(PRIVMSG) set\002 quoteofday-showtime <perioada>"
+
+#QuitPartColor
+
+set black(say.ro.man.1203) "\[MAN\] \002QuitPartColor\002 este o extra optiune a modulului \002AntiBadQuitPart\002 care actioneaza impotriva userilor ce parasesc %chan% utilizand *culori* in mesajul de /part sau /quit."
+set black(say.ro.man.1204) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1205) "\[MAN\] \002%char%set\002 (+/-)quitpartcolor ; \002%botnick% set\002 (+/-)quitpartcolor ; \002(PRIVMSG) set\002 <#canal> (+/-)quitpartcolor"
+set black(say.ro.man.1206) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#VoiceMe-ShowTime
+
+set black(say.ro.man.1230) "\[MAN\] \002VoiceMe-ShowTime\002 este o extra optiune a modulului \002VoiceMe\002 prin care puteti defini perioada maxima de timp dintre mesajele specifice trimise pe canal."
+set black(say.ro.man.1231) "\[MAN\] Format perioada: X\002m\002 = minute ; X\002h\002 = ore"
+set black(say.ro.man.1232) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1233) "\[MAN\] \002%char%set\002 voiceme-showtime <perioada> ; \002%botnick% set\002 voiceme-showtime <perioada> ; \002(PRIVMSG) set\002 voiceme-showtime <perioada>"
+
+#BadChan-BanWait
+
+set black(say.ro.man.1234) "\[MAN\] \002BadChan-BanWait\002 este o extra optiune a modulului \002BadChan\002 prin care puteti defini perioada maxima de timp in care userul poate sa paraseasca canalele interzise inainte sa primeasca ban."
+set black(say.ro.man.1235) "\[MAN\] Format perioada: X\002s\002 = secunde"
+set black(say.ro.man.1236) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1237) "\[MAN\] \002%char%set\002 badchan-banwait <perioada> ; \002%botnick% set\002 badchan-banwait <perioada> ; \002(PRIVMSG) set\002 \[#canal\] badchan-banwait <perioada>"
+
+#BadNick-BanWait
+
+set black(say.ro.man.1238) "\[MAN\] \002Badnick-BanWait\002 este o extra optiune a modulului \002BadNick\002 prin care puteti defini perioada maxima de timp in care userul poate sa isi schimbe nickul nepermis inainte sa primeasca ban."
+set black(say.ro.man.1239) "\[MAN\] Format perioada: X\002s\002 = secunde"
+set black(say.ro.man.1240) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1241) "\[MAN\] \002%char%set\002 badnick-banwait <perioada> ; \002%botnick% set\002 badnick-banwait <perioada> ; \002(PRIVMSG) set\002 \[#canal\] badnick-banwait <perioada>"
+
+#BadNick-BMethod
+
+set black(say.ro.man.1242) "\[MAN\] \002BadNick-BMethod\002 este o extra optiune a modulului \002BadNick\002 care va permite sa alegeti metoda de ban."
+set black(say.ro.man.1243) "\[MAN\] Format metoda:\002 #1\002 - mesaj avertizare -> ban ;\002 #2\002 - ban"
+set black(say.ro.man.1244) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1245) "\[MAN\] \002%char%set\002 badnick-bmethod <nr. metoda> ; \002%botnick% set\002 badnick-bmethod <nr. metoda> ; \002(PRIVMSG) set\002 \[#canal\] badnick-bmethod <nr. metoda>"
+
+#BadChan-BMethod
+
+set black(say.ro.man.1246) "\[MAN\] \002BadChan-BMethod\002 este o extra optiune a modulului \002BadChan\002 care va permite sa alegeti metoda de ban."
+set black(say.ro.man.1247) "\[MAN\] Format metoda:\002 #1\002 - mesaj avertizare -> ban ;\002 #2\002 - ban"
+set black(say.ro.man.1248) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1249) "\[MAN\] \002%char%set\002 badchan-bmethod <nr. metoda> ; \002%botnick% set\002 badchan-bmethod <nr. metoda> ; \002(PRIVMSG) set\002 \[#canal\] badchan-bmethod <nr. metoda>"
+
+#RepetitiveChars
+
+set black(say.ro.man.1250) "\[MAN\] \002RepetitiveChars\002 este un modul care odata activat va face ca eggdrop-ul sa ia masuri impotriva oricarui utilizator ce va utiliza caractere repetate si consecutive."
+set black(say.ro.man.1251) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1252) "\[MAN\] \002%char%set\002 (+/-)repetitivechars ; \002%botnick% set\002 (+/-)repetitivechars ; \002(PRIVMSG) set\002 \[#canal\] (+/-)repetitivechars"
+set black(say.ro.man.1253) "\[MAN\] Setari optionale: \002repetitivechars-reason\002 ; repetitivechars-bantime ; \002repetitivechars-warn\002 ; repetitivechars-banmethod ; \002repetitivechars-banmask\002 ; repetitivechars-char"
+set black(say.ro.man.1254) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#QuitPartMsgFlood
+
+set black(say.ro.man.1255) "\[MAN\] \002QuitPartMsgFlood\002 este o extra optiune a modulului \002AntiBadQuitPart\002 care actioneaza impotriva userilor ce parasesc %chan% utilizand *mesaje de flood* la /part sau /quit."
+set black(say.ro.man.1256) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1257) "\[MAN\] \002%char%set (+/-)quitpartmsgflood\002 ; %botnick% set (+/-)quitpartmsgflood ; \002(PRIVMSG) set <#canal> (+/-)quitpartmsgflood\002"
+set black(say.ro.man.1258) "\[MAN\] Setari optionale: \002quitpartmsgflood-char\002"
+set black(say.ro.man.1259) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#MassFloodSilenceTime
+
+set black(say.ro.man.1260) "\[MAN\] \002MassFloodSilenceTime\002 protejeaza eggdrop impotriva mass flood prin ctcp/ctcr, notice sau msg folosind comanda silence."
+set black(say.ro.man.1261) "\[MAN\] ** Note: Este o protectie personala a botului care se declanseaza automat atunci cand acesta primeste mass flood botnet sau in privat. **"
+set black(say.ro.man.1262) "\[MAN\] Format perioada: <X>\002s\002 = secunde"
+set black(say.ro.man.1263) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1264) "\[MAN\] \002%char%set\002 massfloodsilencetime <perioada> ; \002%botnick% set\002 massfloodsilencetime <perioada> ; \002(PRIVMSG) set\002 massfloodsilencetime <perioada>"
+
+#BanMethod-Expire
+
+set black(say.ro.man.1265) "\[MAN\] \002BanMethod-Expire\002 permite sa definiti intervalul de timp dupa fiecare contorizare a protectiilor va expira."
+set black(say.ro.man.1266) "\[MAN\] Format perioada: <X>\002m\002 = minute"
+set black(say.ro.man.1267) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1268) "\[MAN\] \002%char%set\002 banmethod-expire <perioada> ; \002%botnick% set\002 banmethod-expire <perioada> ; \002(PRIVMSG) set\002 <#canal> banmethod-expire <perioada>"
+
+#Count
+
+set black(say.ro.man.1269) "\[MAN\] \002Count\002 permite definirea unui mesaj de intampinare la join folosind anumite \002variabile\002. Pentru a functiona este necesar \001+greet\001, pentru mai multe informatii vezi \002%char%man greet\002."
+set black(say.ro.man.1270) "\[MAN\] Variabile disponibile: \002%countchan%\002 = nume canal ; \002%nick%\002 = nick-ul care da join ; \002%count%\002 = contor join ; \002%time%\002 = data inregistrare canal"
+set black(say.ro.man.1271) "\[MAN\] SYNTAXA FOLOSIRE:"
+set black(say.ro.man.1272) "\[MAN\] \002%char%greet\002 set <text> ; \002%botnick% greet\002 set <text> ; \002(PRIVMSG) greet\002 <#canal> set <text>"
+set black(say.ro.man.1273) "\[MAN\] \001Exemplu\001: Bine ai venit %nick%, esti persoana cu numarul %count% care intra pe %countchan% din %time%."
+
+#BadChan-FloodControl
+
+set black(say.ro.man.1274) "\[MAN\] \002BadChan-FloodControl\002 este o extra optiune a modulului \002BadChan\002 cu rol in protejarea eggdropului de actiunile \002massjoin\002 prin oprirea scanarii userilor la join, pe o perioada de\002 30\002 secunde. Dupa expirarea acestei perioade \002modulul BadChan\002 isi reia functionarea normala."
+set black(say.ro.man.1275) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1276) "\[MAN\] \002%char%set\002 (+/-)badchan-floodcontrol <nr. joins>:<nr. secunde> ; \002%botnick% set\002 (+/-)badchan-floodcontrol <nr. joins>:<nr. secunde> ; \002(PRIVMSG) set\002 <#canal> (+/-)badchan-floodcontrol <nr. joins>:<nr. secunde>"
+set black(say.ro.man.1277) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Exempt
+
+set black(say.ro.man.1278) "\[MAN\] \002Exempt\002 Adauga o exceptie de la banurile stocate de eggdrop, cu un motiv si o perioada de timp optionale."
+set black(say.ro.man.1279) "\[MAN\] ** NOTA: Daca <global> este specificat, exceptia va fi pentru toate canalele pe care se afla eggdropul. **"
+set black(say.ro.man.1280) "\[MAN\] Format perioada: <X>\002h\002 = ore ; <X>\002m\002 = minute ; <X>\002d\002 = zile"
+set black(say.ro.man.1281) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.1282) "\[MAN\] \002%char%exempt\002 \[#canal\] add <ip/host> <perioada> <motiv> (adauga exceptie) ; \002%char%exempt\002 \[#canal\] list ; \002%char%exempt\002 \[#canal\] del <ip/host> (sterge exceptie din lista)"
+set black(say.ro.man.1283) "\[MAN\] \002%char%exempt\002 \[#canal\] add <ip/host> <perioada> \[global\] <motiv> (adauga exceptie) ; \002%char%exempt\002 \[#canal\] list \[global\] ; \002%char%exempt\002 \[#canal\] del <ip/host> \[global\] (sterge exceptie din lista)"
+
+#For
+
+set black(say.ro.man.1284) "\[MAN\] \002For\002 permite mai multor eggdropi sa execute simultan aceeasi comanda/ comenzi."
+set black(say.ro.man.1285) "\[MAN\] SYNTAXA FOLOSRE:"
+set black(say.ro.man.1286) "\[MAN\] \002for\002 <botnick1>,<botnick2>.. <comanda> <optiune>"
+
+
+##################################### MAN TIPS #############################################
+
+
+set black(say.ro.man.showtip) {
+ "\[TIP\] Stiai ca poti utiliza ca durata pentru ban forme ca de ex:\002 10m\002 (minute) ;\002 10h\002 (ore) ;\002 10d\002 (zile)?"
+ "\[TIP\] Daca intalnesti vreo problema la \002Blacktools script\002 sau daca ai dat de vreun \002BUG\002, posteaza pe \002forumul tclscripts.net\002 o explicatie a problemei/bugului."
+ "\[TIP\] Stiai ca poti utiliza \002CIDR\002 in metodele de ban? ex:\002 %char%b <ip/cidr>\002 | %char%b *!*@192.168.0.1/17"
+ "\[TIP\] \002ATENTIE!!\002 Cei care folosesc \002impreuna\002 atat \002a&a\002, cat si \002Blacktools\002, ar trebui sa stii ca acest lucru functioneaza, dar in teorie. Deci, \002nu cereti ajutor\002 pentru acest script, daca il utilizati impreuna cu \002a&a script\002.."
+ "\[TIP\] Stiai ca poti adauga \002mai mult de 1 propozitie\002 intr-un anunt? ex:\002 %char%anunt add <anunt1>~<anunt2>~<anunt3>\002 | %char%anunt add Bine ai venit pe %chan%~Distractie placuta~The Next Generation TCL"
+ "\[TIP\] Verificati forumul nostru la\002 http://tclscripts.net\002 pentru cele mai recente actualizari si informatii."
+ "\[TIP\] Stiai ca poti copia atat setarile, cat si lista de banuri sau cea de useri cu access de pe un canal pe altul? ex:\002 %char%cp userlist <#canal1> <#canal2>\002 | Pentru mai multe detalii: \002%char%man cp\002"
+ "\[TIP\] Utilizati script-uri TCL de care chiar aveti nevoie pentru eggdropul dvs. Toate aceste script-uri dragute si amuzante pe care le gasesti pe net pot fi stricate si nesigure. Gandeste-te la functionalitatea eggdrop-ului tau!" 
+ "\[TIP\] Stiai ca acum poti descarca fisiere de tip\002 *.tcl\002 de pe un URL direct in \002fisierul scripts\002 al eggdropului? eq:\002 %char%tcl wget <link/nume.tcl>\002 | Pentru mai multe detalii: \002%char%man tcl\002"
+ "\[TIP\] \002WwW.TclScripts.Net\002 ofera spre download o gama variata de TcL-uri pentru eggdrop-ul tau (BlackIP.tcl, YoutubeTitle.tcl, BlackCountry.tcl, CSC.tcl si multe altele), pentru a avea un BOT profesional si de ultima generatie."
+ "\[TIP\] Stiai ca acum poti folosi comanda \002for\002 pe mai multi eggdropi pentru a \002executa simultan\002 aceeasi comanda? ex: for Bot1,Bot2,Bot3 say bla bla | Pentru mai multe detalii: \002%char%man for\002"
+ "\[TIP\] \002(\$)\002 Vrei un \002TCL script personalizat\002 pentru eggdropul tau? Nimic mai simplu, doar \002spune-ne ce ai dori\002! Putem crea \002aproape orice TCL\002 pe baza ideilor si donatiilor tale. Email \002blackshadow@tclscripts.net\002 or \002info@tclscripts.net\002 cu informatiile solicitate si va vom contacta \002cat mai curand posibil\002."
+ "\[TIP\] Stiai ca acum poti adauga \002exceptii pentru anumite cuvinte\002 de la protectiile scriptului \002pentru a evita kick-ul sau banarea utilizatorilor\002 atunci cand nu este intradevar necesar? Pentru mai multe detalii: \002%char%man exempt\002"
+ "\[TIP\] Stiai ca acum poti adauga \002un comentariu\002 la cateva comenzi de ban\002, pe care ceilalti useri cu acces la eggdrop sa il vada,\002 atunci cand solicita informatii despre acel ban?? eq: \002%char%b nick just a test -c do not remove\002 | \[BT\] Motiv: just a test | \[BT\] \002\[COMENTARIU BAN\]\002 do not remove"
+}
+
+
+####################################### MAN SETARI INTERNE EGGDROP #############################################
+
+
+#Ban-Time
+
+set black(say.ro.man.2101) "\[MAN\] \002Ban-Time/BanTime\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care seteaza cat timp vor tine ban-urile temporare (in minute). Daca se specifica \0020\002 la aceasta optiune, eggdrop-ul nu va scoate niciodata acest ban-uri."
+set black(say.ro.man.2102) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2103) "\[MAN\] \002%char%set\002 ban-time <perioada> ; \002%botnick% set\002 ban-time <perioada> ; \002(PRIVMSG) set\002 <#canal> ban-time <perioada>"
+
+#ChanMode
+
+set black(say.ro.man.2104) "\[MAN\] \002ChanMode\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care va face ca eggdrop-ul sa forteze anumite moduri de canal. Acesta va adauga intotdeauna modurile +<modes> si va elimina modurile -<modes>."
+set black(say.ro.man.2105) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2106) "\[MAN\] \002%char%set\002 chanmode (+/-)<modes> ; \002%botnick% set\002 chanmode (+/-)<modes> ; \002(PRIVMSG) set\002 <#canal> chanmode (+/-)<modes>"
+
+#DontKickOps
+
+set black(say.ro.man.2107) "\[MAN\] \002DontKickOps\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care va face ca eggdrop-ul sa nu dea kick userilor cu flagul \002+o\002, lasandu-i pe acestia sa faca flood-kick pentru a proteja canalul impotriva atacului cu clone."
+set black(say.ro.man.2108) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2109) "\[MAN\] \002%char%set\002 (+/-)dontkickops ; \002%botnick% set\002 (+/-)dontkickops ; \002(PRIVMSG) set\002 <#canal> (+/-)dontkickops"
+
+#EnforceBans 
+
+set black(say.ro.man.2110) "\[MAN\] \002EnforceBans\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, iar cand un ban este setat, da kick la userii care sunt pe canal si se potrivesc ban-ului respectiv (userii cu access nu vor primi kick)."
+set black(say.ro.man.2111) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2112) "\[MAN\] \002%char%set\002 (+/-)enforcebans ; \002%botnick% set\002 (+/-)enforcebans ; \002(PRIVMSG) set\002 <#canal> (+/-)enforcebans"
+
+#DynamicBans 
+
+set black(say.ro.man.2113) "\[MAN\] \002DynamicBans\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care activeaza ban-urile de canal doar cand este necesar. Aceasta setare previne ca lista de ban-uri a canalului sa devina excesiv de lunga. Eggdrop-ul inca va mai tine minte fiecare ban, dar activeaza ban-ul pe canal doar atunci cand vede pe cineva care intra pe canal si se potriveste unui ban."
+set black(say.ro.man.2114) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2115) "\[MAN\] \002%char%set\002 (+/-)dynamicbans ; \002%botnick% set\002 (+/-)dynamicbans ; \002(PRIVMSG) set\002 <#canal> (+/-)dynamicbans"
+
+#UserBans 
+
+set black(say.ro.man.2116) "\[MAN\] \002UserBans\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care permite ca banurile sa fie executate direct de useri. Daca este dezactivata, eggdrop-ul va cere ca toate ban-urile sa fie facute prin consola acestuia."
+set black(say.ro.man.2117) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2118) "\[MAN\] \002%char%set\002 (+/-)userbans ; \002%botnick% set\002 (+/-)userbans ; \002(PRIVMSG) set\002 <#canal> (+/-)userbans"
+
+#AutoOp 
+
+set black(say.ro.man.2119) "\[MAN\] \002AutoOp\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care va obliga eggdrop-ul sa dea op (@) userilor cu flagul \002+o\002 automat si imediat cum intra pe canal (aceasta setare este nesigura si nerecomandata)."
+set black(say.ro.man.2120) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2121) "\[MAN\] \002%char%set\002 (+/-)autoop ; \002%botnick% set\002 (+/-)autoop ; \002(PRIVMSG) set\002 <#canal> (+/-)autoop"
+
+#AutoHalfOp 
+
+set black(say.ro.man.2122) "\[MAN\] \002AutoHalfOp\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care va obliga eggdrop-ul sa dea half-op (%/+h) userilor cu flagul \002+l\002 automat si imediat cum intra pe canal (aceasta setare este nesigura si nerecomandata)."
+set black(say.ro.man.2123) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2124) "\[MAN\] \002%char%set\002 (+/-)autohalfop ; \002%botnick% set\002 (+/-)autohalfop ; \002(PRIVMSG) set\002 <#canal> (+/-)autohalfop"
+
+#AutoVoice 
+
+set black(say.ro.man.2125) "\[MAN\] \002AutoVoice\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care va obliga eggdrop-ul sa dea voice (+v) userilor cu flagul \002+v\002 automat si imediat cum intra pe canal."
+set black(say.ro.man.2126) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2127) "\[MAN\] \002%char%set\002 (+/-)autovoice ; \002%botnick% set\002 (+/-)autovoice ; \002(PRIVMSG) set\002 <#canal> (+/-)autovoice"
+
+#Bitch 
+
+set black(say.ro.man.2128) "\[MAN\] \002Bitch\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul va lasa doar userii cu flagul \002+o\002 sa aiba op (@) pe canal. Daca pe canal exista \002X\002 sau \002ChanServ\002, cu siguranta, userii vor incerca sa-i dea deop/kick/ban eggdrop-ului ca razbunare (aceasta comanda nu este recomandata)."
+set black(say.ro.man.2129) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2130) "\[MAN\] \002%char%set\002 (+/-)bitch ; \002%botnick% set\002 (+/-)bitch ; \002(PRIVMSG) set\002 <#canal> (+/-)bitch"
+
+#Greet 
+
+set black(say.ro.man.2131) "\[MAN\] \002Greet\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul va spune oricarui user ce intra pe canal mesajul setat ca mesaj de greet (vezi si \002%char%man myset\002)."
+set black(say.ro.man.2132) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2133) "\[MAN\] \002%char%set\002 (+/-)greet ; \002%botnick% set\002 (+/-)greet ; \002(PRIVMSG) set\002 <#canal> (+/-)greet"
+
+#ProtectOps 
+
+set black(say.ro.man.2134) "\[MAN\] \002ProtectOps\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul re-opeaza automat un user cu flagul \002+o\002 daca acesta primeste deop."
+set black(say.ro.man.2135) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2136) "\[MAN\] \002%char%set\002 (+/-)protectops ; \002%botnick% set\002 (+/-)protectops ; \002(PRIVMSG) set\002 <#canal> (+/-)protectops"
+
+#ProtectFriends 
+
+set black(say.ro.man.2137) "\[MAN\] \002ProtectFriends\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul re-opeaza automat un user cu flagul \002+f\002 daca acesta primeste deop."
+set black(say.ro.man.2138) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2139) "\[MAN\] \002%char%set\002 (+/-)protectfriends ; \002%botnick% set\002 (+/-)protectfriends ; \002(PRIVMSG) set\002 <#canal> (+/-)protectfriends"
+
+#ProtectHalfOps 
+
+set black(say.ro.man.2140) "\[MAN\] \002ProtectHalfOps\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul re-half-opeaza automat un user cu flagul \002+l\002 daca acesta primeste de-half."
+set black(say.ro.man.2141) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2142) "\[MAN\] \002%char%set\002 (+/-)protecthalfops ; \002%botnick% set\002 (+/-)protecthalfops ; \002(PRIVMSG) set\002 <#canal> (+/-)protecthalfops"
+
+#Inactive 
+
+set black(say.ro.man.2143) "\[MAN\] \002Inactive\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care se poate previni ca eggdrop-ul sa mai intre pe un anumit canal (sau il face sa plece de pe canal daca este deja acolo). Poate fi utila deoarece face eggdrop-ul sa plece de pe canal fara sa piarda setarile, accesele userilor de pe canal si lista de ban-uri."
+set black(say.ro.man.2144) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2145) "\[MAN\] \002%char%set\002 (+/-)inactive ; \002%botnick% set\002 (+/-)inactive ; \002(PRIVMSG) set\002 <#canal> (+/-)inactive"
+
+#StatusLog 
+
+set black(say.ro.man.2146) "\[MAN\] \002StatusLog\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul va tine log-uri ale status-ului de canal la fiecare 5 minute. Aceasta setare arata statutul eggdrop-ului pe canal (@, +v), modurile canalului si numarul de useri cu \002+m/+o/+v/+n/+b/+e/+l\002 pe canal."
+set black(say.ro.man.2147) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2148) "\[MAN\] \002%char%set\002 (+/-)statuslog\002 ; \002%botnick% set\002 (+/-)statuslog ; \002(PRIVMSG) set\002 <#canal> (+/-)statuslog"
+
+#Static 
+
+set black(say.ro.man.2149) "\[MAN\] \002Static\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care permite numai ownerilor permanenti sa elimine canalul respectiv."
+set black(say.ro.man.2150) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2151) "\[MAN\] \002%char%set\002 (+/-)static ; \002%botnick% set\002 (+/-)static ; \002(PRIVMSG) set\002 <#canal> (+/-)static"
+
+#Revenge 
+
+set black(say.ro.man.2152) "\[MAN\] \002Revenge\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul memoreaza userii ce i-au dat deop/kick/ban (actuali op si/sau prieteni) si ii pedepseste. (Userii cu flagul \002+f\002 sunt exceptati de la razbunare)."
+set black(say.ro.man.2153) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2154) "\[MAN\] \002%char%set\002 (+/-)revenge ; \002%botnick% set\002 (+/-)revenge ; \002(PRIVMSG) set\002 <#canal> (+/-)revenge"
+
+#RevengeBot 
+
+set black(say.ro.man.2155) "\[MAN\] \002RevengeBot\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, similara cu \002Revenge\002, dar care se declanseaza doar atunci cand eggdrop-ul primeste deop, kick sau ban."
+set black(say.ro.man.2156) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2157) "\[MAN\] \002%char%set\002 (+/-)revengebot ; \002%botnick% set\002 (+/-)revengebot ; \002(PRIVMSG) set\002 <#canal> (+/-)revengebot"
+
+#Secret 
+
+set black(say.ro.man.2158) "\[MAN\] \002Secret\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care nu permite eggdrop-ului sa afiseze respectivul canal in botnet si in baza de date seen (intervine de asemenea in comenzile de statistica)."
+set black(say.ro.man.2159) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2160) "\[MAN\] \002%char%set\002 (+/-)secret ; \002%botnick% set\002 (+/-)secret ; \002(PRIVMSG) set\002 <#canal> (+/-)secret"
+
+#Shared 
+
+set black(say.ro.man.2161) "\[MAN\] \002Shared\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, prin care eggdrop-ul imparte informatii despre useri sau referitoare la canal."
+set black(say.ro.man.2162) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2163) "\[MAN\] \002%char%set\002 (+/-)shared ; \002%botnick% set\002 (+/-)shared ; \002(PRIVMSG) set\002 <#canal> (+/-)shared"
+
+#Cycle 
+
+set black(say.ro.man.2164) "\[MAN\] \002Cycle\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care face ca eggdrop-ul sa iasa si sa reintre de pe canal cand nu are op (@)."
+set black(say.ro.man.2165) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2166) "\[MAN\] \002%char%set\002 (+/-)cycle ; \002%botnick% set\002 (+/-)cycle ; \002(PRIVMSG) set\002 <#canal> (+/-)cycle"
+
+#NodeSynch 
+
+set black(say.ro.man.2167) "\[MAN\] \002NodeSynch\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care permite userilor fara op sa seteze moduri pe canal. (aceasta setare poate opri eggdrop-ul sa se bata cu servicii ca \002X\002 sau \002ChanServ\002 sau sa dea kick IRCoperatorilor cand seteaza, fara a avea op, moduri pe canal)."
+set black(say.ro.man.2168) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2169) "\[MAN\] \002%char%set\002 (+/-)nodesynch ; \002%botnick% set\002 (+/-)nodesynch ; \002(PRIVMSG) set\002 <#canal> (+/-)nodesynch"
+
+#DynamicExempts 
+
+set black(say.ro.man.2170) "\[MAN\] \002DynamicExempts\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care activeaza scutirile pe canal doar cand este necesar. Aceasta previne ca lista de scutiri a canalului sa devina excesiv de lunga. Eggdrop-ul isi aminteste toate scutirile, dar activeaza o scutire pe canal cand vede un ban setat care se potriveste cu acea scutire. Scutirea ramane activa pe canal atata timp cat banul este activ."
+set black(say.ro.man.2171) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2172) "\[MAN\] \002%char%set\002 (+/-)dynamicexempts ; \002%botnick% set\002 (+/-)dynamicexempts ; \002(PRIVMSG) set\002 <#canal> (+/-)dynamicexempts"
+
+#UserExempts 
+
+set black(say.ro.man.2173) "\[MAN\] \002UserExempts\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care permite ca scutirile sa fie facute direct de useri. Daca este dezactivata, eggdrop-ul va cere ca toate scutirile sa fie facute prin consola acestuia."
+set black(say.ro.man.2174) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2175) "\[MAN\] \002%char%set\002 (+/-)userexempts ; \002%botnick% set\002 (+/-)userexempts ; \002(PRIVMSG) set\002 <#canal> (+/-)userexempts"
+
+#DynamicInvites 
+
+set black(say.ro.man.2176) "\[MAN\] \002DynamicInvites\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care activeaza invitatiile de pe canal doar cand este necesar. Previne ca lista de invitatii sa devina prea de lunga. Eggdrop-ul isi va aminti fiecare invitatie, dar invitatiile sunt activate doar cand canalul este setat pe modul +i si un user intra dupa ce a cerut o invitatie. Odata setata, invitatia ramane pana cand modul devine -i."
+set black(say.ro.man.2177) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2178) "\[MAN\] \002%char%set\002 (+/-)dynamicinvites ; \002%botnick% set\002 (+/-)dynamicinvites ; \002(PRIVMSG) set\002 <#canal> (+/-)dynamicinvites"
+
+#UserInvites 
+
+set black(say.ro.man.2179) "\[MAN\] \002UserInvites\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, dar care permite ca invitatiile sa fie facute direct de useri. Daca este dezactivata, eggdrop-ul va cere ca toate invitaiile sa fie facute prin consola acestuia."
+set black(say.ro.man.2180) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2181) "\[MAN\] \002%char%set\002 (+/-)userinvites ; \002%botnick% set\002 (+/-)userinvites ; \002(PRIVMSG) set\002 <#canal> (+/-)userinvites"
+
+#Flood-Ctcp
+
+set black(say.ro.man.2182) "\[MAN\] \002Flood-Ctcp\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate ctcp-uri in cate secunde de la acelasi host constituie flood (+f users will not be kicked). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2183) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2184) "\[MAN\] \002%char%set\002 flood-ctcp <ctcp:secunde> ; \002%botnick% set\002 flood-ctcp <ctcp:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-ctcp <ctcp:secunde>"
+set black(say.ro.man.2185) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Flood-Join
+
+set black(say.ro.man.2186) "\[MAN\] \002Flood-Join\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate intrari pe canal in cate secunde de la acelasi constituie flood (userii cu flagul +f nu vor primi kick). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2187) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2188) "\[MAN\] \002%char%set\002 flood-join <joins:secunde> ; \002%botnick% set\002 flood-join <joins:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-join <joins:secunde>"
+set black(say.ro.man.2189) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Flood-Kick 
+
+set black(say.ro.man.2190) "\[MAN\] \002Flood-Kick\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate kick-uri in cate secunde de la acelasi host constituie flood (userii cu flagul +f nu vor primi kick). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2191) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2192) "\[MAN\] \002%char%set\002 flood-kick <kicks:secunde> ; \002%botnick% set\002 flood-kick <kicks:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-kick <kicks:secunde>"
+set black(say.ro.man.2193) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Flood-Deop 
+
+set black(say.ro.man.2194) "\[MAN\] \002Flood-Deop\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate deop-uri in cate secunde de la acelasi host constituie flood (userii cu flagul +f nu vor primi kick). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2195) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2196) "\[MAN\] \002%char%set\002 flood-deop <deops:secunde> ; \002%botnick% set\002 flood-deop <deops:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-deop <deops:secunde>"
+set black(say.ro.man.2197) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Flood-Nick 
+
+set black(say.ro.man.2198) "\[MAN\] \002Flood-Nick\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate schimbari de nick in cate secunde de la acelasi host constituie flood (userii cu flagul +f nu vor primi kick). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2199) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2200) "\[MAN\] \002%char%set\002 flood-nick <nicks:secunde> ; \002%botnick% set\002 flood-nick <nicks:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-nick <nicks:secunde>"
+set black(say.ro.man.2201) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+#Flood-Chan 
+
+set black(say.ro.man.2202) "\[MAN\] \002Flood-Chan\002 este o setare interna a eggdrop ce nu are legatura cu scriptul \002BlackToolS\002, care defineste cate mesaje trimise pe canal in cate secunde de la acelasi host constituie flood (userii cu flagul +f nu vor primi kick). Pentru a dezactiva aceasta setare, specifica \0020\002 sau \0020:0\002."
+set black(say.ro.man.2203) "\[MAN\] SINTAXA FOLOSIRE:"
+set black(say.ro.man.2204) "\[MAN\] \002%char%set\002 flood-chan <linii:secunde> ; \002%botnick% set\002 flood-chan <linii:secunde> ; \002(PRIVMSG) set\002 <#canal> flood-chan <linii:secunde>"
+set black(say.ro.man.2205) "Vizualizare setari optiuni: \002%char%show\002 <setare> ; \002%botnick% show\002 <setare> ; \002(PRIVMSG) show\002 <#canal> <setare>"
+
+
+##############################
+############################################################################################################
+#   SFARSIT                                                                                                #
+############################################################################################################

+ 1345 - 0
BlackTools/lang/BT.ro.lang.tcl

@@ -0,0 +1,1345 @@
+##################################################################################################################################
+#                                   _   _   _   _   _   _   _   _   _   _   _   _   _   _                                        #
+#                                  / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \                                       #
+#                                 ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )                                      #
+#                                  \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/                                       #
+#                                                                                                                                #
+##################################################################################################################################
+##                                     BlackTools - The Ultimate Channel Control Script                                         ##
+##                                                 One TCL. One smart Eggdrop                                                   ##
+##################################################################################################################################
+#Acest fisier ruleaza impreuna cu BlackTools si este incarcat automat daca exista in folderul lang (fisier obligatoriu sa existe)#
+##################################################################################################################################
+#                                                                                                                                #
+#                                                   *** The Future is Here ***                                                   #
+#                                                                                     Copyright 2008 - 2018 @ www.tclscripts.net #
+##################################################################################################################################
+#                                                                                                                         Ž      #
+#     ######  #          #     #####  #    # ####### ####### ####### #        #####        #          #    #     #  #####        #
+#     #     # #         # #   #     # #   #     #    #     # #     # #       #     #       #         # #   ##    # #     #       #
+#     #     # #        #   #  #       #  #      #    #     # #     # #       #             #        #   #  # #   # #             #
+#     ######  #       #     # #       ###       #    #     # #     # #        #####   ###  #       #     # #  #  # #  ####       #
+#     #     # #       ####### #       #  #      #    #     # #     # #             #       #       ####### #   # # #     #       #
+#     #     # #       #     # #     # #   #     #    #     # #     # #       #     #       #       #     # #    ## #     #       #
+#     ######  ####### #     #  #####  #    #    #    ####### ####### #######  #####        ####### #     # #     #  #####        #
+#                                                                                                                                #
+##################################################################################################################################
+#   				           #                                                                                     #
+#             LIMBA ROMANA (RO)	           #                        revizuita si actualizata de Florian | florian@tclscripts.net #
+#				           #	                                                        Data: 25.02.2018 11:31AM #
+##################################################################################################################################
+
+##################################################################################################################################
+#                                                                                                                                #
+#                                                         NIVELE ACCESS                                                          #
+#                                                                                                                                #
+##################################################################################################################################
+
+set black(say.ro.level.1) "BOSS OWNER"
+set black(say.ro.level.2) "OWNER"
+set black(say.ro.level.3) "MANAGER"
+set black(say.ro.level.4) "ADMIN"
+set black(say.ro.level.5) "OP"
+set black(say.ro.level.6) "VOICE"
+set black(say.ro.level.7) "PROTECT"
+set black(say.ro.level.8) "MASTER"
+set black(say.ro.level.9) "BAN"
+
+##################################################################################################################################
+#                                                                                                                                #
+#                                                         MESAJE STANDARD                                                        #
+#                                                                                                                                #
+##################################################################################################################################
+
+set black(say.ro.gl.instr) "\005\[BT\]\005 Pentru instructiuni de utilizare, foloseste: \002%char%man %msg%\002"
+set black(say.ro.gl.instr_nick) "\005\[BT\]\005 Pentru instructiuni de utilizare, foloseste: \002%botnick% man %msg%\002"
+set black(say.ro.gl.instr_priv) "\005\[BT\]\005 Pentru instructiuni de utilizare, foloseste: \002man %msg%\002"
+set black(say.ro.gl.noban) "\005\[BT\]\005 Nu se poate executa deoarece are access."
+set black(say.ro.gl.notonchan) "Nu sunt pe \001%chan%\001."
+set black(say.ro.gl.suspend) "\005\[BT\]\005 Esti suspendat pe \002%chan%\002, nu poti folosi aceasta comanda."
+set black(say.ro.gl.glsuspend) "\005\[BT\]\005 Esti suspendat \002GLOBAL\002, nu poti folosi aceasta comanda."
+set black(say.ro.gl.novalidchan) "\005\[BT\]\005 Canal invalid."
+set black(say.ro.gl.nomem) "\005\[BT\]\005 Userul nu se afla in memoria mea."
+set black(say.ro.gl.noaccess) "\005\[BT\]\005 Nu are access pe \002%chan%\002."
+set black(say.ro.gl.noop) "\005\[BT\]\005 Nu am op pe \002%chan%\002."
+set black(say.ro.gl.nomodif) "\005\[BT\]\005 Nu poti modifica caracteristicile acestui user deoarece are access mai mare sau egal ca al tau."
+set black(say.ro.gl.usernotonchan) "\005\[BT\]\005 \002%msg.1%\002 nu este pe \002%chan%\002."
+set black(say.ro.gl.nocmem) "\005\[BT\]\005 Nu am in memorie canalul \001%msg.1%\001"
+set black(say.ro.gl.isowner) "\005\[BT\]\005 \002%msg.1%\002 are deja access de \002%msg.set%\002."
+set black(say.ro.gl.usernotexist) "\005\[BT\]\005 \002%msg.1%\002 nu exista."
+set black(say.ro.gl.hostnotexist) "\005\[BT\]\005 Nu am gasit nicio informatie referitoare la acest host."
+set black(say.ro.gl.reason) "motiv"
+set black(say.ro.gl.invalidlevel) "\005\[BT\]\005 Nu poti aplica ban pe nivelul specificat (ai nevoie de \001%msg%\001)"
+set black(say.ro.gl.nounban) "\005\[BT\]\005 Nu poti scoate banul \002%msg.1%\002, deoarece este de nivel mai mare ca al tau."
+set black(say.ro.gl.hasop) "\005\[BT\]\005 Are OP si nu pot executa."
+set black(say.ro.gl.notonline) "\005\[BT\]\005 \002%msg.1%\002 nu este ONLINE."
+set black(say.ro.gl.xonlyban) "\005\[BT\]\005 Am adaugat ban pe \001%msg.1%\001 prin \002%msg.2%\002 pe \001%chan%\001 \[Modul \002XonlY\002 activat.\]"
+set black(say.ro.gl.showline) "#\004%msg.1%\004 %msg.8%"
+set black(say.ro.gl.wordexists) "\005\[BT\]\005 Cuvantul \001%msg.1%\001 este deja in lista canalului \002%chan%\002."
+set black(say.ro.gl.noset) "N/A"
+set black(say.ro.gl.validuser) "\005\[BT\]\005 Comanda interzisa ( host-ul apartine user-ului \002%msg.1%\002 )."
+set black(say.ro.gl.banexists) "\005\[BT\]\005 \002%msg.1%\002 este deja acoperit de ban-ul dat pe host-ul \002%msg.2%\002"
+set black(say.ro.gl.noipv4) "\005\[BT\]\005 \002%msg.1%\002 nu este ipv4 pentru a putea folosi ban pe CIDR."
+set black(say.ro.gl.fullbans) "\005\[BT\]\005 \002ATENTIE\002: Banlist-ul canalului \002%chan%\002 detectat ca fiind *PLIN* cu \002%numbans%\002 de intrari. Golesc lista de banuri a canalului.."
+set black(say.ro.gl.noxonly) "\005\[BT\]\005 Nu poti seta \002+xonly\002 deoarece nu sunt logat."
+set black(say.ro.gl.banblack) "\005\[BT\]\005 Nu se poate executa deoarece este in blacklist."
+set black(say.ro.gl.protexcept) "\002exceptie\002"
+set black(say.ro.gl.nobanlevel) "\005\[BT\]\005 Nu poti da ban pe \002%msg.1%\002, are deja ban de nivel mai mare ca al tau."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                              Protectii Interne AntiFlood                                                  #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.ro.antiflood.1) "\005\[BT\]\005 Trimiti cereri prea repede. Calmeaza-te si incearca din nou dupa \002%msg.1% minut\002. Multumesc!"
+set black(say.ro.antiflood.2) "\002\005\[BT\]\005\002 Am adaugat \001%msg.1%\001 la ignore. Motiv: \002%msg.8%\002"
+set black(say.ro.antiflood.3) "\002\005\[BT\]\005\002 SILENCE activat. Motiv :\002%msg%\002"
+set black(say.ro.antiflood.4) "\002\005\[BT\]\005\002 SILENCE dezactivat."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                    IESIRI TIMP                                                            #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.ro.timeout.1) "an"
+set black(say.ro.timeout.2) "ani"
+set black(say.ro.timeout.3) "zi"
+set black(say.ro.timeout.4) "zile"
+set black(say.ro.timeout.5) "ora"
+set black(say.ro.timeout.6) "ore"
+set black(say.ro.timeout.7) "minut"
+set black(say.ro.timeout.8) "minute"
+set black(say.ro.timeout.9) "secunde"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                    MAX UPTIME                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.ro.maxup.1) "\005\[BT\]\005 Timp pornire: \002%msg.1% %msg.2% %msg.3%\002 - Max UpTIME: \001%msg.9%\001"
+set black(say.ro.maxon.1) "\005\[BT\]\005 Timp online: \002%msg.1% %msg.2% %msg.3%\002 - Max OnTIME: \001%msg.9%\001"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                      STATS                                                                #
+#                                                                                                                           #
+#############################################################################################################################
+
+set black(say.ro.stats.1) "\005\[BT\]\005 Nu exista statistici despre \002%msg.1%\002."
+set black(say.ro.stats.2) "\002Stats\002 Azi: (\001%msg.1%\001) Banuri: \002%msg.2%\002 Kick-uri: \002%msg.3%\002 Comenzi: %msg.6%"
+set black(say.ro.stats.3) "\002Stats\002 Total: (\001%msg.1%\001) Banuri: locale \002%msg.2%\002 ; Kick-uri: \002%msg.3%\002 ; Comenzi: %msg.6%"
+set black(say.ro.stats.4) "\002Stats\002 Total: (\001%msg.1%\001) Banuri: locale \002%msg.2%\002 globale \002%msg.3%\002 ; Kick-uri: \002%msg.4%\002 ; Comenzi: %msg.10%" 
+set black(say.ro.stats.5) "\005\[BT\]\005 Am resetat statisticile pentru \001%msg.1%\001 de pe \002%chan%\002."
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                    PROTECTII                                                              #
+#                                                                                                                           #
+#############################################################################################################################
+
+#################################### InviteBan #################################
+
+set black(say.ro.inviteban.1) "\[INVITEBAN\] Nu ai respectat regulile pe %chan% in privinta INVITE-urilor"
+
+#################################### AntiPub ###################################
+
+set black(say.ro.antipub.1) "Nu ai respectat regulile pe %chan% in privinta RECLAMEI"
+set black(say.ro.antipub.2) "Atentie, esti avertizat sa nu mai faci reclama pe %chan%"
+set black(say.ro.antipub.3) "\005\[BT\]\005 *** Sfarsit lista antipub ***"
+set black(say.ro.antipub.4) "\005\[BT\]\005 Nu exista \002inregistrarea\002 antipub cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.antipub.5) "\005\[BT\]\005 Am sters \002inregistrarea\002 antipub cu numarul \001%msg.1%\0021 pentru \002%chan%\002."
+set black(say.ro.antipub.6) "\005\[BT\]\005 Am adaugat in lista de antipub \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.antipub.7) "\005\[BT\]\005 Lista de \002antipub\002 pentru \001%chan%\001 este:"
+set black(say.ro.antipub.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari foloseste: \001%char%antipub list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.antipub.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari foloseste: \001%char%antipub %chan% list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.antipub.10) "\005\[BT\]\005 Am adaugat in lista de antipub ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+#################################### BadHost ###################################
+
+set black(say.ro.badhost.1) "Nu ai respectat regulile pe %chan% in privinta HOST-ului"
+set black(say.ro.badhost.3) "\005\[BT\]\005 *** Sfarsit lista BadHosts ***"
+set black(say.ro.badhost.4) "\005\[BT\]\005 Nu exista \002badhost\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badhost.5) "\005\[BT\]\005 Am sters \002badhost\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badhost.6) "\005\[BT\]\005 Am adaugat in lista de BadHosts \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.badhost.7) "\005\[BT\]\005 Lista de \002BadHosts\002 pentru \001%chan%\001 este:"
+set black(say.ro.badhost.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadHosts\002 foloseste: \001%char%badhost list -next\001 (\002%counter%\002 badhost ramase)"
+set black(say.ro.badhost.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadHosts\002 foloseste: \001%char%badhost %chan% list -next\001 (\002%counter%\002 badhost ramase)"
+set black(say.ro.badhost.10) "\005\[BT\]\005 Am adaugat in lista de BadHosts ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+#################################### AntiNotice ################################
+
+set black(say.ro.antinotice.1) "Nu ai respectat regulile pe %chan% in privinta NOTICE-ULUI"
+set black(say.ro.antinotice.2) "Atentie, esti avertizat sa nu mai folosesti notice pe %chan%"
+
+#################################### AntiCtcp ##################################
+
+set black(say.ro.antictcp.1) "Nu ai respectat regulile pe %chan% in privinta CTCP-ULUI"
+set black(say.ro.antictcp.2) "Atentie, esti avertizat sa nu mai folosesti CTCP pe %chan%"
+
+#################################### AntiBadWord ###############################
+
+set black(say.ro.antibadword.1) "Nu ai respectat regulile pe %chan% in privinta LIMBAJULUI"
+set black(say.ro.antibadword.2) "Atentie, esti avertizat sa nu mai folosesti asemenea cuvinte pe %chan%"
+set black(say.ro.antibadword.3) "\005\[BT\]\005 *** Sfarsit lista BadWords ***"
+set black(say.ro.badword.4) "\005\[BT\]\005 Nu exista inregistrarea \002badword\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badword.5) "\005\[BT\]\005 Am sters inregistrarea \002badword\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badword.6) "\005\[BT\]\005 Am adaugat in lista de BadWords \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.antibadword.7) "\005\[BT\]\005 Lista \002BadWords\002 pentru \002%chan%\002 este:"
+set black(say.ro.antibadword.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari \002BadWords\002 foloseste: \001%char%badword list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.antibadword.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari \002BadWords\002 foloseste: \001%char%badword %chan% list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.badword.7) "\005\[BT\]\005 Am adaugat in lista de BadWords \001%msg.18%\001 cu nr.\002%msg.1%\002 avand metoda de ban nr.\002%msg.2% pentru \002%chan%\002."
+set black(say.ro.badword.8) "\005\[BT\]\005 Am adaugat in lista de BadWords ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+#################################### AntiLongText ##############################
+
+set black(say.ro.antilongtext.1) "Nu ai respectat regulile pe %chan% in privinta textului lung"
+set black(say.ro.antilongtext.2) "Atentie, esti avertizat sa nu mai scrii atat de multe cuvinte intr-o singura propozitie pe %chan%"
+
+#################################### AntiBadQuitPart ###########################
+
+set black(say.ro.antibadquitpart.1) "Nu ai respectat regulile pe %chan% in privinta mesajelor folosite in part/quit"
+set black(say.ro.antibadquitpart.3) "\005\[BT\]\005 *** Sfarsit lista badquitpart ***"
+set black(say.ro.badquitpart.4) "\005\[BT\]\005 Nu exista \002inregistrarea\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badquitpart.5) "\005\[BT\]\005 Am sters \002inregistrarea\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badquitpart.6) "\005\[BT\]\005 Am adaugat in lista de badquitpart \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.antibadquitpart.7) "\005\[BT\]\005 Lista de \002badquitpart\002 pentru %chan% este:"
+set black(say.ro.antibadquitpart.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari foloseste: \001%char%badquitpart list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.antibadquitpart.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor inregistrari foloseste: \001%char%badquitpart %chan% list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.antibadquitpart.10) "\005\[BT\]\005 Am adaugat in lista de badquitpart ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+################################### AntiJoinPart ###############################
+
+set black(say.ro.antijoinpart.1) "Nu ai respectat regulile pe %chan% in privinta Join/Part"
+set black(say.ro.antijoinpart.2) "Atentie, esti avertizat sa nu mai faci atat de repede join/part pe %chan%"
+
+################################## AntiSpam ###################################
+
+set black(say.ro.antispam.1) "Nu ai respectat regulile pe %chan% in privinta SPAM-ULUI"
+set black(say.ro.antispam.2) "\[SPAMCHECK\] Bine ai venit pe \002%chan%\002, te rog nu raspunde la acest mesaj deoarece poti fi banat si considerat spammer. Multumesc!"
+set black(say.ro.antispam.3) "\005\[BT\]\005 *** Sfarsit lista antispam ***"
+set black(say.ro.antispam.4) "\005\[BT\]\005 Nu exista \002antispam\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.antispam.5) "\005\[BT\]\005 Am sters \002antispam\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.antispam.6) "\005\[BT\]\005 Am adaugat in lista de antispam \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.antispam.7) "\005\[BT\]\005 Lista de \002antispam\002 pentru \001%chan%\001 este:"
+set black(say.ro.antispam.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002antispam\002 foloseste: \001%char%antispam list -next\001 (\002%counter%\002 inregistrari antispam ramase)"
+set black(say.ro.antispam.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002antispam\002 foloseste: \001%char%antispam %chan% list -next\001 (\002%counter%\002 inregistrari antispam ramase)"
+set black(say.ro.antispam.10) "\005\[BT\]\005 Am adaugat in lista de antispam ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.antispam.11) { "Verific spamul..."
+			       "Stati linistiti ca ma intorc, doar imi fac datoria :P"
+			       "Plec sau nu? Aceasta este intrebarea :D" 
+			       }
+				   
+################################# AntiRepeat ##################################
+
+set black(say.ro.antirepeat.1) "NU ai respectat regulile pe %chan% in privinta repetarilor"
+set black(say.ro.antirepeat.2) "Atentie, esti avertizat sa nu mai te repeti pe %chan%"
+
+################################# AntiColor ###################################
+
+set black(say.ro.anticolor.1) "NU ai respectat regulile pe %chan% in privinta culorilor"
+set black(say.ro.anticolor.2) "Atentie, esti avertizat sa nu mai folosesti culori pe %chan%"
+
+################################# AntiBold ###################################
+
+set black(say.ro.antibold.1) "NU ai respectat regulile pe %chan% in privinta folosirii caracterelor tip BOLD"
+set black(say.ro.antibold.2) "Atentie, esti avertizat sa nu mai folosesti caractere de tip BOLD pe %chan%"
+
+################################# AntiUnderline ###################################
+
+set black(say.ro.antiunderline.1) "NU ai respectat regulile pe %chan% in privinta folosirii caracterelor sublinitate"
+set black(say.ro.antiunderline.2) "Atentie, esti avertizat sa nu mai folosesti caractere subliniate pe %chan%"
+
+################################# AntiCaps #######################################
+
+set black(say.ro.anticaps.1) "NU ai respectat regulile pe %chan% in privinta CAPS-LOCK-ului"
+set black(say.ro.anticaps.2) "Atentie, esti avertizat sa nu mai folosesti Caps Lock pe %chan%"
+
+################################# BadRealname ###################################
+
+set black(say.ro.badrealname.1) "Nu ai respectat regulile pe %chan% in privinta REALNAME-ULUI"
+set black(say.ro.badrealname.3) "\005\[BT\]\005 *** Sfarsit lista BadRealnames ***"
+set black(say.ro.badrealname.4) "\005\[BT\]\005 Nu exista \002badfullname\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badrealname.5) "\005\[BT\]\005 Am sters \002badfullname\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badrealname.6) "\005\[BT\]\005 Am adaugat in lista de badrealname \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.badrealname.7) "\005\[BT\]\005 Lista de \002BadRealnames\002 pentru \002%chan%\002 este:"
+set black(say.ro.badrealname.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadRealnames\002 foloseste: \001%char%badrealname list -next\001 (\002%counter%\002 badrealname ramase)"
+set black(say.ro.badrealname.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadRealnames\002 foloseste: \001%char%badrealname %chan% list -next\001 (\002%counter%\002 badrealname ramase)"
+set black(say.ro.badrealname.10) "\005\[BT\]\005 Am adaugat in lista de badrealname ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+################################# BadNick #####################################
+
+set black(say.ro.badnick.1) "Nu ai respectat regulile pe %chan% in privinta NICK-ULUI"
+set black(say.ro.badnick.3) "\005\[BT\]\005 *** Sfarsit lista BadNicks ***"
+set black(say.ro.badnick.4) "\005\[BT\]\005 Nu exista \002badnick\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badnick.5) "\005\[BT\]\005 Am sters \002badnick\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badnick.6) "\005\[BT\]\005 Am adaugat in lista de badnick \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.badnick.7) "\005\[BT\]\005 Lista de \002BadNicks\002 pentru \002%chan%\002 este:"
+set black(say.ro.badnick.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002inregistrari\002 foloseste: \001%char%badnick list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.badnick.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002inregistrari\002 foloseste: \001%char%badnick %chan% list -next\001 (\002%counter%\002 inregistrari ramase)"
+set black(say.ro.badnick.10) "Nick-ul tau contine caractere/cuvinte nepermise, ai \002%time%\002 de secunde sa-l schimbi altfel ai ban.."
+set black(say.ro.badnick.11) "\005\[BT\]\005 Am adaugat in lista de badnick ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+################################ BadIdent #####################################
+
+set black(say.ro.badident.1) "Nu ai respectat regulile pe %chan% in privinta IDENT-ULUI"
+set black(say.ro.badident.3) "\005\[BT\]\005 *** Sfarsit lista BadIdents ***"
+set black(say.ro.badident.4) "\005\[BT\]\005 Nu exista \002badident\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badident.5) "\005\[BT\]\005 Am sters \002badident\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.badident.6) "\005\[BT\]\005 Am adaugat in lista de badident \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.badident.7) "\005\[BT\]\005 Lista de \002BadIdents\002 pentru \002%chan%\002 este:"
+set black(say.ro.badident.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadIdents\002 foloseste \001%char%badident list -next\001 (\002%counter%\002 badident ramase)"
+set black(say.ro.badident.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002BadIdents\002 foloseste \001%char%badident %chan% list -next\001 (\002%counter%\002 badident ramase)"
+set black(say.ro.badident.10) "\005\[BT\]\005 Am adaugat in lista de badident ca exceptie \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+
+################################# AntiJoinFlood #####################################
+
+set black(say.ro.antijoinflood.1) "NU ai respectat regulile pe %chan% in privinta joinflood-ului"
+set black(say.ro.antijoinflood.2) "\002Atentie!\002 Am observat un join flood pe \002%chan%\00. Va rog verificati!"
+
+################################# AntiChanFlood #####################################
+
+set black(say.ro.antichanflood.1) "NU ai respectat regulile pe %chan% in privinta flood-ului"
+set black(say.ro.antichanflood.2) "Atentie, esti avertizat sa nu mai scrii atat de multe linii deodata pe %chan%"
+
+################################### NickFlood #######################################
+
+set black(say.ro.nickflood.1) "NU ai respectat regulile pe %chan% in privinta flood-ului prin nick"
+set black(say.ro.nickflood.2) "Atentie, esti avertizat sa nu mai schimbi atat de des nick-ul pe %chan%"
+
+############################### Repetitive Chars ####################################
+
+set black(say.ro.repetitivechars.1) "NU ai respectat regulile pe %chan% in privinta repetarii de caractere."
+set black(say.ro.repetitivechars.2) "Atentie, esti avertizat sa nu te mai repeti in ceea ce priveste caracterele pe %chan%"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                        MODULE                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+################################## SecureMode ##################################
+
+set black(say.ro.securemode.1) {
+"\002ATENTIE:\002 ai incercat sa intri pe \001%chan%\001, dar canalul este in \002lockdown\002 (\002+mD\002). Pentru a ti se permite sa intri tasteaza: \001/msg %botnick% check %chan% %msg.1%\001 sa dovedesti ca nu esti un robot. Daca te incurci nu se va intampla nimic."
+"\002ATENTIE:\002 Bine ai venit pe \001%chan%\001. Pentru a ti se permite sa intri, deoarece canalul este in \002lockdown\002 (\002+mD\002), tasteaza: \001/msg %botnick% check %chan% %msg.1%\001 sa dovedesti ca nu esti un robot. Daca te incurci nu se va intampla nimic."
+"\002ATENTIE:\002 canalul este in \002lockdown\002 (\002+mD\002) si pentru a ti se permite sa intri si sa dovedesti ca nu esti un robot, tasteaza: \001/msg %botnick% check %chan% %msg.1%\001."
+}
+
+set black(say.ro.securemode.2) "\002%msg.1%\002: sa ai un chat placut! Ne pare rau pentru dificultatile intampinate!"
+set black(say.ro.securemode.3) "\005\[BT\]\005 *** Sfarsit lista exceptii ***"
+set black(say.ro.securemode.4) "\005\[BT\]\005 Nu exista \002exceptia\002 SecureMode cu nr.\001%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.securemode.5) "\005\[BT\]\005 Am sters \002exceptia\002 SecureMode cu numarul \001%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.securemode.6) "\005\[BT\]\005 Am adaugat in lista de exceptii \001%msg.8%\001 cu nr.\002%msg.1%\002 pentru \002%chan%\002."
+set black(say.ro.securemode.7) "\005\[BT\]\005 Lista de \002exceptii\002 SecureMode pentru \002%chan%\002 este:"
+set black(say.ro.securemode.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor exceptii foloseste: \001%char%securemode list -next\001 (\002%counter%\002 exceptii ramase)"
+set black(say.ro.securemode.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor exceptii foloseste: \001%char%securemode %chan% list -next\001 (\002%counter%\002 exceptii ramase)"
+set black(say.ro.securemode.10) "Modul secure: activat."
+set black(say.ro.securemode.11) "Modul secure: dezactivat."
+
+################################## VoiceMe #####################################
+
+set black(say.ro.voiceme.1) "Canalul este \002moderat(+m)\002. Pentru a putea discuta pe \002%chan%\002 trebuie sa folositi: \001/msg %botnick% voiceme %chan%\001. Comanda necesita sa fiti \002inregistrat si logat la X\002. Daca nu aveti un username Cservice, accesati \002https://www.cservice.undernet.org/live/\002 pentru a crea unul."
+set black(say.ro.voiceme.2) "Canalul nu mai \002este moderat(+m)\002. Chat placut in continuare!"
+set black(say.ro.voiceme.3) "Bravo! Ai primit \001voice(+v)\001 pe \002%chan%\002. Chat placut! :)"
+set black(say.ro.voiceme.4) "Ai deja \001voice(+v)\001 pe \002%chan%\002."
+set black(say.ro.voiceme.5) "Pentru a dovedi ca nu esti un robot tasteaza: \002/msg %botnick% voiceme %chan% %msg%\002"
+set black(say.ro.voiceme.6) "Canalul este \002moderat(+m)\002. Pentru a putea discuta pe \002%chan%\002 trebuie sa folositi: \001/msg %botnick% voiceme %chan%\001. Enjoy!"
+
+################################# TopWords #####################################
+
+set black(say.ro.topwords.1) "\002TopWords\002 Total: \001%msg%\001"
+set black(say.ro.topwords.2) "\002TopWords\002 Azi: \001%msg%\001"
+set black(say.ro.topwords.3) "TopWords Azi: (\001%msg.1%\001) Host: \001%msg.2%\001 Cuvinte: \002%msg.3%\002 Linii: \002%msg.4%\002 Litere: \002%msg.12%\002 Zambete: \002%msg.13%\002 Actiuni: \002%msg.15%\002 Intrebari: \002%msg.17%\002 (Locul \002%msg.19%\002/\002%msg.21%\002 useri)."
+set black(say.ro.topwords.4) "\005\[BT\]\005 Nu exista informatii despre \002%msg.1%\002"
+set black(say.ro.topwords.7) "\005\[BT\]\005 Nu sunt persoane in top pe \002%chan%\002"
+set black(say.ro.topwords.8) "\005\[BT\]\005 Am resetat \002TopWords\002 pe \002%chan%\002"
+set black(say.ro.topwords.9) "(Pentru urmatoarele clasari, tastati: \002%char%topwords -next\002)"
+set black(say.ro.topwords.10) "\005\[BT\]\005 Nu exista inregistrari de \002TopWords\002 pentru \002%chan%\002"
+set black(say.ro.topwords.11) "(Pentru urmatoarele clasari, tastati: \002%char%topwords total -next\002)"
+set black(say.ro.topwords.12) "(Pentru urmatoarele clasari, tastati: \002%char%topwords\002 %chan% total -next\002)"
+set black(say.ro.topwords.13) "(Pentru urmatoarele clasari, tastati: \002%char%topwords %chan% -next\002)"
+set black(say.ro.topwords.14) "\005\[BT\]\005 Nu sunt persoane in top pe \002%chan%\002 in aceasta zi."
+set black(say.ro.topwords.15) "\005\[BT\]\005 Am adaugat \001%msg.1%\001 ca exceptie pentru \002TopWords\002 pe \002%chan%\002"
+set black(say.ro.topwords.16) "\005\[BT\]\005 Am adaugat \001%msg.1%\001 cu host \002%msg.2%\002 ca exceptie pentru \002TopWords\002 pe \002%chan%\002"
+set black(say.ro.topwords.17) "\005\[BT\]\005 \002%msg.1%\002 este deja adaugat ca exceptie pentru \002TopWords\002"
+set black(say.ro.topwords.18) "\005\[BT\]\005 Lista de exceptii la \002TopWords\002 pe \002%chan%\002 este :"
+set black(say.ro.topwords.19) "%msg%"
+set black(say.ro.topwords.20) "\005\[BT\]\005 \001%msg.1%\001 nu este adaugat ca exceptie la \002TopWords\002."
+set black(say.ro.topwords.21) "\005\[BT\]\005 \001%msg.1%\001 a fost sters din lista de exceptii la \002TopWords\002."
+set black(say.ro.topwords.22) "TopWords Total: (\001%msg.1%\001) Host: \001%msg.2%\001 Cuvinte: \002%msg.3%\002 Linii: \002%msg.4%\002 Litere: \002%msg.12%\002 Zambete: \002%msg.13%\002 Actiuni: \002%msg.15%\002 Intrebari: \002%msg.17%\002 (Locul \002%msg.19%\002/\002%msg.21%\002 useri)."
+set black(say.ro.topwords.23) "\005\[BT\]\005 Nu sunt persoane in top pe \002%chan%\002 in aceasta saptamana."
+set black(say.ro.topwords.24) "\002TopWords\002 Aceasta Saptamana: \001%msg%\001"
+set black(say.ro.topwords.25) "(Pentru urmatoarele clasari, tastati: \002%char%topwords\002 %chan% week -next\002)"
+set black(say.ro.topwords.26) "(Pentru urmatoarele clasari, tastati: \002%char%topwords week -next\002)" 
+set black(say.ro.topwords.27) "\005\[BT\]\005 Nu am gasit inregistrari legate de \002%msg.1%\002, cred ca nu a vorbit ;("
+set black(say.ro.topwords.28) "TopWords Aceasta Saptamana: (\001%msg.1%\001) Host: \001%msg.2%\001 Cuvinte: \002%msg.3%\002 Linii: \002%msg.4%\002 Litere: \002%msg.12%\002 Zambete: \002%msg.13%\002 Actiuni: \002%msg.15%\002 Intrebari: \002%msg.17%\002 (Locul \002%msg.19%\002/\002%msg.21%\002 useri)."
+set black(say.ro.topwords.29) "\005\[BT\]\005 Am resetat topwords pentru \001%msg.1%\001 de pe \002%chan%\002."
+
+################################ GuestNick ####################################
+
+set black(say.ro.guestnick.1) "\005\[BT\]\005 Ai activat modulul de \001GuestNick\001 pe \002%chan%\002."
+set black(say.ro.guestnick.2) "\005\[BT\]\005 Ai dezactivat modulul de \001GuestNick\001 pe \002%chan%\002."
+set black(say.ro.guestnick.3) "\005\[BT\]\005 Am adaugat \001%msg.1%\001 cu nr. \002%msg.2%\002 in lista de \002GuestNick\002"
+set black(say.ro.guestnick.4) "\005\[BT\]\005 Am sters GuestNick-ul cu numarul \002%msg.1%\002 din lista canalului \002%chan%\002."
+set black(say.ro.guestnick.5) "\005\[BT\]\005 Nu am gasit GuestNick-ul cu numarul \002%msg.1%\002 in lista."
+set black(say.ro.guestnick.6) "\005\[BT\]\005 Nu sunt GuestNick-uri pentru \002%chan%\002"
+set black(say.ro.guestnick.7) "\005\[BT\]\005 Lista de \002GuestNicks\002 pentru \002%chan%\002 este:"
+set black(say.ro.guestnick.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002GuestNicks\002 foloseste: \001%char%GuestNick list -next\001 (\002%counter%\002 GuestNick-uri ramase)"
+set black(say.ro.guestnick.9) "\005\[BT\]\005 *** Sfarsit lista GuestNicks ***"
+set black(say.ro.guestnick.10) "Salut \002%nick%\002: daca vrei sa-ti schimbi nick-ul cu ceva mai adecvat pentru numele tau, atunci folosind \002/nick nume\002 vei realiza acest lucru.."
+set black(say.ro.guestnick.11) "\005\[BT\]\005 Pentru afisarea urmatoarelor \002GuestNicks\002 foloseste: \001%char%GuestNick %chan% list -next\001 (\004%counter%\004 GuestNick-uri ramase)"
+
+################################ BackChan ###################################
+
+set black(say.ro.reportchan) "\005\[BT\]\005 Am adaugat ban pe \002%chan%\002 pe hostul \001%banmask%\001 cu motivul: \002%reason%\002. Expira in: \001%bantime%\001."
+set black(say.ro.reportchan.1) "\005\[BT\]\005 \[\002%nick%\002\] a adaugat ban pe \002%chan%\002 pe hostul \001%banmask%\001 cu motivul: %reason%. Expira in: \001%bantime%\001."
+set black(say.ro.backchan.1) "\005\[BT\]\005 \001%msg.1%\001 a fost gasit in lista de banuri pe \002%chan%\002 cu host-ul \002%msg.2%\002"
+set black(say.ro.reportchan.2) "\005\[BT\]\005 \[\002%nick%\002\] a adaugat Gag pe \002%chan%\002 pe hostul \001%banmask%\001 cu motivul: \002%reason%\002. Expira in: \001%bantime%\001."
+set black(say.ro.reportchan.3) "\005\[BT\]\005 \[\002%nick%\002\] a scos \001%msg.1%\001 banuri (%msg.2% gasite) de pe \002%chan%\002 legat de %msg.3%"
+set black(say.ro.reportchan.4) "\005\[BT\]\005 \[\002%nick%\002\] a scos Gag de pe \002%chan%\002 de la hostul \001%banmask%\001"
+
+################################ CloneScan ###################################
+
+set black(say.ro.clonescan.1) "Conexiuni excesive de la \[*@%clone%\]. Clonele sunt interzise pe %chan%!"
+set black(say.ro.clonescan.2) "\005\[BT\]\005 Nu am gasit clone pe %chan%."
+set black(say.ro.clonescan.3) "\005\[BT\]\005 *** Sfarsit lista exceptii ***"
+set black(say.ro.clonescan.4) "\005\[BT\]\005 Nu exista \002exceptia\002 CloneScan cu nr.\002%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.clonescan.5) "\005\[BT\]\005 Am sters \002exceptia\002 CloneScan cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.clonescan.6) "\005\[BT\]\005 Am adaugat in lista de exceptii \002%msg.8%\002 cu nr.\001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.clonescan.7) "\005\[BT\]\005 Lista de \002exceptii\002 CloneScan pentru \002%chan%\002 este:"
+set black(say.ro.clonescan.8) "\005\[BT\]\005 Pentru afisarea urmatoarelor exceptii foloseste: \001%char%clonescan list -next\001 (\004%counter%\004 exceptii ramase)"
+set black(say.ro.clonescan.9) "\005\[BT\]\005 Pentru afisarea urmatoarelor exceptii foloseste: \001%char%clonescan %chan% list -next\001 (\004%counter%\004 exceptii ramase)"
+set black(say.ro.clonescan.10) "\005\[BT\]\005 Am gasit \001%msg.1%\001 clone pe \002%chan%\002 de la host-ul \002%msg.2%\002. Acestea sunt: \002%msg.7%\002"
+set black(say.ro.clonescan.11) "\005\[BT\]\005 Scanez de clone pe \002%chan%\002.."
+
+################################# Private ######################################
+
+set black(say.ro.private.1) "Canal \002Privat\002"
+set black(say.ro.private.5) "%msg%"
+set black(say.ro.private.6) "\005\[BT\]\005 \001%msg.1%\001 nu este adaugat ca exceptie."
+set black(say.ro.private.7) "\005\[BT\]\005 \001%msg.1%\001 este deja in baza mea de date. Il adaug ca exceptie pe \002%chan%\002"
+set black(say.ro.private.8) "\005\[BT\]\005 Am adaugat \001%msg.1%\001 cu host \002%msg.2%\002 ca exceptie la private pe \002%chan%\002"
+set black(say.ro.private.9) "\005\[BT\]\005 Am sters \001%msg.1%\001 din lista de exceptii pe \002%chan%\002"
+set black(say.ro.private.10) "\005\[BT\]\005 \001%msg.1%\001 este adaugat deja ca exceptie pe \002%chan%\002"
+set black(say.ro.private.11) "\005\[BT\]\005 Userii exceptati de la private pe \002%chan%\002 sunt:"
+
+################################# BadChan ######################################
+
+set black(say.ro.badchan.1) "\005\[BT\]\005 \001%msg.1%\002 exista deja in lista de badchans a canalului \002%chan%\002."
+set black(say.ro.badchan.2) "\005\[BT\]\005 Pentru a afisa urmatoarele badchan foloseste: \001%char%badchan list global -next\001 (\002%counter%\002 badchan-uri ramase)"
+set black(say.ro.badchan.3) "\005\[BT\]\005 Pentru a afisa urmatoarele badchan foloseste: \001%char%badchan list -next\001 (\002%counter%\002 badchan-uri ramase)"
+set black(say.ro.badchan.4) "\005\[BT\]\005 Sfarsit lista badchan."
+set black(say.ro.badchan.5) "Ai fost gasit pe unul sau mai multe canale aflate in blacklist"
+set black(say.ro.badchan.6) "\005\[BT\]\005 Ai activat modulul de \002BadChan\002 pe \002%chan%\002."
+set black(say.ro.badchan.8) "\005\[BT\]\005 Ai dezactivat modulul de \002BadChan\002 pe \002%chan%\002."
+set black(say.ro.badchan.11) "\005\[BT\]\005 Am adaugat canalul \001%msg.1%\001 cu nr. \002%msg.2%\002 in lista de \002badchan\002 GLOBALA"
+set black(say.ro.badchan.12) "\005\[BT\]\005 Am adaugat canalul \001%msg.1%\001 cu nr. \002%msg.2%\002 in lista de \002badchan\002 a canalului \002%chan%\002"
+set black(say.ro.badchan.14) "\005\[BT\]\005 Lista de \002BADCHAN\002 pentru \002%chan%\002 este:"
+set black(say.ro.badchan.15) "\005\[BT\]\005 Lista de \002BADCHAN\002 GLOBALA este:"
+set black(say.ro.badchan.16) "\004%msg.1%\004) %msg.2%"
+set black(say.ro.badchan.17) "\005\[BT\]\005 Nu am gasit badchan-ul cu numarul \002%msg.1%\002 in lista"
+set black(say.ro.badchan.18) "\005\[BT\]\005 Am sters badchan-ul cu numarul \001%msg.1%\001 din lista canalului \002%chan%\002."
+set black(say.ro.badchan.19) "\005\[BT\]\005 Am sters badchan-ul cu numarul \002%msg.1%\002 din lista GLOBALA."
+set black(say.ro.badchan.39) "Ai primit ban pe \002%chan%\002 deoarece ai fost gasit pe unul sau mai multe canale interzise."
+set black(say.ro.badchan.40) "\002ATENTIE!\002 Ai fost gasit pe canale interzise. Ai la dispozitie %time% secunde sa dai \001/part\001 la: \002%badchans%\002, in caz contrar vei primi ban. Multumesc!"
+set black(say.ro.badchan.41) "\005\[BT\]\005 Pentru a afisa urmatoarele badchan foloseste: \001%char%badchan %chan% list -next\001 (\002%counter%\002 badchan-uri ramase)"
+set black(say.ro.badchan.42) "\005\[BT\]\005 Canalul \002%msg.1%\002 este deja in lista de badchan GLOBALA"
+set black(say.ro.badchan.43) "\005\[BT\]\005 Modulul de \002BadChan\002 este deja activ."
+set black(say.ro.badchan.44) "\005\[BT\]\005 \[ALERTA\] ( \002%nick%\002 ) gasit pe canalele interzise: ( \001%chans%\001 )"
+set black(say.ro.badchan.45) "\005\[BT\]\005 Am adaugat canalul \001%msg.1%\001 ca exceptie cu nr. \002%msg.2%\002 in lista de \002badchan\002 a canalului \002%chan%\002"
+
+################################# AntiTaKe ######################################
+
+set black(say.ro.antitake.1) "\005\[BT\]\005 Nu poti da \002DEOP\002 deoarece nu te afli in baza mea de date de access."
+set black(say.ro.antitake.2) "\005\[BT\]\005 Nu poti da \002OP\002 deoarece nu te afli in baza mea de date de access."
+
+################################# Anunt ######################################
+
+set black(say.ro.anunt.1) "%msg%"
+set black(say.ro.anunt.2) "\005\[BT\]\005 *** Sfarsit lista anunturi ***"
+set black(say.ro.anunt.3) "\005\[BT\]\005 Ai activat modulul de anunt pe \002%chan%\002."
+set black(say.ro.anunt.4) "\005\[BT\]\005Am dezactivat modulul de anunt pe \002%chan%\002."
+set black(say.ro.anunt.5) "\005\[BT\]\005 Am adaugat, cu nr.\001%msg.1%\001 pentru \002%chan%\002, urmatorul anunt:"
+set black(say.ro.anunt.6) "\004%msg.1%\004) %msg.8%"
+set black(say.ro.anunt.7) "\005\[BT\]\005 Nu sunt anunturi pentru \002%chan%\002"
+set black(say.ro.anunt.8) "\005\[BT\]\005 Lista de anunturi pentru \002%chan%\002 este:"
+set black(say.ro.anunt.9) "\005\[BT\]\005 Pentru a afisa urmatoarele anunturi foloseste: \001%char%anunt list -next\001 (\002%counter%\002 anunturi ramase)"
+set black(say.ro.anunt.10) "\005\[BT\]\005 Am sters anuntul cu numarul \002%msg.1%\002 pentru %chan%."
+set black(say.ro.anunt.13) "\005\[BT\]\005 Nu exista anuntul cu numarul \002%msg.1%\002 pentru \002%chan%\002"
+set black(say.ro.anunt.14) "\005\[BT\]\005 Pentru a afisa urmatoarele anunturi foloseste: \001%char%anunt %chan% list -next\001 (\002%counter%\002 anunturi ramase)"
+
+################################# AutoBroadcast ######################################
+
+set black(say.ro.autobroadcast.1) "%msg%"
+set black(say.ro.autobroadcast.2) "\005\[BT\]\005 Nu exista broadcast-ul cu numarul \002%msg.1%\002"
+set black(say.ro.autobroadcast.3) "\005\[BT\]\005 Modulul de \002AutoBroadcast\002 este activat deja."
+set black(say.ro.autobroadcast.4) "\005\[BT\]\005 Am activat modulul de AutoBroadcast"
+set black(say.ro.autobroadcast.5) "\005\[BT\]\005 Am dezactivat modulul de AutoBroadcast"
+set black(say.ro.autobroadcast.6) "\005\[BT\]\005 Am adaugat broadcast-ul cu nr. \002%msg.1%\002 in baza de date."
+set black(say.ro.autobroadcast.7) "\004%msg.1%\004) %msg.8%"
+set black(say.ro.autobroadcast.8) "\005\[BT\]\005 Nu sunt broadcast-uri in lista"
+set black(say.ro.autobroadcast.9) "\005\[BT\]\005 Lista de broadcast-uri este urmatoarea:"
+set black(say.ro.autobroadcast.10) "\005\[BT\]\005 *** Sfarsit lista AutoBroadcast ***"
+set black(say.ro.autobroadcast.11) "\005\[BT\]\005 Am sters broadcast-ul cu numarul \002%msg.1%\002"
+set black(say.ro.autobroadcast.12) "\005\[BT\]\005 Pentru a afisa urmatoarele broadcast-uri foloseste: \001%char%bt list -next\001 (\002%counter%\002 broadcast-uri ramase)"
+
+################################# Limit ######################################
+
+set black(say.ro.limit.5) "\005\[BT\]\005 Am activat modulul de \001Limit\001 pe \002%chan%\002."
+set black(say.ro.limit.6) "\005\[BT\]\005 Am setat limita \002%msg.1%\002 (standard)."
+set black(say.ro.limit.7) "\005\[BT\]\005 Am dezactivat modulul de \001Limit\001 pe \002%chan%\002."
+set black(say.ro.limit.9) "\005\[BT\]\005 Nu poti seta limita mai mica de \0022\002."
+set black(say.ro.limit.10) "\005\[BT\]\005 Setez limita \002+2.\002"
+set black(say.ro.limit.11) "\005\[BT\]\005 Nu poti seta limita mai mare de \002500\002."
+set black(say.ro.limit.12) "\005\[BT\]\005 Am setat limita la \002%msg.1%\002"
+
+################################# Topic ######################################
+
+set black(say.ro.topic.1) "\005\[BT\]\005 Topic pentru \002%chan%\002: \001%msg%\001"
+set black(say.ro.topic.2) "\005\[BT\]\005 Topic-ul nu poate fi setat deoarece e gol."
+set black(say.ro.topic.3) "\005\[BT\]\005 Setez ca topic pentru \002%chan%\002: \001%msg%\001 (topic-ul curent)"
+set black(say.ro.topic.4) "\005\[BT\]\005 Resetez topic pentru \002%chan%\002."
+
+####################################### Seen ######################################
+
+set black(say.ro.seen.4) "\005\[BT\]\005 \002%msg.1%\002 sunt chiar aici :P"
+set black(say.ro.seen.5) "\005\[BT\]\005 Asteapta\002 1 minut\002 pentru a putea cauta cu \001%char%seen\001."
+set black(say.ro.seen.6) "\005\[BT\]\005 %msg.1% uite-te in oglinda"
+set black(say.ro.seen.7) "\005\[BT\]\005 %msg.1% este pe %chan% deja"
+set black(say.ro.seen.8) "nu stiu exact cat a stat."
+set black(say.ro.seen.9) "dupa ce a stat %staytime% pe %chan%."
+set black(say.ro.seen.10) " %newnick% este inca pe %chan%."
+set black(say.ro.seen.11) " Nu il vad pe %newnick% momentan pe %chan%"
+set black(say.ro.seen.12) "\005\[BT\]\005 %entry% (%host%) a iesit de pe %chan% acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.13) "\005\[BT\]\005 %entry% (%host%) a iesit de pe IRC acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.14) "\005\[BT\]\005 %entry% (%host%) a intrat pe %chan% acum %output% %date%.%nowon%"
+set black(say.ro.seen.15) "\005\[BT\]\005 %entry% (%host%)  a iesit in *.net *.split acum %output% %date%, %staymsg%"
+set black(say.ro.seen.16) "\005\[BT\]\005 %entry% (%host%) a fost dat(a) afara de pe %chan% acum \002%output%\002 %date% cu motivul: \"%reason%\", %staymsg%"
+set black(say.ro.seen.17) "\005\[BT\]\005 %entry% (%host%) si-a schimbat nick-ul in %newnick% acum %output% %date%. %nowon%"
+set black(say.ro.seen.18) "\005\[BT\]\005 Nu exista informatii despre \002%msg.1%\002"
+set black(say.ro.seen.19) " \002%latest%\002 este inca pe %chan%."
+set black(say.ro.seen.20) " Nu il vad pe \002%latest%\002 momentan pe %chan%"
+set black(say.ro.seen.21) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a iesit de pe %chan% acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.22) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a iesit de pe IRC acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.23) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a intrat pe %chan% acum %output% %date%.%nowon%"
+set black(say.ro.seen.24) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a iesit in *.net *.split acum %output% %date%, %staymsg%"
+set black(say.ro.seen.25) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a fost dat(a) afara de pe %chan% acum %output% %date% cu motivul: \"%reason%\", %staymsg%"
+set black(say.ro.seen.26) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) si-a schimbat nick-ul in %newnick% acum %output% %date%. %nowon%"
+set black(say.ro.seen.27) "%msg%"
+set black(say.ro.seen.28) "\005\[BT\]\005 Am gasit mai mult de (%msg.1%) rezultate"
+set black(say.ro.seen.29) "\005\[BT\]\005 %entry% (%host%) a fost vazut ultima pe %chan%. %nowon%"
+set black(say.ro.seen.30) "\005\[BT\]\005 Am gasit (%num%) rezultate \"%entry%\". Cel mai recent \002%latest%\002 (%host%) a fost vazut ultima oara pe %chan%.%nowon%"
+set black(say.ro.seen.31) "\005\[BT\]\005 Din ce-mi aduc aminte, \002%userentry%\002 nu a zis nimic."
+set black(say.ro.seen.32) "\005\[BT\]\005 Din ce-mi aduc aminte, cu %output% in urma, \002%userentry%\002 (%host%) a zis ultima data pe %chan%: \"%lastmsg%\""
+set black(say.ro.seen.33) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a iesit de pe %chan% acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.34) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a iesit de pe IRC acum %output% %date% zicand: \"%reason%\", %staymsg%"
+set black(say.ro.seen.35) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a intrat pe %chan% acum %output% %date%.%nowon%"
+set black(say.ro.seen.36) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a iesit in *.net *.split acum %output% %date%, %staymsg%"
+set black(say.ro.seen.37) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a fost dat(a) afara de pe %chan% acum %output% %date% cu motivul: \"%reason%\", %staymsg%"
+set black(say.ro.seen.38) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) si-a schimbat nick-ul in %newnick% acum %output% %date%. %nowon%"
+set black(say.ro.seen.39) "\005\[BT\]\005 Salut \002%msg.1%\002, ar trebui sa stii ca \001%msg.2%\001 te-a cautat cu \002seen\002 pe \002%chan%\002 in data de \002%msg.3%\002."
+set black(say.ro.seen.40) "\005\[BT\]\005 Am gasit mai mult de (%num%) rezultate. Cel mai recent \002%latest%\002 (%host%) a fost vazut ultima oara pe %chan%.%nowon%"
+set black(say.ro.seen.41) "\005\[BT\]\005 Am gasit mai mult de (100) rezultate. Te rog restructureaza cautarea."
+
+################################# Greet ######################################
+
+set black(say.ro.greet.1) "\005\[BT\]\005 Am setat greet pentru \002%chan%\002: \001%msg%\001"
+set black(say.ro.greet.2) "\005\[BT\]\005 Am activat \001Greet\001 pe \002%chan%\002."
+set black(say.ro.greet.3) "\005\[BT\]\005 Am dezactivat \001Greet\001 pe \002%chan%\002."
+
+################################# Leave #######################################
+
+set black(say.ro.leave.1) "\005\[BT\]\005 Am setat leave pentru \002%chan%\002: \001%msg%\001"
+set black(say.ro.leave.2) "\005\[BT\]\005 Am activat \001Leave\001 pe \002%chan%\002."
+set black(say.ro.leave.3) "\005\[BT\]\005 Am dezactivat \001Leave\001 pe \002%chan%\002."
+
+################################# Idle ######################################
+
+set black(say.ro.idle.11) "\005\[BT\]\005 Am activat \001Idle OP\001 pe \002%chan%\002."
+set black(say.ro.idle.12) "\005\[BT\]\005 Am dezactivat \001Idle OP\001 pe \002%chan%\002."
+set black(say.ro.idle.14) "\005\[BT\]\005 Am activat \001Idle VOICE\001 pe \002%chan%\002."
+set black(say.ro.idle.15) "\005\[BT\]\005 Am dezactivat \002Idle VOICE\002 pe \002%chan%\002."
+set black(say.ro.idle.17) "\005\[BT\]\005 \001%msg.1%\001 nu este pe \002%chan%\002."
+set black(say.ro.idle.18) "\005\[BT\]\005 Am adaugat \001%msg.1%\001 ca exceptie pentru \002AntiIdle\002 pe \002%chan%\002."
+set black(say.ro.idle.19) "\005\[BT\]\005 Am adaugat ca exceptie pe \001%msg.1%\001 cu host \002%msg.2%\002 pentru \001AntiIdle\001 pe \002%chan%\002."
+set black(say.ro.idle.20) "\005\[BT\]\005 Lista de exceptie la \001AntiIdle\001 pe \002%chan%\002 este:"
+set black(say.ro.idle.21) "%msg%"
+set black(say.ro.idle.22) "\005\[BT\]\005 \002%msg.1%\002 nu exista in memoria mea."
+set black(say.ro.idle.23) "\005\[BT\]\005 \001%msg.1%\001 nu este adaugat ca exceptie la \002AntiIdle\002."
+set black(say.ro.idle.24) "\005\[BT\]\005 \001%msg.1%\001 a fost sters din lista de exceptii la \002AntiIdle\002."
+set black(say.ro.idle.25) "\005\[BT\]\005 Am activat \001Idle HalfOP\001 pe \002%chan%\002."
+set black(say.ro.idle.26) "\005\[BT\]\005 Am dezactivat \001Idle HalfOP\001 pe \002%chan%\002."
+
+################################# TCL ######################################
+
+set black(say.ro.tcl.3) "Nu am putut incarca scriptul: \001%msg.1%\001. Motiv: \002%msg.8%\002"
+set black(say.ro.tcl.4) "\005\[BT\]\005 Scriptul \002%msg.1%\002 este deja incarcat."
+set black(say.ro.tcl.5) "\005\[BT\]\005 Scriptul \002%msg.1%\002 a fost incarcat cu success."
+set black(say.ro.tcl.7) "\005\[BT\]\005 Scriptul \002%msg.1%\002 nu este incarcat."
+set black(say.ro.tcl.8) "\005\[BT\]\005 Am dezactivat scriptul \002%msg.1%\002."
+set black(say.ro.tcl.12) "\005\[BT\]\005 \001%msg.1%\001 \002nu\002 exista in scripts."
+set black(say.ro.tcl.13) "\005\[BT\]\005 \001%msg.1%\001 exista dar \002nu este\002 incarcat"
+set black(say.ro.tcl.14) "\005\[BT\]\005 \001%msg.1%\001 exista si \002este\002 incarcat"
+set black(say.ro.tcl.17) "%msg%."
+set black(say.ro.tcl.18) "\005\[BT\]\005 Eroare. Nu poti da \002unload\002 la acest script!"
+set black(say.ro.tcl.19) "\005\[BT\]\005 Eroare. \002Nu\002 am putut descarca scriptul \001%msg.1%\001 de pe link-ul dat."
+set black(say.ro.tcl.20) "\005\[BT\]\005 Descarcare finalizata. Pentru a incarca scriptul foloseste: \001%char%tcl load\001 \002%msg.1%\002"
+set black(say.ro.tcl.21) "\005\[BT\]\005 Scriptul \002%msg.1%\002 este descarcat deja."
+set black(say.ro.tcl.2) "\005\[BT\]\005 *** Sfarsit lista tcl ***"
+set black(say.ro.tcl.9) "\005\[BT\]\005 Pentru a afisa urmatoarele tcl-uri foloseste: \001%char%tcl list -next\001 (\002%counter%\002 tcl-uri ramase)"
+set black(say.ro.tcl.10) "\005\[BT\]\005 Lista de \002TCL-uri\002 (cele cu BOLD sunt incarcate) este:"
+
+#################################### Next #####################################
+
+set black(say.ro.next.1) "Bine ai venit \002%nick%\002, te rog sa astepti... De indata ce un helper va fi liber, vei primi voice. Te rog sa nu deranjezi userii cu \002+v/+o\002 prin mesaje! Esti numarul \002%counter%\002 la rand. Multumesc!"
+set black(say.ro.next.2) "Ai fost preluat de catre \001%nick%\001. Te rog sa spui problema intr-o \002singura linie\002 si \002sa astepti\002 raspuns din partea helper-ului desemnat tie!"
+set black(say.ro.next.3) "\005\[BT\]\005 \002%msg.1%\002 a asteptat timp de \002%msg.set%\002, te rog ocupa-te de el acum :)"
+set black(say.ro.next.4) "\002%current%\002 acum ca ai fost ajutat te rog sa dai \002/part\002. Daca mai ai alte intrebari, te rog \002/hop %chan%\002. Multumesc!"
+set black(say.ro.next.5) "Nu ai voie sa faci idle aici! Te rog sa revii pe %chan% atunci cand ai nevoie de ajutor"
+set black(say.ro.next.6) "\005\[BT\]\005 ATENTIE: %nick% are nevoie de ajutor pe %chan%. Acesta este numarul \002%counter%\002 la rand."
+set black(say.ro.next.7) "\005\[BT\]\005 Lista celor care asteapta ajutor este:"
+set black(say.ro.next.8) "\005\[BT\]\005 Nimeni nu are nevoie de ajutor în acest moment."
+set black(say.ro.next.9) "%msg%"
+set black(say.ro.next.11) "\005\[BT\]\005 Atentie: \002%current%\002 a fost preluat de \002%nick%\002 (\001%hand%\001)."
+set black(say.ro.next.13) "\005\[BT\]\005 Eroare! \002%msg.1%\002 este in lista de help, dar nu a fost ajutat inca."
+set black(say.ro.next.14) "\005\[BT\]\005 Eroare! \002%msg.1%\002 nu se afla in lista de help."
+set black(say.ro.next.15) "\005\[BT\]\005 ATENTIE: %current% a primit \002helped\002 de la \002%nick%\002 (\001%hand%\001)."
+set black(say.ro.next.17) "\005\[BT\]\005 Eroare! Trebuie mai intai ca \001%msg.1%\001 sa primeasca \002helped %msg.1%\002."
+set black(say.ro.next.19) "\005\[BT\]\005 \002%msg.1%\002 a fost sarit (acum este ultimul).."
+
+#################################### Quote #####################################
+
+set black(say.ro.quote.1) "\005\[BT\]\005 Am adaugat \002quote\002 cu nr. \001%msg.1%\001 in baza de date."
+set black(say.ro.quote.2) "\005\[BT\]\005 *** Sfarsit lista quotes ***"
+set black(say.ro.quote.3) "\005\[BT\]\005 Quote #%msg.1%: %msg.8%"
+set black(say.ro.quote.4) "\005\[BT\]\005 %msg.1% :: \001%msg.2%\001 ::"
+set black(say.ro.quote.6) "\004%msg.1%\004) %msg.8%"
+set black(say.ro.quote.7) "\005\[BT\]\005 Nu sunt quotes pentru \002%chan%\002"
+set black(say.ro.quote.8) "\005\[BT\]\005 Lista de \001quote\001 pentru \002%chan%\002 este:"
+set black(say.ro.quote.9) "\005\[BT\]\005 Pentru a afisa urmatoarele \002quotes\002 foloseste: \001%char%q list -next\001 (\002%counter%\002 quotes ramase)"
+set black(say.ro.quote.10) "\005\[BT\]\005 Am sters \002quote\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002."
+set black(say.ro.quote.11) "\005\[BT\]\005 Nu am gasit \002quote\002."
+set black(say.ro.quote.12) "\002\[Quote-ul zilei\]\002"
+set black(say.ro.quote.13) "\005\[BT\]\005 Nu exista \002quote\002 cu numarul \001%msg.1%\001 pentru \002%chan%\002"
+set black(say.ro.quote.14) "\005\[BT\]\005 Pentru a afisa urmatoarele \002quotes\002 foloseste: \001%char%q %chan% list -next\001 (\002%counter%\002 quotes ramase)"
+set black(say.ro.quote.15) "\002Adaugat de\002 :"
+set black(say.ro.quote.16) "%msg%"
+set black(say.ro.quote.17) "\005\[BT\]\005 \002Quote\002 #%msg.1%: \001%msg.set%\001"
+set black(say.ro.quote.18) "\005\[BT\]\005 Alte numere de \002quote\002: \001%msg%\001"
+set black(say.ro.quote.19) "\005\[BT\]\005 \002Quote\002: \001%msg%\001"
+set black(say.ro.quote.20) "Creat la data:"
+
+#################################### Notes #####################################
+
+set black(say.ro.notes.1) "\005\[BT\]\005 Am salvat \002note\002 cu nr. \001%msg.1%\001 in baza ta de date."
+set black(say.ro.notes.2) "\005\[BT\]\005 Note trimis catre \002%msg.1%\002/%msg.2% usere."
+set black(say.ro.notes.3) "\005\[BT\]\005 Note trimis catre \002%msg.1%\002/%msg.2% usere. Usere invalide: \001%msg.7%\001"
+set black(say.ro.notes.4) "\005\[BT\]\005 EROARE! Nu exista note cu numarul #\002%msg.1%\002."
+set black(say.ro.notes.5) "\005\[BT\]\005 \002Note\002 #%msg.1%: \002Locatie\002: \001%msg.2%\001 ; \002Data adaugarii\002: \001%msg.3%\001"
+set black(say.ro.notes.6) "\005\[BT\]\005 \002Mesaj\002: %msg%"
+set black(say.ro.notes.7) "\005\[BT\]\005 \002Note\002 #%msg.1%: \002Locatie\002: \001%msg.2%\001 ; \002Trimis de\002: \001%msg.3%\001 ; \002Data trimiterii\002: \001%msg.4%\001"
+set black(say.ro.notes.8) "\005\[BT\]\005 Am sters \002note\002 cu numarul \001%msg.1%\001."
+set black(say.ro.notes.9) "\002Status\002: CITIT \002Mesaj\002: "
+set black(say.ro.notes.10) "\002Status\002: NECITIT \002Mesaj\002: "
+set black(say.ro.notes.11) "\005\[BT\]\005 Ai \001%msg.1%\001 noi note in asteptare.. Acestea sunt: \002%msg.7%\002. Total note: \001%msg.2%\001"
+set black(say.ro.notes.12) "\005\[BT\]\005 Ai \001%msg.1%\001 noi note in asteptare.. Total note: \002%msg.2%\002"
+set black(say.ro.notesinbox.13) "\005\[BT\]\005 Pentru a citi notele foloseste: \002%char%note read <numar>\002"
+set black(say.ro.notesinbox.15) "\005\[BT\]\005 Pentru a urmatorul set de \002note\002 foloseste: \001%char%note inbox -next\001 (\002%counter%\002 note ramase)"
+set black(say.ro.notesinbox.16) "\005\[BT\]\005 Pentru a urmatorul set de \002note\002 foloseste: \001%char%note %chan% inbox -next\001 (\002%counter%\002 note ramase)"
+set black(say.ro.notes.13) "\005\[BT\]\005 EROARE! \002Lista ta de Note\002 este goala."
+set black(say.ro.notes.14) "\005\[BT\]\005 Ai \002%msg.1%\002 note personale adaugate."
+set black(say.ro.noteslist.15) "\005\[BT\]\005 Pentru a afisa urmatorul set de \002note\002 foloseste: \001%char%note list -next\001 (\002%counter%\002 note ramase)"
+set black(say.ro.noteslist.16) "\005\[BT\]\005 Pentru a afisa urmatorul set de \002note\002 foloseste: \001%char%note %chan% list -next\001 (\002%counter%\002 note ramase)"
+set black(say.ro.noteslist.13) "\005\[BT\]\005 Pentru a citi note foloseste: \002%char%note read <numar>\002"
+set black(say.ro.notes.15) "\005\[BT\]\005 Am sters toate \002notele\002 din INBOX."
+set black(say.ro.notes.16) "\005\[BT\]\005 Pentru a citi notele foloseste: \002%char%note read <numar>\002"
+set black(say.ro.notes.17) "NOTE_DEZACTIVAT"
+
+#############################################################################################################################
+#                                                                                                                           #
+#                                                       COMENZI                                                             #
+#                                                                                                                           #
+#############################################################################################################################
+
+###################################### ReportNick #################################
+
+set black(say.ro.report.1) "\005\[BT\]\005 Te rog asteapta \001%msg.1% de secunde\001 inainte de a executa o alta comanda de tip \002%char%report\002. Multumesc!"
+set black(say.ro.report.2) "\[REPORT\] Nick: \002%msg.1%\002 ; Raportat de: \002%msg.2%\002 ; Motiv: \001%msg.8%\001"
+set black(say.ro.report.3) "\[REPORT\] Nick: \001%msg.1%\001 ; Raportat de: \002%msg.2%\002"
+set black(say.ro.report.4) "\005\[BT\]\005 Report-ul tau a fost trimis catre operatori. Iti multumim!"
+set black(say.ro.report.5) "\005\[BT\]\005 Suna la 112 in cazul asta :-)"
+
+###################################### cp #####################################
+
+set black(say.ro.cp.1) "\005\[BT\]\005 Copiere esuata. (lista de banuri a canalului \002%msg.1%\002 este goala)"
+set black(say.ro.cp.2) "\005\[BT\]\005 Copiere esuata. (\002%msg%\002 nu este canal valid.)"
+set black(say.ro.cp.3) "\005\[BT\]\005 Copiere esuata. (\002%msg%\002 nu sunt canale valide.)"
+set black(say.ro.cp.4) "\005\[BT\]\005 Copiere efectuata. (\002%msg.1%\002 inregistrari copiate)"
+set black(say.ro.cp.5) "\005\[BT\]\005 Copiere efectuata. (\002%msg.1%\002 useri din \001%msg.2%\001 copiati)"
+set black(say.ro.cp.6) "\005\[BT\]\005 Copiere efectuata. (\002%msg.1%\002 setari copiate)"
+set black(say.ro.cp.7) "\005\[BT\]\005 Copiere efectuata. (\002%msg.1%\002 canale interzise copiate)"
+
+#################################### mySet ####################################
+
+set black(say.ro.myset.1) "\005\[BT\]\005 Ti-am setat limba la \002%msg.1%\002"
+set black(say.ro.myset.2) "\005\[BT\]\005 Ti-am setat iesirea la \002%msg.1%\002"
+set black(say.ro.myset.3) "\005\[BT\]\005 Ti-am setat autoinvite \002%msg.1%\002"
+set black(say.ro.myset.4) "\005\[BT\]\005 Ti-am setat handle la \002%msg.1%\002"
+set black(say.ro.myset.5) "\005\[BT\]\005 Nu am putut seta limba \002%msg.1%\002 deoarece fisierul nu exista."
+set black(say.ro.myset.6) "\005\[BT\]\005 Ti-am setat greet la \002%msg%\002"
+set black(say.ro.myset.7) "\005\[BT\]\005 Ti-ai adaugat ca host \002%msg.1%\002"
+set black(say.ro.myset.8) "\005\[BT\]\005 Ti-ai sters host-ul \002%msg.1%\002 din baza de date."
+set black(say.ro.myset.9) "\005\[BT\]\005 Nu exista host-ul \002%msg.1%\002 in baza mea de date."
+set black(say.ro.myset.10) "\005\[BT\]\005 Ti-am setat \002mychan\002 ca \001%msg.1%\001"
+set black(say.ro.myset.11) "\005\[BT\]\005 Ti-am resetat \002%msg.1%\002"
+set black(say.ro.myset.12) "\005\[BT\]\005 \002%msg.1%\002 este setat la: \001%msg.8%\001"
+set black(say.ro.myset.13) "\005\[BT\]\005 Ti-am setat \002noteexpire\002 la \002%msg.1%\002"
+set black(say.ro.myset.14) "\005\[BT\]\005 Trebuie sa specifici 4 culori din cele disponibile. Culori disponibile :\002bold\002 \001underline\001 \0034red\003 \00312blue\003 \0033green\003 \0038yellow\003 \0037orange\003 \00310cyan\003 \00314grey\003 \0035brown\003 \0036purple\003 \00313pink\003 black"
+set black(say.ro.myset.15) "\005\[BT\]\005 Una din culorile introduse este invalida. Culori disponibile : \002bold\002 \001underline\001 \0034red\003 \00312blue\003 \0033green\003 \0038yellow\003 \0037orange\003 \00310cyan\003 \00314grey\003 \0035brown\003 \0036purple\003 \00313pink\003 black"
+set black(say.ro.myset.16) "\005\[BT\]\005 Ti-am setat \002colors\002 la: \001%msg%\001"
+set black(say.ro.myset.17) "\005\[BT\]\005 Trebuie sa specifici unul dintre caractere disponibile. Caractere disponibile: \001%msg%\001"
+set black(say.ro.myset.18) "\005\[BT\]\005 Ti-am setat \002mychar\002 la: \001%msg.1%\001"
+set black(say.ro.myset.19) "\005\[BT\]\005 Acum poti primi \002NOTE\002."
+set black(say.ro.myset.20) "\005\[BT\]\005 Din acest moment numai poti primi \002NOTE\002."
+
+################################# Troll ######################################
+
+set black(say.ro.troll.5) "Pentru ca nu sti sa te comporti, esti pus in lista de troli pentru 24 de ore ! :-)"
+set black(say.ro.troll.6) "Trolii curenti (cei fara 7 ani de acasa) sunt: \001%msg%\001"
+
+#################################### dr #######################################
+
+set black(say.ro.dr.5) "Drona/posibila infectare malware"
+
+#################################### vr #######################################
+
+set black(say.ro.vr.5) "Mirc-ul tau este infectat cu un vierme/virus, te rog sa iti cureti computerul"
+
+################################### Bot #######################################
+
+set black(say.ro.bot.5) "Posibil BOT Detectat"
+set black(say.ro.bot.6) "Pentru unban foloseste: \002/msg %botnick% unbanme %chan% %msg%\002"
+set black(say.ro.bot.7) "Bravo! Banul tau de pe %chan% a fost scos. Poti reintra acum!" 
+set black(say.ro.bot.8) "Daca nu esti BOT -> /msg %botnick% unbanme %chan%"
+
+################################## b #####################################
+
+set black(say.ro.b.5)  { "Esti banat!"
+			 "Problema rezolvata"
+			 "Si uite asa stai pe status o vreme ;-)"
+			 "Multumim ca ai trecut pe aici!"
+			 "Este vremea de stat pe status :P Savureaz-o ;D"
+			 "Nu stii cata lume ar vrea sa fie in locul tu..adica sa zboare ;))"
+			 }
+set black(say.ro.b.6) "\005\[BT\]\005 durata maxima de ban pentru nivelul tau este de \0027d\002 (20160 minute)"
+set black(say.ro.b.7) "\005\[BT\]\005 Ai adaugat un ban local pe \002%chan%\002"
+set black(say.ro.b.8) "\005\[BT\]\005 Ai adaugat un ban global"
+set black(say.ro.b.9) "\005\[BT\]\005 Nu este voie massban."
+set black(say.ro.b.10) "\005\[BT\]\005 \002%msg.1%\002 nu este un banmask valid."
+
+################################## n #####################################
+
+set black(say.ro.n.5) "NICK-ul tau contine caractere nepermise, te rog schimba-l si revino"
+
+################################## id ####################################
+
+set black(say.ro.id.5) "IDENT-ul tau contine caractere nepermise, te rog schimba-l si revino"
+
+################################## Black #################################
+
+set black(say.ro.black.5) "Nu mai esti binevenit aici"
+
+################################## w #####################################
+
+set black(say.ro.w.5) { "Esti rugat sa iti revizuiesti comportamentul"
+			"Vezi daca nu ai cei 7 ani de acasa ? :P"
+			"De ce esti ma nesimtit ? Ia sa vedem daca simti asta :p"
+			"Nesimtirea nu se trece cu vederea, se trece cu un k i c k :D"
+			}
+set black(say.ro.w.6) "Acesta a fost ultimul avertisment. Data viitoare vei fi banat!"
+
+################################# spam ###################################
+
+set black(say.ro.spam.5) "Ai fost prins facand spam, pentru dezinfectare join #nohack"
+
+################################# k #######################################
+
+set black(say.ro.k.1) "\005\[BT\]\005 Nu am gasit niciun user pe %chan%."
+set black(say.ro.k.2) "\005\[BT\]\005 %msg.1% are access pe %chan%"
+set black(say.ro.k.5)  { "Cuvantul zilei este \"Kick\" :-)"
+			 "Acum poti sa vezi adevarata putere a mea :p"
+			 "Verific daca poti zbura :D"
+			 "Daca poti sa iesi, bine, daca nu, zbori :P"
+			 }
+
+################################# Gag ######################################
+
+set black(say.ro.gag.1) "- ATENTIE - \002%gag%\002 mai are de ispasit o perioada de \001%minute%\001 de Gag. Bucura-te de sunetul linistii :-)"
+set black(say.ro.gag.2) "\005\[BT\]\005 *** Sfarsit GAGLIST ***"
+set black(say.ro.gag.3) "\005\[BT\]\005 \001%msg.1%\001 are deja Gag pe \002%chan%\002."
+set black(say.ro.gag.4) "\005\[BT\]\005 \001%msg.1%\001 are deja ban pe \002%chan%\002."
+set black(say.ro.gag.5) "- ATENTIE - a expirat gag-ul pentru \002%nick%\002, acum poti tasta pe \002%chan%\002. Data viitoare sa fii mai atent :-)"
+set black(say.ro.gag.6) "N/A"
+set black(say.ro.gag.7) "\005\[BT\]\005 Durata maxima de Gag pentru nivelul tau este de \0027d\002 (\001 20160 minute\001 )"
+set black(say.ro.gag.10) "\005\[BT\]\005 Nu mai poti scrie pe \002%chan%\002 pentru \001%time%\001."
+set black(say.ro.gag.11) "- ATENTIE - \002%gagger%\002 nu o sa mai poata tasta pe \002%chan%\002 pentru \001%time%\001."
+
+################################# unGag #####################################
+
+set black(say.ro.ungag.5) "\005\[BT\]\005 Nu am gasit niciun gag pentru \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.ungag.6) "\005\[BT\]\005 Am scos gag-ul pentru \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.ungag.7) "\005\[BT\]\005 Acum poti scrie pe %chan%.."
+set black(say.ro.ungag.8) "- ATENTIE - %gagger% acum poate tasta pe %chan%.."
+
+################################ bw #########################################
+
+set black(say.ro.bw.5) "Utilizator nedorit din cauza comportamentului abuziv"
+
+############################### sb ##########################################
+
+set black(say.ro.sb.1) "\005\[BT\]\005 Am gasit \002%msg.1%\002 banuri (\001%msg.2%\001 globale, \001%msg.3%\001 locale)"
+set black(say.ro.sb.2) "\005\[BT\]\005 Nu am gasit niciun ban referitor la host-ul \002%msg.1%\002."
+set black(say.ro.sb.3) "\005\[BT\]\005 \[ID: \001%msg.1%\001\] ; \[CANAL\] * ; \002%msg.2%\002 ; Adaugat de: \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% \002%msg.13%\002 \002%msg.15%\002 ; Motiv: %msg.16%"
+set black(say.ro.sb.4) "\005\[BT\]\005 \[ID: \001%msg.1%\001\] ; \[CANAL\] \002%chan%\002 ; \002%msg.2%\002 ; Adaugat de: \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% \002%msg.13%\002 \002%msg.15%\002 ; Motiv: %msg.16%"
+set black(say.ro.sb.5) "\005\[BT\]\005 Am gasit prea multe rezultate \001(>10)\001 te rog sa reformulezi cautarea."
+set black(say.ro.sb.6) "\005\[BT\]\005 Am gasit \002%msg.1%\002 banuri locale"
+set black(say.ro.sb.7) "\005\[BT\]\005 Acesta a scris pe canal: \002%msg%\002"
+set black(say.ro.sb.8) "\005\[BT\]\005 Acesta s-a aflat pe urmatoarele canale interzise: \002%msg%\002"
+set black(say.ro.sb.9) "\005\[BT\]\005 \[ID: \001%msg.1%\001\] ; \[CANAL\] \002%chan%\002 ; \002%msg.2%\002 ; Adaugat de: \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% ; Motiv: %msg.11%"
+set black(say.ro.sb.10) "\005\[BT\]\005 \[ID: \001%msg.1%\001\] ; \[CANAL\] * ; \002%msg.2%\002 ; Adaugat de: \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% ; Motiv: %msg.11%"
+set black(say.ro.sb.11) "\005\[BT\]\005 Nu am gasit niciun ban referitor la ID-ul \002%msg.1%\002."
+set black(say.ro.sb.12) "\005\[BT\]\005 \[\002COMENTARIU BAN\002\] %msg%"
+
+############################### Stick ########################################
+
+set black(say.ro.stick.5) "Sticky ban"
+
+################################## BanList ##################################### 
+
+set black(say.ro.banlist.1) "Permanent"
+set black(say.ro.banlist.2) "\005\[BT\]\005 \[CANAL\]: * (\002%msg.1%\002 banuri gasite)"
+set black(say.ro.banlist.3) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%banlist global -next\001 (\002%counter%\002 banuri ramase)"
+set black(say.ro.banlist.4) "\005\[BT\]\005 *** Sfarsit BANLIST ***"
+set black(say.ro.banlist.5) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Adaugat de: \002%msg.4%\002 ; Data: \002%msg.12%\002 ; Expira in: %msg.13% \002%msg.15%\002 \002%msg.17%\002 ; Motiv: %msg.20%"
+set black(say.ro.banlist.6) "\005\[BT\]\005 \[CANAL\]: %chan% (\002%msg.1%\002 banuri gasite)"
+set black(say.ro.banlist.7) "\005\[BT\]\005 \[USER\]: %msg.2% (\002%msg.1%\002 banuri gasite)"
+set black(say.ro.banlist.8) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%banlist \002%user%\002 -next\001 (\002%counter%\002 banuri ramase)"
+set black(say.ro.banlist.9) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% \002%msg.13%\002 \002%msg.15%\002 ; Motiv: %msg.16%"
+set black(say.ro.banlist.10) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%banlist all -next\001 (\002%counter%\002 banuri ramase)"
+set black(say.ro.banlist.11) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Adaugat de: \002%msg.4%\002 ; Data: \002%msg.12%\002 ; Expira in: %msg.13% ; Motiv: %msg.14%"
+set black(say.ro.banlist.12) "\005\[BT\]\005 \002%msg.2%\002 ; \[ID: %msg.1%\] ; \002%msg.3%\002 ; Data: \002%msg.4%\002 ; Expira in: %msg.12% ; Motiv: %msg.11%"
+set black(say.ro.banlist.13) "NICIODATA"
+set black(say.ro.banlist.14) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%banlist %chan% all -next\001 (\002%counter%\002 banuri ramase)"
+set black(say.ro.banlist.15) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%banlist %chan% other -next\001 (\002%counter%\002 banuri ramase)"
+
+############################### Status #######################################
+
+set black(say.ro.status.1) "\005\[BT\]\005 Versiune script: \001%msg.1% %msg.2%\001 - Versiune eggdrop: \002%msg.3%\002 - Versiune TCL: \001%msg.12%\003"
+set black(say.ro.status.2) "\005\[BT\]\005 Timp pornire: \002%msg%\002"
+set black(say.ro.status.3) "\005\[BT\]\005 Durata timp online: \002%msg%\002"
+set black(say.ro.status.4) "\005\[BT\]\005 Canale: \002%msg%\002"
+set black(say.ro.status.5) "\005\[BT\]\005 Numar total useri: \001%msg.1%\001. Eggdrop owner: \002%msg.2%\002"
+
+############################## upTime #######################################
+
+set black(say.ro.uptime.2) "\005\[BT\]\005 Uptime server: \002%msg%\002"
+set black(say.ro.uptime.3) "\005\[BT\]\005 Server conectat: \002%msg%\002"
+
+################################ i ##########################################
+
+set black(say.ro.i.1) "\005\[BT\]\005 \001%msg.1%\001 se afla deja pe \002%chan%\002."
+set black(say.ro.i.2) "\005\[BT\]\005 Il invit pe \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.i.7) "Esti invitat de catre \001%nick%\001 pe \002%chan%\002, daca vrei sa intri tasteaza \002/join %chan%\002. Multumesc!"
+
+################################ Cycle #####################################
+
+set black(say.ro.cycle.1) { "Fac miscare.."
+			    "Hai, toata lumea la join/part :-)"
+			    "Macar asa mai scap si eu de 'patratele' :p"
+			    "Nu cred ca o sa mai vin inapoi, sau da ?:P"
+			    }
+set black(say.ro.cycle.2) "Ma intorc in %msg.1% secunde.."
+
+################################ Purge #####################################
+
+set black(say.ro.purge.1) "\005\[BT\]\005 Te rog sa specifi un motiv.."
+
+################################## Chat #####################################
+
+set black(say.ro.chat.1) "\005\[BT\]\005 \002DCC CHAT\002 - Initializare..."
+set black(say.ro.chat.2) "\005\[BT\]\005 Trebuie sa ai setata, mai intai, o parola. Foloseste: /msg %botnick% pass \001<parola ta>\001"
+
+################################## Version ##################################
+
+set black(say.ro.version.1) "\005\[BT\]\005 VERSIUNE SCRIPT: \002BlackTools %msg.1%\002 creat de \002BLaCkShaDoW\002. Pentru alte informatii ---= \002WwW.TclScripts.Net\002 or #TCL-HELP @ UNDERNET"
+
+################################# ub ######################################
+
+set black(say.ro.ub.1) "\005\[BT\]\005 Nu am gasit niciun ban care sa corespunda cu \002%msg.1%\002"
+set black(say.ro.ub.2) "\005\[BT\]\005 Am scos \001%msg.1%\001 banuri (\002%msg.2%\002 gasite) care au corespuns cu \002%msg.3%\003"
+set black(say.ro.ub.3) "\005\[BT\]\005 Nu am gasit niciun ban \[GLOBAL\] care sa corespunda cu \002%msg.1%\002"
+set black(say.ro.ub.4) "\005\[BT\]\005 Am scos \001%msg.1%\001 banuri \[GLOBALE\] care au corespuns cu \002%msg.2%\003"
+set black(say.ro.ub.5) "\005\[BT\]\005 Nu ai destul access pentru a sterge lista de banuri."
+set black(say.ro.ub.6) "\005\[BT\]\005 Am scos ban-ul din banlist-ul canalului \002%chan%\002"
+set black(say.ro.ub.7) "\005\[BT\]\005 Am scos \001%msg.1%\001 banuri de pe \002%msg.2%\002 canale ce au \002LINK\002"
+set black(say.ro.ub.8) "\005\[BT\]\005 Nu am gasit niciun ban care sa corespunda cu ID-ul \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.ub.9) "\005\[BT\]\005 Am scos banul ce corespunde cu ID-ul \001%msg.3%\001 de pe \002%chan%\002."
+set black(say.ro.ub.10) "\005\[BT\]\005 Am scos banul \[GLOBAL\] ce corespunde cu ID-ul \002%msg.2%\002"
+set black(say.ro.ub.11) "\005\[BT\]\005 Nu am gasit niciun ban \[GLOBAL\] care sa corespunda cu ID-ul \002%msg.1%\002"
+
+################################## Mode ###################################
+
+set black(say.ro.mode.6) "\005\[BT\]\005 Am aplicat modurile \001%msg.1%\001 pe \002%chan%\002."
+
+################################### Set ###################################
+
+set black(say.ro.set.1) "\005\[BT\]\005 Am setat \001%msg.1%\001 \004%msg.set%\004"
+set black(say.ro.set.2) "\005\[BT\]\005 Nu am putut seta \002%msg.1%\001 \004%msg.set%\004"
+set black(say.ro.set.3) "\005\[BT\]\005 Este deja setat \001%msg.1%\001 \004%msg.set%\004 pe \002%chan%\002."
+set black(say.ro.set.4) "\005\[BT\]\005 Este deja setat \001%msg.1%\002 pe \002%chan%\002."
+set black(say.ro.set.5) "\005\[BT\]\005 Nu am putut seta \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.set.6) "\005\[BT\]\005 Am setat \001%msg.1%\001 \002%chan%\002."
+set black(say.ro.set.7) "\005\[BT\]\005 Nu am putut seta \002%msg.1%\001 \004%msg.set%\004 pe \002%chan%\002."
+set black(say.ro.set.8) "\005\[BT\]\005 Am setat \001%msg.1%\001 \004%msg.set%\004 pentru \002%chan%\002."
+set black(say.ro.set.9) "\005\[BT\]\005 Este deja setat \001%msg.1%\001 \004%msg.set%\004"
+set black(say.ro.set.14) "\005\[BT\]\005 Setare invalida."
+
+#################################### unSet #################################
+
+set black(say.ro.unset.1) "\005\[BT\]\005 Nu exista setarea \002%msg.1%\002."
+set black(say.ro.unset.2) "\005\[BT\]\005 Am scos setarea \001%msg.1%\001 de pe \002%chan%\002."
+set black(say.ro.unset.3) "\005\[BT\]\005 \001%msg.1%\001 nu este setata pe \002%chan%\002."
+set black(say.ro.unset.4) "\005\[BT\]\005 Am scos toate setarile de tip \001flag\001 de pe \002%chan%\002."
+set black(say.ro.unset.5) "\005\[BT\]\005 Am scos toate setarile de tip \001string\001 de pe \2%chan%\002."
+
+#################################### Timer ####################################
+
+set black(say.ro.timer.1) "\005\[BT\]\005 Lista de timere active este:"
+set black(say.ro.timer.2) "#\002%msg.1%\002 PID: \002%msg.2%\002 ; Timp activare: \002%msg.3%\002 minute ; Nume proces: \002%msg.4%\002"
+set black(say.ro.timer.3) "#\002%msg.1%\002 PID: \002%msg.2%\002 ; Timp activare: \002%msg.3%\002 secunde ; Nume proces: \"\002%msg.9%\002\""
+set black(say.ro.timer.4) "\005\[BT\]\005 Sfarsit lista timere."
+set black(say.ro.timer.5) "\005\[BT\]\005 Timer-ul avand pid-ul \002%msg.1%\002 a fost inchis."
+set black(say.ro.timer.6) "\005\[BT\]\005 Nu exista timer-ul cu pid-ul \002%msg.1%\002"
+set black(say.ro.timer.7) "\005\[BT\]\005 Am pornit timer cu pid \002%msg.1%\002"
+set black(say.ro.timer.8) "\005\[BT\]\005 Un timer ce are acelasi proces este deja pornit."
+
+#################################### Ignore ################################
+
+set black(say.ro.ignore.2) "\005\[BT\]\005 Nu poti da ignore deoarece host-ul apartine unui user ce are access mai mare ca al tau."
+set black(say.ro.ignore.3) "\005\[BT\]\005 Nu sunt ignoruri date."
+set black(say.ro.ignore.4) "\005\[BT\]\005 Host: \001%msg.1%\001 | Adaugat de: \002%msg.2%\002 | Motiv: \002%msg.6%\002 | Expira in: \001%msg.3%\001"
+set black(say.ro.ignore.5) "\005\[BT\]\005 \002%msg.1%\002 are deja ignore."
+set black(say.ro.ignore.6) "\005\[BT\]\005 Am adaugat ignore pe host \001%msg.1%\001 cu motiv: \002%msg.7%\002 pe o perioada de: \001%msg.2%\001"
+set black(say.ro.ignore.8) "\005\[BT\]\005 \002%msg.1%\002 nu are ignore."
+set black(say.ro.ignore.9) "\005\[BT\]\005 Am scos ignore pentru \002%msg.1%\002"
+
+################################## Show ####################################
+
+set black(say.ro.show.4) "\005\[BT\]\005 \002%msg.1%\002 este setat la: \001%msg.2%\001. Timp pana la urmatorul timer : \001%msg.3%\001 minute"
+set black(say.ro.show.5) "\005\[BT\]\005 Nu am putut obtine informatii despre \002%msg.1%\002."
+set black(say.ro.show.6) "\005\[BT\]\005 \002%msg.1%\002 este setat la: \001%msg.8%\001"
+set black(say.ro.show.7) "\005\[BT\]\005 Flagul \001%msg.1%\001 este activat pe \002%chan%\002."
+set black(say.ro.show.8) "\005\[BT\]\005 Flagul \001%msg.1%\001 este dezactivat pe \002%chan%\002."
+
+################################### Rehash #####################################
+
+set black(say.ro.rehash.1) "\005\[BT\]\005 Reincarcare scripturi/setari...."
+
+################################### Restart ####################################
+
+set black(say.ro.restart.1) "\005\[BT\]\005 Restartare sistem. Revin imediat.."
+
+################################### Save #######################################
+
+set black(say.ro.save.1) "\005\[BT\]\005 Salvez fisierele.."
+
+################################### jump #######################################
+
+set black(say.ro.jump.1) "\005\[BT\]\005 Schimb server-ul de conectare la: %msg%"
+
+################################### Die #######################################
+
+set black(say.ro.die.1) "\005\[BT\]\005 M-am sinucis.."
+set black(say.ro.die.2) "\005\[BT\]\005 ** BOOM ** Acest eggdrop BlackTools a fost terminat." 
+
+################################### Nick #####################################
+
+set black(say.ro.nick.1) "\005\[BT\]\005 Imi schimb nick-ul in \002%msg.1%\002 (setare permanenta)"
+set black(say.ro.nick.2) "\005\[BT\]\005 Foloseste \"nick <nick nou>\""
+set black(say.ro.nick.3) "\005\[BT\]\005 Atentie. Nick-ul a fost schimbat doar pana la urmatorul restart. (te rog verifica daca exista setarea \"set nick\" in config-ul eggdrop-ului."
+set black(say.ro.nick.4) "\005\[BT\]\005 Imi schimb nick-ul in \002%msg.1%\002 (setare temporara)"
+
+################################### AddChan ##################################
+
+set black(say.ro.addchan.2) "\005\[BT\]\005 \002%msg.1%\002 este deja in lista mea de canale."
+set black(say.ro.addchan.3) "\005\[BT\]\005 Am adaugat \002%msg.1%\002 in lista mea de canale."
+
+################################### DelChan ##################################
+
+set black(say.ro.delchan.1) "Canalul \001%chan%\001 a fost sters de \002%hand%\002 cu motivul: \001%reason%\001"
+set black(say.ro.delchan.2) "\005\[BT\]\005 Canalul \002%msg.1%\002 nu se afla in memoria mea."
+set black(say.ro.delchan.3) "\005\[BT\]\005 Am sters \002%msg.1%\002 din lista mea de canale."
+set black(say.ro.delchan.5) "\005\[BT\]\005 Nu poti sterge canalul \002%msg.1%\002 deoarece are rang de \001HOMECHAN\001."
+
+################################### Suspend ##################################
+
+set black(say.ro.suspend.2) "Canalul \001%chan%\001 a fost suspendat de \002%hand%\002 cu motivul: \001%reason%\001"
+set black(say.ro.suspend.3) "\005\[BT\]\005 \002%msg.1%\002 are deja suspend.."
+set black(say.ro.suspend.4) "\005\[BT\]\005 Am suspendat canalul \002%msg.1%\002"
+
+################################### unsuspend ##################################
+
+set black(say.ro.unsuspend.3) "\005\[BT\]\005 \002%msg.1%\002 nu are suspend.."
+set black(say.ro.unsuspend.4) "\005\[BT\]\005 Am scos suspendul pentru canalul \002%msg.1%\002."
+
+################################### add #########################################
+
+set black(say.ro.add.5) "\005\[BT\]\005 Mai exista un user in baza mea de date cu acelasi host. Acesta este \002%msg.1%\002."
+set black(say.ro.add.6) "\005\[BT\]\005 Nu poti da access de \002%msg.1%\002 deoarece acesta este desupra level-ului tau."
+set black(say.ro.add.7) "\005\[BT\]\005 Nu poti da access de \002%msg.2%\002 deoarece acesta este level-ul tau."
+set black(say.ro.add.8) "\005\[BT\]\005 Nu poti da access de \002%msg.3%\002 deoarece acesta este level-ul tau."
+set black(say.ro.add.10) "\005\[BT\]\005 Am adaugat user-ul \001%msg.1%\001 cu host :\002%msg.2%\002"
+set black(say.ro.add.17) "\005\[BT\]\005 Userul \001%msg.1%\001 este prea lung. Acesta a fost scurtat automat la \002%msg.2%\002"
+set black(say.ro.add.18) "\005\[BT\]\005 Te rog foloseste un user valid format din caractere alfanumerice."
+set black(say.ro.add.19) "\005\[BT\]\005 \001%msg.1%\001 are access de \002%msg.2%\002 pe \002%chan%\002."
+set black(say.ro.add.20) "\005\[BT\]\005 \001%msg.1%\001 are access de \002%msg.2%\002."
+
+################################### DelAcc #########################################
+
+set black(say.ro.delacc.1) "\005\[BT\]\005 Am sters access-ul pentru \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.delacc.2) "\005\[BT\]\005 Am sters access-ul de \002OWNER\002 pentru \001%msg.1%\001."
+set black(say.ro.delacc.3) "\005\[BT\]\005 Nu are access de \002OWNER\002."
+set black(say.ro.delacc.4) "\005\[BT\]\005 Am sters access-ul de \002MASTER\002 pentru \001%msg.1%\001."
+
+#################################### Del ###########################################
+
+set black(say.ro.del.1) "\005\[BT\]\005 Am sters \002%msg.1%\002 din memoria mea."
+set black(say.ro.del.2) "\005\[BT\]\005 Nu poti sterge user-ul \001%msg.1%\001 deorece are access pe alte canale. Foloseste: \002delacc %msg.1%\002"
+
+################################### AddHost ########################################
+
+set black(say.ro.addhost.1) "\005\[BT\]\005 Hostul \001%msg.2%\001 exista deja in baza de date a lui \002%msg.1%\002."
+set black(say.ro.addhost.2) "\005\[BT\]\005 Am adaugat host-ul: \001%msg.2%\001 la user-ul: \002%msg.1%\002"
+
+################################### DelHost ########################################
+
+set black(say.ro.delhost.1) "\005\[BT\]\005 Hostul \001%msg.2%\001 nu exista in baza de date a lui \002%msg.1%\002."
+set black(say.ro.delhost.2) "\005\[BT\]\005 Am sters host-ul: \001%msg.2%\001 de la user-ul: \002%msg.1%\002"
+
+################################### chUser ########################################
+
+set black(say.ro.chuser.1) "\005\[BT\]\005 Am schimbat user-ul \001%msg.1%\001 in: \002%msg.2%\002 ."
+set black(say.ro.chuser.2) "\005\[BT\]\005 Ti-ai schimbat handle in: \002%msg.1%\002 ."
+set black(say.ro.chuser.3) "\005\[BT\]\005 Exista deja un user cu acelasi handle. Te rog alege altul."
+
+################################### UserList ########################################
+
+set black(say.ro.userlist.1) "\005\[BT\]\005 %msg%"
+set black(say.ro.userlist.2) "\005\[BT\]\005 Am in memorie \001%msg.1%\001 useri pe \002%chan%\002:"
+
+#################################### Channels #####################################
+
+set black(say.ro.channels.1) "\005\[BT\]\005 Am in memorie %msg.1% canale.."
+set black(say.ro.channels.2) "%msg%"
+set black(say.ro.channels.3) "\002OK\002"
+set black(say.ro.channels.4) "\002Nu sunt pe canal\002"
+set black(say.ro.channels.5) "\002Suspendat\002"
+set black(say.ro.channels.6) "\002Autosuspendat\002"
+set black(say.ro.channels.7) "\002Useri\002"
+set black(say.ro.channels.8) "\002Invizibil\002"
+
+#################################### Info ########################################
+
+set black(say.ro.info.1) "\005\[BT\]\005 \[USER\] \002%msg.1%\002 Nivel ACCESS : \002%msg.8%\002"
+set black(say.ro.info.2) "\005\[BT\]\005 \[CANAL\] \002%msg.1%\002 -- AUTOMODE: \002%msg.2%\002 -- STATISTICI: \001%char%stats %msg.3%\001"
+set black(say.ro.info.3) "\005\[BT\]\005 \[Mesaj intampinare\] %msg%"
+set black(say.ro.info.4) "\005\[BT\]\005 \[Ultima oara modificat de\] \002%msg.1%\002 in data de: \002%msg.8%\002"
+set black(say.ro.info.5) "\005\[BT\]\005 \[Ultima oara vazut ONLINE\] \002%msg.1%\002"
+set black(say.ro.info.6) "\005\[BT\]\005 \[Host-uri\] %msg%"
+set black(say.ro.info.7) "\005\[BT\]\005 ** SUSPENDAT ** - Expira in \001%msg.1% %msg.2% %msg.3%\001 (Nivel \002%msg.4%\002) - Motiv: \002%msg.10%\002"
+set black(say.ro.info.8) "\005\[BT\]\005 \[Canalele unde are access\] %msg%."
+set black(say.ro.info.9) "\005\[BT\]\005 ** SUSPENDAT GLOBAL ** - Expira in \001%msg.1% %msg.2% %msg.3%\001 (Nivel \002%msg.4%\002) - Motiv: \002%msg.10%\002"
+set black(say.ro.info.10) "\005\[BT\]\005 \[Ultima oara vazut ONLINE\] \001%msg.1%\001 pe canalul: \002%msg.2%\002"
+set black(say.ro.info.11) "\005\[BT\]\005 \[USER\] %msg.1%"
+set black(say.ro.info.12) "\005\[BT\]\005 Am gasit (\001%msg.1%\001) inregistrari: \002%msg.8%\002."
+set black(say.ro.info.13) "\005\[BT\]\005 Am gasit (\001%msg.1%\001) inregistrari. Te rog rectifica cautarea." 
+set black(say.ro.info.14) "\005\[BT\]\005 Pentru a afla informatii despre cea corecta, foloseste: \001%char%info <user>\001"
+set black(say.ro.info.15) "\005\[BT\]\005 \[CANAL\] \002%msg.1%\002 -- moduri: \002%msg.8%\002"
+set black(say.ro.info.16) "\005\[BT\]\005 \[MANAGER\] %msg%"
+set black(say.ro.info.17) "\005\[BT\]\005 \[TOPIC\] %msg%"
+set black(say.ro.info.18) "\005\[BT\]\005 \[URL\] %msg%"
+set black(say.ro.info.19) "\005\[BT\]\005 \[STATUS\] %msg%"
+set black(say.ro.info.20) "\005\[BT\]\005 \[INREGISTRAT\] \001%msg.1%\001 (\002%msg.8%\002)"
+set black(say.ro.info.21) "\005\[BT\]\005 \[STATISTICI\] intrari: \002%msg.1%\002 | useri: \002%msg.2%\002 (%msg.3% cu acces) | banuri: \002%msg.4%\002 | seen: \002%msg.5%\002"
+set black(say.ro.info.22) "\002SUSPENDAT\002"
+set black(say.ro.info.23) "\002NU SUNT PE CANAL\002"
+set black(say.ro.info.24) "\002Fara OP\002"
+set black(say.ro.info.25) "\005\[BT\]\005 \[CANAL\] \002%msg.1%\002 -- AUTOMODE: \002%msg.2%\002 -- Flaguri: \002%msg.3%\002 -- STATISTICI: \001%char%activ %msg.4%\001"
+set black(say.ro.info.26) "\002AUTOSUSPENDAT\002 -- Motiv: Nu am putut intra, canal plin (+l)"
+set black(say.ro.info.27) "\002AUTOSUSPENDAT\002 -- Motiv: Nu am putut intra, canalul are KEY (+k)"
+set black(say.ro.info.28) "\002AUTOSUSPENDAT\002 -- Motiv: Nu am putut intra, canalul e INVITE ONLY (+i)"
+set black(say.ro.info.29) "\002AUTOSUSPENDAT\002 -- Motiv: Nu am putut intra, am ban pe canal (+b)"
+set black(say.ro.info.30) "\002NU SUNT PE CANAL\002 -- Motiv: Nu pot intra, canalul este plin (+l)"
+set black(say.ro.info.31) "\002NU SUNT PE CANAL\002 -- Motiv: Nu pot intra, canalul are KEY (+k)"
+set black(say.ro.info.32) "\002NU SUNT PE CANAL\002 -- Motiv: Nu pot intra, canalul e INVITE ONLY (+i)"
+set black(say.ro.info.33) "\002NU SUNT PE CANAL\002 -- Motiv: Nu pot intra, am ban pe canal (+b)"
+set black(say.ro.info.34) "\002NU SUNT PE CANAL\002 -- Motiv: Nu pot intra, restrictie de mod (+r)"
+set black(say.ro.info.35) "\002AUTOSUSPENDAT\002 -- Motiv: Nu am putut intra, restrictie de mod (+r)"
+set black(say.ro.info.36) "\005\[BT\]\005 \[Setari\] %msg%"
+set black(say.ro.info.37) "\[BT\] \[BLACKLIST\] %msg%"
+
+################################## s #############################################
+
+set black(say.ro.s.1) "\005\[BT\]\005 \001%msg.1%\001 este deja suspendat pe \002%chan%\002."
+set black(say.ro.s.2) "\005\[BT\]\005 Access-ul lui \001%msg.1%\001 a fost suspendat pe \002%chan%\002"
+set black(say.ro.s.3) "Nu a fost specificat niciun motiv."
+set black(say.ro.s.4) "\005\[BT\]\005 \001%msg.1%\001 este deja suspendat de un user ce are nivel mai mare ca al tau."
+set black(say.ro.s.5) "\005\[BT\]\005 Access-ul lui \001%msg.1%\001 a fost suspendat \002GLOBAL\002"
+
+################################## us #############################################
+
+set black(say.ro.us.1) "\005\[BT\]\005 \001%msg.1%\001 nu are suspend pe \002%chan%\002."
+set black(say.ro.us.2) "\005\[BT\]\005 Am scos suspendul lui \001%msg.1%\001 pe \002%chan%\002."
+set black(say.ro.us.3) "\005\[BT\]\005 Am scos suspendul GLOBAL lui \002%msg.1%\002"
+set black(say.ro.us.4) "\005\[BT\]\005 \002%msg.1%\002 are suspend dat de un user cu nivel mai mare."
+
+################################## r ##############################################
+
+set black(say.ro.r.1) {	"Reimprospatez topicul...."
+			"Reincarc topicul...."
+				}
+set black(say.ro.r.2) "\005\[BT\]\005 Nu pot executa. Nu exista niciun topic." 
+
+################################## Auto ##########################################
+
+set black(say.ro.auto.6) "\005\[BT\]\005 Ti-am setat autoop (+o) global"
+set black(say.ro.auto.7) "\005\[BT\]\005 Ti-am setat autovoice (+v) global"
+set black(say.ro.auto.8) "\005\[BT\]\005 Ti-am setat autoop pe \002%chan%\002"
+set black(say.ro.auto.9) "\005\[BT\]\005 Ti-am setat autovoice pe \002%chan%\002"
+set black(say.ro.auto.10) "\005\[BT\]\005 Am setat autoop pentru \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.auto.11) "\005\[BT\]\005 Am setat autovoice pentru \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.auto.12) "\005\[BT\]\005 Am setat autoop global pentru \002%msg.1%\002"
+set black(say.ro.auto.13) "\005\[BT\]\005 Am setat autovoice global pentru \002%msg.1%\002"
+set black(say.ro.auto.14) "\005\[BT\]\005 Ti-am sters autoop (+o) global"
+set black(say.ro.auto.15) "\005\[BT\]\005 Ti-am sters autovoice (+v) global"
+set black(say.ro.auto.16) "\005\[BT\]\005 Ti-am sters autoop pe \002%chan%\002"
+set black(say.ro.auto.17) "\005\[BT\]\005 Ti-am sters autovoice pe \002%chan%\002"
+set black(say.ro.auto.18) "\005\[BT\]\005 Am sters autoop pentru \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.auto.19) "\005\[BT\]\005 Am sters autovoice pentru \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.auto.20) "\005\[BT\]\005 Am sters autoop global pentru \002%msg.1%\002"
+set black(say.ro.auto.21) "\005\[BT\]\005 Am sters autovoice global pentru \002%msg.1%\002"
+
+################################# Login #########################################
+
+set black(say.ro.login.1) "\005\[BT\]\005 Ma loghez la \002%msg.1%\002.."
+set black(say.ro.login.2) "\005\[BT\]\005 Sunt deja logat la \002%msg.1%\002.."
+set black(say.ro.login.3) "\005\[BT\]\005 Nu m-am putut loga. Te rog sa verifici datele de logare sau daca chanserv este online."
+set black(say.ro.login.4) "\005\[BT\]\005 Nu m-am putut loga (Parola gresita)"
+set black(say.ro.login.5) "\005\[BT\]\005 Logare reusita"
+set black(say.ro.login.6) "\005\[BT\]\005 Logare nereusita (s-a depasit numarul maxim de logari)"
+set black(say.ro.login.7) "\005\[BT\]\005 Logare nereusita (nu s-a specificat un username)"
+set black(say.ro.login.8) "\005\[BT\]\005 Logare nereusita (username invalid)"
+set black(say.ro.login.9) "\005\[BT\]\005 Ma identific la NICKSERV..."
+set black(say.ro.login.10) "\005\[BT\]\005 Identificare reusita la NICKSERV"
+set black(say.ro.login.11) "\005\[BT\]\005 Identificare esuata la NICKSERV (Parola gresita)"
+set black(say.ro.login.13) "Parola gresita"
+set black(say.ro.login.15) "Nickname inregistrat de altcineva"
+set black(say.ro.login.16) "\005\[BT\]\005 Identificare esuata la NICKSERV (nickname inregistrat de altcineva)"
+
+################################# Enable #####################################
+
+set black(say.ro.enable.1) "\005\[BT\]\005 Am activat comanda \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.enable.2) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja activata pe \002%chan%\002"
+set black(say.ro.enable.3) "\005\[BT\]\005 Comanda \002%msg.1%\002 nu exista"
+set black(say.ro.enable.4) "\005\[BT\]\005 Am activat comanda \001%msg.1%\001 pentru \002%msg.2%\002 pe \002%chan%\002"
+set black(say.ro.enable.5) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja activata pentru \002%msg.2%\002 pe \002%chan%\002"
+set black(say.ro.enable.6) "\005\[BT\]\005 Am activat comanda \001%msg.1%\001 \002GLOBAL\002"
+set black(say.ro.enable.7) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja activata \002GLOBAL\002"
+set black(say.ro.enable.8) "\005\[BT\]\005 ATENTIE, comanda \001%msg.1%\001 este dezactivata \002GLOBAL\002"
+set black(say.ro.enable.9) "\005\[BT\]\005 Nu pot executa, comanda \002%msg.1%\002 este dezactivata de un user cu nivel de access mai mare."
+
+################################# Disable #####################################
+
+set black(say.ro.disable.1) "\005\[BT\]\005 Am dezactivat comanda \001%msg.1%\001 pe \002%chan%\002"
+set black(say.ro.disable.2) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja dezactivata pe \002%chan%\002"
+set black(say.ro.disable.3) "\005\[BT\]\005 Comanda \001%msg.1%\001 nu exista."
+set black(say.ro.disable.4) "\005\[BT\]\005 Am dezactivat comanda \001%msg.1%\001 pentru \002%msg.2%\002 pe \002%chan%\002"
+set black(say.ro.disable.5) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja dezactivata pentru \002%msg.2%\002 pe \002%chan%\002"
+set black(say.ro.disable.6) "\005\[BT\]\005 Am dezactivat comanda \001%msg.1%\001 \002GLOBAL\002"
+set black(say.ro.disable.7) "\005\[BT\]\005 Comanda \001%msg.1%\001 este deja dezactivata \002GLOBAL\002"
+set black(say.ro.disable.8) "\005\[BT\]\005 Nu poti dezactiva comanda \002%msg.1\002"
+
+################################### Module #######################################
+
+set black(say.ro.hmodule.1) "Module: %msg%"
+set black(say.ro.hmodule.3) "Pentru a vizualiza \002Manualul\002 fiecarui modul foloseste: \001%char%man <modul>\001 | \002%botnick% man <modul>\002"
+
+####################################### h ########################################
+
+set black(say.ro.h.1) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.2) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 add ; \002%char%h\002 chaninfo ; \002%char%h\002 BTinfo ; \002%char%h\002 module ; \002%char%h\002 egg ; \002%char%h\002 owner"
+set black(say.ro.h.3) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.4) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 add ; \002%char%h\002 chaninfo ; \002%char%h\002 BTinfo ; \002%char%h\002 module ; \002%char%h\002 egg ; \002%char%h\002 owner"
+set black(say.ro.h.5) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.6) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 module"
+set black(say.ro.h.7) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.8) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 module"
+set black(say.ro.h.11) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.12) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 add ; \002%char%h\002 module"
+set black(say.ro.h.13) "\005\[BT\]\005 NIVEL ACCESS \002-= %msg% =-\002"
+set black(say.ro.h.14) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 add ; \002%char%h\002 chaninfo ; \002%char%h\002 BTinfo ; \002%char%h\002 module"
+set black(say.ro.h.15) "\005\[BT\]\005 %msg%"
+set black(say.ro.h.16) "\005\[BT\]\005 Te rog asteapta \001%msg.1%\001 de secunde inainte de a executa o alta comanda de tip \002%char%h\002. Multumesc!"
+set black(say.ro.h.17) "\005\[BT\]\005 \002h\002 cmds ; \002h\002 ban ; \002h\002 add ; \002h\002 chaninfo ; \002h\002 BTinfo ; \002h\002 module ; \002h\002 egg ; \002h\002 owner"
+set black(say.ro.h.18) "\005\[BT\]\005 \002h\002 cmds ; \002h\002 ban ; \002h\002 add ; \002h\002 chaninfo ; \002h\002 BTinfo ; \002h\002 module"
+set black(say.ro.h.19) "\005\[BT\]\005 \002h\002 cmds ; \002h\002 ban ; \002h\002 add ; \002h\002 module"
+set black(say.ro.h.20) "\005\[BT\]\005 \002h\002 cmds ; \002h\002 ban ; \002h\002 module"
+set black(say.ro.h.21) "\005\[BT\]\005 %botnick% \002h\002 cmds ; %botnick% \002h\002 ban ; %botnick% \002h\002 add ; %botnick% \002h\002 chaninfo ; %botnick% \002h\002 BTinfo ; %botnick% \002h\002 module ; %botnick% \002h\002 egg ; %botnick% \002h\002 owner"
+set black(say.ro.h.22) "\005\[BT\]\005 %botnick% \002h\002 cmds ; %botnick% \002h\002 ban ; %botnick% \002h\002 add ; %botnick% \002h\002 chaninfo ; %botnick% \002h\002 BTinfo ; %botnick% \002h\002 module"
+set black(say.ro.h.23) "\005\[BT\]\005 %botnick% \002h\002 cmds ; %botnick% \002h\002 ban ; %botnick% \002h\002 add ; %botnick% \002h\002 module"
+set black(say.ro.h.24) "\005\[BT\]\005 %botnick% \002h\002 cmds ; %botnick% \002h\002 ban ; %botnick% \002h\002 module"
+set black(say.ro.h.25) "\005\[BT\]\005 \002%char%h\002 cmds ; \002%char%h\002 ban ; \002%char%h\002 add ; \002%char%h\002 chaninfo ; \002%char%h\002 BTinfo ; \002%char%h\002 module ; \002%char%h\002 master"
+set black(say.ro.h.26) "\005\[BT\]\005 \002h\002 cmds ; \002h\002 ban ; \002h\002 add ; \002h\002 chaninfo ; \002h\002 BTinfo ; \002h\002 module ; \002h\002 master"
+set black(say.ro.h.27) "\005\[BT\]\005 %botnick% \002h\002 cmds ; %botnick% \002h\002 ban ; %botnick% \002h\002 add ; %botnick% \002h\002 module ; %botnick% \002h\002 master"
+
+set black(say.ro.hcommand.1) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei comenzi, foloseste: \001%char%man <comanda>\001"
+set black(say.ro.hcommand.2) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei comenzi, foloseste: \001%botnick% man <comanda>\001"
+set black(say.ro.hcommand.3) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei comenzi, foloseste: \001man <comanda>\001"
+set black(say.ro.hcommand.4) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei setari, foloseste: \001%char%man <setare>\001"
+set black(say.ro.hcommand.5) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei setari, foloseste: \001%botnick% man <setare>\001"
+set black(say.ro.hcommand.6) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei setari, foloseste: \001man <setare>\001"
+set black(say.ro.hcommand.7) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarui modul, foloseste: \001%char%man <modul>\001"
+set black(say.ro.hcommand.8) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarui modul, foloseste: \001%botnick% man <modul>\001"
+set black(say.ro.hcommand.9) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarui modul, foloseste: \001man <modul>\001"
+
+set black(say.ro.cmdsvoice) "v \[#canal\] \[nick\] ; man <comanda> ; version ; i \[#canal\] <nick> ; seen \[#canal\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; activ \[#canal\] <nick> ; myset <optiune> \[descriere\] \[show|reset\] ; report \[#canal\] <nick> ; h \[#canal\] \[categorie\]"
+set black(say.ro.cmdsop) "o \[#canal\] \[nick\] ; v \[#canal\] \[nick\] ; ho \[#canal\] \[nick\] ; man <comanda> ; version ; mode \[#canal\] <+/-mod> ; cycle \[#canal\] \[durata|motiv\] ; i \[#canal\] <nick> ; seen \[#canal\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; activ \[#canal\] <nick> ; t \[#canal\] <text> ; myset <optiune> \[descriere\] \[show|reset\] ; h \[#canal\] \[categorie\] ; r \[#canal\] ; omsg \[#canal|all\] <text>"
+set black(say.ro.cmdadmin) "o \[#canal\] \[nick\] ; v \[#canal\] \[nick\] ; ho \[#canal\] \[nick\] ; man <comanda> ; version ; mode \[#canal\] <+/-mod> ; cycle \[#canal\] \[durata|motiv\] ; say \[#canal\] <text> ; act \[#canal\] <text> ; i \[#canal\] <nick> ; seen \[#canal\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; activ \[#canal\] <nick> ; t \[#canal\] <text> ; myset <optiune> \[descriere\] \[show|reset\] ; h \[#canal\] \[categorie\] ; r \[#canal\] ; omsg \[#canal|all\] <text>"
+set black(say.ro.cmdmanager) "o \[#canal\] \[nick\] ; v \[#canal\] \[nick\] ; ho \[#canal\] \[nick\] ; man <comanda> ; version ; mode \[#canal\] <+/-mod> ; cycle \[#canal\] \[durata|motiv\] ; say \[#canal\] <text> ; act \[#canal\] <text> ; i \[#canal\] <nick> ; seen \[#canal\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; activ \[#canal\] <nick> ; t \[#canal\] <text> ; myset <optiune> \[descriere\] \[show|reset\] ; h \[#canal\] \[categorie\] ; r \[#canal\] ; omsg \[#canal|all\] <text>"
+set black(say.ro.cmdbossowner) "o \[#canal\] \[nick\] ; v \[#canal\] \[nick\] ; ho \[#canal\] \[nick\] ; man <comanda> ; version ; mode \[#canal\] <+/-mod> ; cycle \[#canal\] \[durata|motiv\] ; say \[#canal\] <text> ; act \[#canal\] <text> ; seen \[#canal|global\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; broadcast <text> ; i \[#canal\] <nick> ; activ \[#canal\] <nick> ; t \[#canal\] <text> ; myset <optiune> \[descriere\] \[show|reset\] ; h \[#canal\] \[categorie\] ; r \[#canal\] ; msg <nick> <text> ; omsg \[#canal|all\] <text>"
+set black(say.ro.cmdmaster) "o \[#canal\] \[nick\] ; v \[#canal\] \[nick\] ; ho \[#canal\] \[nick\] ; man <comanda> ; version ; mode \[#canal\] <+/-mod> ; cycle \[#canal\] \[durata|motiv\] ; say \[#canal\] <text> ; act \[#canal\] <text> ; seen \[#canal|global\] <nick|ip|host> ; for <botnick1>,<botnick2> <comanda> \[optiune\] ; i \[#canal\] <nick> ; activ \[#canal\] <nick> ; t \[#canal\] <text> ; myset <optiune> \[descriere\] \[show|reset\] ; h \[#canal\] \[categorie\] ; r \[#canal\] ; msg <nick> <text> ; omsg \[#canal|all\] <text>"
+
+set black(say.ro.banvoice) "k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick> ; sb \[#canal\] <nick|host|id>"
+set black(say.ro.banop) "b \[#canal\] <nick|host> \[-nivel\] \[durata\] \[motiv\] ; dr \[#canal\] <nick|host> ; bot \[#canal\] <nick|host> ; n \[#canal\] <nick> ; id \[#canal\] <nick> ; spam \[#canal\] <nick|host> ; bw \[#canal\] <nick|host> ; vr \[#canal\] <nick|host> ; gag \[#canal\] <nick> \[durata\] \[motiv\] ; ungag \[#canal\] <nick|host> ; troll \[#canal\] <nick> ; mb \[#canal\] <nick> \[reason\] ; ub \[#canal\] <nick|host|id> ; sb \[#canal\] <nick|host|id> ; banlist \[#canal\] <all|user|other> ; k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick>"
+set black(say.ro.banadmin) "b \[#canal\] <nick|host> \[-nivel\] \[durata\] \[motiv\] ; black \[#canal\] <nick|host> \[motiv\] ; stick \[#canal\] <nick|host> \[durata\] \[motiv\] ; dr \[#canal\] <nick|host> ; bot \[#canal\] <nick|host> ; n \[#canal\] <nick> ; id \[#canal\] <nick> ; spam \[#canal\] <nick|host> ; bw \[#canal\] <nick|host> ; vr \[#canal\] <nick|host> ; gag \[#canal\] <nick> \[durata\] \[motiv\] ; ungag \[#canal\] <nick|host> ; troll \[#canal\] <nick> ; mb \[#canal\] <nick> \[reason\] ; ub \[#canal\] <nick|host|id> ; sb \[#canal\] <nick|host|id> ; banlist \[#canal\] <all|user|other> ; stats <nick> \[total\] ; k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick>"
+set black(say.ro.banmanager) "b \[#canal\] <nick|host> \[-nivel\] \[durata\] \[motiv\] ; black \[#canal\] <nick|host> \[motiv\] ; stick \[#canal\] <nick|host> \[durata\] \[motiv\] ; dr \[#canal\] <nick|host> ; bot \[#canal\] <nick|host> ; n \[#canal\] <nick> ; id \[#canal\] <nick> ; spam \[#canal\] <nick|host> ; bw \[#canal\] <nick|host> ; vr \[#canal\] <nick|host> ; gag \[#canal\] <nick> \[durata\] \[motiv\] ; ungag \[#canal\] <nick|host> ; troll \[#canal\] <nick> ; mb \[#canal\] <nick> \[reason\] ; ub \[#canal\] <nick|host|id> ; sb \[#canal\] <nick|host|id> ; exempt \[#canal\] <add|list|del> <ip|host> \[durata\] \[motiv\] ; banlist \[#canal\] <all|user|other> ; stats <nick> \[total|reset\] ; k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick>"
+set black(say.ro.banbossowner) "b \[#canal\] <nick|host> \[-nivel\] \[durata\] \[global|link\] \[motiv\] ; black \[#canal\] <nick|host> \[motiv\] ; stick \[#canal\] <nick|host> \[durata\] \[motiv\] ; dr \[#canal\] <nick|host> ; bot \[#canal\] <nick|host> ; n \[#canal\] <nick> ; id \[#canal\] <nick> ; spam \[#canal\] <nick|host> ; bw \[#canal\] <nick|host>; vr \[#canal\] <nick|host> ; gag \[#canal\] <nick> \[durata\] \[motiv\] ; ungag \[#canal\] <nick|host> ; troll \[#canal\] <nick> ; mb \[#canal\] <nick> \[reason\] ; ub \[#canal\] <nick|host|id> \[global|link\] ; sb \[#canal\] <nick|host|id> \[global\] ; exempt \[#canal\] <add|list|del> <ip|host> \[durata\] \[global\] \[motiv\] ; banlist \[#canal\] <all|user|other|global> ; stats <nick> \[total|reset\] ; k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick>"
+set black(say.ro.banmaster) "b \[#canal\] <nick|host> \[-nivel\] \[durata\] \[motiv\] ; black \[#canal\] <nick|host> \[motiv\] ; stick \[#canal\] <nick|host> \[durata\] \[motiv\] ; dr \[#canal\] <nick|host> ; bot \[#canal\] <nick|host> ; n \[#canal\] <nick> ; id \[#canal\] <nick> ; spam \[#canal\] <nick|host> ; bw \[#canal\] <nick|host> ; vr \[#canal\] <nick|host> ; gag \[#canal\] <nick> \[durata\] \[motiv\] ; ungag \[#canal\] <nick|host> ; troll \[#canal\] <nick> ; mb \[#canal\] <nick> \[reason\] ; ub \[#canal\] <nick|host|id> ; sb \[#canal\] <nick|host|id> ; exempt \[#canal\] <add|list|del> <ip|host> \[durata\] \[global\] \[motiv\] ; banlist \[#canal\] <all|user|other> ; stats <nick> \[total|reset\] ; k \[#canal\] <nick|host> \[motiv\] ; w \[#canal\] <nick>"
+
+set black(say.ro.addadmin) "add \[#canal\] <nivel> <user chanserv|nick> ; userlist \[#canal\] <nivel|all> ; info \[#canal\] <user|#canal> ; delacc \[#canal\] <user> ; auto \[#canal\] <+/-o> <user> ; auto \[#canal\] <+/-v> <user> ; s \[#canal\] <user> \[durata\] \[motiv\] ; us \[#canal\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.ro.addmanager) "add \[#canal\] <nivel> <user chanserv|nick> ; userlist \[#canal]\ <nivel|all> ; info \[#canal\] <user|#canal> ; delacc \[#canal\] <user> ; del <user> ; auto \[#canal\] <+/-o> <user> ; auto \[#canal\] <+/-v> <user> ; chuser <user> <user nou> ; s \[#canal\] <user> \[durata\] \[motiv\] ; us \[#canal\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.ro.addowner) "add \[#canal\] <nivel> <user chanserv|nick>  ; userlist \[#canal\] <nivel|all> ; info \[#canal\] <user|#canal> ; delacc \[#canal\] <user> ; del <user> ; auto \[#canal\] <+/-o> <user> \[global\] ; auto \[#canal\] <+/-v> <user> \[global\] ; chuser <user> <user nou> ; s \[#canal\] <user> \[durata\] \[motiv\] ; us \[#canal\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.ro.addbossowner) "add \[#canal\] <nivel> <user chanserv|nick> ; userlist \[#canal\] <nivel> ; info \[#canal\] <user|#canal> ; delacc \[#canal\] <user> ; del <user> ; auto \[#canal\] <+/-o> <user> \[global\] ; auto \[#canal\] <+/-v> <user> \[global\] ; chuser <user> <user nou> ; s \[#canal\] <user> \[durata\] \[motiv\] ; us \[#canal\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.ro.addmaster) "add \[#canal\] <nivel> <user chanserv|nick> ; userlist \[#canal\] <nivel> ; info \[#canal\] <user|#canal> ; delacc \[#canal\] <user> ; del <user> ; auto \[#canal\] <+/-o> <user> ; auto \[#canal\] <+/-v> <user> ; chuser <user> <user nou> ; s \[#canal\] <user> \[durata\] \[motiv\] ; us \[#canal\] <user> ; addhost <user> <host> ; delhost <user> <host>"
+set black(say.ro.hmanager.1) "purge \[#canal\] <motiv> ; set \[#canal\] <+/-optiune> ; set \[#canal\] <optiune> <descriere> ; unset \[#canal\] <optiune> ; show \[#canal\] <optiune> ; ignore <add|list|del> <host> \[durata\] \[motiv\] ; enable <comanda|all> \[user\] ; disable <comanda|all> \[user\]"
+set black(say.ro.hbossowner.1) "addchan <#canal> ; delchan <#canal> ; suspend <#canal> ; unsuspend <#canal>; set \[#canal|global\] <optiune> <descriere> ; unset \[#canal|global\] <optiune> ; show \[#canal\] <optiune> ; channels ; die \[motiv\] ; restart ; jump \[server\] ; save ; rehash ; login ; nick <nicknou> ; uptime ; status ; cp <optiune> <#canal1> <#canal2> ; ignore <add|list|del> <host> \[durata\] \[motiv\] ; enable <comanda|all> \[user\] \[global\] ; disable <comanda|all> \[user\] \[global\] ; chat"
+set black(say.ro.hmaster.1) "addchan <#canal> ; delchan <#canal> ; suspend <#canal> ; unsuspend <#canal>; set \[#canal\] <optiune> <descriere> ; unset \[#canal\] <optiune> ; show \[#canal\] <optiune> ; channels ; uptime ; status ; ignore <add|list|del> <host> \[durata\] \[motiv\] ; enable <comanda|all> \[user\] ; disable <comanda|all> \[user\]"
+set black(say.ro.hchaninfo.1) "\002Flaguri Eggdrop\002: "
+set black(say.ro.hchaninfo.2) "\002BT Setari\002: "
+set black(say.ro.hchaninfo.3) "\002Str Eggdrop\002"
+set black(say.ro.hchaninfo.4) "\002BT Str\002: "
+set black(say.ro.hegg.1) "\005\[BT\]\005 %msg%"
+set black(say.ro.hegg.2) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei optiuni, foloseste: \001%char%man <optiune>\001"
+set black(say.ro.hegg.3) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei optiuni, foloseste: \001%botnick% man <optiune>\001"
+set black(say.ro.hegg.4) "\005\[BT\]\005 Pentru a vizualiza \002Manualul\002 fiecarei optiuni, foloseste: \001man <optiune>\001"
+
+############################### GREETING #######################################
+
+set black(say.ro.greeting.1) "\005\[BT\]\005 Bun venit in lumea \001BlackToolS\001 versiunea \002$black(vers)\002. Pentru a incepe, trebuie sa definiti urmatoarele setari:"
+set black(say.ro.greeting.2) "\002%char%myset mychar\002 <trigger> ( setare trigger dorit ) ; \001%char%myset lang\001 <limba> ( RO | EN )"
+set black(say.ro.greeting.3) "\001%char%myset mychan\001 <#canal> ; \002%char%myset output\002 <metoda> ( CHAN | NOTICE )"
+set black(say.ro.greeting.4) "\002%char%myset noteexpire\002 <nr. zile> ; \001%char%myset greet\001 <mesaj> ; \002%char%myset autoinvite\002 <ON|OFF>"
+set black(say.ro.greeting.5) "\005\[BT\]\005 Foloseste \001%char%h\001 pe orice canal in care se afla botul pentru o \002lista completa\002 a comenzilor disponibile."
+set black(say.ro.greeting.6) "\005\[BT\]\005 Pentru a citi \001manualul BlackTools\001 al setarilor, foloseste: \001%char%man <setare>\001. Have Fun! >:)"
+
+################################### Abuse Report ###############################
+
+set black(say.ro.abuse.1) "\005\[BT\]\005 Nu pot intra pe \001%msg.1%\001. Motiv: BAN"
+set black(say.ro.abuse.2) "Nu pot intra pe \001%chan%\001 deoarece am BAN (+b)"
+set black(say.ro.abuse.3) "\005\[BT\]\005 Nu pot intra pe \001%msg.1%\001. Motiv: INVITE ONLY"
+set black(say.ro.abuse.4) "Nu pot intra pe \001%chan%\001 deoarece este INVITE ONLY (+i)"
+set black(say.ro.abuse.5) "\005\[BT\]\005 Nu pot intra pe \001%msg.1%\001. Motiv: KEY"
+set black(say.ro.abuse.6) "Nu pot intra pe \001%chan%\001 deoarece este pus KEY (+k)"
+set black(say.ro.abuse.7) "\005\[BT\]\005 Nu pot intra pe \001%msg.1%\001. Motiv: CHANNEL FULL"
+set black(say.ro.abuse.8) "Nu pot intra pe \001%chan%\001 deoarece canalul este plin (+l)"
+set black(say.ro.abuse.9) "\005\[BT\]\005 Am suspendat canalul \001%msg.1%\001 pentru abuz."
+set black(say.ro.abuse.10) "Am suspendat canalul \001%msg.1%\001 pentru abuz."
+set black(say.ro.abuse.11) "Nu pot intra pe %chan% deoarece este RESTRICTIE DE MOD (+r)"
+set black(say.ro.abuse.12) "\005\[BT\]\005 Nu pot intra pe \001%msg.1%\001. Motiv: RESTRICTIE DE MOD"
+
+################################### ChanLink ###################################
+
+set black(say.ro.chanlink.1) "\005\[BT\]\005 Am setat \002CHANLINK\002 pentru canalele: \001%msg%\001"
+set black(say.ro.chanlink.2) "\005\[BT\]\005 Am resetat \002CHANLINK\002"
+set black(say.ro.chanlink.3) "\005\[BT\]\005 Urmatoarele canale au setat \002CHANLINK\002: \001%msg%\001"
+set black(say.ro.chanlink.4) "\005\[BT\]\005 Am setat \002CHANLINK\002 pentru toate canalele din memorie."
+set black(say.ro.chanlink.5) "\005\[BT\]\005 Nu sunt canale ce au setat \002CHANLINK\002"
+set black(say.ro.chanlink.6) "\005\[BT\]\005 Urmatoarele canale sunt invalide: \001%msg%\001"
+set black(say.ro.chanlink.7) "\005\[BT\]\005 Am sters \002CHANLINK\002 pentru \001%msg.1%\001"
+set black(say.ro.chanlink.8) "\005\[BT\]\005 \001%msg.1%\001 nu are activat \002CHANLINK\002."
+
+###################################### O #######################################
+
+set black(say.ro.o.1) "\005\[BT\]\005 Nu poti folosi mass deop deoarece \001%msg.1%\001 este pe \002%chan%\002."
+
+################################### man ########################################
+
+set black(say.ro.man.1_1) "\005\[BT\]\005 Imi pare rau \001%msg.1%\001, nu am nicio informatie de ajutor despre acest subiect."
+
+#################################### User Expire ###############################
+
+set black(say.ro.userexpire.1) "\[BT\] Expirare automata useri: \002%msg.1%\002 useri expirati gasiti."
+
+#################################### hello #####################################
+
+set black(say.ro.hello.1) "*** HOORAH! *** Ai access de \002%msg%\002 la comenzile mele."
+set black(say.ro.hello.2) "\005\[BT\]\005 Salut \001%msg.1%\001. Sunt \002%botnick%\002, un eggdrop ce ruleaza \001%msg.2%\001 %msg.3%."
+set black(say.ro.hello.3) "\005\[BT\]\005 De acum incolo o sa te recunosc dupa host-ul '\001%msg.1%\001'. Te rog seteaza-ti o parola, folosind: \001/msg \002%botnick% pass\002 <parola ta>\001"
+set black(say.ro.hello.4) "\005\[BT\]\005 Poti folosi \002%char%h\002 in orice canal pe care se afla botul pentru a obtine o lista completa cu toate comenzile disponibile. Distractie placuta :D"
+
+#################################### Pass ######################################
+
+set black(say.ro.pass.1) "\005\[BT\]\005 Parola ta setata este: \002%msg%\002"
+
+#################################### oMsg ######################################
+
+set black(say.ro.omsg.1) "\005\[BT\]\005 Mesaj trimis catre toti @ de pe: \002%msg%\002"
+
+#################################### forward ###################################
+
+set black(say.ro.forward.1) "\005\[BT\]\005 \004\[MESAJ PRIVAT\]\004 de la -- <\002%msg.1%\002> ťťť \001%msg.8%\001"
+
+##################################### mb #######################################
+
+set black(say.ro.mb.5) "Client de IRC folosit pentru abuz. Te rog sa iei in considerare folosirea unui alt client."
+
+##################################### HandleBan ################################
+
+set black(say.ro.handleban.1) "User in BlackList!"
+
+##################################### Exempt ###################################
+
+set black(say.ro.exempt.1) "Permanent"
+set black(say.ro.exempt.2) "\005\[BT\]\005 \[CANAL\]: * (\002%msg.1%\002 exceptii gasite)"
+set black(say.ro.exempt.3) "\005\[BT\]\005 Pentru a afisa urmatoarele exceptii foloseste: \001%char%exempt list global -next\001 (\002%counter%\002 exceptii ramase)"
+set black(say.ro.exempt.4) "\005\[BT\]\005 *** Sfarsit exempts ***"
+set black(say.ro.exempt.5) "\005\[BT\]\005 \002%msg.2%\002 ; \002%msg.3%\002 ; Adaugat de: \002%msg.4%\002 ; Data: \002%msg.12%\002 ; Expira in: %msg.13% \002%msg.15%\002 \002%msg.17%\002 ; Motiv: %msg.20%"
+set black(say.ro.exempt.6) "\005\[BT\]\005 \[CANAL\]: %chan% (\002%msg.1%\002 exceptii gasite)"
+set black(say.ro.exempt.10) "\005\[BT\]\005 Pentru a afisa urmatoarele banuri foloseste: \001%char%exempt list -next\001 (\002%counter%\002 exceptii ramase)"
+set black(say.ro.exempt.11) "\005\[BT\]\005 \002%msg.2%\002 ; \002%msg.3%\002 ; Adaugat de: \002%msg.4%\002 ; Data: \002%msg.12%\002 ; Expira in: %msg.13% ; Motiv: %msg.14%"
+set black(say.ro.exempt.13) "NICIODATA"
+set black(say.ro.exempt.14) "\005\[BT\]\005 Pentru a afisa urmatoarele exceptii foloseste: \001%char%exempt %chan% list -next\001 (\002%counter%\002 banuri ramase)"
+set black(say.ro.exempt.7) "\005\[BT\]\005 Am adaugat exceptie la ban pentru host \002%msg.1%\002 pe %chan%"
+set black(say.ro.exempt.8) "\005\[BT\]\005 Am adaugat exceptie la ban pentru host \002%msg.1%\002 pentru toate canalele."
+set black(say.ro.exempt.9) "\005\[BT\]\005 Am sters exceptia la ban pentru host \002%msg.1%\002 pe %chan%"
+set black(say.ro.exempt.12) "\005\[BT\]\005 Am sters exceptia la ban pentru host \002%msg.1%\002 pe toate canalele"
+set black(say.ro.exempt.15) "\005\[BT\]\005 Nu exista exceptie la ban pentru host \002%msg.1%\002 pe %chan%"
+set black(say.ro.exempt.16) "\005\[BT\]\005 Nu exista exceptie la ban pentru host \002%msg.1%\002 pentru toate canalele"
+
+##############################
+############################################################################################################
+#   SFARSIT                                                                                                #
+############################################################################################################

+ 40 - 0
BlackTools/lang/CumSaAdaugi.txt

@@ -0,0 +1,40 @@
+============================================================================================
+                         -= BLaCkShaDoW Production Presents =-
+                    BlackTools - The Ultimate Channel Control Script
+                             One TCL. One smart Eggdrop
+============================================================================================
+
+Limbile disponibile sunt RO si EN.
+Dar poti adauga dupa preferinta o alta limba
+
+Pasi de urmat:
+
+1 - Creaza un fisier tip .tcl in folderul lang cu numele "BT.<limba>.lang.tcl"
+De exemplu adaugam limba "franceza" , deci punem numele la fisier ""BT.fr.lang.tcl"
+
+2 - Acum trebuie sa traducem textul dintr-o alta limba disponibila din folderul BlackTools/lang.
+    De tinut minte, in cadrul fisierului avem variabile de genu : black(say.ro.gl.noban). Aici trebuie
+sa modificam pentru limba adaugata (spre exemplu franceza) si vom avea : black(say.fr.gl.noban).
+
+3 - Dam rehash la Eggdrop
+
+4 - Scriem pe canal .myset lang fr
+
+5 - Si asta este, am integrat si activat limba franceza.
+
+6 - Daca dorim sa facem limba franceza ca cea standard a scriptului deschidem BlackTOols.tcl si avem :
+
+#Default language ( RO / EN )
+
+set black(default_lang) "RO" 
+
+7 - Setam aici
+
+set black(default_lang) "FR"
+
+
+Si cam atat :)
+
+----------------------------------------------------------------------------------------------
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+----------------------------------------------------------------------------------------------

+ 40 - 0
BlackTools/lang/HowToAdd.txt

@@ -0,0 +1,40 @@
+============================================================================================
+                         -= BLaCkShaDoW Production Presents =-
+                    BlackTools - The Ultimate Channel Control Script
+                             One TCL. One smart Eggdrop
+============================================================================================
+
+The available languages are RO and EN.
+But you can easily add another language of your choice.
+
+The steps are:
+
+1 - Create a tcl file in the lang folder with the name "BT.<lang>.lang.tcl"
+For example we add the language "French" , so we create the file -> "BT.fr.lang.tcl" <-
+
+2 - Now you have to translate the text from other language file that is available..into you language file.
+    Remember, in the file we have the variables : black(say.ro.gl.noban). Here we have
+to modify for the language added (for example french) and we will have : black(say.fr.gl.noban).
+
+3 - Rehash your BOT
+
+4 - Type in the chan .myset lang fr
+
+5 - And There you are, the french language is ready
+
+6 - If you want to set the french language as default open the BlackTools.tcl and you will have
+
+#Default language ( RO / EN )
+
+set black(default_lang) "RO" 
+
+7 - Set here
+
+set black(default_lang) "FR"
+
+
+Thats all folks :)
+
+----------------------------------------------------------------------------------------------
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+----------------------------------------------------------------------------------------------

+ 54 - 0
BlackTools/lang/loader.tcl

@@ -0,0 +1,54 @@
+#################################################################
+#     _   _   _   _   _   _   _   _   _   _   _   _   _   _  ####
+#    / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \    #
+#   ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )   #
+#    \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/    #
+#                                                               #
+###############                                                 #
+#################################################################
+#
+##### LANGUAGE MODULE 
+### This is the language loader for BlackTools.tcl
+#
+### Provides replies/notices in diff languages.
+### The default lang can be set in BlackTools.tcl
+#
+## 1 - Romanian
+## 2 - English
+## 3 - Italian (not available)
+## 4 - Spanish (not available)
+## 5 - French (not available)
+#                                                 ###############
+#################################################################
+
+#load language
+
+	set get_lang_files [glob -directory "$black(dirname)/BlackTools/lang" "*.??.lang.tcl"]
+foreach lang $get_lang_files {
+	set black(lang_error_$lang) [catch {source $lang} black(lang_error_stats_$lang)]
+if {$black(lang_error_$lang) == "1"} {
+	putlog "\[BT\] :Couldn't load the lang file \"$lang\".Reason: \"$black(lang_error_stats_$lang)\""
+} else {
+	set split_lang [split $lang "."]
+	set the_lang [lindex $split_lang 1]
+	lappend black(current_lang) [join $the_lang ","]
+} 
+
+if {![info exists black(current_lang) ]} {set black(current_lang) "N/A"}
+
+}
+
+#load manual
+
+set get_man_files [glob -directory "$black(dirname)/BlackTools/lang" "*.???-??.lang.tcl"]
+foreach lang $get_man_files {
+	set black(man_error_$lang) [catch {source $lang} black(man_error_stats_$lang)]
+if {$black(man_error_$lang) == "1"} {
+	putlog "\[BT\] :Couldn't load the manual file \"$lang\".Reason: \"$black(man_error_stats_$lang)\""
+	}
+}
+
+###############
+#################################################################
+#   END                                                         #
+#################################################################

+ 15 - 0
BlackTools/temp/banner

@@ -0,0 +1,15 @@
+                            Powered by       
+                       
+   
+  ##\       ##\                     ##\         ##\                         ##\           
+  ## |      ## |                    ## |        ## |                        ## |          
+  #######\  ## | ######\   #######\ ## |  ##\ ######\    ######\   ######\  ## | #######\ 
+  ##  __##\ ## | \____##\ ##  _____|## | ##  |\_##  _|  ##  __##\ ##  __##\ ## |##  _____|
+  ## |  ## |## | ####### |## /      ######  /   ## |    ## /  ## |## /  ## |## |\######\  
+  ## |  ## |## |##  __## |## |      ##  _##<    ## |##\ ## |  ## |## |  ## |## | \____##\ 
+  #######  |## |\####### |\#######\ ## | \##\   \####  |\######  |\######  |## |#######  |
+  \_______/ \__| \_______| \_______|\__|  \__|   \____/  \______/  \______/ \__|\_______/ 
+ 
+
+                      www.TclScriptS.NeT ® The Next Generation TCL
+                               Copyright © 2008 - 2018 

+ 37 - 0
BlackTools/temp/motd

@@ -0,0 +1,37 @@
+Connected to %B, running %V powered by   
+
+   
+  ##\       ##\                     ##\         ##\                         ##\           
+  ## |      ## |                    ## |        ## |                        ## |          
+  #######\  ## | ######\   #######\ ## |  ##\ ######\    ######\   ######\  ## | #######\ 
+  ##  __##\ ## | \____##\ ##  _____|## | ##  |\_##  _|  ##  __##\ ##  __##\ ## |##  _____|
+  ## |  ## |## | ####### |## /      ######  /   ## |    ## /  ## |## /  ## |## |\######\  
+  ## |  ## |## |##  __## |## |      ##  _##<    ## |##\ ## |  ## |## |  ## |## | \____##\ 
+  #######  |## |\####### |\#######\ ## | \##\   \####  |\######  |\######  |## |#######  |
+  \_______/ \__| \_______| \_______|\__|  \__|   \____/  \______/  \______/ \__|\_______/ 
+                                                                                        
+
+                      www.TclScriptS.NeT ® The Next Generation TCL
+                               Copyright © 2008 - 2018 
+
+Hey %b%N!%b My name is %b%B%b and I am running the %bBlackToolS 2.5.3%b Channel Control Script.
+
++++ 'One TCL. One smart Eggdrop'
+
+Local time is now %b%T%b %{+nmo|MAOV}
+
+** DCC commands start with '.' (like '.quit' or '.help')
+
++++ Use %b.help%b for basic help.
++++ Use %b.help all%b to get a full command list.
++++ Use %b.help *somestring*%b to list any help texts containing "somestring".
+
+Don't Fuck anything up!
+
++++ Remember, you can use %b!h%b in any channel that the bot is in to view the %bhelp manual%b from the BlackTools script.
+
+** Support:
+            wWw.TclScriptS.NeT or %bjoin #Tcl-Help%b on irc://irc.undernet.org/
+
+** Have fun _\|/_
+

+ 674 - 0
LICENSE

@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.

+ 114 - 0
README.txt

@@ -0,0 +1,114 @@
+===========================================================================================================
+                                -= BLaCkShaDoW Production Presents =-
+                         BlackTools - The Ultimate Channel Control Script
+                                     One TCL. One smart Eggdrop
+===========================================================================================================
+
+   BlackTools is the most complete channel management script who can manage channels from all 
+   the IRC networks, although some modules are specifically designed only for Undernet network.
+
+                                      -----------------------
+
+   Download    : http://blacktools.tclscripts.net
+   Bugs report : http://www.tclscripts.net
+   History     : http://www.tclscripts.net/release-notes
+   GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script
+   Online help : irc://irc.undernet.org/tcl-help 
+                 #TCL-HELP / UnderNet
+                 You can ask in english or romanian
+
+                     / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+                    ( T | C | L | S | C | R | I | P | T | S | . | N | E | T )
+                     \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ /
+                     
+                        You want a customised TCL Script for your eggdrop? 
+                            Easy-peasy, just tell us what you need!
+             We can create almost anything in TCL based on your ideas and donations. 
+    Email: blackshadow@tclscripts.net or info@tclscripts.net with your request informations 
+                            and we'll contact you as soon as possible.
+
+                                      -----------------------
+
+   Ideas, suggestions, comments ?
+
+      This script is free of charge but I accept donations, old computers, free shells :))
+      In any case, if you have any comment (good or bad) go to www.tclscripts.net.
+
+Minimum requirements:
+     o Eggdrop 1.8.x
+     o Tcl 8.5 or higher.
+
+Most important features:
+
+    o Multi-channels support: intelligent IRC channel management, every owner(s)/manager(s) can
+      customise this script and its component settings for each channel to his liking.
+      (add/remove users, activate or disable desired protections, modules or commands)
+    o Global boss owner(s) now have the possibility of being able to modify, directly into, their
+      eggdrop config file (eggdrop.conf) without having to log on to the shell machine to do that. 
+      (i.e. nickname, realname, homechan, chanserv, chanserv username, chanserv password, etc.)
+    o Designed for flexibility and ease of use: BlackTools is now 100% flexible to be configured
+      via channel, you can set different settings for each channel.
+    o Owner(s) timer module system which allows to start timers to execute certain processes (proc)
+      and in case you want to kill/stop a timer you can do this through this module too. 
+      Also provides and a list of active timers running.
+    o Allows you to upload files that match the pattern *.tcl from a url inside your
+      eggdrop's scripts directory.
+    o Note module system where users can send messages to each other or save personal notes. 
+      Also, eggdrop will send notes to global owner(s) to inform them every time is abused
+      (banned/can't join a channel).
+    o CIDR support, dnslookup support and webirc hosts support.
+    o All commands works through private message (PRIVMSG) and possibility that all users, who have
+      access to eggdrop, can set their own cmdchar such as '!'.
+    o All the warn/kick/ban reasons are highly customizable. 
+      Every channel manager can add or remove anything as want easily.
+    o The new BlackTools version brings also a new and very well-implemented ban system which performs
+      accurate and efficient searches through global banlist and every channel banlists for a better
+      management and an easier removal/unban.
+    o Perfect navigational system through the pages of every module which has this option and a 
+      quote support system module.
+    o Protection against botnet (mass) and private floods.
+    o And lots of cool features for your eggdrop :)
+
+Important:
+
+     Read BlackTools MANUAL (.man command) for help and information about configuration.
+     Read INSTALL file to know how to install it.
+     Read FAQ file for the most frequently asked questions.
+
+Credits:
+
+    o Settore for hosting the tclscripts.net project website.
+      settore@tclscripts.net [ www.codegeenie.world ]
+         
+    o Florian (most craziest imagination guy) for spotting some major and important issues, also for
+      provinding all the required and necessary materials needed for this script to be ready.
+      florian@tclscripts.net [ www.tntradio.ro ]
+
+Utenti italiani:
+---------------------
+      Italian Language: Nessuna traduzione ufficiale ancora (puo essere fatta su richiesta).
+
+Usuarios espanoles:
+---------------------
+      Spanish Language: Sin traduccion oficial todavia (se puede realizar a peticion).
+
+-----------------------------------------------------------------------------------------------------------
+Copyright (c) 2008-2018 Daniel Voipan (aka BLaCkShaDoW).
+-----------------------------------------------------------------------------------------------------------
+AUTHOR   : Daniel Voipan
+NICK     : BLaCkShaDoW
+MEET ME  : On *UnderNet.org: #TCL-HELP, #UnBan, #TNTRadio
+EMAIL    : blackshadow@tclscripts.net
+URL      : https://github.com/DanielVoipan/
+GREETS   : o Special thanks to QueenElsa and Florian for testing, suggesting fixes and new features
+             inspiration for many parts of BlackTools.tcl that led to the improvement of this script. 
+           o Thanks also to Time2Go > Ionut (retired..) without whom this script would not have gone
+             so far.
+             - admin of #TCL-HELP Channel
+           o As well, many thanks to psycho & WildMan for the interest shown in testing & searching
+             for errors.
+           o Thank you to all those people who found bugs in the script and reported them and to all
+             the users who joined #TCL-HELP and shared their ideas and suggestions.
+             - Website: wWw.TclScriptS.NeT
+             - #TCL-HELP (BlackTools TCL Project Official Channel)
+-----------------------------------------------------------------------------------------------------------