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
, danjq
: 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.