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)