dice roller, fairly sophisticated already, for normal rolls

This commit is contained in:
Brian S. Stephan 2010-07-25 17:39:22 -05:00
parent 1c88a3672e
commit ec2be10aca
1 changed files with 71 additions and 0 deletions

View File

@ -3,6 +3,7 @@
from ConfigParser import ConfigParser, NoSectionError, NoOptionError from ConfigParser import ConfigParser, NoSectionError, NoOptionError
from datetime import datetime from datetime import datetime
import os import os
import random
import re import re
import sys import sys
@ -182,6 +183,74 @@ def sub_countdown(connection, event, nick, userhost, replypath, what, admin_unlo
connection.privmsg(replypath, relstr) connection.privmsg(replypath, relstr)
except NoOptionError: pass except NoOptionError: pass
#####
# sub_dice
# roll dice, primarily for roleplaying games
#####
def sub_dice(connection, event, nick, userhost, replypath, what, admin_unlocked):
pattern = '^(?:(\d+)#)?(?:(\d+)/)?(\d+)?d(\d+)(?:(\+|\-)(\d+))?(?:\s+(.*))?'
regex = re.compile(pattern)
roll = what
matches = regex.search(roll)
if matches is not None:
# set variables including defaults for unspecified stuff
faces = int(matches.group(4))
comment = matches.group(7)
if matches.group(1) is None:
times = 1
else:
times = int(matches.group(1))
if matches.group(3) is None:
dice = 1
else:
dice = int(matches.group(3))
if matches.group(2) is None:
top = dice
else:
top = int(matches.group(2))
if matches.group(5) is None or matches.group(6) is None:
modifier = 0
else:
if str(matches.group(5)) == '-':
modifier = -1 * int(matches.group(6))
else:
modifier = int(matches.group(6))
result = ''
if comment is not None:
result += comment + ': '
for t in range(times):
ressubstr = ""
rolls = []
for d in range(dice):
rolls.append(str(random.randint(1, faces)))
rolls.sort()
rolls.reverse()
ressubstr = ','.join(rolls[0:top])
sum = 0
for r in rolls[0:top]:
sum += int(r)
sumplus = sum + modifier
result += str(sumplus) + ' [' + ressubstr
if modifier != 0:
if modifier > 0:
result += ' + ' + str(modifier)
else:
result += ' - ' + str(-1 * modifier)
result += ']'
if t != times-1:
result += ', '
connection.privmsg(replypath, result)
##### #####
# on_connect # on_connect
# handler for when the bot has connected to IRC # handler for when the bot has connected to IRC
@ -231,6 +300,7 @@ def on_privmsg(connection, event):
# standard commands # standard commands
sub_report_seen(connection, event, nick, userhost, replypath, what, admin_unlocked) sub_report_seen(connection, event, nick, userhost, replypath, what, admin_unlocked)
sub_countdown(connection, event, nick, userhost, replypath, what, admin_unlocked) sub_countdown(connection, event, nick, userhost, replypath, what, admin_unlocked)
sub_dice(connection, event, nick, userhost, replypath, what, admin_unlocked)
##### #####
# on_pubmsg # on_pubmsg
@ -272,6 +342,7 @@ def on_pubmsg(connection, event):
# standard commands # standard commands
sub_report_seen(connection, event, nick, userhost, replypath, what, admin_unlocked) sub_report_seen(connection, event, nick, userhost, replypath, what, admin_unlocked)
sub_countdown(connection, event, nick, userhost, replypath, what, admin_unlocked) sub_countdown(connection, event, nick, userhost, replypath, what, admin_unlocked)
sub_dice(connection, event, nick, userhost, replypath, what, admin_unlocked)
##### #####
# init # init