57 lines
1.5 KiB
Python
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()
|