diff --git a/hotdog/config.py b/hotdog/config.py index 4ebf43a..5643a50 100644 --- a/hotdog/config.py +++ b/hotdog/config.py @@ -17,11 +17,8 @@ class Fallbackdict(dict): super().__init__() self._default = default - def get(self, key, default=None): - return super().get(key, self._default if default is None else default) - - def __getitem__(self, key): - return super().get(key, self._default) + def __missing__(self, key): + return self._default class Config: diff --git a/hotdog/models.py b/hotdog/models.py index 45ee030..e33eea1 100644 --- a/hotdog/models.py +++ b/hotdog/models.py @@ -29,7 +29,7 @@ class Job: return 2 * x * random() - x -class Tokens(tuple): +class Tokens(Tuple[str]): def get(self, pos, default=None): try: return self[pos] @@ -68,11 +68,15 @@ class Message: text: str room: nio.rooms.MatrixRoom event: nio.events.room_events.RoomMessageText - tokens: Tokens = None - words: Tokens = None - is_for_me: bool = False - command: Optional[str] = None - args: Optional[Tokens] = None + tokens: Tokens = ( + None # The text split up into clean tokens, to be used for command handlers. + ) + words: Tokens = ( + None # A subset of the message tokens excluding any command keyword. + ) + is_for_me: bool = False # Wether the user addressed the bot using its name. + command: Optional[str] = None # The command keyword issued by the user, if any. + args: Optional[Tokens] = None # args will always be set if command is set @property def sender_name(self) -> str: @@ -87,6 +91,10 @@ class Message: # "A group is an unnamed room with no canonical alias." return self.room.is_group and self.room.member_count == 2 + # @property + # def words(self) -> Tokens: + # return self.args or self.tokens + def __post_init__(self): self.tokens = Tokens.from_str(self.text) self.words = self.tokens