1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00
royalnet/rpgpack/commands/dndaddunit.py

65 lines
2 KiB
Python
Raw Normal View History

from typing import *
import royalnet
import royalnet.commands as rc
import royalnet.utils as ru
2020-03-04 18:29:33 +00:00
from ..types import Faction
from ..tables import DndBattleUnit
from ..utils import get_active_battle
from ..types import Health
class DndaddunitCommand(rc.Command):
name: str = "dndaddunit"
description: str = "Add an Unit to a Battle."
2020-03-04 18:29:33 +00:00
aliases = ["dau", "dndau", "addunit", "daddunit"]
syntax: str = "{faction} {name} {initiative} {health} {armorclass}"
async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
faction = Faction[args[0].upper()]
name = args[1]
initiative = int(args[2])
health = args[3]
armor_class = int(args[4])
DndBattleUnitT = self.alchemy.get(DndBattleUnit)
2020-09-16 00:37:31 +00:00
async with data.session_acm() as session:
active_battle = await get_active_battle(session=session, data=data)
if active_battle is None:
raise rc.CommandError("No battle is active in this chat.")
units_with_same_name = await ru.asyncify(session.query(DndBattleUnitT).filter_by(
name=name,
battle=active_battle.battle
).all)
if len(units_with_same_name) != 0:
raise rc.InvalidInputError("A unit with the same name already exists.")
try:
health = Health.from_text(health)
except ValueError:
raise rc.InvalidInputError("Invalid health string.")
dbu = DndBattleUnitT(
linked_character_id=None,
initiative=initiative,
faction=faction,
name=name,
health_string=health,
armor_class=armor_class,
battle=active_battle.battle
)
session.add(dbu)
await ru.asyncify(session.commit)
await data.reply(f"{dbu}\n"
f"joins the battle!")
if dbu.health.hidden:
await data.delete_invoking()