使用GitHub Actions构建Telegram推特监控机器人

本文详细介绍如何构建一个自动监控Twitter账号并发送新推文到Telegram的机器人系统,使用Python脚本和GitHub Actions实现定时任务,包含完整的API配置和部署指南。

每当您最喜爱的X账号发推时获取Telegram通知

我构建了一个小型自动化程序,用于监控CosineAI的X/Twitter账号,并在有新原创帖子(非回复、非转发、非引用)时向我发送Telegram消息。它通过GitHub Actions每6小时运行一次,记住已发送的内容并避免重复。本文记录了我们的具体实现步骤、原因、节省的时间以及如何端到端复现此项目。

为什么这样做(以及如何节省时间)

  • 无需手动检查:我不必每天多次打开X/Twitter。如果CosineAI发布新内容,我会自动在Telegram上收到
  • 信号优于噪音:机器人过滤掉回复、转发和引用——只有原创帖子对我重要
  • 零维护:它在GitHub Actions中按计划运行,并将最小状态提交回仓库以记住最后看到的推文
  • 便携且安全:所有密钥都存储在GitHub Secrets中(不在代码中)。我可以共享仓库而不暴露令牌

Cosine(和Genie助手)通过确定问题范围、编写干净的Python代码、设置GitHub工作流并记录每个步骤来提供帮助。这消除了设置障碍并防止了常见陷阱(例如令牌处理、聊天ID发现、状态管理)。

项目功能

  • 监控:x.com/CosineAI
  • 间隔:每6小时(GitHub Actions中的cron)
  • 交付:通过机器人向我的聊天发送Telegram消息
  • 过滤器:仅原创帖子(排除回复、转发和引用)
  • 状态:记住最后看到的推文ID并将其提交到state/last_seen.json,避免重复提醒

仓库文件:

  • monitor.py — 与Twitter/X和Telegram通信的Python脚本

  • requirements.txt — Python依赖列表

  • .github/workflows/monitor.yml — GitHub Actions工作流(计划+运行+提交状态)

  • state/ — 存储last_seen.json的文件夹(由工作流自动更新)

所需链接

  • Twitter/X开发者门户:https://developer.twitter.com
  • Twitter/X v2 API参考(用户和推文):https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet
  • Telegram BotFather(创建机器人):https://t.me/BotFather
  • Telegram sendMessage API:https://core.telegram.org/bots/api#sendmessage
  • Telegram getUpdates(查找聊天ID):https://core.telegram.org/bots/api#getupdates
  • 机器人直接模式:https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  • GitHub Actions文档:https://docs.github.com/en/actions
  • actions/checkout:https://github.com/actions/checkout
  • actions/setup-python:https://github.com/actions/setup-python
  • Python Requests:https://requests.readthedocs.io/en/latest

逐步指南:如何复制此项目

1) 创建GitHub仓库并添加文件

创建新仓库(公共或私有)。 添加这些文件(可以从项目复制):

它们的功能:

  • monitor.py读取环境变量(您的持有者令牌、机器人令牌、聊天ID、用户名)
  • 获取最新的原创推文(排除回复/转发/引用)
  • 为自上次运行以来的任何新帖子发送Telegram消息
  • state/last_seen.json更改时,工作流会提交它,以便机器人知道已发送的内容

2) 获取Twitter/X API v2持有者令牌

访问https://developer.twitter.com,如果没有开发者账户则创建一个。 创建项目,然后创建应用程序并启用对允许获取用户推文(GET /2/users/:id/tweets)的v2端点的访问。 复制持有者令牌(仅应用程序身份验证)。您将把它存储在GitHub Secrets中作为TWITTER_BEARER_TOKEN

参考文档起点:

3) 创建Telegram机器人并获取其令牌

打开Telegram并与@botfather对话:https://t.me/BotFather

使用/newbot创建机器人。BotFather将给您一个令牌(格式类似1234567890:ABC…XYZ)。 您将把它存储在GitHub Secrets中作为TELEGRAM_BOT_TOKEN

