From faaf2ecb395ecafa66ac0a095b1db2a17b79eeeb Mon Sep 17 00:00:00 2001 From: Dusty Pianalto Date: Mon, 21 Oct 2019 01:06:09 -0800 Subject: [PATCH] Add from_dict class method Add new event types Add missing attributes --- lib/events.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/events.py b/lib/events.py index 51d6bda..78684f1 100644 --- a/lib/events.py +++ b/lib/events.py @@ -1,15 +1,35 @@ from dataclasses import dataclass from typing import Optional, List +from .client import Client +from .room import Room from .content import ContentBase @dataclass class EventBase: + client: Client content: ContentBase type: str sender: str + @classmethod + def from_dict(cls, client: Client, event_dict: dict): + from .content import content_dispatcher + if event_dict['type'] == 'm.room.message': + content_class = content_dispatcher[event_dict['content']['msgtype']] + else: + content_class = content_dispatcher[event_dict['type']] + + content_dict = event_dict['content'] + del event_dict['content'] + + return cls( + client=client, + content=content_class(content_dict), + **event_dict + ) + @dataclass class UnsignedData: @@ -21,19 +41,30 @@ class UnsignedData: @dataclass class RoomEvent(EventBase): - from .room import Room event_id: str - origin_server_id: int + origin_server_ts: int unsigned: UnsignedData room: Room + user_id: str @dataclass class StateEvent(RoomEvent): state_key: str + age: int prev_content: Optional[EventBase] = None @dataclass class RedactionEvent(RoomEvent): redacts: EventBase + + +@dataclass +class MessageEvent(RoomEvent): + pass + + +@dataclass +class PresenceEvent(EventBase): + pass