跳过正文

使用 OrangePi Zero3 搭建 TS3AudioBot

·3107 字·7 分钟· loading... · ·
技术教程 Teamspeak3 OrangePi 开发板
褐瞳さん
作者
褐瞳さん
Everyone is mania in general
目录

前言
#

如何搭建自己的 ts3 服务器这一篇文章中教学了如何搭建属于自己的 ts3 服务器,现在我想放一个音乐机器人在 ts3 里面常驻,可以用来活跃频道,还可以分享自己喜欢的歌。

东云なの

于是找到了 TS3AudioBot 这个项目,它十分符合预期,不需要公网,只需要一个可以联网的机器就行。而香橙派十分符合作为搭建的机器,有着极低的功耗,还可以 24h 都在线。

Splamy/TS3AudioBot

Advanced Musicbot for Teamspeak 3

C#
709
142

下载及安装
#

首先确认自己的系统,在 TS3AudioBot Releases 中下载最新的程序包。因为我是 arm 开发板,所以下载的是arm64架构版本。请按照自己的系统和架构选择对应的版本。

下载

可以选择下载到电脑上然后使用 FTP 传到开发板上;还可以复制文件的地址然后在开发板上使用curl -jLO "<文件地址>"将文件直接下载到开发板(下载慢的话注意网络环境);当然你也可以选择使用SCP指令。这里就不赘述了,不会用SCP的话请查看菜鸟教程 - Linux scp 命令

将程序包准备好后进行解压tar -zxvf <压缩包文件名> -C <指定解压到的文件夹>

解压

解压好后进入文件夹,可以看到以下内容:

压缩包内容

先不急着运行,因为没有对应的库和环境肯定会报错,需要先使用sudo apt-get install libopus-dev ffmpeg安装需要的库。因为我是 Arm Ubuntu 22.04,所以还需要安装旧版本的libssl1.1,所使用的镜像源中也没有,所以需要手动下载安装:

请注意,我是因为自己是 Arm 开发板才需要进行旧版本libssl安装,你是否也需要请按实际情况进行操作,不知道的话可以直接运行 TS3AudioBot 来观察是否有对应报错
  1. 前往 ubuntu - ports 官方库搜索libssl1.1_1.1.1,然后选择对应自己系统架构和版本的进行下载。例如我的下载是libssl1.1_1.1.1-1ubuntu2.1~18.04.23_arm64.deb这一个
  2. 下载到开发版后sudo dpkg -i <软件包名>进行安装,例如我的sudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.23_arm64.deb

运行及配置
#

接下来./TS3AudioBot运行TS3AudioBot,依次进行下面操作:

  1. 会让问你是否需要设定管理员,建议选择「是」;
  2. 选择「是」的话接下来就会让你输入管理员的 uid,可以在 ts3 中「权限 -> 所有客户端列表」找到自己名字,后面的「唯一标识符」就是你的 uid,粘贴上去就行;
  3. 会问你加入的服务器的 IP 、地址或者别名,输入你的服务器地 IP 或者地址或者别名就行;
  4. 输入服务器密码,没有的话直接回车即可;

接下来就会有一个名为「TS3AudioBot」的机器人进入你服务器的默认频道。私聊发送!api token即可开启 web 面板,浏览器输入http://{机器人地址}:58913/进行登录后可以进行一些基本的修改。

配置服务(开机自启动等)
#

使用 root 用户或者使用sudo创建一个文件:/usr/lib/systemd/system/ts3audiobot.service,填入以下内容:

[Unit]
Description=TS3AudioBot
After=teamspeak.service

[Service]
Type=simple
User={运行TS3AudioBot的用户名}
Group={运行TS3AudioBot的用户名}
KillSignal=SIGINT
Restart=on-failure
RestartSec=10
WorkingDirectory={TS3AudioBot文件夹绝对路径}
ExecStart={TS3AudioBot文件夹绝对路径}/TS3AudioBot

[Install]
WantedBy=multi-user.target

systemd 服务使用方式(新加服务或者修改过.service文件需要重载生效):

# 重载
systemctl daemon-reload

# 开启自启动
systemctl enable ts3audiobot.service

# 启动 ts3audiobot
systemctl start ts3audiobot.service

# 停止 ts3audiobot
systemctl stop ts3audiobot.service

# 重启 ts3audiobot
systemctl restart ts3audiobot.service

接下来你就可以开始进机器人配置了。

配置歌单
#

在自己电脑上下好自己想让机器让播放的歌,压缩成.tar.gz格式,上传到开发板,解压到和TS3AudioBot同级的文件夹下面,例如我的TS3AudioBot/home/he_tong/ts3audiobot-test文件夹下面,所有的音乐文件就在/home/he_tong/ts3audiobot-test/music下面。

进入音乐文件夹,创建一个export_music_list.py文件,输入以下内容,其中,第 27 行的「title」需要注意,可以改为你想要最终在网页中显示的名字,可以为中文:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import os
import json

# 支持的音频文件扩展名
supported_extensions = ['.mp3', '.flac', '.wav', '.m4a']

