Source code for navmenu.responses

from typing import Optional

from .contents import BaseContent
from .keyboard import Keyboard


[docs]class Message: """An object that represents a message. Args: content: The message content. keyboard: The message keyboard. payload: The message payload. """ __slots__ = 'keyboard', 'content', 'payload' def __init__( self, content: Optional[BaseContent] = None, keyboard: Optional[Keyboard] = None, payload: Optional[dict] = None, ) -> None: if payload is None: payload = {} self.content = content self.keyboard = keyboard self.payload = payload def __repr__(self) -> str: return f'Message({self.content}, {self.keyboard}, {self.payload})'
[docs] def get_content(self) -> dict: """Format and return message content. Returns: Formatted message content. """ if self.content is None: return {} return {k: ( self.content[k].format(**self.payload) if isinstance(self.content[k], str) else self.content[k] ) for k in self.content.keys()}
[docs] def update_payload(self, payload: dict) -> None: """Update the message payload. Args: payload: New message payload. """ self.payload = payload
[docs] def serialize(self) -> dict: """Serialize the class instance to a dictionary. Returns: A serialized class instance. """ res = {} if self.content is not None: res['content'] = { 'type': self.content.__class__.__name__, **self.content.serialize(), } if self.payload: res['payload'] = self.payload return res
[docs]class Response: """An object that represents a message and can be used to change the current menu. Args: message: The message. menu: The name of the menu to go to. go_back_count: How many steps to go back. """ __slots__ = 'message', 'menu', 'go_back_count' def __init__( self, message: Optional[Message] = None, menu: Optional[str] = None, go_back_count: Optional[int] = None ) -> None: self.message = message self.menu = menu self.go_back_count = go_back_count def __repr__(self) -> str: return f'Response({self.message}, {repr(self.menu)}, {self.go_back_count})'
[docs] def update_payload(self, payload: dict) -> None: """Update the message payload. Args: payload: New message payload. """ if self.message is not None: self.message.update_payload(payload)
[docs] def serialize(self) -> dict: """Serialize the class instance to a dictionary. Returns: A serialized class instance. """ res = {} if self.message is not None: res['message'] = { 'type': self.message.__class__.__name__, **self.message.serialize(), } if self.menu is not None: res['menu'] = self.menu if self.go_back_count is not None: res['go_back_count'] = self.go_back_count return res