Giter Site home page Giter Site logo

jaredhalpern / rolld Goto Github PK

View Code? Open in Web Editor NEW
3.0 2.0 3.0 42 KB

Slack integration to roll RPG dice in-channel

Home Page: https://jaredhalpern.com/Rolld/

License: MIT License

Python 100.00%
rpg-tool dice-roller dungeons-and-dragons rpg python flask slack roll-dice heroku game

rolld's Introduction

Rolld

RPG-dice Slack integration (source)

Rolld is a Slack Integration that makes it easy to roll dice in a Slack Channel. That's really all there is to it. I put this thing together in a few hours downtime when I needed to take a break from writing the book. I don't plan to distribute it via Slack because I don't want the dozens (there are dozens of us!) of Slack gamers banging on my free-tier Heroku dyno. But you can deploy your own Rolld app to a Heroku dyno and integrate it into a Slack channel of your choosing.

Rolld

Usage

Roll + modifiers. Roll results are broken down inside the [] brackets and modifier is appended with a +.

Rolld

Rolld also supports multiple rolls, eg: /roll 2d6

Rolld

Steps to Setup your own Rolld App

Steps to set up this integration for your local Slack channel, using a free dyno on Heroku to host:

  1. Clone the repo git clone [email protected]:JaredHalpern/Rolld.git
  2. Make sure you have Homebrew installed. If not, /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Heroku

  1. Install the Heroku CLI: brew install heroku/brew/heroku
  2. Verify Heroku CLI installation: heroku --version should show you something like: heroku/7.0.35 (darwin-x64) node-v10.0.0
  3. Ensure you've created an account at https://www.heroku.com. You can use the free-tier for now.
  4. Login to Heroku via command line: heroku login
  5. Change to the cloned Rolld directory: cd Rolld
  6. Set the Heroku buildpack: heroku buildpacks:set heroku/python
  7. Create a heroku app: heroku create. We'll configure Slack to point to this URL soon. This command also creates a remote pointing to Heroku.
  8. Verify the remote is set up, git remote -v. You should see something like: heroku https://git.heroku.com/yass-rangers-61413.git (fetch) heroku https://git.heroku.com/yass-rangers-61413.git (push)
  9. Go to Heroku Settings: https://dashboard.heroku.com/apps/<your app name>/settings and find the Domain. It should say something like: Your app can be found at https://yass-rangers-61413.herokuapp.com/. Note down this url for the next step.

Create a Slack App

  1. Log into to your Slack account via the web: https://api.slack.com/apps
  2. Hit the Create New App button
  3. Name the app and choose a workspace in which to deploy it.
  4. In the Add features and functionality Section, Click Slash Commands.
  5. Hit the Create New Command button.
  6. Enter the Command you'd like to use to invoke the integration. /roll seems natural.
  7. In Request URL, use the url from Step 11: https://yass-rangers-61413.herokuapp.com/
  8. Hit the Save button in the lower right.
  9. In the Install your app to your workspace section, hit the Install App to Workspace button to install the integration. We're not done yet though.

Verification / Permissioning

  1. Scroll down a bit further on the Basic Information page and copy the Verification Token. Put it somewhere safe and temporary.
  2. Next click on OAuth & Permissions on the left-hand side. Copy the OAuth token and put it somewhere safe and temporary.
  3. This next part is a bit odd - we need to get the Team-ID. The best way to do that (that I've found) is to navigate to your team's Slack channel in a web browser, then right-click and inspect the source. Find the text, team_id and grab the value next to it. It'll be something like Z4KRT3F6A.
  4. We need to set the environmental variables. Best practices say that it's a terrible idea to ever store things like tokens in source-control. We can do this via the Heroku command line, but I'll show you how to do it in the Heroku CLI. Go to https://dashboard.heroku.com/apps/<your app name>/settings and tap the Reveal Config Vars button. Enter the following Key-Value pairs: SLACK_VERIFICATION_TOKEN | value from step 1 in this section, SLACK_ROLLD_TOKEN | value from Step 2 in this section, SLACK_TEAM_ID | value from step 3 in this section
  5. Alternatively, the Heroku CLI syntax for setting config variables: heroku config:set SLACK_VERIFICATION_TOKEN=....your token....

Deploy

  1. Push to the Heroku remote: git push heroku master
  2. Open Slack, and run your command! /roll 1d20

I've probably missed a step or two. If you see something, feel free to file a PR and I'll update. Thanks!

Development and Testing

(Below is abbreviated and needs to be expanded upon and explained)

  • Use ngrok for testing locally via "tunneling".
  • Instructions to set up ngrok specifically to test a Slack bot are here.
  • Command: ngrok http 5000
  • Ensure local ENV variables are set - either in .bashrc or temporarily. Don't forget to reload the terminal window if needed or source the .bashrc.
  • Create a virtualenv for Rolld and run: /Rolld/bin/activate
  • With the activated virtualenv, run: python app.py
  • Copy the url present in the Forwarding field provided by ngrok to the field Request URL. This field is in: Your Apps -> (Features) Slash Commands -> (Click pencil to edit) Request URL. This will forward all calls from Slack to this URL, which happens be running locally on your machine.
  • When done testing, don't forget to set the Request URL back to your Heroku App's URL.

Useful links

Testing Slack integrations locally, Easily resize gifs online

Credits

Thanks to Justin Isaf, jisaf for adding modifiers.

rolld's People

Contributors

dependabot[bot] avatar jaredhalpern avatar jisaf avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

rolld's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.