from abc import ABC from dataclasses import dataclass from events import Events @dataclass class Response(ABC): sender: str event: Events def to_json(self) -> dict: d = self.__dict__ d.pop('event') return d @dataclass class NewCharacter(Response): character: dict @dataclass class RemoveActor(Response): message: str name: str @dataclass class PublicMessage(Response): message: str @dataclass class PrivateMessage(Response): message: str recipient: str @dataclass class DiceRoll(Response): message: str dice: list result: int def build_dice_roll(sender, message, dice, result): return DiceRoll(sender, Events.DICE_ROLL, message, dice, result) def build_new_character(sender, char_dict): return NewCharacter(sender, Events.NEW_CHARACTER, char_dict) def build_remove_actor(sender, message, name): return RemoveActor(sender, Events.REMOVE_ACTOR, message, name) def build_private_message(sender, message, recipient): return PrivateMessage(sender, Events.PRIVATE_CHAT, message, recipient) def build_public_message(sender, message): return PublicMessage(sender, Events.PUBLIC_CHAT, message) def build_system_message(user, message): return PrivateMessage('System', Events.SYSTEM_MESSAGE, message, user)