88 lines
2.4 KiB
Python
88 lines
2.4 KiB
Python
|
import discord
|
||
|
import random
|
||
|
import sys
|
||
|
|
||
|
client = discord.Client()
|
||
|
|
||
|
def succ(n):
|
||
|
if n == 0:
|
||
|
return 'Failure'
|
||
|
|
||
|
result = '{0} success{1}'.format(n, '' if n == 1 else 'es')
|
||
|
if n >= 5:
|
||
|
result += ', exceptional success! :tada:'
|
||
|
return result
|
||
|
|
||
|
def chance_die():
|
||
|
successes = 0
|
||
|
result = ''
|
||
|
roll = random.randrange(10)
|
||
|
if roll == 1:
|
||
|
return '1\n**Dramatic failure! :fire:**'
|
||
|
while roll == 0:
|
||
|
successes += 1
|
||
|
result += '0->'
|
||
|
roll = random.randrange(10)
|
||
|
result += '~~{0}~~'.format(roll)
|
||
|
return '{0}\n**{1}**'.format(result, succ(successes))
|
||
|
|
||
|
def dice(count):
|
||
|
results = []
|
||
|
successes = 0
|
||
|
for i in range(count):
|
||
|
result = ''
|
||
|
roll = random.randrange(10)
|
||
|
while roll == 0:
|
||
|
successes += 1
|
||
|
result += '0->'
|
||
|
roll = random.randrange(10)
|
||
|
if roll >= 8:
|
||
|
successes += 1
|
||
|
result += (('{0}' if roll >= 8 else '~~{0}~~').format(roll))
|
||
|
results.append(result)
|
||
|
|
||
|
return '{0}\n**{1}**'.format(', '.join(results), succ(successes))
|
||
|
|
||
|
def initiative(init_mod):
|
||
|
roll = random.randint(1, 10)
|
||
|
return('{0}+{1} = **{2} Initiative**'.format(roll, init_mod, roll+init_mod))
|
||
|
|
||
|
@client.event
|
||
|
async def on_ready():
|
||
|
print('logged in as {0.user}'.format(client), file=sys.stderr)
|
||
|
await client.change_presence(activity=discord.Game('!n for n dice, ?i for initiative'))
|
||
|
|
||
|
@client.event
|
||
|
async def on_message(message):
|
||
|
if message.author == client.user:
|
||
|
return
|
||
|
|
||
|
if message.content.startswith('!'):
|
||
|
try:
|
||
|
count=int(message.content.split()[0][1:])
|
||
|
except ValueError:
|
||
|
print('error parsing message {0}'.format(message.content), file=sys.stderr)
|
||
|
return
|
||
|
|
||
|
if count > 69:
|
||
|
await message.channel.send(':thinking:')
|
||
|
elif count <= 0:
|
||
|
await message.channel.send(chance_die())
|
||
|
else:
|
||
|
await message.channel.send(dice(count))
|
||
|
elif message.content.startswith('?'):
|
||
|
try:
|
||
|
init_mod=int(message.content.split()[0][1:])
|
||
|
except ValueError:
|
||
|
print('error parsing message {0}'.format(message.content), file=sys.stderr)
|
||
|
return
|
||
|
|
||
|
if init_mod > 20 or init_mod < -20:
|
||
|
await message.channel.send(':thinking:')
|
||
|
else:
|
||
|
await message.channel.send(initiative(init_mod))
|
||
|
|
||
|
with open('token') as f:
|
||
|
token = f.read().strip()
|
||
|
client.run(token)
|