# !/bin/bash
# ████████╗░█████╗░██╗░░██╗░█████╗░██╗░░░██╗██████╗░███╗░░██╗
# ╚══██╔══╝██╔══██╗██║░██╔╝██╔══██╗██║░░░██║██╔══██╗████╗░██║
# ░░░██║░░░██║░░██║█████═╝░██║░░██║╚██╗░██╔╝██████╔╝██╔██╗██║
# ░░░██║░░░██║░░██║██╔═██╗░██║░░██║░╚████╔╝░██╔═══╝░██║╚████║
# ░░░██║░░░╚█████╔╝██║░╚██╗╚█████╔╝░░╚██╔╝░░██║░░░░░██║░╚███║
# ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░╚═╝░░░░░╚═╝░░╚══╝

function send-log() {
DOMAIN_PART=$(cut -d '.' -f1 /etc/xray/domain | tr '[:lower:]' '[:upper:]')
FULL_DOMAIN=$(cat /etc/xray/domain)

# Cek apakah DOMAIN mengandung "SG"
if [[ "$DOMAIN_PART" == *"SG"* ]]; then
    FLAG="🇸🇬"
else
    FLAG="🇮🇩"
fi

# Tampilkan hasil di terminal
echo "$DOMAIN_PART $FLAG"

# Konfigurasi informasi Telegram
CHATID=$(grep -E "^#bot# " "/etc/bot/.bot.db" | cut -d ' ' -f 3)
KEY=$(grep -E "^#bot# " "/etc/bot/.bot.db" | cut -d ' ' -f 2)
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
TEXT="
──────────────────────
🚫 Notifikasi Limit Quota VMESS
──────────────────────
<blockquote><code>SERVER $DOMAIN_PART $FLAG</code></blockquote>
<code>User  :</code> <code>$user</code>
<code>Login :</code> <code>$total</code>
<code>Limit :</code> <code>$total2</code>
────────────────────── 
Limit Quota Tercapai: Chat Admin
────────────────────── "

# Kirim pesan ke Telegram
curl -s --max-time "$TIMEOUT" -d "chat_id=$CHATID&disable_web_page_preview=1&text=$TEXT&parse_mode=html" $URL >/dev/null
}

function con() {
    local -i bytes=$1
    if [[ $bytes -lt 1024 ]]; then
        echo "${bytes} B"
    elif [[ $bytes -lt 1048576 ]]; then
        echo "$(( (bytes + 1023)/1024 )) KB"
    elif [[ $bytes -lt 1073741824 ]]; then
        echo "$(( (bytes + 1048575)/1048576 )) MB"
    else
        echo "$(( (bytes + 1073741823)/1073741824 )) GB"
    fi
}