def is_music_file(filename):
    # 检查文件扩展名是否是音频文件
    ext = os.path.splitext(filename)[1].lower()
    return ext in supported_extensions

def get_music_files(path):
    music_files = []
    # 遍历指定目录下的所有文件
    for root, _, files in os.walk(path):
        for file in files:
            if is_music_file(file):
                full_path = os.path.join(root, file)
                music_files.append((file, full_path))
    return music_files

def create_playlist(music_files):
    count = len(music_files)
    # 生成歌单文件内容
    playlist_content = []
    playlist_content.append(f'version:3')
    playlist_content.append(f'meta:{{"count":{count},"title":"Music"}}')

    for title, path in music_files:
        playlist_content.append(f'rsj:{{"type":"media","resid":"{path}","title":"{title}"}}')

    return '\n'.join(playlist_content)

def save_playlist(content, filename="music_list"):
    # 使用 surrogateescape 来处理代理字符问题
    with open(filename, 'w', encoding='utf-8', errors='surrogateescape') as f:
        f.write(content)

if __name__ == "__main__":
    # 获取当前运行位置的路径
    current_dir = os.getcwd()

    # 获取所有音频文件
    music_files = get_music_files(current_dir)

    # 创建歌单内容
    playlist_content = create_playlist(music_files)

    # 保存到文件
    save_playlist(playlist_content)

    print(f"歌单已生成,包含 {len(music_files)} 首歌曲。")

然后使用python export_music_list.py来运行这个 Python 脚本(没有 python 的话请先使用sudo apt-get install python3安装 python),就会生成一个文件,名叫「music_list」,将其复制到{TS3AudioBot_Path}/bots/default/playlists文件夹中,就会有一个播放列表

播放列表

配置机器人行为
#

启动机器人后会在TS3AudioBot同级目录生成一个名为ts3audiobot.toml的文件,这个文件就是机器人的配置文件(不过这个配置是全局的,因为我这只有一个机器人,也只会生成一个,所以修改它就行了,如果你想只修改一个机器人的配置可以进入/bots下对应机器人文件夹下修改bot.toml文件)

以下我只说一些我自己修改的项目参数(你可以使用 Extended Client Info 主题包查看频道 id):

[bot.connect]
# 服务器密码。如果没有,则留空。
server_password = { pw = "", hashed = false, autohash = false }
# 默认频道密码。如果没有,则留空。
channel_password = { pw = "", hashed = false, autohash = false }
# 覆盖 ts3 客户端显示的版本。留空表示默认。
client_version = { build = "", platform = "", sign = "" }
# TeamSpeak3 服务器的地址、IP 或昵称(以及端口;默认:9987)
address = "{服务器地址}"
# 连接时的默认频道。使用频道路径或「/<id>」。
# 例如 「Home/Lobby「, 」/5「, 」Home/Afk\/ Not Here"。
channel = "{频道地址,或者"/频道 id"}"
# 徽章展示架。您可以设置一个逗号分隔的字符串,最多包含三个 GUID。下面是一个列表: http://yat.qa/ressourcen/abzeichen-badges/
badges = ""
# 连接时的客户端昵称。
name = "{机器人名字}"

[bot.events]
# 当机器人连接服务器时调用。
onconnect = "!list play music_list (!repeat all)" # 作用是连接服务器时使用全部循环播放"music_list"这个文件的播放列表
# 机器人断开连接时调用。
ondisconnect = ""
# 当机器人在一定时间内未播放任何内容时调用。
onidle = ""
# 指定机器人闲置多长时间,直到 「onidle 」事件被触发。
# 您可以使用 ISO-8601 格式 「PT30S 」或类似格式指定时间: 15s、1h、3m30s
idletime = "0s"
# 当最后一个客户端离开机器人频道时调用。可指定延迟时间
onalone = "!pause" # 作用是在最后一个人退出机器人所在频道后暂停播放
# 指定机器人在 「onalone 」事件被触发前的独处时间。
# 您可以使用 ISO-8601 格式 「PT30S 」或类似格式指定时间: 15s、1h、3m30s
alone_delay = "10s" #结合上一项,作用是最后一个人退出机器人后 10s 触发上一条的暂停播放
# 当机器人独自一人时,有客户端加入他的频道时调用。可以指定延迟时间。
onparty = "!play" # 作用是原本机器人一个人在频道后有人进入频道就继续播放
# 指定机器人在 「onalone 」事件被触发前的独处时间。
# 您可以使用 ISO-8601 格式 「PT30S 」或类似格式指定时间: 15秒、1小时、3分30秒
party_delay = "0s"
# 新歌开始时调用。
onsongstart = ""

参考
#

相关文章

记录一下香橙派 Zero3 的使用
·3312 字·7 分钟
日常记录 OrangePi 开发板
如何为自己的博客开启阅读量和点赞量显示
·1221 字·3 分钟
技术教程 Hugo Firebase
如何使用 Github Page 搭建自己的博客
·4630 字·10 分钟
技术教程 Github Page Hugo