Twitter -> QQ Bot

Mike L 4e4e54b930 v0.5.3 vor 3 Jahren
bin 8afd3cd7be fix uncatched sending errors, fix playwright-server vor 3 Jahren
dist 899ddc1ff3 fix capturing video loading failure vor 3 Jahren
src 899ddc1ff3 fix capturing video loading failure vor 3 Jahren
systemd 712d0183d3 release v0.4.0 vor 3 Jahren
.eslintrc.js 712d0183d3 release v0.4.0 vor 3 Jahren
.gitignore 5d55361290 publish to npm vor 3 Jahren
.npmignore 2701270cc7 v0.4.3 vor 3 Jahren
LICENSE bb66d36779 add README, modify package.json and LICENSE vor 4 Jahren
README.md e36e8d5d95 v0.5.1 vor 3 Jahren
bootstrap_linux_amd64.sh 712d0183d3 release v0.4.0 vor 3 Jahren
config.example.json 8b7274a063 re-add redis support, enabled by default vor 3 Jahren
package.json 4e4e54b930 v0.5.3 vor 3 Jahren
tsconfig.json 5d55361290 publish to npm vor 3 Jahren
tslint.json d5250d993e use npx, fix lint etc. vor 4 Jahren

README.md

GoCQHTTP Twitter Bot

修改自:rikakomoe/cqhttp-twitter-bot

使用 API:koishijs/koishi(后台使用:Mrs4s/go-cqhttp

主要区别

  • 去除了 Redis(v0.5.1 已重新加入去重,并加入简单的缓存机制,未来可能会继续加入基于散列值的媒体缓存)
  • 支持通过列表 ID 订阅列表,和网页端体验一致
  • 处理订阅链接时大小写不敏感,新订阅链接时先检查是否存在
  • 支持直接查看指定的推文链接,或(在没有其他用户订阅该用户时)从最新推文回溯到该条推文,由新到旧显示
  • 图片使用 sharp 压缩为 JPEG
  • 视频直接作为短视频发送
  • 机器人的 QQ 号码必须手动填写
  • 由于推特改版后引发了 Chromium 的 bug,截图部分从 Puppeteer 改为 Playwright 并使用特殊的 WebSocket 格式 URL(这种方式可以使用本地或远程 WebSocket 代理服务器上的 Playwright 服务端)
  • 自动处理来自群友的好友请求来自好友的加群邀请

配置

它会从命令传入的 JSON 配置文件里读取配置,配置说明如下

配置项 说明 默认
cq_access_token OneBot HTTP API access_token(需与插件一致,
插件若未配置本项即为空,建议配置为独特值)
""(空)
cq_ws_host OneBot HTTP API 插件服务端地址 127.0.0.1
cq_ws_port OneBot HTTP API 插件服务端口 6700
cq_bot_qq OneBot HTTP API 登录的目标机器人 QQ 号 10000(示例值,必填)
twitter_consumer_key Twitter App consumer_key (必填)
twitter_consumer_secret Twitter App consumer_secret (必填)
twitter_access_token_key Twitter App access_token_key (必填)
twitter_access_token_secret Twitter App access_token_secret (必填)
mode 工作模式,0 为图文模式,1 为纯文本模式,2 为文
本附图模式
0
playwright_ws_spec_endpoint Playwright 配置拉取 URL,内容格式为:
{<浏览器>:<开发工具 WebSocket 端点 URL>}
http://127.0.0.1:8080
/playwright-ws.json

(示例值,模式 0 时必填)
resume_on_start 是否在启动时从退出时的进度继续(拉取本应用非活
动时期错过的推文)
false
work_interval 对单个订阅两次拉取更新的最少间隔时间(秒) 60
webshot_delay 抓取网页截图时等待网页加载的延迟时长(毫秒) 10000
lockfile 本地保存订阅信息以便下次启动时恢复 subscriber.lock
redis 是否启用 Redis 服务(当前用于去重和推文缓存) true
redis_host Redis 服务器地址 127.0.0.1
redis_port Redis 服务器端口 6379
redis_expire_time 用于去重的 Redis 发送状态缓存过期时间(秒)
(推文缓存当前固定为 24 小时)
43200

示例文件在 config.example.json此文件兼作默认值和开发时的类型定义模板,非生产环境不建议删除

系统服务

可以使用 systemd 目录里的服务文件设置成自动启动服务

$ cd
$ git clone https://mikeslab.dix.asia/gogs/Pirami/gocqhttp-twitter-bot
$ cd gocqhttp-twitter-bot
$ ./bootstrap_linux_amd64.sh
QQ:
Pass:
Done!
$ rsync -a systemd ~/.config/
$ systemctl --user daemon-reload
$ systemctl --user enable twitterbot.service
$ loginctl enable-linger

注:如果想在本地文件夹保存日志,请取消注释两个服务定义中相应的行,阅读时可以使用 tail -f

Bug

  • 好友消息的图片有可能会失效或直接无法接收(由于更换后台框架,暂时无法进行进一步处理)
  • 视频为实验性功能,可能会有各种问题,如当前元信息缺失会导致预览时的尺寸和时长显示出错,放大后则正常

Todo

  • 重新实现基于 hash 的文件缓存和转推媒体去重
  • 添加选项对时间线进行过滤(目前可以在搜索时指定一些条件,但无法用于订阅,具体请使用 /help 查看文档)