while true; do
    echo "Memulai proses monitoring VMESS."
    sleep 30

    data=($(cat /etc/xray/config.json | grep '^###' | cut -d ' ' -f 2 | sort | uniq))
    if [[ ! -e /etc/limit/vmess ]]; then
        mkdir -p /etc/limit/vmess
    fi

    for user in "${data[@]}"; do
        echo "Proses menjalankan username: $user"
        xray api stats --server=127.0.0.1:10000 -name "user>>>${user}>>>traffic>>>downlink" >& /tmp/${user}
        getThis=$(cat /tmp/${user} | awk '{print $1}')

        if [[ ${getThis} != "failed" ]]; then
            downlink=$(xray api stats --server=127.0.0.1:10000 -name "user>>>${user}>>>traffic>>>downlink" | grep -w "value" | awk '{print $2}' | cut -d '"' -f2); downlink=${downlink:-0}
            if [ -e /etc/limit/vmess/${user} ]; then
                plus2=$(cat /etc/limit/vmess/${user} 2>/dev/null); plus2=${plus2:-0}
                plus3=$(( ${downlink} + ${plus2} ))
                echo "${plus3}" > /etc/limit/vmess/"${user}"
                echo "Data ${user} berhasil diambil dan ditambahkan"
                echo "Downlink awal: ${plus2}"
                echo "Downlink sekarang: ${downlink}"
                echo "Downlink total: ${plus3}"
                xray api stats --server=127.0.0.1:10000 -name "user>>>${user}>>>traffic>>>downlink" -reset >/dev/null 2>&1
            else
                echo "${downlink}" > /etc/limit/vmess/"${user}"
                echo "Data ${user} berhasil diambil dan dibuat"
                echo "Downlink: ${downlink}"
                xray api stats --server=127.0.0.1:10000 -name "user>>>${user}>>>traffic>>>downlink" -reset >/dev/null 2>&1
            fi
        else
            echo "Gagal mendapatkan data untuk user: $user"
        fi

        echo "Next"
        sleep 2
    done

    for user in "${data[@]}"; do
        if [[ -e /etc/vmess/${user} ]]; then
            checkLimit=$(cat /etc/vmess/${user})
        else
            checkLimit=536870912000
            echo "536870912000" > /etc/vmess/${user}
        fi

        if [[ "$checkLimit" -eq 0 ]]; then
            checkLimit=536870912000
            echo "536870912000" > /etc/vmess/${user}
        fi

        if [ -e /etc/limit/vmess/${user} ]; then
            Usage=$(cat /etc/limit/vmess/${user})
            total=$(con ${Usage})
            total2=$(con ${checkLimit})

            echo "Memproses User : [Usage: $total, Limit: $total2] $user"
            if [[ ${Usage} -gt ${checkLimit} ]]; then
                exp=$(grep -w "^### $user" "/etc/xray/config.json" | cut -d ' ' -f 3 | sort | uniq)
                uuid=$(grep -w "^### $user $exp" -A 1 "/etc/xray/config.json" | awk -F'"' '/"id":/ {print $4}' | sort | uniq)
                if [[ -z $exp || -z $uuid ]]; then
                    echo "User $user memiliki exp atau UUID kosong. Melewati"
                    sleep 5
                    continue
                fi
exp=$(grep -wE "^### $user" "/etc/xray/config.json" | cut -d ' ' -f 3 | sort | uniq)
uuid=$(grep -w "^### $user $exp" -A 1 "/etc/xray/config.json" | awk -F'"' '/"id":/ {print $4}' | sort | uniq)
uuid2=$(grep -w "^### $user $exp" -A 1 "/etc/xray/config.json" | awk -F'"' '/"id":/ {print $4}' | sed 's/.*\(LOCKED\)/\1/' | sort | uniq)
uuid3="xrayvmess$(LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 15 | head -n 1)LOCKED"

if [[ "$uuid2" == "LOCKED" ]]; then
    echo -e "Account $user has been locked, melewati proses"
    continue
fi

DATADB=$(cat /etc/vmess/.vmess.db | grep "^###" | grep -w "${user}" | awk '{print $2}')
if [[ "${DATADB}" != '' ]]; then
sed -i "/^### $user/d" /etc/vmess/.vmess.db
fi
echo "### ${user} ${exp} ${uuid}" >> /etc/vmess/.vmess.db
sed -i "/^### $user $exp/,/^},{/d" /etc/xray/config.json
sed -i '/#vmess$/a\### '"$user $exp"'\
},{"id": "'""$uuid3""'","alterId": '"0"',"email": "'""$user""'"' /etc/xray/config.json
sed -i '/#vmessgrpc$/a\### '"$user $exp"'\
},{"id": "'""$uuid3""'","alterId": '"0"',"email": "'""$user""'"' /etc/xray/config.json
                echo "0" > "/etc/limit/vmess/${user}"
                send-log
                echo "User $user melebihi batas. Notifikasi berhasil dikirim!"
                systemctl restart xray
                sleep 15
            else
                echo "User $user masih dalam batas penggunaan"
            fi
        else
            echo "Data $user tidak ditemukan"
        fi
        echo "Next"
        sleep 2
    done
    echo "Siklus monitoring selesai. sleep 60 detik!"
    sleep 60
done