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

如何使用Mastodon.py获取Mastodon私信

问题:使用Mastodon.py无法获取私信

我正尝试用Mastodon.py从我的Mastodon账号中获取私信,目前能正常获取时间线内容,但拿不到私信。网页端里私信是独立于时间线的,所以我知道不能用timeline()函数。了解过status()函数,但它需要提前知道消息ID,不太适用。

我查过API文档,但没找到明确可用的方法。当前的函数如下:

def get_direct_messages(mastodon):
    # 获取用户时间线的所有状态消息
    statuses = mastodon.timeline()
    print(statuses)
    # 过滤出仅包含私信的消息
    direct_messages = [status for status in statuses if status["visibility"] == "direct"]

    print(direct_messages)

    return direct_messages

这个函数能正常打印时间线消息,说明连接没问题,但print(statuses)只显示时间线内容,显然这不是获取私信的正确方式。


解决方法

Mastodon的私信系统基于**对话(Conversations)**设计,并非直接在时间线中展示,所以你需要用conversations()方法来获取私信,而非timeline()。

修改后的代码示例

def get_direct_messages(mastodon):
    # 获取所有私信对话,默认返回最新20条
    conversations = mastodon.conversations()
    direct_messages = []
    
    # 遍历对话,提取其中的消息
    for conv in conversations:
        # conv['last_status'] 是对话中的最新消息
        direct_messages.append(conv['last_status'])
        # 若需获取对话完整历史,可调用 status_context()
        # context = mastodon.status_context(conv['last_status']['id'])
        # direct_messages.extend(context['ancestors'])
    
    print(direct_messages)
    return direct_messages

关键说明

  • conversations()返回私信对话列表,每个对话对象包含参与者、最新消息(last_status)等信息
  • 若要获取某条私信的完整上下文(历史消息),可使用mastodon.status_context(消息ID),它会返回该消息的祖先(之前的消息)和后代(后续回复)
  • 若私信数量较多,可通过max_id参数分页获取更早的对话,示例:mastodon.conversations(max_id=last_conv_id)

内容的提问来源于stack exchange,提问作者Rick Dearman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:26