dice calculator and fairly advanced hubot dice bot thing
JavaScript Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
README.md
build.sh
grammar.ne
index.js
package.json

README.md

dicetower

  • rip-off of the Nearley calculator grammar with dice rolling added in
  • a hubot bot that lets you talk to the Nearley grammar
const dicetower = require('dicetower');

dicetower.report('2d6 + 2dF + 2')
// -> *13* (12 (rolled 2d6: 6+6) + -1 (rolled 2dfudge: 1+-2) + 2)

// the number of dice or sides of the dice can be computed via dice roll
dicetower.report('(1d20)d20')
// -> *86* (86 (rolled 11d20: 6+1+3+5+9+5+17+9+11+1+19))

// you can roll custom arbirary dice
dicetower.report('2d4 * 1d[2 3 5 7 9 14]')
// -> *12* (6 (rolled 2d4: 4+2) * 2 (rolled 1d[14 2 3 5 7 9]: 2))

// you can get expected value instead of actually rolling dice
dicetower.report('2d4 * 1d[2 3 5 7 9 14]', true);
// *33.333333333333336*
// (3 (expected 5: 2*2.5) * 7 (expected 6.666666666666667: 1*6.666666666666667))

ok so what's this grammar thing?

I dunno. It's cool. It parses your string and does the calculation. You can read it here. This is a Nearley grammar.

Here's a full list of supported expressions

  • parens (3 + 1d4) * 2
  • exponents 4^8
  • multiplication 4 * 4 and division 4 / 1d2
  • addition 1 + 1 and subtraction 2 - 2d4
  • a range of mathematical functions and constants sqrt(sin(5)) * pi
  • unary negative numbers -1 + 5
  • floats and stuff 0.25 * .55
  • dice
    • regular dice 2d8
    • fudge dice 4dF
    • dice with arbitrary custom faces 2d[2 4 6 8 10]
    • any value in a dice expression can be an expression (1d6)d[1 2 3 4 2d4 2d8]

how do i hubot

I think this is how:

  1. you npm install --save dicetower in your hubot dir
  2. you add 'dicetower/lib/hubot_plugin' to your external-scripts.json file