mirror of
https://github.com/oddluck/limnoria-plugins.git
synced 2025-04-25 20:41:21 -05:00
Dice: rename plugin.
This commit is contained in:
parent
1740a06b3d
commit
11f96e4d3c
@ -4,11 +4,11 @@ Install dependencies: python3 -m pip install -r requirements.txt
|
|||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
Dicebot plugin contains the commands which simulate rolling of dice.
|
Dice plugin contains the commands which simulate rolling of dice.
|
||||||
Though core supybot plugin Games contain 'dice' command, it is very simple and
|
Though core supybot plugin Games contain 'dice' command, it is very simple and
|
||||||
is not sufficient for advanced uses, such as online playing of tabletop
|
is not sufficient for advanced uses, such as online playing of tabletop
|
||||||
role-playing games using IRC.
|
role-playing games using IRC.
|
||||||
The most basic feature of any dicebot is, of course, rolling of one or several
|
The most basic feature of any dice plugin is, of course, rolling of one or several
|
||||||
identical dice and showing the results. That is what core 'dice' command can
|
identical dice and showing the results. That is what core 'dice' command can
|
||||||
do. It takes an expression such as 3d6 and returns a series of numbers -
|
do. It takes an expression such as 3d6 and returns a series of numbers -
|
||||||
results of rolling each (of 3) die (6-sided): '2, 4, and 4'. This may be
|
results of rolling each (of 3) die (6-sided): '2, 4, and 4'. This may be
|
||||||
@ -61,9 +61,9 @@ shuffled before drawing next card.
|
|||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
Ur-DnD roleplaying community (#dnd @ RusNet) for games, talking and fun, and
|
Ur-DnD roleplaying community (#dnd @ RusNet) for games, talking and fun, and
|
||||||
personally Zuzuzu for describing basic dicebot requirements, which led to
|
personally Zuzuzu for describing basic Dice requirements, which led to
|
||||||
writing the first version of this plugin in August 2007.
|
writing the first version of this plugin in August 2007.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
Run tests: supybot-test Dicebot && pytest
|
Run tests: supybot-test Dice && pytest
|
@ -28,7 +28,7 @@
|
|||||||
###
|
###
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Dice bot
|
Dice
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import supybot
|
import supybot
|
||||||
@ -55,7 +55,7 @@ from . import deck
|
|||||||
from imp import reload
|
from imp import reload
|
||||||
# In case we're being reloaded.
|
# In case we're being reloaded.
|
||||||
reload(deck)
|
reload(deck)
|
||||||
reload(plugin)
|
reload(plugin)
|
||||||
# Add more reloads here if you add third-party modules and want them to be
|
# Add more reloads here if you add third-party modules and want them to be
|
||||||
# reloaded when this plugin is reloaded. Don't forget to import them as well!
|
# reloaded when this plugin is reloaded. Don't forget to import them as well!
|
||||||
|
|
@ -35,14 +35,14 @@ def configure(advanced):
|
|||||||
# a bool that specifies whether the user identified himself as an advanced
|
# a bool that specifies whether the user identified himself as an advanced
|
||||||
# user or not. You should effect your configuration by manipulating the
|
# user or not. You should effect your configuration by manipulating the
|
||||||
# registry as appropriate.
|
# registry as appropriate.
|
||||||
conf.registerPlugin('Dicebot', True)
|
conf.registerPlugin('Dice', True)
|
||||||
|
|
||||||
|
|
||||||
Dicebot = conf.registerPlugin('Dicebot')
|
Dice = conf.registerPlugin('Dice')
|
||||||
conf.registerChannelValue(Dicebot, 'autoRoll',
|
conf.registerChannelValue(Dice, 'autoRoll',
|
||||||
registry.Boolean(False, """Determines whether the bot will automatically
|
registry.Boolean(False, """Determines whether the bot will automatically
|
||||||
roll the dice it sees in the channel."""))
|
roll the dice it sees in the channel."""))
|
||||||
conf.registerGlobalValue(Dicebot, 'autoRollInPrivate',
|
conf.registerGlobalValue(Dice, 'autoRollInPrivate',
|
||||||
registry.Boolean(False, """Determines whether the bot will automatically
|
registry.Boolean(False, """Determines whether the bot will automatically
|
||||||
roll the dice it sees in private messages."""))
|
roll the dice it sees in private messages."""))
|
||||||
|
|
@ -1,10 +1,10 @@
|
|||||||
Description
|
Description
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
Dicebot plugin contains the commands which simulate rolling of dice.
|
Dice plugin contains the commands which simulate rolling of dice.
|
||||||
Though core supybot plugin Games contain 'dice' command, it is very simple and
|
Though core supybot plugin Games contain 'dice' command, it is very simple and
|
||||||
is not sufficient for advanced uses, such as online playing of tabletop
|
is not sufficient for advanced uses, such as online playing of tabletop
|
||||||
role-playing games using IRC.
|
role-playing games using IRC.
|
||||||
The most basic feature of any dicebot is, of course, rolling of one or several
|
The most basic feature of any dice plugin is, of course, rolling of one or several
|
||||||
identical dice and showing the results. That is what core 'dice' command can
|
identical dice and showing the results. That is what core 'dice' command can
|
||||||
do. It takes an expression such as 3d6 and returns a series of numbers -
|
do. It takes an expression such as 3d6 and returns a series of numbers -
|
||||||
results of rolling each (of 3) die (6-sided): '2, 4, and 4'. This may be
|
results of rolling each (of 3) die (6-sided): '2, 4, and 4'. This may be
|
||||||
@ -57,6 +57,6 @@ shuffled before drawing next card.
|
|||||||
Thanks
|
Thanks
|
||||||
~~~~~~
|
~~~~~~
|
||||||
Ur-DnD roleplaying community (#dnd @ RusNet) for games, talking and fun, and
|
Ur-DnD roleplaying community (#dnd @ RusNet) for games, talking and fun, and
|
||||||
personally Zuzuzu for describing basic dicebot requirements, which led to
|
personally Zuzuzu for describing basic dice requirements, which led to
|
||||||
writing the first version of this plugin in August 2007.
|
writing the first version of this plugin in August 2007.
|
||||||
|
|
@ -39,7 +39,7 @@ from supybot.utils.str import format, ordinal
|
|||||||
import supybot.ircmsgs as ircmsgs
|
import supybot.ircmsgs as ircmsgs
|
||||||
import supybot.callbacks as callbacks
|
import supybot.callbacks as callbacks
|
||||||
|
|
||||||
class Dicebot(callbacks.Plugin):
|
class Dice(callbacks.Plugin):
|
||||||
"""This plugin supports rolling the dice using !roll 4d20+3 as well as
|
"""This plugin supports rolling the dice using !roll 4d20+3 as well as
|
||||||
automatically rolling such combinations it sees in the channel (if
|
automatically rolling such combinations it sees in the channel (if
|
||||||
autoRoll option is enabled for that channel) or query (if
|
autoRoll option is enabled for that channel) or query (if
|
||||||
@ -65,7 +65,7 @@ class Dicebot(callbacks.Plugin):
|
|||||||
MAX_ROLLS = 30
|
MAX_ROLLS = 30
|
||||||
|
|
||||||
def __init__(self, irc):
|
def __init__(self, irc):
|
||||||
super(Dicebot, self).__init__(irc)
|
super(Dice, self).__init__(irc)
|
||||||
self.deck = Deck()
|
self.deck = Deck()
|
||||||
|
|
||||||
def _roll(self, dice, sides, mod=0):
|
def _roll(self, dice, sides, mod=0):
|
||||||
@ -505,7 +505,7 @@ class Dicebot(callbacks.Plugin):
|
|||||||
text = msg.args[1]
|
text = msg.args[1]
|
||||||
self._process(irc, text)
|
self._process(irc, text)
|
||||||
|
|
||||||
Class = Dicebot
|
Class = Dice
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
115
Dice/test.py
Normal file
115
Dice/test.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
###
|
||||||
|
# Copyright (c) 2007-2010, Andrey Rahmatullin
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * 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.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# 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 OWNER 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.
|
||||||
|
###
|
||||||
|
|
||||||
|
from supybot.test import PluginTestCase
|
||||||
|
|
||||||
|
class DiceTestCase(PluginTestCase):
|
||||||
|
plugins = ('Dice',)
|
||||||
|
def testPlugin(self):
|
||||||
|
self.assertHelp('Dice roll')
|
||||||
|
self.assertNotError('Dice roll 1d2')
|
||||||
|
self.assertNoResponse('Dice roll dummy')
|
||||||
|
|
||||||
|
def testRollStd(self):
|
||||||
|
self.assertRegexp('Dice roll 1d20', r'\[1d20\] \d+')
|
||||||
|
self.assertRegexp('Dice roll d20', r'\[1d20\] \d+')
|
||||||
|
self.assertRegexp('Dice roll 1d20+5', r'\[1d20\+5\] \d+')
|
||||||
|
self.assertRegexp('Dice roll d20+5', r'\[1d20\+5\] \d+')
|
||||||
|
self.assertRegexp('Dice roll 1d20-30', r'\[1d20-30\] -\d+')
|
||||||
|
self.assertRegexp('Dice roll d20-30', r'\[1d20-30\] -\d+')
|
||||||
|
self.assertRegexp('Dice roll 2d20-1', r'\[2d20-1\] \d+')
|
||||||
|
self.assertRegexp('Dice roll d20-1d6+3', r'\[1d20-1d6\+3\] -?\d+')
|
||||||
|
self.assertRegexp('Dice roll 1d20+d20+3', r'\[2d20\+3\] \d+')
|
||||||
|
self.assertRegexp('Dice roll 1d20+4+d6-3', r'\[1d20\+1d6\+1\] \d+')
|
||||||
|
self.assertNoResponse('Dice roll 1d1')
|
||||||
|
|
||||||
|
def testRollMult(self):
|
||||||
|
self.assertRegexp('Dice roll 2#1d20', r'\[1d20\] \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 2#d20', r'\[1d20\] \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 2#1d20+5', r'\[1d20\+5\] \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 2#d20+5', r'\[1d20\+5\] \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 2#1d20-30', r'\[1d20-30\] -\d+, -\d+')
|
||||||
|
self.assertRegexp('Dice roll 2#d20-30', r'\[1d20-30\] -\d+, -\d+')
|
||||||
|
self.assertRegexp('Dice roll 2#2d20-1', r'\[2d20-1\] \d+, \d+')
|
||||||
|
self.assertNoResponse('Dice roll 2#1d1')
|
||||||
|
|
||||||
|
def testRollSR(self):
|
||||||
|
self.assertRegexp('Dice roll 2#sd', r'\(pool 2\) (\d hits?|critical glitch!)')
|
||||||
|
self.assertRegexp('Dice roll 4#sd', r'\(pool 4\) (\d hits?(, glitch)?|critical glitch!)')
|
||||||
|
self.assertNoResponse('Dice roll 0#sd')
|
||||||
|
|
||||||
|
def testRollSRX(self):
|
||||||
|
self.assertRegexp('Dice roll 2#sdx', r'\(pool 2, exploding\) (\d hits?|critical glitch!)')
|
||||||
|
self.assertRegexp('Dice roll 4#sdx', r'\(pool 4, exploding\) (\d hits?(, glitch)?|critical glitch!)')
|
||||||
|
self.assertNoResponse('Dice roll 0#sdx')
|
||||||
|
|
||||||
|
def testRoll7S(self):
|
||||||
|
self.assertRegexp('Dice roll 3k2', r'\[3k2\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 2k3', r'\[2k2\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 3kk2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
||||||
|
self.assertRegexp('Dice roll +3k2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
||||||
|
self.assertRegexp('Dice roll -3k2', r'\[3k2, not exploding\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll +3kk2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
||||||
|
self.assertRegexp('Dice roll -3kk2', r'\[3k2, not exploding\] \(\d+\) \d+, \d+ \| \d+')
|
||||||
|
self.assertRegexp('Dice roll 3k2+1', r'\[3k2\+1\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 3k2-1', r'\[3k2-1\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll -3k2-1', r'\[3k2-1, not exploding\] \(\d+\) \d+, \d+')
|
||||||
|
self.assertRegexp('Dice roll 10k10', r'\[10k10\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12k10', r'\[10k10\+20\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12k9', r'\[10k10\+10\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12k8', r'\[10k10\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12k9+5', r'\[10k10\+15\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12kk9', r'\[10k10\+10\] \(\d+\) (\d+, ){9}\d+')
|
||||||
|
self.assertRegexp('Dice roll 12kk7', r'\[10k9\] \(\d+\) (\d+, ){8}\d+ \| \d+')
|
||||||
|
self.assertRegexp('Dice roll 3#3k2', r'\[3k2\] \(\d+\) \d+, \d+(; \(\d+\) \d+, \d+){2}')
|
||||||
|
|
||||||
|
def testDeck(self):
|
||||||
|
validator = r'(2|3|4|5|6|7|8|9|10|J|Q|K|A)(♣|♦|♥|♠)|(Black|Red) Joker'
|
||||||
|
self.assertRegexp('Dice draw', validator)
|
||||||
|
self.assertResponse('Dice shuffle', 'shuffled')
|
||||||
|
for i in range(0, 54):
|
||||||
|
self.assertRegexp('Dice draw', validator)
|
||||||
|
|
||||||
|
def testWoD(self):
|
||||||
|
self.assertRegexp('Dice roll 3w', r'\(3\) (\d success(es)?|FAIL)')
|
||||||
|
self.assertRegexp('Dice roll 3w-', r'\(3, not exploding\) (\d success(es)?|FAIL)')
|
||||||
|
self.assertRegexp('Dice roll 3w8', r'\(3, 8-again\) (\d success(es)?|FAIL)')
|
||||||
|
self.assertNoResponse('Dice roll 0w')
|
||||||
|
|
||||||
|
def testDH(self):
|
||||||
|
self.assertRegexp('Dice roll vs(10)', r'-?\d+ \(\d+ vs 10\)')
|
||||||
|
self.assertRegexp('Dice roll vs(10+20)', r'-?\d+ \(\d+ vs 30\)')
|
||||||
|
self.assertRegexp('Dice roll vs(10+20-5)', r'-?\d+ \(\d+ vs 25\)')
|
||||||
|
self.assertRegexp('Dice roll 3vs(10+20)', r'-?\d+, -?\d+, -?\d+ \(\d+, \d+, \d+ vs 30\)')
|
||||||
|
|
||||||
|
def testWG(self):
|
||||||
|
self.assertRegexp('Dice roll 10#wg', r'\[pool 10\] \d+ icon\(s\): [❶❷❸❹❺❻] ([1-5➅] )*(\| Glory|\| Complication)?')
|
||||||
|
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
115
Dicebot/test.py
115
Dicebot/test.py
@ -1,115 +0,0 @@
|
|||||||
###
|
|
||||||
# Copyright (c) 2007-2010, Andrey Rahmatullin
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright notice,
|
|
||||||
# this list of conditions, and the following disclaimer.
|
|
||||||
# * 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.
|
|
||||||
# * Neither the name of the author of this software nor the name of
|
|
||||||
# contributors to this software may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written consent.
|
|
||||||
#
|
|
||||||
# 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 OWNER 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.
|
|
||||||
###
|
|
||||||
|
|
||||||
from supybot.test import PluginTestCase
|
|
||||||
|
|
||||||
class DicebotTestCase(PluginTestCase):
|
|
||||||
plugins = ('Dicebot',)
|
|
||||||
def testPlugin(self):
|
|
||||||
self.assertHelp('dicebot roll')
|
|
||||||
self.assertNotError('dicebot roll 1d2')
|
|
||||||
self.assertNoResponse('dicebot roll dummy')
|
|
||||||
|
|
||||||
def testRollStd(self):
|
|
||||||
self.assertRegexp('dicebot roll 1d20', r'\[1d20\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll d20', r'\[1d20\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll 1d20+5', r'\[1d20\+5\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll d20+5', r'\[1d20\+5\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll 1d20-30', r'\[1d20-30\] -\d+')
|
|
||||||
self.assertRegexp('dicebot roll d20-30', r'\[1d20-30\] -\d+')
|
|
||||||
self.assertRegexp('dicebot roll 2d20-1', r'\[2d20-1\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll d20-1d6+3', r'\[1d20-1d6\+3\] -?\d+')
|
|
||||||
self.assertRegexp('dicebot roll 1d20+d20+3', r'\[2d20\+3\] \d+')
|
|
||||||
self.assertRegexp('dicebot roll 1d20+4+d6-3', r'\[1d20\+1d6\+1\] \d+')
|
|
||||||
self.assertNoResponse('dicebot roll 1d1')
|
|
||||||
|
|
||||||
def testRollMult(self):
|
|
||||||
self.assertRegexp('dicebot roll 2#1d20', r'\[1d20\] \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#d20', r'\[1d20\] \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#1d20+5', r'\[1d20\+5\] \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#d20+5', r'\[1d20\+5\] \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#1d20-30', r'\[1d20-30\] -\d+, -\d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#d20-30', r'\[1d20-30\] -\d+, -\d+')
|
|
||||||
self.assertRegexp('dicebot roll 2#2d20-1', r'\[2d20-1\] \d+, \d+')
|
|
||||||
self.assertNoResponse('dicebot roll 2#1d1')
|
|
||||||
|
|
||||||
def testRollSR(self):
|
|
||||||
self.assertRegexp('dicebot roll 2#sd', r'\(pool 2\) (\d hits?|critical glitch!)')
|
|
||||||
self.assertRegexp('dicebot roll 4#sd', r'\(pool 4\) (\d hits?(, glitch)?|critical glitch!)')
|
|
||||||
self.assertNoResponse('dicebot roll 0#sd')
|
|
||||||
|
|
||||||
def testRollSRX(self):
|
|
||||||
self.assertRegexp('dicebot roll 2#sdx', r'\(pool 2, exploding\) (\d hits?|critical glitch!)')
|
|
||||||
self.assertRegexp('dicebot roll 4#sdx', r'\(pool 4, exploding\) (\d hits?(, glitch)?|critical glitch!)')
|
|
||||||
self.assertNoResponse('dicebot roll 0#sdx')
|
|
||||||
|
|
||||||
def testRoll7S(self):
|
|
||||||
self.assertRegexp('dicebot roll 3k2', r'\[3k2\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 2k3', r'\[2k2\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 3kk2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
|
||||||
self.assertRegexp('dicebot roll +3k2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
|
||||||
self.assertRegexp('dicebot roll -3k2', r'\[3k2, not exploding\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll +3kk2', r'\[3k2\] \(\d+\) \d+, \d+ \| \d+')
|
|
||||||
self.assertRegexp('dicebot roll -3kk2', r'\[3k2, not exploding\] \(\d+\) \d+, \d+ \| \d+')
|
|
||||||
self.assertRegexp('dicebot roll 3k2+1', r'\[3k2\+1\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 3k2-1', r'\[3k2-1\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll -3k2-1', r'\[3k2-1, not exploding\] \(\d+\) \d+, \d+')
|
|
||||||
self.assertRegexp('dicebot roll 10k10', r'\[10k10\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12k10', r'\[10k10\+20\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12k9', r'\[10k10\+10\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12k8', r'\[10k10\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12k9+5', r'\[10k10\+15\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12kk9', r'\[10k10\+10\] \(\d+\) (\d+, ){9}\d+')
|
|
||||||
self.assertRegexp('dicebot roll 12kk7', r'\[10k9\] \(\d+\) (\d+, ){8}\d+ \| \d+')
|
|
||||||
self.assertRegexp('dicebot roll 3#3k2', r'\[3k2\] \(\d+\) \d+, \d+(; \(\d+\) \d+, \d+){2}')
|
|
||||||
|
|
||||||
def testDeck(self):
|
|
||||||
validator = r'(2|3|4|5|6|7|8|9|10|J|Q|K|A)(♣|♦|♥|♠)|(Black|Red) Joker'
|
|
||||||
self.assertRegexp('dicebot draw', validator)
|
|
||||||
self.assertResponse('dicebot shuffle', 'shuffled')
|
|
||||||
for i in range(0, 54):
|
|
||||||
self.assertRegexp('dicebot draw', validator)
|
|
||||||
|
|
||||||
def testWoD(self):
|
|
||||||
self.assertRegexp('dicebot roll 3w', r'\(3\) (\d success(es)?|FAIL)')
|
|
||||||
self.assertRegexp('dicebot roll 3w-', r'\(3, not exploding\) (\d success(es)?|FAIL)')
|
|
||||||
self.assertRegexp('dicebot roll 3w8', r'\(3, 8-again\) (\d success(es)?|FAIL)')
|
|
||||||
self.assertNoResponse('dicebot roll 0w')
|
|
||||||
|
|
||||||
def testDH(self):
|
|
||||||
self.assertRegexp('dicebot roll vs(10)', r'-?\d+ \(\d+ vs 10\)')
|
|
||||||
self.assertRegexp('dicebot roll vs(10+20)', r'-?\d+ \(\d+ vs 30\)')
|
|
||||||
self.assertRegexp('dicebot roll vs(10+20-5)', r'-?\d+ \(\d+ vs 25\)')
|
|
||||||
self.assertRegexp('dicebot roll 3vs(10+20)', r'-?\d+, -?\d+, -?\d+ \(\d+, \d+, \d+ vs 30\)')
|
|
||||||
|
|
||||||
def testWG(self):
|
|
||||||
self.assertRegexp('dicebot roll 10#wg', r'\[pool 10\] \d+ icon\(s\): [❶❷❸❹❺❻] ([1-5➅] )*(\| Glory|\| Complication)?')
|
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
|
Loading…
x
Reference in New Issue
Block a user