All pastes #620278 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-07-15 11:17 UTC
rendered paste body
#         #   #   ##   #####        #          @@@@     @@

#    #### #   #  #       #          #          @  @    @  @

#    #  # #       #      #  ### ### #    ###   @@@@    @  @

#    #  # #        #     #  # # # # #     #    @  @    @  @

#### #### ####  ###      #  ### ### #### ###   @@@@  @  @@



# [LoL's TooLz 8.0]

#

# Eggdrop TCL Script: [LoL's TooLz] Copyright (C) 1998-2002 LL Productions.

# This software is free under the terms of GNU GPL 2.

# Type .help lol gpl in party-line for more information.

#

# HomePage: http://www.leonini.net/

#

# ORIGINAL AUTHOR: Lorenzo Leonini alias RB_____

# 	E-MAIL: lolstoolz@leonini.net	ICQ: 22245831

#

# NEW MAINTENER : Yoann alias Thor 

#	E-MAIL: yservant@free.fr ICQ: 50383313

#

# Thanks for bugs reports (and patches): Hawkeye, PPSlim, Tim Ballantine and many others.

#

################################################################################

#

# FLAGS USED IN LOL'S TOOLZ:

# N Owners | M Masters | B Bots | O Operators | L HALFOP | V Voice | F Friend | - No flags

#

# MAKE SURE COMMANDS THAT USE THE PRIORITY LEVELS ARE NOT SET SO THAT LOWER USERS ARE ALLOWED 

# TO PERFORM A NEGATIVE ACTION ON A USER WITH A HIGHER LEVEL. BOTS HAVE THE HIGHEST LEVEL 

# TO PREVENT BOTWARS (THE BOT ALWAYS RESPECTS THE COMMANDS OF OTHER BOTS).



# SETUP #

# THIS SCRIPT REQUIRES NOW ALLTOOLS.TCL AND LANG.TCL, PLEASE INSTALL THEM.

# THESE ARE THE DEFAULT FLAGS, YOU CAN CHANGE THEM WHEN THE BOT IS ONLINE.



# ENABLE (1) OR DISABLE (0) CHANNEL COMMANDS !tcl AND !shell THAT ALLOW

# YOU TO USE TCL COMMANDS OR SHELL COMMANDS DIRECTLY IN THE CHAN

set lol(tcl) 1



# ENABLE (1) OR DISABLE (0) CHAN-KEY AUTO-UPDATE AND CHAN_KEY MEMORISATION.

# WARNING : IF YOU USE GETOPS.TCL YOU NEED TO SET 0 HERE.

set lol(chankey) 1



# BAN TYPE : HOW DO YOU WANT TO BAN THE USER ? DEFAULT 1

#  0 - *!*user@*.domain

#  1 - *!*@host.domain

set lol(bantype) 1



# SET THE CHARACTER THAT WILL BE USED BEFORE PUBLIC QUERRIES

# EXAMPLE : if YOU CHOOSE "#", THE COMMANDS IN THE CHAN WILL START BY A "#", #op, #voice ....

# DEFAULT CHARACTER IS "!"

# IF YOU USE MANY BOTS WITH LoL's TooLz IN THE SAME CHAN, IT CAN BE VERY USEFUL

# TO GIVE EACH BOTS A DIFFERENT COMMAND CHARACTER.

set lol(cmdchar) "!"



# SET TO 1 IF YOU WANT CLONES TO BE IDENTIFIED. 

# IF SET TO 0, ONLY THE LAST NICK THAT MADE THE IDENT IS IDENTIFIED. 

# FOR MORE SECURITY, PLACE 0 HERE.

set lol(clone) 0



# ADJUST THESE DEFAULT CHAN LINES (USED BY !JOIN, .JOIN...)

# NUMBER OF LINES:NUMBER OF SECONDS

# EXAMPLE : "3:10" IS 3 LINES IN 10 SECONDS

set lol(chan_flood) "8:20"

set lol(join_flood) "3:10"

set lol(deop_flood) "3:10"

set lol(ctcp_flood) "3:10"

set lol(kick_flood) "3:10"

set lol(chan_parameters) "-clearbans +enforcebans +dynamicbans +userbans -autoop -bitch -greet +protectops -statuslog +stopnethack -revenge +autovoice -secret -shared +cycle -seen"

set lol(chanmode) "+nt"



# DEFAULT SERVER FLAGS

# CHANGE THIS ONLY IF YOU KNOW THE SERVER FLAGS...

set lol(server_flags) "+iw-s"



# AWAY MESSAGE, IF YOU WANT TO SET AN AWAY MESSAGE FOR THE BOT...

set lol(away) ""



# SET THE FLAGS FOR USERS THAT YOU DO NOT WANT TO BE KICKED OR BAN IN THE EVENT OF

# A !KICK <MASK>, !QUICK <MASK>, !BAN <MASK>.  

# FOR EXAMPLE IF YOU WANT TO PROTECT +O users : set lol(protect_flags) "o"

set lol(protect_flags) "mb"



### BINDS ###



# CHANGE THE FLAGS AT YOUR OWN RISK !!! FOR EXAMPLE m|m => o|o

# IT CAN CREATE SECURITY HOLES AND SCRIPT PROBLEMS.

# YOU CAN DISABLE ANY COMMANDS PLACING "#" BEFORE THEM.



bind pub n [string trim $lol(cmdchar)]tcl pub_lol_tcl

bind pub n [string trim $lol(cmdchar)]shell pub_lol_shell

bind pub n [string trim $lol(cmdchar)]param pub_lol_param

bind pub n [string trim $lol(cmdchar)]enable pub_lol_enable

bind pub n [string trim $lol(cmdchar)]disable pub_lol_disable

bind pub n [string trim $lol(cmdchar)]join pub_lol_join

bind pub n +chan pub_lol_join

bind pub n [string trim $lol(cmdchar)]remove pub_lol_remove

bind pub n -chan pub_lol_remove

bind pub m [string trim $lol(cmdchar)]addhost pub_lol_addhost

bind pub m +host pub_lol_addhost

bind pub m [string trim $lol(cmdchar)]delhost pub_lol_delhost

bind pub m -host pub_lol_delhost

bind pub m [string trim $lol(cmdchar)]jump pub_lol_jump

bind pub m [string trim $lol(cmdchar)]botnick pub_lol_botnick

bind pub m [string trim $lol(cmdchar)]uptime pub_lol_uptime

bind pub m [string trim $lol(cmdchar)]gchattr pub_lol_gchattr

bind pub m|m [string trim $lol(cmdchar)]mass pub_lol_mass

bind pub o|o [string trim $lol(cmdchar)]chattr pub_lol_chattr

bind pub o|o [string trim $lol(cmdchar)]banperm pub_lol_banperm

bind pub o|o [string trim $lol(cmdchar)]banwhois pub_lol_banwhois

bind pub o|o +bw pub_lol_banwhois

bind pub o|o [string trim $lol(cmdchar)]op pub_lol_op

bind pub o|o +o pub_lol_op

bind pub o|o [string trim $lol(cmdchar)]deop pub_lol_deop

bind pub o|o -o pub_lol_deop

bind pub o|o [string trim $lol(cmdchar)]online pub_lol_online

bind pub o|o [string trim $lol(cmdchar)]broadcast pub_lol_broadcast

bind pub ol|ol [string trim $lol(cmdchar)]mode pub_lol_mode

bind pub ol|ol [string trim $lol(cmdchar)]ban pub_lol_ban

bind pub ol|ol +b pub_lol_ban

bind pub ol|ol [string trim $lol(cmdchar)]hop pub_lol_halfop

bind pub ol|ol [string trim $lol(cmdchar)]halfop pub_lol_halfop

bind pub ol|ol +ho pub_lol_hop

bind pub ol|ol [string trim $lol(cmdchar)]dehop pub_lol_dehalfop

bind pub ol|ol [string trim $lol(cmdchar)]dehalfop pub_lol_dehalfop

bind pub ol|ol -ho pub_lol_dehalfop

bind pub ol|ol [string trim $lol(cmdchar)]banlist pub_lol_banlist

bind pub ol|ol [string trim $lol(cmdchar)]topic pub_lol_topic

bind pub ol|ol [string trim $lol(cmdchar)]quick pub_lol_quick

bind pub ol|ol [string trim $lol(cmdchar)]whoid pub_lol_whoid

bind pub ol|ol [string trim $lol(cmdchar)]devoice pub_lol_devoice

bind pub ol|ol -v pub_lol_devoice

bind pub ol|ol [string trim $lol(cmdchar)]kick pub_lol_kick

bind pub ol|ol [string trim $lol(cmdchar)]invite pub_lol_invite

bind pub ol|ol [string trim $lol(cmdchar)]stats pub_lol_stats

bind pub ol|ol [string trim $lol(cmdchar)]unban pub_lol_unban

bind pub ol|ol -b pub_lol_unban

bind pub olv|olv [string trim $lol(cmdchar)]voice pub_lol_voice

bind pub olv|olv +v pub_lol_voice

bind pub - [string trim $lol(cmdchar)]whois pub_lol_whois

bind pub - [string trim $lol(cmdchar)]silent pub_lol_silent

bind pub - [string trim $lol(cmdchar)]unsilent pub_lol_unsilent

bind pub - [string trim $lol(cmdchar)]unident pub_lol_unident

bind pub - [string trim $lol(cmdchar)]unpermident pub_lol_unpermident

bind pub - [string trim $lol(cmdchar)]uid pub_lol_unident

bind pub - [string trim $lol(cmdchar)]upid pub_lol_unpermident

bind pub - [string trim $lol(cmdchar)]time pub_lol_time

bind pub - [string trim $lol(cmdchar)]help pub_lol_help

bind pub - [string trim $lol(cmdchar)]aide pub_lol_help

bind pub - [string trim $lol(cmdchar)]troubles pub_lol_troubles

bind pub - [string trim $lol(cmdchar)]probleme pub_lol_troubles



bind pub n [string trim $lol(cmdchar)]addowner pub_lol_addowner

bind pub n +owner pub_lol_addowner

bind pub n|n [string trim $lol(cmdchar)]addmaster pub_lol_addmaster

bind pub n|n +master pub_lol_addmaster

bind pub m|m [string trim $lol(cmdchar)]addop pub_lol_addop

bind pub m|m +op pub_lol_addop

bind pub m|m [string trim $lol(cmdchar)]addbot pub_lol_addbot

bind pub m|m +bot pub_lol_addbot

bind pub m|m [string trim $lol(cmdchar)]adduser pub_lol_adduser

bind pub m|m +user pub_lol_adduser

bind pub o|o [string trim $lol(cmdchar)]addhalfop pub_lol_addhalfop

bind pub o|o +hop pub_lol_addhop

bind pub o|o [string trim $lol(cmdchar)]addfriend pub_lol_addfriend

bind pub o|o +friend pub_lol_addfriend

bind pub o|o [string trim $lol(cmdchar)]addvoice pub_lol_addvoice

bind pub o|o +voice pub_lol_addvoice



bind pub n [string trim $lol(cmdchar)]delowner pub_lol_delowner

bind pub n -owner pub_lol_delowner

bind pub n [string trim $lol(cmdchar)]deluser pub_lol_deluser

bind pub n -user pub_lol_deluser

bind pub n|n [string trim $lol(cmdchar)]delmaster pub_lol_delmaster

bind pub n|n -master pub_lol_delmaster

bind pub m|m [string trim $lol(cmdchar)]delop pub_lol_delop

bind pub m|m -op pub_lol_delop

bind pub o|o [string trim $lol(cmdchar)]delhalfop pub_lol_delhalfop

bind pub o|o -hop pub_lol_delhop

bind pub o|o [string trim $lol(cmdchar)]delfriend pub_lol_delfriend

bind pub o|o -friend pub_lol_delfriend

bind pub o|o [string trim $lol(cmdchar)]delvoice pub_lol_delvoice

bind pub o|o -voice pub_lol_delvoice



bind msg n addowner msg_lol_addowner

bind msg m|m adduser msg_lol_adduser

bind msg n|n addmaster msg_lol_addmaster

bind msg m|m addop msg_lol_addop

bind msg m|m addbot msg_lol_addbot

bind msg o|o addhalfop msg_lol_addhalfop

bind msg o|o addvoice msg_lol_addvoice

bind msg o|o addfriend msg_lol_addfriend



bind msg n deluser msg_lol_deluser

bind msg n delowner msg_lol_delowner

bind msg n|n delmaster msg_lol_delmaster

bind msg m|m delop msg_lol_delop

bind msg m|m delop msg_lol_delhalfop

bind msg o|o delfriend msg_lol_delfriend

bind msg o|o delvoice msg_lol_delvoice



bind dcc n param dcc_lol_param

bind dcc n enable dcc_lol_enable

bind dcc n disable dcc_lol_disable

bind dcc n join dcc_lol_join

bind dcc n remove dcc_lol_remove

bind dcc m|m +welcome dcc_lol_+welcome

bind dcc m|m -welcome dcc_lol_-welcome

bind dcc m|m welcome dcc_lol_welcome

bind dcc m notice dcc_lol_notice

bind dcc m botnick dcc_lol_botnick

bind dcc o chanlist dcc_lol_chanlist

bind dcc o getidle dcc_lol_getidle

bind dcc o online dcc_lol_online

bind dcc o|o onotice dcc_lol_onotice

bind dcc o|o userlist dcc_lol_userlist

bind dcc o|o chanuser dcc_lol_chanuser

bind dcc o|o channel dcc_lol_chanuser

bind dcc o|o chanusers dcc_lol_chanuser

bind dcc ol|ol mode dcc_lol_mode

bind dcc - silent dcc_lol_silent

bind dcc - whois dcc_lol_whois

bind dcc - unsilent dcc_lol_unsilent

bind dcc - unident dcc_lol_unident

bind dcc - unpermident dcc_lol_unpermident

bind dcc - permident dcc_lol_permident

bind dcc - uid dcc_lol_unident

bind dcc - upid dcc_lol_unpermident

bind dcc - pid dcc_lol_permident



bind msg n param msg_lol_param

bind msg n enable msg_lol_enable

bind msg n disable msg_lol_disable

bind msg n join msg_lol_join

