Commit e75ef07

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-05-05 09:10:08
chore: sort database messages by type and mid
1 parent b73d77a
Changed files (1)
src
messages
src/messages/database.py
@@ -98,10 +98,17 @@ async def copy_messages_from_db(client: Client, message: Message, key: str, kv:
                 ...
             ]
         }
-        OR:
-        { "is_parted": True }
-
     """
+
+    def custom_sort(item):
+        """Custom sort function to sort messages.
+
+        1. sort by type
+        2. sort by mid
+        """
+        type_order = {"media_group": 0, "video": 1, "photo": 2, "audio": 3, "document": 4, "text": 5}
+        return (type_order.get(item["type"], 999), item["mid"])
+
     if kwargs:
         logger.debug(f"kwargs: {kwargs}")
     target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
@@ -116,10 +123,6 @@ async def copy_messages_from_db(client: Client, message: Message, key: str, kv:
 
     if kv is None:
         kv = await get_db(key)
-    if kv.get("is_parted"):
-        logger.warning(f"Parted messages found for key={key}")
-        return await copy_parted_msgs_from_db(client, message, key, **kwargs)
-
     if not kv.get("data"):
         logger.error(f"Wrong {DB.ENGINE} data for key={key}: {kv}")
         return False
@@ -130,7 +133,7 @@ async def copy_messages_from_db(client: Client, message: Message, key: str, kv:
     await modify_progress(text=f"💾在{DB.ENGINE}中查到缓存, 正在转发{len(data)}条消息...", **kwargs)
     results = []
     try:
-        for idx, item in enumerate(sorted(data, key=lambda x: x["mid"])):
+        for idx, item in enumerate(sorted(data, key=custom_sort)):
             cid = to_int(item["cid"])
             if idx != 0:
                 reply_parameters = ReplyParameters()  # only send as reply of the first message
@@ -160,22 +163,3 @@ async def copy_messages_from_db(client: Client, message: Message, key: str, kv:
         return True
     await del_db(key)
     return False
-
-
-async def copy_parted_msgs_from_db(client: Client, message: Message, key: str, suffix: str = "-P", **kwargs) -> bool:
-    """Copy parted messages from database.
-
-    For some large video files, they can be sent in parts.
-    The primary key is the video link, and the parted key is suffixed with "P".
-    """
-    for idx in range(1, 100):
-        logger.trace(f"Checking parted message for key={key}{suffix}{idx}")
-        kv = await get_db(f"{key}{suffix}{idx}")
-        if not kv:
-            logger.debug(f"No more parted messages found for key={key}{suffix}{idx}")
-            return True
-        if not await copy_messages_from_db(client, message, key=f"{key}{suffix}{idx}", kv=kv, **kwargs):
-            logger.error(f"Failed to copy parted messages for key={key}{suffix}{idx}")
-            return False
-    logger.warning(f"Too many parted messages found for key={key}")
-    return False