mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 19:44:20 +00:00
32 lines
976 B
Python
32 lines
976 B
Python
import abc
|
|
from typing import *
|
|
import royalnet
|
|
import royalnet.commands as rc
|
|
import royalnet.utils as ru
|
|
from ...tables import DndBattleUnit
|
|
from ...utils import get_targets
|
|
|
|
|
|
class DndBattleTargetCommand(rc.Command, abc.ABC):
|
|
@abc.abstractmethod
|
|
async def _change(self, unit: DndBattleUnit, args: List[str]):
|
|
raise NotImplementedError()
|
|
|
|
async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
|
|
target = args[0]
|
|
|
|
async with data.session_acm() as session:
|
|
units = await get_targets(target, data=data, session=session)
|
|
if len(units) == 0:
|
|
raise rc.InvalidInputError(f"No targets found matching [c]{target}[/c].")
|
|
|
|
for unit in units:
|
|
await self._change(unit, args[1:])
|
|
|
|
await session.commit()
|
|
|
|
message = []
|
|
for unit in units:
|
|
message.append(f"{unit}")
|
|
|
|
await data.reply("\n\n".join(message))
|