Tutorial: Setup Telegram Bot Sederhana di Ubuntu 22.04

Pada tutorial ini, kita akan memandu Anda untuk menyiapkan bot Telegram yang dapat merespons perintah /cekserver dan /test-ping di Ubuntu 22.04. Skrip akan dijalankan sebagai daemon, sehingga bot dapat berjalan di latar belakang secara otomatis setiap kali server dinyalakan.

Langkah 1: Persiapkan Server Ubuntu 22.04

  • Login ke server Ubuntu 22.04 menggunakan SSH:
ssh user@your-server-ip
  • Perbarui sistem: Pastikan server Anda memiliki versi terbaru dari semua paket.
sudo apt update && sudo apt upgrade -y

Langkah 2: Install Dependensi

  • Install curl, sshpass, dan jq: Untuk menjalankan skrip dan mengambil data JSON dari Telegram API, Anda perlu menginstal beberapa paket:
sudo apt install curl sshpass jq -y
  • Install systemd (Jika belum terpasang, untuk menjalankan skrip sebagai daemon): systemd biasanya sudah terpasang di Ubuntu 22.04, jadi Anda tidak perlu menginstalnya lagi. Cek dengan perintah:
which systemctl

Langkah 3: Persiapkan Skrip

  • Buat Direktori untuk Skrip Bot: Buat sebuah direktori untuk menyimpan skrip bot Anda.
mkdir ~/telegram-bot
cd ~/telegram-bot

Simpan Skrip yang Telah Dibuat: Buat beberapa skrip yang diperlukan. Gunakan editor teks seperti nano atau vim untuk menyimpannya.

  • config-bot.sh (konfigurasi bot Telegram):
nano config-bot.sh

Paste kode berikut:

#!/bin/bash
TELEGRAM_BOT_TOKEN="your-telegram-bot-token"
TELEGRAM_CHAT_ID="your-telegram-chat-id"
  • command-cekserver.sh (perintah cekserver):
nano command-cekserver.sh

Paste kode berikut:

#!/bin/bash
send_telegram_message() {
    local message=$1
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d chat_id="${TELEGRAM_CHAT_ID}" \
        -d text="${message}" \
        -d parse_mode="Markdown"
}

get_vm_lxc_details() {
    local server_ip=$1
    local ssh_user=$2
    local ssh_pass=$3
    echo "Connecting to Proxmox server: $server_ip" > hasil.txt
    vms=$(sshpass -p "$ssh_pass" ssh -o StrictHostKeyChecking=no "$ssh_user@$server_ip" qm list | awk 'NR>1 {print $1}')
    echo "Checking VMs on $server_ip..." >> hasil.txt
    for vm in $vms; do
        vm_name=$(sshpass -p "$ssh_pass" ssh "$ssh_user@$server_ip" qm config $vm | grep -i 'name:' | awk '{print $2}')
        vm_ip=$(sshpass -p "$ssh_pass" ssh "$ssh_user@$server_ip" qm guest exec $vm -- ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n 1)
        echo "VM ID: $vm" >> hasil.txt
        echo "VM Name: $vm_name" >> hasil.txt
        echo "VM IP: $vm_ip" >> hasil.txt
        echo "---------------------------" >> hasil.txt
    done
    lxcs=$(sshpass -p "$ssh_pass" ssh "$ssh_user@$server_ip" pct list | awk 'NR>1 {print $1}')
    echo "Checking LXC containers on $server_ip..." >> hasil.txt
    for lxc in $lxcs; do
        lxc_name=$(sshpass -p "$ssh_pass" ssh "$ssh_user@$server_ip" pct config $lxc | grep -i 'hostname:' | awk '{print $2}')
        lxc_ip=$(sshpass -p "$ssh_pass" ssh "$ssh_user@$server_ip" pct exec $lxc -- ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n 1)
        echo "LXC ID: $lxc" >> hasil.txt
        echo "LXC Name: $lxc_name" >> hasil.txt
        echo "LXC IP: $lxc_ip" >> hasil.txt
        echo "---------------------------" >> hasil.txt
    done
}

