• Membuat Menu Panel ZIVPN

    Cara Instalasi Pada Server atau VPS :
    1.Buka editor nano dengan perintah :
    sudo nano /usr/local/bin/zivpanel
    2.Salin dan tempel seluruh script kedalam nano.
    3.Berikan izin eksekusi dengan perintah :
    sudo chmod +x /usr/local/bin/zivpanel
    4.Jalankan panel dengan perintah :
    zivpanel
    Script Panel
    #!/bin/bash
    
    # --- VARIABEL KONFIGURASI ---
    MANUAL_DIR="/root/zivpn_manual"
    MANUAL_ACCOUNTS_FILE="$MANUAL_DIR/manual_accounts.txt"
    
    # Buat direktori jika belum ada
    mkdir -p "$MANUAL_DIR"
    
    # --- VARIABEL WARNA ---
    RESET="\033[0m"
    BLACK="\033[0;30m"
    RED="\033[0;31m"
    GREEN="\033[0;32m"
    YELLOW="\033[0;33m"
    BLUE="\033[0;34m"
    PURPLE="\033[0;35m"
    CYAN="\033[0;36m"
    WHITE="\033[0;37m"
    
    # --- WARNA TERANG ---
    LIGHT_CYAN="\033[1;36m"
    LIGHT_GREEN="\033[1;32m"
    LIGHT_YELLOW="\033[1;33m"
    LIGHT_PURPLE="\033[1;35m"
    LIGHT_GRAY="\033[0;37m" # Sama dengan WHITE untuk opsi
    
    # --- FUNGSI-FUNGSI ---
    
    # Fungsi untuk mengambil informasi sistem (IP, CPU, RAM)
    get_system_info() {
        # Dapatkan IP Publik VPS
        VPS_IP=$(curl -s --connect-timeout 3 ifconfig.me)
        if [ -z "$VPS_IP" ]; then
            VPS_IP="N/A"
        fi
    
        # Dapatkan Penggunaan CPU
        CPU_USAGE_RAW=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
        CPU_USAGE=$(printf "%.1f" "$CPU_USAGE_RAW")
    
        # Dapatkan Penggunaan RAM
        RAM_USAGE=$(free -m | awk 'NR==2{printf "%.1f%%", $3*100/$2}')
    }
    
    # Fungsi untuk membersihkan layar dan menampilkan menu utama
    tampilkan_menu() {
        clear
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_CYAN}        ZIVPN Management Panel${RESET}"
        echo -e "${LIGHT_GRAY}       Dekeng Ane Biak Belitong${RESET}" # Subtitle baru
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_PURPLE}IP VPS: ${RESET}${YELLOW}$VPS_IP${RESET} | ${LIGHT_PURPLE}CPU: ${RESET}${GREEN}$CPU_USAGE%${RESET} | ${LIGHT_PURPLE}RAM: ${RESET}${GREEN}$RAM_USAGE${RESET}"
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_GRAY}1. Tambah Akun${RESET}"                     # Teks diperbarui
        echo -e "${LIGHT_GRAY}2. Hapus Akun${RESET}"                     # Teks diperbarui
        echo -e "${LIGHT_GRAY}3. List Akun${RESET}"                      # Teks diperbarui
        echo -e "${LIGHT_GRAY}4. Kelola Akun Manual${RESET}"
        echo -e "${CYAN}--------------------------------------------${RESET}"
        echo -e "${LIGHT_GRAY}5. Download Script${RESET}"                # Teks diperbarui
        echo -e "${LIGHT_GRAY}6. Install Script${RESET}"                 # Teks diperbarui
        echo -e "${LIGHT_GRAY}7. Speedtest & Monitor${RESET}"
        echo -e "${LIGHT_GRAY}8. Info VPS${RESET}"
        echo -e "${CYAN}--------------------------------------------${RESET}"
        echo -e "${LIGHT_GRAY}0. Keluar${RESET}"
        echo -e "${CYAN}============================================${RESET}"
    }
    
    # Fungsi untuk menampilkan menu kelola akun manual
    tampilkan_menu_manual() {
        clear
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_CYAN}     Kelola Akun Manual (Catatan Pribadi)${RESET}"
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_GRAY}1. Tambah Akun Manual${RESET}"
        echo -e "${LIGHT_GRAY}2. Hapus Akun Manual${RESET}"
        echo -e "${LIGHT_GRAY}3. Lihat Daftar Akun Manual${RESET}"
        echo -e "${LIGHT_GRAY}4. Perpanjang Akun Manual${RESET}"
        echo -e "${LIGHT_GRAY}0. Kembali ke Menu Utama${RESET}"
        echo -e "${CYAN}============================================${RESET}"
    }
    
    # Fungsi untuk menampilkan menu monitor
    tampilkan_menu_monitor() {
        clear
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_CYAN}        Speedtest & Monitor${RESET}"
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_GRAY}1. Speedtest (Ookla)${RESET}"
        echo -e "${LIGHT_GRAY}2. Monitor Traffic (vnstat)${RESET}"
        echo -e "${LIGHT_GRAY}0. Kembali ke Menu Utama${RESET}"
        echo -e "${CYAN}============================================${RESET}"
    }
    
    # Fungsi untuk menampilkan menu vnstat
    tampilkan_menu_vnstat() {
        clear
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_CYAN}        Monitor Traffic (vnstat)${RESET}"
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_GRAY}1. Traffic Per Jam${RESET}"
        echo -e "${LIGHT_GRAY}2. Traffic Per Hari${RESET}"
        echo -e "${LIGHT_GRAY}3. Traffic Per Bulan${RESET}"
        echo -e "${LIGHT_GRAY}4. Traffic Per Tahun${RESET}"
        echo -e "${LIGHT_GRAY}5. Top 10 Hari (Penggunaan Tertinggi)${RESET}"
        echo -e "${LIGHT_GRAY}0. Kembali${RESET}"
        echo -e "${CYAN}============================================${RESET}"
    }
    
    # Fungsi untuk menampilkan menu info VPS
    tampilkan_menu_info_vps() {
        clear
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_CYAN}        Informasi VPS${RESET}"
        echo -e "${CYAN}============================================${RESET}"
        echo -e "${LIGHT_GRAY}1. System Resource (htop)${RESET}"
        echo -e "${LIGHT_GRAY}2. System Overview (neofetch)${RESET}"
        echo -e "${LIGHT_GRAY}3. Disk Usage${RESET}"
        echo -e "${LIGHT_GRAY}4. Memory Usage${RESET}"
        echo -e "${LIGHT_GRAY}5. System Info (uname)${RESET}"
        echo -e "${LIGHT_GRAY}0. Kembali ke Menu Utama${RESET}"
        echo -e "${CYAN}============================================${RESET}"
    }
    
    
    # --- FUNGSI-FUNGSI AKUN MANUAL ---
    
    # Fungsi untuk menghitung sisa hari
    hitung_sisa_hari() {
        local expiry_date=$1 # Format: YYYY-MM-DD
        local today=$(date +%Y-%m-%d)
        
        local sisa_detik=$(( ($(date -d "$expiry_date" +%s) - $(date -d "$today" +%s)) ))
        local sisa_hari=$((sisa_detik / 86400))
    
        if [ "$sisa_hari" -lt 0 ]; then
            echo -e "${RED}EXPIRED${RESET}"
        else
            echo "$sisa_hari"
        fi
    }
    
    tambah_akun_manual() {
        echo -e "${LIGHT_CYAN}--- Tambah Akun Manual Baru ---${RESET}"
        read -p "Masukkan Username: " username
        read -p "Masukkan masa aktif (dalam hari): " jumlah_hari
    
        if ! [[ "$jumlah_hari" =~ ^[0-9]+$ ]]; then
            echo -e "${RED}❌ Input tidak valid. Harap masukkan angka.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
    
        local expiry_date=$(date -d "$jumlah_hari days" +%Y-%m-%d)
        echo "$username:$expiry_date" >> "$MANUAL_ACCOUNTS_FILE"
        echo ""
        echo -e "${GREEN}✅ Akun '$username' berhasil ditambahkan. Expired: $(date -d "$expiry_date" +%d-%m-%Y)${RESET}"
        read -p "Tekan Enter untuk kembali..."
    }
    
    hapus_akun_manual() {
        if [ ! -s "$MANUAL_ACCOUNTS_FILE" ]; then
            echo -e "${YELLOW}Belum ada akun manual yang terdaftar.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
        
        echo -e "${LIGHT_CYAN}--- Hapus Akun Manual ---${RESET}"
        tampilkan_list_manual
        echo ""
        read -p "Masukkan Username yang ingin dihapus: " username_to_delete
    
        if ! grep -q "^$username_to_delete:" "$MANUAL_ACCOUNTS_FILE"; then
            echo -e "${RED}❌ Akun dengan username '$username_to_delete' tidak ditemukan.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
    
        sed -i "/^$username_to_delete:/d" "$MANUAL_ACCOUNTS_FILE"
        
        if grep -q "^$username_to_delete:" "$MANUAL_ACCOUNTS_FILE"; then
            echo -e "${RED}❌ Gagal menghapus akun '$username_to_delete'. Silakan coba lagi.${RESET}"
        else
            echo ""
            echo -e "${GREEN}✅ Akun '$username_to_delete' berhasil dihapus.${RESET}"
        fi
        read -p "Tekan Enter untuk kembali..."
    }
    
    tampilkan_list_manual() {
        echo -e "${LIGHT_CYAN}--- Daftar Akun Manual ---${RESET}"
        if [ ! -s "$MANUAL_ACCOUNTS_FILE" ]; then
            echo -e "${YELLOW}Belum ada akun manual yang terdaftar.${RESET}"
            return
        fi
    
        printf "%-15s | %-12s | %-10s\n" "Username" "Expired" "Sisa Hari"
        echo -e "${CYAN}---------------------------------------------${RESET}"
    
        while IFS=: read -r username expiry_date; do
            sisa_hari=$(hitung_sisa_hari "$expiry_date")
            formatted_date=$(date -d "$expiry_date" +%d-%m-%Y)
            printf "%-15s | %-12s | %-10s\n" "$username" "$formatted_date" "$sisa_hari"
        done < "$MANUAL_ACCOUNTS_FILE"
    }
    
    renew_akun_manual() {
        if [ ! -s "$MANUAL_ACCOUNTS_FILE" ]; then
            echo -e "${YELLOW}Belum ada akun manual yang terdaftar.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
    
        echo -e "${LIGHT_CYAN}--- Perpanjang Akun Manual ---${RESET}"
        tampilkan_list_manual
        echo ""
        read -p "Masukkan Username yang ingin diperpanjang: " username_to_renew
    
        local old_expiry=$(grep "^$username_to_renew:" "$MANUAL_ACCOUNTS_FILE" | cut -d':' -f2)
        
        if [ -z "$old_expiry" ]; then
            echo -e "${RED}❌ Akun dengan username '$username_to_renew' tidak ditemukan.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
    
        read -p "Masukkan jumlah hari perpanjangan: " jumlah_hari
    
        if ! [[ "$jumlah_hari" =~ ^[0-9]+$ ]]; then
            echo -e "${RED}❌ Input tidak valid. Harap masukkan angka.${RESET}"
            read -p "Tekan Enter untuk kembali..."
            return
        fi
    
        local new_expiry=$(date -d "$old_expiry + $jumlah_hari days" +%Y-%m-%d)
        sed -i "s|^$username_to_renew:.*|$username_to_renew:$new_expiry|" "$MANUAL_ACCOUNTS_FILE"
        
        echo ""
        echo -e "${GREEN}✅ Akun '$username_to_renew' berhasil diperpanjang.${RESET}"
        echo -e "   Expired baru: $(date -d "$new_expiry" +%d-%m-%Y)"
        read -p "Tekan Enter untuk kembali..."
    }
    
    kelola_akun_manual() {
        while true
        do
            tampilkan_menu_manual
            read -p "Pilih menu [0-4]: " pilihan_manual
    
            case $pilihan_manual in
                1) echo ""; tambah_akun_manual ;;
                2) echo ""; hapus_akun_manual ;;
                3) echo ""; tampilkan_list_manual; echo ""; read -p "Tekan Enter untuk kembali..." ;;
                4) echo ""; renew_akun_manual ;;
                0) break ;;
                *) echo -e "${RED}Pilihan tidak valid! Silakan pilih 0-4.${RESET}"; read -p "Tekan Enter untuk melanjutkan..." ;;
            esac
        done
    }
    
    # --- FUNGSI-FUNGSI FITUR BARU ---
    
    menu_monitor() {
        while true
        do
            tampilkan_menu_monitor
            read -p "Pilih menu [0-2]: " pilihan_monitor
    
            case $pilihan_monitor in
                1)
                    echo ""
                    # PERUBAHAN: Memeriksa perintah 'speedtest' (Ookla)
                    if ! command -v speedtest &> /dev/null; then
                        echo -e "${RED}❌ 'speedtest' (Ookla) tidak ditemukan.${RESET}"
                        echo -e "${YELLOW}Silakan install terlebih dahulu:${RESET}"
                        echo -e "${CYAN}  wget https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz${RESET}"
                        echo -e "${CYAN}  tar -xvf ookla-speedtest-1.2.0-linux-x86_64.tgz${RESET}"
                        echo -e "${CYAN}  sudo mv speedtest /usr/local/bin/${RESET}"
                        echo -e "${CYAN}  sudo chmod +x /usr/local/bin/speedtest${RESET}"
                    else
                        echo -e "${LIGHT_CYAN}Menjalankan Speedtest...${RESET}"
                        # PERUBAHAN: Menjalankan perintah 'speedtest'
                        speedtest
                    fi
                    read -p "Tekan Enter untuk kembali..."
                    ;;
                2)
                    menu_vnstat
                    ;;
                0)
                    break
                    ;;
                *)
                    echo -e "${RED}Pilihan tidak valid! Silakan pilih 0-2.${RESET}"
                    read -p "Tekan Enter untuk melanjutkan..."
                    ;;
            esac
        done
    }
    
    menu_vnstat() {
        while true
        do
            tampilkan_menu_vnstat
            read -p "Pilih menu [0-5]: " pilihan_vnstat
    
            case $pilihan_vnstat in
                1) echo ""; echo -e "${LIGHT_CYAN}--- Traffic Per Jam ---${RESET}"; vnstat -h; read -p "Tekan Enter untuk kembali..." ;;
                2) echo ""; echo -e "${LIGHT_CYAN}--- Traffic Per Hari ---${RESET}"; vnstat -d; read -p "Tekan Enter untuk kembali..." ;;
                3) echo ""; echo -e "${LIGHT_CYAN}--- Traffic Per Bulan ---${RESET}"; vnstat -m; read -p "Tekan Enter untuk kembali..." ;;
                4) echo ""; echo -e "${LIGHT_CYAN}--- Traffic Per Tahun ---${RESET}"; vnstat -y; read -p "Tekan Enter untuk kembali..." ;;
                5) echo ""; echo -e "${LIGHT_CYAN}--- Top 10 Hari ---${RESET}"; vnstat -t; read -p "Tekan Enter untuk kembali..." ;;
                0) break ;;
                *) echo -e "${RED}Pilihan tidak valid! Silakan pilih 0-5.${RESET}"; read -p "Tekan Enter untuk melanjutkan..." ;;
            esac
        done
    }
    
    menu_info_vps() {
        while true
        do
            tampilkan_menu_info_vps
            read -p "Pilih menu [0-5]: " pilihan_info
    
            case $pilihan_info in
                1)
                    echo ""
                    echo -e "${LIGHT_CYAN}Menjalankan htop... (tekan 'q' untuk keluar)${RESET}"
                    htop
                    ;;
                2)
                    echo ""
                    if ! command -v neofetch &> /dev/null; then
                        echo -e "${RED}❌ 'neofetch' tidak ditemukan.${RESET}"
                        echo -e "${YELLOW}Silakan install terlebih dahulu:${RESET}"
                        echo -e "${CYAN}  Ubuntu/Debian: apt install neofetch${RESET}"
                        echo -e "${CYAN}  CentOS/RHEL:   yum install neofetch${RESET}"
                    else
                        neofetch
                    fi
                    read -p "Tekan Enter untuk kembali..."
                    ;;
                3) echo ""; echo -e "${LIGHT_CYAN}--- Disk Usage ---${RESET}"; df -h; read -p "Tekan Enter untuk kembali..." ;;
                4) echo ""; echo -e "${LIGHT_CYAN}--- Memory Usage ---${RESET}"; free -h; read -p "Tekan Enter untuk kembali..." ;;
                5) echo ""; echo -e "${LIGHT_CYAN}--- System Info ---${RESET}"; uname -a; read -p "Tekan Enter untuk kembali..." ;;
                0) break ;;
                *) echo -e "${RED}Pilihan tidak valid! Silakan pilih 0-5.${RESET}"; read -p "Tekan Enter untuk melanjutkan..." ;;
            esac
        done
    }
    
    
    # --- PROGRAM UTAMA ---
    
    while true
    do
        # Ambil data sistem terbaru sebelum menampilkan menu
        get_system_info
    
        # Tampilkan menu yang sudah termasuk info sistem
        tampilkan_menu
        
        read -p "Pilih menu [0-8]: " pilihan
    
        case $pilihan in
            1) echo ""; echo -e "${LIGHT_CYAN}Sedang memproses penambahan akun...${RESET}"; bash <(wget -qO- https://raw.githubusercontent.com/potatonc/zivpn-udp/refs/heads/main/zi.sh) add; echo ""; read -p "Tekan Enter untuk kembali ke menu..." ;;
            2) echo ""; echo -e "${LIGHT_CYAN}Sedang memproses penghapusan akun...${RESET}"; bash <(wget -qO- https://raw.githubusercontent.com/potatonc/zivpn-udp/refs/heads/main/zi.sh) del; echo ""; read -p "Tekan Enter untuk kembali ke menu..." ;;
            3) echo ""; echo -e "${LIGHT_CYAN}Menampilkan daftar akun...${RESET}"; bash <(wget -qO- https://raw.githubusercontent.com/potatonc/zivpn-udp/refs/heads/main/zi.sh) list; echo ""; read -p "Tekan Enter untuk kembali ke menu..." ;;
            4) kelola_akun_manual ;;
            5)
                echo ""
                echo -e "${LIGHT_CYAN}Mendownload script ZIVPN...${RESET}"
                wget https://raw.githubusercontent.com/potatonc/zivpn-udp/refs/heads/main/zi.sh -O zi.sh
                echo -e "${LIGHT_CYAN}Mengubah permission script...${RESET}"
                chmod +x zi.sh
                echo -e "${LIGHT_CYAN}Menampilkan bantuan script...${RESET}"
                ./zi.sh help
                echo ""
                echo -e "${GREEN}✅ Script berhasil didownload. Anda bisa menjalankannya dengan ./zi.sh${RESET}"
                read -p "Tekan Enter untuk kembali..."
                ;;
            6)
                echo ""
                echo -e "${LIGHT_CYAN}Memulai instalasi ZIVPN...${RESET}"
                bash <(wget -qO- https://raw.githubusercontent.com/potatonc/zivpn-udp/refs/heads/main/zi.sh) install
                echo ""
                echo -e "${GREEN}✅ Proses instalasi selesai.${RESET}"
                read -p "Tekan Enter untuk kembali..."
                ;;
            7)
                menu_monitor
                ;;
            8)
                menu_info_vps
                ;;
            0) echo -e "${LIGHT_GREEN}Terima kasih, sampai jumpa!${RESET}"; exit 0 ;;
            *) echo -e "${RED}Pilihan tidak valid! Silakan pilih 0-8.${RESET}"; read -p "Tekan Enter untuk melanjutkan..." ;;
        esac
    done
  • My Profile In Youtube

    ADDRESS

    Jalan Raya Badau Km.11 Rt.06/02 Tanjung Pandan Belitung 33451

    EMAIL

    purwana.cecep@gmail.com
    uraxarixteamxxx@gmail.com

    Telephone

    +628197887769