4) 查找您的Telegram聊天ID

您需要数字聊天ID才能向自己或群组发送消息。

选项A:直接消息给您的机器人

在Telegram中向您的机器人发送任何消息(例如"hi")。 在浏览器中访问https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates。 在JSON响应中找到"chat":{"id":...}。该数字是您的TELEGRAM_CHAT_ID

选项B:群组聊天

将您的机器人添加到Telegram群组并发送消息。 使用相同的getUpdates URL并在JSON中定位群组的聊天ID。

参考:https://core.telegram.org/bots/api#getupdates

5) 为工作流设置GitHub Secrets

在您的仓库中,转到Settings → Secrets and variables → Actions → “New repository secret"并创建:

  • TWITTER_BEARER_TOKEN — 来自步骤2的持有者令牌
  • TELEGRAM_BOT_TOKEN — 来自步骤3的机器人令牌
  • TELEGRAM_CHAT_ID — 来自步骤4的聊天ID
  • TWITTER_USERNAME — 可选;默认为CosineAI。设置为任何您想要监控的用户名

6) 启用GitHub Actions并确认权限

默认情况下Actions已启用,确保您的仓库允许工作流提交内容(对于私有仓库,确保在工作流中设置了permissions: contents: write — 此项目已包含此项)。 工作流文件.github/workflows/monitor.yml包含:

  • 6小时cron计划:0 */6 * * *
  • 通过"Run workflow"手动触发
  • 步骤:
    • 检出代码
    • 设置Python
    • 安装依赖
    • 运行python monitor.py
    • state/last_seen.json更改时提交

7) 首次运行行为(避免垃圾邮件)

在第一次运行时,脚本将状态初始化为最新的原创帖子,而不发送任何Telegram消息。 之后,它仅发送在记录的last_seen_id之后出现的新帖子的消息。

8) 本地测试(可选,非必需)

如果要在启用Actions之前在本地运行:

使用Python 3.10+。 导出环境变量:

1
2
3
4
export TWITTER_BEARER_TOKEN=...
export TELEGRAM_BOT_TOKEN=...
export TELEGRAM_CHAT_ID=...
export TWITTER_USERNAME=CosineAI

安装依赖:

1
pip install -r requirements.txt

运行:

1
python monitor.py

9) 自定义它

  • 更改TWITTER_USERNAME以监控任何账号
  • .github/workflows/monitor.yml中调整cron计划(例如每小时)
  • 如果要包含引用或回复,请编辑过滤器(代码当前排除两者)

故障排除

Twitter API错误(401/403/429)

  • 确认您的持有者令牌有效且应用程序具有正确的访问权限
  • 检查速率限制;您可能需要降低频率或提高应用程序级别

Telegram消息未送达

  • 通过再次检查getUpdates的JSON来验证TELEGRAM_CHAT_ID
  • 确保机器人未被阻止并且可以在聊天/群组中发布

无状态更新

  • 确保工作流具有permissions: contents: write
  • 检查第一次成功运行后state/last_seen.json是否存在(由工作流在需要时创建)

Cosine(Genie)如何提供帮助

  • 设计了弹性流程(首次运行状态初始化、按时间顺序发送)
  • 实现了具有最小依赖项(仅requests)的干净代码
  • 设置了具有适当权限的GitHub Actions,并为state/last_seen.json设置了安全的提交步骤
  • 记录了获取令牌/ID并通过GitHub Secrets保护它们的确切步骤

这种帮助将数小时的试错压缩到几分钟,并提供了可重复的结果。对于您想要"设置并忘记"的小型自动化特别有用。

重用检查清单

  • 使用提供的文件创建仓库
  • 设置密钥:
    • TWITTER_BEARER_TOKEN
    • TELEGRAM_BOT_TOKEN
    • TELEGRAM_CHAT_ID
    • TWITTER_USERNAME(可选)
  • 启用Actions;工作流存在
  • 首次运行:状态静默初始化
  • 后续运行:新的原创帖子发送到Telegram

就是这样。分叉它,设置密钥,就完成了。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计