You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pyrogram中获取特定日期之后的聊天记录

获取Pyrogram中特定日期之后的聊天消息

Pyrogram的get_chat_history()默认仅能通过offset_date参数获取指定日期之前的消息,要获取指定日期之后的消息,可通过循环遍历消息并结合日期判断实现,具体方案如下:

实现思路

  1. 利用get_chat_history()默认从新到旧返回消息的特性,从最新消息开始批量拉取
  2. 对每条消息检查发送时间是否晚于目标日期
  3. 一旦遇到早于目标日期的消息,立即终止遍历(后续消息只会更旧)
  4. 收集所有符合条件的消息,按需调整排序顺序

基础代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:12:02