Memasang TTMediaBot di Ubuntu 22.04 Multi User

Artikel ini menjelaskan cara yang direkomendasikan untuk menjalankan beberapa instance TTMediaBot di Ubuntu 22.04 menggunakan arsitektur yang rapi dan mudah diskalakan.
Saya mengasumsikan saat melakukan instalasi ini, Kamu menggunakan user dengan akses sudo. Saya tidak mengambil risiko menggunakan root secara langsung karena terlalu kasar, jadi silakan sesuaikan dengan kebiasaan Kamu.

Key design:

  • 1 source TTMediaBot bersama di /opt
  • 1 Python virtual environment bersama
  • 1 instalasi Deno global
  • 1 user Linux untuk setiap bot
  • Template systemd user service disimpan di /opt
  • Optimasi PulseAudio per user untuk menurunkan beban CPU

System Layout

  • Shared source: /opt/TTMediaBot
  • Shared Python venv: /opt/TTMediaBot/venv
  • systemd templates: /opt/TTMediaBot/systemd/user
  • Per-user config: ~/TTMediaBot/config/config.json
  • Per-user PulseAudio: ~/.config/pulse/

STEP 1 – SYSTEM UPDATE AND DEPENDENCIES

Update sistem dan install paket yang dibutuhkan:

sudo apt update
sudo apt install -y pulseaudio libmpv-dev p7zip-full git curl nano python3-venv -y

Explanation: Paket-paket ini umumnya dibutuhkan untuk audio, ekstraksi file, dan Python environment.


STEP 2 – INSTALL DENO GLOBALLY (REQUIRED)

Hapus instalasi Deno per-user yang mungkin sudah ada agar tidak bentrok:

