From 24dc62ca6ed1cff0e7a0124aa24f8388f7c034f1 Mon Sep 17 00:00:00 2001 From: hexyoungs Date: Wed, 25 Nov 2020 16:07:50 +0800 Subject: [PATCH 2/2] Fix compatibility with new libtd version Based on the work of chux0519 here: https://github.com/chux0519/tg --- tg/controllers.py | 2 +- tg/models.py | 13 ++++++++++--- tg/msg.py | 2 +- tg/update_handlers.py | 22 +++++++++++++++++----- tg/views.py | 10 +++++----- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/tg/controllers.py b/tg/controllers.py index 300e3d2..ae8deab 100644 --- a/tg/controllers.py +++ b/tg/controllers.py @@ -869,7 +869,7 @@ class Controller: return # notify - if self.model.is_me(msg["sender_user_id"]): + if self.model.is_me(msg["sender"].get("user_id")): return user = self.model.users.get_user(msg.sender_id) name = f"{user['first_name']} {user['last_name']}" diff --git a/tg/models.py b/tg/models.py index 882bcd4..0808448 100644 --- a/tg/models.py +++ b/tg/models.py @@ -175,7 +175,8 @@ class Model: return False def can_be_deleted(self, chat_id: int, msg: Dict[str, Any]) -> bool: - if chat_id == msg["sender_user_id"]: + c_id = msg["sender"].get("chat_id") or msg["sender"].get("user_id") + if chat_id == c_id: return msg["can_be_deleted_only_for_self"] return msg["can_be_deleted_for_all_users"] @@ -436,6 +437,12 @@ class ChatModel: chat_id = chat["id"] if chat_id in self.chat_ids: return + + if len(chat["positions"]) > 0: + chat["order"] = chat["positions"][0]["order"] + else: + chat["order"] = 0 #str(sys.maxsize) + if int(chat["order"]) == 0: self.inactive_chats[chat_id] = chat return @@ -811,10 +818,10 @@ class UserModel: if user_id == 0: return "" user = self.get_user(user_id) - if user["first_name"] and user["last_name"]: + if user.get("first_name") and user.get("last_name"): return f'{user["first_name"]} {user["last_name"]}'[:20] - if user["first_name"]: + if user.get("first_name"): return f'{user["first_name"]}'[:20] if user.get("username"): diff --git a/tg/msg.py b/tg/msg.py index deb5288..3084c6c 100644 --- a/tg/msg.py +++ b/tg/msg.py @@ -218,7 +218,7 @@ class MsgProxy: @property def sender_id(self) -> int: - return self.msg["sender_user_id"] + return self.msg["sender"].get("user_id") or self.msg["sender"].get("chat_id") @property def forward(self) -> Optional[Dict[str, Any]]: diff --git a/tg/update_handlers.py b/tg/update_handlers.py index fa42c0a..2799709 100644 --- a/tg/update_handlers.py +++ b/tg/update_handlers.py @@ -78,7 +78,7 @@ def update_new_message(controller: Controller, update: Dict[str, Any]) -> None: controller.notify_for_message(msg.chat_id, msg) - +#outdated @update_handler("updateChatOrder") def update_chat_order(controller: Controller, update: Dict[str, Any]) -> None: current_chat_id = controller.model.current_chat_id @@ -88,6 +88,16 @@ def update_chat_order(controller: Controller, update: Dict[str, Any]) -> None: if controller.model.chats.update_chat(chat_id, order=order): controller.refresh_current_chat(current_chat_id) +@update_handler("updateChatPosition") +def update_chat_position(controller: Controller, update: Dict[str, Any]) -> None: + current_chat_id = controller.model.current_chat_id + chat_id = update["chat_id"] + info = {} + info["order"] = update["position"]["order"] + if "is_pinned" in update: + info["is_pinned"] = update["is_pinned"] + if controller.model.chats.update_chat(chat_id, **info): + controller.refresh_current_chat(current_chat_id) @update_handler("updateChatTitle") def update_chat_title(controller: Controller, update: Dict[str, Any]) -> None: @@ -189,12 +199,14 @@ def update_chat_last_message( # according to documentation it can be null log.warning("last_message is null: %s", update) return - order = update["order"] + + info = {} + info["last_message"] = last_message + if len(update["positions"]) > 0: + info["order"] = update["positions"][0]["order"] current_chat_id = controller.model.current_chat_id - if controller.model.chats.update_chat( - chat_id, last_message=last_message, order=order - ): + if controller.model.chats.update_chat(chat_id, **info): controller.refresh_current_chat(current_chat_id) diff --git a/tg/views.py b/tg/views.py index d4806e2..64ad1fa 100644 --- a/tg/views.py +++ b/tg/views.py @@ -240,7 +240,7 @@ class ChatView: msg = chat.get("last_message") if ( msg - and self.model.is_me(msg["sender_user_id"]) + and self.model.is_me(msg["sender"].get("user_id")) and msg["id"] > chat["last_read_outbox_message_id"] and not self.model.is_me(chat["id"]) ): @@ -248,7 +248,7 @@ class ChatView: flags.append("unseen") elif ( msg - and self.model.is_me(msg["sender_user_id"]) + and self.model.is_me(msg["sender"].get("user_id")) and msg["id"] <= chat["last_read_outbox_message_id"] ): flags.append("seen") @@ -259,7 +259,7 @@ class ChatView: if self.model.users.is_online(chat["id"]): flags.append("online") - if chat["is_pinned"]: + if "is_pinned" in chat and chat["is_pinned"]: flags.append("pinned") if chat["notification_settings"]["mute_for"]: @@ -363,7 +363,7 @@ class MsgView: return f"\n | photo: {web['url']}" name = web["site_name"] title = web["title"] - description = web["description"].replace("\n", "") + description = web["description"]["text"].replace("\n", "") url = f"\n | {name}: {title}" if description: url += f"\n | {description}" @@ -584,7 +584,7 @@ def get_last_msg( if not last_msg: return None, "" return ( - last_msg["sender_user_id"], + last_msg["sender"].get("user_id"), parse_content(MsgProxy(last_msg), users), ) -- 2.30.1