#!/bin/bash
clear
ipsaya=$(wget -qO- ipinfo.io/ip)
data_server=$(curl -v --insecure --silent https://google.com/ 2>&1 | grep Date | sed -e 's/< Date: //')
date_list=$(date +"%Y-%m-%d" -d "$data_server")
data_ip="https://raw.githubusercontent.com/RozTun/permission/main/ip"
ISP=$(cat /etc/xray/isp)
CITY=$(cat /etc/xray/city)
domain=$(cat /etc/xray/domain)
checking_sc() {
  useexp=$(wget -qO- $data_ip | grep $ipsaya | awk '{print $3}')
  if [[ $date_list < $useexp ]]; then
    echo -ne
  else
    echo -e "${OR}────────────────────────────────────────────${NC}"
    echo -e "\033[42m          HUNTERTUNNEL AUTOSCRIPT          ${NC}"
    echo -e "${OR}────────────────────────────────────────────${NC}"
    echo -e ""
    echo -e "            ${RED}PERMISSION DENIED !${NC}"
    echo -e "   \033[0;33mYour VPS${NC} $ipsaya \033[0;33mHas been Banned${NC}"
    echo -e "     \033[0;33mBuy access permissions for scripts${NC}"
    echo -e "             \033[0;33mContact Admin :${NC}"
    echo -e "      ${Green}WhatsApp${NC} wa.me/6285759375937"
    echo -e "         \033[0;36mTelegram${NC} t.me/RozTun"
    echo -e "${OR}────────────────────────────────────────────${NC}"
    exit
  fi
}
checking_sc
clear

# Variables
green="\e[38;5;82m"
red="\e[38;5;196m"
neutral="\e[0m"
orange="\e[38;5;130m"
blue="\e[38;5;39m"
yellow="\e[38;5;226m"
purple="\e[38;5;141m"
bold_white="\e[1;37m"
reset="\e[0m"
g="\033[1;93m"
gb="\e[92;1m"
b="\033[0;36m"
p="\033[0m"
r="\033[0;31m"
y="\033[0;33m"

# Function to print rainbow text
        print_rainbow() {
            local text="$1"
            local length=${#text}
            local start_color=(0 5 0)
            local mid_color=(0 200 0)
            local end_color=(0 5 0)

            for ((i = 0; i < length; i++)); do
                local progress=$((i * 100 / (length - 1)))

                if [ $progress -lt 50 ]; then
                    local factor=$((progress * 2))
                    r=$(( (start_color[0] * (100 - factor) + mid_color[0] * factor) / 100 ))
                    g=$(( (start_color[1] * (100 - factor) + mid_color[1] * factor) / 100 ))
                    b=$(( (start_color[2] * (100 - factor) + mid_color[2] * factor) / 100 ))
                else
                    local factor=$(((progress - 50) * 2))
                    r=$(( (mid_color[0] * (100 - factor) + end_color[0] * factor) / 100 ))
                    g=$(( (mid_color[1] * (100 - factor) + end_color[1] * factor) / 100 ))
                    b=$(( (mid_color[2] * (100 - factor) + end_color[2] * factor) / 100 ))
                fi

                printf "\e[38;2;%d;%d;%dm%s" "$r" "$g" "$b" "${text:$i:1}"
            done
            echo -e "$reset" # Reset color at the end
        }
        
        


print_rainbo() {
    local text="$1"
    local length=${#text}
    local start_color=(255 255 0) # yellow
    local mid_color=(0 255 0)     # green
    local end_color=(255 255 0)   # yellow

    for ((i = 0; i < length; i++)); do
        local progress=$((i * 100 / (length - 1)))

        if [ $progress -lt 50 ]; then
            local factor=$((progress * 2))
            r=$((start_color[0] * (100 - factor) / 100 + mid_color[0] * factor / 100))
            g=$((start_color[1] * (100 - factor) / 100 + mid_color[1] * factor / 100))
            b=$((start_color[2] * (100 - factor) / 100 + mid_color[2] * factor / 100))
        else
            local factor=$(((progress - 50) * 2))
            r=$((mid_color[0] * (100 - factor) / 100 + end_color[0] * factor / 100))
            g=$((mid_color[1] * (100 - factor) / 100 + end_color[1] * factor / 100))
            b=$((mid_color[2] * (100 - factor) / 100 + end_color[2] * factor / 100))
        fi

        printf "\e[38;2;%d;%d;%dm%s" "$r" "$g" "$b" "${text:$i:1}"
    done
    echo -e "$reset"
}
        
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
}


# function to convert bytes to a more readable format
convert_size() {
    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
}

checkvmess() {
echo ""
    echo -ne "\e[33mChecking Vmess Account\e[0m"
    for i in {1..2}; do
        for j in ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏; do
            echo -ne "\r\e[33mChecking Vmess Account $j\e[0m"
            sleep 0.1
        done
    done
    echo -ne "\r\e[33mVmess Account Check Successful!    \e[0m\n"
    sleep 1
    clear
    
g="\033[1;93m"
gb="\e[92;1m"
b="\033[0;36m"
p="\033[0m"
r="\033[0;31m"
y="\033[0;33m"

# Fungsi untuk menampilkan garis atas
function line_atas() {
  echo -e " ${orange}┌──────────────────────────────────────────┐${p}"
}

# Fungsi untuk menampilkan garis bawah
function line_bawah() {
  echo -e " ${orange}└──────────────────────────────────────────┘${p}"
}

# Fungsi untuk menampilkan garis tengah
function line_tengah() {
  echo -e "   ${orange}────────────────────────────────────────${p}"
}

# Mengecek dan membuat direktori jika belum ada
    echo ""
    # Direktori untuk IP limit dan kuota akun VMess
    dir="/etc/biji/limit/vmess/ip"
    dir1="/etc/limit/vmess"
    [[ ! -d "$dir" ]] && mkdir -p "$dir"
    [[ ! -d "$dir1" ]] && mkdir -p "$dir1"

    # Mendapatkan daftar akun VMess dari config.json
    data5=( $(grep '###' /etc/xray/config.json | cut -d ' ' -f 2 | sort -u) )

    for akun in "${data5[@]}"; do
        [[ ! -e /etc/biji/limit/vmess/ip/$akun ]] && echo "2" > /etc/biji/limit/vmess/ip/$akun
        [[ ! -e /etc/vmess/$akun ]] && echo "107374182400" > /etc/vmess/$akun
        [[ ! -e /etc/limit/vmess/$akun ]] && echo "0" > /etc/limit/vmess/$akun
    done >/dev/null 2>&1

    clear
    # Membersihkan file sementara
    > /tmp/other.txt
    > /tmp/ipvmess.txt

    # Mendapatkan daftar akun VMess dari file config.json
    data=( $(cat /etc/xray/config.json | grep '###' | cut -d ' ' -f 2 | sort | uniq) )

    # Menampilkan banner
    line_atas
    echo -e " ${green}      Check Login Xray/Vmess Account            ${p}"
    line_bawah
    line_atas
    echo -e " ${green}    Username      ${orange}|${green}  Quota  ${orange}|${green}  IP Address${p}"
    line_tengah

    for akun in "${data[@]}"; do
        if [[ -z "$akun" ]]; then
            akun="tidakada"
        fi
        echo -n > /tmp/ipvmess.txt
        data2=( `cat /var/log/xray/access.log | tail -n 500 | awk -F "from " '{print $2}' | grep email | grep "accepted tcp" | cut -d: -f1| cut -d[ -f2 | sort | uniq`);
        for ip in "${data2[@]}"; do
            jum=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | awk -F "from " '{print $2}'| sed 's/tcp://g' | cut -d ":" -f 1 | grep -w "$ip" | sort | uniq)
            if [[ "$jum" = "$ip" ]]; then
                echo "$jum" >> /tmp/ipvmess.txt
            else
                echo "$ip" >> /tmp/other.txt
            fi
            jum2=$(cat /tmp/ipvmess.txt)
            sed -i "/$jum2/d" /tmp/other.txt > /dev/null 2>&1
        done
        jum=$(cat /tmp/ipvmess.txt)
        if [[ -z "$jum" ]]; then
            echo > /dev/null
        else
            iplimit=$(cat /etc/biji/limit/vmess/ip/${akun})
            jum2=$(cat /tmp/ipvmess.txt | wc -l)
            byte=$(cat /etc/vmess/${akun})
            lim=$(con ${byte})
            wey=$(cat /etc/limit/vmess/${akun})

            # Jika kuota maksimum adalah 0, tandai sebagai Unlimited
            if [[ $wey -eq 0 ]]; then
                gb="Unlimited (unl)"
            else
                gb=$(con ${wey})
            fi

            lastlogin=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | cut -d " " -f 2 | tail -1)

            # Menampilkan informasi akun dalam format yang diinginkan
            printf "    %-13s - %-9s - %-6s\n" "${akun}" "${gb}/${lim}" "$jum2/$iplimit IP"

            # Membersihkan file sementara
            rm -f /tmp/ipvmess.txt
        fi
    done
    line_bawah
    # Membersihkan file sementara
    rm -f /tmp/other.txt
}

