update chatType handle

This commit is contained in:
2021-12-13 23:28:39 +08:00
parent b508cc4e33
commit a0adf7ec9f

127
tdlib.py
View File

@@ -77,53 +77,89 @@ class UpdateThread(Thread):
print_exc() print_exc()
class ChatType(Enum): class ChatType:
BasicGroup = 0
Private = 1
Secret = 2
SuperGroup = 3
def __iter__(self): def __iter__(self):
return self.to_dict().items().__iter__() return self.to_dict().items().__iter__()
def to_dict(self): def to_dict(self) -> dict:
if self._value_ == 0: pass
return {"@type": "chatTypeBasicGroup",
"basic_group_id": self.basic_group_id}
elif self._value_ == 1:
return {"@type": 'chatTypePrivate', 'user_id': self.user_id}
elif self._value_ == 2:
return {"@type": "chatTypeSecret",
"secret_chat_id": self.secret_chat_id,
"user_id": self.user_id}
elif self._value_ == 3:
return {"@type": "chatTypeSupergroup",
"supergroup_id": self.supergroup_id,
"is_channel": self.is_channel}
@classmethod def __repr__(self) -> str:
def _missing_(cls, value: object): d = self.to_dict()
if d is None:
m = ''
else:
typ = d['@type'][8:]
d.pop('@type')
m = f"Type={typ} Data={d}"
return f"<{self.__class__.__module__}.{self.__class__.__name__} {m}>"
def __str__(self):
d = self.to_dict()
if d is None:
return ''
return d['@type'][8:]
class ChatTypeBasicGroup(ChatType):
def __init__(self, value):
if isinstance(value, dict): if isinstance(value, dict):
if value['@type'] == 'chatTypeBasicGroup': if value['@type'] == 'chatTypeBasicGroup':
re = cls(0) self.basic_group_id = int(value['basic_group_id'])
re.basic_group_id = int(value['basic_group_id']) return
return re
elif value['@type'] == 'chatTypePrivate':
re = cls(1)
re.user_id = int(value['user_id'])
return re
elif value['@type'] == 'chatTypeSecret':
re = cls(2)
re.secret_chat_id = int(value['secret_chat_id'])
re.user_id = int(value['user_id'])
return re
elif value['@type'] == 'chatTypeSupergroup':
re = cls(3)
re.supergroup_id = int(value['supergroup_id'])
re.is_channel = bool(value['is_channel'])
return re
raise ValueError(f'Unknown value: {value}') raise ValueError(f'Unknown value: {value}')
def to_dict(self):
return {"@type": "chatTypeBasicGroup",
"basic_group_id": self.basic_group_id}
class ChatTypePrivate(ChatType):
def __init__(self, value):
if isinstance(value, dict):
if value['@type'] == 'chatTypePrivate':
self.user_id = int(value['user_id'])
return
raise ValueError(f'Unknown value: {value}')
def to_dict(self):
return {"@type": 'chatTypePrivate', 'user_id': self.user_id}
class ChatTypeSecret(ChatType):
def __init__(self, value):
if isinstance(value, dict):
if value['@type'] == 'chatTypeSecret':
self.secret_chat_id = int(value['secret_chat_id'])
self.user_id = int(value['user_id'])
return
raise ValueError(f'Unknown value: {value}')
def to_dict(self):
return {"@type": "chatTypeSecret",
"secret_chat_id": self.secret_chat_id, "user_id": self.user_id}
class ChatTypeSupergroup(ChatType):
def __init__(self, value):
if isinstance(value, dict):
if value['@type'] == 'chatTypeSupergroup':
self.supergroup_id = int(value['supergroup_id'])
self.is_channel = bool(value['is_channel'])
return
raise ValueError(f'Unknown value: {value}')
def to_dict(self):
return {"@type": "chatTypeSupergroup",
"supergroup_id": self.supergroup_id,
"is_channel": self.is_channel}
def parse_chat_type(d):
if d['@type'].startswith('chatType'):
typ = 'C' + d['@type'][1:]
return globals()[typ](d)
class TextParseMode(Enum): class TextParseMode(Enum):
HTML = 0 HTML = 0
@@ -153,7 +189,7 @@ def json_object_hook(value):
if isinstance(value, dict): if isinstance(value, dict):
if '@type' in value: if '@type' in value:
if value['@type'].startswith('chatType'): if value['@type'].startswith('chatType'):
return ChatType(value) return parse_chat_type(value)
elif value['@type'].startswith('textParseMode'): elif value['@type'].startswith('textParseMode'):
return TextParseMode(value) return TextParseMode(value)
except Exception: except Exception:
@@ -214,6 +250,7 @@ class TdLib:
self._thread.kill() self._thread.kill()
await self._thread.killed() await self._thread.killed()
_td_json_client_destroy(self._client_id) _td_json_client_destroy(self._client_id)
self._client_id = 0
self._destoried = True self._destoried = True
if self._v: if self._v:
le1 = len(self._re) le1 = len(self._re)
@@ -427,6 +464,16 @@ class TdLib:
print(f"{re['code']} {re['message']}") print(f"{re['code']} {re['message']}")
return None return None
async def getMessage(self, chat_id: int, message_id: int):
re = await self._send({"@type": "getMessage", "chat_id": chat_id,
"message_id": message_id})
if re['@type'] == 'message':
return re
else:
if re['@type'] == 'error':
print(f"{re['code']} {re['message']}")
return None
async def getProxies(self): async def getProxies(self):
while not self._db_initalized: while not self._db_initalized:
await asyncio.sleep(0.1) await asyncio.sleep(0.1)