运行环境
Ubuntu22.04

配置 Teamspeak

准备阶段

创建一个 teamspeak 用户(不建议使用 root 用户直接操作)

# 切换root用户
su - 
# 新建一个用户
useradd -s /bin/bash -m teamspeak
# 加到sudo组
usermod -aG sudo teamspeak
# 设置密码
passwd teamspeak
# 切换teamspeak用户
su - teamspeak

安装服务端

前往下载官方 linux 服务端,最新版本为 SERVER 64-BIT 3.13.7

TeamSpeak 下载 | TeamSpeak

注意!ts3 中文站是盗版网站,会改动你的 hosts 文件,导致你无法进入官方服务器或者缺失部分账号功能,请认准 teamspeak 官网。

或者使用命令直接下载

wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2

解压

tar -xvf teamspeak3-server_linux_amd64-3.13.7.tar.bz2

重命名解压后的目录

mv  teamspeak3-server_linux_amd64 teamspeak

进入 teamspeak 目录

cd teamspeak

同意许可协议

touch .ts3server_license_accepted

启动服务端

./ts3server_startscript.sh start

随后显示如下

------------------------------------------------------------------
------------------------------------------------------------------
                      I M P O R T A N T                           
------------------------------------------------------------------
               Server Query Admin Account created                 
         loginname= "serveradmin", password= "xxxxxxxx"
         apikey= "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
------------------------------------------------------------------

------------------------------------------------------------------
                  I M P O R T A N T                           
------------------------------------------------------------------
  ServerAdmin privilege key created, please use it to gain 
  serveradmin rights for your virtualserver. please
  also check the doc/privilegekey_guide.txt for details.

   token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
------------------------------------------------------------------

记录 token 值,现在就可以从客户端连接 TS 服务器了,记得开放端口和防火墙

从 TS 客户端连接你的域名/IP,第一次进入会要求你输入管理员密钥,就是上面的 token 代码,输入之后你就是频道的所有者了。

最好在 ts客户端 -> 权限 -> 权限密钥 里面备份一个权限密钥,token 只能使用一次。意外失去管理员身份需要进入后台获取一个新的 token 值

ctrl+c 退出

配置规则

开放端口和防火墙

端口协议说明
9987UDPTeamSpeak 默认语音服务
10011TCPTeamSpeak ServerQuery raw
10022TCPTeamSpeak ServerQuery SSH
30033TCPTeamSpeak 文件传输
41144TCPTSDND

设置开机自启

新建 teamspeak.service

sudo vim /etc/systemd/system/teamspeak.service

注意,配置文本中 /home/teamspeak/teamspeak 为服务端文件目录路径。若自定义文件目录请自行改动。

[Unit]
Description=Teamspeak Service
Wants=network.target

[Service]
WorkingDirectory=/home/teamspeak/teamspeak
ExecStart=/home/teamspeak/teamspeak/ts3server_minimal_runscript.sh
ExecStop=/home/teamspeak/teamspeak/ts3server_startscript.sh stop
ExecReload=/home/teamspeak/teamspeak/ts3server_startscript.sh restart
Restart=always
RestartSec=15
 
[Install]
WantedBy=multi-user.target

系统服务操作

# 更新配置
sudo systemctl daemon-reload

# 设置开机启动
sudo systemctl enable teamspeak.service

# 启动服务
sudo systemctl start teamspeak.service

# 停止服务
sudo systemctl stop teamspeak.service

# 重启服务
sudo systemctl restart teamspeak.service

# 查看状态
# Active: active (running) 即为运行成功,若不成功可以kill掉之前开启的服务端进程
sudo systemctl status teamspeak.service

至此 TS 服务端配置完毕。


配置机器人

安装 ffmpeg

sudo apt install libopus-dev ffmpeg

安装本体

建议自行下载,远程传输文件给服务器,不然下载很慢

