Files
TelegramTwitterMediaBot/README.md
T

4.1 KiB
Raw Permalink Blame History

TelegramXMediaBot

Telegram 机器人,将 X / Twitter、Pixiv、Bluesky 的帖子链接转换为媒体消息发送,附带帖子标题、作者与标签。

功能

  • 私聊发送链接后自动抓取并发送图片、视频与 GIF,超量图片自动分批
  • 纯文字帖提示无媒体;不支持的链接静默忽略
  • 支持内联查询(@机器人 <链接>
  • 可绑定转发频道自动转发;支持转发前编辑 caption 与自定义模板
  • 发送失败自动重试并持久化,重试耗尽后通知用户
  • Pixiv ugoira 动图自动转码为 MP4

快速开始

# 必填:BotFather 的 token;可选:PIXIV_REFRESH_TOKEN(未设置则禁用 Pixiv
export TELOXIDE_TOKEN=<token>
export PIXIV_REFRESH_TOKEN=<token>

cargo run -p xmedia-bot

Docker 部署(参考 docker-compose.yml.example):

docker build -t tgxmb .
docker run --rm -d --name tgxmb --env-file .env -v ./data:/app/data tgxmb

环境变量:TELOXIDE_TOKEN(必填)、PIXIV_REFRESH_TOKENBOT_ADMINEDIT_MESSAGE_TTL_SECONDSRUST_LOGWEBHOOK*

Webhook 部署(需要反向代理)

docker-compose.yml.example 内置了 nginx-proxy + acme-companion 反向代理编排,按部署环境二选一:

有域名

  1. DNS A 记录指向服务器
  2. compose 里设 VIRTUAL_HOSTLETSENCRYPT_HOST 为域名,WEBHOOK_URL 设为 https://域名/
  3. 证书自动签发与续期,无需手动处理

只有 IP

  1. 生成自签证书(PEM 格式,见第 3 步): openssl req -x509 -newkey rsa:2048 -nodes -days 365 -keyout nginx-certs/default.key -out nginx-certs/default.crt
  2. compose 里 nginx-proxy 设 DEFAULT_HOSTbot 设 WEBHOOK_CERT: './cert/cert.pem'(须与代理所服务的为同一张证书)
  3. 证书必须是 PEM 编码(ASCII BASE64,以 -----BEGIN CERTIFICATE----- 开头)—— Telegram 只接受该格式;若现有证书是 DER 二进制,转换: openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM (私钥同理:openssl rsa -in key.der -inform DER -out key.pem -outform PEM

Telegram 只接受 443/80/88/8443 端口。

环境变量说明
变量 说明
TELOXIDE_TOKEN Bot token(必填)
PIXIV_REFRESH_TOKEN Pixiv 刷新令牌;未设置则禁用 Pixiv
BOT_ADMIN 管理员聊天 ID,逗号分隔;接收启动/停止通知
EDIT_MESSAGE_TTL_SECONDS 转发前编辑记录过期秒数,默认 86400
RUST_LOG 日志级别
LOCAL_USER_ID 容器内运行用户 UID,默认 9001
VIRTUAL_HOST 对外域名或 IPnginx-proxy 按此路由
VIRTUAL_PORT bot 容器内监听端口,nginx-proxy 的转发目标
LETSENCRYPT_HOST 设为域名时由 acme-companion 自动签发/续期证书
DEFAULT_HOST nginx-proxy 将未知 Host 的请求路由到该 vhost(IP 访问时需要)
DEFAULT_EMAIL acme-companion 证书通知邮箱
WEBHOOK true 启用 webhook 模式(默认轮询)
WEBHOOK_LISTEN / WEBHOOK_PORT bot 容器内监听地址/端口
WEBHOOK_URL 对外公网 HTTPS 地址(https://域名/
WEBHOOK_CERT 自签证书路径(仅 IP 路径需要,须为 PEM 且与代理所服务的一致)
WEBHOOK_SECRET_TOKEN 更新校验令牌(X-Telegram-Bot-Api-Secret-Token

命令

命令 说明
/set_forward_channel <频道> 设置转发频道
/remove_forward_channel 取消转发频道
/edit_before_forward 开关转发前编辑
/set_template <名称> 将回复的消息(含 [])保存为模板
/set_format <站点> <格式> 自定义 caption 格式(占位符 {url} {title} {tags} 等)
/bot_dict 查看聊天状态

链接处理仅限私聊;命令在任意聊天可用。

备注

  • 数据持久化于 data/task_queue.db,容器部署需挂载该目录
  • 运行环境需安装 ffmpeg(Docker 镜像已内置)
  • 测试:cargo test --workspace