bind msg n remove msg_lol_remove

bind msg m addhost msg_lol_addhost

bind msg m delhost msg_lol_delhost

bind msg m msg msg_lol_msg

bind msg m botnick msg_lol_botnick

bind msg m gchattr msg_lol_gchattr

bind msg m|m mass msg_lol_mass

bind msg o|o chattr msg_lol_chattr

bind msg o|o broadcast msg_lol_broadcast

bind msg o|o banperm msg_lol_banperm 

bind msg o|o online msg_lol_online

bind msg ol|ol mode msg_lol_mode

bind msg ol|ol key msg_lol_key

bind msg ol|ol quick msg_lol_quick

bind msg ol|ol banlist msg_lol_banlist

bind msg ol|ol whoid msg_lol_whoid

bind msg ol|ol ban msg_lol_ban

bind msg ol|ol unban msg_lol_unban

bind msg ol|ol invite msg_lol_invite

bind msg ol|ol kick msg_lol_kick

bind msg - whois msg_lol_whois

bind msg - silent msg_lol_silent

bind msg - unsilent msg_lol_unsilent

bind msg - ident msg_lol_ident

bind msg - permident msg_lol_permident

bind msg - unpermident msg_lol_unpermident

bind msg - unident msg_lol_unident

bind msg - id msg_lol_ident

bind msg - auth msg_lol_ident

bind msg - login msg_lol_ident

bind msg - pid msg_lol_permident

bind msg - upid msg_lol_unpermident

bind msg - uid msg_lol_unident

bind msg - help msg_lol_help

bind msg - aide msg_lol_help



# END OF SETUP #



##################################################################

##  USUALLY YOU DON'T HAVE TO CHANGE ANY OF THE FOLLOWING LINES ##

##################################################################



################# MISC #################

set lol(version) "\002LoL's TooLz 8.0\002"

set lang_list "lol.fr lol.en lol.ru"

set timerIDwhois 0

set lang_incr 0

foreach lang $lang_list {

 if {[file exists "/home/mydir/language/$lang.lang"]} {

	set f [open /home/mydir/language/$lang.lang r]

	while {[gets $f line] >= 0} {	

		set lol_lang_data($lang_incr[lindex $line 0]) [join [lrange $line 1 end]]

	} 

	close $f

 }

 incr lang_incr

}



loadhelp lol.dcc.help

loadhelp lol.msg.help

reloadhelp



bind dcc - help dcc_lol_help

bind join - * lol_welcome

bind mode - * lol_watch_mode

unbind dcc - su *dcc:su

unbind msg - ident *msg:ident

bind dcc n su *dcc:su

unbind msg - invite *msg:invite

bind mode - "* +k" see_new_pass

bind nick - * lol_chidentnick

bind sign - * lol_deident

bind join - * lol_joinident

bind part - * lol_partident

bind kick - * lol_kickident

bind rejn - * lol_rejnident

bind raw * 301 lol_ban_whois_away

bind raw * 311 lol_whois_reply

bind raw * 311 lol_ban_whois_msg

bind raw * 318 lol_whois_unknow

bind raw * 319 lol_ban_whois_chan

bind raw * 401 lol_whois_nofound

set init-server { lol_init }

set disconnect-server { lol_init }



################# START OF JOIN PROCEDURES #################



proc lol_welcome {nick host hand chan} {

	global lol botnick TabWelcome

	if {![validuser $hand]} {

		if {[info exists TabWelcome($chan)] && $nick != $botnick } { puthelp "Notice $nick :$TabWelcome($chan)" }

	}

	if {[passwdok $hand ""] && ![matchattr $hand b]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 01 ""]"

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 02 $botnick]"

	}

}



################# END OF JOIN PROCEDURES #################



################# START OF CHAN COMMANDS #################



### !TROUBLES or !PROBLEME



proc pub_lol_troubles {nick host hand chan arg} {

	global lol botnick

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 135 [list $lol(version)]]"

      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 136 ""]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 137 $botnick]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 138 ""]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 139 ""]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 140 $botnick]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 141 ""]"

	if {[validuser $hand] && ![matchattr $hand p]} { 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 142 ""]"

	} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 143 $botnick]"

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 144 ""]"

	}

	if {![lol_check $nick $host $hand]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 145 ""]"

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 146 $botnick]"

	}

	return 0

}



### !HELP



proc pub_lol_help {n uh h c a} { msg_lol_help $n $uh $h $a }



### !TCL



proc pub_lol_tcl {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand] || !$lol(tcl) } { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]tcl <tcl code>"

	} {

		eval $arg

	}

	return 0

}



### !SHELL



proc pub_lol_shell {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand] || !$lol(tcl) } { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]shell <shell command>"

		return 0

	}

	set open 0

	if { [llength $arg] == 1 } {

		if {![catch { exec [lindex $arg 0] }]} {

			exec [lindex $arg 0] >shell.txt

			set open 1

		} 

	} elseif { [llength $arg] == 2 } {

		if {![catch { exec [lindex $arg 0] [lindex $arg 1]} ]} {

			exec [lindex $arg 0] [lindex $arg 1] >shell.txt

			set open 1

		}

	} else {		 		

		if {![catch { exec [lindex $arg 0] [lindex $arg 1] [lindex $arg 2]} ]} {

			exec [lindex $arg 0] [lindex $arg 1] [lindex $arg 2] >shell.txt

			set open 1

		} 

	}

	if {$open} {

		set f [open shell.txt r]

		while {[gets $f line] >= 0} {	

			puthelp "NOTICE $nick :$line"

		}

		close $f

	} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 246 [list $arg]]"

	}

	return 0

}



### !SILENT



proc pub_lol_silent {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 } 

	setuser $hand xtra silent 1

      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 76 ""]"

}



### !UNSILENT



proc pub_lol_unsilent {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 }

	setuser $hand xtra silent 0

      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 03 ""]"

}



### !UNPERMIDENT



proc pub_lol_unpermident {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 }

	setuser $hand xtra permident ""

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 06 ""]"

}



### !UNIDENT



proc pub_lol_unident {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

}



### !BOTNICK <nick>



proc pub_lol_botnick {mynick host hand chan arg} {

	global lol nick

	if {![lol_check $mynick $host $hand]} { return 0 }

	if {[llength $arg] != 1} {

		puthelp "NOTICE $mynick :Synthaxe : [string trim $lol(cmdchar)]botnick <nick>"

	} {

		set nick [charfilter $arg]

	}

	return 0

}



### !JUMP [server] [port]



proc pub_lol_jump {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 }

	set arg [charfilter $arg]

	set server [lindex $arg 0]

	set port [lindex $arg 1]

	if {![isnumber $port]} {set port ""}

	if {$server == ""} { jump ; return 0 }

	if {[isnumber $port]} {

		jump $server $port

	} {

		jump $server

	}

	return 0

}



### !ADDHOST <nick|hand> [host]



proc pub_lol_addhost {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]addhost <nick|hand> \[host\]"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	set host [lindex $arg 1]

	if {$host == ""} {

		set ipmask [lindex [split [maskhost $who![getchanhost $who $chan]] "@"] 1]

		set userm [lindex [split [getchanhost $who $chan] "@"] 0]

		set host *!*$userm@$ipmask

		if {![validuser [nick2hand $who $chan]]} {

			if {[validuser $who]} {

				setuser $who hosts $host

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 07 "$host $who"]"

				return 0

			}

                  puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 12 $who]"

			return 0

		}

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 18 "$who [nick2hand $who $chan]"]"

		return 0

	}

	if {![onchan $who $chan]} {

		if {[validuser $who]} {

			setuser $who hosts $host

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 07 "$host $who"]"

			return 0

		} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 09 "$who $chan"]"

			return 0

		}

	} {

		set whohand [nick2hand $who $chan]

		if {![validuser $whohand]} {

			if {![validuser $who]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

				return 0

			} {

				setuser $who hosts $host

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 07 "$host $who"]"

				return 0

			}

		} {

			setuser $whohand hosts $host

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 32 "$host $who $whohand"]"

			return 0

		}

	}

	return 0

}



### !DELHOST <nick|hand> <host>



proc pub_lol_delhost {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 2} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]delhost <nick|hand> <host>"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	set host [lindex $arg 1]

	if {![onchan $who $chan]} {

		if {[validuser $who]} {

			if {[delhost $who $host]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 33 "$host $who"]"

			} {

                        puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 34 "$host $who"]"

			}

		} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 09 "$who $chan"]"

		}

		return 0

	}

	if {![validuser [nick2hand $who $chan]]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[delhost [nick2hand $who $chan] $host]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 33 "$host $who"]"

	} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 34 "$host $who"]"

	}

	return 0

}



### !CHATTR <nick> <flags>



proc pub_lol_chattr {nick host hand chan arg} {

	lol_pub_chattr $nick $host $hand $chan $arg "chattr"

	return 0

}



### !GCHATTR <nick> <flags>



proc pub_lol_gchattr {nick host hand chan arg} {

	lol_pub_chattr $nick $host $hand $chan $arg "gchattr"

	return 0

}



### !JOIN <chan> [chan pass]



proc pub_lol_join {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]join <chan> \[chan pass\]"

		return 0

	}

	set arg [charfilter $arg]

	set ch [chanaddapt [lindex $arg 0]]

	set pass [lindex $arg 1]

	lol_join $nick $host $hand $ch $pass

	return 0

}



### !WHOID [chan] [flags]



proc pub_lol_whoid {nick host hand chan arg} {

	global lol botnick

	if {![lol_check $nick $host $hand]} { return 0 }

	set ch [lindex $arg 0]

	set whoflags ""

	if {[llength $arg] > 1} { set whoflags [lindex $arg 1] } 

	lol_whoid $nick $host $hand $ch $whoflags

	return 0

}



### !REMOVE <chan>



proc pub_lol_remove {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]remove <#chan>"

		return 0

	}

	set arg [charfilter $arg]

	set ch [chanaddapt [lindex $arg 0]]

	if {![validchan $ch]} {	

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 10 $ch]"

		return 0 

	}

	channel remove $ch

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 37 $ch]"

}



### !PARAM <parameter> <value>



proc pub_lol_param {nick host hand chan arg} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 2} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]param <parameter> <value>"

		set display ""

		append display "cmdchar : $lol(cmdchar)   "

		append display "chankey : $lol(chankey)   "

		append display "clone : $lol(clone)   "

		append display "chan_flood : $lol(chan_flood)   "

		append display "join_flood : $lol(join_flood)   "

		append display "deop_flood : $lol(deop_flood)   "

		append display "ctcp_flood : $lol(ctcp_flood)   "

		append display "kick_flood : $lol(kick_flood)   "

		append display "protect_flags : $lol(protect_flags)   "

		append display "server_flags : $lol(server_flags)   "

		puthelp "NOTICE $nick :$display"

		set display ""

		append display "chanmode : $lol(chanmode)   "

		append display "chan_parameters: $lol(chan_parameters)"

		puthelp "NOTICE $nick :$display"

		puthelp "NOTICE $nick :away : $lol(away)"

		return 0

	}

	set arg [charfilter $arg]

	set lol([strlwr [lindex $arg 0]]) [lrange $arg 1 end]

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 38 "[strlwr [lindex $arg 0]] [lrange $arg 1 end]"]"

	return 0

}



### !ENABLE <nick>



proc pub_lol_enable {nick host hand chan arg} {

	global lol botnick

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]enable <nick>"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	set whohand [nick2hand $who $chan]

	if {![onchan $who $chan]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}

	if {[strlwr $who] == [strlwr $botnick]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 39 ""]"

		return 0

	}

	if {![validuser $whohand]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $whohand xtra auth] != "DEAD"} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 40 $who]"

		return 0

	}

	setuser $whohand xtra auth 0

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 41 $who]"

	return 0

}



### !DISABLE <nick>



proc pub_lol_disable {nick host hand chan arg} {

	global lol botnick

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]disable <nick>"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	if {![onchan $who $chan]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}

	if {[strlwr $who] == [strlwr $botnick]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 42 ""]"

		return 0

	}

	set whohand [nick2hand $who $chan]

	if {![validuser $whohand]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $whohand xtra auth] == "DEAD"} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 43 $who]"

		return 0

	}

	setuser $whohand xtra auth DEAD

	if {[matchattr $whohand D]} { chattr $whohand -3 }

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 44 $who]"

	return 0

}



### !UPTIME



proc pub_lol_uptime {nick host hand chan arg} {

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 244 [list [exec uptime]]]"

}



### !ONLINE



proc pub_lol_online {nick host hand chan arg} {

	global server {server-online} uptime version botnick config botname

	set ip [lindex [split $server ":"] 0]

	set numchans [llength [channels]]

	set msg ""

	append msg "[lang_text lol_lang_data [getlang $hand] 245 [list $botnick $botname [string range $version 0 5] $config]] "

      append msg "[lang_text lol_lang_data [getlang $hand] 114 [list [time_diff $uptime 1]]]" 

	append msg " [lang_text lol_lang_data [getlang $hand] 113 [list $ip [time_diff ${server-online} 1]]]"

	if {![matchattr $hand o]} {

      	append msg " [lang_text lol_lang_data [getlang $hand] 112 $numchans]"

	} {

		if {$numchans != 0} {

            	append msg " [lang_text lol_lang_data [getlang $hand] 57 [list [channels]]]"

		} {

                  append msg " [lang_text lol_lang_data [getlang $hand] 56 ""]"

		}

	}

	append msg " [lang_text lol_lang_data [getlang $hand] 111 [llength [bots]]]"

	puthelp "NOTICE $nick :$msg"

}



### !BROADCAST <text>



proc pub_lol_broadcast {nick host hand chan arg} {

	global lol	

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]broadcast <text>"

		return 0

	}

	set arg [charfilter $arg]

	foreach c [channels] {

		if {[matchattr $hand o|o $c] && [strlwr $c] != [strlwr $chan]} {

			puthelp "PRIVMSG $c :\00314\[\003\002$nick\002\00314\]\003 $arg"

		}

	}

}



### !STATS



