################################# ## .votes bind dcc A votes dcc_votes proc dcc_votes {hand idx args} { set args [lindex $args 0] set type [lindex $args 0] if {$type == ""} { putdcc $idx "## Syntaxe: .votes " putdcc $idx " QUOI PARAMÈTRES PAR QUI POUR QUOI" putdcc $idx " NombreOps: Admin canal Nombre d'ops canal." putdcc $idx " PlusOps: Automatique! Pour de nouveaux ops." putdcc $idx " Admcan: Admin général Nommer nouvel admin canal." putdcc $idx " Admproj: Admin général Nommer nouvel admin projet." putdcc $idx " Proj: Admin projets Établir un nouveau projet." putdcc $idx " Resp: Admin projets Attribuer un projet à un responsable." putdcc $idx " Honoraire: Admin général Nomination comme membre honoraire." putdcc $idx " Retour: Admin (général?) Retour d'un ancien membre." putdcc $idx " Exclusion: Admin (général?) Demande d'exclusion d'un membre." putdcc $idx " Fantome: Admin responsable Demande d'exclusion d'un fantome." putdcc $idx " Parrain: Admin responsable Nomination comme parrain." putdcc $idx " Ref: <#canal> Admin responsable Ajout à la liste des références." putdcc $idx " Avis: Admin général Question d'ordre général." putdcc $idx " Infos: Admins État des votes en cour." putdcc $idx " Stop: Admins généraux Permet d'annuler un vote." putdcc $idx " N.B.: - Le '#' est un nombre arbitraire attribué à certains votes, selon la séquence." putdcc $idx " - Les commandes notées (général?) sont accessibles à tous les admins pour cas urgents uniquement." return 0 } switch [string tolower $type] { "nombreops" { if {[getuser AideBot xtra vote_nombreops] != ""} { putdcc $idx "Hum, il y a déjà un vote pour le nombre d'ops en cours..." return 0 } set nombre [lindex $args 1] if ![estunnombre:ok $nombre] { putdcc $idx "Vous devez fournir un nombre! (Nombre actuel: [getuser AideBot xtra nombreops])" return 0 } set actuel [expr [llength [userlist OJA]] - [llength [userlist A]]] set normal [getuser AideBot xtra nombreops] setuser AideBot xtra vote_nombreops "168 24 $nombre $actuel $normal" foreach user [userlist A] { sendnote AideBot $user "VOTE: $hand a lancé un vote sur le nombre d'op à avoir sur #Aide. Le nombre proposé est \[$nombre\], le nombre actuel d'op et d'adjoints est \[$actuel\] et devrait normalment être \[$normal\]. Vote rapidement STP" } return 1 } "plusops" { if {[getuser AideBot xtra vote_ops] != ""} { putdcc $idx "Hum, il y a déjà un vote pour de nouveaux ops en cours..." return 0 } set nombre [lindex $args 1] if ![estunnombre:ok $nombre] { putdcc $idx "Vous devez fournir un nombre." return 0 } set candidats "" set handdescandidats "" set pasdispo "" foreach user [userlist M] { if {[getuser $user xtra futur] != ""} { if {[getuser $user xtra statsdispomoy] < 5} { lappend pasdispo $user } else { lappend candidats [getuser $user xtra vrainick] lappend handdescandidats $user } } } if {!($nombre < [llength $candidats])} { putdcc $idx "Hu ho... il y a quelque chose d'étrange là... il n'y a pas assez de candidats possibles pour un tel vote..." return 0 } setuser AideBot xtra vote_ops "168 0 $nombre $candidats" news_add "AideBot" "dcc" "AideBot" "#aide" "[unixtime] VOTE: Il y a un vote en cours depuis le [date] à [time] pour nommer $nombre op(s) parmi les candidats suivants: -> $candidats <- Vous pouvez voter au moyen de la commande .vote ops (de 1 à $nombre candidats)" foreach user $pasdispo { sendnote AideBot $user "VOTE: Un nouveau vote a été lancé, tu étais sur la liste de candidature (tu avais entré un .futur op), mais ces temps-ci tu n'est vraiment pas très disponible (sur le canal et/ou le bot). Dès que tu seras un peu plus présent, je t'encourage à refaire un .futur op (IMPORTANT) et tu seras alors dans le prochain vote." setuser $user xtra futur } foreach user $handdescandidats { sendnote AideBot $user "VOTE: Tu as été mis en candidature pour le(s) poste(s) d'opérateur canal qui s'est (se sont) ouvert(s). Bravo!" } foreach user [userlist OJ-A] { sendnote AideBot $user "VOTE: Il y a un vote en cours depuis le [date] à [time] pour nommer $nombre op(s) parmi les candidats suivants: \[$candidats\] En tant qu'op ou op adjoint, tu as le devoir de voter au moyen de la commande .vote ops (de 1 à $nombre candidats)" } foreach user [userlist A] { sendnote AideBot $user "VOTE: $hand a lancé un vote pour trouver $nombre nouvel(aux) op(s)." } return 1 } "admcan" { if {[getuser AideBot xtra vote_admcan] != ""} { putdcc $idx "Hum, il y a déjà un vote pour un poste d'admin canal." return 0 } set candidats "" foreach user [userlist O-A] { lappend candidats [getuser $user xtra vrainick] } setuser AideBot xtra vote_admcan "168 24 $candidats" foreach user [userlist A] { sendnote AideBot $user "VOTE: $hand a lancé un vote pour déterminer un nouveal Admin canal, les candidats (ops actuels) sont: \[$candidats\]. Vote rapidement STP. (Il y aura un deuxième tour si le vote n'est pas concluant)" } return 1 } "admproj" { if {[getuser AideBot xtra vote_admproj] != ""} { putdcc $idx "Hum, il y a déjà un vote pour un poste d'admin projet." return 0 } set candidats "" foreach user [userlist R-A] { lappend candidats [getuser $user xtra vrainick] } foreach user [userlist P-A] { lappend candidats [getuser $user xtra vrainick] } setuser AideBot xtra vote_admproj "168 24 $candidats" foreach user [userlist A] { sendnote AideBot $user "VOTE: $hand a lancé un vote pour déterminer un nouveal Admin projet, les candidats (responsables et participants de projet) sont: \[$candidats\]. Vote rapidement STP. (Il y aura un deuxième tour si le vote n'est pas concluant)" } return 1 } "infos" { putdcc $idx " §§§ Voici les votes en cours ... §§§ " if {[getuser AideBot xtra vote_nombreops] == ""} { # putdcc $idx " -> Il n'y a pas de vote pour le nombre d'ops en cours." } else { set levote [getuser AideBot xtra vote_nombreops] putdcc $idx " -> Il y a un vote en cours pour savoir si [lindex $levote 2] serait un bon nombre d'ops." putdcc $idx " Au moment du vote, le nombre d'ops était de [lindex $levote 3] (normalement [lindex $levote 4])" putdcc $idx " Il reste maintenant environ [lindex $levote 0] heure(s) au vote." set pours "" set contres "" foreach user [userlist A] { if {[getuser $user xtra vote_nombreops] == "pour"} { lappend pours [getuser $user xtra vrainick] } if {[getuser $user xtra vote_nombreops] == "contre"} { lappend contres [getuser $user xtra vrainick] } } set avantdebut [lindex $levote 1] if [string match *[getuser $hand xtra vrainick]* "$pours $contres"] { set coul "3" } else { set coul "4" } if $avantdebut { putdcc $idx " Il reste $avantdebut heure(s) avant de pouvoir enregistrer votre vote." } else { putdcc $idx " $coul Vous pouvez maintenant enregistrer ou modifier votre vote. " } putdcc $idx " * Pour(s): $pours" putdcc $idx " * Contre(s): $contres" } if {[getuser AideBot xtra vote_admcan] == ""} { # putdcc $idx " -> Il n'y a pas de vote pour un nouvel admin canal en cours." } else { set levote [getuser AideBot xtra vote_admcan] putdcc $idx " -> Il y a un vote en cours pour trouver un nouvel admin canal..." putdcc $idx " Les candidats sont: [lrange $levote 2 end]" putdcc $idx " Il reste maintenant environ [lindex $levote 0] heure(s) au vote, sauf s'il y a unanimité." set candidats [lrange $levote 2 end] set coul "4" foreach cand $candidats { set pours "" foreach admin [userlist A] { if {[string tolower $cand] == [string tolower [getuser $admin xtra vote_admcan]]} { lappend pours [getuser $admin xtra vrainick] } } if {$pours != ""} { putdcc $idx " * $cand : $pours" if [string match *[getuser $hand xtra vrainick]* $pours] { set coul "3" } } } set avantdebut [lindex $levote 1] if $avantdebut { putdcc $idx " Il reste $avantdebut heure(s) avant de pouvoir enregistrer votre vote." } else { putdcc $idx " $coul Vous pouvez maintenant enregistrer ou modifier votre vote. " } } if {[getuser AideBot xtra vote_admproj] == ""} { # putdcc $idx " -> Il n'y a pas de vote pour un nouvel admin projet en cours." } else { set levote [getuser AideBot xtra vote_admproj] putdcc $idx " -> Il y a un vote en cours pour trouver un nouvel admin projet..." putdcc $idx " Les candidats sont: [lrange $levote 2 end]" putdcc $idx " Il reste maintenant environ [lindex $levote 0] heure(s) au vote, sauf s'il y a unanimité." set candidats [lrange $levote 2 end] set coul "4" foreach cand $candidats { set pours "" foreach admin [userlist A] { if {[string tolower $cand] == [string tolower [getuser $admin xtra vote_admproj]]} { lappend pours [getuser $admin xtra vrainick] } } if {$pours != ""} { putdcc $idx " * $cand : $pours" if [string match *[getuser $hand xtra vrainick]* $pours] { set coul "3" } } } set avantdebut [lindex $levote 1] if $avantdebut { putdcc $idx " Il reste $avantdebut heure(s) avant de pouvoir enregistrer votre vote." } else { putdcc $idx " $coul Vous pouvez maintenant enregistrer ou modifier votre vote. " } } set oki 0 for {set i 0} {$i < 100} {incr i} { set levote [getuser AideBot xtra vote_num_$i] if {$levote != ""} { set oki 1 putdcc $idx " -> Le vote -> #$i <- «[lindex $levote 2]» suivant est en cours:" switch [string tolower [lindex $levote 2]] { "proj" { putdcc $idx " * PROJET: '[lrange $levote 3 end]'" } "resp" { putdcc $idx " * RESPONSABLE: '[lindex $levote 3]'" putdcc $idx " PROJET: '[lrange $levote 4 end]'" } "honoraire" { putdcc $idx " * CANDIDAT: '[lindex $levote 3]'" } "retour" { putdcc $idx " * EX-MEMBRE: '[lindex $levote 3]'" } "exclusion" { putdcc $idx " * RENÉGAT: '[lindex $levote 3]'" } "fantome" { putdcc $idx " * FANTOME: '[lindex $levote 3]'" } "parrain" { putdcc $idx " * CANDIDAT: '[lindex $levote 3]'" } "ref" { putdcc $idx " * CANAL: '[lindex $levote 3]'" putdcc $idx " CATÉGORIE/RAISON: '[lrange $levote 5 end]'" putdcc $idx " AVIS: '[lindex $levote 4]'" } "avis" { putdcc $idx " * QUESTION: '[lrange $levote 3 end]'" } } putdcc $idx " Il reste maintenant environ [lindex $levote 0] heure(s) au vote, sauf s'il y a unanimité." set pours "" set contres "" foreach user [userlist A] { if {[getuser $user xtra vote_num_$i] == "pour"} { lappend pours [getuser $user xtra vrainick] } if {[getuser $user xtra vote_num_$i] == "contre"} { lappend contres [getuser $user xtra vrainick] } } if [string match *[getuser $hand xtra vrainick]* "$pours $contres"] { set coul "3" } else { set coul "4" } set avantdebut [lindex $levote 1] if $avantdebut { putdcc $idx " Il reste $avantdebut heure(s) avant de pouvoir enregistrer votre vote." } else { putdcc $idx " $coul Vous pouvez dès maintenant enregistrer ou modifier votre vote. " } putdcc $idx " + Pour(s): $pours" putdcc $idx " + Contre(s): $contres" } } if !$oki { # putdcc $idx " -> Il n'y a pas de vote de projets ou de responsables en cours." } if {[getuser AideBot xtra vote_ops] == ""} { # putdcc $idx " -> Il n'y a pas de vote pour un ou des nouveaux ops en cours." } else { set levote [getuser AideBot xtra vote_ops] set candidats [lrange $levote 3 end] putdcc $idx " -> Il y a un vote en cours pour trouver un ou des nouveaux opérateurs..." putdcc $idx " Les candidats sont: $candidats" putdcc $idx " [lindex $levote 2] membre(s) pourra(pourront) obtenir le poste." putdcc $idx " Il reste maintenant environ [lindex $levote 0] heure(s) au vote, sauf s'il y a unanimité." set uneliste "" foreach cand $candidats { set pours "" foreach user [userlist ACTGOJMRP] { if [string match *[string tolower $cand]* [string tolower [getuser $user xtra vote_ops]]] { lappend pours [getuser $user xtra vrainick] } } if {$pours != ""} { lappend uneliste "{{$cand} {$pours}} [llength $pours]" } } foreach user [classement $uneliste "-"] { putdcc $idx " * [ajouter_espaces "[lindex [lindex $user 0] 0] :" 11] \[[lindex $user 1]\] -> [lindex [lindex $user 0] 1]" } set napasvote "" foreach user [userlist ACTGOJPRM-H] { if {[getuser $user xtra vote_ops] == ""} { if [matchattr $user AGTCOJ] { lappend napasvote "[getuser $user xtra vrainick]" } else { lappend napasvote "[getuser $user xtra vrainick]" } } } putdcc $idx " ¤¤¤ N'ont pas voté \[[llength $napasvote]/[llength [userlist ACTGOJMRP]]\]: $napasvote" } putdcc $idx " *** *** *** *** *** " return 1 } "stop" { if ![matchattr $hand G] { putdcc $idx "Désolé, seul un admin général peut annuler un vote." return 0 } set type [string tolower [lindex $args 1]] if [estunnombre:ok $type] { if {[getuser Aidebot xtra vote_num_$type] == ""} { putdcc $idx "Hum, ce numéro n'est pas en utilisation, je ne peux donc pas arrêter ce vote!" } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_num_$type foreach user [userlist A] { setuser $user xtra vote_num_$type } return 1 } } else { switch $type { "nombreops" { if {[getuser Aidebot xtra vote_nombreops] == ""} { putdcc $idx "Hum, il n'y a pas de vote en cours au sujet du nombre d'ops." } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_nombreops foreach user [userlist A] { setuser $user xtra vote_nombreops } return 1 } } "plusops" { if {[getuser Aidebot xtra vote_ops] == ""} { putdcc $idx "Hum, il n'y a pas de vote en cours pour trouver un ou des nouveaux ops." } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_ops foreach user [userlist AGTCOJKRPM] { setuser $user xtra vote_ops } return 1 } } "admcan" { if {[getuser Aidebot xtra vote_admcan] == ""} { putdcc $idx "Hum, il n'y a pas de vote en cours pour trouver un nouvel admin canal." } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_admcan foreach user [userlist A] { setuser $user xtra vote_admcan } return 1 } } "admproj" { if {[getuser Aidebot xtra vote_admproj] == ""} { putdcc $idx "Hum, il n'y a pas de vote en cours pour trouver un nouvel admin projet." } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_admproj foreach user [userlist A] { setuser $user xtra vote_admproj } return 1 } } "ops" { if {[getuser Aidebot xtra vote_ops] == ""} { putdcc $idx "Hum, il n'y a pas de vote d'ops en ce moment." } else { putdcc $idx "Oki, j'annule ce vote." setuser Aidebot xtra vote_ops foreach user [userlist MRPJHOAGTC] { setuser $user xtra vote_ops } return 1 } } } } } default { if ![string match *[string tolower " $type "]* " proj resp honoraire retour parrain exclusion fantome ref avis "] { putdcc $idx "Hum, ce n'est pas un élément valable pour les 'votes'." return 0 } set num 1 while {[getuser AideBot xtra vote_num_$num] != ""} { incr num } switch [string tolower $type] { "proj" { set champ(noms) "projet" set champ(flag) "GT" set champ(duree) 120 set champ(delais) 0 set champ(projet) [lrange $args 1 end] set champ(note) "VOTE: $hand a lancé un vote pour déterminer si un nouveau projet serait acceptable, le nom en est: '$champ(projet)'. Veuillez voter pour ou contre au plut tôt merci! :-)" } "resp" { set champ(noms) "candidat projet" set champ(flag) "GT" set champ(duree) 120 set champ(delais) 0 set champ(candidat) [lindex $args 1] set champ(min) "MRPJO" set champ(projet) [lrange $args 2 end] set champ(note) "VOTE: $hand a lancé un vote pour déterminer si $champ(candidat) est un choix adéquat pour diriger le projet '$champ(projet)'. Veuillez voter pour ou contre au plut tôt merci! :-)" } "honoraire" { set champ(noms) "candidat" set champ(flag) "G" set champ(duree) 168 set champ(delais) 24 set champ(min) "MX" set champ(candidat) [lindex $args 1] set champ(note) "VOTE: $hand a lancé un vote pour déterminer si $champ(candidat) est un choix adéquat pour devenir un membre honoraire. Veuillez voter pour ou contre au plut tôt merci! :-)" } "retour" { set champ(noms) "candidat" set champ(flag) "A" set champ(duree) 72 set champ(delais) 0 set champ(candidat) [lindex $args 1] set champ(min) "X" set champ(note) "VOTE: $hand a lancé un vote pour déterminer si on devrait réintégrer (à sa demande) $champ(candidat) dans l'équipe. Veuillez voter pour ou contre au plut tôt merci! :-)" } "exclusion" { set champ(noms) "candidat" set champ(flag) "A" set champ(duree) 168 set champ(delais) 24 set champ(candidat) [lindex $args 1] set champ(min) "WSp-A" set champ(note) "VOTE: $hand a lancé un vote pour déterminer si on devrait EXCLURE (Pour causes majeures déjà évoquées) $champ(candidat) de l'équipe. Veuillez voter pour ou contre au plut tôt merci! :-)" } "fantome" { set champ(noms) "candidat" set champ(flag) "A" set champ(duree) 120 set champ(delais) 0 set champ(candidat) [lindex $args 1] set champ(min) "M-P" set champ(note) "VOTE: $hand a lancé un vote pour déterminer si on devrait RETIRER L'ACCÈS (Pour cause de participation insuffisante) à $champ(candidat) de l'équipe. Veuillez voter pour ou contre au plut tôt merci! :-)" } "parrain" { set champ(noms) "candidat" set champ(flag) "A" set champ(duree) 120 set champ(delais) 12 set champ(candidat) [lindex $args 1] set champ(min) "MRPJO-A" set champ(note) "VOTE: $hand a lancé un vote pour déterminer si $champ(candidat) est un choix adéquat pour devenir un membre parrain. Veuillez voter pour ou contre au plut tôt merci! :-)" } "ref" { set champ(noms) "canal avis categorie" set champ(flag) "A" set champ(duree) 48 set champ(delais) 0 set champ(canal) [lindex $args 1] set champ(avis) [lindex $args 2] set champ(categorie) [lrange $args 3 end] set champ(note) "VOTE: $hand propose de $champ(avis) la demande de référencement de $champ(canal) par #Aide (catégorie/raison: $champ(categorie)). Veuillez signaler si vous êtes contre cet avis au plut tôt svp! :-)" } "avis" { set champ(noms) "question" set champ(flag) "G" set champ(duree) [lindex $args 1] set champ(delais) 0 set champ(question) [lrange $args 2 end] set champ(note) "VOTE: $hand demande votre avis: «$champ(question)» (pour/contre)" } } foreach ch $champ(noms) { if {$champ($ch) == ""} { putdcc $idx "Hum, Je ne peux lancer un vote sans que tous les champs soient bien remplis... :-/ \[$ch\]" return 0 } } if ![matchattr $hand $champ(flag)] { putdcc $idx "Tu ne peux lancer un tel type de vote... :-/" return 0 } if ![estunnombre:ok $champ(duree)] { putdcc $idx "La durée du vote n'est pas entrée correctement... :-/" return 0 } if [string match *candidat* $champ(noms)] { if ![matchattr $champ(candidat) $champ(min)] { putdcc $idx "Désolé, mais $champ(candidat) n'est pas un candidat valable pour ce type de vote..." return 0 } } set inscription "$champ(duree) $champ(delais) $type" foreach ch $champ(noms) { append inscription " $champ($ch)" } setuser AideBot xtra vote_num_$num $inscription foreach user [userlist A] { sendnote AideBot $user $champ(note) } return 1 } } } ################################# ## Timers de vote ! bind time - "30 * * * *" votes_timer proc votes_timer {min hour day month year} { set lstuna "nombreops" for {set n 1} {$n <= 99} {incr n} { if {[getuser aidebot xtra vote_num_$n] != ""} { append lstuna " num_$n" } } set lst "ops admcan admproj $lstuna" foreach element $lst { set levote [getuser AideBot xtra vote_$element] set reste [lindex $levote 0] if {$reste == ""} { } elseif {$reste == 1} { finduvote $element $levote } else { set reste [expr $reste - 1] set delai [lindex $levote 1] if {$delai > 0} { set delai [expr $delai - 1] } setuser AideBot xtra vote_$element "$reste $delai [lrange $levote 2 end]" } } if {$hour == "0"} { # Déclanchement d'un vote d'ops. # set actuel [expr [llength [userlist OJA]] - [llength [userlist A]]] set normal [getuser AideBot xtra nombreops] if {([getuser AideBot xtra vote_ops] == "") && ($actuel < $normal)} { dcc_votes "AideBot" 0 "plusops [expr $normal - $actuel]" } } # Vérifie s'il y a une unanimité # foreach element $lstuna { set pours 0 set contres 0 foreach user [userlist A] { if {[getuser $user xtra vote_$element] == "pour"} { incr pours } if {[getuser $user xtra vote_$element] == "contre"} { incr contres } } if {([llength [userlist A]] == $pours) || ([llength [userlist A]] == $contres)} { finduvote $element [getuser AideBot xtra vote_$element] } } } ################################# ## Fin du vote ! # finduvote "$type [lrange $levote 2 end]" proc finduvote {type levote} { if {[string range $type 0 3] == "num_"} { set num [string range $type 4 end] set pours "" set contres "" foreach user [userlist A] { if {[getuser $user xtra vote_num_$num] == "pour"} { lappend pours [getuser $user xtra vrainick] } elseif {[getuser $user xtra vote_num_$num] == "contre"} { lappend contres [getuser $user xtra vrainick] } else { } } switch [string tolower [lindex $levote 2]] { "proj" { set valmoins 3 set concernes "aux admins projets" set message "FIN DE VOTE! -> \[Projet (#$num): [lrange $levote 3 end]\]" set avertir(oui) 0 } "resp" { set valmoins 3 set concernes "aux admins projets" set message "FIN DE VOTE! -> \[Projet (#$num): [lrange $levote 4 end]\] \[Responsable: [lindex $levote 3]\]" set avertir(oui) 1 set avertir(qui) [lindex $levote 3] set avertir(msg) "\[Admins projets: [userlist T-G]\] Nommer comme responsable du projet «[lrange $levote 4 end]» et défénir la tâche et outils." } "honoraire" { set valmoins 1 set concernes "à un admin général" set message "FIN DE VOTE! -> \[Membre honoraire (#$num): [lindex $levote 3]\]" set avertir(oui) 1 set avertir(qui) [lindex $levote 3] set avertir(msg) "\[Admins\] Prévenir de la décision et donner compte honoraire." } "retour" { set valmoins 1 set concernes "à n'importe quel admin" set message "FIN DE VOTE! -> \[Retour de membre (#$num): [lindex $levote 3]\]" set avertir(oui) 1 set avertir(qui) [lindex $levote 3] set avertir(msg) "\[Admins\] Prévenir de la décision, expliquer les conditions et réactiver le compte." } "exclusion" { set valmoins 3 set concernes "de côté: AideBot a déjà pris les mesures nécessaires." set message "FIN DE VOTE! -> \[Exclusion d'un membre problématique (#$num): [lindex $levote 3]\]" set avertir(oui) 0 set avertir(qui) [lindex $levote 3] if {[llength $pours] > [llength $contres]} { set fd [open rejet.mail w] puts $fd "TO: $avertir(qui) <[getuser $avertir(qui) XTRA EMAIL]>" puts $fd "CC: $avertir(qui) <[getuser $avertir(qui) XTRA MAIL]>" puts $fd "BCC: admins@aide.igt.net" puts $fd "FROM: AideBot " puts $fd "REPLY-TO: Admins@aide.igt.net" puts $fd "SUBJECT: La décision du conseil des admins de #Aide sur ta position parmi nous." puts $fd "Bonjour $avertir(qui)," puts $fd "" puts $fd " Le conseil des administrateurs de #Aide a longuement délibéré et a finalement voté sur ta position au sein de l'équipe." puts $fd " Pour toutes les raisons dont nous t'avons déjà fait part, il a été décidé que tu serais dès maintenant exclu de l'équipe pour une période minimale de trois mois." puts $fd "" puts $fd " À la fin de cette période minimale il te sera possible (si cela t'intéresse) de faire une demande de revision de cas par courriel aux admins. Cette demande doit être accompagnée d'un courriel expliquant tes intentions et objectifs au sein de l'équipe." puts $fd " Si tu désires de plus amples informations sur les raisons qui nous ont menées à cette décision ou tout autre point, tu peux toujours contacter le conseil via courriel." puts $fd "" puts $fd " Au revoir, à une prochaine fois peut-être. Nous te souhaitons néanmoins bonne chance dans tout ce que tu entreprendras." puts $fd "" puts $fd "" puts $fd " Aidebot, et les Admins de #Aide." puts $fd "" puts $fd "" puts $fd "N.B.: Ceci est un message automatisé envoyé par Aidebot tout de suite après la fin du vote." close $fd exec cat rejet.mail | /usr/lib/sendmail [getuser $avertir(qui) XTRA EMAIL] admins@aide.igt.net exec rm rejet.mail modacceswcours $avertir(qui) 0 chattr $avertir(qui) -pxEHPRW+X|-o &projets setuser $avertir(qui) xtra responsable setuser $avertir(qui) xtra adjoint setuser $avertir(qui) xtra participant dcc_desactive "AideBot" 0 "$avertir(qui) - Désactivé par Aidebot le [date]: Exclusion votée par le conseil." foreach user [userlist A] { sendnote AideBot $user "EXCLUSION: Le conseil a voté l'exclusion de $avertir(qui), son accès a été désactivé et il a été contacté par courriel automatiquement." } } else { foreach user [userlist A] { sendnote AideBot $user "EXCLUSION: Le conseil a voté contre l'exclusion de $avertir(qui), le dossier est donc clos." } } } "fantome" { set valmoins 2 set concernes "de côté: AideBot a déjà pris les mesures nécessaires." set message "FIN DE VOTE! -> \[Retrait d'accès d'un membre fantomatique (#$num): [lindex $levote 3]\]" set avertir(oui) 0 set avertir(qui) [lindex $levote 3] if {[llength $pours] > [llength $contres]} { set fd [open rejet.mail w] puts $fd "TO: $avertir(qui) <[getuser $avertir(qui) XTRA EMAIL]>" puts $fd "CC: $avertir(qui) <[getuser $avertir(qui) XTRA MAIL]>" puts $fd "BCC: admins@aide.igt.net" puts $fd "FROM: AideBot " puts $fd "REPLY-TO: Admins@aide.igt.net" puts $fd "SUBJECT: Suite à ta très faible participation sur #Aide." puts $fd "Bonjour $avertir(qui)," puts $fd "" puts $fd " Le conseil des administrateurs de #Aide a longuement délibéré et a finalement voté sur ta position au sein de l'équipe." puts $fd "" puts $fd " Il appert que pour le moment, tu n'es pas en mesure de respecter ce minimum, à savoir soit participer pleinement dans au moins un projet du canal, soit d'être présent pour aider sur le canal un minimum d'une heure par deux semaines de façon réelle et active." puts $fd " Cela signifie que nous devons, par soucis d'équité envers tous les membres et pour éviter que le PL ne devienne qu'un simple canal de conversation comme tant d'autres, te retirer, pour le moment du moins, ton accès de membre." puts $fd "" puts $fd " Cela ne veut nullement dire que nous n'avons pas apprécié ou que nous n'apprécions plus ta compagnie. Ni que le temps que tu as passé à aider n'a pas été considéré à sa juste valeur. En fait nous tenons à te remercier de tout le temps que tu as consacré à #Aide de façon très sincère." puts $fd " Et qui plus est, si dans l'avenir tu étais à nouveau davantage disponible pour nous aider dans notre mission, n'hésite pas à nous contacter par courriel en nous expliquant pourquoi tu veux revenir parmi nous. Il nous fera plaisir de te réadmettre dans notre joyeuse équipe." puts $fd "" puts $fd " Merci encore de ta participation et au plaisir de te revoir un de ces jours!" puts $fd "" puts $fd "" puts $fd " Aidebot, et les Admins de #Aide." puts $fd "" puts $fd "" puts $fd "N.B.: Ceci est un message automatisé envoyé par Aidebot tout de suite après la fin du vote." close $fd exec cat rejet.mail | /usr/lib/sendmail [getuser $avertir(qui) XTRA EMAIL] admins@aide.igt.net exec rm rejet.mail modacceswcours $avertir(qui) 0 chattr $avertir(qui) -pxEHPRW+X|-o &projets setuser $avertir(qui) xtra responsable setuser $avertir(qui) xtra adjoint setuser $avertir(qui) xtra participant dcc_desactive "AideBot" 0 "$avertir(qui) - Désactivé par Aidebot le [date]: Exclusion votée par le conseil." foreach user [userlist A] { sendnote AideBot $user "FANTOME: Le conseil a voté l'exclusion de $avertir(qui), son accès a été désactivé et il a été contacté par courriel automatiquement." } } else { foreach user [userlist A] { sendnote AideBot $user "FANTOME: Le conseil a voté contre l'exclusion de $avertir(qui), le dossier est donc clos pour un minimum d'un mois." } } } "parrain" { set valmoins 2 set concernes "à l'admin responsable" set message "FIN DE VOTE! -> \[Nomination comme parrain (#$num): [lindex $levote 3]\]" set avertir(oui) 1 set avertir(qui) [lindex $levote 3] set avertir(msg) "\[Admin responsable\] Prévenir de la décision, expliquer les conditions, offrir le poste et activer l'attribu." } "ref" { set valmoins 0 set concernes "à l'admin responsable" set message "FIN DE VOTE! -> \[Ajout d'un canal/site de référence (#$num): [lindex $levote 3] (Avis de départ: [lindex $levote 4]) Catégorie/raison: [lrange $levote 5 end]\]" set avertir(oui) 0 } "avis" { set valmoins 0 set concernes "à l'admin concerné" set message "FIN DE VOTE! -> \[QUESTION (#$num): [lrange $levote 3 end]\]" set avertir(oui) 0 } } if {[llength $pours] > [llength $contres]} { append message " APPROUVÉ par le conseil" if $avertir(oui) { setuser $avertir(qui) xtra avertir "[unixtime] AideBot $avertir(msg)" chattr $avertir(qui) +L } } else { append message " REJETÉ par le conseil" } if {[lindex $levote 0] > 1} { append message " de façon unanime" } append message ". ([date]) ----- Pours: $pours / Contres: $contres ----- L'action à prendre est laissée $concernes\." } else { switch $type { "nombreops" { set message "FIN DE VOTE! -> \[Nombre d'opérateur (Précédent: [lindex $levote 4]) (Nouveau nombre souhaité: [lindex $levote 2])\]" set pours "" set contres "" foreach user [userlist A] { if {[getuser $user xtra vote_nombreops] == "pour"} { lappend pours [getuser $user xtra vrainick] } elseif {[getuser $user xtra vote_nombreops] == "contre"} { lappend contres [getuser $user xtra vrainick] } else { } } if {[llength $pours] > [llength $contres]} { append message " APPROUVÉ par le conseil" set action "Le nombre 'normal' a donc été modifié en conséquence." setuser aidebot xtra nombreops [lindex $levote 2] } else { append message " REJETÉ par le conseil" set action "Il n'y a donc pas d'action à prendre." } if {[lindex $levote 0] > 1} { append message " de façon unanime" } append message ". ([date]) ----- Pours: $pours / Contres: $contres ----- $action" set valmoins 5 } "ops" { set nombre [lindex $levote 2] set candidats [lrange $levote 3 end] set message "FIN DE VOTE! -> Nouveau(x) op(s) ou op(s) adjoint(s) (Candidats: $candidats) " foreach cand $candidats { set pours "" foreach user [userlist ACTGOJMRP] { if [string match *[string tolower $cand]* [string tolower [getuser $user xtra vote_ops]]] { lappend pours [getuser $user xtra vrainick] } } if {$pours != ""} { lappend uneliste "$cand [llength $pours]" } } set gagnants [classement $uneliste "-"] set finaux "" set oki 0 for {set pos $nombre} {$pos > 0} {set pos [expr $pos -1]} { if {$oki || ([lindex [lindex $gagnants $pos] 1] > [lindex [lindex $gagnants [expr $pos + 1]] 1])} { set oki 1 set finaux "[lindex [lindex $gagnants [expr $pos - 1]] 0] $finaux" } } if {[llength $finaux] > 0} { append message " A(ONT) ÉTÉ ÉLU(S) -> $finaux" set action "La(les) promotion(s) a(ont) été accordée(s) automatiquement." foreach user $finaux { setuser $user xtra presenceop 1 setuser $user xtra quotavote 6 if {[getuser $user xtra dejaop] == "oui"} { dcc_promo "AideBot" 0 "+op $user" } else { dcc_promo "AideBot" 0 "+opa $user" } sendnote AideBot $user "Hé bien Bravo! tu as été élu par les membres! Note bien que tu dois rencontrer un admin canal ([userlist C-G]) au plus tôt afin de revoir les politiques et les commandes avec lui. Merci." setuser $user xtra avertir "[unixtime] AideBot \[Admins canal: [userlist C-G]\] Donner la formation d'opérateur et/ou faire un rappel des obligations et responsabilités." chattr $user +L } } else { append message " PERSONNE N'EST MAJORITAIRE" set action "Il n'y aura donc pas de promotion à faire." } if {$nombre > [llength $finaux]} { append message " (Il y a eu une ou plusieurs égalités, le vote sera repris.)" } append message ". ([date]) ----- $action" foreach user [userlist OJ-A] { set total [getuser $user xtra quotavote] if {[getuser $user xtra vote_ops] != ""} { set total [expr $total + 1] } else { set total [expr $total - 5] sendnote AideBot $user "ATTENTION $user!!! Tu n'as pas voté au dernier vote, deux votes manqués en moins de 5 votes va remettre ta position d'op en jeu!" } if {$total > 10} { set total 10 } if {[absent $user] && ($total < 1)} { set total 1 } setuser $user xtra quotavote $total } news_add "AideBot" "dcc" "AideBot" "#aide" "[unixtime] $message" foreach user [userlist OJKRPM-A] { setuser $user xtra vote_ops } set valmoins 1 } "admcan" { set candidats [lrange $levote 2 end] set message "FIN DE VOTE! -> \[Nouvel administrateur canal (Candidats: $candidats)\]" set gagnant "AideBot 0" foreach cand $candidats { set pours "" foreach admin [userlist A] { if {[string tolower $cand] == [string tolower [getuser $admin xtra vote_admcan]]} { lappend pours [getuser $admin xtra vrainick] } } if {[llength $pours] > [lindex $gagnant 1]} { set gagnant "$cand [llength $pours] $pours" } } if {[lindex $gagnant 1] > [expr [llength [userlist A]] / 2.0]} { append message " ET [getuser [lindex $gagnant 0] xtra vrainick] A ÉTÉ ÉLU par le conseil" set action "L'action à prendre est laissée aux admins généraux." } else { append message " mais AUCUN candidat n'a obtenu les vote de plus de la moitié des membres du conseil" set action "Le vote est donc reporté et devra être repris." } append message ". ([date]) ----- Pours ([lindex $gagnant 1]): [lrange $gagnant 2 end] ----- $action" set valmoins 5 } "admproj" { set candidats [lrange $levote 2 end] set message "FIN DE VOTE! -> \[Nouvel administrateur projeta (Candidats: $candidats)\]" set gagnant "AideBot 0" foreach cand $candidats { set pours "" foreach admin [userlist A] { if {[string tolower $cand] == [string tolower [getuser $admin xtra vote_admproj]]} { lappend pours [getuser $admin xtra vrainick] } } if {[llength $pours] > [lindex $gagnant 1]} { set gagnant "$cand [llength $pours] $pours" } } if {[lindex $gagnant 1] > [expr [llength [userlist A]] / 2.0]} { append message " ET [getuser [lindex $gagnant 0] xtra vrainick] A ÉTÉ ÉLU par le conseil" set action "L'action à prendre est laissée aux admins généraux." } else { append message " mais AUCUN candidat n'a obtenu les vote de plus de la moitié des membres du conseil" set action "Le vote est donc reporté et devra être repris." } append message ". ([date]) ----- Pours ([lindex $gagnant 1]): [lrange $gagnant 2 end] ----- $action" set valmoins 5 } } } exec echo "$message" >> /aide/www/admins/votes.txt foreach user [userlist A] { sendnote AideBot $user $message set total [getuser $user xtra quotavote] if {[getuser $user xtra vote_$type] != ""} { set total [expr $total + 1] } else { set total [expr $total - $valmoins] sendnote AideBot $user "ATTENTION $user!!! Tu n'as pas voté au dernier vote ($type), manquer trop de votes peut nous forcer à remettre ton poste en jeu!" } if {$total > 7} { set total 7 } if {[absent $user] && ($total < 1)} { set total 1 } setuser $user xtra quotavote $total } putlog $message foreach user [userlist A] { setuser $user xtra vote_$type } setuser AideBot xtra vote_$type } ################################# ## Je dois voter ? proc doisjevoter {hand idx} { if [matchattr $hand H] { return 0 } if {[getuser Aidebot xtra vote_ops] != ""} { if {[getuser $hand xtra vote_ops] == ""} { putdcc $idx "4*8*3* ATTENTION! Il y a un vote en cours: ops . Pour plus d'information, utilise .vote / .vote ops" } } if ![matchattr $hand A] { return 0 } foreach type "nombreops admcan admproj num_0 num_1 num_2 num_3 num_4 num_5 num_6 num_7 num_8 num_9" { if {[getuser Aidebot xtra vote_$type] != ""} { if {[getuser $hand xtra vote_$type] == ""} { if {[string range $type 0 3] == "num_"} { set type "Général/numéroté [string index $type 4]" } putdcc $idx "4*8*3* ATTENTION! Il y a un vote en cours: $type . Pour plus d'information, utilise .votes infos" } } } } ################################# ## .vote bind dcc - vote dcc_vote proc dcc_vote {hand idx args} { if [matchattr $hand H] { putdcc $idx "Oups! Les membres honoraires n'ont pas le droit de vote malheureusement! (Ils ne sont plus considérés comme des membres actifs)" return 0 } set args [lindex $args 0] set type [string tolower [lindex $args 0]] if {$type == ""} { if [matchattr $hand A] { putdcc $idx "## Syntaxe: .vote \[qui?\]" putdcc $idx " .vote \[pour|contre\]" putdcc $idx " .vote <#> \[pour|contre\]" } else { putdcc $idx "## Syntaxe: .vote \[qui?\] (\[qui?\]) ..." } putdcc $idx " Ne donner que le premier argument listera les choix possibles." return 0 } elseif {$type == "ops"} { set choix [lrange $args 1 end] set levote [getuser AideBot xtra vote_ops] set reste [lindex $levote 0] set delai [lindex $levote 1] set nombre [lindex $levote 2] set candidats [lrange $levote 3 end] if {$levote == ""} { putdcc $idx "Hum, il n'y a pas de vote d'op en cours..." return 0 } if {$choix == ""} { set candides "" foreach cand $candidats { append candides $cand if {[validuser $cand] & ![matchattr $cand WSXY]} { if {[getuser $cand xtra dejaop] == "oui"} { set etoiles "@" } else { set etoiles "" } set diff [expr [getuser $cand xtra statsdispomoy] - [getuser Aidebot xtra statsdispomoyops] + 10] if {$diff > 35} { set append "+++" } elseif {$diff > 15} { append etoiles "++" } elseif {$diff > 5} { append etoiles "+" } elseif {$diff > -5} { append etoiles "=" } elseif {$diff > -15} { append etoiles "-" } else { append etoiles "¤" } } else { set etoiles "?" } append candides " ($etoiles), " } putdcc $idx "*** Il reste $reste heure(s) au vote d'op en cours. ***" putdcc $idx " Les candidats à ce vote sont:" putdcc $idx " N.B.1: Disponibilité ESTIMÉE comme op: (+++ Accroc, ++ Fantastique, + Super, = Oki, - Peu, ¤ Très peu)" putdcc $idx " N.B.2: Les @ ont déjà été ops!" putdcc $idx " -> [string range $candides 0 [expr [string length $candides] - 4]]. <-" putdcc $idx " Votre choix actuel est le suivant: \[ [getuser $hand xtra vote_ops] \] sur une possibilité de $nombre choix." return 1 } else { set qte 0 set listechoix "" foreach item $choix { foreach cand $candidats { if {[string tolower $cand] == [string tolower $item]} { incr qte if {$qte > $nombre} { putdcc $idx "Vous ne pouvez appuyer au maximum que $nombre candidat(s) à ce vote." set qte [expr $qte - 1] } elseif [string match *[string tolower $item]* [string tolower $listechoix]] { putdcc $idx "Vous ne pouvez voter deux fois pour le même candidat." set qte [expr $qte - 1] } else { putdcc $idx "Choix d'op #$qte: $item -> ajouté." lappend listechoix $item } } } } if $qte { putdcc $idx "Vous avez inscris $qte choix: $listechoix ... Merci de votre vote." } else { putdcc $idx "ATTENTION! -> Vous n'avez AUCUN choix d'inscrit." } setuser $hand xtra vote_ops $listechoix return 1 } } if ![matchattr $hand A] { putdcc $idx "## Ce type de vote n'existe pas ou n'est pas accessible." return 0 } if {($type == "resp")|($type == "proj")|($type == "honoraire")|($type == "retour")|($type == "ref")|($type == "parrain")|($type == "avis")|($type == "exclusion")|($type == "fantome")} { if {[string tolower [lindex [getuser AideBot xtra vote_num_[lindex $args 1]] 2]] != [string tolower $type]} { putdcc $idx "Le numéro de vote et le type ne correspondent pas!" return 0 } else { set type "num" } } switch $type { "admproj" { set choix [lindex $args 1] set levote [getuser AideBot xtra vote_admproj] set reste [lindex $levote 0] set delai [lindex $levote 1] set candidats [lrange $levote 2 end] if {$levote == ""} { putdcc $idx "Hum, il n'y a pas de vote d'admin projet en cours..." return 0 } if {$choix == ""} { putdcc $idx "*** Il reste $reste heure(s) au vote d'admin projet en cours. ***" if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" } putdcc $idx " Les candidats à ce vote sont: $candidats." putdcc $idx " Votre choix actuel est le suivant: [getuser $hand xtra vote_admproj]" return 0 } else { if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" return 0 } foreach cand $candidats { if {[string tolower $cand] == [string tolower $choix]} { putdcc $idx "Choix Admin Projet: $choix -> enregistré." setuser $hand xtra vote_admproj $choix return 1 } } putdcc $idx "Hum, il semble que $choix ne soit pas parmi les candidats pour ce vote..." return 0 } } "admcan" { set choix [lindex $args 1] set levote [getuser AideBot xtra vote_admcan] set reste [lindex $levote 0] set delai [lindex $levote 1] set candidats [lrange $levote 2 end] if {$levote == ""} { putdcc $idx "Hum, il n'y a pas de vote d'admin canal en cours..." return 0 } if {$choix == ""} { putdcc $idx "*** Il reste $reste heure(s) au vote d'admin canal en cours. ***" if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" } putdcc $idx " Les candidats à ce vote sont: $candidats." putdcc $idx " Votre choix actuel est le suivant: [getuser $hand xtra vote_admcan]" return 0 } else { if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" return 0 } foreach cand $candidats { if {[string tolower $cand] == [string tolower $choix]} { putdcc $idx "Choix Admin Canal: $choix -> enregistré." setuser $hand xtra vote_admcan $choix return 1 } } putdcc $idx "Hum, il semble que $choix ne soit pas parmi les candidats pour ce vote..." return 0 } } "nombreops" { set choix [lindex $args 1] set levote [getuser AideBot xtra vote_nombreops] set reste [lindex $levote 0] set delai [lindex $levote 1] if {$levote == ""} { putdcc $idx "Hum, il n'y a pas de vote sur le nombre d'op en cours..." return 0 } if {$choix == ""} { putdcc $idx "*** Il reste $reste heure(s) au vote sur le nombre d'ops en cours. ***" if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" } putdcc $idx " Votre choix actuel est le suivant: [getuser $hand xtra vote_nombreops]" return 0 } else { if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" return 0 } if {([string tolower $choix] == "pour")|([string tolower $choix] == "contre")} { putdcc $idx "Choix Nombre d'ops: $choix -> enregistré." setuser $hand xtra vote_nombreops [string tolower $choix] return 1 } else { putdcc $idx "Choix '$choix' non-valide." return 0 } } } "num" { set numero [lindex $args 1] set choix [lindex $args 2] set levote [getuser AideBot xtra vote_num_$numero] set reste [lindex $levote 0] set delai [lindex $levote 1] if {$levote == ""} { putdcc $idx "Hum, il n'y a pas un tel vote en cours, désolé..." return 0 } if {$choix == ""} { putdcc $idx "*** Il reste $reste heure(s) à ce vote en cours. ***" if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" } putdcc $idx " Votre choix actuel est le suivant: [getuser $hand xtra vote_num_$numero]" return 0 } else { if $delai { putdcc $idx "*** Il reste $delai heure(s) avant de pouvoir voter. ***" return 0 } if {([string tolower $choix] == "pour")|([string tolower $choix] == "contre")} { putdcc $idx "Choix vote «[lindex $levote 2]» (#$numero): $choix -> enregistré." setuser $hand xtra vote_num_$numero [string tolower $choix] return 1 } else { putdcc $idx "Choix '$choix' non-valide." return 0 } } } default { putdcc $idx "## Ce type de vote n'existe pas." return 0 } } }