UNPKG

hubot-trivia-game-french

Version:

French translation of the original hubot-trivia-game from Michael Yin

177 lines (158 loc) 6.22 kB
# Description: # Play trivia! Doesn't include questions. Questions should be in the following JSON format: # { # "answer": "Pizza", # "category": "FOOD", # "question": "Crust, sauce, and toppings!", # "value": "$400" # }, # # Dependencies: # cheerio - for questions with hyperlinks # # Configuration: # None # # Commands: # !trivia - ask a question # !skip - skip the current question # !answer <answer> or !a <answer> - provide an answer # !hint or !h - take a hint # !score <player> - check the score of the player # !scores or !score all - check the score of all players # !reset - reset score of every player # # Author: # yincrash - edited by LucasAdam Fs = require 'fs' Path = require 'path' Cheerio = require 'cheerio' class Game @currentQ = null @hintLength = null @lastSkipTime = null constructor: (@robot) -> buffer = Fs.readFileSync(Path.resolve('./res', 'questions.json')) @questions = JSON.parse buffer @robot.logger.debug "Initiated trivia game script." @lastSkipTime = 0 askQuestion: (resp) -> unless @currentQ # set current question index = Math.floor(Math.random() * @questions.length) @currentQ = @questions[index] @hintLength = 1 @robot.logger.debug "La réponse est #{@currentQ.answer}" # remove optional portions of answer that are in parens @currentQ.validAnswer = @currentQ.answer.replace /\(.*\)/, "" $question = Cheerio.load ("<span>" + @currentQ.question + "</span>") link = $question('a').attr('href') text = $question('span').text() resp.send "Pour #{@currentQ.value} dans la catégorie #{@currentQ.category}:\n" + "*#{text}*" + if link then " #{link}" else "" skipQuestion: (resp) -> if @currentQ today = new Date timeToWait = @lastSkipTime + 120000 if today.getTime() > timeToWait resp.send "La réponse était #{@currentQ.answer}." @currentQ = null @hintLength = null @lastSkipTime = today.getTime() @askQuestion(resp) else remainingTime = today.getTime() - @lastSkipTime remainingTime = remainingTime / 1000 remainingTime = 120 - remainingTime resp.send "Cherche encore, la commande !skip sera de nouveau disponible dans #{remainingTime.toFixed(0)} secondes :seriouslygay:" else resp.send "Il n'y a pas de question en cours!" answerQuestion: (resp, guess) -> if @currentQ if /^[0-9]*$/gm.test(@currentQ.validAnswer) checkGuess = guess.replace /&.{0,}?;/, "" if checkGuess.indexOf(@currentQ.validAnswer) >= 0 resp.reply "Bravo !!! La réponse était #{@currentQ.answer}" name = resp.envelope.user.name.toLowerCase().trim() value = @currentQ.value.replace /[^0-9.-]+/g, "" @robot.logger.debug "#{name} a donné la bonne réponse." user = resp.envelope.user user.triviaScore = user.triviaScore or 0 user.triviaScore += parseInt value resp.reply "Score: #{user.triviaScore}" @robot.brain.save() @currentQ = null @hintLength = null @askQuestion(resp) else resp.send "#{guess} n'est pas la bonne réponse." else checkGuess = guess.toLowerCase() # remove html entities (slack's adapter sends & as &amp; now) checkGuess = checkGuess.replace /&.{0,}?;/, "" # remove all punctuation and spaces, and see if the answer is in the guess. checkGuess = checkGuess.replace /[\\'"\.,-\/#!$%\^&\*;:{}=\-_`~()\s]/g, "" checkAnswer = @currentQ.validAnswer.toLowerCase().replace /[\\'"\.,-\/#!$%\^&\*;:{}=\-_`~()\s]/g, "" checkAnswer = checkAnswer.replace /^(un(e?)|le|la)/g, "" if checkGuess.indexOf(checkAnswer) >= 0 resp.reply "Bravo !!! La réponse était #{@currentQ.answer}" name = resp.envelope.user.name.toLowerCase().trim() value = @currentQ.value.replace /[^0-9.-]+/g, "" @robot.logger.debug "#{name} a donné la bonne réponse." user = resp.envelope.user user.triviaScore = user.triviaScore or 0 user.triviaScore += parseInt value resp.reply "Score: #{user.triviaScore}" @robot.brain.save() @currentQ = null @hintLength = null @askQuestion(resp) else resp.send "#{guess} n'est pas la bonne réponse." else resp.send "Il n'y a pas de question en cours!" hint: (resp) -> if @currentQ answer = @currentQ.validAnswer hint = answer.substr(0,@hintLength) + answer.substr(@hintLength,(answer.length + @hintLength)).replace(/./g, ".") if @hintLength <= answer.length @hintLength += 1 resp.send hint else resp.send "Il n'y a pas de question en cours!" checkScore: (resp, name) -> if name == "all" for user in @robot.brain.usersForFuzzyName "" user.triviaScore = user.triviaScore or 0 resp.send "#{user.name} - $#{user.triviaScore}" else user = @robot.brain.userForName name unless user resp.send "Il n'y a pas de score pour #{name}" else user.triviaScore = user.triviaScore or 0 resp.send "#{user.name} - $#{user.triviaScore}" resetScores: (resp) -> name = resp.envelope.user.name.toLowerCase().trim() if name == "lucas" for user in @robot.brain.usersForFuzzyName "" user.triviaScore = 0 resp.send "Les scores ont été remis à zero." else resp.send "Seul l'utilisateur @lucas est autorisé à utiliser cette commande." module.exports = (robot) -> game = new Game(robot) robot.hear /^!trivia/, (resp) -> game.askQuestion(resp) robot.hear /^!skip/, (resp) -> game.skipQuestion(resp) robot.hear /^!a(nswer)? (.*)/, (resp) -> game.answerQuestion(resp, resp.match[2]) robot.hear /^!score (.*)/i, (resp) -> game.checkScore(resp, resp.match[1].toLowerCase().trim()) robot.hear /^!scores/i, (resp) -> game.checkScore(resp, "all") robot.hear /^!reset/, (resp) -> game.resetScores(resp) robot.hear /^!h(int)?/, (resp) -> game.hint(resp)