proc pub_lol_stats {nick host hand chan arg} {

	global botnick

	if {![lol_check $nick $host $hand]} { return 0 }

	set op 0 ; set voice 0 ; set reco 0 ; set normal 0 ; set total 0

	foreach vnick [chanlist $chan] {

		if {[validuser [nick2hand $vnick $chan]]} { incr reco }

		if {[isop $vnick $chan]} { incr op }

		if {[isvoice $vnick $chan] && ![isop $vnick $chan]} {	incr voice }

		if {![isvoice $vnick $chan] && ![isop $vnick $chan] && ![validuser [nick2hand $vnick $chan]] && [strlwr $vnick] != [strlwr $botnick]} {

			incr normal

		}

		incr total

	}

	set reco_pc [expr (100 / $total) * $reco]

	set op_pc [expr (100 / $total) * $op]

	set voice_pc [expr (100 / $total) * $voice]

	set normal_pc [expr (100 / $total) * $normal]

	puthelp "NOTICE $nick :$chan STATS !!! \002Oped:\002 $op ($op_pc%) \002Voiced:\002 $voice ($voice_pc%) \002Bot users:\002 $reco ($reco_pc%) \002Other:\002 $normal ($normal_pc%) \002Total:\002 $total"

}



### !BANLIST



proc pub_lol_banlist {nick host hand chan arg} {

	if {![lol_check $nick $host $hand]} { return 0 }

	set num 1

      puthelp "NOTICE $nick :$chan BANS info !!! "

	foreach bans [banlist $chan] {

		set victim [lindex $bans 0]

		set why [lindex $bans 1]

		set expire [lindex $bans 2]

		set who [lindex $bans 5]

		set remain [expr $expire - [unixtime]]

		if {$remain > 0} {

			set remain "expire in [time_diff $expire 0]."

		} {

			set remain "Perm Ban"

		}

		puthelp "NOTICE $nick :\002BAN $num:\002 $victim, $remain"

		puthelp "NOTICE $nick :$who: $why"

		incr num

	}

      if {$num == 1} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 45 $chan]"

	}

	return 0

}





### !BANWHOIS [message or #chan]



proc pub_lol_banwhois {nick host hand chan arg} {

	global lol lol_what botnick

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[string match #* [lindex $arg 0]] || [llength $arg] < 1} {

		if {[llength $arg] != 1} {

			puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]banwhois <expression or #chan>"

			return 0

		}

	} 	

	set lol_what $arg

	foreach who [chanlist $chan] {

		if {![validuser [nick2hand $who]] && $who != $botnick } { putserv "whois $who" }

	}

	return 0

}



### !BAN <nick|mask> [time] [reason]



proc pub_lol_ban {nick host hand chan arg} {

	lol_pub_bad $nick $host $hand $chan $arg ban 0

	return 0

}



### !BANPERM <nick|mask> [reason]



proc pub_lol_banperm {nick host hand chan arg} {

	lol_pub_bad $nick $host $hand $chan $arg banperm 0

	return 0

}



### !KICK <nick|mask> [reason]



proc pub_lol_kick {nick host hand chan arg} {

	lol_pub_bad $nick $host $hand $chan $arg kick 0

	return 0

}



### !QUICK <nick|mask> [reason]



proc pub_lol_quick {nick host hand chan arg} {

	lol_pub_bad $nick $host $hand $chan $arg quick 0

	return 0

}



### !UNBAN <mask|number>



proc pub_lol_unban {nick host hand chan mask} {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $mask] != 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]unban <mask|number>"

		return 0

	}

	lol_unban $nick $hand $chan $mask 0

	return 0

}



### !MODE <chanmode>



proc pub_lol_mode {nick host hand chan mode} {

	global lol

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $mode] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]mode <chanmode>"

		return 0

	}

	set mode [charfilter $mode]

	if {$lol(chankey)} {

		if {[string first k [lindex $mode 0]] != -1} {

			set posmode [string first k [lindex $mode 0]]

			if {[string first l [lindex $mode 0]] != -1} {

				set poslim [string first l [lindex $mode 0]]

				if {$posmode < $poslim} {

					channel set $chan need-key "chankey $chan [lindex $mode 1]"

				} {

					channel set $chan need-key "chankey $chan [lindex $mode 2]"

				}

			} {

				channel set $chan need-key "chankey $chan [lindex $mode 1]"

			}

		}

	}

	putserv "MODE $chan $mode"

	return 0

}



set masslist "deop op kick ban voice devoice"



### !mass <command>



proc pub_lol_mass {nick host hand chan arg} {

	global lol masslist

	if {![botisop $chan] || ![lol_check $nick $host $hand]} { return 0 }

	set cmd [strlwr [lindex $arg 0]]

	if {[lsearch -exact $masslist $cmd] == -1} {

		puthelp "notice $nick :Synthaxe : [string trim $lol(cmdchar)]mass <[join $masslist "|"]>"

		return 0

	}

	if { $cmd == "ban" } { 

		pub_lol_ban $nick $host $hand $chan "*"

		return 0

	}

	

	if { $cmd == "kick" } { 

		pub_lol_kick $nick $host $hand $chan "*"

		return 0

	}

	lol_mass $chan $cmd

	return 0

}



### ALL THE ADD PROCS ###



proc pub_lol_adduser {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg user

	return 0

}



proc pub_lol_addfriend {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg friend

	return 0

}



proc pub_lol_addvoice {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg voice

	return 0

}



proc pub_lol_addhalfop {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg halfop

	return 0

}



proc pub_lol_addop {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg op

	return 0

}



proc pub_lol_addmaster {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg master

	return 0

}



proc pub_lol_addowner {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg owner

	return 0	

}



proc pub_lol_addbot {nick host hand chan arg} {

	pub_lol_add $nick $host $hand $chan $arg bot

	return 0	

}



### ALL THE DEL PROCS ###



proc pub_lol_deluser {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg user

	return 0

}



proc pub_lol_delvoice {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg voice

	return 0

}



proc pub_lol_delfriend {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg friend

	return 0

}



proc pub_lol_delhalfop {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg halfop

	return 0

}



proc pub_lol_delop {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg op

	return 0

}



proc pub_lol_delmaster {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg master

	return 0

}



proc pub_lol_delowner {nick host hand chan arg} {

	lol_pub_del $nick $host $hand $chan $arg owner

	return 0

}



### !OP [nick]



proc pub_lol_op {nick host hand chan arg} {

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }



	set arg [charfilter $arg]

	set who [lindex $arg 0]

	if {$who == "" } {

		if {![isop $nick $chan]} { putserv "MODE $chan +o $nick" }

		return 0

	}

	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} elseif {![isop $who $chan]} { 

			lappend list $who ; incr loop

		}

		if { $loop == 6 } { putserv "MODE $chan +oooooo $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan +ooooo $list" }

	return 0

}



### !HALFOP [nick]



proc pub_lol_halfop {nick host hand chan arg} {

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }



	set arg [charfilter $arg]

	set who [lindex $arg 0]

	if {$who == "" } {

		if {![ishalfop $nick $chan]} { putserv "MODE $chan +h $nick" }

		return 0

	}

	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} elseif {![ishalfop $who $chan]} { 

			lappend list $who ; incr loop

		}

		if { $loop == 6 } { putserv "MODE $chan +hhhhhh $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan +hhhhh $list" }

	return 0

}



### !DEOP [nick]



proc pub_lol_deop {nick host hand chan arg} {

	global botnick

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}	

	

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	

	if {$who == ""} {

		if {[isop $nick $chan]} { putserv "MODE $chan -o $nick" }

		return 0

	}

	if {![lol_check $nick $host $hand]} { return 0 }	



	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} elseif {[strlwr $who] == [strlwr $botnick]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 30 ""]"

		} else {

			if {[matchattr [nick2hand $who $chan] bm|m $chan]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 49 ""]"

			} elseif {[isop $who $chan]} { 

				lappend list $who ; incr loop

			}

		}

		if { $loop == 6 } { putserv "MODE $chan -oooooo $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan -ooooo $list" }

	return 0

}



### !DEHALFOP [nick]



proc pub_lol_dehalfop {nick host hand chan arg} {

	global botnick

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}		

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	

	if {$who == ""} {

		if {[ishalfop $nick $chan]} { putserv "MODE $chan -h $nick" }

		return 0

	}

	if {![lol_check $nick $host $hand]} { return 0 }	



	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} elseif {[strlwr $who] == [strlwr $botnick]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 30 ""]"

		} else {

			if {[matchattr [nick2hand $who $chan] bm|m $chan]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 49 ""]"

			} elseif {[ishalfop $who $chan]} { 

				lappend list $who ; incr loop

			}

		}

		if { $loop == 6 } { putserv "MODE $chan -hhhhhh $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan -hhhhh $list" }

	return 0

}



### !VOICE [nick]



proc pub_lol_voice {nick host hand chan arg} {

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }



	set arg [charfilter $arg]

	set who [lindex $arg 0]

	

	if {$who == ""} {

		if {![isvoice $nick $chan]} { putserv "MODE $chan +v $nick" }

		return 0

	}

	if {![matchattr $hand o|o $chan]} { return 0 }

	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} elseif {![isvoice $who $chan]} { 

			lappend list $who ; incr loop

		}

		if { $loop == 6 } { putserv "MODE $chan +vvvvvv $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan +vvvvv $list" }

	return 0

}



### !DEVOICE [nick]



proc pub_lol_devoice {nick host hand chan arg} {

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]



	if {$who == ""} {

		if {[isvoice $nick $chan]} { putserv "MODE $chan -v $nick" }

		return 0

	}

	if {![lol_check $nick $host $hand]} { return 0 }



	set i 0 ; set loop 0 ; set list ""

	while { $who != "" } {

		if {![onchan $who $chan]} {

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"		

		} else {

			if {[matchattr [nick2hand $who $chan] v|v $chan]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 247 $nick]"

			} elseif {[isvoice $who $chan]} { 

				lappend list $who ; incr loop

			}

		}

		if { $loop == 6 } { putserv "MODE $chan -vvvvvv $list" ; set list "" ; set loop 0 }

		incr i

		set who [lindex $arg $i]

	}

	if {$list != ""} { putserv "MODE $chan -vvvvv $list" }

	return 0

}



### !TOPIC <topic>



proc pub_lol_topic {nick host hand chan arg} {

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		global lol

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]topic <topic>"

		return 0

	}

	puthelp "TOPIC $chan :$arg"

	return 0

}



### !INVITE <nick>



proc pub_lol_invite {nick host hand chan arg} {

	set arg [charfilter $arg]

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	set who [lindex $arg 0]

	if {[llength $arg] < 1} { 

		puthelp "NOTICE $nick :Syntaxe : !invite <nick>"

		return 0 

	}

	if {[onchan $who $chan]} { 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0 

	}

	puthelp "INVITE $who $chan" 

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 147 "$who $chan"]"	

      return 0

}



### !WHOIS <nick>



proc pub_lol_whois {nick host hand chan arg} {

	global lol 

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]whois <nick>"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]



	if {![onchan $who $chan]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}

	set whohand [nick2hand $who $chan]

	set whohost [getchanhost $who $chan]

	puthelp "NOTICE $nick :[lol_whois $hand $who $whohost $whohand $chan]"

	return 0

}



### !TIME



proc pub_lol_time {nick host hand chan arg} {

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 51 [list [date] [time]]]"

	return 0

}



################# END OF CHAN COMMANDS #################



################# START OF DCC COMMANDS #################



### .+welcome <#chan> <message>



proc dcc_lol_+welcome {hand idx arg} {

	global TabWelcome

	if {[llength $arg] < 2} { putdcc $idx "Synthaxe : .+welcome <#chan> <message>" ; return 0 }

      set chan [strlwr [lindex $arg 0]]

	if {![validchan $chan] } {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0 

	}

	if {![matchattr $hand m|m $chan]} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 67 $chan]"

		return 0 

	}

      set TabWelcome($chan) [join [lrange $arg 1 end]]

	putlog "[lang_text lol_lang_data [getlang $hand] 132 [list $hand $chan $TabWelcome($chan)]]"

	SaveWelcome

	return 0

}



### .-welcome <#chan>

proc dcc_lol_-welcome {hand idx arg} {

	global TabWelcome

      set chan [strlwr [lindex $arg 0]]

	if {![validchan $chan] } {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0 

	}

      if {![matchattr $hand m|m $chan]} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 67 $chan]"

		return 0 

	}

	if {![info exists TabWelcome($chan)]} { 

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 131 $chan]"

		return 0

	}

	catch {unset TabWelcome([lindex $arg 0])}

	SaveWelcome

	putlog "[lang_text lol_lang_data [getlang $hand] 133 "$chan $hand"]"

	return 0

}



### .welcome

proc dcc_lol_welcome {hand idx arg} {

	global TabWelcome

      putlog "#$hand# welcome"

	putdcc $idx "Synthaxe : .+welcome <#chan> <message> or .-welcome <#chan>"

	putdcc $idx ""

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 134 ""]"

	foreach a [array name TabWelcome] {

		putdcc $idx "chan : $a  welcome : $TabWelcome($a)" 

	}

	putdcc $idx ""

}



# lecture fichier



if {[file exists "welcome.txt"]} {

	set f [open welcome.txt r]

	while {[gets $f line] >= 0} {	

		set TabWelcome([lindex $line 0]) [join [lrange $line 1 end]]

	} 

	close $f

}



# écriture fichier



proc SaveWelcome {} {

	global TabWelcome

	set f [open welcome.txt w]

	foreach c [array name TabWelcome] { puts $f "$c $TabWelcome($c)" } 

	close $f

}



### .whois



proc dcc_lol_whois {hand idx arg} {

	global lol

	set arg [charfilter $arg]

	*dcc:whois $hand $idx $arg

	set whohand [lindex $arg 0]

	if {[strlwr $hand] == [strlwr $whohand] || ([validuser $whohand] && [matchattr $hand m|m])} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 108 [list $lol(version)]]"

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 109 [list [getuser $whohand xtra auth] [getuser $whohand xtra authnick]]]"

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 110 [list [getuser $whohand xtra silent] [getuser $whohand xtra permident] [getuser $whohand xtra lang]]]"

	}

	return 0

}



### .unident



