Panduan ini menjelaskan langkah demi langkah cara install TTMediaBot di Ubuntu 22.04 dan menjalankannya sebagai bot musik untuk TeamTalk.
Sebagian besar isi artikel ini diambil dari diskusi di grup Telegram TTMediaBot dan dari repository resmi
TTMediaBot di GitHub.
TTMediaBot adalah bot musik yang melakukan streaming audio (misalnya dari YouTube menggunakan yt-dlp dan mpv)
ke channel di aplikasi
TeamTalk.
Panduan ini telah disempurnakan oleh Muhammad
Apa itu TTMediaBot?
TTMediaBot adalah bot pemutar musik yang dapat melakukan streaming audio—misalnya dari YouTube menggunakan yt-dlp dan mpv—ke channel suara di
TeamTalk.
Seluruh source code dan update resmi TTMediaBot tersedia di:
https://github.com/gumerov-amir/TTMediaBot
TTMediaBot menggunakan library TeamTalk SDK untuk komunikasi dengan server TeamTalk. SDK resmi dapat ditemukan di:
TeamTalk 5 SDK (Official)
Jika Kamu menginstall TTMediaBot untuk pertama kali, ikuti semua langkah dari awal.
Jika Kamu sudah pernah menginstall sebelumnya, Kamu boleh melewati Langkah 7
(pembuatan virtual environment dan instalasi dependency).
Kebutuhan Sistem (Requirements)
Pastikan paket berikut sudah terinstall di Ubuntu 22.04:
- pulseaudio
- libmpv-dev
Menyediakan library dan headermpv. TTMediaBot menggunakanmpvsebagai audio player backend
untuk memutar stream dan file. - text editor (misalnya
nano,vim, dan sebagainya)
Dibutuhkan untuk mengedit file konfigurasi seperticonfig.json, unit systemd, dan konfigurasi PulseAudio. - p7zip-full
Digunakan untuk mengekstrak file terkompresi (misalnya saat mengunduh dan mengekstrak library
TeamTalk SDK).
Jika ada paket yang belum terpasang, install terlebih dahulu, misalnya:
sudo apt update
sudo apt install pulseaudio libmpv-dev p7zip-full nano
Semua perintah di bawah ini diasumsikan dijalankan pada Ubuntu 22.04 (Jammy Jellyfish).
1. Membuat User untuk Bot
Direkomendasikan untuk menjalankan TTMediaBot di bawah user non-root yang khusus,
untuk alasan keamanan dan pemisahan dari service lain.
Dalam panduan ini kita menggunakan nama user: music.
Jalankan perintah berikut sebagai user utama (yang memiliki hak sudo):
adduser music
loginctl enable-linger music
Penjelasan:
-
adduser music
Membuat user baru bernamamusicdengan home directory sendiri, yaitu/home/music. -
loginctl enable-linger music
Mengizinkan service systemd milik usermusictetap berjalan
meski user tersebut tidak sedang login. Ini penting agar TTMediaBot bisa terus berjalan di background.
2. Login sebagai User Baru
Logout dari sesi user Kamu saat ini, kemudian login sebagai user music, baik melalui SSH maupun terminal lokal.
Mulai dari langkah ini, kecuali disebutkan lain, semua perintah diasumsikan dijalankan sebagai user music.
3. Install JavaScript Runtime (Deno)
yt-dlp (downloader yang digunakan TTMediaBot untuk mengambil audio dari YouTube dan situs lainnya)
sekarang sangat menyarankan atau membutuhkan runtime JavaScript eksternal
(misalnya Deno, Node.js, Bun, atau QuickJS) untuk menangani enkripsi YouTube dan EJS (yt-dlp-ejs) dengan benar.
Dalam panduan ini kita menggunakan Deno, karena:
- Mudah diinstall dengan satu script.
yt-dlpmendukung Deno sebagai runtime yang direkomendasikan.-
Setelah Deno terpasang,
yt-dlpdapat menggunakannya secara otomatis
tanpa konfigurasi yang rumit.
Install Deno:
curl -fsSL https://deno.land/install.sh | sh
Selama proses instalasi, Kamu mungkin melihat pertanyaan:
Edit shell configs to add deno to the PATH? (Y/n)
Tekan Y lalu Enter.
Ini akan secara otomatis memperbarui konfigurasi shell Kamu agar perintah deno
bisa dijalankan dari mana saja.
Setelah instalasi selesai, verifikasi dengan:
deno --version
Jika perintah di atas menampilkan nomor versi Deno, berarti instalasi berhasil.
4. Clone TTMediaBot
Sekarang kita akan mengunduh source code TTMediaBot dari GitHub ke /home/music.
Sebagai user music, jalankan:
cd /home/music
git clone https://github.com/gumerov-amir/TTMediaBot.git
Tunggu sampai proses cloning selesai.
5. Edit File yang Diperlukan untuk Performa Optimal
Masuk ke direktori TTMediaBot:
cd /home/music/TTMediaBot
Di langkah ini, kita akan memperbarui beberapa dependency Python dan sejumlah helper script
agar TTMediaBot bekerja lebih baik dengan yt-dlp versi baru dan TeamTalk SDK versi terbaru.
5.1 Update requirements.txt
Buka requirements.txt dengan text editor (misalnya nano):
nano requirements.txt
Temukan baris berikut:
youtube-search-python
yt-dlp
Ganti dengan:
py-yt-search
yt-dlp[default]
Penjelasan:
-
youtube-search-pythonadalah library yang lebih lama dan mungkin sudah tidak terlalu aktif dirawat. -
py-yt-searchadalah alternatif yang lebih baru dan lebih up to date untuk melakukan pencarian YouTube. -
yt-dlp[default]menginstallyt-dlpbeserta dependency tambahan default-nya,
termasuk dukungan yang dibutuhkan untuk integrasi dengan runtime JavaScript seperti Deno
dalam proses dekripsi YouTube berbasis EJS.
Simpan dan keluar dari file (untuk nano: Ctrl+X, lalu Y, lalu Enter).
5.2 Ganti bot/services/yt.py
TTMediaBot menggunakan file service (yt.py) untuk menangani logika pencarian dan pemutaran YouTube.
Pada langkah ini, kita menggantinya dengan versi yang sudah diperbarui agar bekerja dengan py-yt-search
dan yt-dlp modern.
Jalankan:
curl -L -o /home/music/TTMediaBot/bot/services/yt.py "https://www.dropbox.com/scl/fi/znzgxe21yqp3fstu1td1o/yt.py?rlkey=h0lva6fo5l9ibtbrmkg19sogd&st=py9kexx5&dl=1"
Perintah di atas akan:
- Mengunduh file
yt.pyterbaru dari URL yang disediakan. - Menimpa file
yt.pyyang ada dibot/services. - Memperbarui handler YouTube TTMediaBot tanpa perlu mengedit kode Python secara manual.
5.3 Perbarui TeamTalk SDK Downloader
TTMediaBot menggunakan script helper (tools/ttsdk_downloader.py)
untuk mengunduh TeamTalk SDK secara otomatis.
Script ini awalnya menargetkan versi SDK yang lebih lama (misalnya 5.15).
Versi minimum yang tersedia sekarang adalah 5.18, jadi kita perlu memperbarui string versinya.
Buka file tersebut:
nano tools/ttsdk_downloader.py
Temukan baris:
version = [i for i in versions if "5.15" in i.text][-1].a.get("href")[0:-1]
Ubah menjadi:
version = [i for i in versions if "5.18" in i.text][-1].a.get("href")[0:-1]
Penjelasan:
- Script ini melakukan scraping index versi TeamTalk SDK yang tersedia.
-
Semula script hanya mencari string
"5.15". -
Kita mengubah filter menjadi
"5.18"
agar script selalu memilih build 5.18 terbaru yang tersedia.
Simpan dan keluar dari editor.
6. Mengatasi Distorsi PulseAudio dan CPU Tinggi
Pada beberapa sistem, PulseAudio dapat menyebabkan audio pecah (crackling) atau penggunaan CPU yang sangat tinggi,
terutama saat digunakan bersama sound card tertentu dan timer.
Banyak pengguna melaporkan bahwa menonaktifkan timer-based scheduling dengan menambahkan
tsched=0 ke module-udev-detect dapat mengurangi penggunaan CPU maupun distorsi audio.
Kita akan membuat konfigurasi PulseAudio khusus user untuk user music.
Buat direktori konfigurasi:
mkdir -p /home/music/.config/pulse
Salin konfigurasi default sistem ke direktori user:
cp /etc/pulse/default.pa /home/music/.config/pulse/default.pa
Edit file yang disalin:
nano /home/music/.config/pulse/default.pa
Di dalam editor, cari baris berikut (tekan Ctrl+W lalu ketik):
load-module module-udev-detect
Ubah baris tersebut menjadi:
load-module module-udev-detect tsched=0
Penjelasan:
-
module-udev-detectbertanggung jawab mendeteksi hardware audio Kamu. -
tsched=0menonaktifkan timer-based scheduling pada modul ini,
yang dapat membantu mengurangi lonjakan CPU dan distorsi audio pada beberapa perangkat.
Simpan dan keluar dari file.
Setelah mengubah konfigurasi PulseAudio, biasanya disarankan untuk me-restart service PulseAudio user.
Namun, di panduan ini kita akan menyelesaikan setup TTMediaBot terlebih dahulu
dan kemudian menjalankan semuanya melalui systemd.
7. Install Dependency Menggunakan Python Virtual Environment
Menggunakan Python virtual environment akan menjaga paket Python TTMediaBot tetap terisolasi
dari sistem secara umum, yang merupakan praktik yang direkomendasikan di Ubuntu.
Pastikan Kamu masih berada di direktori TTMediaBot:
cd /home/music/TTMediaBot
Buat virtual environment:
python3 -m venv venv
Jika muncul error terkait ensurepip yang tidak tersedia,
install paket venv terlebih dahulu:
sudo apt install python3.10-venv
Paket python3.10-venv adalah paket venv stKamur untuk Python 3.10 di Ubuntu 22.04.
Setelah itu, ulangi lagi perintah pembuatan virtual environment:
python3 -m venv venv
Aktifkan virtual environment:
source venv/bin/activate
Prompt shell Kamu biasanya akan berubah (misalnya muncul (venv) di awal).
Ini menKamukan semua perintah python3 dan pip3 sekarang menggunakan environment di
/home/music/TTMediaBot/venv.
Install dependency Python yang dibutuhkan:
pip3 install -r requirements.txt
Perintah di atas akan menginstall semua library yang dibutuhkan TTMediaBot, termasuk yt-dlp dan py-yt-search.
Download TeamTalk SDK:
cd tools
python3 ttsdk_downloader.py
Script ini akan mengunduh dan mengekstrak file TeamTalk SDK yang diperlukan ke direktori yang sesuai,
sehingga TTMediaBot dapat menggunakan library client TeamTalk.
Setelah selesai, kembali ke direktori utama project:
cd ..
8. Edit File TTMediaBot.service
TTMediaBot menyertakan contoh file systemd user service untuk memudahkan menjalankan bot sebagai background service.
Buka file service:
nano systemd/user/TTMediaBot.service
Secara default, file ini menggunakan home path user tt, misalnya:
WorkingDirectory=/home/tt/TTMediaBot
ExecStart=/home/tt/TTMediaBot/TTMediaBot.sh -c /home/tt/TTMediaBot/config.json
Kamu harus menyesuaikan path ini agar sesuai dengan home directory user music:
WorkingDirectory=/home/music/TTMediaBot
ExecStart=/home/music/TTMediaBot/TTMediaBot.sh -c /home/music/TTMediaBot/config.json
Selain itu, karena yt-dlp sekarang bergantung pada runtime JavaScript eksternal (Deno)
untuk menyelesaikan tantangan enkripsi YouTube, kita harus memastikan
systemd user service dapat menemukan binary Deno.
Saat Kamu menginstall Deno dengan script installer, posisi Deno adalah:
/home/music/.deno/bin/deno
Namun, systemd user service tidak secara otomatis memuat PATH dari shell Kamu (misalnya dari .bashrc),
jadi Kamu harus menambahkan variabel environment secara eksplisit di file service.
Masih di dalam bagian [Service], tambahkan baris berikut:
Environment="DENO_INSTALL=/home/music/.deno"
Environment="PATH=/home/music/.deno/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
Penjelasan:
-
DENO_INSTALLmenunjuk ke direktori tempat Deno diinstall untuk usermusic. -
PATHdi override sehingga/home/music/.deno/binada di awal.
Ini memastikan service TTMediaBot dapat menemukan dan menjalankandeno,
sehinggayt-dlpdapat menyelesaikan enkripsi YouTube berbasis JavaScript dengan benar
dan menghindari error seperti “Signature solving failed”.
Secara garis besar, bagian service Kamu akan tampak seperti ini:
[Unit]
Description=TTMediaBot
Requires=pulseaudio.service
[Service]
Type=simple
WorkingDirectory=/home/music/TTMediaBot
ExecStart=/home/music/TTMediaBot/TTMediaBot.sh -c /home/music/TTMediaBot/config.json
Restart=on-failure
Environment="DENO_INSTALL=/home/music/.deno"
Environment="PATH=/home/music/.deno/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
[Install]
WantedBy=default.target
Simpan dan keluar.
9. Update TTMediaBot.sh agar Mendukung Virtual Environment
Secara default, TTMediaBot.sh menjalankan TTMediaBot.py menggunakan interpreter Python sistem.
Karena kita telah menggunakan virtual environment, kita perlu mengubahnya
agar menggunakan Python di dalam venv.
Buka script launcher:
nano TTMediaBot.sh
Ganti seluruh isi file dengan:
#!/bin/bash
PROGNAME=TTMediaBot.py
PROGDIR=$(dirname "$(readlink -f "$0")")
VENV_PYTHON="$PROGDIR/venv/bin/python"
export LD_LIBRARY_PATH="$PROGDIR/TeamTalk_DLL:$PROGDIR:$LD_LIBRARY_PATH"
exec "$VENV_PYTHON" "$PROGDIR/$PROGNAME" "$@"
Penjelasan:
-
PROGDIRmendeteksi direktori tempatTTMediaBot.shberada. -
VENV_PYTHONmenunjuk ke binary Python di dalam direktorivenv. -
LD_LIBRARY_PATHdiperbarui sehingga TeamTalk DLL (atau shared libraries lainnya) dapat ditemukan. -
execmenggantikan proses shell saat ini dengan proses Python,
meneruskan semua argumen ("$@") keTTMediaBot.py.
Simpan dan keluar.
Jika Kamu membuat atau mengedit script ini di Windows sebelum mengupload ke server,
mungkin nanti perlu memperbaiki line ending Windows menggunakan sed
(kita bahas di Langkah 12 jika dibutuhkan).
10. Menyalin File systemd ke Direktori User
Systemd user services untuk user tertentu biasanya disimpan di:
/home/username/.config/systemd/user
Kita akan menyalin file service user TTMediaBot ke direktori systemd milik user music.
Pastikan direktori target ada:
mkdir -p /home/music/.config/systemd/user
Lalu salin file:
cp -r /home/music/TTMediaBot/systemd/user/* /home/music/.config/systemd/user/
Ini akan membuat unit TTMediaBot.service tersedia di systemd user services milik user music.
11. Menyalin Konfigurasi Default
TTMediaBot menyertakan file konfigurasi default bernama config_default.json.
Kita akan menyalinnya menjadi config.json sehingga menjadi konfigurasi aktif.
Jalankan:
cp /home/music/TTMediaBot/config_default.json /home/music/TTMediaBot/config.json
Kamu akan mengedit config.json nanti untuk menyesuaikan alamat server, channel, kredensial,
dan ID perangkat audio.
12. Menyiapkan Audio Routing Menggunakan PulseAudio
TTMediaBot memutar audio ke PulseAudio, dan kemudian TeamTalk menangkapnya dari perangkat “monitor”.
Umumnya, Kamu ingin TTMediaBot mengoutput ke sink Null Output,
dan menggunakan Monitor of Null Output sebagai input device di dalam TTMediaBot.
Ini dapat mengurangi beban CPU dan mencegah suara sistem lain ikut terekam.
Pertama, aktifkan dan jalankan PulseAudio untuk user music:
systemctl --user enable pulseaudio
systemctl --user start pulseaudio
Sekarang, cek device audio yang tersedia menggunakan TTMediaBot:
cd /home/music/TTMediaBot
./TTMediaBot.sh --devices
Jika TTMediaBot.sh gagal dieksekusi (misalnya karena line ending Windows), jalankan:
sed -i -e 's/\r$//' TTMediaBot.sh
Kemudian coba lagi:
./TTMediaBot.sh --devices
Bot akan menampilkan daftar output device dan input device dengan ID numerik. Cari:
- Output device bernama Null Output.
- Input device yang sesuai bernama Monitor of Null Output.
Catatan penting:
- Set output device bot ke ID dari Null Output.
- Set input device bot ke ID dari Monitor of Null Output.
Jika Kamu menggunakan device lain (misalnya sound card fisik), PulseAudio dan mpv
dapat menyebabkan penggunaan CPU yang sangat tinggi atau menangkap suara sistem yang tidak diinginkan,
terutama pada VPS.
Sekarang buka file konfigurasi:
nano /home/music/TTMediaBot/config.json
Di dalam konfigurasi:
- Cari bagian untuk output device dan input device.
- Ubah nilai ID-nya agar sesuai dengan ID yang ditampilkan oleh
./TTMediaBot.sh --devices.
Selain itu, sesuaikan pengaturan lain sesuai kebutuhan:
- Alamat server TeamTalk, port, dan channel.
- Nickname bot.
- Command prefix dan opsi perilaku lainnya.
Jika sudah selesai, simpan dan keluar.
13. Menjalankan Bot
Sekarang semuanya sudah siap untuk menjalankan TTMediaBot sebagai systemd user service di bawah user music.
Aktifkan service agar otomatis berjalan saat login (atau saat boot jika lingering diaktifkan):
systemctl --user enable TTMediaBot
Jalankan bot sekarang:
systemctl --user start TTMediaBot
Untuk mengecek apakah service berjalan dengan benar, gunakan:
systemctl --user status TTMediaBot
Jika ada error, akan ditampilkan pada output status atau di log journal (journal logs) systemd.
Setelah service berjalan dan terkoneksi ke server TeamTalk Kamu,
bot akan muncul di channel dan siap memutar audio sesuai perintah.
14. Selesai
Kamu telah berhasil menginstall dan mengkonfigurasi TTMediaBot di Ubuntu 22.04 menggunakan:
- User khusus (
music) - PulseAudio dengan pengaturan yang disesuaikan untuk perilaku CPU dan audio yang lebih baik
- Python virtual environment untuk manajemen dependency yang bersih
- Deno sebagai JavaScript runtime untuk
yt-dlp, yang sudah terekspos dengan benar
ke environment systemd user service
Selamat menggunakan TTMediaBot di server Ubuntu Kamu.