12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- from dataclasses import dataclass
- from datetime import datetime
- from collections.abc import Callable, Coroutine, Container
- from typing import Union, Any, Optional
- @dataclass
- class Attachment:
- name: str
- body: Union[str, bytes]
- @dataclass
- class Message:
- origin_id: str
- channel_id: str
- sender_id: str
- timestamp: datetime
- origin_admin: bool
- channel_admin: bool
- text: Optional[str]
- attachments: list[Attachment]
- @dataclass
- class Response:
- origin_id: str
- channel_id: str
- text: str
- attachments: list[Attachment]
- @staticmethod
- def from_message(msg: Message, text: str, attachments: list[Attachment] = None) -> "Response":
- return Response(
- origin_id=msg.origin_id,
- channel_id=msg.channel_id,
- text=text,
- attachments=attachments or [],
- )
- @dataclass
- class Context:
- message: Message
- config: Callable[[str], Any]
- respond: Callable[[], Coroutine[None, None, None]]
- # database: Callable # TODO proper type
- CommandType = Callable[[Context], Coroutine[None, None, None]]
- @dataclass
- class CommandConfiguration:
- commands: dict[str, CommandType]
- call_and_response: dict[str, str]
- aliases: dict[str, str]
- bangs: Container[str] = ("!",)
|