proc dcc_lol_unident {hand idx arg} {

	if {[getuser $hand xtra auth] != 1} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 53 ""]"

		return 0

	}

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

      putdcc $idx "[lang_text lol_lang_data [getlang $hand] 54 ""]"

}



### .permident <nick!user@host>



proc dcc_lol_permident {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .permident <nick!user@host>"

		return 0

	}

	set host [lindex $arg 0]

	setuser $hand xtra permident $host

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 55 $host]"

}



### .unpermident



proc dcc_lol_unpermident {hand idx arg} {

	setuser $hand xtra permident ""

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

      putdcc $idx "[lang_text lol_lang_data [getlang $hand] 06 ""]"

}



### .silent



proc dcc_lol_silent {hand idx arg} {

	setuser $hand xtra silent 1

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 76 ""]"

}



### .unsilent



proc dcc_lol_unsilent {hand idx arg} {

	setuser $hand xtra silent 0

      putdcc $idx "[lang_text lol_lang_data [getlang $hand] 03 ""]"

}



### .botnick <nick>



proc dcc_lol_botnick {hand idx arg} {

	global nick

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .botnick <nick>"

		return 0

	}

	set nick [charfilter $arg]

}



### .param <parameter> <value>



proc dcc_lol_param {hand idx arg} {

	global lol botnick

	set arg [charfilter $arg]

	if {[llength $arg] != 2} {

		putdcc $idx "Synthaxe : .param <parameter> <value>"

		putdcc $idx "cmdchar         : $lol(cmdchar)"

		putdcc $idx "chankey         : $lol(chankey)"

		putdcc $idx "clone           : $lol(clone)"

		putdcc $idx "chan_flood      : $lol(chan_flood)"

		putdcc $idx "join_flood      : $lol(join_flood)"

		putdcc $idx "deop_flood      : $lol(deop_flood)"

		putdcc $idx "ctcp_flood      : $lol(ctcp_flood)"

		putdcc $idx "kick_flood      : $lol(kick_flood)"

		putdcc $idx "chanmode        : $lol(chanmode)"

		putdcc $idx "server_flags    : $lol(server_flags)"

		putdcc $idx "away            : $lol(away)"

		putdcc $idx "protect_flags   : $lol(protect_flags)"

		putdcc $idx "chan_parameters : $lol(chan_parameters)"

		return 0

	}

	set lol([strlwr [lindex $arg 0]]) [lrange $arg 1 end]

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 38 "[strlwr [lindex $arg 0]] [lrange $arg 1 end]"]"

	return 0

}



### .chanlist



proc dcc_lol_chanlist {hand idx arg} {

	if {[channels] == ""} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 56 ""]"

		return 0

	}

      putdcc $idx "[lang_text lol_lang_data [getlang $hand] 57 [list [channels]]]"

}



### .getidle



proc dcc_lol_getidle {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 2} {

		putdcc $idx "Synthaxe : .getidle <nick> <#chan>"

		return 0

	}

	set who [lindex $arg 0]

	set chan [lindex $arg 1]

	if {![onchan $who $chan]} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}

	if {![validchan $chan]} {

  		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0 

	}

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 119 "$who [getchanidle $who $chan] $chan"]"

	return 0

}



### .enable <hand>



proc dcc_lol_enable {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .enable <hand>"

		return 0

	}

	set who [lindex $arg 0]

	if {![validuser $who]} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $who xtra auth] != "DEAD"} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 40 $who]"

		return 0

	}

	setuser $who xtra auth 0

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 41 $who]"

	return 0

}



### .disable <hand>



proc dcc_lol_disable {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .disable <hand>"

		return 0

	}

	set who [lindex $arg 0]

	if {![validuser $who]} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $who xtra auth] == "DEAD"} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 43 $who]"

		return 0

	}

	setuser $who xtra auth DEAD

	chattr $who -3

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 44 $who]"

	return 0

}



### .online



proc dcc_lol_online {hand idx arg} {

	global server {server-online} uptime version botnick config botname

	set ip [lindex [split $server ":"] 0]

	set numchans [llength [channels]]	

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 245 [list $botnick $botname [string range $version 0 5] $config]]"

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 114  [list [time_diff $uptime 1]]]"

	if {$ip != ""} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 113 [list $ip [time_diff ${server-online} 1]]]"

	} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 112 ""]"

	}



	if {![matchattr $hand o]} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 112 $numchans]"

	} {

		if {$numchans != 0} {

           	      putdcc $idx "[lang_text lol_lang_data [getlang $hand] 57 [list [channels]]]"

		} {

                  putdcc $idx "[lang_text lol_lang_data [getlang $hand] 56 ""]"

		}

	}

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 111 [llength [bots]]]"

}



### .join <chan> [chan pass]



proc dcc_lol_join {hand idx arg} {

	set arg [charfilter $arg]

	global lol botnick

	if {[llength $arg] < 1} {

		putdcc $idx "Synthaxe : .join <chan> \[chan pass\]"

		return 0

	}

	set chan [chanaddapt [lindex $arg 0]]

	set pass [lindex $arg 1]

	if {[validchan $chan]} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 58 $chan]"

		if {$pass != ""} {

			if {$lol(chankey)} {

				putdcc $idx "[lang_text lol_lang_data [getlang $hand] 99 "$chan $pass"]"

				channel set $chan need-key "chankey $chan $pass"

			} {

				putdcc $idx "[lang_text lol_lang_data [getlang $hand] 60 $chan]"

			}

		}

		if {![onchan [strlwr $botnick] $chan]} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 61 $chan]"

			putserv "JOIN $chan $pass"

		} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 59 $chan]"

		}

		return 0

	}

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 62 $chan]"

	channel add $chan

	channel set $chan chanmode $lol(chanmode)

	channel set $chan flood-chan $lol(chan_flood)

	channel set $chan flood-deop $lol(deop_flood)

	channel set $chan flood-kick $lol(kick_flood)

	channel set $chan flood-join $lol(join_flood)

	channel set $chan flood-ctcp $lol(ctcp_flood)

	foreach param $lol(chan_parameters) { channel set $chan $param }

	if {$pass != ""} {

		if {$lol(chankey)} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 99 "$chan $pass"]"

			channel set $chan need-key "chankey $chan $pass"

		} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 60 $chan]"

		}

	}

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 61 $chan]"

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 63 ""]"

	putserv "JOIN $chan $pass"

}



### .notice <#chan or nick>



proc dcc_lol_notice {hand idx arg} {

	if {$arg == ""} { 

		putdcc $idx "Synthaxe : .notice <#chan or nick> <message>." 

		return 0 

	}

	set argument [lindex $arg 0]

	if {[string first "#" $argument] == 0} { 

		if {![validchan $argument] } {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $argument]"

			return 0 

		}

	}

	set notice [join [lrange $arg 1 end]]

	puthelp "NOTICE $argument :$notice" 

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 64 [list $notice $argument]]"

	return 0

}



### .onotice <#chan>



proc dcc_lol_onotice {hand idx arg} {

	if {$arg == ""} { 

		putdcc $idx "Synthaxe : .onotice <#chan> <message>" 

		return 0 

	}

	set chan [lindex $arg 0]

	if {![validchan $chan] } {

  		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0 

	}

	set onotice [join [lrange $arg 1 end]]

	puthelp "NOTICE @$chan :$onotice" 

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 65 [list $onotice $chan]]"

	return 0

}



### .remove <chan>



proc dcc_lol_remove {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .remove <chan>"

		return 0

	}

	set chan [chanaddapt [lindex $arg 0]]	 

	if {![validchan $chan]} {

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 66 $chan]"

		return 0

	}

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 37 $chan]"

	channel remove $chan

}



### .userlist [flags]



proc dcc_lol_userlist {hand idx arg} {

	set arg [charfilter $arg]

	set param [lindex $arg 0]

	if {[string match #* $param]} {

		putdcc $idx "Synthaxe : .userlist <flags> \[#chan\]" 

		return 0 

	}

	set chan [lindex $arg 1]

	if { $chan == "" } { set list [userlist $param] 

      } else { 

		if {![validchan $chan]} { 

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

			return 0 

		}

		set list [userlist -|$param $chan] 

	} 

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 69 [list $list]]"

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 70 [llength $list]]"

}



### .chanuser <chan>



proc dcc_lol_chanuser {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] != 1} {

		putdcc $idx "Synthaxe : .chanuser <#chan>"

		return 0

	}

	set chan [chanaddapt [lindex $arg 0]]	

	if {[validchan $chan]} {

		if {![isdynamic $chan]} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 72 $chan]"

			if {![matchattr $hand o|o $chan]} {

                        putdcc $idx "[lang_text lol_lang_data [getlang $hand] 71 $chan]"

				return 0

			}

			*dcc:channel $hand $idx $chan

			return 0

		} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 73 $chan]"

			if {![matchattr $hand o|o $chan]} {

                        putdcc $idx "[lang_text lol_lang_data [getlang $hand] 70 $chan]"

				return 0

			}

			*dcc:channel $hand $idx $chan

			return 0

		}

	} {

		if {![matchattr $hand o]} {

			putdcc $idx "[lang_text lol_lang_data [getlang $hand] 16 ""]"

			return 0

		}

		putdcc $idx "Joining $chan...\r"

		channel add $chan

		utimer 10 "*dcc:channel $hand $idx $chan"

		utimer 15 "partchan $hand $idx $chan"

	}

	return 0

}



proc partchan {hand idx chan} {

	putdcc $idx "[lang_text lol_lang_data [getlang $hand] 68 $chan]"

	channel remove $chan

}



### .mode <chan> <flags>



proc dcc_lol_mode {hand idx arg} {

	set arg [charfilter $arg]

	if {[llength $arg] < 2} {

		putdcc $idx "Synthaxe : .mode <chan> <chan mode>"

		return 0

	}

	set chan [chanaddapt [lindex $arg 0]]	

	if {![validchan $chan]} { 

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0 

	}

	if {![botisop $chan]} { 

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {[matchattr $hand ol|ol $chan]} {

		putserv "MODE $chan [lrange $arg 1 end]"

		putdcc $idx "[lang_text lol_lang_data [getlang $hand] 74 $chan]"

	} {

            putdcc $idx "[lang_text lol_lang_data [getlang $hand] 71 $chan]"

	}

}



### .help



proc dcc_lol_help {hand idx arg} {

      if { [string match "lol dcc *" $arg] || [string match "lol msg *" $arg] || [string match "lol chan *" $arg]} {

		set arg "$arg[getlang $arg]"

	}

	*dcc:help $hand $idx $arg

}



################# END OF DCC COMMANDS #################



################# START OF MSG COMMANDS #################



### help



proc msg_lol_help {nick host hand arg} {

	global botnick modinfo

	set arg [charfilter $arg]



      if { [string match "lol*" $arg]} {

		*msg:help $nick $host $hand $arg

		return 0

	}



	if {![validuser $hand] || ![lol_check $nick $host $hand]} { return 0 }



	if {$arg == "" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 148 $botnick]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 149 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 150 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 151 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 152 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 153 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 154 ""]"

		return 0

	}



	if {[info exists modinfo(sup.$host)]} {

		catch {unset modinfo(sup.$host)}

		if {[!isnumber $arg]} {

			delhost $hand $arg

      	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 155 $arg]"

			return 0

		}

	}



	if {[info exists modinfo(pass.$host)]} {

		catch {unset modinfo(pass.$host)}

		if {[!isnumber $arg]} {

			if {[strlen $arg] > 5 } { 

				set modinfo(pass.$host) 0 

				puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 156 $arg]"

	     	      } else { 

				puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 157 ""]"

           		}

		      return 0

		}

	}



	if {[info exists modinfo(ajout.$host)]} {

		catch {unset modinfo(ajout.$host)}

		if {![isnumber $arg]} {

	      	setuser $hand hosts $arg

     		      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 158 $arg]"  

			return 0  		

		}

	}



	if {[info exists modinfo(mail.$host)]} {

		catch {unset modinfo(mail.$host)}

		if {![isnumber $arg]} {

	           	if { $arg == "none" } { 

				setuser $hand XTRA EMAIL "" 

	      	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 159 ""]"  

	            } else { 

				setuser $hand XTRA EMAIL [string range $arg 0 159]

            	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 160 $arg]" 

	            }

		      return 0

		}

	}



	if {[info exists modinfo(info.$host)]} {

		catch {unset modinfo(info.$host)}

		if {![isnumber $arg]} {

	           	if { $arg == "none" } { 

				setuser $hand INFO "" 

            	     	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 161 ""]"  

	            } else { 

				setuser $hand INFO "[string range $arg 0 159]" 

            	     	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 162 [list $arg]]" 

	            }                 

			return 0

		}

	}



	if {[info exists modinfo(hand.$host)]} {

		catch {unset modinfo(hand.$host)}

		if {![isnumber $arg]} {

	           	chhandle $hand $arg

      	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 167 $arg]" 

			return 0

		}

	}		

	

	if {[info exists modinfo(hostperm.$host)]} {

		catch {unset modinfo(hostperm.$host)}

		if {![isnumber $arg]} {

			if { $arg == "none" } { 

				setuser $hand xtra permident 0

            	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 163 ""]" 

	            } else { 

				setuser $hand xtra permident $arg 

            	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 164 $arg]" 

	           	}

		      return 0

		}

	}



	if {[info exists modinfo(silent.$host)]} {

		catch {unset modinfo(silent.$host)}

		if {![isnumber $arg]} {

			if { $arg == "silent" } { 

				setuser $hand xtra silent 1

            	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 165 ""]" 

	            } else { 

				setuser $hand xtra silent 0

            	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 166 ""]" 

	            }

	            return 0

		}

	}



	if {[info exists modinfo(lang.$host)]} {

		catch {unset modinfo(lang.$host)}

		if {![isnumber $arg]} {

			msg_lang $nick $host $hand $arg

            	return 0

		}

	}



      if {$arg == "1"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 168 ""]" 

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 169 ""]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 170 ""]" 

  		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 171 ""]" 

		return 0

	}



	if {$arg == "11"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 172 ""]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 173 ""]" 

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 174 ""]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 175 ""]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 176 ""]" 

		return 0

	} 



	if {$arg == "111"} { 

		set listhost [getuser $hand HOSTS]

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 177 [list [join $listhost ", "]]]" 

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 178 ""]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 179 ""]" 

		return 0

	} 



	if {$arg == "1111" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 180 ""]"

      	set modinfo(sup.$host) 1

		return 0

	}



	if {$arg == "1112" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 181 ""]"

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 182 "$botnick $hand"]"

      	set modinfo(ajout.$host) 1  

		return 0

	}    



	if {$arg == "112" } { 

		set mailperso [getuser $hand XTRA EMAIL]

		if { $mailperso == "" } {

	 		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 184 ""]"

		} {

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 183 $mailperso]"

		}

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 185 ""]"

		return 0

	}



	if {$arg == "1121" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 186 ""]"

	      set modinfo(mail.$host) 1

		return 0

	}                



	if {$arg == "113" } { 

		set infoperso [getuser $hand INFO]

		if { $infoperso == "" } {

		      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 187 ""]"

		} {

		      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 188 [list $infoperso]]"

		}

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 189 ""]"

		return 0

	}



	if {$arg == "1131" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 190 ""]"

      	set modinfo(info.$host) 1

		return 0

	}    



	if {$arg == "114" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 191 $hand]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 192 ""]"

      	return 0

	}



	if {$arg == "1141" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 193 ""]"

	      set modinfo(hand.$host) 1

      	return 0  

	}    



	if {$arg == "115"} { 

		set langperso [getuser $hand xtra LANG]

		if { $langperso == "" } {

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 199 ""]"

		} {

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 194 $langperso]"

		}

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 195 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 196 ""]"

		return 0

	} 



	if {$arg == "1151" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 197 ""]"

	      set modinfo(lang.$host) 1

      	return 0  

	}



	if {$arg == "14" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 198 ""]"

	      set modinfo(pass.$host) 1

      	return 0

	}



	if {$arg == "2"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 226 ""]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 227 ""]" 

      	return 0 

	}



	if {$arg == "21"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 228 ""]" 

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 229 $botnick]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 230 ""]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 231 ""]" 

  		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 232 $botnick]" 

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 233 ""]" 

		return 0

	}



	if {$arg == "22"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 234 "$nick!$host"]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 235 ""]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 236 "$host [maskhost $host]"]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 237 ""]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 238 $botnick]" 

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 239 $hand]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 240 $botnick]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 241 $botnick]" 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 242 ""]" 

	      return 0 

	}



	if {$arg == "4" } {  

		set globalflags [chattr $hand]  

	 	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 200 $globalflags]"

      	foreach chan [channels] {

	      	set chanflags [lindex [split [chattr $hand - $chan] |] 1]

      	      if { $chanflags != "-" } { 

				puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 201 "$chanflags $chan"]"

			}

      	}

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 202 ""]"

      	return 0

	}



	if {$arg == "41" } { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 203 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 204 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 205 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 206 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 207 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 208 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 209 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 210 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 211 ""]"

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 212 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 213 ""]"

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 214 ""]"

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 215 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 216 ""]"

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 217 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 218 ""]"

	      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 219 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 220 ""]"

	  	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 221 $botnick]"

		return 0

	}    



	if {$arg == "13"} {	

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 222 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 223 ""]"

	      set modperm($host) 1

	      return 0

	}



	if {$arg == "12"} { 

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 224 ""]"

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 225 ""]"

	      set modsilent($host) 1

	      return 0

	}



	if {$arg == "3"} { 

		*msg:help $nick $host $hand lol

	}

	return 0

}





