/trebekbot

A Jeopardy! bot for Slack.

Primary LanguageRuby

trebekbot

A Jeopardy! bot for Slack, powered by the jService API. Sets up a perpetual game of Jeorpardy! in your Slack channels.

Requirements

You'll need a Slack account, obviously, and a free Heroku account to host the bot. You'll also need to be able to set up new integrations in Slack; if you're not able to do this, contact someone with admin access in your organization.

Installation

  1. Set up a Slack outgoing webhook at https://slack.com/services/new/outgoing-webhook. Make sure to pick a trigger word, such as trebekbot. You might also want to set this up in a single room, if you value your team's productivity.

  2. Grab the token for the outgoing webhook you just created, and a Slack API token, which you can get from https://api.slack.com/web.

  3. Click this button to set up your Heroku app: Deploy
    If you'd rather do it manually, then just clone this repo, set up a Heroku app with Redis Cloud (the free level is more than enough for this), and deploy trebekbot there. Make sure to set up the config variables in .env.example in your Heroku app's settings screen.

  4. Point the outgoing webhook to https://[YOUR-HEROKU-APP].herokuapp.com

Usage

  • trebekbot jeopardy me: gives a randomized question from Jeopardy! trebekbot will pick a category and score for you.
  • trebekbot show (me the) categories or trebekbot let's play: displays the current categories in play, or, if no categories are in play, trebekbot will pick five categories, starting a round of Jeopardy!
  • trebekbot I'll take [category] for [value]: gives a question with the supplied category and value as long as the category/value combination is in play.
  • trebekbot what/who is/are [answer]: sends an answer. Remember, responses must be in the form of a question!
  • trebekbot what's my score: shows your current score.
  • trebekbot show the leaderboard: shows the current top scores.
  • trebekbot end game: clears all player scores and ends the current round of Jeopardy!
  • trebekbot show the loserboard: shows the current bottom scores.
  • trebekbot help: shows this help information.

Options

Trebekbot contains several options so users can customize their Jeopardy experience.

  • DD_CHANCE: Chance of a Daily Double occurring when requesting a question. Daily doubles have twice the score that they normally would have. Default value: 0.2
  • ENABLE_FINAL_JEOPARDY: Toggle Final Jeopardy! functionality, causing Final Jeopardy! to begin when the board is cleared of questions. Default value: true
  • ENABLE_RANDOM_QUESTIONS: Toggle the functionality of trebekbot jeopardy me between showing a list of the current categories(or generating new ones) or retrieving a random question. Default value: true
  • QUESTION_SUBSTRING_BLACKLIST: An array of strings that will be detected when retrieving a question. If detected, the question will be thrown out and replaced with a random question, instead.
  • SECONDS_TO_ANSWER: How many seconds you have to answer before Trebekbot gives the answer. Default value: 30

Credits & acknowledgements

Big thanks to Steve Ottenad for building jService, the service that powers this bot.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Feel free to open a new issue if you have questions, concerns, bugs, or feature requests. Just remember that I'm doing this for fun, for free, in my free time, and I may not be able to help you, respond in a timely manner, or implement any feature requests.

License

Copyright (c) 2014, Guillermo Esteves All rights reserved.

BSD license

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.