############################################ # Tableau d'honneur des membres! :-) proc lire_tableau { } { global tableaudhonneur set i 0 set f [open "tableau.dhonneur" r] while {[gets $f line] >= 0} { incr i set tableaudhonneur($i,date) [lindex $line 0] set tableaudhonneur($i,hand) [lindex $line 1] set tableaudhonneur($i,minutes) [lindex $line 2] set tableaudhonneur($i,lignes) [lindex $line 3] gets $f line set tableaudhonneur($i,part) [lindex $line 0] set tableaudhonneur($i,projets) [lindex $line 1] } close $f set tableaudhonneur(0) $i set tableaudhonneur(vieux) "" foreach user [userlist AGTCOJPRM-H] { lappend tableaudhonneur(vieux) "[getuser $user xtra vrainick] [getuser $user xtra date]" } set tableaudhonneur(vieux) [lrange [classement $tableaudhonneur(vieux) "+"] 0 24] } utimer 5 lire_tableau bind dcc p tableau-d'honneur dcc_tabhon proc dcc_tabhon {hand idx args} { global tableaudhonneur set bord 0 putdcc $idx " " putdcc $idx "/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\" putdcc $idx "\\ * * * /" putdcc $idx "/ * * * * * * \\" putdcc $idx "\\ _/ _/ _/_/ _/ _/_/_/ _/_/_/ * /" putdcc $idx "/ * _/_/_/_/_/ _/ _/ _/ _/ _/ _/ * \\" putdcc $idx "\\ * _/ _/ _/_/_/ _/ _/ _/ _/_/ /" putdcc $idx "/ _/_/_/_/_/ _/ _/ _/ _/ _/ _/ * * \\" putdcc $idx "\\ _/ _/ _/ _/ _/ _/_/_/ _/_/_/ /" putdcc $idx "/ * * * * * \\" putdcc $idx "\\ * * * /" putdcc $idx "/ * \\" putdcc $idx "\\ ... Nos vieux de la vielle ... /" putdcc $idx "/ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ \\" putdcc $idx "\\ (la tête pleine de souvenirs !) /" putdcc $idx "/ \\" foreach user [lrange $tableaudhonneur(vieux) 0 14] { incr bord if ![expr $bord % 2] {set x "/"; set y "\\"} {set x "\\"; set y "/"} putdcc $idx "[ajouter_espaces "$x [ajouter_espaces [dire_delai [expr [unixtime] - [lindex $user 1]]] 25] *** [ajouter_espaces [lindex $user 0] 9] ***" 54] $y" } putdcc $idx "/ \\" for {set i 15} {$i < 25} {set i [expr $i +5]} { incr bord if [expr $bord % 2] {set x "/"; set y "\\"; set z " et de "} {set x "\\"; set y "/"; set z "Suivis de:"} set suite "" foreach user [lrange $tableaudhonneur(vieux) $i [expr $i +4]] { append suite "[lindex $user 0] " } putdcc $idx "[ajouter_espaces "$x $z [ajouter_espaces $suite 43]" 54] $y" } putdcc $idx "\\ /" putdcc $idx "/ ... Nos membres honoraires ... \\" putdcc $idx "\\ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ /" putdcc $idx "/ (qui ont aidé à bâtir le canal !) \\" putdcc $idx "\\ /" foreach user [userlist H] { incr bord if ![expr $bord % 2] {set x "/"; set y "\\"} {set x "\\"; set y "/"} putdcc $idx "$x [ajouter_espaces "¤¤¤ [ajouter_espaces [getuser $user xtra vrainick] 9] ¤¤¤" 25] ([dire_date [getuser $user xtra date]] à [dire_date [getuser $user xtra prom]]) $y" } if ![expr $bord % 2] { putdcc $idx "\\ /" } putdcc $idx "/ \\" putdcc $idx "\\ ... Nos meilleurs aidants ... /" putdcc $idx "/ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ \\" putdcc $idx "\\ (nos accrocs de la générosité !) /" putdcc $idx "/ \\" for {set i 1} {$i <= $tableaudhonneur(0)} {incr i} { putdcc $idx "\\ Semaine du [dire_date $tableaudhonneur($i,date)]: -= [ajouter_espaces $tableaudhonneur($i,hand) 9] =- ° [ajouter_espaces "[dire_delai [expr $tableaudhonneur($i,minutes) * 60]]" 11] ° /" putdcc $idx "/ ° [ajouter_espaces "$tableaudhonneur($i,lignes) lignes" 11] ° \\" } putdcc $idx "\\ /" putdcc $idx "/ \\" putdcc $idx "\\ ... Nos meilleurs participants projet ... /" putdcc $idx "/ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ \\" putdcc $idx "\\ (nos accrocs des projets d'aide !) /" putdcc $idx "/ \\" for {set i 1} {$i <= $tableaudhonneur(0)} {incr i} { incr bord if ![expr $bord % 2] {set x "/"; set y "\\"} {set x "\\"; set y "/"} putdcc $idx "$x Semaine du [dire_date $tableaudhonneur($i,date)]: -= [ajouter_espaces $tableaudhonneur($i,part) 9] =- $y" foreach projet $tableaudhonneur($i,projets) { incr bord if ![expr $bord % 2] {set x "/"; set y "\\"} {set x "\\"; set y "/"} putdcc $idx "$x [ajouter_espaces "° $projet °" 39] $y" } } if [expr $bord % 2] { putdcc $idx "/ \\" } putdcc $idx "\\ /" putdcc $idx " \\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/" putdcc $idx " " return 1 } ######################################## # Choix participants de la semaine et etc. bind time - "01 00 * * *" time_supernote_timers proc time_supernote_timers {a b c d e} { if {[lindex [ctime [unixtime]] 0] == "Thu"} { time_supernote } if {[lindex [ctime [unixtime]] 0] == "Sun"} { time_superpart } } proc time_supernote { } { exec echo "# Fichier des super participants --- COMPILATION #" > super.participants foreach user [userlist R] { sendnote AideBot $user "Petit rappel! Si tu veux proposer un de tes participants à ton projet comme 'Participant de la semaine', fais le .super . Tu as jusqu'à samedi soir minuit HDB pour le faire et tu peux changer ta sélection jusque là, alors choisis rapidement!." } } bind dcc RT super dcc_super proc dcc_super {hand idx args} { set jour [lindex [ctime [unixtime]] 0] set args [lindex $args 0] set qui [lindex $args 0] set projet [lrange $args 1 end] if {($qui == "+") & [matchattr $hand T]} { if {$jour != "Sun"} { putdcc $idx "Cette fonction n'est disponible que le dimanche!" return 0 } putdcc $idx "Voici les candidats possibles ..." putdcc $idx "-----------------------------" set num 0 set f [open super.participants r] gets $f line while {[gets $f line] > 0} { incr num putdcc $idx " $num [lindex $line 0] pour: [lindex $line 1]" } close $f if {$projet != ""} { if ![estunnombre:ok $projet] { putdcc $idx "" putdcc $idx "Vous devez choisir le numéro de la ligne ..." return 0 } if {($projet < 1) | ($projet > $num)} { putdcc $idx "" putdcc $idx "Numéro de ligne invalide ..." return 0 } putdcc $idx "" putdcc $idx "Fort bien, votre choix, le #$projet, a été enregistré." setuser $hand xtra choixSUPER "[unixtime] $projet" } putdcc $idx "" putdcc $idx "## Syntaxe: .super (vendredi ou samedi uniquement)" putdcc $idx "## Syntaxe admin: .super + \[numéro de ligne\] (dimanche uniquement)" return 1 } else { if {($jour != "Thu") & ($jour != "Fri") & ($jour != "Sat")} { putdcc $idx "Les propositions comme participants de la semaine ne sont acceptées qu'entre le jeudis et les samedis." putdcc $idx "## Syntaxe: .super (vendredi ou samedi uniquement)" if [matchattr $hand T] { putdcc $idx "## Syntaxe admin: .super + \[numéro de ligne\] (dimanche uniquement)" } return 0 } if {![string match *[string tolower $projet]* [string tolower [getuser $hand xtra responsable]]] | ($projet == "")} { putdcc $idx "Tu n'es pas le responsable de ce projet ou ce projet n'existe pas." putdcc $idx "## Syntaxe: .super (vendredi ou samedi uniquement)" if [matchattr $hand T] { putdcc $idx "## Syntaxe admin: .super + \[numéro de ligne\] (dimanche uniquement)" } return 0 } if ![validuser $qui] { putdcc $idx "Je ne connais pas ce membre." putdcc $idx "## Syntaxe: .super (vendredi ou samedi uniquement)" if [matchattr $hand T] { putdcc $idx "## Syntaxe admin: .super + \[numéro de ligne\] (dimanche uniquement)" } return 0 } if {[lsearch "[string tolower "[getuser $qui xtra participant] [getuser $qui xtra adjoint]"]" [string tolower $projet]] == -1} { putdcc $idx "Ce membre n'est pas un 'participant' à ce projet." putdcc $idx "## Syntaxe: .super (vendredi ou samedi uniquement)" if [matchattr $hand T] { putdcc $idx "## Syntaxe admin: .super + \[numéro de ligne\] (dimanche uniquement)" } return 0 } exec echo "[getuser $qui xtra vrainick] $projet" >> super.participants putdcc $idx "Oki, $qui a été pris en note comme participant de la semaine pour le projet $projet." return 1 } } proc time_superpart { } { set proj(liste) "" set f [open super.participants r] gets $f line while {[gets $f line] > 0} { set p [lrange $line 1 end] if ![string match *[string tolower $p]* $proj(liste)] { lappend proj(liste) $p } set proj($p) [lindex $line 0] } if {$proj(liste) == ""} { # Aucune nomination lappend proj(liste) "aucun aucun" } close $f set super(liste) "" foreach p $proj(liste) { if ![string match "* $proj($p) *" " $super(liste) "] { lappend super(liste) $proj($p) } lappend super($proj($p)) $p } foreach s $super(liste) { lappend liste "{{$s} {$super($s)}} [llength $super($s)]" } set liste [classement $liste -] set lim [lindex [lindex $liste 0] 1] foreach s $liste { if {$lim == [lindex $s 1]} { lappend finale [lindex $s 0] } } exec echo "# Fichier des super participants --- FIN #" > super.participants foreach f $finale { exec echo "[lindex $f 0] [lindex $f 1]" >> super.participants } if {[llength $finale] > 1} { foreach user [userlist T-G] { sendnote AideBot $user "Petit rappel. Les responsables projets ont proposé plusieurs participants de la semaine à un nombre égal de fois. Vous avez jusqu'à ce soir minuit HDB pour départager les choix. (En cas de nouvelle égalité, le premier vote entré sera déterminant.) La commande est le .super + \[numéro\]." } } else { foreach user [userlist T] { setuser $user xtra choixSUPER "0 1" } } } # appelé par le .meilleur du dimanche soir 23h57 ... proc time_superpartfin { } { set num 0 set votes " " set premier "[unixtime] 0" foreach admin [userlist T] { if {[getuser $admin xtra choixSUPER] != ""} { if [string match "* [lindex [getuser $admin xtra choixSUPER] 1] *" $votes] { # Ici on a un 2e vote en faveur du même candidat, il gagne! set num [lindex [getuser $admin xtra choixSUPER] 1] } append votes "[lindex [getuser $admin xtra choixSUPER] 1] " if {[lindex [getuser $admin xtra choixSUPER] 0] < [lindex $premier 0]} { set premier [getuser $admin xtra choixSUPER] } setuser $admin xtra choixSUPER } } if {$num == 0} { # Pas de vote majoritaire donc premier vote entré. set num [lindex $premier 1] } if {$num == 0} { # Pas eu de vote d'admin et égalité. set membre "aucun" set projets "-" } else { set go 0 set f [open super.participants r] gets $f line while {[gets $f line] > 0} { incr go if {$num == $go} { set membre [lindex $line 0] set projets [lrange $line 1 end] } } close $f setuser AideBot XTRA partdelasemaine "* Meilleur participant: 1-$membre pour [lrange $projets 0 end]" exec echo "$membre \{$projets\}" >> tableau.dhonneur if [validuser $membre] { chattr $membre +K } } } ########################## # palmares bind dcc p palmares dcc_palmares proc dcc_palmares {hand idx args} { set args [string tolower [lindex $args 0]] set type [lindex $args 0] set qui [lindex $args 1] set liste [getuser AideBot xtra PALMARES] set ancien(aidant) [lindex [lindex $liste 1] 0] set ancien(projet) [lindex [lindex $liste 2] 0] set ancien(op) [lindex [lindex $liste 3] 0] set ancien(parrain) [lindex [lindex $liste 4] 0] set ancien(admin) [lindex [lindex $liste 5] 0] if {$type == ""} { set f [open palmares.compilation r] gets $f line set nv 0 set avote "" while {[gets $f line] > 0} { set lui [lindex $line 0] incr nv if {[lsearch $avote $lui] == -1} { lappend avote $lui } } close $f set pasvote "" foreach membre [userlist pSW] { if {[lsearch $avote $membre] == -1} { lappend pasvote [getuser $membre xtra vrainick] } } putdcc $idx "" putdcc $idx "" putdcc $idx " +++ +++ +++ +++ Voici le palmarès du mois «[lindex [lindex $liste 0] 0] [lindex [lindex $liste 0] 1]» +++ +++ +++ +++" putdcc $idx "" putdcc $idx "" putdcc $idx " Aidant(e) par excellence: [ajouter_espaces [lindex [lindex $liste 1] 0] 15] ([lindex [lindex $liste 1] 1]x)" putdcc $idx " Responsable ou participant(e) projet: [ajouter_espaces [lindex [lindex $liste 2] 0] 15] ([lindex [lindex $liste 2] 1]x)" putdcc $idx " Opérateur(trice) canal: [ajouter_espaces [lindex [lindex $liste 3] 0] 15] ([lindex [lindex $liste 3] 1]x)" putdcc $idx " Parrain ou Marraine: [ajouter_espaces [lindex [lindex $liste 4] 0] 15] ([lindex [lindex $liste 4] 1]x)" putdcc $idx " Admin: [ajouter_espaces [lindex [lindex $liste 5] 0] 15] ([lindex [lindex $liste 5] 1]x)" putdcc $idx "" putdcc $idx "" putdcc $idx " +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++" putdcc $idx "" putdcc $idx "" putdcc $idx "-----" putdcc $idx "Pour ce mois-ci, $nv choix ont été entrés par [llength $avote] membres." putdcc $idx "Les membres suivants n'ont pas encore entré leur choix au palmarès dans l'une ou l'autre des catégorie:" putdcc $idx "$pasvote" putdcc $idx "-----" return 1 } elseif ![validuser $qui] { putdcc $idx "Qui ça? Je ne vois pas de membre portant actuellement ce nom... :-/" return 0 } elseif {$qui == [string tolower $hand]} { putdcc $idx "Ha, non non non, on ne peut pas voter pour soi au palmarès des membres :-p" return 0 } elseif {[lsearch $ancien($type) [getuser $qui xtra vrainick]] != -1} { putdcc $idx "Je comprends que tu apprécies son travail, mais une personne ne peut pas être nominé dans la même catégorie deux mois de suite! :o)" return 0 } elseif [string match "* $type *" " admin parrain op projet aidant "] { if {(($type == "admin") & [matchattr $qui A]) | (($type == "parrain") & [matchattr $qui E-A]) | (($type == "op") & [matchattr $qui O-A]) | (($type == "projet") & [matchattr $qui RP]) | (($type == "aidant") & [matchattr $qui pW])} { putdcc $idx "Oki, choix enregistré: $qui dans la catégorie $type." exec echo "[getuser $hand xtra vrainick] $type [getuser $qui xtra vrainick]" >> palmares.compilation putlog "#$hand# palmares ..." } else { putdcc $idx "Le type et le choix ne correspondent pas à une possibilité valide." } return 0 } else { putdcc $idx "## Syntaxe: .palmares (Pour voir le palmares du mois passé.)" putdcc $idx "## Syntaxe: .palmares (Pour encourager une personne par catégorie.)" return 0 } } bind time - "00 12 01 * *" time_palmares proc time_palmares {min hour day month annee} { exec mv palmares.compilation palmares.compilation.tmp exec echo "X bot AideBot" > palmares.compilation set f [open palmares.compilation.tmp r] while {[gets $f line] > 0} { set hand [lindex $line 0] set type [lindex $line 1] set qui [lindex $line 2] set votes($type,$hand) $qui } close $f foreach type "aidant projet parrain op admin" { set comp($type,liste) "" foreach hand [userlist p] { if [info exist votes($type,$hand)] { set qui $votes($type,$hand) lappend comp($type,$qui) $hand if ![string match "* $qui *" " $comp($type,liste) "] { lappend comp($type,liste) $qui } } } } foreach type "aidant projet parrain op admin" { lappend classe($type) "Aucun 0" foreach qui $comp($type,liste) { lappend classe($type) "$qui [llength $comp($type,$qui)]" } set classe($type) [classement $classe($type) -] set gagnant($type) [lindex $classe($type) 0] foreach item [lrange $classe($type) 1 end] { if {[lindex $item 1] == [lindex $gagnant($type) 1]} { set gagnant($type) "{[lindex $gagnant($type) 0] \& [lindex $item 0]} {[lindex $gagnant($type) 1]}" } } } set mois [quelmois $month] if {$month == 1} { set annee [expr annee - 1] set mois [quelmois 12] } setuser AideBot xtra palmares "{$mois $annee} {$gagnant(aidant)} {$gagnant(projet)} {$gagnant(op)} {$gagnant(parrain)} {$gagnant(admin)}" news_add "AideBot" "dcc" "AideBot" "&general" "[unixtime] Bonjour! Le palmarès de «$mois $annee» est maintenant sorti! Utilisez .palmares pour voir les membres qui ont été primés par l'équipe. Ils obtiendront un .dehors et leur noms resteront affichés pour un mois. Félicitations à tous les primés! Vous pouvez dès maintenant et jusqu'au 1er du mois prochain à midi vous prononcer dans 5 catégories. (.palmares ?)" dccputchan 0 "Hé, le parmarès du mois est sorti! (.palmares) ***" foreach type "aidant projet parrain op admin" { foreach g [lindex $gagnant($type) 0] { if [validuser $g] { sendnote AideBot $g "Hey! Bravo! Tu es dans le palmarès du mois dans la catégorie «$type». Toutes nos félécitations!! Continue ton bon travail et merci de ton implication qui est fort appréciée des membres. (.palmares) (Voici un .dehors en prime!!)" chattr $g +K } } } } bind time - "00 12 26 * *" time_palmares_rappel proc time_palmares_rappel {min hour day month annee} { news_add "AideBot" "dcc" "AideBot" "&general" "[unixtime] Hé! Il vous ne reste plus que jusqu'au 1er du mois prochain à midi pour vous prononcer sur 5 catégories de membres que vous voudriez peut-être encourager. (.palmares ?)" foreach user [userlist p] { sendnote AideBot $user "Bonjour toi! :o) Savais-tu qu'il ne te reste plus que jusqu'au 1er du mois prochain à midi pour participer au choix du palmarès du mois? :o) Il y a 5 catégories dans lesquelles tu peux encourager ceux qui, à ton avis, sont les meilleurs membres! Les choix de chacun sont 100% secrets. «.palmares ?»" } }