### silent <password>



proc msg_lol_silent {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : silent <password>"

	if {![lol_msg_test $nick $hand "" $arg "!= 1" $usage "" ""]} { return 0 }

	setuser $hand xtra silent 1

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 76 ""]"

}



### unsilent <password>



proc msg_lol_unsilent {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : unsilent <password>"

	if {![lol_msg_test $nick $hand "" $arg "!= 1" $usage "" ""]} { return 0 }

	setuser $hand xtra silent 0

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 03 ""]"

}



### unpermident <password>



proc msg_lol_unpermident {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : unpermident <password>"

	if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }

	setuser $hand xtra permident ""

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 06 ""]"

}



### unident <password>



proc msg_lol_unident {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : unident <password>"

	if {![lol_msg_test $nick $hand "" $arg "!= 1" $usage "" ""]} { return 0 }

	if {![lol_check $nick $host $hand msg]} { return 0 }

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand +D]} { chattr $hand -3 }

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 54 ""]"

}



### botnick <password> <nick>



proc msg_lol_botnick {mynick host hand arg} {

	set arg [charfilter $arg]

	global nick

	set usage "Synthaxe : botnick <password> <nick>"

	if {![lol_msg_test $mynick $hand "" $arg "!= 2" $usage "" ""]} { return 0 }

	set nick [lindex $arg 1]

}



### addhost <password> <hand> <host>



proc msg_lol_addhost {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : addhost <password> <hand> <host>"

	if {![lol_msg_test $nick $hand "" $arg "!= 3" $usage "" ""]} { return 0 }

	set who [lindex $arg 1]

	set host [lindex $arg 2]

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	setuser $who hosts $host

	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 07 $host $who]"

	return 0

}



### delhost <password> <hand> <host>



proc msg_lol_delhost {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : delhost <password> <hand> <host>"

	if {![lol_msg_test $nick $hand "" $arg "!= 3" $usage "" ""]} { return 0 }

	set who [lindex $arg 1]

	set host [lindex $arg 2]

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[delhost $who $host]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 33 "$host $who"]"

	} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 34 "$host $who"]"

	}

	return 0

}



### chattr <password> <hand> <flags> [chan]



proc msg_lol_chattr {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : chattr <password> <hand> <flags> <chan>"

	set who [lindex $arg 1]

	set flags [lindex $arg 2]

	set chan [lindex $arg 3]



	if {![lol_msg_test $nick $hand "" $arg "< 4" $usage "" ""]} { return 0 }

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	lol_chattr $nick $host $hand $chan $who $flags

	return 0

}



### mass <password> <command> <chan>



proc msg_lol_mass {nick host hand arg} {

	global masslist

	set arg [charfilter $arg]

	set usage "Synthaxe : mass <password> <[join $masslist "|"]> <chan>"

	set cmd [strlwr [lindex $arg 1]]

	set chan [lindex $arg 2]



	if {![lol_msg_test $nick $hand $chan $arg "< 3" $usage m testop]} { return 0 }

	

	if {[lsearch -exact $masslist $cmd] == -1} {

		puthelp "PRIVMSG $nick :$usage"

		return 0

	}



	if { $cmd == "ban" } { 

		msg_lol_ban $nick $host $hand $chan "[lindex $arg 0] * $chan"

		return 0

	}



	if { $cmd == "kick" } { 

		msg_lol_kick $nick $host $hand $chan "[lindex $arg 0] * $chan"

		return 0

	}

	lol_mass $chan $cmd

	return 0

}



### gchattr <password> <hand> <flags>



proc msg_lol_gchattr {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : gchattr <password> <hand> <flags>"

	set who [lindex $arg 1]

	set flags [lindex $arg 2]



	if {![lol_msg_test $nick $hand "" $arg "< 2" $usage "" ""]} { return 0 }

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	lol_chattr $nick $host $hand "" $who $flags

	return 0

}



### param <password> <parameter> <value>



proc msg_lol_param {nick host hand arg} {

	global lol botnick

	set arg [charfilter $arg]

	set usage "Synthaxe : param <password> <parameter> <value>"

	if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }

	if {[lindex $arg 2] == ""} {

		puthelp "PRIVMSG $nick :$usage"

		set display ""

		append display "cmdchar : $lol(cmdchar)   "

		append display "chankey : $lol(chankey)   "

		append display "clone : $lol(clone)   "

		append display "chan_flood : $lol(chan_flood)   "

		append display "join_flood : $lol(join_flood)   "

		append display "deop_flood : $lol(deop_flood)   "

		append display "ctcp_flood : $lol(ctcp_flood)   "

		append display "kick_flood : $lol(kick_flood)   "

		append display "protect_flags : $lol(protect_flags)   "

		append display "server_flags : $lol(server_flags)   "

		puthelp "PRIVMSG $nick :$display"

		set display ""

		append display "chan_parameters : $lol(chan_parameters)   "

		append display "chanmode : $lol(chanmode)   "

		puthelp "PRIVMSG $nick :$display"

		puthelp "PRIVMSG $nick :away : $lol(away)"

		return 0

	}

	set lol([strlwr [lindex $arg 1]]) [lrange $arg 2 end]

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 38 "[strlwr [lindex $arg 1]] [lrange $arg 2 end]"]"

	return 0

}



### enable <password> <hand>



proc msg_lol_enable {nick host hand arg} {

	set arg [charfilter $arg]

	global botnick

	set usage "Synthaxe : enable <password> <hand>"

	if {![lol_msg_test $nick $hand "" $arg "!= 2" $usage "" ""]} { return 0 }



	set who [lindex $arg 1]

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $who xtra auth] != "DEAD"} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 40 $who]"

		return 0

	}

	setuser $who xtra auth 0

	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 41 $who]"

	return 0

}



### disable <password> <hand>



proc msg_lol_disable {nick host hand arg} {

	global botnick

	set arg [charfilter $arg]

	set usage "Synthaxe : disable <password> <hand>"

	if {![lol_msg_test $nick $hand "" $arg "!= 2" $usage "" ""]} { return 0 }



	set who [lindex $arg 1]

	if {![validuser $who]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if {[getuser $who xtra auth] == "DEAD"} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 43 $who]"

		return 0

	}

	setuser $who xtra auth DEAD

	chattr $who -3

	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 44 $who]"

	return 0

}



### ident <password> [username]



proc msg_lol_ident {nick host hand arg} {

	global lol botnick

	set arg [charfilter $arg]

	set whohand [strlwr [lindex $arg 1]]

	set pass [lindex $arg 0]

	set uhost [lindex [split $host "@"] 1]

	if {![validuser $hand]} {

		set usage "Synthaxe : ident <password> <hand>"

		if { [llength $arg] != 2 } {

			puthelp "notice $nick :$usage"

		}

		set find 0

		foreach user [userlist] {

			if {[strlwr $user] == $whohand} { set find 1 ; break }

		}

		if {!$find} {return 0}

		if {[passwdok $whohand $pass]} {

			if {[string match "*.users.undernet.org" [strlwr $host]]} {

	                  puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 158 *!*@$uhost]"

            	      setuser $whohand HOSTS *!*@$uhost

                  } else {

                  	*msg:ident $nick $host $hand $arg

                  }

		}

		

	} {

		set usage "Synthaxe : ident <password>"

		if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }



		if {[llength $arg] > 1} {

			if {$whohand != [strlwr $hand]} { return 0 } 

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 78 ""]"

		}

	}



	if {[getuser $hand xtra auth] == "DEAD"} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 79 ""]"

		return 0

	}

	if {![onchan $nick]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 80 ""]"

		return 0

	}

	setuser $hand xtra auth 1

	setuser $hand xtra authnick $nick

	setuser $hand xtra authhost $uhost

	if {![matchattr $hand D]} { chattr $hand +3 }

     	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 81 $botnick]"

	return 0

}



### permident <password> [nick!user@host]



proc msg_lol_permident {nick host hand arg} {

	global botnick

	set arg [charfilter $arg]

	set usage "Synthaxe : permident <password> \[nick!user@host\]"

	set mask [lindex $arg 1]



	if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }



	if {![onchan $nick] && $mask == ""} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 82 ""]"

		return 0

	}

	if {$mask == ""} {

		setuser $hand xtra permident *!$host

	} {

		setuser $hand xtra permident $mask

	}

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 55 "[getuser $hand xtra permident]"]"

}



### online <password>



proc msg_lol_online {nick host hand arg} {

	global server {server-online} uptime version botnick config botname

	set ip [lindex [split $server ":"] 0]

	set numchans [llength [channels]]

	set msg ""

      append msg "[lang_text lol_lang_data [getlang $hand] 245 [list $botnick $botname [string range $version 0 5] $config]] "

      append msg "[lang_text lol_lang_data [getlang $hand] 114 [list [time_diff $uptime 1]]]" 

	append msg " [lang_text lol_lang_data [getlang $hand] 113 [list $ip [time_diff ${server-online} 1]]]"

	if {![matchattr $hand o]} {

      	append msg " [lang_text lol_lang_data [getlang $hand] 112 $numchans]"

	} {

		if {$numchans != 0} {

            	append msg " [lang_text lol_lang_data [getlang $hand] 57 [list [channels]]]"

		} {

                  append msg " [lang_text lol_lang_data [getlang $hand] 56 ""]"

		}

	}

	append msg " [lang_text lol_lang_data [getlang $hand] 111 [llength [bots]]]"

	puthelp "PRIVMSG $nick :$msg"

}



### broadcast <password> <text>



proc msg_lol_broadcast {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : broadcast <password> <text>"

	set text [lrange $arg 1 end]

	if {![lol_msg_test $nick $hand "" $arg "!= 2" $usage "" ""]} { return 0 }

	foreach chan [channels] {

		if {[matchattr $hand o|o $chan]} { puthelp "PRIVMSG $chan :\002<$nick>:\002 $text" }

	}

}



### key <password> <chan>



proc msg_lol_key {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : key <password> <chan>"

	set chan [lindex $arg 1]



	if {![lol_msg_test $nick $hand $chan $arg "!= 2" $usage ol testop]} { return 0 }



	set mode [getchanmode $chan]

	if {[string first k [lindex $mode 0]] != -1} {

		set posmode [string first k [lindex $mode 0]]

		if {[string first l [lindex $mode 0]] != -1} {

			set poslim [string first l [lindex $mode 0]]

			if {$posmode < $poslim} {

                  	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 85 "[lindex $mode 1] $chan"]"

			} {

                        puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 85 "[lindex $mode 2] $chan"]"

			}

		} {

                        puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 85 "[lindex $mode 1] $chan"]"

		}

		return 0

	}

        puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 84 $chan]"

}



### banlist <password> <chan>



