euphoria-roller/roller.py

57 lines
1.5 KiB
Python

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()