自动监控 X/Twitter 用户发帖,通过 Discord / Telegram / QQ(OneBot11) 推送到群组/频道。
- 多平台推送: Discord Embed、Telegram HTML、QQ 群(OneBot11)
- 推文渲染: SVG→PNG 渲染为图片发送(
sharp) - 审批系统: 多管理员审批,支持 Telegram inline keyboard / Discord buttons / OneBot 文本命令
- R14 内容: 支持将 NSFW 内容分流到独立群组
- 目标标签: 支持自定义发送目标(如
r14),管理员可选择发送到特定目标 - 撤回: 批准后可通过按钮撤回已发送的消息(所有平台)
- RSS 订阅: 通过 RSS 拉取推文(备选方案)
- X to Image API: 推文截图渲染服务
- X/Twitter GraphQL API: 直接获取推文,支持 Cookie 认证或密码登录
- 过滤器: 关键词包含/排除、媒体过滤、排除转推/回复
- 插件系统: 可热加载的插件框架,内置 AI 聊天、日志等插件
- AI 角色(Discord): 人设卡 + 设定集、对每个成员的长期记忆、服务器记忆、好感度、情绪、主动插话、@ 解析、可选的向量检索
- Web UI: 浏览器管理配置
- Logger: 统一日志系统(DEBUG/INFO/WARN/ERROR)
- SQLite:
better-sqlite3持久化存储 - 定时轮询: 可配置间隔,推文去重
- 运行时: Bun(
packageManager: bun) - 语言: TypeScript(
@/路径别名) - 构建:
tsc+tsc-alias - 数据库:
better-sqlite3(原生 C++ 模块) - 开发环境: Nix Flakes(可选)
bun install
cp config.yaml config.yaml # 参照下方说明编辑
bun run dev # 开发模式(热重载)bun install # 安装依赖
bun run dev # tsx watch 热重载开发
bun run build # tsc + tsc-alias + 复制静态资源
bun run start # node dist/index.js(需先 build)支持 config.yaml / config.yml / config.toml / config.json 格式,按以下顺序查找:
config.yaml > config.yml > config.toml > config.json
也可通过环境变量覆盖(详见 AGENTS.md 或 .env.example)。
enableApproval: true
sendAsImage: true
pollIntervalMinutes: 5
maxPostsPerFetch: 20
maxTweetAgeMinutes: 60
debugMode: false| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableApproval |
boolean | false | 启用审批流程 |
sendAsImage |
boolean | false | 渲染为图片发送(SVG→PNG) |
pollIntervalMinutes |
number | 5 | 轮询间隔(分钟) |
maxPostsPerFetch |
number | 20 | 每次最多获取推文数 |
maxTweetAgeMinutes |
number | 60 | 推文最大年龄,超过跳过 |
debugMode |
boolean | false | 启用 DEBUG 级别日志 |
xToImageApiUrl |
string | - | X to Image API 地址 |
xToImageApiToken |
string | - | API Token |
twitter:
authToken: "你的 auth_token" # Cookie 认证(推荐)
ct0: "你的 ct0"
# 或使用密码登录:
# username: "你的用户名"
# password: "你的密码"
# email: "你的邮箱"
# totpSecret: "你的 TOTP Secret"discord:
enabled: true
token: "YOUR_DISCORD_BOT_TOKEN"
adminChannelId: "管理频道ID" # 审批命令频道
approveRoleId: "审批角色ID" # 可选,审批权限角色
privilegedIntents: # 特权 intent:auto = 按开发者后台的开关自动决定;on / off = 强制
members: auto # 成员列表(昵称、角色、进出服务器)
presences: auto # 在线状态、正在玩什么telegram:
enabled: true
token: "YOUR_TELEGRAM_BOT_TOKEN"
adminChatIds:
- "111111111"
- "222222222"
parseMode: "HTML"
apiRoot: "" # 代理地址(可选)onebot:
enabled: true
url: "ws://127.0.0.1:3001" # OneBot11 WebSocket 地址
token: "你的令牌" # 访问令牌
wsSslVerify: true # WSS 时是否验证证书(自签名证书设为 false)
reconnectInterval: 5000 # 重连间隔(ms)users:
- username: "elonmusk"
displayName: "Elon Musk"
filters:
keywords:
include: ["tesla", "spacex"]
exclude: ["ad"]
media:
requireMedia: false
excludeRetweets: true
excludeReplies: false支持同时配置多个发布目标(Discord / Telegram / OneBot),每个群组可配置审批频道和 R14 专用频道:
groups:
- name: my-group
users:
- username: "*" # * = 所有监控用户
discord:
channelId: "目标频道ID"
r14ChannelId: "R14频道ID" # NSFW 内容分流(可选)
telegram:
chatId: "-1001234567890"
targets:
r14:
chatId: "-1009876543210" # R14 内容目标(可选)
onebot:
groupId: 123456789 # QQ 群号
r14GroupId: 987654321 # R14 群号(可选)
approval:
discordAdminChannelId: "审批频道ID" # Discord 审批通知频道
discordApproveRoleId: "" # Discord 审批角色 ID(可选)
telegramAdminChatIds: # Telegram 审批管理员
- "111111111"
onebotAdminGroupIds: # QQ 审批通知群
- "222222222"开启后,bot 在 Discord 里变成一个有固定人格的群成员(默认是猫娘 memecat):被 @、被回复时说话,平时潜水观察,偶尔自己插一句;记得每个人说过的事,对不同的人态度不同,自己也有心情起伏。
plugins:
- name: ai-chat
enabled: true
options:
enabled: true
apiUrl: "https://api.openai.com/v1" # 任何 OpenAI 兼容接口
apiKey: "sk-..." # 也可以用环境变量 AI_API_KEY
model: "gpt-4o-mini"
allowedGuildIds: ["服务器ID"] # 空 = 所有服务器
memory:
enabled: true所有选项都有默认值,config.example.yaml 里逐条注释。旧版写在顶层 ai: 下的配置仍兼容。使用教程、人设卡写法、算法、升级迁移、运维与隐私见 docs/plugins/ai-chat/。
启用 enableApproval: true 后:
- 推文发送到管理员频道/群组(含审批按钮)
- 管理员可点击「全部发送」「发送 R14」「拒绝」
- 批准后推文送达目标群组,管理员消息更新为「已批准」+ 撤回按钮
- 撤回: 点击「撤回」按钮,自动删除所有已发送的消息
/approve <ID> — 批准
/reject <ID> — 拒绝
/recall message_id:<ID> — 按消息 ID 撤回
/recall link:<URL> — 按链接撤回
AI 插件开启时另有 /memory /forget /callme /pronouns /affinity /shh /optout /optin /forget-me,说明见 使用教程。
格式: HH:MM:SS [LEVEL] [模块] 消息
| 级别 | 说明 |
|---|---|
| DEBUG | 调试信息,仅 debugMode: true 时输出 |
| INFO | 常规信息 |
| WARN | 警告 |
| ERROR | 错误 |
内置插件存放在 src/plugins/,支持热加载。
外部插件可通过以下方式安装:
plugins:
- name: my-plugin
github: owner/repo # 从 GitHub 仓库安装启动后访问 http://localhost:3000(默认端口),可在线查看和修改配置。
数据库位置: data/bot.db(SQLite)
表:
sent_tweets— 已发送推文记录sent_discord_messages— Discord 消息记录sent_telegram_messages— Telegram 消息记录sent_onebot_messages— OneBot 消息记录pending_approvals— 待审批记录image_cache— 图片缓存
AI 插件的表(消息、成员、记忆、好感、情绪、向量、后台任务等)由插件启动时的版本化迁移创建,见 升级与数据迁移。
支持 .env 文件,环境变量会覆盖配置文件中的对应值。关键变量:
| 变量 | 说明 |
|---|---|
DISCORD_TOKEN |
Discord Bot Token |
TELEGRAM_TOKEN |
Telegram Bot Token |
ONEBOT_URL |
OneBot WebSocket 地址 |
TWITTER_AUTH_TOKEN |
Twitter auth_token Cookie |
TWITTER_CT0 |
Twitter ct0 Cookie |
DEBUG_MODE |
true 启用调试日志 |
AI_API_KEY |
AI 聊天模型的密钥 |
MIT