proc msg_lol_banlist {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : banlist <password> <chan>"

	set chan [lindex $arg 1]



	if {![lol_msg_test $nick $hand $chan $arg "!= 2" $usage ol testop]} { return 0 }



	set num 1

      puthelp "PRIVMSG $nick :$chan BANS info !!!"

	foreach bans [banlist $chan] {

		set victim [lindex $bans 0]

		set why [lindex $bans 1]

		set expire [lindex $bans 2]

		set who [lindex $bans 5]

		set remain [expr $expire - [unixtime]]

		if {$remain > 0} {

			set remain "expire in [time_diff $expire 0]."

		} {

			set remain "Perm Ban"

		}

		puthelp "PRIVMSG $nick :\002BAN $num:\002 $victim, $remain"

		puthelp "PRIVMSG $nick :$who: $why"

		incr num

	}

      if {$num == 1} {puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 45 $chan]"}

	return 0

}



## kick <password> <nick|mask> <chan> [reason]



proc msg_lol_kick {nick host hand arg} {

	lol_msg_bad $nick $host $hand $arg kick 0

	return 0

}



### quick <password> <nick|mask> <chan> [reason]



proc msg_lol_quick {nick host hand arg} {

	lol_msg_bad $nick $host $hand $arg quick  0

	return 0	

}



### ban <password> <nick> <chan> [time] [reason]



proc msg_lol_ban {nick host hand arg} {

	lol_msg_bad $nick $host $hand $arg ban 0

	return 0

}



### banperm <password> <nick> <chan> [reason]



proc msg_lol_banperm {nick host hand arg} {

	lol_msg_bad $nick $host $hand $arg banperm 0

	return 0

}



### whoid <password> [chan] [flags]



proc msg_lol_whoid {nick host hand arg} {

	set usage "Synthaxe : whoid <password> \[chan\] \[flags\]"

	if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }

	set chan ""

	set whoflags ""

	if {[llength $arg] > 2} { 

		if {[string match #* [lindex $arg 1]]} {

			set chan [lindex $arg 1]

			if {![validchan $chan]} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 10 $chan]"

				return 0

			}

			set whoflags [lindex $arg 2]

			if {$whoflags == "" } {

				puthelp "PRIVMSG $nick :Synthaxe : whoid password <chan> <flags>"

				return 0

			}

		} {

			set whoflags [lindex $arg 1]

		}

	} 

	lol_whoid $nick $host $hand $chan $whoflags

	return 0

}



### unban <password> <mask|number> <chan>



proc msg_lol_unban {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : unban <password> <mask> <chan>"

	set mask [lindex $arg 1]

	set chan [lindex $arg 2]

	if {![lol_msg_test $nick $hand $chan $arg "!= 3" $usage ol testop]} { return 0 }

	lol_unban $nick $hand $chan $mask 0

	return 0

}



### mode <password> <chan> <flags>



proc msg_lol_mode {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : mode <password> <chan> <chan mode>"

	global lol

	set chan [lindex $arg 1]

	if {![lol_msg_test $nick $hand $chan $arg "< 3" $usage ol testop]} { return 0 }

	

	set mode [lrange $arg 2 end]



	if {$lol(chankey)} {

		if {[string first k [lindex $mode 0]] != -1} {

			set posmode [string first k [lindex $mode 0]]

			if {[string first l [lindex $mode 0]] != -1} {

				set poslim [string first l [lindex $mode 0]]

				if {$posmode < $poslim} {

					channel set $chan need-key "chankey $chan [lindex $mode 1]"

				} {

					channel set $chan need-key "chankey $chan [lindex $mode 2]"

				}

			} {

				channel set $chan need-key "chankey $chan [lindex $mode 1]"

			}

		}

	}

	putserv "MODE $chan $mode"

	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 86 $chan]"

	return 0

}



### whois <password> <nick>



proc msg_lol_whois {nick host hand arg} {

	if {![validuser $hand]} { return 0 }

	set arg [charfilter $arg]

	set usage "Synthaxe : whois <password> <nick> \[chan\]"

	global lol_whois

	if {![lol_msg_test $nick $hand "" $arg "< 2" $usage "" ""]} { return 0 }



	set who [lindex $arg 1]

	set chan [lindex $arg 2]

	if { $chan != "" && ![validchan $chan]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 10 $chan]"

		return 0

	}

	set find 0

	foreach chan [channels] {

		foreach user [chanlist $chan] {

			if {[strlwr $user] == [strlwr $who]} { set find $chan ; break }

		}

	}

	if {$find != 0} {

		puthelp "PRIVMSG $nick :[lol_whois $hand $who [getchanhost $who $find] [nick2hand $who $find] $chan]"

		return 0

	} 

	if {$lol_whois != ""} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 87 ""]"

		return 0

	}

      puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 88 $who]"

	putserv "whois $who"

	set lol_whois $nick:$who

}



### all the add procs ###



proc msg_lol_adduser {nick host hand arg} {

	msg_lol_add $nick $hand $arg user

	return 0

}



proc msg_lol_addvoice {nick host hand arg} {

	msg_lol_add $nick $hand $arg voice

	return 0

}



proc msg_lol_addfriend {nick host hand arg} {

	msg_lol_add $nick $hand $arg friend

	return 0

}



proc msg_lol_addbot {nick hand host arg} {

	msg_lol_add $nick $hand $arg bot

	return 0

}



proc msg_lol_addhalfop {nick host hand arg} {

	msg_lol_add $nick $hand $arg halfop

	return 0

}



proc msg_lol_addop {nick host hand arg} {

	msg_lol_add $nick $hand $arg op

	return 0

}



proc msg_lol_addmaster {nick host hand arg} {

	msg_lol_add $nick $hand $arg master

	return 0

}



proc msg_lol_addowner {nick host hand arg} {

	msg_lol_add $nick $hand $arg owner

	return 0

}



### all the del procs ###



proc msg_lol_deluser {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg user

	return 0

}



proc msg_lol_delvoice {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg voice

	return 0

}



proc msg_lol_delfriend {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg friend

	return 0

}



proc msg_lol_delhalfop {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg halfop

	return 0

}



proc msg_lol_delop {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg op

	return 0

}



proc msg_lol_delmaster {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg master

	return 0

}



proc msg_lol_delowner {nick host hand arg} {

	lol_msg_del $nick $host $hand $arg owner

	return 0

}



### invite <password> [chan]



proc msg_lol_invite {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : invite <password> \[chan\] \[nick\]"

	set chan [strlwr [lindex $arg 1]]

	set who [lindex $arg 2]



	if {![lol_msg_test $nick $hand "" $arg "< 1" $usage "" ""]} { return 0 }



	if {$chan != ""} {

		set chan [chanaddapt $chan]

		if {![validchan $chan]} { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 10 $chan]"

			return 0 

		}

		if {[onchan $nick $chan] && $who == "" } { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 92 $chan]"

			return 0 

		}

		if {[onchan $who $chan] && $who != "" } { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 93 "$who $chan"]"

			return 0 

		}

		if {[string first i [lindex [getchanmode $chan] 0]] == -1} { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 94 $chan]"

			return 0	

		}

		if {![matchattr $hand ol|ol $chan]} { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 71 $chan]"

			return 0 

		}

		if { $who != "" } {

			puthelp "INVITE $who $chan"

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 147 "$who $chan"]"	

		} else {

			puthelp "INVITE $nick $chan"

		}

		return 0

	}

	set invitelist ""

	foreach chan [channels] {

		if {[string first i [lindex [getchanmode $chan] 0]] != -1} {

			if {![onchan $nick $chan]} {

				if {[matchattr $hand ol|ol $chan]} { lappend invitelist $chan }

			}

		}

	}

	if {$invitelist == ""} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 95 ""]"

	} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 96 "[join $invitelist ", "]"]"

	}

	return 0

}



### join <password> <chan> [chan pass]



proc msg_lol_join {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : join <passsword> <chan> \[chan pass\]"

	global botnick

	set chan [lindex $arg 1]

	if {![lol_msg_test $nick $hand "" $arg "< 2" $usage "" ""]} { return 0 }

	set pass [lindex $arg 2]

	lol_join $nick $host $hand $chan $pass

	return 0

}



### remove <password> <chan>



proc msg_lol_remove {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : remove <password> <chan>"

	set chan [chanaddapt [lindex $arg 1]]

	if {![lol_msg_test $nick $hand $chan $arg "!= 2" $usage "" ""]} { return 0 }

	channel remove $chan

	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 37 $chan]"

}



### msg <password> <chan> <message>



proc msg_lol_msg {nick host hand arg} {

	set arg [charfilter $arg]

	set usage "Synthaxe : msg <password> <chan> <message>"

	set chan [lindex $arg 1]

	if {![lol_msg_test $nick $hand $chan $arg "< 3" $usage "" ""]} { return 0 }

	puthelp "PRIVMSG $chan :[lrange $arg 2 end]"

}



################# END OF MSG COMMANDS #################



################# START OF MISC #################



proc lol_init {} {

	global lol botnick lol_whois lol_what

	puthelp "MODE $botnick $lol(server_flags)"

	lol_alldeident

	if {$lol(away) != ""} {

		utimer 20 {	puthelp "AWAY :$lol(away)" }

	}

	set lol_whois ""

	set lol_what ""

}



proc lol_whois {hand who whohost whohand chan} {

	if {![validuser $whohand]} {return "[lang_text lol_lang_data [getlang $hand] 12 $who]"}

	if {$whohand != ""} {

		set msg "[lang_text lol_lang_data [getlang $hand] 116 "$who $whohand"] "

		set globalflags [lindex [split [chattr $whohand - ] |] 0]

		if {$globalflags == ""} { set globalflags [lang_text lol_lang_data [getlang $hand] 98 ""] }

		append msg "[lang_text lol_lang_data [getlang $hand] 120 $globalflags] "



		if {$chan != ""} {

			set chanflags [lindex [split [chattr $whohand - $chan] |] 1]

			if {$chanflags == "-"} { set chanflags [lang_text lol_lang_data [getlang $hand] 98 ""]}

            	append msg "[lang_text lol_lang_data [getlang $hand] 118 [list $chan $chanflags]] "

      	} {

	      	foreach chan [channels] {

	      		set chanflags [lindex [split [chattr $whohand - $chan] |] 1]

	      	      if { $chanflags != "-" } { 

					append msg "[lang_text lol_lang_data [getlang $hand] 118 [list $chan $chanflags]] "

				}

	      	}

		}

		if {[getuser $whohand xtra auth] == 1} { 

			append msg "[lang_text lol_lang_data [getlang $hand] 121 ""] "

		} {

			append msg "[lang_text lol_lang_data [getlang $hand] 122 ""] "

		}

		if {[getuser $whohand xtra permident] != ""} {

			append msg "[lang_text lol_lang_data [getlang $hand] 123 [getuser $whohand xtra permident]] "

		} {

			append msg "[lang_text lol_lang_data [getlang $hand] 124 ""] "	

		}

		if {[getuser $whohand xtra silent] == 1} {

			append msg "[lang_text lol_lang_data [getlang $hand] 125 ""] "

		} {

			append msg "[lang_text lol_lang_data [getlang $hand] 126 ""] "

		}

		if {$chan != ""} {

			if {[getchaninfo $whohand $chan] != ""} {

				append msg "[lang_text lol_lang_data [getlang $hand] 127 [list $chan [getchaninfo $whohand $chan]]] "

			} {

				append msg "[lang_text lol_lang_data [getlang $hand] 128 $chan] "

			}

		}

		return $msg

	} {

            return "[lang_text lol_lang_data [getlang $hand] 129 $who] "

	}

}