sudo rm -rf /home/*/.deno
sudo rm -rf /root/.deno

Note: Kamu perlu membersihkan .bashrc dan .profile setiap user secara manual jika sebelumnya menambahkan Deno ke PATH.

Install Deno:

curl -fsSL https://deno.land/install.sh | sh

Note: Saat ditanya untuk menambahkan Deno ke PATH, jangan ditambahkan. Kita akan memindahkannya secara manual.

Pindahkan binary Deno ke lokasi global:

sudo mv ~/.deno/bin/deno /usr/local/bin/deno
sudo chmod 755 /usr/local/bin/deno
sudo rm -rf ~/.deno

Verifikasi instalasi:

which deno
deno --version

Expected output: /usr/local/bin/deno


STEP 3 – CLONE TTMEDIABOT TO /opt

Clone repository ke direktori shared:

sudo git clone https://github.com/gumerov-amir/TTMediaBot.git /opt/TTMediaBot

Explanation: Direktori /opt memang ditujukan untuk aplikasi pihak ketiga yang dipakai bersama.


STEP 4 – REQUIRED SOURCE MODIFICATIONS (ONCE)

Lakukan edit berikut untuk memperbaiki dependency dan kompatibilitas. Langkah ini cukup dilakukan sekali untuk sistem.

4.1 Update Python dependencies

sudo nano /opt/TTMediaBot/requirements.txt

Temukan lalu hapus/ganti:

youtube-search-python
yt-dlp

Pastikan diganti menjadi:

py-yt-search
yt-dlp[default]

Explanation: youtube-search-python sudah deprecated. yt-dlp[default] mengaktifkan dukungan pemecahan challenge JavaScript melalui Deno.

4.2 Replace yt.py service implementation

sudo curl -L -o /opt/TTMediaBot/bot/services/yt.py "https://www.dropbox.com/scl/fi/znzgxe21yqp3fstu1td1o/yt.py?rlkey=h0lva6fo5l9ibtbrmkg19sogd&st=py9kexx5&dl=1"

Explanation: File yt.py ini versi update untuk memperbaiki masalah pencarian dan playback di yt-dlp terbaru.

4.3 Update TeamTalk SDK downloader

sudo nano /opt/TTMediaBot/tools/ttsdk_downloader.py

Cari baris versi (sekitar line 20–30):

version = [i for i in versions if "5.15" in i.text][-1].a.get("href")[0:-1]

Ubah "5.15" menjadi "5.19" (atau stable terbaru):

version = [i for i in versions if "5.19" in i.text][-1].a.get("href")[0:-1]

Explanation: TeamTalk SDK 5.15 sudah tidak tersedia.

4.4 Update TTMediaBot launcher (IMPORTANT)

Buat/Edit launcher script:

sudo nano /opt/TTMediaBot/TTMediaBot.sh

Paste isi berikut persis:

#!/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" "$@"

Jadikan executable:

sudo chmod +x /opt/TTMediaBot/TTMediaBot.sh

Explanation: Semua user akan menjalankan TTMediaBot melalui Python virtual environment yang shared.


STEP 5 – CREATE SHARED PYTHON VIRTUAL ENVIRONMENT

IMPORTANT: Ini harus dilakukan sebagai root karena /opt dimiliki root.

sudo -i
cd /opt/TTMediaBot
python3 -m venv venv
source venv/bin/activate

pip install --upgrade pip
pip install -r requirements.txt

Download TeamTalk SDK:

cd tools
python3 ttsdk_downloader.py

Keluar dari virtual environment dan sesi root:

deactivate
exit

(Kamu sekarang kembali ke prompt user normal)


STEP 6 – CREATE SHARED GROUP AND LOCK PERMISSIONS

Buat group untuk semua user bot:

sudo groupadd ttbotshare

Atur ownership dan permission:

sudo chown -R root:ttbotshare /opt/TTMediaBot
# Allow owner (root) full access, group (bots) read/execute access
sudo chmod -R 755 /opt/TTMediaBot
sudo chmod -R g+rX /opt/TTMediaBot

# Ensure the launcher is executable
sudo chmod 755 /opt/TTMediaBot/TTMediaBot.sh

Explanation: systemd user services tidak bisa mengeksekusi binary yang dimiliki user lain. Root ownership mencegah error seperti status=203/EXEC.


STEP 7 – PREPARE SYSTEMD USER SERVICE TEMPLATE

Edit file service yang sudah ada di repo:

sudo nano /opt/TTMediaBot/systemd/user/TTMediaBot.service

Pastikan isinya seperti berikut:

[Unit]
Description=TTMediaBot
Requires=pulseaudio.service

[Service]
Type=simple
WorkingDirectory=/opt/TTMediaBot
ExecStart=/opt/TTMediaBot/TTMediaBot.sh -c %h/TTMediaBot/config/config.json
Restart=on-failure

Environment=HOME=%h
Environment=XDG_CACHE_HOME=%h/.cache
Environment=XDG_CONFIG_HOME=%h/.config
Environment=XDG_DATA_HOME=%h/.local/share

[Install]
WantedBy=default.target

Explanation: File ini bertindak sebagai template reusable untuk semua user bot.


STEP 8 – ADD A NEW BOT USER

Ganti music1 sesuai username bot yang Kamu inginkan.

sudo adduser music1
# Add user to the shared group so they can read the code in /opt
sudo usermod -aG ttbotshare music1
# Enable lingering so systemd user services run at boot without login
sudo loginctl enable-linger music1
# 'terminate-user' ensures the user session is fully refreshed and lingering takes
sudo loginctl terminate-user music1

STEP 9 – LOGIN AS BOT USER

Switch ke user bot untuk menyiapkan konfigurasi lokal:

sudo -iu music1

STEP 10 – PULSEAUDIO CPU OPTIMIZATION (PER USER)

(Sebagai user music1)

mkdir -p ~/.config/pulse
cp /etc/pulse/default.pa ~/.config/pulse/default.pa
nano ~/.config/pulse/default.pa

Cari:

load-module module-udev-detect

Ubah menjadi:

load-module module-udev-detect tsched=0

Explanation: Ini signifikan menurunkan penggunaan CPU dan mencegah distorsi audio.


STEP 11 – COPY SYSTEMD TEMPLATE TO USER

(Sebagai user music1)

mkdir -p ~/.config/systemd
cp -r /opt/TTMediaBot/systemd/user ~/.config/systemd/

STEP 12 – CREATE USER CONFIGURATION

(Sebagai user music1)

mkdir -p ~/TTMediaBot/config
cp /opt/TTMediaBot/config_default.json ~/TTMediaBot/config/config.json
nano ~/TTMediaBot/config/config.json

Things to note when editing config:

  • output dan input harus sama-sama null dan monitor null. Biasanya output di-set ke id 1, dan input ke id 5.
  • cookiefile_path harus menunjuk ke file cookie Kamu. Contoh: jika file cookie ada di direktori yang sama dengan config, set seperti ini:
    "cookiefile_path": "/home/music1/TTMediaBot/config/cookies.txt"
  • default service set ke yt. Service lain sebaiknya dinonaktifkan kecuali Kamu memang menggunakannya dan sudah menyiapkan token.

Selanjutnya buatlah file cookies.txt di dalam directory ~/TTMediaBot/config.

nano ~/TTMediaBot/config/cookies.txt

Isilah file tersebut dengan format cookie yang sesuai dengan Netscape HTTP, baru save

Ubah perizinan file untuk config.json dan cookies.txt ke 600 agar user lain tidak dapat melihat hal-hal penting pada config dan cookie kamu:

chmod 600 /home/music1/TTMediaBot/config/config.json
chmod 600 /home/music1/TTMediaBot/config/cookies.txt

Ketik exit untuk logout dari music1 dan kembali ke user sudo.


STEP 13 – START SERVICES

Kelola service bot dari akun admin utama menggunakan syntax --machine.

1. Start PulseAudio untuk user:

sudo systemctl [email protected] --user enable pulseaudio
sudo systemctl [email protected] --user start pulseaudio

2. Start TTMediaBot untuk user:

sudo systemctl [email protected] --user enable TTMediaBot
sudo systemctl [email protected] --user start TTMediaBot

3. Lihat log:

sudo journalctl [email protected] --user -u TTMediaBot -f

Note: Jika Kamu ingin membuat multi-bot, ulangi langkah 8 sampai 13. Jangan mengubah apa pun di /opt/TTMediaBot. Biarkan seperti itu, karena yang Kamu perlukan berikutnya dimulai dari Step 8, kecuali jika Kamu memang ingin update komponen.

Leave a Comment

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