跳过正文

使用 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#
698
139

下载及安装
#

首先确认自己的系统,在 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 = ""

参考
#


本文作者: 褐瞳さん
本文链接: https://hetong-re4per.com/posts/use-orangepi-zero3-to-build-ts3audiobot/
版权声明: 本文文字在未特别注明下默认使用 CC BY-NC-SA 4.0 许可协议。

相关文章

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