Sondage: nombre de réponses illimité!

Contenu du snippet

voici le tout premier sondage (du moins je n'en ai pas vu ici, pardonnez moi si j'ai mal cherché) avec un nombre de réponses disponnibles illimité! au programme:
- nombre de reponses illimité
- temps imparti à definir
- un petit titre pour le fun

bientôt:
- les archives du sondage! chaque sondage restera en memoire dans la base de dnnées (pas en variables lol), avec son titre, son auteur, la question et la réponse gagnante avec ses résultats et:
- les pourcentages!

euh par contre je 'nai aps pu tester ce sondage étant en vacances et n'ayant que le bloc notes à ma disposition, mais je suis presque sur de son bon fonctionnement. un seul detail que 'jai oublié... quand je fais les timers, je ne sais pas si je fais [timer temps repetition] ou [timer repetition temps]... j'ai opté pour la derniere sollution étant la plus logiue à mes yeux... testez le pour moi! (soyez indulgents, c'est que ma 4eme source et la plus approfondie)

au fait: je peux pas mettre de zip, y'a pas moyen sur cet ordi pourri ^^ plus tard peut etre, en attendant, tapez voius le code pour les interessés.

Source / Exemple :


on *:text:!sondage:#: {
  if (%sond.start) { notice $nick Impossible de préparer un sondage, un est déjà en cours. }
  else {
    msg $nick Bien, $nick $+ , nous allons commencer le sondage. Si ca prend du temps, ne perds pas patience, nous enregistrons les données.
    set %sond.nick $nick
    set %sond.nick.host $address($nick, 5)
    set %sond.start off
    timer1 1 5 /question
  }
}

alias question {
  msg %sond.nick Pour commencer, tape la question à laquelle les personnes présentes dans le channel répondront.
  set %sond.text question
}

on %sond.nick:text:*:?: {
  if (%sond.text == question) validQuestion $1-
  if (%sond.text == timer) validTimer $1
  if (%sond.text == nbrep) validNbrep $1
  if (%sond.text == reponse) validReponse $1-
  if (%sond.text == titre) validTitre $1-
}

alias validQuestion {
  set %sond.param.question $1-
  msg %sond.nick Bien, la question est: $1-
  msg %sond.nick Tape maintenant le temps en secondes au cours duquel les chatteurs devront répondre 
  set %sond.text timer
}

alias validTimer {
  set %sond.param.timer $1
  msg %sond.nick Parfait, le temps imparti est donc: $1
  msg %sond.nick nous allons passer maintenant au nombre de réponses. Combien en veux-tu?
  set %sond.text nbrep
}

alias validNbrep {
  set %sond.param.nbquest $1
  if ($1 == 1) msg %sond.nick Tu veux donc 1 réponse.
  else msg %sond.nick Tu veux donc $1 réponses.
  msg %sond.nick Tape donc ta première réponse.
  set %sond.text reponse
}

alias validReponse {
  inc %sond.numrep
  set %sond.param.reponse. $+ %sond.numrep $1-
  if (%sond.numrep == %sond.param.nbquest) {
    msg %sond.nick C'était la dernière réponse à donner. Donne un titre à ton sondage.
    set %sond.text titre
  }
  else {
    msg %sond.nick Bien. Tape maintenant la réponse suivante. Il en reste $calc(%sond.param.nbquest-%sond.numrep) $+ .
  }
}

alias validTitre {
  set %sond.param.titre $1-
  msg %sond.nick Tadaaaaaaaaaaaa!!!! Le questionnaire est maintenant fini, je n'attend plus que ton commandement pour lancer le sondage. Pour ce faire, tape !go sur le channel. Mais ne tarde pas, au bout de deux minutes, j'efface toutes les données si le sondage n'est pas commencé. 120... 119... 118...
  set %sond.go ok
  timer2 1 120 timeEnd
}

alias timeEnd {
  notice %sond.nick Je t'avais prévenu, les deux minutes se sont écoulées. A pu les jolies données de %sond.nick !!!
  unset %sond*
}

on %sond.nick:text:!go:#: {
  set %sond.chan $chan
  timer2 off
  notice $nick Le sondage va commencer. Surtout, soit patient, le temps d'initialiser les données.
  msg $chan Un sondage va bientôt commencer. Patientez un petit instant.
  timer3 1 10 sondStart
}

