dice roller, fairly sophisticated already, for normal rolls
This commit is contained in:
parent
1c88a3672e
commit
ec2be10aca
71
dr.botzo.py
71
dr.botzo.py
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue