2020-05-13 22:11:48 +00:00
|
|
|
from typing import *
|
|
|
|
import royalnet.commands as rc
|
|
|
|
import royalnet.backpack.tables as rbt
|
|
|
|
|
|
|
|
from ..tables import FiorygiTransaction
|
|
|
|
|
|
|
|
|
|
|
|
class GivefiorygiCommand(rc.Command):
|
|
|
|
name: str = "givefiorygi"
|
|
|
|
|
|
|
|
description: str = "Cedi fiorygi a un altro utente."
|
|
|
|
|
|
|
|
syntax: str = "{destinatario} {quantità} {motivo}"
|
|
|
|
|
|
|
|
async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
|
|
|
|
author = await data.get_author(error_if_none=True)
|
|
|
|
|
|
|
|
user_arg = args[0]
|
|
|
|
qty_arg = args[1]
|
|
|
|
|
|
|
|
if user_arg is None:
|
|
|
|
raise rc.InvalidInputError("Non hai specificato un destinatario!")
|
2020-08-20 01:20:53 +00:00
|
|
|
async with data.session_acm() as session:
|
|
|
|
user = await rbt.User.find(self.alchemy, session, user_arg)
|
2020-05-13 22:11:48 +00:00
|
|
|
if user is None:
|
|
|
|
raise rc.InvalidInputError("L'utente specificato non esiste!")
|
2020-05-15 17:30:43 +00:00
|
|
|
if user.uid == author.uid:
|
|
|
|
raise rc.InvalidInputError("Non puoi inviare fiorygi a te stesso!")
|
2020-05-13 22:11:48 +00:00
|
|
|
|
|
|
|
if qty_arg is None:
|
|
|
|
raise rc.InvalidInputError("Non hai specificato una quantità!")
|
|
|
|
try:
|
|
|
|
qty = int(qty_arg)
|
|
|
|
except ValueError:
|
|
|
|
raise rc.InvalidInputError("La quantità specificata non è un numero!")
|
|
|
|
if qty <= 0:
|
|
|
|
raise rc.InvalidInputError("La quantità specificata deve essere almeno 1!")
|
|
|
|
|
|
|
|
if author.fiorygi.fiorygi < qty:
|
|
|
|
raise rc.InvalidInputError("Non hai abbastanza fiorygi per effettuare la transazione!")
|
|
|
|
|
2020-05-13 23:08:36 +00:00
|
|
|
await FiorygiTransaction.spawn_fiorygi(data, author, -qty, f"aver ceduto fiorygi a {user}")
|
2020-06-06 00:00:43 +00:00
|
|
|
await FiorygiTransaction.spawn_fiorygi(data, user, qty, f"aver ricevuto fiorygi da {author}")
|