########################################### # .masque ou .user@host bind dcc p ip dcc_masque bind dcc p dns dcc_masque bind dcc p masque dcc_masque bind dcc p user@host dcc_masque proc dcc_masque {hand idx arg} { global dernier_masque lastbind if {$arg == ""} { putdcc $idx "## Usage: .masque/.ip " return 0 } set canal [lindex [split [console $idx]] 0] if [onchan $arg $canal] { set host [getchanhost $arg $canal] if {([string tolower $lastbind] == "ip") | ([string tolower $lastbind] == "dns")} { set host [lindex [split $host @] 1] putdcc $idx "Le IP/Domaine de $arg (pour $host)" if [estunip:ok $host] { putbot Aide "dns $arg $host" } else { putbot Aide "ip $arg $host" } } else { set masque [trouver_masque $arg $canal] set adresse "$arg!$host" if {[lindex $dernier_masque 0] != $arg} { set dernier_masque "$arg $hand" putdcc $idx "Le masque de $arg est: $masque" putbot Aide "msg $canal L'adresse de $arg est $adresse, donc son masque d'adresse (user@host) est: $masque" return 1 } else { putdcc $idx "Ts ts ts, [lindex $dernier_masque 1] a été plus rapide que toi :-p" return 0 } } } else { putdcc $idx "$arg n'est pas sur #Aide ..." return 0 } } ########################################### #.+v .-v bind dcc p +v dcc_give_voice proc dcc_give_voice {handle idx args} { if [matchattr [nick2hand $args] b] { boot $handle "Ha comme ça on veut faire des expériences sur mon dos hein?" bootbot $handle return 0 } set arglst [lindex $args 0] if {$arglst == ""} { set arglst [hand2nick $handle] } set vnick [lindex $arglst 0] if {[llength $arglst] == 1} { set conchan [lindex [console $idx] 0] if {[onchan $vnick $conchan]} { if {[validuser [nick2hand $vnick $conchan]] && ![matchattr [nick2hand $vnick $conchan] V]} { if [matchattr [nick2hand $vnick $conchan] S] { putdcc $idx "$vnick a été suspendu. Il ne peut pas recevoir le +." return 0 } elseif [matchattr [nick2hand $vnick $conchan] d|d #aide] { putdcc $idx "$vnick porte une mention «à surveiller», il ne peut recevoir le +." return 0 } elseif [isvoice $vnick $conchan] { putdcc $idx "$vnick est déjà + sur le canal..." return 0 } else { putdcc $idx "J'ai donné le +v à $vnick" pushmode $conchan +v $vnick if {$vnick != [hand2nick $handle]} { putbot Aide "notice $vnick $handle ($vnick) t'a donné le4 + " } } } else { set lenick [hand2nick $handle $conchan] if ![isvoice $vnick $conchan] { putdcc $idx "J'ai donné le +v à3 $vnick. Il(elle) est maintenant '2Aidant(e) du jour'" putbot Aide "notice $vnick $handle ($lenick) t'a donné le4 + (Le statut d'3Aidant(e) du jour), si tu as des questions, poses-les lui! Si tu ne désires plus aider ou que tu te mets 'away' s.t.p. envoie un /msg AideBot -v Et merci de venir aider! (Si tu te demandes comment devenir membre officiel de #Aide, la réponse se trouve en http://aide.igt.net/aide/devenir.htm)" putbot Aide "msg $conchan À noter: $vnick vient d'être nommé 'Aidant(e) du jour' vous pouvez lui poser vos questions !" pushmode $conchan +v $vnick if [matchattr [nick2hand $vnick $conchan] V] { set oki 1 set baseplus "" foreach item [getuser [nick2hand $vnick $conchan] xtra PLUSV] { if {[getuser $handle xtra vrainick] == [lindex $item 0]} { set ajout [getuser $handle xtra vrainick] lappend ajout [expr [lindex $item 1] + 1] lappend baseplus $ajout set oki 0 } else { lappend baseplus $item } } if $oki { set ajout [getuser $handle xtra vrainick] lappend ajout 1 lappend baseplus $ajout } setuser [nick2hand $vnick $conchan] xtra PLUSV $baseplus } else { if [adduser $vnick [trouver_masque_net $vnick $conchan]] { chattr $vnick +V setuser [nick2hand $vnick $conchan] xtra PLUSV "\{[getuser $handle xtra vrainick] 1\}" setuser $vnick XTRA statsjoin 0 setuser $vnick XTRA statschon 0 setuser $vnick XTRA statspub 0 setuser $vnick XTRA statsoncanal 0 setuser $vnick XTRA statsplusoncanal 0 setuser $vnick XTRA statsonbot 0 } else { putdcc $idx "Oups! Je connais déjà quelqu'un qui a cet alias, mais il ne correspond pas au masque d'adresse que celui-ci a. Si ce n'est pas le même, suggèrez-lui de changer d'alias. Si c'est le même, contactez un admin pour qu'il ajoute ce masque ([trouver_masque_net $vnick $conchan]) d'adresse à son compte." return 0 } } } else { putdcc $idx "J'ai transféré la surveillance de3 $vnick à ton nom." putdccsi [hand2idx [lindex [getuser [nick2hand $vnick $conchan] xtra dernierplusv] 0]] "Je viens de transférer la surveillance de3 $vnick à $handle à sa demande." putbot Aide "notice $vnick $handle ($lenick) est maintenant ton contact si tu as des questions au sujet de ton rôle d'aidant du jour. Si tu ne désires plus aider ou que tu te mets 'away' s.t.p. envoie un /msg AideBot -v Et merci de venir aider! (Si tu te demandes comment devenir membre officiel de #Aide, la réponse se trouve en http://aide.igt.net/aide/devenir.htm)" putbot Aide "msg $conchan À noter: $vnick vient d'être nommé 'Aidant(e) du jour' vous pouvez lui poser vos questions !" } putdcc $idx "Vous avez la responsabilité de garder un oeil sur3 $vnick tant qu'il aura le4 + ou qu'il sera sur le canal, si vous quittez et qu'aucun autre membre ne peut/veut le prendre en charge (.+v), retirez-lui le +, s'il fait du bon boulot depuis 7 jours, proposez-le comme membre. \[.+prop [nick2hand $vnick #Aide]\]" setuser [nick2hand $vnick $conchan] xtra dernierplusv "[getuser $handle xtra vrainick] [unixtime]" } return 1 } else { putdcc $idx "Désolé, $vnick n'est pas sur $conchan ." putdcc $idx "Je n'ai pas pu lui donner le +v." } } else { set i 0 foreach channel {[channels]} { foreach argchan {[lrange $arglst 1 [llength $args]]} { if {[expr ![string compare [string tolower $argchan] [string tolower $channel]]]} { if {[onchan $vnick $channel]} { if [matchattr [nick2hand $vnick $conchan] S] { putdcc $idx "$vnick a été suspendu. Il ne peut pas recevoir le +." } elseif [matchattr [nick2hand $vnick $conchan] d|d #aide] { putdcc $idx "$vnick porte une mention «à surveiller», il ne peut recevoir le +." } else { pushmode $channel +v $vnick putdcc $idx "J'ai donné le +v à $vnick" } set i [expr $i + 1] } else { putdcc $idx "Désolé, $vnick n'est pas sur $conchan ." } } } } if {$i == 0} { putdcc $idx "Désolé, $vnick n'est pas sur le canal." putdcc $idx "Je n'ai pas pu lui donner le +v." } } } bind dcc p -v dcc_take_voice proc dcc_take_voice {handle idx args} { if [matchattr [nick2hand $args] b] { boot $handle "Ha comme ça on veut faire des expériences sur mon dos hein?" bootbot $handle return 0 } set arglst [lindex $args 0] if {$arglst == ""} { set arglst [hand2nick $handle] } set vnick [lindex $arglst 0] if {[llength $arglst] == 1} { set conchan [lindex [console $idx] 0] if {[isvoice $vnick $conchan]} { pushmode $conchan -v $vnick putdcc $idx "J'ai retiré le +v à $vnick" return 1 } else { putdcc $idx "Désolé, $vnick n'est pas +v sur $conchan ." putdcc $idx "Je n'ai pas pu lui retirer le +v." } } else { set i 0 foreach channel [channels] { foreach argchan [lrange $arglst 1 [llength $args]] { if {[expr ![string compare [string tolower $argchan] [string tolower $channel]]]} { if {[onchan $vnick $channel]} { if {![matchattr $handle A] & [matchattr [nick2hand $vnick] V] & [onchan [hand2nick [lindex [getuser $vnick xtra dernierplusv] 0] #Aide]] & ([hand2idx [lindex [getuser $vnick xtra dernierplusv] 0]] != -1)} { set msg " et je note [lindex [getuser $vnick xtra dernierplusv] 0] que tu as retiré le +v à $vnick ..." putdcc [hand2idx [lindex [getuser $vnick xtra dernierplusv] 0]] "Note: $handle ([getuser $handle xtra vrainick]) vient de retirer son +v à $vnick ..." } else { set msg "..." } pushmode $channel -v $vnick putdcc $idx "J'ai retiré le +v à $vnick $msg" set i [expr $i + 1] } else { putdcc $idx "Désolé, $vnick n'est pas sur $argchan" } } } } if {$i == 0} { putdcc $idx "Désolé, $vnick n'est pas sur le canal." putdcc $idx "Je n'ai pas pu lui retirer le +v." } } } #################################################### ### Spécialités et Langues bind dcc p recherche dcc_recherche proc dcc_recherche {hand idx arg} { set oki 0 if {$arg == "?"} { set liste "" foreach user [userlist ATGCOJMNPRH] { set lspec [getuser $user xtra specialites] if [string match *,* $lspec] { set llspec [split $lspec ,] } else { set llspec $lspec } foreach spec $llspec { regsub -all {,} $spec "" spec if ![string match *[string tolower $spec]* [string tolower $liste]] { append liste "$spec, " } } } putdcc $idx "Spécialités mentionnées par les membres: $liste etc." return 1 } elseif {$arg != ""} { set liste "Voici nos spécialistes \[ $arg \]: " set arg [string tolower $arg] foreach user [userlist ATGCOJMNPRH] { if [string match *$arg* [string tolower [getuser $user xtra specialites]]] { append liste "[getuser $user xtra vrainick], " set oki 1 } } if $oki { set liste "[string range $liste 0 [expr [string length $liste] - 3]]." } else { append liste "-aucun- (essayez autre chose)" } putdcc $idx $liste return 1 } else { putdcc $idx "# Syntaxe: .recherche " return 0 } } bind dcc p traduction dcc_traduction proc dcc_traduction {hand idx arg} { if {$arg == "?"} { set liste "" foreach user [userlist ATGCOJMNPRH] { foreach lang [getuser $user xtra langues] { if ![string match *$lang* $liste] { lappend liste $lang } } } putdcc $idx "Voici la liste des langues parlées ou écrites par les membres: $liste" return 1 } elseif {$arg != ""} { set oki 0 set liste "Voici les membres capables de traduire \[ $arg \]: " set arg [string tolower $arg] foreach user [userlist ATGCOJMNPRH] { if [string match *$arg* [string tolower [getuser $user xtra langues]]] { append liste "[getuser $user xtra vrainick], " set oki 1 } } if $oki { set liste "[string range $liste 0 [expr [string length $liste] - 3]]." } else { append liste "-aucun- («?» pour la liste)" } putdcc $idx $liste return 1 } else { putdcc $idx "# Syntaxe: .traduction " return 0 } } bind dcc p residence dcc_residence proc dcc_residence {hand idx arg} { if {$arg != ""} { set liste "" set listeinv "" set nbre 0 foreach user [userlist ATGCOJMPRH] { if {[string tolower [getuser $user xtra ville]] == [string tolower $arg]} { incr nbre if [string match *ville* [getuser $user xtra afficher]] { lappend liste [getuser $user xtra vrainick] } else { lappend listeinv [getuser $user xtra vrainick] } } } if !$nbre { set msg "Il n'y a aucun membre qui habite cette ville ..." } elseif ![llength $liste] { set msg "Aucun membre habitant cette ville n'a voulu afficher sa ville. ($nbre)" } else { set msg "Voici les membres qui habitent $arg ([llength $liste] visible(s) / $nbre au total): $liste" } if {([llength $listeinv] > 0) & [matchattr $hand A]} { append msg "14 ($listeinv)" } putdcc $idx $msg return 1 } else { set liste(villes) "" set ind "" foreach user [userlist ATGCOJMPRH] { set ville [getuser $user xtra ville] if {$ville != ""} { set ville "$ville ([string range [getuser $user xtra pays] 0 1])" if ![string match *$ville* $liste(villes)] { lappend liste(villes) "$ville" set liste($ville) 1 } else { incr liste($ville) } } else { lappend ind $user } } foreach ville $liste(villes) { lappend lv "{$ville} {$liste($ville)}" } set lv [classement $lv -] set liste(villes) "" foreach ville $lv { set tot [lindex $ville 1] if {$tot > 1} { append liste(villes) "$tot\x [lindex $ville 0], " } else { append liste(villes) "[lindex $ville 0], " } } putdcc $idx "Vous retrouverez des membres dans les villes suivantes: $liste(villes)\sans compter [llength $ind] indéterminés." if {([llength $ind] > 0) & [matchattr $hand A]} { putdcc $idx " 14 Indéterminés: $ind" } } return 1 } bind dcc p nationalite dcc_nationalite proc dcc_nationalite {hand idx arg} { if {$arg != ""} { set liste "" foreach user [userlist ATGCOJMNPRH] { if {[string tolower [getuser $user xtra pays]] == [string tolower $arg]} { lappend liste [getuser $user xtra vrainick] } } if [llength $liste] { putdcc $idx "Voici les membres habitant en(au(x)) $arg ([llength $liste]): $liste" } else { putdcc $idx "Il n'y a aucun membre qui habite en(au(x)) $arg ." } return 1 } else { set liste "" foreach user [userlist ATGCOJMNPRH] { set pays [getuser $user xtra pays] if ![string match *$pays* $liste] { append liste "$pays, " } } putdcc $idx "Vous retrouverez des membres dans les pays suivants: [string range $liste 0 [expr [string length $liste] - 3]]." } return 1 } ################################################## # Canal bind dcc - canal dcc_canal proc dcc_canal {hand idx arg} { set ops "" set membres "" set aja "" set membres_ina "" set ajc "" set asurv "" set usagers "" foreach user [chanlist #aide] { if {[nick2hand $user #Aide] == "*"} { lappend usagers $user } elseif [isop $user #Aide] { if [matchattr [nick2hand $user #Aide] b] { lappend ops "5$user 15(Bot)" } else { lappend ops "7$user15 ([dire_niveau [nick2hand $user #Aide]])" } } elseif [isvoice $user #Aide] { if [matchattr [nick2hand $user #Aide] V] { lappend aja "6+10$user15 ([dire_niveau [nick2hand $user #Aide]])" } else { lappend membres "6+2$user15 ([dire_niveau [nick2hand $user #Aide]])" } } else { if [matchattr [nick2hand $user #Aide] V] { lappend ajc "11$user15 (+v?)" } elseif [matchattr [nick2hand $user #Aide] S] { lappend membres_ina "8$user15 (Suspendu)" } elseif [matchattr [nick2hand $user #Aide] d|d #Aide] { lappend asurv "4$user15 (À surveiller!)" } else { lappend membres_ina "12$user15 ([dire_niveau [nick2hand $user #Aide]])" } } } putdcc $idx "+=== Usagers présents sur le canal #Aide =======================+" set ligne "| Ops / Bots:3 [llength $ops]" putdcc $idx "[ajouter_espaces $ligne 63] |" foreach unop $ops { set ligne "| $unop" set ligne [ajouter_espaces $ligne 63] putdcc $idx "$ligne |" } set ligne "| Membres actifs / Aidants du jour:3 [llength $membres] / [llength $aja]" putdcc $idx "[ajouter_espaces $ligne 63] |" foreach unmbr "$membres $aja" { set ligne "| $unmbr" set ligne [ajouter_espaces $ligne 63] putdcc $idx "$ligne |" } set ligne "| Membres inactifs / Aidants du jour connus:3 [llength $membres_ina] / [llength $ajc]" putdcc $idx "[ajouter_espaces $ligne 63] |" foreach unmbr $membres_ina { set ligne "| $unmbr" set ligne [ajouter_espaces $ligne 63] putdcc $idx "$ligne |" } foreach unmbr $ajc { set ligne "| $unmbr" set ligne [ajouter_espaces $ligne 62] putdcc $idx "$ligne |" } append usagers " $asurv" set ligne "| Usagers:3 [llength $usagers]" putdcc $idx "[ajouter_espaces $ligne 63] |" set i 0 set ligne "| " foreach usager $usagers { incr i if [expr $i % 5] { append ligne " $usager" } else { append ligne " $usager" set ligne [ajouter_espaces $ligne 63] putdcc $idx "$ligne |" set ligne "| " } } if [expr $i % 5] { set ligne [ajouter_espaces $ligne 63] putdcc $idx "$ligne |" } putdcc $idx "+===============================================================+" return 1 } ################################################# # .whom bind dcc p whom dcc_whom bind dcc p whoma dcc_whom proc dcc_whom {hand idx arg} { global canauxbarres lastbind set arg [lindex $arg 0] if {$arg != "*"} { if {$arg == ""} {set arg [getchan $idx]} if [estunnombre:ok $arg] { if {($arg < 0) | ($arg > 99999)} { putdcc $idx "Numéro de canal hors limites ..." return 0 } } elseif ![catch [assoc $arg]] { putdcc $idx "Nom de canal invalide ..." return 0 } if {$arg == 0} { set nbr 0 set autrenom "(Le partyline)" } elseif [estunnombre:ok $arg] { set nbr $arg set autrenom "([assoc $arg])" } else { set autrenom "($arg)" set nbr [assoc $arg] } if {$autrenom == "()"} { set autrenom " " } set liste "" foreach user [whom $nbr] { lappend liste "[lindex $user 0] [lindex $user 4]" lappend whoma(liste) [lindex $user 0] set whoma([lindex $user 0]) [lindex $user 4] } if {[string match "* $nbr *" " $canauxbarres "] & ([llength $liste] > 0)} { set barre "Barré! " } else { set barre "Ouvert!" } putdcc $idx "-------------------------------------------------" putdcc $idx " Canal interne $nbr $autrenom - \[[llength $liste]\] - $barre " putdcc $idx "-------------------------------------------------" set hehe "" if {$nbr == 1234} { lappend hehe " Diable D 6h 66m En attente d'une autre âme à déguster ..." lappend hehe " PtitDemon D 6h 66m Parti à la chasse aux mortels ... héhéhé" set bouarf 1 } elseif {$nbr == 9} { lappend hehe " Alocin Z 6A 1M Y'a toujours eu un peu de moi ici ;-p" set bouarf 1 } else { set bouarf 0 } if {($liste != "") | $bouarf} { putdcc $idx " Membre = # Idle Absent? ... " putdcc $idx "-------------------------------------------------" } foreach user $hehe { putdcc $idx $user } if {[string tolower $lastbind] == "whom"} { set liste [classement $liste -] } else { unset liste foreach user [userlist p] { if [string match "* $user *" " $whoma(liste) "] { lappend liste "$user $whoma($user)" } } } afficher_whom $idx $liste 1 if {($liste == "") & !$bouarf} { putdcc $idx " Ce canal est vide !" } } else { set liste "" foreach user [whom *] { lappend liste "[lindex $user 0] [lindex $user 4]" lappend whoma(liste) [lindex $user 0] set whoma([lindex $user 0]) [lindex $user 4] } putdcc $idx "-------------------------------------------------" putdcc $idx " Sur AideBot " putdcc $idx "-------------------------------------------------" putdcc $idx " En conversation: \[[llength $liste]\]" putdcc $idx "-------------------------------------------------" putdcc $idx " Membre = # Idle Absent? ... " putdcc $idx "-------------------------------------------------" if {[string tolower $lastbind] == "whom"} { set liste [classement $liste -] } else { unset liste foreach user [userlist p] { if [string match "* $user *" " $whoma(liste) "] { lappend liste "$user $whoma($user)" } } } afficher_whom $idx $liste 1 set liste "" foreach user [dcclist script] { lappend liste "[lindex $user 1] 0 {Dans un script.}" } foreach user [dcclist files] { lappend liste "[lindex $user 1] 0 {Sur le système de fichiers.}" } if [llength $liste] { putdcc $idx "-------------------------------------------------" putdcc $idx " Ailleurs sur le bot: \[[llength $liste]\]" putdcc $idx "-------------------------------------------------" putdcc $idx " Membre = # Où ça? ... " putdcc $idx "-------------------------------------------------" afficher_whom $idx $liste 0 } } putdcc $idx "-------------------------------------------------" return 1 } proc afficher_whom {idx liste ou} { foreach user $liste { set lui [lindex $user 0] if [matchattr $lui G] { set flag1 "G" } elseif [matchattr $lui C] { set flag1 "C" } elseif [matchattr $lui T] { set flag1 "T" } elseif [matchattr $lui O] { set flag1 "O" } elseif [matchattr $lui J] { set flag1 "J" } elseif [matchattr $lui H] { set flag1 "H" } elseif [matchattr $lui M] { set flag1 "M" } else { set flag1 " " } if {[matchattr $lui E] & ![matchattr $lui A]} { set flag2 "E" } elseif [matchattr $lui R] { set flag2 "R" } elseif [matchattr $lui P] { set flag2 "P" } else { set flag2 " " } if [isop [hand2nick $lui] #Aide] { set can "@" } elseif [isvoice [hand2nick $lui] #Aide] { set can "+" } elseif [onchan [hand2nick $lui] #Aide] { set can "." } else { set can " " } if $ou { set away [getdccaway [hand2idx $lui]] } else { set away [lindex $user 2] } if [string match *|* $away] { set away1 [string range [lindex [split $away |] 0] 0 59] set away2 [string range [lindex [split $away |] 1] 0 59] } else { set away1 [string range $away 0 59] set away2 [string range $away 60 119] } putdcc $idx " [ajouter_espaces "[ajouter_espaces $lui 9] $flag1$flag2 $can [dire_delai [expr 60 * [lindex $user 1]]]" 27] $away1" if {$away2 != ""} { putdcc $idx "[ajouter_espaces "" 27] $away2" } } } ############## ### quiest ### ############## bind dcc p quiest dcc_quiest proc dcc_quiest {hand idx args} { set nick [nick2hand [lindex $args 0] #Aide] set args [string tolower [lindex $args 0]] if {$args == ""} { putdcc $idx "## Usage: .quiest " return 0 } if {$nick == "*"} { putdcc $idx "Je ne connais pas cet usager." } elseif {$nick == ""} { putdcc $idx "[lindex $args 0] n'est pas sur #Aide" } else { if ![matchattr $nick d|d #aide] { if [matchattr $nick S] { putdcc $idx "$args est en réalité: $nick (Suspendu pour encore [getuser $nick xtra susp_reste] heures sur [getuser $nick xtra susp_duree].)" } elseif [matchattr $nick V] { putdcc $idx "\[ $args \] est aussi connu comme $nick et il a déjà reçu le +v au moins une fois." set temp "" foreach bidule [getuser $nick xtra plusv] { append temp "[lindex $bidule 0] (x[lindex $bidule 1]), " } putdcc $idx "Voici ceux qui le lui ont déjà donné: $temp" if [matchattr $hand A] { putdcc $idx "Et le(la) dernier(ère) à le lui avoir donné est [lindex [getuser $nick xtra dernierplusv] 0], il y a [dire_delai [expr [unixtime] - [lindex [getuser $nick xtra dernierplusv] 1]]]." } } else { putdcc $idx "$args est en réalité: [getuser $nick xtra vrainick] ([dire_niveau $nick])" } } else { putdcc $idx "$args est $nick -- À SURVEILLER -- [getuser $nick info]" } } return 1 } ############### ### quisont ### ############### bind dcc p quisont dcc_quisont proc dcc_quisont {hand idx argss} { set nick [nick2hand [lindex $argss 0] #Aide] set argss [lindex $argss 0] set args [string tolower $argss] if {([string index $args 0] == "+") & [matchattr $hand A]} { set args [lindex $argss 0] putdcc $idx "Ont le flag «$argss»: \[[llength [userlist $argss]]\] [userlist $argss]" } elseif {$args == "adm"} { putdcc $idx "Administrateurs: \[[llength [userlist +A]]\] [userlist +A]" } elseif {$args == "admg"} { putdcc $idx "Administrateurs généraux: \[[llength [userlist +G]]\] [userlist +G]" } elseif {$args == "admc"} { putdcc $idx "Administrateurs canal: \[[llength [userlist C-G]]\] [userlist C-G]" } elseif {$args == "admp"} { putdcc $idx "Administrateurs projets: \[[llength [userlist T-G]]\] [userlist T-G]" } elseif {$args == "op"} { set temp "" foreach user [userlist O] { if ![matchattr $user A] { append temp "$user " } } putdcc $idx "Opérateurs: \[[llength $temp]\] $temp" } elseif {$args == "opa"} { putdcc $idx "Opérateurs adjoints: \[[llength [userlist +J]]\] [userlist +J]" } elseif {$args == "hon"} { putdcc $idx "Membres honoraires: \[[llength [userlist +H]]\] [userlist +H]" } elseif {$args == "resp"} { putdcc $idx "Responsables de projet: \[[llength [userlist +R]]\] [userlist +R]" } elseif {$args == "proj"} { putdcc $idx "Participants de projet: \[[llength [userlist +P]]\] [userlist +P]" } elseif {$args == "mo"} { set temp "" foreach user [userlist M] { if ![matchattr $user RPE] { lappend temp $user } } putdcc $idx "Membres officiels: \[[llength $temp]\] $temp" } elseif {$args == "nouv"} { putdcc $idx "Nouveaux membres: \[[llength [userlist +N]]\] [userlist +N]" } elseif {$args == "ajc"} { putdcc $idx "Aidants du jour connus: \[[llength [userlist +V]]\] [userlist +V]" } elseif {$args == "anc"} { putdcc $idx "Anciens membres encore listés: \[[llength [userlist +XY]]\] [userlist +XY]" } elseif {$args == "puc"} { putdcc $idx "Personnel d'Undernet Connu: \[[llength [userlist +Z]]\] [userlist +Z]" } elseif {$args == "ma"} { putdcc $idx "Membres actifs (tous): \[[llength [userlist +MRPEHOJAGCT]]\] [userlist +MRPEHOJAGCT]" } else { putdcc $idx "## Usage: .quisont " putdcc $idx " Niveaux: Adm (Administrateur)" putdcc $idx " AdmG (Administrateur général)" putdcc $idx " AdmC (Administrateur canal)" putdcc $idx " AdmP (Administrateur projets)" putdcc $idx " Op (Opérateur)" putdcc $idx " Opa (Opérateur adjoint)" putdcc $idx " Resp (Responsable de projet)" putdcc $idx " Proj (Participant de projet)" putdcc $idx " MO (Membre officiel)" putdcc $idx " Nouv (Nouveau membre)" putdcc $idx " Hon (Membre honoraire)" putdcc $idx " Anc (Anciens membres encore listés)" putdcc $idx " AJC (Aidants du jour connus)" putdcc $idx " PUC (Personnel d'Undernet Connu)" putdcc $idx " MA (Membres actifs (tous))" return 0 } return 1 } ############### ### Quand ? ### ############### bind dcc - quand dcc_quand proc dcc_quand {hand idx args} { if {[lindex $args 0] != ""} { putdcc $idx [vu_quand [lindex [lindex $args 0] 0] 1] return 1 } else { putdcc $idx "## Syntaxe: .quand " return 0 } } ################## ### references ### ################## bind dcc - references dcc_references proc dcc_references {hand idx args} { set args [lindex $args 0] set msg "" if {[matchattr $hand A] & ([string length [lindex $args 0]] == 1)} { set refaire 0 set action [lindex $args 0] set objet [lindex $args 1] if {[string index $objet 0] == "#"} { set type "CANAL" } else { set type "URL" } set infos [lrange $args 2 end] if {$action == "*"} { exec mv references.txt references.tmp set fs [open "references.tmp" r] set fd [open "references.txt" w] set buf "" while {[gets $fs ligne] >= 0} { set evalsact [lindex $ligne 4] set evals "bla" foreach ev $evalsact { if {[expr [lindex $ev 1] + 2592000] > [unixtime]} { lappend evals $ev } } set evals [lrange $evals 1 end] set ligne [lrange $ligne 0 3] lappend ligne $evals puts $fd $ligne lappend buf $ligne } close $fs close $fd putdcc $idx "État de vérification des références actuelles" putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" putdcc $idx "Canal/URL Date D.Éval Nbre Cote" foreach ligne $buf { set type [lindex $ligne 0] set objet [lindex $ligne 1] set evals [lindex $ligne 4] set derniere [lindex [lindex $evals 0] 1] set couleur "3" set cote "-" if {[expr $derniere + 1987200] < [unixtime]} { set couleur "8" } set nbre [llength $evals] if $nbre { if {$type == "CANAL"} { set liste "" foreach ev $evals { foreach point [lrange $ev 2 4] { lappend liste $point } } set cote [string range [moyenne $liste] 0 2] if {$cote < 2.5} { set couleur "11" } elseif {$cote < 3} { set couleur "13" } } else { if [string match *mod* $evals] { set cote "mod" set couleur "7" } if {[lindex [lindex $evals 0] 2] == "off"} { set cote "off" set couleur "13" if {[lindex [lindex $evals 1] 2] == "off"} { set couleur "11" } } if {$cote == "-"} { set cote "on" } } } else { set couleur "4" } putdcc $idx "[ajouter_espaces "$couleur$objet" 39] \[[dire_date $derniere]\] $nbre $cote" } putdcc $idx "_____________________________________________" return 1 } elseif {($objet == "") | (($action != "+") & ($action != "-") & ($action != "="))} { putdcc $idx "## Syntaxe admin:" putdcc $idx " .ref Voir la liste complète des références." putdcc $idx " .ref Rechercher dans les descriptions." putdcc $idx " .ref + + Ajouter un canal dans cette catégorie." putdcc $idx " .ref + + Ajouter un URL dans cette catégorie." putdcc $idx " .ref - <#canal|URL|catégorie> (ATTENTION!) Pour retirer un canal, un URL ou une catégorie." putdcc $idx " .ref = <1-5> <1-5> <1-5> Évaluer le canal." putdcc $idx " a) Politesse/courtoisie/accueil." putdcc $idx " b) Ressources disponibles/Nombre d'aidants." putdcc $idx " c) Qualité de l'aide." putdcc $idx " .ref = Vérifier un URL." putdcc $idx " on = oki, tout est beau." putdcc $idx " mod = modification de statut importante, à reviser." putdcc $idx " off = Incapable d'aller sur le site." putdcc $idx " .ref * Obtenir liste de vérification." putdcc $idx " .ref ? Voir cette page d'aide" return 0 } elseif {$action == "+"} { set cat [lrange [lindex [split $infos +] 0] 0 end] set com [lrange [lindex [split $infos +] 1] 0 end] if {$cat == ""} { putdcc $idx "Hum, mauvaise formulation, utilise «.ref ?»" return 0 } set ligne "$type $objet" lappend ligne $cat lappend ligne $com if {$type == "CANAL"} { lappend ligne "{AideBot [unixtime] 5 5 5}" } else { lappend ligne "{AideBot [unixtime] on}" } exec echo $ligne >> references.txt lappend msg "La référence a été ajoutée ..." lappend msg "4Ajouter la nouvelle? --> .news add Bonjour! Une nouvelle référence $type est maintenant proposée par #Aide: $objet ($com) dans la catégorie $cat . Pour plus de détails, utilisez .ref !" set refaire 1 } elseif {$action == "-"} { if {[string length $objet] < 4} { putdcc $idx "Hum, cet item n'est pas assez détaillé..." return 0 } exec cp references.txt references.tmp exec grep -i -v $objet references.tmp > references.txt exec rm references.tmp lappend msg "La référence a été retirée (si elle existait) ..." set refaire 1 } elseif {$action == "="} { exec mv references.txt references.tmp set fs [open "references.tmp" r] set fd [open "references.txt" w] set touche 0 set msg "Référence non trouvée, désolé." while {[gets $fs ligne] >= 0} { if {[string tolower $objet] == [string tolower [lindex $ligne 1]]} { if {[lindex $ligne 0] == "CANAL"} { set oki 1 foreach nbre $infos { if {![estunnombre:ok $nbre] | ($nbre > 5) | ($nbre < 1)} { set oki 0 } } if {([llength $infos] != 3) | !$oki} { set msg "Hum, évaluation incorrecte. Vérifiez la syntaxe «.ref ?»" } else { set msg "Votre évaluation a été enregistrée." set touche 1 } } else { set infos [string tolower $infos] if {($infos != "mod") & ($infos != "on") & ($infos != "off")} { set msg "Hum, évaluation incorrecte. Vérifiez la syntaxe «.ref ?»" } else { set msg "Votre vérification a été enregistrée." set touche 1 } } set evals "{[getuser $hand xtra vrainick] [unixtime] $infos}" set evalsact [lindex $ligne 4] foreach ev $evalsact { if {([lindex $ev 0] != [getuser $hand xtra vrainick]) & ($infos != "on")} { lappend evals $ev } } set ligne [lrange $ligne 0 3] lappend ligne $evals } puts $fd $ligne } close $fs close $fd putdcc $idx $msg if $touche { return 1 } else { return 0 } } if $refaire { set fs [open "references.txt" r] set ref(cat) "" while {[gets $fs ligne] >= 0} { set type [lindex $ligne 0] set object [lindex $ligne 1] set cat [lindex $ligne 2] set com " ([lindex $ligne 3])" if {$com == " ()"} { set com "" } if {[lsearch $ref(cat) $cat] == "-1"} { lappend ref(cat) $cat } lappend ref($cat) "{$object$com} $type" } close $fs set fd [open "/aide/ftp/aide/references.txt" w] set fhtmlcan [open "/home/www/bot/ref-canaux.html" w] set fhtmlurl [open "/home/www/bot/ref-web.html" w] puts $fd "______________________________________________\r" puts $fd "Références officiellement supportées par #Aide:\r" puts $fd "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r" puts $fhtmlcan "Les canaux référés par #Aide

