############################ ## Outils d'admins... # Fichier où sont enregistrés les retraits d'accès automatiques: set fichierretraitsautomatiques "/aide/www/admins/retraits-auto.txt" # .bug bind dcc p bug dcc_bug proc dcc_bug {hand idx text} { if {$text == ""} { putdcc $idx "Comment ça un bug? M'a t'en faire moi un bug! Si tu me reparles encore de bug sans rien dire je te met mon boot au c..!!! (## Syntaxe: .bug )" return 0 } exec echo "\[[date] [time]\] <[getuser $hand xtra vrainick]> $text \r" >> /aide/aidebot/bugs.txt putdcc $idx "Oki, l'erreur a été notée." setuser Aidebot xtra bugs "Dernier événement: BUG par [getuser $hand xtra vrainick] à [time] le [date]" putlog "$hand a noté une erreur." return 0 } # Rapport d'événement (log) set lineinp2 "" set logactif 0 bind dcc AE log dcc_log proc dcc_log {hand idx arg} { global lineinp2 logactif if $logactif { putdcc $idx "## Hum, attends ton tour stp !" return 0 } set lineinp2 "" set logactif 1 putdcc $idx "Veuillez entrer votre rapport d'événement (log) maintenant." putdcc $idx "Pour terminer: +" putdcc $idx "Pour annuler: -" control $idx control_log return 1 } proc control_log {idx arg} { global lineinp2 logactif if {$arg == "+"} { release_log $idx set logactif 0 return 1 } elseif {$arg == "-"} { putdcc $idx "Ok, le rapport d'événement été annulé: retour au party line !" set logactif 0 return 1 } else { lappend lineinp2 $arg return 0 } } proc release_log {idx} { global lineinp2 set lenomfichier "[getuser [idx2hand $idx] xtra vrainick][unixtime]" if [matchattr [idx2hand $idx] A] { putdcc $idx "Ok, j'inscrit le rapport d'événement dans http://www.aide.igt.net/admins/logs/$lenomfichier\.log.txt" } else { putdcc $idx "Ok, j'inscrit le rapport d'événement, utilise le nom de référence « $lenomfichier » stp." } set nday [string range [ctime [unixtime] ] 0 2] if {$nday == "Mon"} { set jour "lundi" } elseif {$nday == "Tue"} { set jour "mardi" } elseif {$nday == "Wed"} { set jour "mercredi" } elseif {$nday == "Thu"} { set jour "jeudi" } elseif {$nday == "Fri"} { set jour "vendredi" } elseif {$nday == "Sat"} { set jour "samedi" } else { set jour "dimanche" } set fichiertemp [open "/aide/www/admins/logs/$lenomfichier\.log.txt" w] puts $fichiertemp "Rapport d'événement noté par [getuser [idx2hand $idx] xtra vrainick], à [time] le $jour [date]." puts $fichiertemp "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" for {set j 0} {[lindex $lineinp2 $j] != ""} {incr j} { puts $fichiertemp [lindex $lineinp2 $j] } puts $fichiertemp "=======================================================================" puts $fichiertemp $lenomfichier close $fichiertemp putdcc $idx "Rapport d'événement enregistré. Numéro d'identification: $lenomfichier" } ### ### Difficulté à devenir membre ! set diffmembre 5 ############################### ## Outils d'évaluation des membres... (.prop .eval) bind dcc p +prop dcc_pprop proc dcc_pprop {hand idx arg} { global diffmembre if {$arg == ""} { putdcc $idx "# Syntaxe: .+prop " return 0 } if [matchattr $arg V] { set base [getuser $arg xtra PROPS] if {$base == ""} { if {[expr [unixtime] - [getuser $arg xtra created]] < [expr 86400 * $diffmembre]} { putdcc $idx "Vous devez attendre que cet usager aide depuis au moins $diffmembre jours pour pouvoir le proposer." return 0 } setuser $arg xtra PremierePROP [unixtime] } set oki 1 foreach item $base { if {[getuser $hand xtra vrainick] == $item} { set oki 0 } } if $oki { append base " [getuser $hand xtra vrainick]" } setuser $arg xtra PROPS $base putdcc $idx "Votre proposition pour $arg a été enregistrée." } else { putdcc $idx "Cet alias ne fait pas partie de la liste des gens que vous pouvez proposer." putdcc $idx "Peut-être que je connais cette personne sous un autre nom... Utilise .quisont" return 0 } return 1 } bind dcc p -prop dcc_mprop proc dcc_mprop {hand idx arg} { if {$arg == ""} { putdcc $idx "# Syntaxe: .-prop " return 0 } if [matchattr $arg V] { set base [getuser $arg xtra PROPS] set oki 0 set nouvbase "" foreach item $base { if {[getuser $hand xtra vrainick] == $item} { set oki 1 } else { append nouvbase " $item" } } if $oki { putdcc $idx "Votre proposition pour $arg a été retirée." setuser $arg xtra PROPS $nouvbase } else { putdcc $idx "Vous n'aviez pas entré de proposition pour $arg." } } else { putdcc $idx "Cet alias ne fait pas partie de la liste des gens que vous pouvez proposer." putdcc $idx "Peut-être que je connais cette personne sous un autre nom... Utilise .quisont AJC" return 0 } return 1 } bind dcc p eval dcc_eval proc dcc_eval {hand idx arg} { global diffmembre if {$arg == ""} { putdcc $idx "# Syntaxe: .eval <0-5>" putdcc $idx " 0: Dangereux, ne devrait jamais devenir membre." putdcc $idx " 1: Mauvais aidant, nuisible, manque de respect, etc. a besoin de beaucoup de pratique avant de penser devenir membre." putdcc $idx " 2: Faible candidat selon ce que j'ai vu, mais peut-être que d'autres ont vu mieux." putdcc $idx " 3: Ni bon ni mauvais, je n'ai pas vraiment d'opinion sur lui, il est moyen." putdcc $idx " 4: Un bon aidant, je voudrais vraiment qu'il devienne membre. Ce serait un atout pour le canal." putdcc $idx " 5: Un des meilleurs aidant que j'ai vu à date, un cas particulier qu'il est indispensable que l'on admette comme membre." return 0 } set qui [lindex $arg 0] set score [lindex $arg 1] if {![estunnombre:ok $score] || ($score == "")} { putdcc $idx "Mauvaise syntaxe, vous devez entrer un alias, puis un chiffre de 0 à 5." return 0 } elseif {$score > 5} { putdcc $idx "Mauvaise syntaxe, vous devez entrer un alias, puis un chiffre de 0 à 5." return 0 } if [matchattr $qui N] { set base [getuser $qui xtra EVAL] if {$base == ""} { if {[expr [unixtime] - [getuser $qui xtra prom]] < [expr 86400 * $diffmembre * 1.5]} { putdcc $idx "Vous devez attendre que ce membre ait été nommé depuis au moins [expr $diffmembre * 1.5] jours pour pouvoir l'évaluer." return 0 } elseif {[expr [unixtime] - [getuser $qui xtra prom]] > [expr 86400 * $diffmembre * 4.25]} { putdcc $idx "Ha? Hé non, c'est trop tard: Son évaluation est terminée, un admin règlera le dossier sous peu." return 0 } else { } } set nouvbase "" set oki 1 foreach item $base { if {[getuser $hand xtra vrainick] == [lindex $item 0]} { set ajout [getuser $hand xtra vrainick] lappend ajout $score lappend nouvbase $ajout set oki 0 } else { lappend nouvbase $item } } if $oki { set ajout [getuser $hand xtra vrainick] lappend ajout $score lappend nouvbase $ajout } setuser $qui xtra EVAL $nouvbase putdcc $idx "Votre évaluation ($score) pour $qui a été enregistrée." } else { putdcc $idx "Cet alias ne fait pas partie de la liste des gens que vous pouvez évaluer." putdcc $idx "Peut-être que je connais cette personne sous un autre nom... Utilise .quisont Nouv" return 0 } return 1 } ################################################# ## Pour savoir qui peut être évalué ou proposé... bind dcc - quieval? dcc_quieval proc dcc_quieval {hand idx arg} { global diffmembre set liste "" foreach user [userlist N] { if {[expr [unixtime] - [getuser $user xtra prom]] > [expr 86400 * $diffmembre * 1.5]} { set temps [expr [getuser $user xtra statsplusoncanal] / 60] set tmp "" if [string match *[getuser $hand xtra vrainick]* [getuser $user xtra eval]] { lappend tmp " $user ($temps\h) \[x\] " } else { lappend tmp " $user ($temps\h) \[ \] " } lappend tmp [expr [getuser $user xtra prom] + [expr 86400 * $diffmembre * 4.25]] lappend liste $tmp } } putdcc $idx "*** Nouveaux membres prêts à être évalués: (Heures passées +v) ***" foreach user [classement $liste "+"] { putdcc $idx "[ajouter_espaces " -> [lindex $user 0]" 27] - (jusqu'au [dire_date [lindex $user 1]])" } return 1 } bind dcc - quiprop? dcc_quiprop proc dcc_quiprop {hand idx arg} { global diffmembre set liste "" foreach user [userlist V] { if {[expr [unixtime] - [getuser $user xtra created]] > $diffmembre} { set plusv 0 set pers 0 foreach item [getuser $user xtra plusv] { set plusv [expr $plusv + [lindex $item 1]] incr pers } set temps [expr [getuser $user xtra statsplusoncanal] / 60] if {($plusv > 1) && ($temps > 1)} { if ![string match *[getuser $hand xtra vrainick]* [getuser $user xtra props]] { append liste " $user ($plusv\+/$pers\!/$temps\h) \[ \] " } else { append liste " $user ($plusv\+/$pers\!/$temps\h) \[x\] " } } } } putdcc $idx "*** Gens prêts à être proposés: (Nombre de +v / Nombre de personne ayant donné le +v / Heures passées +v) ***" putdcc $idx "-> $liste" return 1 } ################################################# ## Outils de test de promotion # .nouv? # .mo? set minimumdeproppourcent $diffmembre set joursdepuispremiereprop [expr $diffmembre * 1.5] set minutesplusvminimum [expr 85 * $diffmembre] set listedesnouveauxpotentiels "" bind dcc A nouv? dcc_nouv proc dcc_nouv {hand idx args} { global minimumdeproppourcent joursdepuispremiereprop minutesplusvminimum listedesnouveauxpotentiels set listeajc(0) "" set i 0 foreach user [userlist V] { append listeajc([expr $i / 5]) "$user " incr i } putdcc $idx "+------------------------------------------------------+" putdcc $idx "| -----> Nouveaux ? <----- |" putdcc $idx "+------------------------------------------------------+" putdcc $idx "[ajouter_espaces "| Aidants du jour connus: ([llength [userlist V]])" 54] |" for {set i 0} {[expr 5 * $i] < [llength [userlist V]]} {incr i} { putdcc $idx "[ajouter_espaces "| ~> $listeajc($i)" 54] |" } putdcc $idx "+------------------------------------------------------+" putdcc $idx "| Possibilités de nouveaux: |" putdcc $idx "| Alias Proposé Temps +v |" set listedesnouveauxpotentiels "" foreach user [userlist V] { if {[getuser $user XTRA premiereprop] != ""} { set tdpp [expr [expr [unixtime] - [getuser $user XTRA premiereprop]] / 86400] if {$tdpp >= $joursdepuispremiereprop} { set ndp [llength [getuser $user xtra props]] set pcndp [expr $ndp * 100.0 / [llength [userlist AGCTORPJKM]]] if {$pcndp > $minimumdeproppourcent} { set tpv [getuser $user XTRA statsplusoncanal] if {$tpv > $minutesplusvminimum} { putdcc $idx "[ajouter_espaces "[ajouter_espaces "[ajouter_espaces "| * $user" 16] $tdpp jours ($ndp fois)" 37] [expr $tpv / 60] heures" 53] |" lappend listedesnouveauxpotentiels $user } } } } } if ![llength $listedesnouveauxpotentiels] { putdcc $idx "| *** Aucun candidat pour le moment. *** |" } putdcc $idx "+------------------------------------------------------+" return 1 } set delaideprobation [expr 4.25 * $diffmembre] set nombredevalmin [expr 0.7 * $diffmembre] set coteminimale [expr 45 + [expr 2 * $diffmembre]] set plusvminimumpourmo [expr 5 + [expr 2 * $diffmembre]] set listedesmembrespotentiels "" bind dcc A mo? dcc_mo proc dcc_mo {hand idx args} { global delaideprobation nombredevalmin coteminimale plusvminimumpourmo listedesmembrespotentiels set listemo(0) "" set i 0 foreach user [userlist N] { append listemo([expr $i / 7]) "$user " incr i } putdcc $idx "+---------------------------------------------------------------------+" putdcc $idx "| -----> Membres officiels ? <----- |" putdcc $idx "+---------------------------------------------------------------------+" putdcc $idx "[ajouter_espaces "| Les Nouveaux membres à l'essai: ([llength [userlist N]])" 69] |" for {set i 0} {[expr 7 * $i] < [llength [userlist N]]} {incr i} { putdcc $idx "[ajouter_espaces "| ~> $listemo($i)" 69] |" } putdcc $idx "+---------------------------------------------------------------------+" putdcc $idx "| Possibilités de promotion: |" putdcc $idx "| Alias Délai Temps +v Évals Cote 5/4/3/2/1/0 |" set candidats 0 set listedesmembrespotentiels "" foreach user [userlist N] { set delai [expr [expr [unixtime] - [getuser $user xtra date]] / 86400] if {$delai >= $delaideprobation} { set evals [llength [getuser $user xtra eval]] if {$evals >= $nombredevalmin} { set plusv [expr [getuser $user xtra statsplusoncanal] /60] set cote 0 for {set i 0} {$i <= 6} {incr i} { set les($i) 0 } foreach score [getuser $user xtra eval] { set cote [expr $cote + [lindex $score 1]] incr les([lindex $score 1]) } set cote [string range [expr 20.0 * $cote / $evals] 0 3] if {($cote >= $coteminimale) && ($plusv >= $plusvminimumpourmo)} { set signe "+" lappend listedesmembrespotentiels $user } else { set signe "-" } putdcc $idx "[ajouter_espaces "[ajouter_espaces "[ajouter_espaces "[ajouter_espaces "[ajouter_espaces "[ajouter_espaces "| $signe $user" 16] $delai jours" 27] $plusv heures" 39] $evals" 47] $cote\%" 55] $les(5)/$les(4)/$les(3)/$les(2)/$les(1)/$les(0)" 69] |" incr candidats } } } if !$candidats { putdcc $idx "| *** Aucun candidat pour le moment. *** |" } else { putdcc $idx "| N.B.: + pour une promotion possible au titre de MO. |" putdcc $idx "| - pour un retrait probable de l'Accès. |" } putdcc $idx "+---------------------------------------------------------------------+" return 1 } #################################################### ## Outils de promotion # .nouveau # .membre # .promo set confirmationnouveau "" bind dcc A nouveau dcc_nouveau proc dcc_nouveau {hand idx args} { global listedesnouveauxpotentiels confirmationnouveau nouvactif linenouv nouvquestion minimumdeproppourcent joursdepuispremiereprop minutesplusvminimum if $nouvactif { putdcc $idx "Je ne peux traiter qu'une seule demande de nouveau membre à la fois." return 0 } set args [lindex $args 0] if {$args == ""} { putdcc $idx "# Syntaxe: .nouveau \[# de confirmation\]" return 0 } set nick [lindex $args 0] if ![matchattr $nick V] { putdcc $idx "£ Hum, $nick n'est pas dans la liste des aidants du jour connus..." return 0 } set nickoki 0 foreach user $listedesnouveauxpotentiels { if {[string tolower $nick] == [string tolower $user]} { set nickoki 1 } } set confirmation [lindex $args 1] if {$confirmation == ""} { set confirmationnouveau [unixtime] set plusv [expr [getuser $nick xtra statsplusoncanal] /60] if {$plusv >= [expr $minutesplusvminimum / 60]} { set col2 "3" } else { set col2 "4" } set props [llength [getuser $nick xtra props]] if {[expr 100.0 * $props / [llength [userlist AGCTORPJM]]] >= $minimumdeproppourcent} { set col4 "3" } else { set col4 "4" } set tdpv [expr [expr [unixtime] - [getuser $nick XTRA created]] / 86400] set col1 "3" if {[getuser $nick XTRA premiereprop] != ""} { set tdpp [expr [expr [unixtime] - [getuser $nick XTRA premiereprop]] / 86400] if {$tdpp >= $joursdepuispremiereprop} { set col3 "3" } else { set col3 "4" } } else { set tdpp "-" set col3 "4" } putdcc $idx "£ Confirmation: Introduire $nick comme nouveau membre? -> .nouveau $nick $confirmationnouveau" if $nickoki { putdcc $idx " + 3OK: Ce candidat semble prêt à devenir membre." } else { putdcc $idx " - 4ATTENTION: Ce candidat NE semble PAS être prêt à devenir membre." } putdcc $idx " Temps depuis le premier +v:$col1 $tdpv jours" putdcc $idx " Temps +v total:$col2 $plusv heures" putdcc $idx " Temps depuis la première proposition:$col3 $tdpp jours" putdcc $idx " Nombre de propositions:$col4 $props" return 1 } elseif {$confirmation != $confirmationnouveau} { putdcc $idx "£ ERREUR: le numéro de confirmation n'a pu être authentifié. Veuillez recommencer la procédure." set confirmationnouveau "" return 0 } else { set nouvactif 1 putdcc $idx "Procédure d'ajout d'un nouveau membre." putdcc $idx " Veuillez répondre avec attention à toutes les questions! Merci." putdcc $idx " Chaque ligne constitue une réponse. Utilisez '-' pour annuler toute la procédure." putdcc $idx " +- -+- -+- -+- -+ " set linenouv $nick putdcc $idx $nouvquestion(1) set nouvquestion(0) 2 control $idx control_nouveau return 1 } } set listepays "" foreach tmp [exec ls /aide/www/bot/drapeaux | sed -e "s/.gif//"] { lappend listepays $tmp } unset tmp set linenouv "" set nouvactif 0 set nouvquestion(0) 1 set nouvquestion(1) "-> Est-il (ou elle) intéressé(e) à devenir membre ? (oui/non)" set nouvquestion(2) "-> A-t-il (ou elle) déjà lu la charte du canal \[ http://aide.igt.net/aide/charte.htm \] (sinon reprendre plus tard, après la lecture!!!)? (oui/non)" set nouvquestion(3) "-> Accepte-t-il de la respecter tant et aussi longtemps qu'il (ou elle) sera membre ? (oui/non)" set nouvquestion(4) "-> Demander son mail. \[Un vrai, pas un hotmail, sauf si cela est vraiment nécessaire\]. (email)" set nouvquestion(5) "-> Est-ce une fille ou un gars? (F/H)" set nouvquestion(6) "-> De quel pays est-il originaire? ($listepays) *** Case sensitive! *** (N.B.: Canada = hors Québec)" set nouvquestion(7) "-> Indiquer où trouver les politiques du canal et ce quelles représentent/les lui faire parvenir. (ok)" set nouvquestion(8) "-> Expliquer qu'en cas de besoin, de question ou de problème, il (ou elle) peut toujours s'adresser à un admin directement \[[userlist A]\] ou par courrier électronique à: admins@aide.igt.net. (ok)" set nouvquestion(9) "-> Expliquer qu'il serait sage de se familiariser avec le contenu de la page du canal afin d'être en mesure d'y guider les usagers. (ok)" set nouvquestion(10) "-> Expliquer que le poste de 'Nouveau membre' est un poste d'évaluation, c'est-à-dire que pendant un mois les membres vont l'évaluaer sur sa capacité à aider les gens et ses actions sur le canal (modérer un peu les popups peut-être) et à la fin du mois on déterminera s'il deviendra Membre officiel ou pas. Expliquer l'usage du «/msg AideBot !info» (ok)" set nouvquestion(11) "-> Demander s'il (ou elle) a des questions, et y répondre au besoin. (ok)" set nouvquestion(12) "-> Confirmation finale. Voulez-vous créer ce compte de Nouveau membre? (+/-)" set nouvquestion(13) " +- -+- -+- -+- -+ " proc control_nouveau {idx arg} { global linenouv nouvactif nouvquestion if {$arg == "+"} { if {$nouvquestion(0) == 13} { release_nouveau $idx } else { putdcc $idx "ERREUR, l'inscription du nouveau membre est annulée !" } return 1 } elseif {$arg == "-"} { putdcc $idx "Ok, inscription du nouveau membre annulée !" set nouvactif 0 return 1 } else { lappend linenouv $arg putdcc $idx $nouvquestion($nouvquestion(0)) incr nouvquestion(0) if {$nouvquestion(0) == 14} { putdcc $idx "ERREUR, l'inscription du nouveau membre est annulée !" return 1 } else { return 0 } } } proc release_nouveau {idx} { global linenouv nouvactif set nick [lindex $linenouv 0] set sexe [string toupper [lindex $linenouv 5]] set pays [lindex $linenouv 6] if {(($sexe == "F")|($sexe == "H"))&([string tolower [lindex $linenouv 1]] == "oui")&([string tolower [lindex $linenouv 2]] == "oui")&([string tolower [lindex $linenouv 3]] == "oui")&([string tolower [lindex $linenouv 7]] == "ok")&([string tolower [lindex $linenouv 8]] == "ok")&([string tolower [lindex $linenouv 9]] == "ok")&([string tolower [lindex $linenouv 10]] == "ok")&([string tolower [lindex $linenouv 11]] == "ok")&[estunpays:ok $pays]} { news_add "AideBot" "dcc" "AideBot" "#aide" "[unixtime] Veuillez noter: $nick a été nommé[mf $nick "" "e"] nouve[mf $nick "au" "lle"] membre. Vous devez porter attention à ses agissements sur le canal afin de pouvoir l'évaluer. L'évaluation commencera dans 10 jours au moyen des .eval. Dites-lui bonjour! :-)" putdccsi $idx "Une news a été ajoutée sur #Aide." chattr $nick -V chattr $nick +N chattr $nick -|+v #Aide setuser $nick xtra sexe $sexe setuser $nick xtra pays $pays setuser $nick xtra email [lindex $linenouv 4] setuser $nick xtra mail [lindex $linenouv 4] setchaninfo $nick #Aide "Ha! Un[mf $nick "" "e"] nouve[mf $nick "au" "lle"]! Bonjour toi! :-)" setuser $nick xtra date [unixtime] setuser $nick xtra prom [unixtime] setuser $nick xtra vrainick $nick setuser $nick xtra props setuser $nick xtra plusv setuser $nick XTRA statsjoin 0 setuser $nick XTRA statschon 0 setuser $nick XTRA statspub 0 setuser $nick XTRA statsoncanal 0 setuser $nick XTRA statsplusoncanal 0 setuser $nick XTRA statsonbot 0 putdccsi $idx "Le nouveau membre ($nick) a maintenant été enregistré." puthelp "PRIVMSG #Aide :*** Je suis fier de vous annoncer que4 $nick est maintenant un[mf $nick "" "e"] nouve[mf $nick "au" "lle"] membre de #Aide! 2Félicitations!!! ***" } else { putdcc $idx "J'ai bien peur qu'il n'y ait une erreur dans une des réponse que tu as fournies, je dois annuler la procédure, réessaie STP." } set nouvactif 0 } ####### set confirmationofficiel "" bind dcc A membre dcc_membre proc dcc_membre {hand idx args} { global listedesmembrespotentiels confirmationofficiel mbreactif linembre mbrequestion fichierretraitsautomatiques delaideprobation nombredevalmin coteminimale plusvminimumpourmo if $mbreactif { putdcc $idx "Je ne peux traiter qu'une seule évaluation de nouveau membre à la fois." return 0 } set args [lindex $args 0] if {$args == ""} { putdcc $idx "# Syntaxe: .membre \[# de confirmation\]" return 0 } set nick [lindex $args 0] if ![matchattr $nick N] { putdcc $idx "£ Hum, $nick n'est pas dans la liste des Nouveaux membres..." return 0 } set nickoki 0 foreach user $listedesmembrespotentiels { if {[string tolower $nick] == [string tolower $user]} { set nickoki 1 } } set choix [string tolower [lindex $args 1]] if {($choix != "accepte") && ($choix != "rejete")} { putdcc $idx "£ Hum, $choix n'est pas un choix valide..." return 0 } set confirmation [lindex $args 2] set delai [expr [expr [unixtime] - [getuser $nick xtra date]] / 86400] if {$delai >= $delaideprobation} { set col1 "3" } else { set col1 "4" } set evals [llength [getuser $nick xtra eval]] if {$evals >= $nombredevalmin} { set col3 "3" } else { set col3 "4" } set plusv [expr [getuser $nick xtra statsplusoncanal] /60] if {$plusv >= $plusvminimumpourmo} { set col2 "3" } else { set col2 "4" } if {[getuser $nick xtra eval] != ""} { set cote 0 foreach score [getuser $nick xtra eval] { set cote [expr $cote + [lindex $score 1]] } set cote [string range [expr 20.0 * $cote / $evals] 0 3] if {$cote >= $coteminimale} { set col4 "3" } else { set col4 "4" } } else { set cote "-" set col4 "4" } if {$confirmation == ""} { set confirmationofficiel [unixtime] if {$nickoki && ($choix == "accepte")} { putdcc $idx "£ Confirmation: Promure $nick comme membre officiel? -> .membre $nick $choix $confirmationofficiel" putdcc $idx " + 3OK: Ce candidat semble prêt à devenir membre officiel." } elseif {!$nickoki && ($choix == "accepte")} { putdcc $idx "£ Confirmation: Promure $nick comme membre officiel? -> .membre $nick $choix $confirmationofficiel" putdcc $idx " + 4ATTENTION: Ce candidat NE me semble PAS remplir les critères adéquats." } elseif {$nickoki && ($choix == "rejete")} { putdcc $idx "£ Confirmation: Rejeter $nick comme membre officiel? -> .membre $nick $choix $confirmationofficiel" putdcc $idx " + 4ATTENTION: Ce candidat semblait pourtant remplir les conditions adéquates." } elseif {!$nickoki && ($choix == "rejete")} { putdcc $idx "£ Confirmation: Rejeter $nick comme membre officiel? -> .membre $nick $choix $confirmationofficiel" putdcc $idx " + 3OK: Ce candidat NE semblait EFFECTIVEMENT PAS combler les conditions adéquates." } putdcc $idx " Temps depuis la promotion:$col1 $delai jours" putdcc $idx " Temps +v depuis la promotion:$col2 $plusv heures" putdcc $idx " Nombre d'évaluations enregistrées:$col3 $evals" putdcc $idx " Évaluation:$col4 $cote\%" return 1 } elseif {$confirmation != $confirmationofficiel} { putdcc $idx "£ ERREUR: le numéro de confirmation n'a pu être authentifié. Veuillez recommencer la procédure." set confirmationofficiel "" return 0 } else { if {$choix == "rejete"} { putdcc $idx "Oki, je rejete la candidature de $nick comme membre officiel." news_add "AideBot" "dcc" "AideBot" "#aide" "[unixtime] Veuiller noter: $nick a échoué l'évaluation des membres pendant sa période de probation. Son accès est maintenant effacé. [mf $hand "Il" "Elle"] peut tout de même continuer à aider sur le canal, recevoir à nouveau le + et retenter sa chance comme membre à l'essaie dès qu'[mf $hand "il" "elle"] remplira à nouveau les conditions." putdcc $idx "Une news sur #Aide a été ajoutée." set fd [open rejet.mail w] puts $fd "TO: $nick <[getuser $nick XTRA EMAIL]>" puts $fd "BCC: admins@aide.igt.net" puts $fd "FROM: AideBot " puts $fd "REPLY-TO: admins@aide.igt.net" puts $fd "SUBJECT: La période d'évalaution comme nouveau membre sur #Aide est terminée." puts $fd "Bonjour $nick," puts $fd "" puts $fd " J'ai hélas une mauvaise nouvelle à t'apprendre, c'est-à-dire que l'évaluation que tu passais pour devenir membre permanent est maintenant terminée, mais que tu y as échoué." puts $fd " Ça ne veut pas dire que tu ne pourras jamais devenir membre de #Aide, simplement que pour le moment, l'ensemble des membres de #Aide trouve que tu as des améliorations à apporter au style d'aide que tu offres sur le canal et peut-être aussi à ton esprit d'équipe." puts $fd " En espérant peut-être te revoir bientôt sur le canal, je te souhaite néanmoins une bonne fin de journée." puts $fd "" puts $fd " Aidebot, et les admins de #Aide." puts $fd "" puts $fd "N.B.: Ceci est un message automatisé." close $fd exec cat rejet.mail | /usr/lib/sendmail [getuser $nick XTRA EMAIL] admins@aide.igt.net exec rm rejet.mail putdcc $idx "Un mail explicatif a été envoyé à $nick." exec echo "[dire_date [unixtime]] Nouveau membre retiré: $nick (par $hand): \[ Cote: $cote\% Nmbre d'éval: $evals Temps +v: $plusv\h Délai depuis promo: $delai\j \] --- [getuser $nick hosts]" >> $fichierretraitsautomatiques deluser $nick putdcc $idx "Accès de $nick maintenant effacé." return 1 } if {$choix == "accepte"} { set mbreactif 1 putdcc $idx "Procédure de nomination au titre de membre officiel d'un nouveau membre." putdcc $idx " Veuillez répondre avec attention à toutes les questions! Merci." putdcc $idx " Chaque ligne constitue une réponse. Utilisez '-' pour annuler toute la procédure." putdcc $idx " +- -+- -+- -+- -+ " set linembre $nick putdcc $idx $mbrequestion(1) set mbrequestion(0) 2 control $idx control_membre return 1 } } } set linembre "" set mbreactif 0 set mbrequestion(0) 1 set mbrequestion(1) "-> Est-il (ou elle) toujours intéressé(e) à devenir membre officiel ? (oui/non)" set mbrequestion(2) "-> Indiquer où trouver les politiques du canal et demander de les relire. (ok)" set mbrequestion(3) "-> Quel membre sera son professeur d'AideBot, son parrain ? (membre)" set mbrequestion(4) "-> Demander s'il (ou elle) a des questions, et y répondre au besoin. (ok)" set mbrequestion(5) "-> Confirmation finale. Voulez-vous donner accès de membre officiel à $nick? (+/-)" set mbrequestion(6) " +- -+- -+- -+- -+ " proc control_membre {idx arg} { global linembre mbreactif mbrequestion if {$arg == "+"} { if {$mbrequestion(0) == 6} { release_membre $idx } else { putdcc $idx "ERREUR, la procédure a été annulée !" } return 1 } elseif {$arg == "-"} { putdcc $idx "Ok, inscription du nouveau membre annulée !" set mbreactif 0 return 1 } else { lappend linembre $arg putdcc $idx $mbrequestion($mbrequestion(0)) incr mbrequestion(0) return 0 } } proc release_membre {idx} { global linembre mbreactif set nick [lindex $linembre 0] if {([string tolower [lindex $linembre 1]] == "oui")&([string tolower [lindex $linembre 2]] == "ok")&[matchattr [lindex $linembre 3] p]&([string tolower [lindex $linembre 4]] == "ok")} { news_add "AideBot" "dcc" "AideBot" "#aide" "[unixtime] Veuiller noter: $nick a été nommé[mf $nick "" "e"] membre officiel[mf $nick "" "le"]. [mf $nick "Il" "Elle"] fait maintenant partie de notre grande équipe. Aidez-l[mf $nick "e" "a"] un peu à s'habituer au partyline, et surtout ne soyez pas trop méchant pour son initiation ;-ppp Félicitations!" putdccsi $idx "Voilà, $nick est maintenant et définitivement un[mf $nick "" "e"] membre officiel[mf $nick "" "le"]." set password [unixtime] putdccsi $idx "Son password temporaire sur AideBot est: $password" putdccsi $idx "Fais entrer $nick sur le bot, demande-lui de changer son password, et présente-lui son professeur ([lindex $linembre 3]) ! :-)" chattr $nick +Mpx chattr $nick -N setuser $nick xtra prom [unixtime] setuser $nick pass $password setuser $nick xtra eval setuser $nick XTRA statsjoin 0 setuser $nick XTRA statschon 0 setuser $nick XTRA statspub 0 setuser $nick XTRA statsoncanal 0 setuser $nick XTRA statsplusoncanal 0 setuser $nick XTRA statsonbot 0 setuser $nick XTRA parrain [lindex $linembre 3] setuser $nick console "#Aide - - 0 0 0" putdccsi $idx "Voilà, $nick est maintenant et définitivement un membre officiel." sendnote AideBot $nick "Bonjour et bienvenue sur AideBot $nick. J'espère que tu te plairas parmi nous :¬) . Il serait important que tu penses à changer ton mot de passe, à lire le .help à fond ainsi que les news. Si tu as des questions au sujet du bot, [lindex $linembre 3] se fera un plaisir de t'aider." } else { putdccsi $idx "J'ai bien peur que tu n'aies commis une erreur dans l'entrée des réponses, l'opération a été annulée." } set mbreactif 0 } ############################################# ## .responsables bind dcc - responsables dcc_responsables proc dcc_responsables {hand idx args} { putdcc $idx "Voici les tâches spécifiques qui sont associées aux admins et à certains membres de #Aide" putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" putdcc $idx " Tous les admins: \[[userlist A]\]:" putdcc $idx " * Les relations inter-membres, les suspensions au besoin, pour avoir de l'information, etc." putdcc $idx " Les Admins généraux \[[userlist G]\]:" putdcc $idx " * Le bot, les relations extérieures au canal, l'équipe des admins, les cas épineux, ..." foreach user [userlist G] { putdcc $idx " -> $user : [getuser $user xtra taches]" } putdcc $idx " Les Admins canal \[[userlist C-G]\]:" putdcc $idx " * Le canal en général: banlist, accès CService, accès au bot, nombre d'op, etc." foreach user [userlist C-G] { putdcc $idx " -> $user : [getuser $user xtra taches]" } putdcc $idx " Les Admins projets \[[userlist T-G]\]:" putdcc $idx " * Tous les projets de #Aide: Proposer, accepter, membership des projets, etc." foreach user [userlist T-G] { putdcc $idx " -> $user : [getuser $user xtra taches]" } putdcc $idx " Les Parrains:" putdcc $idx " * Enseigner le bot aux nouveaux membres et assurer l'ordre sur le bot." putdcc $idx " -> [userlist E-A] <-" putdcc $idx " D'autres membres ont peut-être une tâche spécifique:" foreach user [userlist -A] { set taches [getuser $user xtra taches] if {$taches != ""} { putdcc $idx " - $user : $taches" } } putdcc $idx "_________________________________________________________________________________________" return 1 } ############################################## ## .futur, pour admins... bind dcc C futurs dcca_futur proc dcca_futur {hand idx arg} { set liste "" foreach user [userlist M] { if {[getuser $user xtra futur] == 1} { lappend liste $user } } putdcc $idx "*** Les membres suivants ont donné leur nom pour devenir op si possible. ***" putdcc $idx " -> $liste" return 1 } ############################################ ## .loginx, pour admins bind dcc OJ loginx dcca_loginx proc dcca_loginx {hand idx arg} { set arg [lindex $arg 0] if {($arg == "") & [matchattr $hand A]} { putdcc $idx "*** Les membres suivants n'ont pas donné leur 'loginx' ***" set flags "A G C T O J R P M H" foreach f $flags { set liste "" foreach user [userlist $f] { if {[getuser $user xtra loginx] == ""} { lappend liste $user } } if {$liste != ""} { putdcc $idx " -> \[+$f\] $liste" } } return 1 } else { set arg [string tolower $arg] set qui "" if {$arg != ""} { foreach user [userlist pXYZ] { if {$arg == [string tolower [getuser $user xtra loginx]]} { putdcc $idx "Ce 'login X' appartient à [getuser $user xtra vrainick]" return 1 } } } putdcc $idx "Je ne reconnais pas ce 'login X', désolé." putdcc $idx "## Syntaxe: .loginx " return 0 } } ############################################ ## .vrainick Pour savoir quels sont les nicks peut-être mal écrits... bind dcc A vrainick dcca_vrainick proc dcca_vrainick {hand idx arg} { putdcc $idx "Liste des membres ayant une différence entre le vrainick et le nick sur AideBot..." putdcc $idx "N.B.: Tout changement a un impact sur les votes en cours s'il y en a et sur la photo. -Donc attention SVP (ne pas effectuer pendant un vote et prévenir la perosnne de réuploader sa photo si elle y était)- Une astérisque signifie que la personne est sur AideBot et que le changement de nick n'est peut-être que temporaire!" foreach user [userlist p] { if {[getuser $user xtra vrainick] != $user} { set msg " ? .chvrainick [getuser $user xtra vrainick] $user ?" if {[hand2idx $user] != -1} { append msg " *" } putdcc $idx $msg } } return 1 } ############################################ ## .nomine Pour nommer un membre 'membre honoraire' ou 'parrain' bind dcc A nomine dcc_nomine proc dcc_nomine {hand idx args} { set args [lindex $args 0] if {$args == ""} { putdcc $idx "## Suntaxe: .nomine <+|-> " return 0 } set etat [lindex $args 0] set poste [string tolower [lindex $args 1]] set nick [lindex $args 2] if {$etat == "+"} { if ![matchattr $nick MRPOJ-A] { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre appropriée ..." return 0 } if {$poste == "hon"} { if [matchattr $nick OJRP] { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre appropriée ..." return 0 } chattr $nick -M+H setuser $nick xtra prom [unixtime] set msg "NOMINATION -> MEMBRE HONORAIRE: $nick (par $hand)" } elseif {$poste == "parrain"} { chattr $nick +E set msg "NOMINATION -> PARRAIN: $nick (par $hand)" setuser $nick xtra parrain [unixtime] } else { putdcc $idx "Heu, nominer à quel poste au juste?" return 0 } putdcc $idx "Oki, nomination acceptée. Informe la personne au besoin." } else { if {($poste == "hon") & [matchattr $nick H]} { chattr $nick -H+M set msg "RETRAIT de STATUT -> MEMBRE HONORAIRE: $nick est redevenu simple membre. (par $hand)" } elseif {($poste == "parrain") & [matchattr $nick E]} { chattr $nick -E set msg "RETRAIT de STATUT -> PARRAIN: $nick n'est plus parrain. (par $hand)" setuser $nick xtra parrain } else { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre ou d'un statut appropriée ..." return 0 } putdcc $idx "Oki, retrait de statut accepté. Informe la personne." } foreach user [userlist A] { sendnote AideBot $user $msg } return 1 } ############################################ ## Active ou désactive une fichie de membre bind dcc A reactive dcc_reactive proc dcc_reactive {hand idx arg} { if {[lindex $arg 0] == ""} { putdcc $idx "## Suntaxe: .reactive " return 0 } if ![matchattr $arg XY] { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre désactivée ..." return 0 } chattr $arg -XY+pxM|v #Aide setuser $arg xtra prom [unixtime] setuser $arg laston [unixtime] REACTIVATION foreach user [userlist A] { sendnote AideBot $user "FICHE RÉACTIVÉE: [getuser $hand xtra vrainick] a réactivé la fiche de $arg\." } putdcc $idx "Oki, fiche réactivée." putdcc $idx "Tu DOIS expliquer à $arg qu'[mf $arg "il" "elle"] doit à nouveau accepter de respecter la charte et les politiques et mettre une news générale annonçant son retour... N'oublie pas! :-)" return 1 } bind dcc A desactive dcc_desactive proc dcc_desactive {hand idx args} { if {[llength $args] == 1} { set args [lindex $args 0] } set nick [lindex $args 0] set type [lindex $args 1] set raison [lrange $args 2 end] if {$hand != "AideBot"} { if {($raison == "") || (($type != "-") && ($type != "+"))} { putdcc $idx "## Suntaxe: .desactive <+|-> (Le + ou - fait référence à s'il est parti volontairement ou non)" return 0 } if ![validuser $nick] { putdcc $idx "Hum, ceci n'est pas un nom de fiche valable." return 0 } if ![matchattr $nick AOJPRMHN] { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre que tu peux désactiver, ce n'est pas un membre officiel ou en évaluation. Utilises plutôt .-user ou .membre rejete" return 0 } if [matchattr $nick PRJAOEH] { putdcc $idx "Hum, il ne s'agit pas là d'une fiche de membre que tu peux désactiver, commence par retirer les niveaux & projets." return 0 } } if [matchattr $nick S] { setuser $nick XTRA susp_debut setuser $nick XTRA susp_duree setuser $nick XTRA susp_reste setuser $nick XTRA susp_auteur setuser $nick XTRA susp_raison set fichier [open "/aide/www/admins/suspensions.txt" a] puts $fichier "\[[date] [time]\] Annulation de la suspension de $nick automatique. Désactivation du compte par $hand. Raison invoquée: $raison" close $fichier } setuser $nick xtra DEPART $raison setuser $nick xtra afficher setuser $nick xtra prom [unixtime] erasenotes $nick 1-100 chattr $nick -K modaccesw $nick 0 if {$type == "+"} { chattr $nick +X-pxMK|-v #Aide } else { chattr $nick +Y-pxMK|-v #Aide } if [valididx $idx] { foreach user [userlist A] { sendnote AideBot $user "FICHE DÉSACTIVÉE: [getuser $hand xtra vrainick] a désactivé manuellement la fiche de $nick\." } putdcc $idx "Oki, fiche désactivée." } return 1 } #################################### ## Révision du .-user! bind filt A ".-user *" checkmoinsuser proc checkmoinsuser {idx text} { set cible [lindex $text 1] if ![validuser $cible] { return $text } if [matchattr $cible pXYSWN] { putdcc $idx "Hey! Qu'est-ce que tu essaies de faire là? Tu ne peux pas effacer la fiche de $cible, il a les flags [chattr $cible] !" return "" } else { foreach adm [userlist A] { sendnote AideBot $adm "\[GESTION DES FICHES\] [getuser [idx2hand $idx] xtra vrainick] vient d'effacer la fiche de $cible (ou de tenter de le faire)." } return $text } } #################################### ## Réunion ... bind dcc RAE reunion dcc_reunion proc dcc_reunion {hand idx args} { global canauxbarres canauxbloques set args [lindex $args 0] set canal [lindex $args 0] set nicks [lrange $args 1 end] if {$canal == ""} { putdcc $idx "## Syntaxe: .reunion \[nick1\] \[nick2\] \[nick3\] ..." return 0 } elseif {$canal > 999999999} { putdcc $idx "STP, utilise le numéro du canal, pas des letttres, merci." return 0 } elseif {$canal == 0} { putdcc $idx "C'est ça, un chausson avec ça? faire une réunion sur le PartyLine, c'est malin ça! ;ppp" return 0 } elseif {([lsearch -exact $canauxbarres $canal] != -1) & [llength [whom $canal]]} { putdcc $idx "Ce canal est barré, tu vas devoir tenir ta réunion ailleurs ..." return 0 } elseif {([lsearch -exact $canauxbloques $canal] != -1) & ![matchattr $hand m]} { putdcc $idx "Ce canal ne peut être utilisé pour tenir une réunion, tu vas devoir faire ça ailleurs ..." return 0 } elseif {![matchattr $hand A] && (($canal < 700) || ($canal > 799))} { putdcc $idx "Les réunions de projet ou de parrain doivent se tenir sur un numéro de canal entre 700 et 799" return 0 } dccsimul $idx ".chat $canal" set resp [string tolower [getuser $hand xtra responsable]] if {[string index $nicks 0] == "+"} { set flag [lindex $nicks 0] set nicks "" foreach user [userlist $flag] { if {([hand2idx $user] != -1) & ([hand2idx $user] != $idx)} { lappend nicks $user } } } foreach nick $nicks { if ![validuser $nick] { putdcc $idx "$nick n'est pas un membre connu." return 0 } } foreach nick $nicks { set leidx [hand2idx $nick] if [valididx $leidx] { if [matchattr $hand AE] { dccsimul $leidx ".chat $canal" } else { set oki 0 foreach projet [string tolower "[getuser $nick xtra participant] [getuser $nick xtra adjoint]"] { if [string match *$projet* $resp] { set oki 1 } } if $oki { dccsimul $leidx ".chat $canal" } } } } dccputchan $canal "$hand a demandé une réunion ***" set liste "" foreach user [whom $canal] { lappend liste [lindex $user 0] } dccputchan $canal "$liste sont présents. ***" dccputchan $canal "*** *** Bienvenue ! *** *** ***" return 1 } ############################################# # .demission (Pour les âmes esseulées ...) set confirmationdemission "" bind dcc - demission dcc_demission bind dcc - démission dcc_demission proc dcc_demission {hand idx args} { global confirmationdemission set args [lindex $args 0] if {$args == ""} { putdcc $idx "# Syntaxe: .demission \[# de confirmation\] \[Vos raisons\]" return 0 } set confirmation [lindex $args 0] if {$confirmation != $confirmationdemission} { set confirmationdemission [unixtime] putdcc $idx "£ Confirmation: Pour réellement démissionner? -> .demission $confirmationdemission $args" } else { if [matchattr $hand A] { putdcc $idx "Arf, contacte donc [userlist G] à la place ... :-/" return 0 } set raison [lrange $args 1 end] if [matchattr $hand J] { dcc_promo $hand $idx "-opa $hand" } if [matchattr $hand O] { dcc_promo $hand $idx "-op $hand" } chattr $hand -pxKEH+W|-fv #Aide chattr $hand -pxKEH+W|-fvo #Cours setuser $hand xtra DEMISSION "[unixtime] $raison" setuser $hand xtra absence setuser $hand xtra futur putdcc $idx "Le dépôt de votre démission a été noté, les commentaires, s'il y en avait, seront envoyés aux admins dans un peu plus de trois jours." putdcc $idx "Votre accès a été désactivé temporairement, mais votre démission ne sera prise en compte que dans trois jours à minuit (entre 72h et 96h). D'ici là vous pouvez annuler votre démission avec la commande suivante:" putdcc $idx "/msg AideBot !demission -- Cette commande ne vous sera accessible que dans 24h." killdcc $idx return 0 } } ######################################### # .avertir bind dcc AE avertir dcc_avertir proc dcc_avertir {hand idx args} { set args [lindex $args 0] set nick [lindex $args 0] if {$nick == "?"} { putdcc $idx "Statistique sur les .avertir : MIS RETIRÉS" foreach admin [userlist AE] { putdcc $idx " - [ajouter_espaces "[getuser $admin xtra vrainick] :" 22] [lindex [getuser $admin xtra statsavertir] 0] [lindex [getuser $admin xtra statsavertir] 1]" } return 1 } if {$nick == "*"} { if ![matchattr $hand A] { putdcc $idx "Réservé aux admins ..." return 0 } putdcc $idx "Liste des mentions notées ..." putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" foreach user [userlist] { if {[getuser $user xtra avertir] != ""} { set bla [getuser $user xtra avertir] putdcc $idx " ¤ [ajouter_espaces "$user ([getuser $user xtra vrainick])" 21]-> [dire_date [lindex $bla 0]] : [lrange $bla 2 end] (par [lindex $bla 1])" } } putdcc $idx "_________________________" return 1 } if ![validuser $nick] { putdcc $idx "## Syntaxe: .avertir \[ok|commentaire\]" return 0 } set message [lrange $args 1 end] if {[string tolower $message] == "ok"} { setuser $nick xtra avertir putdcc $idx "Oki, commentaire sur $nick retiré." if [matchattr $nick L] { set stats [getuser $hand xtra statsavertir] if {$stats == ""} {set stats "0 0"} setuser $hand xtra statsavertir "[lindex $stats 0] [expr [lindex $stats 1] + 1]" } chattr $nick -L } else { set ancien [getuser $nick xtra avertir] if {$ancien != ""} { if [matchattr $hand A] { putdcc $idx "Il y avait déjà un .avertir en attente sur $nick. J'ai concaténé celui que tu viens d'ajouter... j'espère que tout rentre sur une ligne!" } set message "$message Ÿ+Ÿ [lrange $ancien 2 end] (par [lindex $ancien 1] le [dire_date [lindex $ancien 0]]) Ÿ " } setuser $nick xtra avertir "[unixtime] [getuser $hand xtra vrainick] $message" putdcc $idx "Oki, j'ai noté le commentaire sur $nick et je vais en avertir les admins quand il sera là." if ![matchattr $nick L] { set stats [getuser $hand xtra statsavertir] if {$stats == ""} {set stats "0 0"} setuser $hand xtra statsavertir "[expr [lindex $stats 0] + 1] [lindex $stats 1]" } chattr $nick +L } return 1 } ######################################### # .public bind dcc A public dcc_public proc dcc_public {hand idx args} { set args [lindex $args 0] set nick [lindex $args 0] if {$nick == "*"} { putdcc $idx "Liste des gens ayant un commentaire sur leur .whois ..." putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" foreach user [userlist] { if {[getuser $user xtra public] != ""} { set bla [getuser $user xtra public] putdcc $idx " ¤ [ajouter_espaces [getuser $user xtra vrainick] 10]-> \[Encore [lindex $bla 0] heure(s)\] : [lrange $bla 2 end] (par [lindex $bla 1])" } } putdcc $idx "___________________________________________________" return 1 } set delai [lindex $args 1] set message [lrange $args 2 end] if ![validuser $nick] { putdcc $idx "## Syntaxe: .public \[ok|heures commentaire\]" return 0 } if {[string tolower $delai] == "ok"} { setuser $nick xtra public putdcc $idx "Oki, commentaire public sur $nick retiré." return 1 } if {![estunnombre:ok $delai] | ($message == "")} { putdcc $idx "## Syntaxe: .public \[ok|heures commentaire\]" return 0 } setuser $nick xtra public "$delai [getuser $hand xtra vrainick] $message" putdcc $idx "Oki, j'ai noté le commentaire public sur $nick\. Ce sera visible sur son .whois pour $delai heure(s) environ. (Ai-je besoin de dire d'être prudent?)" return 1 } ######################################## # .parrains bind dcc - parrains dcc_parrains bind dcc - marraines dcc_parrains proc dcc_parrains {hand idx args} { putdcc $idx "Les parrains et marraines de #Aide ..." putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" foreach user [userlist E-A] { putdcc $idx " * [ajouter_espaces [getuser $user xtra vrainick] 10] \[[dire_date [getuser $user xtra parrain]]\]" } putdcc $idx "___________________________________" putdcc $idx " Déf.: Parrain/Marraine (#Aide): Membre d'expérience à qui le canal tient beaucoup à coeur qui se rend disponible comme personne ressource auprès des membres et des nouveaux. Sa principale fonction est d'aider à conserver l'harmonie parmi les membres et sur le bot." return 1 } ####################################### # .commandes bind dcc A commandes dcc_commandes proc dcc_commandes {hand idx args} { set args [lindex $args 0] set liste [binds dcc] set commandes(types) "" set compteur 0 foreach item $liste { set type [lindex $item 1] if {[lsearch $commandes(types) $type] == -1} { lappend commandes(types) $type } lappend commandes($type) [lindex $item 2] incr compteur } set long 0 foreach type $commandes(types) { if {($args == $type) | ($args == "")} { putdcc $idx "Commandes $type: $commandes($type)" set long [llength $commandes($type)] } } if {$args == ""} { putdcc $idx "Total: $compteur commandes dcc (Tous les types) utilisées dans ce bot" } else { putdcc $idx "Total: $long commandes dcc ($args) utilisées dans ce bot" } return 1 } ########################################## # .notu (Lire les notes des +U) bind dcc A notu dcc_notu proc dcc_notu {hand idx nick} { if [matchattr $nick U] { foreach n [notes $nick 1-] { putdcc $idx "Ÿ[lindex $n 0]Ÿ ([dire_date [lindex $n 1]]) [lrange $n 2 end]" } } else { putdcc $idx "## Syntaxe: .notu " return 0 } return 1 } ######################################## # .acces bind dcc T acces dcc_acces proc dcc_acces {hand idx args} { set args [lindex $args 0] set action [lindex $args 0] set qui [string tolower [lindex $args 1]] set type [string toupper [lindex $args 2]] set nom [string tolower [lindex $args 3]] set infos [lrange $args 4 end] if {$action == "+"} { if ![string match "* $type *" " INT EXT SPC "] { putdcc $idx "Mauvais type! (INT/EXT)" return 0 } exec echo "0 $qui $type $nom $infos" >> acces.au.serveur } elseif {$action == "-"} { if ![estunnombre:ok $qui] { putdcc $idx "Vous devez fournir le numéro de la ligne à effacer." return 0 } set num 0 set f [open acces.au.serveur r] set g [open acces.au.serveur.tmp w] while {[gets $f line] >= 0} { incr num if {$num != $qui} { puts $g $line } } close $f close $g exec mv acces.au.serveur.tmp acces.au.serveur } elseif [estunnombre:ok $action] { set num 0 set f [open acces.au.serveur r] set g [open acces.au.serveur.tmp w] while {[gets $f line] >= 0} { incr num if {$num != $action} { puts $g $line } else { set etat [lindex $line 0] if $etat { puts $g "0 [lrange $line 1 end]" } else { puts $g "1 [lrange $line 1 end]" } } } close $f close $g exec mv acces.au.serveur.tmp acces.au.serveur } elseif {$action == ""} { } else { putdcc $idx "## Syntaxe: .acces + " putdcc $idx " .acces - <##> (retire l'élément)" putdcc $idx " .acces <##> (change l'état)" putdcc $idx " .acces <##> (lire la liste)" return 0 } putdcc $idx "_____________________________________________________" putdcc $idx "Liste des accès FTP pour page web au serveur de #Aide:" putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" putdcc $idx " ## ACCES TYPE NOM : EXPLICATIONS" putdcc $idx "" set num 0 set f [open acces.au.serveur r] while {[gets $f line] >= 0} { set etat [lindex $line 0] set qui [lindex $line 1] set type [lindex $line 2] set nom [lindex $line 3] set infos [lrange $line 4 end] incr num if $etat { set msg "3" } else { set msg "4" } putdcc $idx " ¤ [ajouter_espaces $num 2] $msg [ajouter_espaces $qui 10] $type [ajouter_espaces $nom 10] : $infos" } close $f putdcc $idx "_____________________________________________________" return 1 } ######################################## # .redirections bind dcc T redirections dcc_redirections proc dcc_redirections {hand idx args} { set args [lindex $args 0] set action [lindex $args 0] set source [string tolower [lindex $args 1]] set dest [string tolower [lindex $args 2]] set infos [lrange $args 3 end] if {$action == "+"} { if {[string match *@* $source] | ![string match *@* $dest]} { putdcc $idx "Mauvais format!" return 0 } exec echo "$source $dest $infos" >> aliases.sur.aide.igt.net exec echo "$source\: $dest" >> /etc/mail/redirections.aliases } elseif {$action == "-"} { if ![estunnombre:ok $source] { putdcc $idx "Vous devez fournir le numéro de la redirection à effacer." return 0 } set num 0 set f [open aliases.sur.aide.igt.net r] set g [open aliases.sur.aide.igt.net.tmp w] exec echo "# Liste des alias du .redirections dans AideBot #" > /etc/mail/redirections.aliases while {[gets $f line] >= 0} { incr num if {$num != $source} { puts $g $line exec echo "[lindex $line 0]\: [lindex $line 1]" >> /etc/mail/redirections.aliases } } close $f close $g exec mv aliases.sur.aide.igt.net.tmp aliases.sur.aide.igt.net } elseif {$action == ""} { } else { putdcc $idx "## Syntaxe: .redirections + " putdcc $idx " .redirections - <##> (retire l'élément)" putdcc $idx " .redirections (Lire la liste)" return 0 } putdcc $idx "___________________________________________________________________" putdcc $idx "Liste des adresse de courriel redirigées depuis le serveur de #Aide:" putdcc $idx "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" putdcc $idx " ## @aide.igt.net DESTINATION : EXPLICATIONS" putdcc $idx "" set num 0 set f [open aliases.sur.aide.igt.net r] while {[gets $f line] >= 0} { set source [lindex $line 0] set dest [lindex $line 1] set infos [lrange $line 2 end] incr num putdcc $idx " ¤ [ajouter_espaces $num 2] [ajouter_espaces "$source ->" 17] [ajouter_espaces $dest 25] : $infos" } close $f putdcc $idx "___________________________________________________________________" return 1 } ################################# # Scan automatique des logs ... bind dcc A scanlog dcc_scanlog proc dcc_scanlog {hand idx args} { set nick [hand2nick $hand] if {$nick == ""} { putdcc $idx "Désolé, mais je ne te vois pas sur un canal où je suis..." return 0 } set args [lindex $args 0] if {[string length $args] < 4} { putdcc $idx "## Syntaxe: .scanlog " return 0 } exec echo "Résultat de la recherche sur les logs canal d'aujourd'hui et d'hier sur l'expression «$args»" > scanlog.txt exec echo " " >> scanlog.txt exec echo " " >> scanlog.txt exec echo "***** ***** ***** ***** ***** * Aujourd'hui * ***** ***** ***** ***** *****" >> scanlog.txt exec echo " " >> scanlog.txt catch [exec grep -A 20 -i "$args" canal-aide.log >> scanlog.txt] exec echo " " >> scanlog.txt exec echo " " >> scanlog.txt exec echo "***** ***** ***** ***** ***** * Hier * ***** ***** ***** ***** *****" >> scanlog.txt exec echo " " >> scanlog.txt catch [exec grep -A 20 -i "$args" canal-aide.log.yesterday >> scanlog.txt] putdcc $idx "Voilà, j'envoi le log à $nick par DCC SEND" dccsend scanlog.txt $nick return 1 } ################################# # .membership bind dcc p membership dcc_membership proc dcc_membership {hand idx args} { putdcc $idx "Changements récents dans le membership de #Aide (dernier mois)" putdcc $idx "-----------------------------------------------" putdcc $idx "Arrivées:" foreach user [userlist M] { if {[getuser $user xtra prom] > [expr [unixtime] - 2592000]} { putdcc $idx " \[[dire_date [getuser $user xtra prom]]\] [getuser $user xtra vrainick]" } } putdcc $idx "Départs:" foreach user [userlist XY] { if {[getuser $user xtra prom] > [expr [unixtime] - 2592000]} { putdcc $idx " \[[dire_date [getuser $user xtra prom]]\] [getuser $user xtra vrainick]" } } putdcc $idx "-----------------------------------------------" return 1 } ################################################## #### Gestion de la page d'accueil de #Aide ### ################################################## bind dcc A pageweb dcc_pageweb proc dcc_pageweb {hand idx args} { set args [lindex $args 0] set type [string tolower [lindex $args 0]] if {![matchattr $hand G] & ($type != "") & !(($type == "projets") & [matchattr $hand T])} { putdcc $idx "Vous n'avez pas accès à ce type de modifications." return 0 } set action [lindex $args 1] set reste [lrange $args 2 end] set f [open accueil.page.web r] set num(aide) 0 set num(outils) 0 set num(projets) 0 while {[gets $f line] >= 0} { set intype [lindex $line 0] incr num($intype) set page($intype,$num($intype)) "{[lindex $line 1]} {[lindex $line 2]} {[lindex $line 3]}" } close $f if {[lsearch "aide outils projets" $type] == -1} { set action "" } if {$action == "+"} { set titre [lrange [lindex [split [lindex [split $reste +] 0] =] 0] 0 end] set url [lrange [lindex [split [lindex [split $reste +] 0] =] 1] 0 end] set texte [lrange [lindex [split $reste +] 1] 0 end] incr num($type) set page($type,$num($type)) "{$titre} {$url} {$texte}" } elseif {$action == "-"} { if {![estunnombre:ok $reste] | ($reste < 1) | ($reste > $num($type))} { putdcc $idx "Erreur de formulation ..." return 0 } for {set i $reste} {$i < $num($type)} {incr i} { set page($type,$i) $page($type,[expr $i + 1]) } set num($type) [expr $num($type) - 1] } elseif [estunnombre:ok $action] { if {$reste == "-"} { set action [expr $action - 1] } if {($action < 1) | ($action >= $num($type))} { putdcc $idx "Erreur de formulation ..." return 0 } set buf $page($type,$action) set page($type,$action) $page($type,[expr $action + 1]) set page($type,[expr $action + 1]) $buf } else { putdcc $idx "État actuel de la page d'accueil de #Aide selon mes registres:" putdcc $idx "--------------------------------------------------------------" foreach letype "aide outils projets" { putdcc $idx "Section [string toupper $letype]:" for {set i 1} {$i <= $num($letype)} {incr i} { putdcc $idx " $i: [lindex $page($letype,$i) 0]" } } putdcc $idx "--------------------------------------------------------------" putdcc $idx "## Syntaxe: .pageweb + \[= \] + " putdcc $idx "## Syntaxe: .pageweb - <#>" putdcc $idx "## Syntaxe: .pageweb <#> <+|->" return 0 } set f [open accueil.page.web w] foreach letype "aide outils projets" { for {set i 1} {$i <= $num($letype)} {incr i} { set buf $letype append buf " $page($letype,$i)" puts $f $buf } } close $f ## Écrire la page ici! set fs [open /aide/www/index.source.htm r] set fd [open /aide/www/index.htm w] while {[gets $fs line] >= 0} { puts $fd $line foreach section "aide outils projets" { if {$line == ""} { for {set i 1} {$i < 6} {incr i} { gets $fs cycle($i) } for {set i 1} {$i <= $num($section)} {incr i} { puts $fd $cycle(1) if {[lindex $page($section,$i) 1] != ""} { if {$section == "projets"} { set pro "target='_blank'" } else { set pro "" } set avant "" set apres "" } else { set avant "" set apres "" } puts $fd "$avant[lindex $page($section,$i) 0]$apres" puts $fd $cycle(3) puts $fd [lindex $page($section,$i) 2] puts $fd $cycle(5) } } } } close $fs close $fd return 1 }