proc lol_ban_whois_chan { from signal arg } {

	global lol_what timerIDwhois

	if {![string match *#* $lol_what]} { return 0 }



	catch { killutimer $timerIDwhois }

	set timerIDwhois [utimer 5 {set lol_what ""}] 



	set arg [charfilter $arg]

	set nick [lindex $arg 1]



	if { $lol_what == "" || [validuser [nick2hand $nick]]} { return 0}

	set msg [join [lrange $arg 2 end]]

	if {[string match *$lol_what* $msg] || [string match $lol_what $msg]} { lol_do_badwhois $nick $lol_what }

	return 0

}



proc lol_ban_whois_msg {from signal arg} {

	global lol_what timerIDwhois

	if {[string match *#* $lol_what]} { return 0 }

	catch { killutimer $timerIDwhois }

	set timerIDwhois [utimer 5 {set lol_what ""}] 



	set arg [charfilter $arg]

	set nick [lindex $arg 1]



	if { $lol_what == "" || [validuser [nick2hand $nick]]} { return 0}

	set msg [join [lrange $arg 5 end]]

	if {[string match *$lol_what* $msg] || [string match $lol_what $msg]} { lol_do_badwhois $nick $lol_what }

	return 0

}



proc lol_ban_whois_away {from signal arg} {

	global lol_what timerIDwhois

	if {[string match *#* $lol_what]} { return 0 }

	set arg [charfilter $arg]

	catch { killutimer $timerIDwhois }

	set timerIDwhois [utimer 3 {set lol_what ""}] 

	

	set nick [lindex $arg 1]

	set msg [join [lrange $arg 2 end]]

	

	if { $lol_what == "" || [validuser [nick2hand $nick]]} { return 0}

	if {[string match *$lol_what* $msg] || [string match $lol_what $msg]} { lol_do_badwhois $nick $lol_what }

	return 0

}



proc lol_do_badwhois { nick what } {

	set host [getchanhost $nick]

	set ban "*!*[string range $host [string first @ $host] e]"

	set why "Your whois is corresponding to $what"

	newban $ban Banwhois $why 60

	return 0

} 



proc lol_whois_reply {from signal arg} {

	global lol_whois

	set arg [charfilter $arg]

	set nick [lindex $arg 1]

	set user [lindex $arg 2]

	set ip [lindex $arg 3]

	set c [lindex [split $lol_whois ":"] 0]

	if {[strlwr $nick] != [strlwr [lindex [split $lol_whois ":"] 1]]} { return 0 }

	set who $nick!$user@$ip

	set whohand [finduser $who]

	if {[validuser $whohand]} {

		puthelp "PRIVMSG $c :[lol_whois [nick2hand $c] $nick $user@$ip $whohand ""]"

	} {

            puthelp "PRIVMSG $c :[lang_text lol_lang_data [getlang ""] 12 $who]"

	}

      set lol_whois ""

	return 0

}



proc lol_whois_unknow {from signal arg} {

	global lol_whois

	set arg [charfilter $arg]

	set nick [lindex $arg 1]

	set c [lindex [split $lol_whois ":"] 0]

	set nick2 [lindex [split $lol_whois ":"] 1]

	if {$lol_whois != "" && [strlwr $nick] == [strlwr $nick2]} {

            puthelp "PRIVMSG $c :[lang_text lol_lang_data [getlang ""] 117 $nick]"

		set lol_whois ""

	}

	return 0

}



proc lol_whois_nofound {from signal arg} {

	global lol_whois

	if {![info exists lol_whois]} {return 0}

	set arg [charfilter $arg]

	set nick [lindex $arg 1]

	set c [lindex [split $lol_whois ":"] 0]

	set nick2 [lindex [split $lol_whois ":"] 1]

	if {$lol_whois != "" && [strlwr $nick] == [strlwr $nick2]} {

		puthelp "PRIVMSG $c :[lang_text lol_lang_data [getlang ""] 130 $nick]"

		set lol_whois ""

	}

	return 0

}



proc lol_watch_mode {nick host hand chan mode who} {

	global lol botnick botname

	if {$mode != "+b" || ![botisop $chan]} {return 0}

      if {[llength [chanbans $chan]] > 27 } {

            set banhost ""

	   	set b_count 0

		for {set loop 0} {$loop < 6} {incr loop} {

	   		set banhost "$banhost [lindex [lindex [chanbans $chan] $loop] 0]"

	   		incr b_count

			if {$loop == 5 } {	

				putserv "MODE $chan -bbbbbb $banhost"  

	                  set banhost "" ; set b_count 0 

			}

	   	}

      }

	if {[string match [strlwr $who] [strlwr $botname]]} {

		putserv "MODE $chan -b $who"

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 97 ""]"

		return 0

	}



	foreach user [chanlist $chan] {

		set userhand [nick2hand $user $chan]

		if {[validuser $userhand] && $hand != $userhand } {

			if {[string match [strlwr $who] [strlwr "$user![getchanhost $user $chan]"]]} {

				if {[matchattr $userhand ov|ov $chan]} {

					if {[lol_ban_test $nick $hand $who $chan $userhand]} { return 0 }

				}

			}

		}

	}

	foreach user [userlist] {

		if {$user != $hand} {

			foreach userhost [getuser $user HOSTS] {

				if {[string match [strlwr $who] [strlwr $userhost]] && [matchattr $user ov|ov $chan]} {

					if {[lol_ban_test $nick $hand $who $chan $user]} { return 0 }

				}

			}

		}

	}

	return 0

}



proc lol_ban_test {nick hand ban chan victim} {

	global botnick

	set remove 0

	if {![validuser $hand] && [channel get $chan userbans]} { set remove 1 }

	if {[matchattr $victim mb|m $chan] && ![matchattr $hand m|m $chan]} { set remove 1 }

	if {[matchattr $victim o|o $chan] && ![matchattr $hand o|o $chan]} { set remove 1 }

	if {$remove} {

		putserv "MODE $chan -b $ban"

		if {$nick != $botnick} { putserv "MODE $chan -o $nick" } 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang ""] 100 "$chan $ban $victim"]"

		return 1

	}

	return 0

}



proc lol_check {nick host hand} {

	global lol botnick

	if {[getuser $hand xtra auth] != "DEAD" && ([getuser $hand xtra permident] != "")} {

		if {[string match [strlwr [getuser $hand xtra permident]] [strlwr $nick!$host]]} { return 1 }

	}

	if {[getuser $hand xtra auth] == 1} {

		if {$lol(clone)} {

			set host [lindex [split $host "@"] 1]

			if {[getuser $hand xtra authhost] == $host} { return 1 }

		}

		if {[getuser $hand xtra authnick] == $nick} { return 1 }

	}

	if {[getuser $hand xtra silent] == 1 } { return 0 }

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 00 $botnick]"

	return 0

}



proc lol_chidentnick {nick host hand chan newnick} {

	global botnick

	if {![validuser $hand]} {return 0}

	if {[getuser $hand xtra auth] == 1} {

		if {[getuser $hand xtra authnick] == $nick} { setuser $hand xtra authnick $newnick }

	}

}



proc lol_kickident {nick host hand chan kick arg} {

	global botnick

	if {$kick == $botnick} {

		regsub -all -- $chan [channels] "" chanstemp

		foreach user [chanlist $chan] {

			set userhand [nick2hand $user $chan]

			if {[validuser $userhand]} {		

				set find 0

				foreach ch $chanstemp {

					if {[onchan $user $ch]} { incr find }

				}

				if {!$find } {

					if {[getuser $userhand xtra auth] != "DEAD"} { setuser $userhand xtra auth 0 }

					if {[matchattr $userhand D]} { chattr $userhand -3 }

				}

			}

		}

	}

	return 0

}



proc lol_partident {nick host hand chan reason} {

	if {![validuser $hand]} {return 0}

	set find 0

	regsub -all -- $chan [channels] "" chanstemp 

	foreach ch $chanstemp {

		if {[onchan $nick $ch]} { set find 1 }

	}

	if {!$find} {

		if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

		if {[matchattr $hand D]} { chattr $hand -3 }

	}

}



proc lol_rejnident {nick host hand chan} {

	if {![validuser $hand]} {return 0}

	set find 0

	regsub -all -- $chan [channels] "" chanstemp

	foreach ch $chanstemp {

		if {[onchan $nick $ch]} { incr find }

	}

	if {!$find} {

		if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

		if {[matchattr $hand D]} { chattr $hand -3 }

	}

}



proc lol_joinident {nick host hand chan} {

	if {![validuser $hand]} {return 0}

	set find 0

	regsub -all -- $chan [channels] "" chanstemp

	foreach ch $chanstemp {

		if {[onchan $nick $ch]} { incr find }

	}

	if {!$find} {

		if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

		if {[matchattr $hand D]} { chattr $hand -3 }

	}

}



proc lol_alldeident {} {

	foreach user [userlist] {

		if {[getuser $user xtra auth] != "DEAD"} { setuser $user xtra auth 0 }

		if {[matchattr $hand D]} { chattr $user -3 }

	}

}



proc lol_deident {nick host hand chan reason} {

	if {![validuser $hand]} {return 0}

	if {[getuser $hand xtra auth] != "DEAD"} { setuser $hand xtra auth 0 }

	if {[matchattr $hand D]} { chattr $hand -3 }

}



proc chankey {chan pass} {

	putserv "JOIN $chan $pass"

}



proc chanaddapt {chan} {

	if {[string index $chan 0] != "#" && [string index $chan 0] != "&"} { set chan #$chan }

	return $chan

}



proc see_new_pass {a b c d e f} {

	global lol

	if {$lol(chankey)} {return 0}

	set k [lindex $e 0]

	set pass [lindex $f 0]

	channel set $d need-key "chankey $d $pass"

}



proc time_diff { time inverse} {

	if {$inverse} {

		set ltime [expr [unixtime] - $time]

	} {

		set ltime [expr $time - [unixtime]]

	}

	set seconds [expr $ltime % 60]

	set ltime [expr ($ltime - $seconds) / 60]

	set minutes [expr $ltime % 60]

	set ltime [expr ($ltime - $minutes) / 60]

	set hours [expr $ltime % 24]

	set days [expr ($ltime - $hours) / 24]

	set result ""

	if {$days} {

		append result "$days "

		if {$days == 1} {

			append result "day "

		} {

			append result "days "

		}

	}

	if {$hours} {

		append result "$hours "

		if {$hours == 1} {

			append result "hour "

		} {

			append result "hours "

		}

	}

	if {$minutes} {

		append result "$minutes "

		if {$minutes == 1} {

			append result "minute "

		} {

			append result "minutes "

		}

	}

	if {$seconds} {

		append result "$seconds "

		if {$seconds == 1} {

			append result "second"

		} {

			append result "seconds"

		}

	}

	return $result

}



proc charfilter {x {y ""} } {

	for {set i 0} {$i < [string length $x]} {incr i} {

		switch -- [string index $x $i] {

			"\"" {append y "\\\""}

			"\\" {append y "\\\\"}

			"\[" {append y "\\\["}

			"\]" {append y "\\\]"}

			"\} " {append y "\\\} "}

			"\{" {append y "\\\{"}

			default {append y [string index $x $i]}

		}

	}

	return $y

}



proc lol_test_rights { command witch } { 

	switch -exact -- $command {

		"owner" {

			set param "n" ; set needflag "n|-" 

		}

		"master" {

			set param "m" ; set needflag "n|n" 

		}

		"op" {

			set param "o" ; set needflag "m|m"  ; 

		}

		"halfop" {

			set param "l" ; set needflag "o|o"  ; 

		}

		"friend" {

			set param "f" ; set needflag "o|o" 

		}

		"voice" {

			set param "v" ; set needflag "o|o" 

		}

		"bot" {

			set param "-" ; set needflag "m|m"

		}

		default {

			set param "-" ; set needflag "n|-"

		}

	}

	if { $witch == "flag" } {

		return $needflag

	} {

		return $param

	}

}



proc lol_pub_chattr { nick host hand chan arg command } {

	global lol

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 2} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]chattr <nick> <flags>"

		return 0

	}

	set arg [charfilter $arg]

	set who [lindex $arg 0]

	set flags [lindex $arg 1]

	if {![onchan $who $chan]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}

	set whohand [nick2hand $who $chan]

	if {![validuser $whohand]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

		return 0

	}

	if { $command == "chattr" } {

		lol_chattr $nick $host $hand $chan $whohand $flags 

	} { 

		lol_chattr $nick $host $hand "" $whohand $flags 

	}

	return 0

}



proc lol_chattr { nick host hand chan who flags } {

	if {$chan != ""} {

		if {[lol_do_chattr $nick $hand $chan $who $flags n|n]} { return 0 }

		regsub -all -- "n" $flags "" flags

		regsub -all -- "m" $flags "" flags

		if {[lol_do_chattr $nick $hand $chan $who $flags m|m]} { return 0 }

		regsub -all -- "o" $flags "" flags

		regsub -all -- "l" $flags "" flags

		if {[lol_do_chattr $nick $hand $chan $who $flags o|o]} { return 0 }

	      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 16 ""]"

	} {

		if {[lol_do_chattr $nick $hand $chan $who $flags n]} { return 0 }

		regsub -all -- "n" $flags "" flags

		regsub -all -- "m" $flags "" flags

		if {[lol_do_chattr $nick $hand $chan $who $flags m]} { return 0 }

		regsub -all -- "o" $flags "" flags

		regsub -all -- "l" $flags "" flags

		if {[lol_do_chattr $nick $hand $chan $who $flags o]} { return 0 }

      	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 16 ""]"

	}

	return 0

}



proc lol_do_chattr { nick hand chan who flags needflags } { 

	if { $chan == ""} {

		if {[matchattr $hand $needflags]} {

			set change [chattr $who $flags]

			if {$change != ""} {

	      	     	puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 77 "$who $change"]"

			} {

				puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 35 $who]"

			}

			return 1

		}

	} else { 

		if {[matchattr $hand $needflags $chan]} {

			set change [chattr $who -|$flags $chan]

			if {$change != ""} {

				set change [lindex [split $change "|"] 1]

                        puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 36 "$who $chan $change"]"

			} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 35 $who]"

			}

			return 1

		}

	}

	return 0

}



proc lol_pub_del { nick host hand chan arg command } {

	global lol

	set arg [charfilter $arg]

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] != 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]del$command <nick or hand>"

		return 0

	}

	set who [lindex $arg 0]

	lol_del $nick $host $hand $chan $who $command

}



proc lol_msg_del { nick host hand arg command } {

	set arg [charfilter $arg]

	set who [lindex $arg 1]

	set chan [lindex $arg 2]

	set usage "Synthaxe : del$command <password> <hand or nick> <chan>"

	if {$command != "user" && ![lol_msg_test $nick $hand $chan $arg "< 3" $usage "" ""]} { return 0 }

	set usage "Synthaxe : del$command <password> <hand or nick>"

	if {$command == "user" && ![lol_msg_test $nick $hand $chan $arg "< 2" $usage "" ""] } { return 0 }

	lol_del $nick $host $hand $chan $who $command

}



proc lol_del { nick host hand chan who command } {

	global botnick

	if {[onchan $who]} {

		set whohand [nick2hand $who]

	} {

		if {![validuser $who]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 12 $who]"

			return 0

		} {

			set whohand $who

		}

	}

	if {[strlwr $nick] == [strlwr $botnick]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 30 ""]"

		return 0

	}



	if {[getting-users]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 17 ""]"

		return 0

	}

	

	set param [lol_test_rights $command parameter]



	if {![matchattr $hand [lol_test_rights $command flag] $chan]} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 16 ""]"

		return 0

	}



	if {$command == "user" } {

		if {[matchattr $whohand n]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 89 ""]"

			return 0

		}

		deluser $whohand

		boot $whohand "[lang_text lol_lang_data [getlang ""] 90 ""]"

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 101 "$who ${command}list"]"

	      puthelp "NOTICE $who :[lang_text lol_lang_data [getlang ""] 102 "${command}list $nick"]"

		return 0

	}

	if {![matchattr $whohand -|+$param $chan]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 103 "$who $command $chan"]"

	} {

		chattr $whohand -|-$param $chan

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 104 "$who $chan ${command}list"]"

     	      puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $whohand] 105 "$chan ${command}list $nick"]"

	}

	return 0

}