" puts $fhtmlurl "Les pages web et autres URLs référés par #Aide

" foreach cat $ref(cat) { puts $fd " -> $cat\r" set CANS "" set URLS "" foreach item $ref($cat) { if {[lindex $item 1] == "CANAL"} { lappend CANS [lindex $item 0] } else { lappend URLS [lindex $item 0] } } if [llength $URLS] { puts $fd " * Adresses web:\r" puts $fhtmlurl "
 " puts $fhtmlurl $cat puts $fhtmlurl "
 " set dern "" foreach item $URLS { puts $fd " ° $item\r" if {$dern != ""} { puts $fhtmlurl $dern } else { set dern "
" } puts $fhtmlurl " $item" } puts $fhtmlurl "

" } if [llength $CANS] { puts $fd " * Canaux:\r" puts $fhtmlcan "
 " puts $fhtmlcan $cat puts $fhtmlcan "
 " set dern "" foreach item $CANS { puts $fd " ° $item\r" if {$dern != ""} { puts $fhtmlcan $dern } else { set dern "
" } puts $fhtmlcan " $item" } puts $fhtmlcan "

" } } puts $fd "______________________________________________\r" puts $fhtmlcan "
" puts $fhtmlurl "
" close $fd close $fhtmlcan close $fhtmlurl } set args "" } if {$args == ""} { set rech 0 set ok 1 } else { set rech 1 set ok 0 putdcc $idx "__________________" putdcc $idx "Références liées à: « $args »" putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" } set fs [open "/aide/ftp/aide/references.txt" r] while {[gets $fs line] >= 0} { if $rech { if {[lindex $line 0] == "->"} { if !$ok { if [string match *[string tolower $args]* [string tolower $line]] { set ok 1 } } else { set ok 0 } } } if $ok { putdcc $idx $line } } close $fs if {$msg != ""} { foreach m $msg { putdcc $idx $m } } else { putdcc $idx "N'oubliez pas, les références sont aussi disponibles sous la forme de pages web:" putdcc $idx " Canaux: http://aide.igt.net/bot/ref-canaux.html" putdcc $idx " URLs: http://aide.igt.net/bot/ref-web.html" } return 1 } ##################################### ### Informations générales ( .? ) ### ##################################### bind dcc p i dcc_interrogation bind dcc p interrogation dcc_interrogation proc dcc_interrogation {hand idx arg} { set numeros [exec ls infos] lappend lignes "Voici la liste des fiches d'information disponibles ... ('.i #' pour lire)" set oki 0 foreach num $numeros { if {$num == $arg} {set oki 1} if !$oki { set f [open infos/$num r] gets $f line lappend lignes "$num : $line" close $f } } if $oki { unset lignes lappend lignes "*** INFO *** INFO *** INFO *** INFO *** INFO ***" set f [open infos/$arg r] while {[gets $f line] >= 0} { lappend lignes $line } close $f lappend lignes "*** INFO *** INFO *** INFO *** INFO *** INFO ***" } foreach ligne $lignes { putdcc $idx $ligne } return 1 } ####################### ### Système de mémo ### ####################### bind dcc p memo dcc_memo proc dcc_memo {hand idx args} { set args [lindex $args 0] if {$args == ""} { putdcc $idx "4MÉMO: [getuser $hand xtra memo]" return 1 } elseif {$args == "-"} { putdcc $idx "Mémo effacé." putdcc $idx "## Syntaxe: .memo \[-|texte\]" setuser $hand xtra memo return 1 } else { if {[lindex $args 0] == "+"} { set args "[getuser $hand xtra memo] $args" putdcc $idx "Ajouté au mémo." } else { putdcc $idx "Mémorisé." } putdcc $idx "## Syntaxe: .memo \[-|\[+\] texte\]" setuser $hand xtra memo $args putlog "#$hand# memo ..." return 0 } } #################################### ### Vocabulaire sur le Partyline ### #################################### # Lecture de la liste des gros mots if ![info exists grosmotsPL] { # Listes d'avertissements set vulgairesPL "" # Listes de mots set grosmotsPL "" set motsokPL "" set f [open "gros.mots.PL" r] while {[gets $f line] >= 0} { switch [string index $line 0] { + {lappend grosmotsPL [string trim $line +*?]} ~ {lappend motsokPL [string trim $line ~*?]} } } close $f } # Sauvegarde de la liste des gros mots proc sauve_gm_PL {} { global grosmotsPL motsokPL set f [open "gros.mots.PL" w] foreach w $grosmotsPL { puts $f "+[string trim $w *?]" } foreach w $motsokPL { puts $f "~[string trim $w *?]" } flush $f close $f } # Modifier la liste des gros mots bind dcc A +grosmotPL add_word_PL proc add_word_PL {hand idx word} { global grosmotsPL if {$word != ""} { set word [string trim [string tolower $word] *?] foreach w $word { if {[lsearch -exact $grosmotsPL $w] < 0} { lappend grosmotsPL $w putdcc $idx "Gros mot PL ajouté: $w" } } } sauve_gm_PL putdcc $idx "Gros mots PL: $grosmotsPL" return 1 } bind dcc A +motokPL add_ok_PL proc add_ok_PL {hand idx word} { global motsokPL if {$word != ""} { set word [string trim [string tolower $word] *?] foreach w $word { if {[lsearch -exact $motsokPL $w] < 0} { lappend motsokPL $w putdcc $idx "Mot ok PL ajouté: $w" } } } sauve_gm_PL putdcc $idx "Mots ok PL: $motsokPL" return 1 } bind dcc A -grosmotPL del_word_PL proc del_word_PL {hand idx word} { global grosmotsPL if {$word != ""} { set word [lindex $word 0] set delindex [lsearch -exact $grosmotsPL $word] if {$delindex == -1} { putdcc $idx "$word n'a pas été trouvé dans la liste" } else { putdcc $idx "Gros mot PL retiré: $word" set grosmotsPL [lreplace $grosmotsPL $delindex $delindex] } } sauve_gm_PL putdcc $idx "Gros mots PL: $grosmotsPL" return 1 } bind dcc A -motokPL del_ok_PL proc del_ok_PL {hand idx word} { global motsokPL if {$word != ""} { set word [lindex $word 0] set delindex [lsearch -exact $motsokPL $word] if {$delindex == -1} { putdcc $idx "$word n'a pas été trouvé dans la liste" } else { putdcc $idx "Mot ok PL retiré: $word" set motsokPL [lreplace $motsokPL $delindex $delindex] } } sauve_gm_PL putdcc $idx "Mots ok PL: $motsokPL" return 1 } # Routine des mots ok proc estmotokPL {text} { global motsokPL if {$motsokPL == {}} {return 0} foreach w $motsokPL { if [regexp -nocase $w $text] { return 1 } } return 0 } #Protection comme telle bind chat - * chat_grossier proc chat_grossier {hand chan text} { global grosmotsPL if {($chan == 0) & ![matchattr $hand n]} { regsub -all {\"|\}|\{|\]|\[|\\} $text "" text set text2 [minacc $text] foreach w $grosmotsPL { if [regexp -nocase $w $text2] { if ![estmotokPL $text2] { set spl [getuser $hand xtra sacresPL] if {$spl == ""} { set spl 0 } incr spl setuser $hand xtra sacresPL $spl if [string match *[string index $spl [expr [string length $spl] -1]]* "13579"] { putdcc [hand2idx $hand] "8,4Whooolà! Fais attention à ton vocabulaire stp!" putlog "$hand a été averti pour son vocabulaire sur le PL." } elseif [string match *[string index $spl [expr [string length $spl] -1]]* "2468"] { boot $hand "Grossier personnage!" putlog "$hand a été exclu du bot pour son vocabulaire ([expr $spl / 2])" incr spl } else { if {($spl == 10) | [matchattr $hand A]} { plus_suspend AideBot -1 "$hand 2 Vulgarités répétées sur le partyline. Suspension de premier niveau." dcc_public AideBot -1 "$hand 2 Vulgarités répétées sur le partyline. Suspension de premier niveau." putlog "$hand a été suspendu pour son vocabulaire ([expr $spl / 2])" } elseif {$spl == 20} { if ![matchattr $hand OJ] { plus_suspend AideBot -1 "$hand 12 Vulgarités répétées sur le partyline. Suspension de second niveau." } else { plus_suspend AideBot -1 "$hand 12 @ Vulgarités répétées sur le partyline. Suspension de second niveau." } dcc_public AideBot -1 "$hand 12 Vulgarités répétées sur le partyline. Suspension de second niveau." putlog "$hand a été suspendu pour son vocabulaire ([expr $spl / 2])" } else { if ![matchattr $hand OJ] { plus_suspend AideBot -1 "$hand 120 Vulgarités répétées sur le partyline. Suspension de troisième niveau." } else { plus_suspend AideBot -1 "$hand 120 @ Vulgarités répétées sur le partyline. Suspension de troisième niveau." } dcc_public AideBot -1 "$hand 120 Vulgarités répétées sur le partyline. Suspension de troisième niveau." putlog "$hand a été suspendu pour son vocabulaire ([expr $spl / 2])" foreach user [userlist A] { sendnote AideBot $user "VOCABULAIRE: J'ai appliqué une suspension de troisième niveau (120h) sur $hand à cause de son vocabulaire." } } } return 1 } } } } }