# 本体with.TS3Bot.linux-x64.zip
wget https://github.com/ZHANGTIANYAO1/TS3AudioBot-NetEaseCloudmusic-plugin/releases/download/1.1.0/with.TS3Bot.linux-x64.zip
# 插件YunPlugin-UNM-v1.0.zip
wget https://github.com/FiveHair/TS3AudioBot-NetEaseCloudmusic-plugin-UNM/releases/download/v1.0/YunPlugin-UNM-v1.0.zip

解压 with.TS3Bot.linux-x64.zip 和 YunPlugin-UNM-v1.0.zip

unzip with.TS3Bot.linux-x64.zip
# 将解压后的linux-64目录改名
mv linux-x64 TS3AudioBot
# 解压后会得到两个文件YunPlugin-UNM.dll和YunSettings.ini
unzip YunPlugin-UNM-v1.0.zip

删除原来的插件,并拷贝最新版的 YunPlugin-UNM.dll 和 YunSettings.ini 进 plugins 目录

rm TS3AudioBot/plugins/*
mv YunPlugin-UNM.dll TS3AudioBot/plugins/ && mv YunSettings.ini TS3AudioBot/plugins/

进入 TS3AudioBot 启动服务

cd TS3AudioBot
./TS3AudioBot

这里可能会提示权限不够,这个文件默认是不可执行的,所以要给它权限

chmod a+x TS3AudioBot
./TS3AudioBot

如下报错请跳转 常见问题 -> 无法启动bot
No usable version of libssl was found
Aborted (core dumped)

接下来会有几步配置需要输入

1. Do you want to set up an admin in the default permission file template? [Y/n]
# 设置管理员id,在teamspeak -> 工具 -> 身份 -> UID

2. Please enter the ip, domain or nickname (with port; default: 9987) where to connect to:
# 设置服务器ip或别名

3. Please enter the server password (or leave empty for none):
# 设置服务器密码,没有直接回车

最后 ctrl+c 结束

设置开机自启

新建 ts3audiobot.service

sudo vim /etc/systemd/system/ts3audiobot.service

输入以下配置。同样的,/home/teamspeak/TS3AudioBot 取决于你安装 TS3AudioBot 的位置

[Unit]
Description=TS3AudioBot
After=teamspeak.service

[Service]
WorkingDirectory=/home/teamspeak/TS3AudioBot
ExecStart=/home/teamspeak/TS3AudioBot/TS3AudioBot
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

系统服务操作

# 更新配置
sudo systemctl daemon-reload

# 设置开机启动
sudo systemctl enable ts3audiobot.service

# 启动服务
sudo systemctl start ts3audiobot.service

# 停止服务
sudo systemctl stop ts3audiobot.service

# 重启服务
sudo systemctl restart ts3audiobot.service

# 查看状态
# Active: active (running) 即为启动成功
sudo systemctl status ts3audiobot.service

网页管理

作者配置的 bot 并没有 WebInterface 目录
想要实现页面管理,需访问原作者 Splamy/TS3AudioBot: Advanced Musicbot for Teamspeak 3 (github.com) 项目
下载原版 TS3AudioBot,将其中的 WebInterface 文件夹放入 TS3AudioBot 目录中即可
之前运行 bot 服务时看到的 ERROR 报错也和这个有关,但不影响最终效果

开放 58913 端口

端口协议说明
58913TCPts3audiobot web

在 teamspeak 服务器内双击私聊机器人,发送

!api token

访问 ip: 58913,输入 token 即可登录网页管理

主要功能有:上传本地音乐,开启多个机器人

本章结语

到此为止,音乐机器人以及可以正常使用,plugins 目录下 ini 配置文件是别人的网易云 API,不安全。想要登录听 vip 歌曲还要在本地部署网易云 API


部署网易云 API

开放 3000 端口

端口协议说明
3000TCP网易云 API 后台网页

安装 git

安装 git

sudo apt-get install git

安装完成后进行 git 配置

# 设置用户名
git config --global user.name "你的名字"
# 设置邮箱
git config --global user.email "你的邮箱"
# 查看配置信息
git config --list

配置完成后,需要创建验证用的公钥,因为 git 是通过 ssh 的方式访问资源库的,所以需要在本地创建验证用的文件

ssh-keygen -t rsa -C "你的邮箱" 

一路回车直到出现随机字符图为止

+---[RSA 3072]----+
|xxxxx            |
|xxxxx            |
|xxxxxxx          |
|xxxxxxxx         |
|xxxxxxxxx        |
|xxxxxxxx         |
|xxxxxxxxx        |
|xxxxx            |
|xxxx             |
+----[SHA256]-----+

查看生成的密钥

cat  ~/.ssh/id_rsa.pub

将 ssh-rsa 开头,邮箱结尾的整个字符串复制下来。进入 github,依次点击 Settings -> SSH Keys -> Add SSH Key,新增一个密钥

回到终端,检测是否可以连接到 github

ssh -T git@github.com

成功信息

Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

如果无法连接,请在搭建API时自行前往github下载项目

安装 node.js

安装 Node.js

sudo apt install nodejs

安装 npm

sudo apt install npm 

利用 n 来管理版本

sudo npm install -g n
# 如果卡在这里,请更换国内镜像源,再重新安装
npm config set registry https://registry.npmmirror.com

需要 nodejs14 以上版本

# 升级长期支持版本
sudo n lts
# 有些系统版本老旧,缺失一些文件,可以直接指定安装版本
sudo n xx.x.x

切换最新版本

# 方向键上下选择即可
sudo n
# 查看nodejs版本,若是没有显示切换后版本,新建一个终端
node -v

搭建 API

获取项目文件 NeteaseCloudMusicApi

git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git

用户家目录会多出一个 NeteaseCloudMusicApi 目录,进入

cd NeteaseCloudMusicApi

执行安装(有可能版本不够高,按照提示更新即可)

npm install

启动服务

node app.js

此时会显示

server running @ http://localhost:3000

访问 ip: 3000 能访问到网易云 API 页面即为配置成功

ctrl+c 退出

设置开机自启

新建 netease.service

sudo vim /etc/systemd/system/netease.service

复制下列内容到 netease.service 文件中

注意,这里是你的 home 用户目录下 git 到的网易云 API 地址,根据自身情况修改

[Unit]
Description=Netease Cloud Music API Service
After=network.target

[Service]
WorkingDirectory=/home/teamspeak/NeteaseCloudMusicApi/
ExecStart=node /home/teamspeak/NeteaseCloudMusicApi/app.js
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

系统服务操作

# 更新配置
sudo systemctl daemon-reload

# 设置开机启动
sudo systemctl enable netease.service

# 启动服务
sudo systemctl start netease.service

# 停止服务
sudo systemctl stop netease.service

# 重启服务
sudo systemctl restart netease.service

# 查看状态
# Active: active (running) && 
# server running @ http://localhost:3000 即为启动成功
sudo systemctl status netease.service

ctrl+c 退出


最终阶段

修改插件配置

编辑本地网易云 API 地址

vim TS3AudioBot/plugins/YunSettings.ini

修改 WangYiYunAPI_Address 地址为网易云 API 的链接

[YunBot]
playMode=3
WangYiYunAPI_Address=http://localhost:3000
cookies1=
UNM_Address=

重启服务器,确保三个服务都运行成功,机器人应该就已经在你的 TS 频道了

启动机器人

接下来都是 ts 客户端操作,不需要在服务器

双击机器人,输入

!plugin list

可以看到当前插件状态(RDY 就绪)

"TS3AudioBot": All available plugins:
#0|RDY|YunPlgun (BotPlugin)

需要手动把插件启用

!plugin load 0

查看当前插件状态(+ON 运行)

!plugin list
# bot消息
"TS3AudioBot": All available plugins:
#0|+ON|YunPlgun (BotPlugin)

运行成功

现在进行登录操作

首先给机器人最高权限,以便于加载二维码头像

!yun login

点击机器人,右侧显示出二维码头像,扫码登录即可

成功会提示

"Aster": !yun login
"TS3AudioBot": 登陆成功

常用指令

建议放入频道简介

正在播放的歌单的图片和名称可以点机器人看它的头像和描述
vip音乐想要先登陆才能播放完整版本:(输入指令后扫描机器人头像二维码登陆)
!yun login

双击机器人,目前有以下指令(把[xxx]替换成对应信息,包括中括号)
1.立即播放网易云音乐
!yun play [音乐名称]

2.添加音乐到下一首
!yun add [音乐名称]

3.播放网易云音乐歌单(如果提示Error: Nothing to play...重新输入指令解决)
!yun gedan [歌单名称]

4.播放网易云音乐歌单id
!yun gedanid [歌单名称]

5.立即播放网易云音乐id
!yun playid [歌单id]

6.添加指定音乐id到下一首
!yun add [音乐id]

7.播放列表中的下一首
!yun next

8.修改播放模式
!yun mode [模式选择数字0-3]
0 = 顺序播放 1 = 顺序循环 2 = 随机播放 3 = 随机循环

需要注意的是如果歌单歌曲过多需要时间加载,期间一定一定不要输入其他指令

解锁版权(未实现)

目前自建机器人不能正常解锁版权歌曲,但可以使用docker版bot尝试

环境要求

运行环境
node.js 18+
npm 10.2.4+

搭建 API

获取项目文件 Unblock Netease Music

git clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic

用户家目录会多出一个 UnblockNeteaseMusic 目录,进入

cd UnblockNeteaseMusic

安装服务

npm install

启动服务

# 默认端口为8080,我在这里改为3001
node app.js -p 3001

显示以下信息即为成功

HTTP Server running @ http://0.0.0.0:3001

设置开机自启

新建 UnblockNeteaseMusic.service

sudo vim /etc/systemd/system/UnblockNeteaseMusic.service

复制下列内容到 UnblockNeteaseMusic.service 文件中

[Unit]
Description=netease proxy service
After=network-online.target

[Service]
WorkingDirectory=/home/teamspeak/UnblockNeteaseMusic
ExecStart=node /home/teamspeak/UnblockNeteaseMusic/app.js -p 3001 -e https://music.163.com -s
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

系统服务操作

# 更新配置
sudo systemctl daemon-reload

# 设置开机启动
sudo systemctl enable UnblockNeteaseMusic.service

# 启动服务
sudo systemctl start UnblockNeteaseMusic.service

# 停止服务
sudo systemctl stop UnblockNeteaseMusic.service

# 重启服务
sudo systemctl restart unm.service

# 查看状态
# Active: active (running) && 
# HTTP Server running @ http://0.0.0.0:3001 即为启动成功
sudo systemctl status UnblockNeteaseMusic.service

修改插件配置

编辑配置文件

vim TS3AudioBot/plugins/YunSettings.ini

修改 UNM_Address 地址为解锁网易云 API 的链接

[YunBot]
playMode=3
WangYiYunAPI_Address=http://localhost:3000
cookies1=
UNM_Address=http://0.0.0.0:3001

修改 NeteaseCloudMusicApi 运行环境

vim NeteaseCloudMusicApi/app.js

添加环境变量

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0

重新启动 netease.service

# 重启服务
sudo systemctl restart netease.service
# 查看状态
sudo systemctl status netease.service

# 显示如下
(node:852) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment>
(Use `node --trace-warnings ...` to show where the warning was created)
server running @ http://localhost:3000

重新启动服务器


常见问题

插件加载错误

"TS3AudioBot": Error: Plugin error: UnknownError

说明你使用了原版 TS3AudioBot,加载不了插件

无法启动 bot

No usable version of libssl was found

Aborted (core dumped)

libssl 版本不可用,去 Index of /ubuntu/pool/main/o/openssl1.0 安装一个 1.0 版本的 libssl

拒绝连接

"TS3AudioBot": An unexpected error occurred: Connection refused Connection refused

说明你的 YunSettings.ini 中的 WangYiYunAPI_Address 路径没配置好

缺失权限

"TS3AudioBot": Error: You cannot execute 'plugin load'. You are missing the 'cmd.plugin.load' right!

管理员UID没有配置,或配置错误,查看rights.toml

"TS3AudioBot": Error: You cannot execute 'yun play'. You are missing the 'cmd.yun.play' right!

普通用户的权限没有配置,编写 rights.toml,见附件

命令报错

"TS3AudioBot": Error: Requested command is ambiguous between: info, quit

没有加载插件,bot私聊!plugin load 0

登录报错

"TS3AudioBot": An unexpected error occurred: The remote server returned an error: (502) Bad Gateway.

扫描二维码后登陆失败,没有本地部署网易云 API

无法连接服务

查看你的端口是否开放,防火墙是否关闭

报错含 ssl

查看 YunSettings.ini 中的 Address 地址是否为 http 而不是 https

报错含 406

一般为网易云api问题,尝试重启

报错含 404,405

查看 YunSettings.ini 中的 Address 地址结尾是否多加了一个/

或者为登录失败导致,需清除 cookies,重新进行登录操作


附件

权限文件

配置bot权限,在bot根目录下,找到rights.toml文件

复制以下代码进行替换,并在管理员权限 -> useruid处填充你的管理员UID

rights.toml

# 权限声明文件
# 有关语法和结构的更多信息,请参阅:
# https://github.com/Splamy/TS3AudioBot/wiki/Rights

"+" = [
    # 基本命令
    "cmd.help.*",
    "cmd.pm",
    "cmd.subscribe",
    "cmd.unsubscribe",
    "cmd.kickme.*",
    "cmd.version",
    
    # 获取歌曲信息
    "cmd.song",
    "cmd.repeat",
    "cmd.random",

    # 条件和基本脚本
    "cmd.if",
    "cmd.print",
    "cmd.rng",
    "cmd.eval",
    "cmd.take",
    "cmd.xecute",
    "cmd.getmy.*",
    "cmd.json.*",
    "cmd.bot.use",
    "cmd.rights.can",
]

# 管理员权限
[[rule]]
    # 在此设置管理员组 ID,例如:[ 13, 42 ]
    groupid = []
    # 或在此设置管理员 UID
    useruid = [ "" ]
    # 默认情况下,将来自本地主机的请求视为管理员
    ip = [ "127.0.0.1", "::1" ]

    "+" = "*"

# 用户权限
[[rule]]
    # 在此设置要允许的组 ID,例如:[ 13, 42 ]
    
    # 以及/或在此设置客户端 UID,例如 [ "uA0U7t4PBxdJ5TLnarsOHQh4/tY=", "8CnUQzwT/d9nHNeUaed0RPsDxxk=" ]
    
    # 或者删除 groupid 和 useruid 以允许所有人

    "+" = [
        # 播放控制
        "cmd.play",
        "cmd.pause",
        "cmd.stop",
        "cmd.seek",
        "cmd.volume",

        # 播放列表管理
        "cmd.list.*",
        "cmd.add",
        "cmd.clear",
        "cmd.previous",
        "cmd.next",
        "cmd.random.*",
        "cmd.repeat.*",

        # 历史记录功能
        "cmd.history.add",
        "cmd.history.from",
        "cmd.history.id",
        "cmd.history.last",
        "cmd.history.play",
        "cmd.history.till",
        "cmd.history.title",

        # 网易云插件全部命令
        "cmd.plugin.list",
        "cmd.plugin.load",
        "cmd.plugin.unload",
        "cmd.yun.login",
        "cmd.yun.play",
        "cmd.yun.playid",
        "cmd.yun.gedan",
        "cmd.yun.mode",
        "cmd.yun.gedanid",
        "cmd.yun.next",
        "cmd.yun.add"
    ]

示例文件将给予用户全部插件相关权限。但有几条建议不要给,酌情考虑是否要赋予用户这些权限
# 列出插件列表
"cmd.plugin.list"  

# 加载插件
"cmd.plugin.load"

# 卸载插件
"cmd.plugin.unload"    

# 登录网易云账户
"cmd.yun.login"
最后修改:2024 年 11 月 29 日
如果觉得我的文章对你有用,请随意赞赏