proc lol_join {nick host hand chan pass } {

	global botnick lol

	if {[validchan $chan]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 58 $chan]"

		if {$pass != ""} {

			if {$lol(chankey)} {

				puthelp "NOTICE $nick :New pass set for $chan: $pass."

				channel set $chan need-key "chankey $chan $pass"

			} {

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 60 ""]"

			}

		}

		if {![onchan [strlwr $botnick] $chan]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 61 $chan]"

			putserv "JOIN $chan $pass"

		} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 59 $chan]"

		}

		return 0

	}

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 62 $chan]"

	channel add $chan

	channel set $chan chanmode $lol(chanmode)

	channel set $chan flood-chan $lol(chan_flood)

	channel set $chan flood-deop $lol(deop_flood)

	channel set $chan flood-kick $lol(kick_flood)

	channel set $chan flood-join $lol(join_flood)

	channel set $chan flood-ctcp $lol(ctcp_flood)

	foreach param $lol(chan_parameters) { channel set $chan $param }

	if {$pass != ""} {

		if {$lol(chankey)} {

			puthelp "NOTICE $nick :New pass set for $chan : $pass. "

			channel set $chan need-key "chankey $chan $pass"

		} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 60 ""]"

		}

	}

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 61 $chan]"

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 63 ""]"

	putserv "JOIN $chan $pass"

}



proc lol_msg_test { nick hand chan arg test usage flag testop } {

	global botnick

	if {![validuser $hand]} { return 0 }



	if {[expr [llength $arg] $test]} {

		puthelp "PRIVMSG $nick :$usage"

		return 0

	}

	if {![passwdok $hand [lindex $arg 0]]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 13 ""]"

		return 0

	}

	if {[passwdok $hand ""]} {

		puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 14 $botnick]"

		return 0

	}

	if { $chan != ""} {

		set chan [chanaddapt $chan]

		if {![validchan $chan]} { 

			puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 10 $chan]" 

			return 0

		}		

	}

	if {$testop != "" && ![botisop $chan]} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]"

		return 0

	}

	if { $flag != "" && ![matchattr $hand $flag|$flag $chan]} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 71 $chan]"

		return 0

	}

	return 1

}



proc lol_unban { nick hand chan mask byX } {

	global ChanAccess

	if {[isnumber $mask]} {

		set find 0

		foreach bans [banlist $chan] {

			incr find

			if {$find == $mask} { set mask [lindex $bans 0] ; break }

		}

		if {[isnumber $mask]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 46 $mask]"

			return 0

		} 

	} else {	

		if {[string first "!" $mask] == -1 && [string first "@" $mask] == -1} {

			if {[isnumber [string index $mask 0]]} { 

				set mask *!*@$mask 

			} else { 

				set mask $mask*!*@* 

			}

		}

		if {[string first "!" $mask] == -1} {set mask *!*$mask}

		if {[string first "@" $mask] == -1} {set mask $mask*@*}

	}

	if {[info exists ChanAccess($chan)] && $byX } {

		if {$ChanAccess($chan)} { 

			putserv "PRIVMSG X :unban $chan $mask" 

	      	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 47 "$mask $chan"]"

			return 0

		}

	}



	if {[isban $mask $chan]} { 

		if {![killchanban $chan $mask]} { killban $mask }

      	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 47 "$mask $chan"]"

		return 0

	} 

	if {[ischanban $mask $chan] && [botisop $chan]} {

		putserv "MODE $chan -b $mask"

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 47 "$mask $chan"]"

		return 0

	} 

	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 48 $chan]"

	return 0

}



proc lol_mass { chan cmd } {

	global botnick

	set liste ""

	foreach user [chanlist $chan] {

		if { $user != $botnick } {

			set whohand [nick2hand $user $chan]

			if { $cmd == "op" && ![isop $user $chan]} { 

				lappend liste $user

				if {[llength $liste] == 6} {

					putserv "MODE $chan +oooooo $liste"

					set liste ""

				} 

			}

			if { $cmd == "deop" && [isop $user $chan] && ![matchattr $whohand o|o $chan]} {

				lappend liste $user

				if {[llength $liste] == 6} {

					putserv "MODE $chan -oooooo $liste"

					set liste ""

				}

			}

			if { $cmd == "voice" && ![isvoice $user $chan]} { 

				lappend liste $user

				if {[llength $liste] == 6} {

					putserv "MODE $chan +vvvvvv $liste"

					set liste ""

				}

			}

			if { $cmd == "devoice" && [isvoice $user $chan] && ![matchattr $whohand v|v $chan]} {

				lappend liste $user

				if {[llength $liste] == 6} {

					putserv "MODE $chan -vvvvvv $liste"

					set liste ""

				}

			}

		}

	}

	if { $liste != ""} {

		if { $cmd == "op" } { putserv "MODE $chan +ooooo $liste" }

		if { $cmd == "deop" } { putserv "MODE $chan -ooooo $liste" }

		if { $cmd == "voice" } { putserv "MODE $chan +vvvvv $liste" }

		if { $cmd == "devoice" } { putserv "MODE $chan -vvvvv $liste" }

	}	

	return 0

}



proc lol_msg_bad { nick host hand arg command byX } {

	global botnick

	set arg [charfilter $arg]

	set who [lindex $arg 1]

	set chan [lindex $arg 2]

	if { $command == "ban" } { 		

		set usage "Synthaxe : $command <password> <nick|mask> <chan> \[time\] \[reason\]"

	} else {

		set usage "Synthaxe : $command <password> <nick|mask> <chan> \[reason\]"

	}

	if {![lol_msg_test $nick $hand $chan $arg "< 3" $usage ol testop]} { return 0 }

	set ti [lindex $arg 3]

	if {[isnumber $ti]} {

		set reason [lrange $arg 4 end]

	} {

		if { $command == "banperm" } { 

			set ti 0 

		} else {

			set ti ""

		}	

		set reason [lrange $arg 3 end]

	}

	lol_do_bad $nick $hand $chan $who $ti $reason $command $byX

}



proc lol_whoid { nick host hand whochan whoflags } {

	if {$whochan != "" && ![matchattr $hand o|o $whochan]} { 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 71 $whochan]"

		return 0 

	}	

	set identlist ""

	foreach user [userlist] {

		if {[getuser $user xtra auth] == 1} { 

			if {[matchattr $user $whoflags|$whoflags $whochan]} {

				lappend identlist $user

			}

		}

	}

	if {$whoflags == "" } { 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 31 [list [join $identlist ", "]]]"

	} { 

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 50 [list $whoflags $whochan [join $identlist ", "]]]"

	}

	return 0

}



proc lol_pub_bad { nick host hand chan arg command byX } {

	set arg [charfilter $arg]

	global lol botnick

	if {![botisop $chan]} { 

		puthelp "notice $nick :[lang_text lol_lang_data [getlang $hand] 106 $chan]" 

		return 0 

	}

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		if { $command == "ban" } { 		

			puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]$command <nick|mask> \[time\] \[reason\]"

		} else {

			puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]$command <nick|mask> \[reason\]"

		}

		return 0

	}

	set who [lindex $arg 0]

	set ti [lindex $arg 1]

	if {[isnumber $ti]} {

		set reason [lrange $arg 2 end]

	} {

		if { $command == "banperm" } { 

			set ti 0 

		} else {

			set ti ""

		}

		set reason [lrange $arg 1 end]

	}

	lol_do_bad $nick $hand $chan $who $ti $reason $command $byX

}



proc lol_do_bad { nick hand chan who time reason command byX } {

	global lol botnick ChanAccess

	if {[strlwr $who] == [strlwr $botnick]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 30 ""]"

		return 0

	}



	if {$reason == ""} { set reason "Pafffff !" }

	set KickList ""

	

	if {[onchan $who $chan]} {

		if {!$lol(bantype)} { 

			set ipmask [lindex [split [maskhost $who![getchanhost $who $chan]] "@"] 1]

			set usermask [lindex [split [getchanhost $who $chan] "@"] 0]		

			set banmask *!*$usermask@$ipmask

		} else { 

			set banmask [getchanhost $who $chan]

     	      	set banmask "*!*[string range $banmask [string first @ $banmask] e]" 

		}	

	} else {  		

		set banmask $who

		if {[string first "!" $banmask] == -1 && [string first "@" $banmask] == -1} {

			if {[isnumber [string index $banmask 0]]} { 

				set banmask *!*@$banmask

			} else {

				 set banmask $banmask*!*@* 

			}

		}

		if {[string first "!" $banmask] == -1} { set banmask *!*$banmask }

		if {[string first "@" $banmask] == -1} { set banmask $banmask*@* }

	}

	

  	foreach chanuser [chanlist $chan] {

      	if {[string match [strlwr $banmask] [strlwr "$chanuser![getchanhost $chanuser $chan]"]] && $chanuser != $botnick } { 

			if {[matchattr [nick2hand $chanuser $chan] $lol(protect_flags)|$lol(protect_flags) $chan]} {

		       	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 29 ""]"

				return 0	

			} 

		    	lappend KickList $chanuser

		}

      }

	

	putlog "[lang_text lol_lang_data [getlang $hand] 28 [list $nick [nick2hand $nick $chan] $command [join $KickList ","] $banmask $chan $reason]]"



	if {[info exists ChanAccess($chan)] && $byX } {

	 	if {$ChanAccess($chan)} { 

			if { $command == "ban" && ![ischanban $banmask $chan]} { 

				putserv "PRIVMSG X :ban $chan $banmask 1 75 $reason" 

			}

			if { $command == "kick" } {

				putserv "PRIVMSG X :kick $chan $reason" 

			}

		}

	}



	if { $command != "kick" && ![ischanban $banmask $chan]} { putserv "MODE $chan +b $banmask" }

	if { $KickList != "" } { putkick $chan [join $KickList ","] $reason }

	if { $command == "quick" } { utimer 7 "deban $chan $banmask" }

	if { $command != "ban" && $command != "banperm" } { return 0 }



	switch $time {

		"" {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 27 $banmask]"

		}

		0 {

			if {![ispermban $banmask $chan]} { 

				newchanban $chan $banmask $nick $reason $time

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 26 $banmask]"

			}

		}

		default {

			if {![isban $banmask $chan]} { 

				newchanban $chan $banmask $nick $reason $time

				puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 25 "$time $banmask"]"

			}

		}

	}

	return 0

}



proc deban {chan hostmask} {

	if {[botisop $chan]} {putserv "MODE $chan -b $hostmask" }

}



proc pub_lol_add { nick host hand chan arg command } {

	global lol

	set arg [charfilter $arg]

	if {![lol_check $nick $host $hand]} { return 0 }

	if {[llength $arg] < 1} {

		puthelp "NOTICE $nick :Synthaxe : [string trim $lol(cmdchar)]add$command <nick> \[hand\]"

		return 0

	}

	set who [lindex $arg 0]

	set alternate [lindex $arg 1]

	lol_add $nick $hand $chan $who $alternate $command

}



proc msg_lol_add { nick hand arg command } {

	set who [lindex $arg 1]

	set chan [strlwr [lindex $arg 2]]

	set alternate [lindex $arg 3]

	set usage "Synthaxe : add$command <password> <nick> <chan> \[hand\]"

	if {![lol_msg_test $nick $hand $chan $arg "< 3" $usage "" ""]} { return 0 }

	lol_add $nick $hand $chan $who $alternate $command

}



proc lol_add { nick hand chan who alternate cmd } {

	global botnick

	set hostmask "$who![getchanhost $who $chan]"

	set host [lindex [split [getchanhost $who $chan] "@"] 1]

	set param [lol_test_rights $cmd parameter]



	if {![matchattr $hand [lol_test_rights $cmd flag] $chan]} {

            puthelp "PRIVMSG $nick :[lang_text lol_lang_data [getlang $hand] 16 ""]"

		return 0

	}



	if {![onchan $who $chan]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 11 "$who $chan"]"

		return 0

	}



	if {[strlwr $who] == [strlwr $botnick]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 15 ""]"

		return 0

	}



	if {[getting-users]} {

            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 17 ""]"

		return 0

	}



	set whohand [nick2hand $who $chan]



	if {[validuser $whohand]} {

		if {$cmd == "user" || $cmd == "bot" } {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 18 "$who $whohand"]"

			return 0 

		}

		if {[matchattr $whohand -|+$param $chan]} {

            	puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 19 "$who $cmd $chan $whohand"]"

		} {

			chattr $whohand -|+$param $chan

	            puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 20 "$who $chan ${cmd}list $whohand"]"

      	      puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $whohand] 21 "$chan ${cmd}list $nick"]"

		}

		return 0 

	} 



	if {[string match "*.users.undernet.org" [strlwr $host]]} {

      	set whohost *!*@$host

      } else {

      	set whohost [maskhost $hostmask]

      }



	if {$alternate != ""} {

		if {[validuser $alternate]} {

			puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 23 $alternate] $usage"

			return 0

		}

		if { $cmd == "bot" } {

			addbot $alternate $host

			setuser $alternate hosts $hostmask

		} else {

			adduser $alternate $whohost

	            puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $alternate] 22 "$chan ${cmd}list $nick $alternate"]"

			puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $alternate] 14 $botnick]"

		}

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 24 "$alternate $whohost"]"

	      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 20 "$who $chan ${cmd}list $alternate"]"

		chattr $alternate +p|+$param $chan

		return 0

	}



	if {[validuser $who]} {

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 23 $who] $usage"

	} else {

		if { $cmd == "bot" } {

			addbot $who $host

			setuser $who hosts $hostmask

		} else {

			adduser $who $whohost

		      puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $who] 22 "$chan ${cmd}list $nick $who"]"

			puthelp "NOTICE $who :[lang_text lol_lang_data [getlang $who] 14 $botnick]"

		}

		puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 24 "$who $whohost"]"

	      puthelp "NOTICE $nick :[lang_text lol_lang_data [getlang $hand] 20 "$who $chan ${cmd}list $who"]"

		chattr $who +p|+$param $chan

	}

	return 0

}



### END OF SCRIPT



set nb_dir [file dirname [info script]]

set nb_setscript $nb_dir/alltools.tcl

if {![file exists $nb_setscript]} {

	putlog "*** LoL's TooLz requires now alltools.tcl. Please install it."

}



set nb_setscript $nb_dir/lang.tcl

if {![file exists $nb_setscript]} {

	putlog "*** LoL's TooLz requires now lang.tcl. Please install it."

}



putlog "$lol(version) by Thor, Copyright (C) 1998-2002 LL Productions. Date : 19-10-02"

putlog "Homepage : http://www.leonini.net/"

putlog "Supported languages : French, English, Russian, type \002/msg $botnick help\002 for help or .help lol"