写在前面

NeteaseTSBot 一个基于 TeamSpeak 的音乐机器人;

之前常见的组合基本都是:

  • TS3AudioBot
  • NeteaseCloudMusicApi
  • 一些第三方插件

问题是那套东西后面越来越难维护,尤其是我之前用的那套 NeteaseCloudMusicApi 相关方案,后面连项目都弄丢了,也没有新版能继续用。继续在老东西上修修补补没太大意义,所以我就自己重新写了一套。

先放地址:

这个项目是干嘛的

TSBot 是一个基于 TeamSpeak 的音乐机器人,voice-service 主客户端连接现在已经支持 TS6。

目前主要提供这些东西:

  • TeamSpeak 语音播放
  • 播放队列和基础控制,比如暂停、继续、上一首、下一首、音量、随机、循环
  • 网易云音乐搜索 / 歌单 / 喜欢 / 歌词,通过外部 NeteaseCloudMusicApi 服务接入
  • QQ 音乐搜索 / 歌单 / 歌词 / 播放链接,后端内建适配
  • Web 控制台,用来搜索、管理队列、看歌词和做一些设置

不是单纯只靠命令的 bot,我这里单独做了网页控制台,日常操作会方便很多。

项目结构

这个项目现在分成 3 个部分:

  • backend/:Python / FastAPI 后端,负责队列、搜索、网易云与 QQ 音乐接口、控制语音服务
  • voice-service/:Rust 语音服务,负责连接 TeamSpeak、播放音频,并通过 gRPC 给后端调用
  • web/:Vue3 + Vite 前端,用来做 Web 控制台

整体关系大概是这样:

text
1
2
3
4
5
[web (Vue3)]  <--HTTP-->  [backend (FastAPI)]  <--gRPC-->  [voice-service (Rust)]  -->  TeamSpeak (TS3/TS6)
|
| HTTP
v
[NeteaseCloudMusicApi]

为什么要这样拆

这个项目一开始就是冲着“解耦性”去做。

主要解决:

  • 语音和业务解耦voice-service 只负责连接 TeamSpeak 和播放音频,通过 gRPC 暴露控制接口
  • 网易云作为可替换依赖:后端通过 TSBOT_NETEASE_API_BASE 对接外部 NeteaseCloudMusicApi,以后要换实现也比较好改
  • 前后端和语音服务独立迭代:哪一层出问题就查哪一层,不至于一个地方坏了全都跟着炸

这个东西本质上不是为了“堆功能”,主要还是为了后面能继续维护。

目前支持

TeamSpeak / TS6

  • voice-service 的主客户端连接已经适配 TeamSpeak 服务器登录、进频道、收发文字消息和音频播放
  • 当前可用于 TS3 / TS6 服务器
  • 代码里还保留了一条 legacy ServerQuery fallback,只是做一些旧兼容,不是 TS6 的 HTTP(S) Query 接口

网易云音乐

这里不直接调网易云官方接口,而是通过自己部署的 NeteaseCloudMusicApi 服务转发。

所以如果你要用网易云这部分,需要自己准备:

  • NeteaseCloudMusicApi
  • TSBOT_NETEASE_API_BASE

QQ 音乐

QQ 音乐这边不需要额外部署独立 API 服务,后端已经内建了适配。

目前已经做了:

  • 搜索
  • 歌曲详情
  • 歌单详情
  • 歌词
  • 专辑 / 歌手 / MV 信息

有些依赖登录态的能力,比如用户歌单或者更稳定的播放链接,还是需要vip Cookie,而且cookie几天就刷新,目前没找到办法。

Web 控制台

前端:

  • 搜索歌曲
  • 浏览歌单
  • 管理播放队列
  • 控制播放状态
  • 看歌词
  • 设置 Cookie 或一些平台配置

系统要求

  • Linux,推荐 Ubuntu 20.04+
  • Python: 3.8+
  • Node.js: 16+
  • Rust: 1.70+

音乐源:

  • 网易云音乐:需要单独部署 NeteaseCloudMusicApi
  • QQ 音乐:后端内建适配,但部分登录态能力需要管理员 Cookie

部署这块

这篇不展开写部署步骤,仓库里已经放了这些文档:

  • HOWTOSTART.md:部署和运行说明
  • LOGGING.md:日志系统说明
  • web/README.md:前端相关说明

另外也放了常见的启动脚本,像:

  • nohup-start.sh
  • nohup-stop.sh
  • nohup-status.sh

如果后面有空我再单独写一篇部署记录。

最后

目前这个项目还在继续改,后面大概还是会往下面这些方向补:

  • 前端体验
  • 平台适配
  • 部署流程
  • 一些历史兼容问题

不多说,地址再放一次: