From 09eb3771358069420648029057c039abaeda8ecc Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 27 Jul 2018 13:09:40 +0000 Subject: [PATCH] Port roller from @Pouncy's karelia version --- .gitignore | 5 +++++ roller.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 .gitignore create mode 100644 roller.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36517c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +**/__pycache__ +yaboli +websockets +join_rooms.py +*.cookie diff --git a/roller.py b/roller.py new file mode 100644 index 0000000..8a225d2 --- /dev/null +++ b/roller.py @@ -0,0 +1,57 @@ +import asyncio +import random + +import yaboli +from yaboli.utils import * + +# List of rooms kept in separate file, which is .gitignore'd +import join_rooms + + +ROLL = r"[!/]roll (\d+)d(\d+)\s*(\+\s*(\d+))?" + +class Roller(yaboli.Bot): + async def send(self, room, message): + long_help = ( + "!roll 2d4 - roll 2 4-sided dice\n" + "!roll 2d4+5 - roll 2 4-sided dice with a bonus of 5\n" + "/roll can be used instead of !roll.\n" + ) + await self.botrulez_ping_general(room, message) + await self.botrulez_ping_specific(room, message) + await self.botrulez_help_general(room, message, help_text="I roll dice") + await self.botrulez_help_specific(room, message, help_text=long_help) + await self.botrulez_uptime(room, message) + await self.botrulez_kill(room, message) + await self.botrulez_restart(room, message) + + await self.trigger_roll(room, message) + + forward = send + + @yaboli.trigger(ROLL) + async def trigger_roll(self, room, message, match): + amount = int(match.group(1)) + sides = int(match.group(2)) + bonus = match.group(4) + if bonus: + bonus = int(bonus) + + results = [random.randint(1, sides) for roll in range(amount)] + result = sum(results) + resultstr = ", ".join(str(r) for r in results) + + if bonus is not None: + text = f"{result + bonus}: {resultstr} + {bonus}" + else: + text = f"{result}: {resultstr}" + + await room.send(text, message.mid) + +def main(): + bot = Roller("Roller", "roller.cookie") + join_rooms.join_rooms(bot) + asyncio.get_event_loop().run_forever() + +if __name__ == "__main__": + main()