# newoptoolz (30/09/2002) # ################################################################################# # ___ ___ ___ ___ _____ # # / /\ / /\ / /\ / /\ / /::\ # # / /:/ / /::\ / /::\ / /::\ / /:/\:\ # # /__/::\ / /:/\:\ / /:/\:\ / /:/\:\ / /:/ \:\ # # \__\/\:\ / /:/~/::\ / /:/~/:/ / /:/ \:\ /__/:/ \__\:| # # \ \:\ /__/:/ /:/\:\ /__/:/ /:/___ /__/:/ \__\:\ \ \:\ / /:/ # # \__\:\ \ \:\/:/__\/ \ \:\/:::::/ \ \:\ / /:/ \ \:\ /:/ # # / /:/ \ \::/ \ \::/~~~~ \ \:\ /:/ \ \:\/:/ # # /__/:/ \ \:\ \ \:\ \ \:\/:/ \ \::/ # # \__\/ \ \:\ \ \:\ \ \::/ \__\/ # # \__\/ \__\/ \__\/ # # # # # # ___ # # ___ / /\ # # / /\ / /:/ # # / /:/ / /:/ ___ ___ # # / /:/ / /:/ ___ /__/\ / /\ # # / /::\ /__/:/ / /\ \ \:\ / /:/ # # /__/:/\:\ \ \:\ / /:/ \ \:\ /:/ # # \__\/ \:\ \ \:\ /:/ \ \:\/:/ # # \ \:\ \ \:\/:/ \ \::/ # # \__\/ \ \::/ \__\/ # # \__\/ # # # # # # web : http://tcl.lagon-bleu.org # # mail : jarod_angel@yahoo.fr # # IRC : Jarod_@IRCNet #buffy # # Asco@UNDERNet #tyranz # # # ################################################################################# # # # NEWOPTOOLZ.tcl est un script de commande sur channel. Le premier argument # # est le nick du bot ! # # ATTENTION ! Ce TCL requiert AUTH.TCL ! # # # Commandes : # botnick op [] : s'op ou op nick # botnick deop [] : se deop ou deop quelqu'un # botnick whois : donne l'handle et les flags de nick # botnick kick : kick le nick/mask specifie # botnick voice [] : se voice ou voice quelqu'un # botnick devoice [] : se devoice ou devoice quelqu'un # botnick add user : ajoute un user avec l'host donné # botnick add op [] : ajoute cet user en +fo pour le channel # botnick add owner [] : ajoute cet user en +fnmo pour le channel # botnick del user : efface cet user (faut etre +n global) # botnick topic : change le topic # botnick join [] : join le channel specifie # botnick remove [] : efface le channel de la memoire du bot # botnick mode : change le mode du channel # botnick deban : deban du bot pour le channel # botnick cycle : cycle du bot # botnick boum : desactive ces commandes pour l'user donne # botnick deboum : reactive les commandes # botnick chattr [] : modifie les flags de l'user # # # # J'ai ajoute aussi des commandes globales a tous les bots : # # !kick : kick le nick/mask specifie # # !unban : deban pour le channel dans ts les bots # # !join [] : join le channel specifie # # !remove [] : efface le channel de la memoire des bots # # !del user|host []: efface un user # # !chattr : modifie les flags d'un user # # !cycle : cycle des bots # # !boum : desactive ttes les commandes chan pour l'user # # !deboum : reactive les commandes # # !add user|op|owner|host [] : ajoute un user/op/owner sur un chan # # # ################################################################################# ##### CONFIGURATION ##### ### personnes qui possedent ce flag ne seront pas kickees (sauf si c un autre +n qui le demande) set no_flags_kick "nm" ### Ci dessous mettre entre guillemets le trigger ... par défaut c le nick du bot... ### Cepdt il faut savoir que parfois cela ne fonctionne pas et que l'on est obligé ### d'effectuer un .rehash dans le bot pour que le TCL soit pris en compte (idem si le bot ### venait à changer de nick) set botcmde "Purple_Haze" set botcmde $botnick ### Indiquer le nom et le repertoire de auth.tcl (par défaut le fichier "auth.tcl" est mis dans le repertoire "scripts") set loadauth "scripts/auth.tcl" ##### FIN DE LA CONFIGURATION ##### ##### DEBUT DU PROGRAMME ##### ### Verifie la presence de auth.tcl if {![file exists $loadauth]} { putlog "\002 \037/!\\ ATTENTION VOUS N'AVEZ PAS AUTH.TCL ! CE SCRIPT NE POURRA DONC PAS MARCHER CORRECTEMENT !! /!\\ \002" } bind pub o|o $botcmde pub_cmde bind pub o|o !kick pub_kick bind pub o|o !deban pub_deban bind pub o|o !unban pub_deban bind pub n|n !add pub_newadd bind pub n|n !del pub_newdel bind pub n|n !chattr pub_newchattr bind pub n !join pub_join bind pub n !remove pub_remove bind pub n|n !cycle pub_cycle bind pub n|n !boum pub_boum bind pub n|n !deboum pub_deboum ### $botnick op/deop/voice/devoice/topic/kick/unban/cycle/whois/join/remove/add/del/boum/deboum/mode [arguments] proc pub_cmde {nick host hand chan arg} { global botnick botcmde set arg [charfilter $arg] set cmd [lindex $arg 0] set listecmd { {op} {deop} {add} {del} {voice} {devoice} {chattr} {deban} {unban} {mode} {topic} {kick} {cycle} {whois} {join} {remove} {add} {del} {boum} {deboum} } if {[lsearch $listecmd "[lindex $cmd 0]"] == -1} { return 0 } if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botcmde auth \002" return 0 } switch -exact $cmd { "op" { set opnick [lrange $arg 1 3] if {[botisop $chan]} { if {$opnick == ""} { pushmode $chan +o $nick set opnick $nick } else { putserv "mode $chan +ooo $opnick" } } else { puthelp "NOTICE $nick :Desole, mais je ne suis pas op sur $chan !" } putlog "#NEWOPTOOLZ# ($hand) OP de '$opnick' sur $chan" return 0 } "deop" { set deopnick [lrange $arg 1 3] if {[botisop $chan]} { if {$deopnick == ""} { pushmode $chan -o $nick set deopnick $nick } else { putserv "mode $chan -ooo $deopnick" } } else { puthelp "NOTICE $nick :Desole, mais je ne suis pas op sur $chan !" } putlog "#NEWOPTOOLZ# ($hand) DEOP de '$deopnick' sur $chan" return 0 } "whois" { if {[llength $arg] != 2} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde whois " return 0 } set who [lindex $arg 1] set handle [nick2hand $who $chan] set host2 [getchanhost $who $chan] if {$handle == "*"} { puthelp "NOTICE $nick : $who n'est pas enregistre dans le bot !" return 0 } if {$handle != ""} { puthelp "NOTICE $nick : Le hand de \002$who\002 est \002$handle\002. " puthelp "NOTICE $nick : L'host actuel de \002$who\002 est \002$host2\002. " set globalflags [lindex [split [chattr $handle - ] |] 0] if {$globalflags == "-"} {set globalflags "no flags"} if {$chan != ""} { set chanflags [lindex [split [chattr $handle - $chan] |] 1] if {$chanflags == "-"} {set chanflags "no flags"} puthelp "NOTICE $nick :et ces global flags: \002$globalflags\002. " puthelp "NOTICE $nick :$who a ces flags sur $chan: \002$chanflags\002 " } else { puthelp "NOTICE $nick :Il a ces global flags: \002$globalflags\002 " } } else { puthelp "NOTICE $nick :Je ne vois pas $who." return 0 } putlog "#NEWOPTOOLZ# ($hand) WHOIS sur '$who' sur $chan" return 0 } "deban" { set host [lindex $arg 1] if {$host == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde deban " return 0 } if {[killchanban $chan $host]} { puthelp "NOTICE $nick : Le ban sur $host a ete supprime de ma memoire" putlog "#NEWOPTOOLZ# ($hand) DEBAN de '$host' sur $chan" save return 0 } puthelp "NOTICE $nick : $host n'est pas reconnu comme un ban channel valide !" return 0 } "unban" { set host [lindex $arg 1] if {$host == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde deban " return 0 } if {[killchanban $chan $host]} { puthelp "NOTICE $nick : Le ban sur $host a ete supprime de ma memoire" putlog "#NEWOPTOOLZ# ($hand) DEBAN de '$host' sur $chan" save return 0 } puthelp "NOTICE $nick : $host n'est pas reconnu comme un ban channel valide !" return 0 } "kick" { global no_flags_kick if {[lindex $arg 1] == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde kick \[reason\]" return 0 } set who [lindex $arg 1] set reason [lrange $arg 2 end] if {$reason == ""} {set reason "requested"} if {![botisop $chan]} { puthelp "NOTICE $nick :Desole, je ne suis pas operateur sur $chan." return 0 } if {[matchattr [nick2hand $who] m] && ![matchattr $hand m]} { puthelp "NOTICE $nick :Desole mais $who est mon maitre !" return 0 } if {[string first "*" $who] != -1 || [string first "?" $who] != -1} { if {$reason == "requested"} {set reason "MaskKick: $who"} if {![matchattr $hand o|o $chan]} { puthelp "NOTICE $nick :Tu as besoin d'être user-op pour utiliser le mask kick." return 0 } set who [strlwr $who] set kickcount 0 set flags "-$no_flags_kick&-$no_flags_kick" if {$no_flags_kick == ""} { set list [strlwr [chanlist $chan]] } { set list [strlwr [chanlist $chan $flags]] } foreach chanuser $list { if {[string match $who $chanuser] && $chanuser != [strlwr $botcmde] && $chanuser != [strlwr $nick] && ![isop $chanuser $chan] && ![isvoice $chanuser $chan]} { incr kickcount putserv "KICK $chan $chanuser :$nick: $reason" putlog "#NEWOPTOOLZ# ($hand) KICK de '$chanuser' sur $chan" } } if {!$kickcount} { puthelp "NOTICE $nick :Desole mais personne ne porte ce mask !" } } { if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botnick]} { puthelp "NOTICE $nick :Yeah right, like I'm going to let you kick ME!" return 0 } if {[nick2hand $who $chan] != "*"} { if {$hand != [nick2hand $who $chan]} { if {([matchattr [nick2hand $who $chan] o|o $chan] && ![matchattr $hand o|o $chan])} { puthelp "NOTICE $nick :Sorry, you must to be an operator to kick an operator." return 0 } if {(([matchattr [nick2hand $who $chan] m|m $chan] || [matchattr [nick2hand $who $chan] b]) && ![matchattr $hand m|m $chan])} { puthelp "NOTICE $nick :Sorry, you must to be a master to kick a master or a bot." return 0 } } } putserv "KICK $chan $who :$nick: $reason" return 0 } } "voice" { set vnick [lrange $arg 1 3] if {[botisop $chan]} { if {$vnick == ""} { pushmode $chan +v $nick set vnick $nick } else { putserv "mode $chan +vvv $vnick" } } else { puthelp "NOTICE $nick :Desole, mais je ne suis pas op sur $chan !" } putlog "#NEWOPTOOLZ# ($hand) VOICE de '$vnick' sur $chan" return 0 } "devoice" { set dvnick [lrange $arg 1 3] if {[botisop $chan]} { if {$dvnick == ""} { pushmode $chan -v $nick set dvnick $nick } else { putserv "mode $chan -vvv $dvnick" } } else { puthelp "NOTICE $nick :Desole, mais je ne suis pas op sur $chan !" } putlog "#NEWOPTOOLZ# ($hand) DEVOICE de '$dvnick' sur $chan" return 0 } "topic" { if {[lindex $arg 1] == ""} { puthelp "NOTICE $nick :\002Usage\002: $botcmde topic " return 0 } if {![botisop $chan]} { puthelp "NOTICE $nick :Desole, je ne suis pas operateur sur $chan." return 0 } set topic [lrange $arg 1 end] puthelp "TOPIC $chan :$topic" putlog "#NEWOPTOOLZ# ($hand) TOPIC '$topic' sur $chan" return 0 } "remove" { if {[matchattr $hand n]} { set ch [lindex $arg 1] if {$ch == ""} {set ch $chan} if {(![validchan $ch] && ![isdynamic $ch])} { puthelp "NOTICE $nick :Je ne suis pas sur $ch " } else { channel remove $ch puthelp "NOTICE $nick :$ch a ete supprime de ma memoire." putlog "#NEWOPTOOLZ# ($hand) REMOVE du channel '$ch' sur $chan" } } else { puthelp "NOTICE $nick :Desole, il faut être mon owner global pour pouvoir supprimer un channel !" } return 0 } "join" { if {[matchattr $hand n]} { set jchan [lindex $arg 1] set pass [lindex $arg 2] if {$jchan == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde join \[chan pass\]" return 0 } if {([validchan $jchan] || [isdynamic $jchan])} { if {![onchan $botnick $jchan]} { putserv "JOIN $jchan $pass" } else { puthelp "NOTICE $nick :Je suis deja sur $jchan." } } else { channel add $jchan putserv "JOIN $jchan $pass" puthelp "NOTICE $nick :Nouveau chan : $jchan." putlog "#NEWOPTOOLZ# ($hand) JOIN du channel '$jchan' sur $chan" } return 0 } puthelp "NOTICE $nick :Desole, il faut être mon owner global pour pouvoir me faire joindre un channel !" return 0 } "add" { switch -exact [lindex $arg 1] { "user" { if {[matchattr $hand n]} { set handuser [lindex $arg 2] set hostuser [lindex $arg 3] if {($handuser == "") || ($hostuser == "")} { puthelp "notice $nick :Commande : \002$botcmde add user \002" return 0 } if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" } else { puthelp "notice $nick :User \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \]" save putlog "#NEWOPTOOLZ# ($hand) ADD USER '$handuser ($hostuser)' sur $chan" } return 0 } puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." return 0 } "host" { if {([matchattr $hand |o $chan]) || ([matchattr $hand o])} { set handuser [lindex $arg 2] set hostuser [lindex $arg 3] if {$handuser == ""} { puthelp "notice $nick :Commande : \002$botcmde add host \002" return 0 } if {![validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 n'existe pas !" } else { setuser $handuser HOSTS $hostuser puthelp "notice $nick :HOST \002$hostuser\002 ajouté pour \002$handuser\002" save putlog "#NEWOPTOOLZ# ($hand) ADD HOST '$handuser ($hostuser)' sur $chan" } return 0 } puthelp "notice $nick :Désolé, il faut etre op de $chan pour utiliser cette commande." return 0 } "op" { if {([matchattr $hand |n $chan]) || ([matchattr $hand n])} { set handuser [lindex $arg 2] set hostuser [lindex $arg 3] if {$handuser == ""} { puthelp "notice $nick :Commande : \002$botcmde add op \[\]\002" return 0 } if {[validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 existe déjà, je lui met donc les flags +fo pour le channel $chan !" chattr $handuser +p|+fo $chan putlog "#NEWOPTOOLZ# ($hand) ADD OP '$handuser ($hostuser)' sur $chan" return 0 } if {$hostuser == ""} { set hostuser [getchanhost $handuser $chan] if {$hostuser == ""} { puthelp "notice $nick :Désolé je ne trouve pas $handuser sur $chan !" return 0 } set hostuser "$handuser!*$hostuser" } if {([string index $hostuser 0] == "*") && ([string index $hostuser 1] == "!")} { set hostuser "$handuser![string range $hostuser 2 end]" } set hostuser [maskhost $hostuser] if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" return 0 } puthelp "notice $nick :OP \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \] pour le channel $chan" chattr $handuser +p|+fo $chan putlog "#NEWOPTOOLZ# ($hand) ADD OP '$handuser ($hostuser)' sur $chan" save } else { puthelp "notice $nick :Désolé, il faut etre owner de $chan pour utiliser cette commande." } return 0 } "owner" { if {[matchattr $hand n]} { set handuser [lindex $arg 2] set hostuser [lindex $arg 3] if {$handuser == ""} { puthelp "notice $nick :Commande : \002$botcmde add owner \[\]\002" return 0 } if {[validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 existe déjà, je lui met donc les flags +mnof pour le channel $chan !" chattr $handuser +p|+fonm $chan putlog "#NEWOPTOOLZ# ($hand) ADD OWNER '$handuser ($hostuser)' sur $chan" return 0 } if {$hostuser == ""} { set hostuser [getchanhost $handuser $chan] if {$hostuser == ""} { puthelp "notice $nick :Désolé je ne trouve pas $handuser sur $chan !" return 0 } set hostuser "$handuser!*$hostuser" } if {([string index $hostuser 0] == "*") && ([string index $hostuser 1] == "!")} { set hostuser "$handuser![string range $hostuser 2 end]" } set hostuser [maskhost $hostuser] if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" return 0 } puthelp "notice $nick :OWNER \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \] pour le channel $chan" chattr $handuser +p|+fomn $chan putlog "#NEWOPTOOLZ# ($hand) ADD OWNER '$handuser ($hostuser)' sur $chan" save } else { puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." } return 0 } "default" { puthelp "notice $nick :Commande :\002$botcmde add user/owner/op/host \[\]" return 0 } } } "del" { switch -exact [lindex $arg 1] { "user" { if {[matchattr $hand n]} { set handuser [lindex $arg 2] if {$handuser == ""} { puthelp "notice $nick :Commande : \002$botcmde del user \002" return 0 } if {![deluser $handuser]} { puthelp "notice $nick :Impossible de supprimer \002$handuser\002 !" } else { puthelp "notice $nick :User \002$handuser\002 a été supprimé !" save putlog "#NEWOPTOOLZ# ($hand) DEL USER '$handuser' sur $chan" } } else { puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." } return 0 } "host" { if {([matchattr $hand |o $chan]) || ([matchattr $hand o])} { set handuser [lindex $arg 2] set hostuser [lindex $arg 3] if {$handuser == ""} { puthelp "notice $nick :Commande : \002$botcmde del host \002" return 0 } if {![validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 n'existe pas !" return 0 } if {[delhost $handuser $hostuser]} { puthelp "notice $nick :HOST \002$hostuser\002 effacé pour \002$handuser\002" putlog "#NEWOPTOOLZ# ($hand) DEL HOST '$handuser ($hostuser)' sur $chan" } else { puthelp "notice $nick :Cet host n'existe pas pour cet user !" } save } else { puthelp "notice $nick :Désolé, il faut etre op de $chan pour utiliser cette commande." } return 0 } } } "chattr" { if {[matchattr $hand n]} { set handuser [lindex $arg 1] set flag [lindex $arg 2] set chanflag [lindex $arg 3] if {($handuser == "") || ($flag == "")} { puthelp "notice $nick :Commande : \002$botcmde chattr \[\]\002" return 0 } if {[validuser $handuser]} { if {$chanflag != ""} { if {([validchan $chanflag] || [isdynamic $chanflag])} { chattr $handuser -|$flag $chanflag save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002 pour le channel \002$chanflag\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag $chan)' sur $chan" return 0 } puthelp "notice $nick :Désolé, mais $chanflag n'est pas un channel valide !" return 0 } chattr $handuser $flag save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag)' sur $chan" } else { puthelp "notice $nick :Désolé, je ne connais pas $handuser !" } return 0 } if {[matchattr $hand -|n $chan]} { set handuser [lindex $arg 1] set flag [lindex $arg 2] if {($handuser == "") || ($flag == "")} { puthelp "notice $nick :Commande : \002$botcmde chattr \002" return 0 } if {[validuser $handuser]} { for {set i 0} {$i < [string length $flag]} {incr i} { if {[string index $flag $i] == "n"} { puthelp "notice $nick :Désolé, mais tu ne peux pas mettre le flag \002+n\002 à quelqu'un d'autre !" return 0 } } chattr $handuser -|$flag $chan save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002 pour le channel \002$chan\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag $chan)' sur $chan" return 0 } puthelp "notice $nick :Désolé, je ne connais pas $handuser !" } else { puthelp "notice $nick :Désolé, tu n'as pas les flags suffisant pour utiliser cette commande !" } return 0 } "boum" { if {[matchattr $hand n]} { set who [lindex $arg 1] set whohand [nick2hand $who $chan] if {$who == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde boum " return 0 } if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botnick]} { puthelp "NOTICE $nick :I can't be disabled, my name is activator :)" return 0 } if {$whohand == "*"} { puthelp "NOTICE $nick :Je ne reconnais pas $who comme un user." return 0 } if {[getuser $whohand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :$who est deja desactive." return 0 } setuser $whohand xtra auth DEAD chattr $whohand -3 puthelp "NOTICE $nick :$who est maintenant desactive." putlog "#NEWOPTOOLZ# ($hand) BOUM '$whohand' sur $chan" } else { puthelp "NOTICE $nick :Desole, il faut être mon owner global pour utiliser cette commande !" } return 0 } "deboum" { if {[matchattr $hand n]} { set who [lindex $arg 1] if {$who == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde deboum " return 0 } set whohand [nick2hand $who $chan] if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botcmde]} { puthelp "NOTICE $nick :I don't need to be enabled, my name is activator :)" return 0 } if {$whohand == "*"} { puthelp "NOTICE $nick :Je ne reconnais pas $who comme un user." return 0 } if {[getuser $whohand xtra auth] != "DEAD"} { puthelp "NOTICE $nick :$who est deja active." return 0 } setuser $whohand xtra auth 0 puthelp "NOTICE $nick :$who est maintenant reactive." putlog "#NEWOPTOOLZ# ($hand) DEBOUM '$whohand' sur $chan" } else { puthelp "NOTICE $nick :Desole, il faut être mon owner global pour utiliser cette commande !" } return 0 } "mode" { set mode [lrange $arg 1 end] if {$mode == ""} { puthelp "NOTICE $nick :\002Usage:\002 $botcmde mode " } else if {![botisop $chan]} { puthelp "NOTICE $nick :Desole, je ne suis pas operateur sur $chan." return 0 } else { putserv "mode $chan $mode" } putlog "#NEWOPTOOLZ# ($hand) MODE '$mode' sur $chan" return 0 } "cycle" { if {[matchattr $hand n|n $chan]} { puthelp "NOTICE $nick :Cycle en cours pour $chan" puthelp "PART $chan" putlog "#NEWOPTOOLZ# ($hand) CYCLE sur $chan" } else { puthelp "NOTICE $nick :Desole, il faut être owner pour utiliser cette commande !" } return 0 } "default" { return 0 } return 0 } } ### !ADD user/op/owner/host [host] proc pub_newadd {nick host hand chan arg} { global botnick set listecmd { {op} {user} {host} {owner} } if {[lsearch $listecmd "[lindex $arg 0]"] == -1} { return 0 } if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } switch -exact [lindex $arg 0] { "user" { if {[matchattr $hand n]} { set handuser [lindex $arg 1] set hostuser [lindex $arg 2] if {($handuser == "") || ($hostuser == "")} { puthelp "notice $nick :Commande : \002!add user \002" return 0 } if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" } else { puthelp "notice $nick :User \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \]" save putlog "#NEWOPTOOLZ# ($hand) ADD USER '$handuser ($hostuser)' sur $chan" } return 0 } puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." return 0 } "host" { if {([matchattr $hand |o $chan]) || ([matchattr $hand o])} { set handuser [lindex $arg 1] set hostuser [lindex $arg 2] if {$handuser == ""} { puthelp "notice $nick :Commande : \002!add host \002" return 0 } if {![validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 n'existe pas !" } else { setuser $handuser HOSTS $hostuser puthelp "notice $nick :HOST \002$hostuser\002 ajouté pour \002$handuser\002" save putlog "#NEWOPTOOLZ# ($hand) ADD HOST '$handuser ($hostuser)' sur $chan" } return 0 } puthelp "notice $nick :Désolé, il faut etre op de $chan pour utiliser cette commande." return 0 } "op" { if {([matchattr $hand |n $chan]) || ([matchattr $hand n])} { set handuser [lindex $arg 1] set hostuser [lindex $arg 2] if {$handuser == ""} { puthelp "notice $nick :Commande : \002!add op \[\]\002" return 0 } if {[validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 existe déjà, je lui met donc les flags +fo pour le channel $chan !" chattr $handuser +p|+fo $chan putlog "#NEWOPTOOLZ# ($hand) ADD OP '$handuser ($hostuser)' sur $chan" return 0 } if {$hostuser == ""} { set hostuser [getchanhost $handuser $chan] if {$hostuser == ""} { puthelp "notice $nick :Désolé je ne trouve pas $handuser sur $chan !" return 0 } set hostuser "$handuser!*$hostuser" } if {([string index $hostuser 0] == "*") && ([string index $hostuser 1] == "!")} { set hostuser "$handuser![string range $hostuser 2 end]" } set hostuser [maskhost $hostuser] if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" return 0 } puthelp "notice $nick :OP \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \] pour le channel $chan" chattr $handuser +p|+fo $chan putlog "#NEWOPTOOLZ# ($hand) ADD OP '$handuser ($hostuser)' sur $chan" save } else { puthelp "notice $nick :Désolé, il faut etre owner de $chan pour utiliser cette commande." } return 0 } "owner" { if {[matchattr $hand n]} { set handuser [lindex $arg 1] set hostuser [lindex $arg 2] if {$handuser == ""} { puthelp "notice $nick :Commande : \002!add owner \[\]\002" return 0 } if {[validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 existe déjà, je lui met donc les flags +mnof pour le channel $chan !" chattr $handuser +p|+fonm $chan putlog "#NEWOPTOOLZ# ($hand) ADD OWNER '$handuser ($hostuser)' sur $chan" return 0 } if {$hostuser == ""} { set hostuser [getchanhost $handuser $chan] if {$hostuser == ""} { puthelp "notice $nick :Désolé je ne trouve pas $handuser sur $chan !" return 0 } set hostuser "$handuser!*$hostuser" } if {([string index $hostuser 0] == "*") && ([string index $hostuser 1] == "!")} { set hostuser "$handuser![string range $hostuser 2 end]" } set hostuser [maskhost $hostuser] if {![adduser $handuser $hostuser]} { puthelp "notice $nick :Impossible d'ajouter le user $handuser ($hostuser) !" return 0 } puthelp "notice $nick :OWNER \002$handuser\002 a été ajouté avec l'host \[ \002$hostuser\002 \] pour le channel $chan" chattr $handuser +p|+fomn $chan putlog "#NEWOPTOOLZ# ($hand) ADD OWNER '$handuser ($hostuser)' sur $chan" save } else { puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." } return 0 } "default" { puthelp "notice $nick :Commande :\002!add user|owner|op \[\]" return 0 } } } ### !DEL USER/HOST [] proc pub_newdel {nick host hand chan arg} { global botnick set listecmd { {user} {host} } if {[lsearch $listecmd "[lindex $arg 0]"] == -1} { return 0 } if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } switch -exact [lindex $arg 0] { "user" { if {[matchattr $hand n]} { set handuser [lindex $arg 1] if {$handuser == ""} { puthelp "notice $nick :Commande : \002!del user \002" return 0 } if {![deluser $handuser]} { puthelp "notice $nick :Impossible de supprimer \002$handuser\002 !" } else { puthelp "notice $nick :User \002$handuser\002 a été supprimé !" save putlog "#NEWOPTOOLZ# ($hand) DEL USER '$handuser' sur $chan" } } else { puthelp "notice $nick :Désolé, il faut etre owner global pour utiliser cette commande." } return 0 } "host" { if {([matchattr $hand |o $chan]) || ([matchattr $hand o])} { set handuser [lindex $arg 1] set hostuser [lindex $arg 2] if {$handuser == ""} { puthelp "notice $nick :Commande : \002!del host \002" return 0 } if {![validuser $handuser]} { puthelp "notice $nick :\002$handuser\002 n'existe pas !" return 0 } if {[delhost $handuser $hostuser]} { puthelp "notice $nick :HOST \002$hostuser\002 effacé pour \002$handuser\002" putlog "#NEWOPTOOLZ# ($hand) DEL HOST '$handuser ($hostuser)' sur $chan" } else { puthelp "notice $nick :Cet host n'existe pas pour cet user !" } save } else { puthelp "notice $nick :Désolé, il faut etre op de $chan pour utiliser cette commande." } return 0 } "default" { puthelp "notice $nick :Commande : \002!del user \002" return 0 } } } ### !CHATTR [] proc pub_newchattr {nick host hand chan arg} { global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } if {[lindex $arg 0] == ""} { puthelp "notice $nick :Commande :\002!chattr " return 0 } if {[matchattr $hand n]} { set handuser [lindex $arg 0] set flag [lindex $arg 1] set chanflag [lindex $arg 2] if {($handuser == "") || ($flag == "")} { puthelp "notice $nick :Commande : \002!chattr \[\]\002" return 0 } if {[validuser $handuser]} { if {$chanflag != ""} { if {([validchan $chanflag] || [isdynamic $chanflag])} { chattr $handuser -|$flag $chanflag save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002 pour le channel \002$chanflag\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag $chan)' sur $chan" return 0 } puthelp "notice $nick :Désolé, mais $chanflag n'est pas un channel valide !" return 0 } chattr $handuser $flag save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag)' sur $chan" return 0 } puthelp "notice $nick :Désolé, je ne connais pas $handuser !" return 0 } if {[matchattr $hand -|n $chan]} { set handuser [lindex $arg 0] set flag [lindex $arg 1] if {($handuser == "") || ($flag == "")} { puthelp "notice $nick :Commande : \002$botnick chattr \002" return 0 } if {[validuser $handuser]} { for {set i 0} {$i < [string length $flag]} {incr i} { if {[string index $flag $i] == "n"} { puthelp "notice $nick :Désolé, mais tu ne peux pas mettre le flag \002+n\002 à quelqu'un d'autre !" return 0 } } chattr $handuser -|$flag $chan save puthelp "notice $nick :Les flags \002$flag\002 ont été apporté à \002$handuser\002 pour le channel \002$chan\002" putlog "#NEWOPTOOLZ# ($hand) CHATTR '$handuser ($flag $chan)' sur $chan" return 0 } puthelp "notice $nick :Désolé, je ne connais pas $handuser !" return 0 } puthelp "notice $nick :Désolé, tu n'as pas les flags suffisant pour utiliser cette commande !" return 0 } ### !KICK [reason] proc pub_kick {nick host hand chan arg} { set arg [charfilter $arg] global botnick no_flags_kick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } if {$arg == ""} { puthelp "NOTICE $nick :\002Usage:\002 !kick \[reason\]" return 0 } set who [lindex $arg 0] set reason [lrange $arg 1 end] if {$reason == ""} {set reason "requested"} if {![botisop $chan]} { puthelp "NOTICE $nick :Desole, je ne suis pas operateur sur $chan." return 0 } if {[matchattr [nick2hand $who] m] && ![matchattr $hand m]} { puthelp "NOTICE $nick :Desole mais $who est mon maitre !" return 0 } if {[string first "*" $who] != -1 || [string first "?" $who] != -1} { if {$reason == "requested"} {set reason "MaskKick: $who"} if {![matchattr $hand o|o $chan]} { puthelp "NOTICE $nick :Tu as besoin d'être op pour utiliser le mask kick." return 0 } set who [strlwr $who] set kickcount 0 set flags "-$no_flags_kick&-$no_flags_kick" if {$no_flags_kick == ""} { set list [strlwr [chanlist $chan]] } { set list [strlwr [chanlist $chan $flags]] } foreach chanuser $list { if {[string match $who $chanuser] && $chanuser != [strlwr $botnick] && $chanuser != [strlwr $nick] && ![isop $chanuser $chan] && ![isvoice $chanuser $chan]} { incr kickcount putserv "KICK $chan $chanuser :$nick: $reason" putlog "#NEWOPTOOLZ# ($hand) KICK '$chanuser ($reason)' sur $chan" } } if {!$kickcount} { puthelp "NOTICE $nick :Desole mais personne ne porte ce mask !" } } { if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botnick]} { puthelp "NOTICE $nick :Yeah right, like I'm going to let you kick ME!" return 0 } if {[nick2hand $who $chan] != "*"} { if {$hand != [nick2hand $who $chan]} { if {([matchattr [nick2hand $who $chan] o|o $chan] && ![matchattr $hand o|o $chan])} { puthelp "NOTICE $nick :Sorry, you must to be an operator to kick an operator." return 0 } if {(([matchattr [nick2hand $who $chan] m|m $chan] || [matchattr [nick2hand $who $chan] b]) && ![matchattr $hand m|m $chan])} { puthelp "NOTICE $nick :Sorry, you must to be a master to kick a master or a bot." return 0 } } } putserv "KICK $chan $who :$nick: $reason" putlog "#NEWOPTOOLZ# ($hand) KICK '$who ($reason)' sur $chan" return 0 } } ### !JOIN [chan pass] proc pub_join {nick host hand chan arg} { set arg [charfilter $arg] global botnick set chan2 $chan set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set botnick2 [strlwr $botnick] set chan [lindex $arg 0] set pass [lindex $arg 1] if {$chan == ""} { puthelp "NOTICE $nick :\002Usage:\002 !join \[chan pass\]" return 0 } if {([validchan $chan] || [isdynamic $chan])} { if {![onchan $botnick2 $chan]} { putserv "JOIN $chan $pass" return 0 } puthelp "NOTICE $nick :Je suis deja sur $chan." return 0 } puthelp "NOTICE $nick :Nouveau chan : $chan." channel add $chan putserv "JOIN $chan $pass" putlog "#NEWOPTOOLZ# ($hand) JOIN '$chan' sur $chan2" return 0 } ### !cycle proc pub_cycle {nick host hand chan arg} { set arg [charfilter $arg] global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set botnick2 [strlwr $botnick] puthelp "NOTICE $nick :Cycle en cours pour $chan" puthelp "PART $chan" putlog "#NEWOPTOOLZ# ($hand) CYCLE sur $chan" } ### !deban proc pub_deban {nick hoster hand chan arg} { global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $hoster]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set host [lindex $arg 0] if {$host == ""} { puthelp "NOTICE $nick :\002Usage:\002 !deban " return 0 } if {[killchanban $chan $host]} { puthelp "NOTICE $nick : Le ban sur $host a ete supprime de ma memoire" putlog "#NEWOPTOOLZ# ($hand) DEBAN '$host' sur $chan" save return 0 } puthelp "NOTICE $nick : $host n'est pas reconnu comme un ban channel valide !" return 0 } ### !boum proc pub_boum {nick host hand chan arg} { set arg [charfilter $arg] global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set who [lindex $arg 0] set whohand [nick2hand $who $chan] if {$who == ""} { puthelp "NOTICE $nick :\002Usage:\002 !boum " return 0 } if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botnick]} { puthelp "NOTICE $nick :I can't be disabled, my name is activator :)" return 0 } if {$whohand == "*"} { puthelp "NOTICE $nick :Je ne reconnais pas $who comme un user." return 0 } if {[getuser $whohand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :$who est deja desactive." return 0 } setuser $whohand xtra auth DEAD chattr $whohand -3 puthelp "NOTICE $nick :$who est maintenant desactive." putlog "#NEWOPTOOLZ# ($hand) BOUM sur '$whohand' sur $chan" return 0 } ### !deboum proc pub_deboum {nick host hand chan arg} { set arg [charfilter $arg] global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set who [lindex $arg 0] if {$who == ""} { puthelp "NOTICE $nick :\002Usage:\002 !deboum " return 0 } set whohand [nick2hand $who $chan] if {![onchan $who $chan]} { puthelp "NOTICE $nick :Desole, mais je ne trouve pas $who sur $chan." return 0 } if {[strlwr $who] == [strlwr $botnick]} { puthelp "NOTICE $nick :I don't need to be enabled, my name is activator :)" return 0 } if {$whohand == "*"} { puthelp "NOTICE $nick :Je ne reconnais pas $who comme un user." return 0 } if {[getuser $whohand xtra auth] != "DEAD"} { puthelp "NOTICE $nick :$who est deja active." return 0 } setuser $whohand xtra auth 0 puthelp "NOTICE $nick :$who est maintenant reactive." putlog "#NEWOPTOOLZ# ($hand) DEBOUM sur '$whohand' sur $chan" return 0 } ### !REMOVE [chan] proc pub_remove {nick host hand chan arg} { set arg [charfilter $arg] global botnick set hand [nick2hand $nick $chan] if {[getuser $hand xtra auth] == "DEAD"} { puthelp "NOTICE $nick :Desole tu ne peux pas utiliser les commandes channel." return 0 } if {![check $hand $nick $host]} { puthelp "NOTICE $nick :Tu as besoin d'être identifie pour utiliser cette fonction. \002/msg $botnick auth \002" return 0 } set ch [lindex $arg 0] if {$ch == ""} {set ch $chan} if {(![validchan $ch] && ![isdynamic $ch])} { puthelp "NOTICE $nick :Je ne suis pas sur $ch " return 0 } channel remove $ch puthelp "NOTICE $nick :$ch a ete enleve." putlog "#NEWOPTOOLZ# ($hand) REMOVE de '$ch' sur $chan" } ################# ##### OUTILS proc check {hand nick host} { if {[getuser $hand xtra auth] != "DEAD"} { set perm_host [getuser $hand xtra permident] if {[string match [strlwr $perm_host] [strlwr $nick!$host]]} { return 1 } } set host [lindex [split $host "@"] 1] if {[getuser $hand xtra auth] == 1} { if {[getuser $hand xtra authnick] == $nick} { return 1 } } return 0 } 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 } putlog "\0032NEWOPTOOLZ.TCL\003 (\0031330/09/2002\003) par Jarod_"