from typing import Dict, Any, Optional class QQOfficialEvent(dict): @staticmethod def from_payload(payload: Dict[str, Any]) -> Optional["QQOfficialEvent"]: try: event = QQOfficialEvent(payload) return event except KeyError: return None @property def t(self) -> str: """ 事件类型 """ return self.get("t", "") @property def user_openid(self) -> str: """ 用户openid """ return self.get("user_openid",{}) @property def timestamp(self) -> str: """ 时间戳 """ return self.get("timestamp",{}) @property def d_author_id(self) -> str: """ 作者id """ return self.get("id",{}) @property def content(self) -> str: """ 内容 """ return self.get("content",'') @property def d_id(self) -> str: """ d_id """ return self.get("d_id",{}) @property def id(self) -> str: """ 消息id,msg_id """ return self.get("id",{}) @property def channel_id(self) -> str: """ 频道id """ return self.get("channel_id",{}) @property def username(self) -> str: """ 用户名 """ return self.get("username",{}) @property def guild_id(self) -> str: """ 频道id """ return self.get("guild_id",{}) @property def member_openid(self) -> str: """ 成员openid """ return self.get("openid",{}) @property def attachments(self) -> str: """ 附件url """ url = self.get("image_attachments", "") if url and not url.startswith("https://"): url = "https://" + url return url @property def group_openid(self) -> str: """ 群组id """ return self.get("group_openid",{}) @property def content_type(self) -> str: """ 文件类型 """ return self.get("content_type","")