checkvless() {
echo ""
    echo -ne "\e[33mChecking vless Account\e[0m"
    for i in {1..2}; do
        for j in ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏; do
            echo -ne "\r\e[33mChecking vless Account $j\e[0m"
            sleep 0.1
        done
    done
    echo -ne "\r\e[33mvless Account Check Successful!    \e[0m\n"
    sleep 1
    clear
    
g="\033[1;93m"
gb="\e[92;1m"
b="\033[0;36m"
p="\033[0m"
r="\033[0;31m"
y="\033[0;33m"

# Fungsi untuk menampilkan garis atas
function line_atas() {
  echo -e " ${orange}┌──────────────────────────────────────────┐${p}"
}

# Fungsi untuk menampilkan garis bawah
function line_bawah() {
  echo -e " ${orange}└──────────────────────────────────────────┘${p}"
}

# Fungsi untuk menampilkan garis tengah
function line_tengah() {
  echo -e "   ${orange}────────────────────────────────────────${p}"
}

# Mengecek dan membuat direktori jika belum ada
    echo ""
    # Direktori untuk IP limit dan kuota akun vless
    dir="/etc/biji/limit/vless/ip"
    dir1="/etc/limit/vless"
    [[ ! -d "$dir" ]] && mkdir -p "$dir"
    [[ ! -d "$dir1" ]] && mkdir -p "$dir1"

    # Mendapatkan daftar akun vless dari config.json
    data5=( $(grep '#!' /etc/xray/config.json | cut -d ' ' -f 2 | sort -u) )

    for akun in "${data5[@]}"; do
        [[ ! -e /etc/biji/limit/vless/ip/$akun ]] && echo "2" > /etc/biji/limit/vless/ip/$akun
        [[ ! -e /etc/vless/$akun ]] && echo "107374182400" > /etc/vless/$akun
        [[ ! -e /etc/limit/vless/$akun ]] && echo "0" > /etc/limit/vless/$akun
    done >/dev/null 2>&1

    clear
    # Membersihkan file sementara
    > /tmp/other.txt
    > /tmp/ipvless.txt

    # Mendapatkan daftar akun vless dari file config.json
    data=( $(cat /etc/xray/config.json | grep '#!' | cut -d ' ' -f 2 | sort | uniq) )

    # Menampilkan banner
    line_atas
    echo -e " ${green}      Check Login Xray/vless Account            ${p}"
    line_bawah
    line_atas
    echo -e " ${green}    Username      ${orange}|${green}  Quota  ${orange}|${green}  IP Address${p}"
    line_tengah

    for akun in "${data[@]}"; do
        if [[ -z "$akun" ]]; then
            akun="tidakada"
        fi
        echo -n > /tmp/ipvless.txt
        data2=( `cat /var/log/xray/access.log | tail -n 500 | awk -F "from " '{print $2}' | grep email | grep "accepted tcp" | cut -d: -f1| cut -d[ -f2 | sort | uniq`);
        for ip in "${data2[@]}"; do
            jum=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | awk -F "from " '{print $2}'| sed 's/tcp://g' | cut -d ":" -f 1 | grep -w "$ip" | sort | uniq)
            if [[ "$jum" = "$ip" ]]; then
                echo "$jum" >> /tmp/ipvless.txt
            else
                echo "$ip" >> /tmp/other.txt
            fi
            jum2=$(cat /tmp/ipvless.txt)
            sed -i "/$jum2/d" /tmp/other.txt > /dev/null 2>&1
        done
        jum=$(cat /tmp/ipvless.txt)
        if [[ -z "$jum" ]]; then
            echo > /dev/null
        else
            iplimit=$(cat /etc/biji/limit/vless/ip/${akun})
            jum2=$(cat /tmp/ipvless.txt | wc -l)
            byte=$(cat /etc/vless/${akun})
            lim=$(con ${byte})
            wey=$(cat /etc/limit/vless/${akun})

            # Jika kuota maksimum adalah 0, tandai sebagai Unlimited
            if [[ $wey -eq 0 ]]; then
                gb="Unlimited (unl)"
            else
                gb=$(con ${wey})
            fi

            lastlogin=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | cut -d " " -f 2 | tail -1)

            # Menampilkan informasi akun dalam format yang diinginkan
            printf "    %-13s - %-9s - %-6s\n" "${akun}" "${gb}/${lim}" "$jum2/$iplimit IP"

            # Membersihkan file sementara
            rm -f /tmp/ipvless.txt
        fi
    done
    line_bawah
    # Membersihkan file sementara
    rm -f /tmp/other.txt
}

