1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-12-17 23:24:20 +00:00
royalnet/rpgpack/commands/dndactive.py
2019-11-11 10:34:05 +01:00

56 lines
2.4 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from royalnet.commands import *
from royalnet.utils import asyncify
from ..tables import DndCharacter, DndActiveCharacter
class DndactiveCommand(Command):
name: str = "dndactive"
description: str = "Set a DnD character as active."
aliases = ["da", "dnda", "active", "dactive"]
syntax = "{name|id}"
tables = {DndCharacter, DndActiveCharacter}
async def run(self, args: CommandArgs, data: CommandData) -> None:
identifier = args.optional(0)
author = await data.get_author(error_if_none=True)
if identifier is None:
# Display the active character
if author.dnd_active_character is None:
await data.reply(" You have no active characters.")
else:
await data.reply(f" You currently active character is [b]{author.dnd_active_character}[/b].")
return
try:
identifier = int(identifier)
except ValueError:
# Find the character by name
chars = await asyncify(data.session.query(self.alchemy.DndCharacter).filter_by(name=identifier).all)
if len(chars) >= 2:
char_string = "\n".join([f"[c]{char.character_id}[/c] (LV {char.level}) by {char.creator})" for char in chars])
raise CommandError(f"Multiple characters share the name {identifier}, "
f"please activate them using their id:\n{char_string}")
elif len(chars) == 1:
char = chars[0]
else:
char = None
else:
# Find the character by id
char = await asyncify(data.session.query(self.alchemy.DndCharacter)
.filter_by(character_id=identifier)
.one_or_none)
if char is None:
raise CommandError("No character found.")
# Check if the player already has an active character
if author.dnd_active_character is None:
# Create a new active character
achar = self.alchemy.DndActiveCharacter(character=char, user=author)
data.session.add(achar)
else:
# Change the active character
author.dnd_active_character.character = char
await data.session_commit()
await data.reply(f"✅ Active character set to [b]{char}[/b]!")