Memasang TTMediaBot di Ubuntu 22.04 Terbaru

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 header mpv. TTMediaBot menggunakan mpv sebagai audio player backend
    untuk memutar stream dan file.
  • text editor (misalnya nano, vim, dan sebagainya)
    Dibutuhkan untuk mengedit file konfigurasi seperti config.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 bernama music dengan home directory sendiri, yaitu /home/music.
  • loginctl enable-linger music
    Mengizinkan service systemd milik user music tetap 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-dlp mendukung Deno sebagai runtime yang direkomendasikan.
  • Setelah Deno terpasang, yt-dlp dapat 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-python adalah library yang lebih lama dan mungkin sudah tidak terlalu aktif dirawat.
  • py-yt-search adalah alternatif yang lebih baru dan lebih up to date untuk melakukan pencarian YouTube.
  • yt-dlp[default] menginstall yt-dlp beserta 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.py terbaru dari URL yang disediakan.
  • Menimpa file yt.py yang ada di bot/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-detect bertanggung jawab mendeteksi hardware audio Kamu.
  • tsched=0 menonaktifkan 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_INSTALL menunjuk ke direktori tempat Deno diinstall untuk user music.
  • PATH di override sehingga /home/music/.deno/bin ada di awal.
    Ini memastikan service TTMediaBot dapat menemukan dan menjalankan deno,
    sehingga yt-dlp dapat 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:

  • PROGDIR mendeteksi direktori tempat TTMediaBot.sh berada.
  • VENV_PYTHON menunjuk ke binary Python di dalam direktori venv.
  • LD_LIBRARY_PATH diperbarui sehingga TeamTalk DLL (atau shared libraries lainnya) dapat ditemukan.
  • exec menggantikan proses shell saat ini dengan proses Python,
    meneruskan semua argumen ("$@") ke TTMediaBot.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.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.