alias sondStart {
  msg %sond.chan %sond.nick $+ ( $+ %sond.nick.host $+ ) vous propose un petit sondage comportant 1 question et %sond.param.nbrep réponse(s).
  msg %sond.chan Le sondage s'intitule: %sond.param.titre
  msg %sond.chan La question est: %sond.param.question
  msg %sond.chan Les réponses sont (veuillez patienter si chargement il y a):
  questionListe
}

alias questionListe {
  inc %i
  msg %sond.chan %1 $+ ) %sond.param.reponse. $+ %i (tapez !sond %i $+ )
  if (%i == sond.param.nbrep) {
    msg %sond.chan Vous avez %sond.param.timer secondes pour répondre.
    timer00 1 %sond.param.timer FinDuSondage
  }
  else {
    questionListe
  }
}

on *:text:!sond*:%sond.chan: {
  if ($nick != %sond.nick) && (!%sond.avote. $+ $address($nick, 2)) {
    set %sond.avote. $+ $address($nick, 4) a voté
    notice $nick Merci d'avoir voté (ne pas recommencer, de toutes facons, c'est impossible).
    inc %sond.param.reponse. $+ $2 $+ .vote
    inc %sond.total
    pourcentages
  }
}

alias FinDuSondage {
  msg %sond.chan Le sondage: %sond.param.titre est terminé!
  msg %sond.chan Il était proposé par %sond.nick $+ ( $+ %sond.nick.host $+ )
  msg %sond.chan La question était: %sond.param.question
  msg %sond.chan Vous aviez %sond.param.timer secondes pour y répondre.
  msg %sond.chan Voici les résultats (merci de patienter si chargement il y a)
  resultats
}

alias resultats {
  inc %a
  msg %sond.chan %sond.param.reponse. $+ %a $+ .vote votes pour: %sond.param.reponse. $+ %a ( %sond.param.reponse. $+ %a $+ .pourcent
  if (%sond.param.reponse. $+ %a $+ .vote > %sond.derniere.vote) {
    set %sond.gagnante %a
  }
  set %sond.derniere.vote %sond.param.reponse. $+ %a $+ .vote
  if (%a == %sond.param.nbrep) {
    msg %sond.chan Avec %sond.param.reponse. $+ %sond.gagnante $+ .vote votes sur un total de %sond.total $+ ( $+ %sond.param.reponse. $+ %sond.gagnante $+ .pourcent $+ ) , la réponse: %sond.param.reponse. $+ %sond.derniere.vote l'emporte!
    unset %sond.*
    unset %a
    unset %i
    unset %b
  }
  else {
    resultats
  }
}

alias pourcentages {
  inc %b
  set %sond.param.reponse. $+ %b $+ .pourcent $calc($calc(%sond.param.reponse. $+ %b $+ .vote*100)/%sond.total)
  if (%b != %sond.param.nbrep) {
    pourcentages
  }
}

Conclusion :


si vous avez trouvé des erreurs, des oublis, ou des fautes de syntaxe, prevenez moi... si vous voyez que j'ai confindu question avec reponse ca m'arive souvent, dites moi ou et je rectifierai... sinon tout m'a l'air parfait.

(je sais qu'on aurait pu abreger la liste des reponses disponnibles avec un for, mais j'ai oublié la syntaxe... ^^ bete hein)

alors pour le fonctionnement:
on lance , si y'en a pas deja un enc orus ou en preparation avec !sondage
le bot comence le formulaire en privé, demande la question, le nombre de reponses, le timer, puis les reponses, et enfin le titre.
on donne sa voix avec !sond <num de la reponse>
inutile d'essayer de voter plusieurs fois, l'host est enregistré et le createur du sondage n'a pas le droit non plus.

PS: si j'ai mis des trucs comme quoi y'a un chargement, ca depend du serveur, si il met du temps à faire ca ou pas... perso, sur le mien (pas celui ou je suis hein, l'autre) ca devrait ramer un peud e temps ent emps... pis ca fait fun, "patientez pendant le chargement"... ca fait serieux. bon, assez de blabla, passons aux commentaires.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.