diff --git a/.gitignore b/.gitignore index 13d1490..0d4fea2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +token + # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/README.md b/README.md index 5bb61b9..9031e2f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ # doctor-dinosaur -Dice roller discord bot for Genius: the Transgression and other World of Darkness RPGs \ No newline at end of file +Dice roller discord bot for Genius: the Transgression and other World of Darkness RPGs + +## Setup + + git clone https://git.xeno.science/xenofem/doctor-dinosaur + cd doctor-dinosaur + python3 -m venv env + source env/bin/activate + pip install discord.py + echo > token + python doctor_dinosaur.py \ No newline at end of file diff --git a/doctor_dinosaur.py b/doctor_dinosaur.py new file mode 100644 index 0000000..a57deee --- /dev/null +++ b/doctor_dinosaur.py @@ -0,0 +1,71 @@ +import discord +import random + +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)) + +@client.event +async def on_ready(): + print('logged in as {0.user}'.format(client)) + await client.change_presence(activity=discord.Game('!n for n dice, !0 for chance die')) + +@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)) + 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)) + +with open('token') as f: + token = f.read().strip() +client.run(token)