checktrojan() {
echo ""
    echo -ne "\e[33mChecking trojan Account\e[0m"
    for i in {1..2}; do
        for j in ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏; do
            echo -ne "\r\e[33mChecking trojan Account $j\e[0m"
            sleep 0.1
        done
    done
    echo -ne "\r\e[33mtrojan Account Check Successful!    \e[0m\n"
    sleep 1
    clear
    
g="\033[1;93m"
gb="\e[92;1m"
b="\033[0;36m"
p="\033[0m"
r="\033[0;31m"
y="\033[0;33m"

# Fungsi untuk menampilkan garis atas
function line_atas() {
  echo -e " ${orange}┌──────────────────────────────────────────┐${p}"
}

# Fungsi untuk menampilkan garis bawah
function line_bawah() {
  echo -e " ${orange}└──────────────────────────────────────────┘${p}"
}

# Fungsi untuk menampilkan garis tengah
function line_tengah() {
  echo -e "   ${orange}────────────────────────────────────────${p}"
}

# Mengecek dan membuat direktori jika belum ada
    echo ""
    # Direktori untuk IP limit dan kuota akun trojan
    dir="/etc/biji/limit/trojan/ip"
    dir1="/etc/limit/trojan"
    [[ ! -d "$dir" ]] && mkdir -p "$dir"
    [[ ! -d "$dir1" ]] && mkdir -p "$dir1"

    # Mendapatkan daftar akun trojan dari config.json
    data5=( $(grep '#!' /etc/xray/config.json | cut -d ' ' -f 2 | sort -u) )

    for akun in "${data5[@]}"; do
        [[ ! -e /etc/biji/limit/trojan/ip/$akun ]] && echo "2" > /etc/biji/limit/trojan/ip/$akun
        [[ ! -e /etc/trojan/$akun ]] && echo "107374182400" > /etc/trojan/$akun
        [[ ! -e /etc/limit/trojan/$akun ]] && echo "0" > /etc/limit/trojan/$akun
    done >/dev/null 2>&1

    clear
    # Membersihkan file sementara
    > /tmp/other.txt
    > /tmp/iptrojan.txt

    # Mendapatkan daftar akun trojan dari file config.json
    data=( $(cat /etc/xray/config.json | grep '#!' | cut -d ' ' -f 2 | sort | uniq) )

    # Menampilkan banner
    line_atas
    echo -e " ${green}      Check Login Xray/trojan Account            ${p}"
    line_bawah
    line_atas
    echo -e " ${green}    Username      ${orange}|${green}  Quota  ${orange}|${green}  IP Address${p}"
    line_tengah

    for akun in "${data[@]}"; do
        if [[ -z "$akun" ]]; then
            akun="tidakada"
        fi
        echo -n > /tmp/iptrojan.txt
        data2=( `cat /var/log/xray/access.log | tail -n 500 | awk -F "from " '{print $2}' | grep email | grep "accepted tcp" | cut -d: -f1| cut -d[ -f2 | sort | uniq`);
        for ip in "${data2[@]}"; do
            jum=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | awk -F "from " '{print $2}'| sed 's/tcp://g' | cut -d ":" -f 1 | grep -w "$ip" | sort | uniq)
            if [[ "$jum" = "$ip" ]]; then
                echo "$jum" >> /tmp/iptrojan.txt
            else
                echo "$ip" >> /tmp/other.txt
            fi
            jum2=$(cat /tmp/iptrojan.txt)
            sed -i "/$jum2/d" /tmp/other.txt > /dev/null 2>&1
        done
        jum=$(cat /tmp/iptrojan.txt)
        if [[ -z "$jum" ]]; then
            echo > /dev/null
        else
            iplimit=$(cat /etc/biji/limit/trojan/ip/${akun})
            jum2=$(cat /tmp/iptrojan.txt | wc -l)
            byte=$(cat /etc/trojan/${akun})
            lim=$(con ${byte})
            wey=$(cat /etc/limit/trojan/${akun})

            # Jika kuota maksimum adalah 0, tandai sebagai Unlimited
            if [[ $wey -eq 0 ]]; then
                gb="Unlimited (unl)"
            else
                gb=$(con ${wey})
            fi

            lastlogin=$(cat /var/log/xray/access.log | grep -wE "$akun" | tail -n 500 | cut -d " " -f 2 | tail -1)

            # Menampilkan informasi akun dalam format yang diinginkan
            printf "    %-13s - %-9s - %-6s\n" "${akun}" "${gb}/${lim}" "$jum2/$iplimit IP"

            # Membersihkan file sementara
            rm -f /tmp/iptrojan.txt
        fi
    done
    line_bawah
    # Membersihkan file sementara
    rm -f /tmp/other.txt
}

if [[ ${1} == "vmess" ]]; then
            checkvmess
        elif [[ ${1} == "vless" ]]; then
            checkvless
        elif [[ ${1} == "trojan" ]]; then
            checktrojan
        else
            echo "Invalid command. Use: vmess, vless, trojan"
            exit 1
        fi
