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

基于Tweepy的指定用户推文自动回复Twitter bot如何持续运行

首先你当前的代码存在两个基础问题:

  1. 逻辑为单次执行,拉取一次推文回复后就直接结束进程,没有循环检测逻辑
  2. 存在语法错误,for tweet in tweets:下的执行语句没有缩进,运行会直接报错
可直接运行的修改版代码

以下代码加入了循环检测、去重、异常捕获、间隔等待逻辑,支持持续运行:

import tweepy
import time
from keys import keys

CONSUMER_KEY = keys['consumer_key']
CONSUMER_SECRET = keys['consumer_secret']
ACCESS_TOKEN = keys['access_token']
ACCESS_TOKEN_SECRET = keys['access_token_secret']

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

toReply = "USER" 
# 记录已经回复过的最新推文ID,避免重复回复
last_replied_id = 0
# 轮询间隔,单位秒,建议不小于60避免触发速率限制
POLL_INTERVAL = 60

while True:
    try:
        # 只拉取比上次回复的ID更新的推文
        tweets = api.user_timeline(screen_name = toReply, since_id=last_replied_id)
        for tweet in tweets:
            if tweet.id > last_replied_id:
                api.update_status("@" + toReply + " TEXT", in_reply_to_status_id = tweet.id)
                last_replied_id = tweet.id
                print(f"已回复推文ID:{tweet.id}")
        # 等待指定时间后再次轮询
        time.sleep(POLL_INTERVAL)
    except Exception as e:
        print(f"运行出错:{e},10秒后重试")
        time.sleep(10)
实现自动持续运行的方案

方案1:本地设备后台常驻(适合设备可长期开机)

  • Windows系统:把脚本后缀改成.pyw,按下Win+R输入shell:startup打开开机启动文件夹,把脚本的快捷方式放进去,开机就会自动后台运行,不会弹出命令行窗口。也可以通过系统的「任务计划程序」配置,额外设置崩溃自动重启规则。
  • Linux/macOS系统:临时后台运行可以直接执行命令 nohup python3 你的脚本文件名.py &,关闭终端也不会停止进程。要实现开机自启+崩溃自动重启,建议写systemd服务配置,稳定性更高。

方案2:云端部署(不需要本地设备长期开机)

  • 购买最低配置的云服务器,把代码上传后按Linux系统的systemd服务配置即可,全年稳定运行,成本极低。
  • 也可以使用Serverless函数服务,配置定时触发器每隔一段时间执行一次脚本,不需要维护服务器,大部分平台的免费额度就可以覆盖这个Bot的运行需求,只需要把last_replied_id存在云端存储里,避免每次执行重复回复。
额外注意事项
  • 不要把轮询间隔设置得过短,严格遵守Twitter的API调用速率限制,避免账号被限流封禁。
  • 回复内容建议结合推文内容做差异化,不要所有推文都回复完全相同的内容,容易被判定为垃圾账号。
  • 敏感操作可以加日志记录,方便后续排查运行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:42:03