如何在Pyrogram中获取特定日期之后的聊天记录
获取Pyrogram中特定日期之后的聊天消息
Pyrogram的get_chat_history()默认仅能通过offset_date参数获取指定日期之前的消息,要获取指定日期之后的消息,可通过循环遍历消息并结合日期判断实现,具体方案如下:
实现思路
- 利用
get_chat_history()默认从新到旧返回消息的特性,从最新消息开始批量拉取 - 对每条消息检查发送时间是否晚于目标日期
- 一旦遇到早于目标日期的消息,立即终止遍历(后续消息只会更旧)
- 收集所有符合条件的消息,按需调整排序顺序
基础代码示例
from pyrogram import Client from datetime import datetime async def get_messages_after_date(client: Client, chat_id: int | str, target_date: datetime): matched_messages = [] # 从最新消息开始遍历 async for message in client.get_chat_history(chat_id): if message.date > target_date: matched_messages.append(message) else: # 消息按从新到旧排序,后续只会更旧,直接终止循环 break # 如需按时间正序展示,反转列表 matched_messages.reverse() return matched_messages # 使用示例 if __name__ == "__main__": app = Client("your_account_session") # 设置目标日期:获取2024年5月1日之后的消息 target_date = datetime(2024, 5, 1) app.run(get_messages_after_date(app, "target_chat_id", target_date))
优化方案(针对大聊天记录)
如果目标日期较早、聊天记录量大,可先通过offset_date定位到目标日期附近,减少遍历范围,提升效率:
async def get_messages_after_date_optimized(client: Client, chat_id: int | str, target_date: datetime): matched_messages = [] # 先拉取目标日期附近的消息 async for message in client.get_chat_history(chat_id, offset_date=target_date): if message.date > target_date: matched_messages.append(message) else: break # 补充拉取最新的消息(避免offset_date过滤掉最新内容) async for message in client.get_chat_history(chat_id): if message.date > target_date and message not in matched_messages: matched_messages.append(message) else: break matched_messages.reverse() return matched_messages
内容的提问来源于stack exchange,提问作者matveygal
相关产品推荐
相关产品推荐