handle_cekserver_command() {
    local command=$1
    local server_ip=$(echo $command | awk '{print $2}')
    local ssh_user=$(echo $command | awk '{print $3}')
    local ssh_pass=$(echo $command | awk '{print $4}')
    if [[ -n "$server_ip" && -n "$ssh_user" && -n "$ssh_pass" ]]; then
        get_vm_lxc_details "$server_ip" "$ssh_user" "$ssh_pass"
        send_telegram_message "$(cat hasil.txt)"
    else
        send_telegram_message "Invalid command format. Use: /cekserver <ip-proxmox> <user-ssh> <password-ssh>"
    fi
}
  • command-test-ping.sh (perintah test-ping):
nano command-test-ping.sh

Paste kode berikut:

#!/bin/bash
send_telegram_message() {
local message=$1
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="${message}" \
-d parse_mode="Markdown"
}

handle_test_ping_command() {
local command=$1
local ip=$(echo $command | awk '{print $2}')
if [[ -z "$ip" ]]; then
send_telegram_message "Invalid command format. Use: /test-ping <ip-address>"
return
fi
ping -c 1 "$ip" > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
send_telegram_message "Ping to $ip successful!"
else
send_telegram_message "Ping to $ip failed!"
fi
}
  • main.sh (skrip utama):
nano main.sh

Paste kode berikut:

#!/bin/bash
source ./config-bot.sh
source ./command-cekserver.sh
source ./command-test-ping.sh
last_update_id=0

while true; do
    updates=$(curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=${last_update_id}")
    update_ids=$(echo "$updates" | jq -r '.result[] | .update_id')
    for update_id in $update_ids; do
        command=$(echo "$updates" | jq -r --argjson id "$update_id" '.result[] | select(.update_id == $id) | .message.text')
        if [[ -n "$command" ]]; then
            if [[ "$command" =~ ^/cekserver\ .+ ]]; then
                handle_cekserver_command "$command"
            elif [[ "$command" =~ ^/test-ping\ .+ ]]; then
                handle_test_ping_command "$command"
            fi
        fi
        last_update_id=$((update_id + 1))
    done
    sleep 5
done
  • Berikan izin eksekusi: Berikan izin eksekusi untuk semua skrip:
chmod +x *.sh

Langkah 4: Buat Service Systemd untuk Menjalankan Skrip Sebagai Daemon

  • Buat file service systemd: Buat file baru di direktori /etc/systemd/system/telegram-bot.service:
sudo nano /etc/systemd/system/telegram-bot.service

Isi dengan konfigurasi berikut:

[Unit]
Description=Telegram Bot Service
After=network.target

[Service]
ExecStart=/bin/bash /home/your-username/telegram-bot/main.sh
WorkingDirectory=/home/your-username/telegram-bot
Restart=always
User=your-username
Group=your-username

[Install]
WantedBy=multi-user.target

Gantilah your-username dengan nama pengguna Anda di server Ubuntu.

  • Reload systemd, enable, dan start service: Jalankan perintah berikut untuk memuat ulang konfigurasi systemd, mengaktifkan service agar dijalankan secara otomatis saat boot, dan memulai service:
sudo systemctl daemon-reload
sudo systemctl enable telegram-bot.service
sudo systemctl start telegram-bot.service
  • Cek status service: Anda dapat memeriksa status bot dengan perintah:
sudo systemctl status telegram-bot.service

Langkah 5: Verifikasi

  • Tes bot: Kirim perintah /cekserver atau /test-ping ke bot Telegram Anda, dan pastikan bot merespons dengan benar.
  • Reboot dan pastikan bot berjalan otomatis: Anda dapat me-reboot server dan memastikan bot otomatis berjalan dengan perintah:
sudo reboot
  • Cek service setelah reboot: Setelah server reboot, pastikan bot berjalan dengan perintah:
sudo systemctl status telegram-bot.service

Kesimpulan

Dengan mengikuti tutorial ini, Anda telah berhasil menyiapkan bot Telegram yang dapat merespons perintah /cekserver dan /test-ping pada server Ubuntu 22.04 Anda. Bot ini akan berjalan sebagai daemon menggunakan systemd, yang memastikan bot akan tetap berjalan di latar belakang bahkan setelah server di-reboot.

Leave a Reply

Your email address will not be published. Required fields are marked *