Commit e75ef07
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