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

使用tweepy开发Twitter机器人无法更新新提及消息如何解决

问题根因与修复方案

核心问题点

  • 提及数据仅拉取一次:api.mentions_timeline() 调用放在了while循环外部,程序启动后就再也不会请求新的提及数据,永远处理启动时拉取的历史数据
  • 已回复ID存储逻辑错误:
    • add_already_responded 函数使用w覆盖模式写入文件,每次调用都会清空之前存储的所有已回复ID,仅保留最新一条
    • 函数调用位置错误,仅在接口报错时才会存储ID,回复成功时没有把ID写入本地文件,仅存在内存的临时集合中,下轮循环就会丢失
    • 从文件读取的ID为字符串类型,和接口返回的整数类型tweetId类型不匹配,存在性判断永远返回True,导致重复回复
  • 循环无延时:无限循环没有添加等待时间,会高频调用API触发平台速率限制

修复后代码

import tweepy
import time
from pprint import pprint

def get_already_responded(file_name):
    seen = set()
    # 增加文件不存在的兼容处理
    try:
        with open(file_name, "r") as file:
            for line in file:
                # 直接转成整数,和接口返回类型统一
                seen.add(int(line.strip()))
    except FileNotFoundError:
        pass
    return seen

def add_already_responded(responded_id, file_name):
    # 改用a追加模式,不会清空历史数据
    with open(file_name, "a") as file:
        file.write(str(responded_id) + "\n")


FILE = 'responded.txt'
auth = tweepy.OAuthHandler('removed', 'removed')
auth.set_access_token('removed-removed',
                      'removed')

api = tweepy.API(auth)

while True:
    seen = get_already_responded(FILE)
    # 每次循环重新拉取最新的提及数据
    mentions = api.mentions_timeline()
    for mention in mentions:
        userScreenName = mention.user.screen_name
        tweetId = mention.id
        textMsg = mention.text.split()[1:]

        print(f'{userScreenName} - {tweetId} --> {textMsg}')

        if tweetId not in seen:
            try:
                api.update_status(status=f"@{userScreenName} ur msg ---> {' '.join(textMsg)}", in_reply_to_status_id=tweetId)
                # 回复成功后再写入已回复文件
                add_already_responded(tweetId, FILE)
            except tweepy.error.TweepError as e:
                print(f"处理推文{tweetId}出错: {e.reason}")
    # 增加15秒延时,避免触发速率限制,可根据需求调整
    time.sleep(15)

额外优化说明

  • 把textMsg列表转成了字符串拼接,避免回复内容直接输出列表格式
  • 增加了文件不存在的兼容逻辑,首次运行无需手动创建responded.txt
  • 调整了异常捕获的范围,仅捕获接口调用逻辑的异常,避免掩盖其他报错
  • 增加了错误日志打印,方便排查问题

内容的提问来源于stack exchange,提问作者Mike_Ś

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:21:03