#!/bin/bash
sh_v="3.9.3"


gl_hui='\e[37m'
gl_hong='\033[31m'
gl_lv='\033[32m'
gl_huang='\033[33m'
gl_lan='\033[34m'
gl_bai='\033[0m'
gl_zi='\033[35m'
gl_kjlan='\033[96m'


canshu="default"
permission_granted="false"
ENABLE_STATS="true"


quanju_canshu() {
if [ "$canshu" = "CN" ]; then
	zhushi=0
	gh_proxy="https://gh.kejilion.pro/"
elif [ "$canshu" = "V6" ]; then
	zhushi=1
	gh_proxy="https://gh.kejilion.pro/"
else
	zhushi=1  # 0 表示执行，1 表示不执行
	gh_proxy="https://"
fi

}
quanju_canshu



# یک تابع را برای اجرای دستورات تعریف کنید
run_command() {
	if [ "$zhushi" -eq 0 ]; then
		"$@"
	fi
}


canshu_v6() {
	if grep -q '^canshu="V6"' /usr/local/bin/k > /dev/null 2>&1; then
		sed -i 's/^canshu="default"/canshu="V6"/' ~/kejilion.sh
	fi
}


CheckFirstRun_true() {
	if grep -q '^permission_granted="true"' /usr/local/bin/k > /dev/null 2>&1; then
		sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh
	fi
}



# کارکردهایی که اطلاعات نقطه دفن شده را جمع می کنند ، شماره نسخه اسکریپت فعلی ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکردی را که توسط کاربر استفاده می شود ، ضبط کنید. آنها کاملاً اطلاعات حساس را درگیر نمی کنند ، لطفاً مطمئن باشید! لطفا باور کنید!
# چرا ما نیاز به طراحی این عملکرد داریم؟ هدف این است که عملکردهایی را که کاربران دوست دارند از آنها استفاده کنند بهتر درک کنیم و توابع را برای راه اندازی عملکردهای بیشتری که نیازهای کاربر را برآورده می کند ، بهینه سازی کند.
# برای متن کامل ، می توانید مکان تماس عملکرد SEND_STATS ، منبع شفاف و باز را جستجو کنید و در صورت نگرانی می توانید از استفاده از آن خودداری کنید.



send_stats() {
	if [ "$ENABLE_STATS" == "false" ]; then
		return
	fi

	local country=$(curl -s ipinfo.io/country)
	local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"')
	local cpu_arch=$(uname -m)

	(
		curl -s -X POST "https://api.kejilion.pro/api/log" \
			-H "Content-Type: application/json" \
			-d "{\"action\":\"$1\",\"timestamp\":\"$(date -u '+%Y-%m-%d %H:%M:%S')\",\"country\":\"$country\",\"os_info\":\"$os_info\",\"cpu_arch\":\"$cpu_arch\",\"version\":\"$sh_v\"}" \
		&>/dev/null
	) &

}


yinsiyuanquan2() {

if grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then
	sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh
fi

}



canshu_v6
CheckFirstRun_true
yinsiyuanquan2


sed -i '/^alias k=/d' ~/.bashrc > /dev/null 2>&1
sed -i '/^alias k=/d' ~/.profile > /dev/null 2>&1
sed -i '/^alias k=/d' ~/.bash_profile > /dev/null 2>&1
cp -f ./kejilion.sh ~/kejilion.sh > /dev/null 2>&1
cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1



CheckFirstRun_false() {
	if grep -q '^permission_granted="false"' /usr/local/bin/k > /dev/null 2>&1; then
		UserLicenseAgreement
	fi
}

# کاربر را وادار به موافقت با شرایط کنید
UserLicenseAgreement() {
	clear
	echo -e "${gl_kjlan}به جعبه ابزار Tech Lion Script خوش آمدید${gl_bai}"
	echo "برای اولین بار با استفاده از اسکریپت ، لطفاً توافق نامه مجوز کاربر را بخوانید و موافقت کنید."
	echo "توافق نامه مجوز کاربر: https://blog.kejilion.pro/user-license-agreement/"
	echo -e "----------------------"
	read -r -p "آیا با اصطلاحات فوق موافق هستید؟ (y/n):" user_input


	if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then
		send_stats "رضایت مجوز"
		sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh
		sed -i 's/^permission_granted="false"/permission_granted="true"/' /usr/local/bin/k
	else
		send_stats "رد مجوز"
		clear
		exit
	fi
}

CheckFirstRun_false





ip_address() {

ipv4_address=$(curl -s https://ipinfo.io/ip && echo)
ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo)

}



install() {
	if [ $# -eq 0 ]; then
		echo "پارامترهای بسته ارائه نشده است!"
		return 1
	fi

	for package in "$@"; do
		if ! command -v "$package" &>/dev/null; then
			echo -e "${gl_huang}نصب$package...${gl_bai}"
			if command -v dnf &>/dev/null; then
				dnf -y update
				dnf install -y epel-release
				dnf install -y "$package"
			elif command -v yum &>/dev/null; then
				yum -y update
				yum install -y epel-release
				yum install -y "$package"
			elif command -v apt &>/dev/null; then
				apt update -y
				apt install -y "$package"
			elif command -v apk &>/dev/null; then
				apk update
				apk add "$package"
			elif command -v pacman &>/dev/null; then
				pacman -Syu --noconfirm
				pacman -S --noconfirm "$package"
			elif command -v zypper &>/dev/null; then
				zypper refresh
				zypper install -y "$package"
			elif command -v opkg &>/dev/null; then
				opkg update
				opkg install "$package"
			elif command -v pkg &>/dev/null; then
				pkg update
				pkg install -y "$package"
			else
				echo "مدیر بسته ناشناخته!"
				return 1
			fi
		fi
	done
}


check_disk_space() {

	required_gb=$1
	required_space_mb=$((required_gb * 1024))
	available_space_mb=$(df -m / | awk 'NR==2 {print $4}')

	if [ $available_space_mb -lt $required_space_mb ]; then
		echo -e "${gl_huang}نکته:${gl_bai}فضای کافی دیسک!"
		echo "فضای موجود در دسترس: $ ((موجود_ space_mb/1024)) g"
		echo "حداقل فضای تقاضا:${required_gb}G"
		echo "نصب نمی تواند ادامه یابد. لطفاً فضای دیسک را تمیز کرده و دوباره امتحان کنید."
		send_stats "فضای دیسک کافی"
		break_end
		kejilion
	fi
}


install_dependency() {
	install wget unzip tar jq
}

remove() {
	if [ $# -eq 0 ]; then
		echo "پارامترهای بسته ارائه نشده است!"
		return 1
	fi

	for package in "$@"; do
		echo -e "${gl_huang}حذف نصب$package...${gl_bai}"
		if command -v dnf &>/dev/null; then
			dnf remove -y "$package"
		elif command -v yum &>/dev/null; then
			yum remove -y "$package"
		elif command -v apt &>/dev/null; then
			apt purge -y "$package"
		elif command -v apk &>/dev/null; then
			apk del "$package"
		elif command -v pacman &>/dev/null; then
			pacman -Rns --noconfirm "$package"
		elif command -v zypper &>/dev/null; then
			zypper remove -y "$package"
		elif command -v opkg &>/dev/null; then
			opkg remove "$package"
		elif command -v pkg &>/dev/null; then
			pkg delete -y "$package"
		else
			echo "مدیر بسته ناشناخته!"
			return 1
		fi
	done
}


# عملکرد جهانی SystemCtl ، مناسب برای توزیع های مختلف
systemctl() {
	local COMMAND="$1"
	local SERVICE_NAME="$2"

	if command -v apk &>/dev/null; then
		service "$SERVICE_NAME" "$COMMAND"
	else
		/bin/systemctl "$COMMAND" "$SERVICE_NAME"
	fi
}


# سرویس را مجدداً راه اندازی کنید
restart() {
	systemctl restart "$1"
	if [ $? -eq 0 ]; then
		echo "$1این سرویس مجدداً راه اندازی شده است."
	else
		echo "خطا: راه اندازی مجدد$1سرویس شکست خورد."
	fi
}

# سرویس را شروع کنید
start() {
	systemctl start "$1"
	if [ $? -eq 0 ]; then
		echo "$1این سرویس آغاز شده است."
	else
		echo "خطا: شروع کنید$1سرویس شکست خورد."
	fi
}

# سرویس توقف
stop() {
	systemctl stop "$1"
	if [ $? -eq 0 ]; then
		echo "$1سرویس متوقف شده است"
	else
		echo "خطا: توقف$1سرویس شکست خورد."
	fi
}

# وضعیت خدمات را بررسی کنید
status() {
	systemctl status "$1"
	if [ $? -eq 0 ]; then
		echo "$1وضعیت سرویس نمایش داده می شود."
	else
		echo "خطا: نمایش امکان پذیر نیست$1وضعیت خدمات"
	fi
}


enable() {
	local SERVICE_NAME="$1"
	if command -v apk &>/dev/null; then
		rc-update add "$SERVICE_NAME" default
	else
	   /bin/systemctl enable "$SERVICE_NAME"
	fi

	echo "$SERVICE_NAMEروی قدرت تنظیم کنید."
}



break_end() {
	  echo -e "${gl_lv}عملیات کامل شد${gl_bai}"
	  echo "برای ادامه ... هر کلید را فشار دهید ..."
	  read -n 1 -s -r -p ""
	  echo ""
	  clear
}

kejilion() {
			cd ~
			kejilion_sh
}




check_port() {
	install lsof

	stop_containers_or_kill_process() {
		local port=$1
		local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)

		if [ -n "$containers" ]; then
			docker stop $containers
		else
			for pid in $(lsof -t -i:$port); do
				kill -9 $pid
			done
		fi
	}

	stop_containers_or_kill_process 80
	stop_containers_or_kill_process 443
}


install_add_docker_cn() {

local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
	cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
	"https://docker-0.unsee.tech",
	"https://docker.1panel.live",
	"https://registry.dockermirror.com",
	"https://docker.imgdb.de",
	"https://docker.m.daocloud.io",
	"https://hub.firefly.store",
	"https://hub.littlediary.cn",
	"https://hub.rat.dev",
	"https://dhub.kubesre.xyz",
	"https://cjie.eu.org",
	"https://docker.1panelproxy.com",
	"https://docker.hlmirror.com",
	"https://hub.fast360.xyz",
	"https://dockerpull.cn",
	"https://cr.laoyou.ip-ddns.com",
	"https://docker.melikeme.cn",
	"https://docker.kejilion.pro"
  ]
}
EOF
fi


enable docker
start docker
restart docker

}


install_add_docker_guanfang() {
local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
	cd ~
	curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/install && chmod +x install
	sh install --mirror Aliyun
	rm -f install
else
	curl -fsSL https://get.docker.com | sh
fi
install_add_docker_cn


}



install_add_docker() {
	echo -e "${gl_huang}نصب محیط داکر ...${gl_bai}"
	if  [ -f /etc/os-release ] && grep -q "Fedora" /etc/os-release; then
		install_add_docker_guanfang
	elif command -v dnf &>/dev/null; then
		dnf update -y
		dnf install -y yum-utils device-mapper-persistent-data lvm2
		rm -f /etc/yum.repos.d/docker*.repo > /dev/null
		country=$(curl -s ipinfo.io/country)
		arch=$(uname -m)
		if [ "$country" = "CN" ]; then
			curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo | tee /etc/yum.repos.d/docker-ce.repo > /dev/null
		else
			yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo > /dev/null
		fi
		dnf install -y docker-ce docker-ce-cli containerd.io
		install_add_docker_cn

	elif [ -f /etc/os-release ] && grep -q "Kali" /etc/os-release; then
		apt update
		apt upgrade -y
		apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
		rm -f /usr/share/keyrings/docker-archive-keyring.gpg
		local country=$(curl -s ipinfo.io/country)
		local arch=$(uname -m)
		if [ "$country" = "CN" ]; then
			if [ "$arch" = "x86_64" ]; then
				sed -i '/^deb \[arch=amd64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
				mkdir -p /etc/apt/keyrings
				curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
				echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
			elif [ "$arch" = "aarch64" ]; then
				sed -i '/^deb \[arch=arm64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
				mkdir -p /etc/apt/keyrings
				curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
				echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
			fi
		else
			if [ "$arch" = "x86_64" ]; then
				sed -i '/^deb \[arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
				mkdir -p /etc/apt/keyrings
				curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
				echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
			elif [ "$arch" = "aarch64" ]; then
				sed -i '/^deb \[arch=arm64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
				mkdir -p /etc/apt/keyrings
				curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
				echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
			fi
		fi
		apt update
		apt install -y docker-ce docker-ce-cli containerd.io
		install_add_docker_cn


	elif command -v apt &>/dev/null || command -v yum &>/dev/null; then
		install_add_docker_guanfang
	else
		install docker docker-compose
		install_add_docker_cn

	fi
	sleep 2
}


install_docker() {
	if ! command -v docker &>/dev/null; then
		install_add_docker
	fi
}


docker_ps() {
while true; do
	clear
	send_stats "مدیریت کانتینر داکر"
	echo "لیست کانتینر داکر"
	docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
	echo ""
	echo "کانتینر"
	echo "------------------------"
	echo "1. یک ظرف جدید ایجاد کنید"
	echo "------------------------"
	echo "2. ظرف مشخص شده را شروع کنید 6. همه ظروف را شروع کنید"
	echo "3. کانتینر مشخص شده 7 را متوقف کنید. تمام ظروف را متوقف کنید"
	echo "4. ظرف مشخص شده را حذف کنید 8. همه ظروف را حذف کنید"
	echo "5. ظرف مشخص شده را مجدداً راه اندازی کنید. همه ظروف را مجدداً راه اندازی کنید"
	echo "------------------------"
	echo "11. ظرف مشخص شده 12 را وارد کنید. ورود به سیستم کانتینر را مشاهده کنید"
	echo "13. مشاهده شبکه کانتینر 14. مشاهده اشغال کانتینر"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
	case $sub_choice in
		1)
			send_stats "یک ظرف جدید ایجاد کنید"
			read -e -p "لطفاً دستور ایجاد را وارد کنید:" dockername
			$dockername
			;;
		2)
			send_stats "ظرف مشخص شده را شروع کنید"
			read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
			docker start $dockername
			;;
		3)
			send_stats "ظرف مشخص شده را متوقف کنید"
			read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
			docker stop $dockername
			;;
		4)
			send_stats "ظرف مشخص شده را حذف کنید"
			read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
			docker rm -f $dockername
			;;
		5)
			send_stats "ظرف مشخص شده را مجدداً راه اندازی کنید"
			read -e -p "لطفاً نام کانتینر را وارد کنید (چندین نام کانتینر که توسط فضاها جدا شده اند):" dockername
			docker restart $dockername
			;;
		6)
			send_stats "همه ظروف را شروع کنید"
			docker start $(docker ps -a -q)
			;;
		7)
			send_stats "تمام ظروف را متوقف کنید"
			docker stop $(docker ps -q)
			;;
		8)
			send_stats "همه ظروف را حذف کنید"
			read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗？(Y/N): ")" choice
			case "$choice" in
			  [Yy])
				docker rm -f $(docker ps -a -q)
				;;
			  [Nn])
				;;
			  *)
				echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				;;
			esac
			;;
		9)
			send_stats "همه ظروف را مجدداً راه اندازی کنید"
			docker restart $(docker ps -q)
			;;
		11)
			send_stats "ظرف را وارد کنید"
			read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername
			docker exec -it $dockername /bin/sh
			break_end
			;;
		12)
			send_stats "مشاهده کانتینر"
			read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername
			docker logs $dockername
			break_end
			;;
		13)
			send_stats "مشاهده شبکه کانتینر"
			echo ""
			container_ids=$(docker ps -q)
			echo "------------------------------------------------------------"
			printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
			for container_id in $container_ids; do
				local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
				local container_name=$(echo "$container_info" | awk '{print $1}')
				local network_info=$(echo "$container_info" | cut -d' ' -f2-)
				while IFS= read -r line; do
					local network_name=$(echo "$line" | awk '{print $1}')
					local ip_address=$(echo "$line" | awk '{print $2}')
					printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
				done <<< "$network_info"
			done
			break_end
			;;
		14)
			send_stats "مشاهده اشغال کانتینر"
			docker stats --no-stream
			break_end
			;;
		*)
			break  # 跳出循环，退出菜单
			;;
	esac
done
}


docker_image() {
while true; do
	clear
	send_stats "مدیریت تصویر داکر"
	echo "لیست تصویر Docker"
	docker image ls
	echo ""
	echo "عمل آینه"
	echo "------------------------"
	echo "1. تصویر مشخص شده را دریافت کنید. تصویر مشخص شده را حذف کنید"
	echo "2. تصویر مشخص شده را به روز کنید. همه تصاویر را حذف کنید"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
	case $sub_choice in
		1)
			send_stats "آینه را بکشید"
			read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
			for name in $imagenames; do
				echo -e "${gl_huang}گرفتن تصویر:$name${gl_bai}"
				docker pull $name
			done
			;;
		2)
			send_stats "تصویر را به روز کنید"
			read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
			for name in $imagenames; do
				echo -e "${gl_huang}تصویر به روز شده:$name${gl_bai}"
				docker pull $name
			done
			;;
		3)
			send_stats "آینه را حذف کنید"
			read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
			for name in $imagenames; do
				docker rmi -f $name
			done
			;;
		4)
			send_stats "همه تصاویر را حذف کنید"
			read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗？(Y/N): ")" choice
			case "$choice" in
			  [Yy])
				docker rmi -f $(docker images -q)
				;;
			  [Nn])
				;;
			  *)
				echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				;;
			esac
			;;
		*)
			break  # 跳出循环，退出菜单
			;;
	esac
done


}





check_crontab_installed() {
	if ! command -v crontab >/dev/null 2>&1; then
		install_crontab
	fi
}



install_crontab() {

	if [ -f /etc/os-release ]; then
		. /etc/os-release
		case "$ID" in
			ubuntu|debian|kali)
				apt update
				apt install -y cron
				systemctl enable cron
				systemctl start cron
				;;
			centos|rhel|almalinux|rocky|fedora)
				yum install -y cronie
				systemctl enable crond
				systemctl start crond
				;;
			alpine)
				apk add --no-cache cronie
				rc-update add crond
				rc-service crond start
				;;
			arch|manjaro)
				pacman -S --noconfirm cronie
				systemctl enable cronie
				systemctl start cronie
				;;
			opensuse|suse|opensuse-tumbleweed)
				zypper install -y cron
				systemctl enable cron
				systemctl start cron
				;;
			iStoreOS|openwrt|ImmortalWrt|lede)
				opkg update
				opkg install cron
				/etc/init.d/cron enable
				/etc/init.d/cron start
				;;
			FreeBSD)
				pkg install -y cronie
				sysrc cron_enable="YES"
				service cron start
				;;
			*)
				echo "توزیع های پشتیبانی نشده:$ID"
				return
				;;
		esac
	else
		echo "سیستم عامل قابل تعیین نیست."
		return
	fi

	echo -e "${gl_lv}Crontab نصب شده و سرویس Cron در حال اجرا است.${gl_bai}"
}



docker_ipv6_on() {
	root_use
	install jq

	local CONFIG_FILE="/etc/docker/daemon.json"
	local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}'

	# بررسی کنید که آیا پرونده پیکربندی وجود دارد ، پرونده را ایجاد کرده و در صورت وجود تنظیمات پیش فرض را بنویسید
	if [ ! -f "$CONFIG_FILE" ]; then
		echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE"
		restart docker
	else
		# از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید
		local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")

		# بررسی کنید که آیا پیکربندی فعلی در حال حاضر دارای تنظیمات IPv6 است
		local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false')

		# پیکربندی را به روز کنید و IPv6 را فعال کنید
		if [[ "$CURRENT_IPV6" == "false" ]]; then
			UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}')
		else
			UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}')
		fi

		# مقایسه پیکربندی اصلی با پیکربندی جدید
		if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then
			echo -e "${gl_huang}دسترسی IPv6 در حال حاضر فعال است${gl_bai}"
		else
			echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE"
			restart docker
		fi
	fi
}


docker_ipv6_off() {
	root_use
	install jq

	local CONFIG_FILE="/etc/docker/daemon.json"

	# بررسی کنید که آیا پرونده پیکربندی وجود دارد
	if [ ! -f "$CONFIG_FILE" ]; then
		echo -e "${gl_hong}پرونده پیکربندی وجود ندارد${gl_bai}"
		return
	fi

	# پیکربندی فعلی را بخوانید
	local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")

	# از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید
	local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false')

	# وضعیت IPv6 فعلی را بررسی کنید
	local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false')

	# مقایسه پیکربندی اصلی با پیکربندی جدید
	if [[ "$CURRENT_IPV6" == "false" ]]; then
		echo -e "${gl_huang}دسترسی IPv6 در حال حاضر بسته است${gl_bai}"
	else
		echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE"
		restart docker
		echo -e "${gl_huang}دسترسی IPv6 با موفقیت بسته شده است${gl_bai}"
	fi
}



save_iptables_rules() {
	mkdir -p /etc/iptables
	touch /etc/iptables/rules.v4
	iptables-save > /etc/iptables/rules.v4
	check_crontab_installed
	crontab -l | grep -v 'iptables-restore' | crontab - > /dev/null 2>&1
	(crontab -l ; echo '@reboot iptables-restore < /etc/iptables/rules.v4') | crontab - > /dev/null 2>&1

}




iptables_open() {
	install iptables
	save_iptables_rules
	iptables -P INPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -P OUTPUT ACCEPT
	iptables -F

	ip6tables -P INPUT ACCEPT
	ip6tables -P FORWARD ACCEPT
	ip6tables -P OUTPUT ACCEPT
	ip6tables -F

}



open_port() {
	local ports=($@)  # 将传入的参数转换为数组
	if [ ${#ports[@]} -eq 0 ]; then
		echo "لطفاً حداقل یک شماره درگاه ارائه دهید"
		return 1
	fi

	install iptables

	for port in "${ports[@]}"; do
		# قوانین بسته شدن موجود را حذف کنید
		iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null
		iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null

		# قوانین باز را اضافه کنید
		if ! iptables -C INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null; then
			iptables -I INPUT 1 -p tcp --dport $port -j ACCEPT
		fi

		if ! iptables -C INPUT -p udp --dport $port -j ACCEPT 2>/dev/null; then
			iptables -I INPUT 1 -p udp --dport $port -j ACCEPT
			echo "بندر باز شده است$port"
		fi
	done

	save_iptables_rules
	send_stats "بندر باز شده است"
}


close_port() {
	local ports=($@)  # 将传入的参数转换为数组
	if [ ${#ports[@]} -eq 0 ]; then
		echo "لطفاً حداقل یک شماره درگاه ارائه دهید"
		return 1
	fi

	install iptables

	for port in "${ports[@]}"; do
		# قوانین باز موجود را حذف کنید
		iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null
		iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null

		# یک قانون نزدیک اضافه کنید
		if ! iptables -C INPUT -p tcp --dport $port -j DROP 2>/dev/null; then
			iptables -I INPUT 1 -p tcp --dport $port -j DROP
		fi

		if ! iptables -C INPUT -p udp --dport $port -j DROP 2>/dev/null; then
			iptables -I INPUT 1 -p udp --dport $port -j DROP
			echo "بندر بسته$port"
		fi
	done

	save_iptables_rules
	send_stats "بندر بسته"
}


allow_ip() {
	local ips=($@)  # 将传入的参数转换为数组
	if [ ${#ips[@]} -eq 0 ]; then
		echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید"
		return 1
	fi

	install iptables

	for ip in "${ips[@]}"; do
		# قوانین مسدود کردن موجود را حذف کنید
		iptables -D INPUT -s $ip -j DROP 2>/dev/null

		# قوانین اجازه را اضافه کنید
		if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then
			iptables -I INPUT 1 -s $ip -j ACCEPT
			echo "IP آزاد شده$ip"
		fi
	done

	save_iptables_rules
	send_stats "IP آزاد شده"
}

block_ip() {
	local ips=($@)  # 将传入的参数转换为数组
	if [ ${#ips[@]} -eq 0 ]; then
		echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید"
		return 1
	fi

	install iptables

	for ip in "${ips[@]}"; do
		# قوانین مجاز موجود را حذف کنید
		iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null

		# قوانین مسدود کردن را اضافه کنید
		if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then
			iptables -I INPUT 1 -s $ip -j DROP
			echo "IP مسدود شده$ip"
		fi
	done

	save_iptables_rules
	send_stats "IP مسدود شده"
}







enable_ddos_defense() {
	# DDO های دفاعی را روشن کنید
	iptables -A DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT
	iptables -A DOCKER-USER -p tcp --syn -j DROP
	iptables -A DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT
	iptables -A DOCKER-USER -p udp -j DROP
	iptables -A INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT
	iptables -A INPUT -p tcp --syn -j DROP
	iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT
	iptables -A INPUT -p udp -j DROP

	send_stats "دفاع DDOS را روشن کنید"
}

# دفاع DDOS را خاموش کنید
disable_ddos_defense() {
	# DDO های دفاع را خاموش کنید
	iptables -D DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null
	iptables -D DOCKER-USER -p tcp --syn -j DROP 2>/dev/null
	iptables -D DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null
	iptables -D DOCKER-USER -p udp -j DROP 2>/dev/null
	iptables -D INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null
	iptables -D INPUT -p tcp --syn -j DROP 2>/dev/null
	iptables -D INPUT -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null
	iptables -D INPUT -p udp -j DROP 2>/dev/null

	send_stats "دفاع DDOS را خاموش کنید"
}





# کارکردهایی که قوانین ملی IP را مدیریت می کنند
manage_country_rules() {
	local action="$1"
	local country_code="$2"
	local ipset_name="${country_code,,}_block"
	local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone"

	install ipset

	case "$action" in
		block)
			# اگر IPSET وجود نداشته باشد ایجاد کنید
			if ! ipset list "$ipset_name" &> /dev/null; then
				ipset create "$ipset_name" hash:net
			fi

			# بارگیری پرونده منطقه IP
			if ! wget -q "$download_url" -O "${country_code,,}.zone"; then
				echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد"
				exit 1
			fi

			# IP را به ipset اضافه کنید
			while IFS= read -r ip; do
				ipset add "$ipset_name" "$ip"
			done < "${country_code,,}.zone"

			# IP را با iptables مسدود کنید
			iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP
			iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP

			echo "با موفقیت مسدود شد$country_codeآدرس IP"
			rm "${country_code,,}.zone"
			;;

		allow)
			# ایجاد یک IPSET برای کشورهای مجاز (اگر وجود نداشته باشد)
			if ! ipset list "$ipset_name" &> /dev/null; then
				ipset create "$ipset_name" hash:net
			fi

			# بارگیری پرونده منطقه IP
			if ! wget -q "$download_url" -O "${country_code,,}.zone"; then
				echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد"
				exit 1
			fi

			# قوانین ملی موجود را حذف کنید
			iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null
			iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null
			ipset flush "$ipset_name"

			# IP را به ipset اضافه کنید
			while IFS= read -r ip; do
				ipset add "$ipset_name" "$ip"
			done < "${country_code,,}.zone"

			# فقط IP در کشورهای تعیین شده مجاز است
			iptables -P INPUT DROP
			iptables -P OUTPUT DROP
			iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT
			iptables -A OUTPUT -m set --match-set "$ipset_name" dst -j ACCEPT

			echo "با موفقیت فقط مجاز است$country_codeآدرس IP"
			rm "${country_code,,}.zone"
			;;

		unblock)
			# قوانین iptables را برای کشور حذف کنید
			iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null
			iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null

			# Ipset را نابود کنید
			if ipset list "$ipset_name" &> /dev/null; then
				ipset destroy "$ipset_name"
			fi

			echo "با موفقیت برداشته شد$country_codeمحدودیت های آدرس IP"
			;;

		*)
			;;
	esac
}




iptables_panel() {
  root_use
  install iptables
  save_iptables_rules
  while true; do
		  clear
		  echo "مدیریت پیشرفته فایروال"
		  send_stats "مدیریت پیشرفته فایروال"
		  echo "------------------------"
		  iptables -L INPUT
		  echo ""
		  echo "مدیریت فایروال"
		  echo "------------------------"
		  echo "1. پورت مشخص شده را باز کنید. پورت مشخص شده را ببندید"
		  echo "3. همه درگاه ها را باز کنید. همه درگاه ها را ببندید"
		  echo "------------------------"
		  echo "5. Whitelist IP 6."
		  echo "7. IP مشخص شده را پاک کنید"
		  echo "------------------------"
		  echo "11. اجازه دهید پینگ 12 را غیرفعال کنید"
		  echo "------------------------"
		  echo "13. دفاع DDOS را شروع کنید 14. دفاع DDOS را خاموش کنید"
		  echo "------------------------"
		  echo "15. بلوک کشور مشخص شده IP 16. فقط IP های کشور مشخص مجاز هستند"
		  echo "17. محدودیت های IP را در کشورهای تعیین شده آزاد کنید"
		  echo "------------------------"
		  echo "0. به منوی قبلی برگردید"
		  echo "------------------------"
		  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
		  case $sub_choice in
			  1)
				  read -e -p "لطفاً شماره پورت باز را وارد کنید:" o_port
				  open_port $o_port
				  send_stats "یک درگاه مشخص را باز کنید"
				  ;;
			  2)
				  read -e -p "لطفاً شماره پورت بسته را وارد کنید:" c_port
				  close_port $c_port
				  send_stats "بندر مشخص شده را ببندید"
				  ;;
			  3)
				  # همه بنادر را باز کنید
				  current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
				  iptables -F
				  iptables -X
				  iptables -P INPUT ACCEPT
				  iptables -P FORWARD ACCEPT
				  iptables -P OUTPUT ACCEPT
				  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
				  iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
				  iptables -A INPUT -i lo -j ACCEPT
				  iptables -A FORWARD -i lo -j ACCEPT
				  iptables -A INPUT -p tcp --dport $current_port -j ACCEPT
				  iptables-save > /etc/iptables/rules.v4
				  send_stats "همه بنادر را باز کنید"
				  ;;
			  4)
				  # همه بنادر را ببندید
				  current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
				  iptables -F
				  iptables -X
				  iptables -P INPUT DROP
				  iptables -P FORWARD DROP
				  iptables -P OUTPUT ACCEPT
				  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
				  iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
				  iptables -A INPUT -i lo -j ACCEPT
				  iptables -A FORWARD -i lo -j ACCEPT
				  iptables -A INPUT -p tcp --dport $current_port -j ACCEPT
				  iptables-save > /etc/iptables/rules.v4
				  send_stats "همه بنادر را ببندید"
				  ;;

			  5)
				  # وایتلیست
				  read -e -p "لطفاً بخش IP یا IP را وارد کنید تا منتشر شود:" o_ip
				  allow_ip $o_ip
				  ;;
			  6)
				  # لیست سیاه IP
				  read -e -p "لطفاً بخش IP یا IP مسدود شده را وارد کنید:" c_ip
				  block_ip $c_ip
				  ;;
			  7)
				  # IP مشخص شده را پاک کنید
				  read -e -p "لطفاً IP پاک شده را وارد کنید:" d_ip
				  iptables -D INPUT -s $d_ip -j ACCEPT 2>/dev/null
				  iptables -D INPUT -s $d_ip -j DROP 2>/dev/null
				  iptables-save > /etc/iptables/rules.v4
				  send_stats "IP مشخص شده را پاک کنید"
				  ;;
			  11)
				  # به پینگ اجازه دهید
				  iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
				  iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
				  iptables-save > /etc/iptables/rules.v4
				  send_stats "به پینگ اجازه دهید"
				  ;;
			  12)
				  # پینگ را غیرفعال کنید
				  iptables -D INPUT -p icmp --icmp-type echo-request -j ACCEPT 2>/dev/null
				  iptables -D OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 2>/dev/null
				  iptables-save > /etc/iptables/rules.v4
				  send_stats "پینگ را غیرفعال کنید"
				  ;;
			  13)
				  enable_ddos_defense
				  ;;
			  14)
				  disable_ddos_defense
				  ;;

			  15)
				  read -e -p "لطفاً کد کشور مسدود شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code
				  manage_country_rules block $country_code
				  send_stats "کشورهای مجاز$country_codeبا منبت کاری کردن"
				  ;;
			  16)
				  read -e -p "لطفاً کد کشور مجاز (مانند CN ، ایالات متحده ، JP) را وارد کنید:" country_code
				  manage_country_rules allow $country_code
				  send_stats "کشور را مسدود کنید$country_codeبا منبت کاری کردن"
				  ;;

			  17)
				  read -e -p "لطفاً کد کشور پاک شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code
				  manage_country_rules unblock $country_code
				  send_stats "کشور را پاک کنید$country_codeبا منبت کاری کردن"
				  ;;

			  *)
				  break  # 跳出循环，退出菜单
				  ;;
		  esac
  done

}








add_swap() {
	local new_swap=$1  # 获取传入的参数

	# تمام پارتیشن های مبادله را در سیستم فعلی دریافت کنید
	local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}')

	# تمام پارتیشن های مبادله را تکرار کرده و حذف کنید
	for partition in $swap_partitions; do
		swapoff "$partition"
		wipefs -a "$partition"
		mkswap -f "$partition"
	done

	# اطمینان حاصل کنید که /Swapfile دیگر استفاده نمی شود
	swapoff /swapfile

	# قدیمی /swapfile را حذف کنید
	rm -f /swapfile

	# یک پارتیشن مبادله جدید ایجاد کنید
	fallocate -l ${new_swap}M /swapfile
	chmod 600 /swapfile
	mkswap /swapfile
	swapon /swapfile

	sed -i '/\/swapfile/d' /etc/fstab
	echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

	if [ -f /etc/alpine-release ]; then
		echo "nohup swapon /swapfile" > /etc/local.d/swap.start
		chmod +x /etc/local.d/swap.start
		rc-update add local
	fi

	echo -e "اندازه حافظه مجازی تغییر یافته است${gl_huang}${new_swap}${gl_bai}M"
}




check_swap() {

local swap_total=$(free -m | awk 'NR==3{print $2}')

# تعیین کنید که آیا حافظه مجازی باید ایجاد شود
[ "$swap_total" -gt 0 ] || add_swap 1024


}









ldnmp_v() {

	  # نسخه nginx را دریافت کنید
	  local nginx_version=$(docker exec nginx nginx -v 2>&1)
	  local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+")
	  echo -n -e "nginx : ${gl_huang}v$nginx_version${gl_bai}"

	  # نسخه MySQL را دریافت کنید
	  local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
	  local mysql_version=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SELECT VERSION();" 2>/dev/null | tail -n 1)
	  echo -n -e "            mysql : ${gl_huang}v$mysql_version${gl_bai}"

	  # نسخه PHP را دریافت کنید
	  local php_version=$(docker exec php php -v 2>/dev/null | grep -oP "PHP \K[0-9]+\.[0-9]+\.[0-9]+")
	  echo -n -e "            php : ${gl_huang}v$php_version${gl_bai}"

	  # نسخه redis را دریافت کنید
	  local redis_version=$(docker exec redis redis-server -v 2>&1 | grep -oP "v=+\K[0-9]+\.[0-9]+")
	  echo -e "            redis : ${gl_huang}v$redis_version${gl_bai}"

	  echo "------------------------"
	  echo ""

}



install_ldnmp_conf() {

  # دایرکتوری ها و پرونده های لازم را ایجاد کنید
  cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/redis web/log/nginx && touch web/docker-compose.yml
  wget -O /home/web/nginx.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf
  wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default10.conf
  wget -O /home/web/redis/valkey.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/valkey.conf


  default_server_ssl

  # پرونده docker-compose.yml را بارگیری کنید و آن را جایگزین کنید
  wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml
  dbrootpasswd=$(openssl rand -base64 16) ; dbuse=$(openssl rand -hex 4) ; dbusepasswd=$(openssl rand -base64 8)

  # در پرونده docker-compose.yml جایگزین کنید
  sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml
  sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml
  sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml

}





install_ldnmp() {

	  check_swap

	  cp /home/web/docker-compose.yml /home/web/docker-compose1.yml

	  if ! grep -q "php-socket" /home/web/docker-compose.yml; then
		wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml
	  	dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')
	  	dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')
	  	dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')

  		sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml
  		sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml
  		sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml

	  fi

	  if grep -q "kjlion/nginx:alpine" /home/web/docker-compose1.yml; then
	  	sed -i 's|kjlion/nginx:alpine|nginx:alpine|g' /home/web/docker-compose.yml  > /dev/null 2>&1
		sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml  > /dev/null 2>&1
	  fi

	  cd /home/web && docker compose up -d
	  sleep 1
  	  crontab -l 2>/dev/null | grep -v 'logrotate' | crontab -
  	  (crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab -

	  fix_phpfpm_conf php
	  fix_phpfpm_conf php74
	  restart_ldnmp




	  clear
	  echo "محیط LDNMP نصب شده است"
	  echo "------------------------"
	  ldnmp_v

}


install_certbot() {

	cd ~
	curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/auto_cert_renewal.sh
	chmod +x auto_cert_renewal.sh

	check_crontab_installed
	local cron_job="0 0 * * * ~/auto_cert_renewal.sh"
	crontab -l 2>/dev/null | grep -vF "$cron_job" | crontab -
	(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
	echo "کار تمدید به روز شده است"
}


install_ssltls() {
	  docker stop nginx > /dev/null 2>&1
	  check_port > /dev/null 2>&1
	  cd ~

	  local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem"
	  if [ ! -f "$file_path" ]; then
		 	local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
	  		local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$'
			if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then
				mkdir -p /etc/letsencrypt/live/$yuming/
				if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
					openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
				else
					openssl genpkey -algorithm Ed25519 -out /etc/letsencrypt/live/$yuming/privkey.pem
					openssl req -x509 -key /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
				fi
			else
				docker run -it --rm --network host -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone --http-01-address 0.0.0.0 --http-01-port 80 -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa
			fi
	  fi
	  mkdir -p /home/web/certs/
	  cp /etc/letsencrypt/live/$yuming/fullchain.pem /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1
	  cp /etc/letsencrypt/live/$yuming/privkey.pem /home/web/certs/${yuming}_key.pem > /dev/null 2>&1

	  docker start nginx > /dev/null 2>&1
}



install_ssltls_text() {
	echo -e "${gl_huang}$yumingاطلاعات کلیدی عمومی${gl_bai}"
	cat /etc/letsencrypt/live/$yuming/fullchain.pem
	echo ""
	echo -e "${gl_huang}$yumingاطلاعات کلید خصوصی${gl_bai}"
	cat /etc/letsencrypt/live/$yuming/privkey.pem
	echo ""
	echo -e "${gl_huang}مسیر ذخیره گواهینامه${gl_bai}"
	echo "کلید عمومی:/و غیره/letsencrypt/live/$yuming/fullchain.pem"
	echo "کلید خصوصی:/و غیره/letsencrypt/live/$yuming/privkey.pem"
	echo ""
}





add_ssl() {

yuming="${1:-}"
if [ -z "$yuming" ]; then
	add_yuming
fi
install_docker
install_certbot
docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null
install_ssltls
certs_status
install_ssltls_text
ssl_ps
}


ssl_ps() {
	echo -e "${gl_huang}انقضاء گواهی اعمال شده${gl_bai}"
	echo "زمان انقضا گواهی اطلاعات سایت"
	echo "------------------------"
	for cert_dir in /etc/letsencrypt/live/*; do
	  local cert_file="$cert_dir/fullchain.pem"
	  if [ -f "$cert_file" ]; then
		local domain=$(basename "$cert_dir")
		local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}')
		local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d')
		printf "%-30s%s\n" "$domain" "$formatted_date"
	  fi
	done
	echo ""
}




default_server_ssl() {
install openssl

if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
	openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
else
	openssl genpkey -algorithm Ed25519 -out /home/web/certs/default_server.key
	openssl req -x509 -key /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
fi

openssl rand -out /home/web/certs/ticket12.key 48
openssl rand -out /home/web/certs/ticket13.key 80

}


certs_status() {

	sleep 1

	local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem"
	if [ -f "$file_path" ]; then
		send_stats "برنامه موفق برای گواهی نام دامنه"
	else
		send_stats "درخواست گواهی نام دامنه انجام نشد"
		echo -e "${gl_hong}توجه:${gl_bai}برنامه گواهینامه انجام نشد. لطفاً دلایل احتمالی زیر را بررسی کنید و دوباره امتحان کنید:"
		echo -e "1. خطای املایی نام دامنه ➠ لطفا بررسی کنید که آیا نام دامنه به درستی وارد شده است"
		echo -e "2. مشکل وضوح DNS ➠ تأیید کنید که نام دامنه به درستی در این IP سرور حل شده است"
		echo -e "3. مشکلات پیکربندی شبکه ➠ اگر از CloudFlare Warp و سایر شبکه های مجازی استفاده می کنید ، لطفاً به طور موقت خاموش شوید"
		echo -e "4. محدودیت های فایروال ➠ بررسی کنید که آیا پورت 80/443 برای اطمینان از تأیید صحت باز است"
		echo -e "5. تعداد برنامه ها از حد مجاز فراتر می رود ➠ بیایید رمزگذاری کنیم دارای محدودیت هفتگی (5 بار/نام دامنه/هفته) است"
		break_end
		clear
		echo "لطفا دوباره امتحان کنید$webname"
		add_yuming
		install_ssltls
		certs_status
	fi

}


repeat_add_yuming() {
if [ -e /home/web/conf.d/$yuming.conf ]; then
  send_stats "استفاده مجدد از نام دامنه"
  web_del "${yuming}" > /dev/null 2>&1
fi

}


add_yuming() {
	  ip_address
	  echo -e "ابتدا نام دامنه را به IP محلی حل کنید:${gl_huang}$ipv4_address  $ipv6_address${gl_bai}"
	  read -e -p "لطفاً IP یا نام دامنه حل شده خود را وارد کنید:" yuming
}


add_db() {
	  dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g')
	  dbname="${dbname}"

	  dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
	  dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
	  dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
	  docker exec mysql mysql -u root -p"$dbrootpasswd" -e "CREATE DATABASE $dbname; GRANT ALL PRIVILEGES ON $dbname.* TO \"$dbuse\"@\"%\";"
}

reverse_proxy() {
	  ip_address
	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  sed -i "s/0.0.0.0/$ipv4_address/g" /home/web/conf.d/$yuming.conf
	  sed -i "s|0000|$duankou|g" /home/web/conf.d/$yuming.conf
	  nginx_http_on
	  docker exec nginx nginx -s reload
}


restart_redis() {
  rm -rf /home/web/redis/*
  docker exec redis redis-cli FLUSHALL > /dev/null 2>&1
  docker exec -it redis redis-cli CONFIG SET maxmemory 512mb > /dev/null 2>&1
  docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /dev/null 2>&1
  docker exec -it redis redis-cli CONFIG SET save "" > /dev/null 2>&1
  docker exec -it redis redis-cli CONFIG SET appendonly no > /dev/null 2>&1
}



restart_ldnmp() {
	  restart_redis
	  docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1
	  docker exec nginx mkdir -p /var/cache/nginx/proxy > /dev/null 2>&1
	  docker exec nginx mkdir -p /var/cache/nginx/fastcgi > /dev/null 2>&1
	  docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy > /dev/null 2>&1
	  docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi > /dev/null 2>&1
	  docker exec php chown -R www-data:www-data /var/www/html > /dev/null 2>&1
	  docker exec php74 chown -R www-data:www-data /var/www/html > /dev/null 2>&1
	  cd /home/web && docker compose restart nginx php php74

}

nginx_upgrade() {

  local ldnmp_pods="nginx"
  cd /home/web/
  docker rm -f $ldnmp_pods > /dev/null 2>&1
  docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
  docker images --filter=reference="${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
  docker compose up -d --force-recreate $ldnmp_pods
  crontab -l 2>/dev/null | grep -v 'logrotate' | crontab -
  (crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab -
  docker exec nginx chown -R nginx:nginx /var/www/html
  docker exec nginx mkdir -p /var/cache/nginx/proxy
  docker exec nginx mkdir -p /var/cache/nginx/fastcgi
  docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy
  docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi
  docker restart $ldnmp_pods > /dev/null 2>&1

  send_stats "تمدید کردن$ldnmp_pods"
  echo "تمدید کردن${ldnmp_pods}پایان"

}

phpmyadmin_upgrade() {
  local ldnmp_pods="phpmyadmin"
  local local docker_port=8877
  local dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
  local dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')

  cd /home/web/
  docker rm -f $ldnmp_pods > /dev/null 2>&1
  docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
  curl -sS -O https://raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml
  docker compose -f docker-compose.phpmyadmin.yml up -d
  clear
  ip_address

  check_docker_app_ip
  echo "اطلاعات ورود به سیستم:"
  echo "نام کاربری:$dbuse"
  echo "رمز عبور:$dbusepasswd"
  echo
  send_stats "شروع کردن$ldnmp_pods"
}


cf_purge_cache() {
  local CONFIG_FILE="/home/web/config/cf-purge-cache.txt"
  local API_TOKEN
  local EMAIL
  local ZONE_IDS

  # بررسی کنید که آیا پرونده پیکربندی وجود دارد
  if [ -f "$CONFIG_FILE" ]; then
	# از پرونده های پیکربندی api_token و Zone_id را بخوانید
	read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE"
	# تبدیل Zone_ids به یک آرایه
	ZONE_IDS=($ZONE_IDS)
  else
	# کاربر را برای تمیز کردن حافظه نهان راهنمایی کنید
	read -e -p "آیا نیاز به تمیز کردن حافظه پنهان Cloudflare دارید؟ (y/n):" answer
	if [[ "$answer" == "y" ]]; then
	  echo "اطلاعات CF ذخیره می شود$CONFIG_FILE، بعداً می توانید اطلاعات CF را تغییر دهید"
	  read -e -p "لطفاً API_TOKEN خود را وارد کنید:" API_TOKEN
	  read -e -p "لطفا نام کاربری CF خود را وارد کنید:" EMAIL
	  read -e -p "لطفاً Zone_Id را وارد کنید (چند برابر با فضاها از هم جدا شده است):" -a ZONE_IDS

	  mkdir -p /home/web/config/
	  echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE"
	fi
  fi

  # از طریق هر Zone_id حلقه کنید و دستور حافظه پنهان را اجرا کنید
  for ZONE_ID in "${ZONE_IDS[@]}"; do
	echo "پاک کردن حافظه پنهان برای Zone_ID:$ZONE_ID"
	curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
	-H "X-Auth-Email: $EMAIL" \
	-H "X-Auth-Key: $API_TOKEN" \
	-H "Content-Type: application/json" \
	--data '{"purge_everything":true}'
  done

  echo "درخواست Cache Clear ارسال شده است."
}



web_cache() {
  send_stats "حافظه پنهان سایت را تمیز کنید"
  cf_purge_cache
  docker exec php php -r 'opcache_reset();'
  docker exec php74 php -r 'opcache_reset();'
  docker exec nginx nginx -s stop
  docker exec nginx rm -rf /var/cache/nginx/*
  docker exec nginx nginx
  docker restart redis
  restart_redis
}



web_del() {

	send_stats "داده های سایت را حذف کنید"
	yuming_list="${1:-}"
	if [ -z "$yuming_list" ]; then
		read -e -p "برای حذف داده های سایت ، لطفاً نام دامنه خود را وارد کنید (نام دامنه های چندگانه توسط فضاها از هم جدا می شوند):" yuming_list
		if [[ -z "$yuming_list" ]]; then
			return
		fi
	fi

	for yuming in $yuming_list; do
		echo "حذف نام دامنه:$yuming"
		rm -r /home/web/html/$yuming > /dev/null 2>&1
		rm /home/web/conf.d/$yuming.conf > /dev/null 2>&1
		rm /home/web/certs/${yuming}_key.pem > /dev/null 2>&1
		rm /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1

		# نام دامنه را به نام پایگاه داده تبدیل کنید
		dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g')
		dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')

		# بررسی کنید که آیا پایگاه داده قبل از حذف آن وجود دارد تا از خطا جلوگیری شود
		echo "حذف بانک اطلاعاتی:$dbname"
		docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1
	done

	docker exec nginx nginx -s reload

}


nginx_waf() {
	local mode=$1

	if ! grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then
		wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf"
	fi

	# تصمیم بگیرید WAF را با توجه به پارامتر حالت روشن یا خاموش کنید
	if [ "$mode" == "on" ]; then
		# WAF را روشن کنید: نظرات را حذف کنید
		sed -i 's|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
		sed -i 's|^\(\s*\)# modsecurity on;|\1modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1
		sed -i 's|^\(\s*\)# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1
	elif [ "$mode" == "off" ]; then
		# بستن WAF: اضافه کردن نظرات
		sed -i 's|^load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
		sed -i 's|^\(\s*\)modsecurity on;|\1# modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1
		sed -i 's|^\(\s*\)modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1
	else
		echo "پارامتر نامعتبر: از "ON" یا "خاموش" استفاده کنید"
		return 1
	fi

	# تصاویر nginx را بررسی کنید و مطابق با وضعیت آنها را کنترل کنید
	if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then
		docker exec nginx nginx -s reload
	else
		sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml
		nginx_upgrade
	fi

}

check_waf_status() {
	if grep -q "^\s*#\s*modsecurity on;" /home/web/nginx.conf; then
		waf_status=""
	elif grep -q "modsecurity on;" /home/web/nginx.conf; then
		waf_status=" WAF已开启"
	else
		waf_status=""
	fi
}


check_cf_mode() {
	if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then
		CFmessage=" cf模式已开启"
	else
		CFmessage=""
	fi
}


nginx_http_on() {

local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$'
if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then
	sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf
fi

}




















check_docker_app() {

if docker inspect "$docker_name" &>/dev/null; then
	check_docker="${gl_lv}已安装${gl_bai}"
else
	check_docker="${gl_hui}未安装${gl_bai}"
fi

}


check_docker_app_ip() {
echo "------------------------"
echo "آدرس دسترسی:"
ip_address
if [ -n "$ipv4_address" ]; then
	echo "http://$ipv4_address:${docker_port}"
fi

if [ -n "$ipv6_address" ]; then
	echo "http://[$ipv6_address]:${docker_port}"
fi

local search_pattern="$ipv4_address:${docker_port}"

for file in /home/web/conf.d/*; do
	if [ -f "$file" ]; then
		if grep -q "$search_pattern" "$file" 2>/dev/null; then
			echo "https://$(basename "$file" | sed 's/\.conf$//')"
		fi
	fi
done

}


check_docker_image_update() {

	local container_name=$1

	local country=$(curl -s ipinfo.io/country)
	if [[ "$country" == "CN" ]]; then
		update_status=""
		return
	fi

	# زمان و نام تصویر ایجاد کانتینر را دریافت کنید
	local container_info=$(docker inspect --format='{{.Created}},{{.Config.Image}}' "$container_name" 2>/dev/null)
	local container_created=$(echo "$container_info" | cut -d',' -f1)
	local image_name=$(echo "$container_info" | cut -d',' -f2)

	# انبارهای آینه و برچسب ها را استخراج کنید
	local image_repo=${image_name%%:*}
	local image_tag=${image_name##*:}

	# برچسب پیش فرض آخرین است
	[[ "$image_repo" == "$image_tag" ]] && image_tag="latest"

	# پشتیبانی از تصاویر رسمی را اضافه کنید
	[[ "$image_repo" != */* ]] && image_repo="library/$image_repo"

	# زمان انتشار تصویر را از Docker Hub API دریافت کنید
	local hub_info=$(curl -s "https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag")
	local last_updated=$(echo "$hub_info" | jq -r '.last_updated' 2>/dev/null)

	# زمان کسب را تأیید کنید
	if [[ -n "$last_updated" && "$last_updated" != "null" ]]; then
		local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null)
		local last_updated_ts=$(date -d "$last_updated" +%s 2>/dev/null)

		# مقایسه های زمانی را مقایسه کنید
		if [[ $container_created_ts -lt $last_updated_ts ]]; then
			update_status="${gl_huang}发现新版本!${gl_bai}"
		else
			update_status=""
		fi
	else
		update_status=""
	fi

}




block_container_port() {
	local container_name_or_id=$1
	local allowed_ip=$2

	# آدرس IP ظرف را دریافت کنید
	local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id")

	if [ -z "$container_ip" ]; then
		echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است."
		return 1
	fi

	install iptables


	# همه IP های دیگر را بررسی و مسدود کنید
	if ! iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then
		iptables -I DOCKER-USER -p tcp -d "$container_ip" -j DROP
	fi

	# IP مشخص شده را بررسی و آزاد کنید
	if ! iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
	fi

	# شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید
	if ! iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -I DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
	fi



	# همه IP های دیگر را بررسی و مسدود کنید
	if ! iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then
		iptables -I DOCKER-USER -p udp -d "$container_ip" -j DROP
	fi

	# IP مشخص شده را بررسی و آزاد کنید
	if ! iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
	fi

	# شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید
	if ! iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -I DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
	fi

	if ! iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -I DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT
	fi


	echo "درگاه های IP از دسترسی به سرویس مسدود شده اند"
	save_iptables_rules
}




clear_container_rules() {
	local container_name_or_id=$1
	local allowed_ip=$2

	# آدرس IP ظرف را دریافت کنید
	local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id")

	if [ -z "$container_ip" ]; then
		echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است."
		return 1
	fi

	install iptables


	# قوانین روشن که همه IP های دیگر را مسدود می کند
	if iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then
		iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP
	fi

	# قوانین انتشار IP مشخص شده را پاک کنید
	if iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -D DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
	fi

	# قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید
	if iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -D DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
	fi





	# قوانین روشن که همه IP های دیگر را مسدود می کند
	if iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then
		iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP
	fi

	# قوانین انتشار IP مشخص شده را پاک کنید
	if iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
	fi

	# قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید
	if iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -D DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
	fi


	if iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then
		iptables -D DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT
	fi


	echo "درگاه های IP+مجاز به دسترسی به سرویس هستند"
	save_iptables_rules
}






block_host_port() {
	local port=$1
	local allowed_ip=$2

	if [[ -z "$port" || -z "$allowed_ip" ]]; then
		echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید."
		echo "استفاده: block_host_port <شماره پورت> <مجاز IP>"
		return 1
	fi

	install iptables


	# دسترسی به IP دیگر را رد کرد
	if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then
		iptables -I INPUT -p tcp --dport "$port" -j DROP
	fi

	# دسترسی به IP مشخص شده
	if ! iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
		iptables -I INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT
	fi

	# دسترسی به محلی
	if ! iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
		iptables -I INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
	fi





	# دسترسی به IP دیگر را رد کرد
	if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then
		iptables -I INPUT -p udp --dport "$port" -j DROP
	fi

	# دسترسی به IP مشخص شده
	if ! iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
		iptables -I INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT
	fi

	# دسترسی به محلی
	if ! iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
		iptables -I INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
	fi

	# اجازه ترافیک برای اتصالات ایجاد شده و مرتبط را داشته باشید
	if ! iptables -C INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &>/dev/null; then
		iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
	fi

	echo "درگاه های IP از دسترسی به سرویس مسدود شده اند"
	save_iptables_rules
}




clear_host_port_rules() {
	local port=$1
	local allowed_ip=$2

	if [[ -z "$port" || -z "$allowed_ip" ]]; then
		echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید."
		echo "استفاده: clear_host_port_rules <شماره پورت> <مجاز IP>"
		return 1
	fi

	install iptables


	# قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند
	if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then
		iptables -D INPUT -p tcp --dport "$port" -j DROP
	fi

	# قوانین روشن که امکان دسترسی بومی را فراهم می کند
	if iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
		iptables -D INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
	fi

	# قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند
	if iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
		iptables -D INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT
	fi


	# قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند
	if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then
		iptables -D INPUT -p udp --dport "$port" -j DROP
	fi

	# قوانین روشن که امکان دسترسی بومی را فراهم می کند
	if iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
		iptables -D INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
	fi

	# قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند
	if iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
		iptables -D INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT
	fi


	echo "درگاه های IP+مجاز به دسترسی به سرویس هستند"
	save_iptables_rules

}





docker_app() {
send_stats "${docker_name}مدیریت کردن"

while true; do
	clear
	check_docker_app
	check_docker_image_update $docker_name
	echo -e "$docker_name $check_docker $update_status"
	echo "$docker_describe"
	echo "$docker_url"
	if docker inspect "$docker_name" &>/dev/null; then
		local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}')
		docker_port=${docker_port:-0000}
		check_docker_app_ip
	fi
	echo ""
	echo "------------------------"
	echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
	echo "------------------------"
	echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
	echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" choice
	 case $choice in
		1)
			check_disk_space $app_size
			read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port
			local app_port=${app_port:-${docker_port}}
			local docker_port=$app_port

			install jq
			install_docker
			docker_rum
			clear
			echo "$docker_nameنصب شده"
			check_docker_app_ip
			echo ""
			$docker_use
			$docker_passwd
			send_stats "نصب کردن$docker_name"
			;;
		2)
			docker rm -f "$docker_name"
			docker rmi -f "$docker_img"
			docker_rum
			clear
			echo "$docker_nameنصب شده"
			check_docker_app_ip
			echo ""
			$docker_use
			$docker_passwd
			send_stats "تمدید کردن$docker_name"
			;;
		3)
			docker rm -f "$docker_name"
			docker rmi -f "$docker_img"
			rm -rf "/home/docker/$docker_name"
			echo "برنامه حذف شده است"
			send_stats "حذف کردن$docker_name"
			;;

		5)
			echo "${docker_name}تنظیمات دسترسی دامنه"
			send_stats "${docker_name}تنظیمات دسترسی دامنه"
			add_yuming
			ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
			block_container_port "$docker_name" "$ipv4_address"
			;;

		6)
			echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
			web_del
			;;

		7)
			send_stats "دسترسی به IP${docker_name}"
			clear_container_rules "$docker_name" "$ipv4_address"
			;;

		8)
			send_stats "دسترسی به IP${docker_name}"
			block_container_port "$docker_name" "$ipv4_address"
			;;

		*)
			break
			;;
	 esac
	 break_end
done

}






docker_app_plus() {
	send_stats "$app_name"
	while true; do
		clear
		check_docker_app
		check_docker_image_update $docker_name
		echo -e "$app_name $check_docker $update_status"
		echo "$app_text"
		echo "$app_url"
		if docker inspect "$docker_name" &>/dev/null; then
			local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}')
			docker_port=${docker_port:-0000}
			check_docker_app_ip
		fi
		echo ""
		echo "------------------------"
		echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
		echo "------------------------"
		echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
		echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "انتخاب خود را وارد کنید:" choice
		case $choice in
			1)
				check_disk_space $app_size
				read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port
				local app_port=${app_port:-${docker_port}}
				local docker_port=$app_port
				install jq
				install_docker
				docker_app_install
				;;
			2)
				docker_app_update
				;;
			3)
				docker_app_uninstall
				;;
			5)
				echo "${docker_name}تنظیمات دسترسی دامنه"
				send_stats "${docker_name}تنظیمات دسترسی دامنه"
				add_yuming
				ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
				block_container_port "$docker_name" "$ipv4_address"
				;;
			6)
				echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
				web_del
				;;
			7)
				send_stats "دسترسی به IP${docker_name}"
				clear_container_rules "$docker_name" "$ipv4_address"
				;;
			8)
				send_stats "دسترسی به IP${docker_name}"
				block_container_port "$docker_name" "$ipv4_address"
				;;
			*)
				break
				;;
		esac
		break_end
	done
}





prometheus_install() {

local PROMETHEUS_DIR="/home/docker/monitoring/prometheus"
local GRAFANA_DIR="/home/docker/monitoring/grafana"
local NETWORK_NAME="monitoring"

# Create necessary directories
mkdir -p $PROMETHEUS_DIR
mkdir -p $GRAFANA_DIR

# Set correct ownership for Grafana directory
chown -R 472:472 $GRAFANA_DIR

if [ ! -f "$PROMETHEUS_DIR/prometheus.yml" ]; then
	curl -o "$PROMETHEUS_DIR/prometheus.yml" ${gh_proxy}raw.githubusercontent.com/kejilion/config/refs/heads/main/prometheus/prometheus.yml
fi

# Create Docker network for monitoring
docker network create $NETWORK_NAME

# Run Node Exporter container
docker run -d \
  --name=node-exporter \
  --network $NETWORK_NAME \
  --restart unless-stopped \
  prom/node-exporter

# Run Prometheus container
docker run -d \
  --name prometheus \
  -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v $PROMETHEUS_DIR/data:/prometheus \
  --network $NETWORK_NAME \
  --restart unless-stopped \
  --user 0:0 \
  prom/prometheus:latest

# Run Grafana container
docker run -d \
  --name grafana \
  -p ${docker_port}:3000 \
  -v $GRAFANA_DIR:/var/lib/grafana \
  --network $NETWORK_NAME \
  --restart unless-stopped \
  grafana/grafana:latest

}




tmux_run() {
	# Check if the session already exists
	tmux has-session -t $SESSION_NAME 2>/dev/null
	# $? is a special variable that holds the exit status of the last executed command
	if [ $? != 0 ]; then
	  # Session doesn't exist, create a new one
	  tmux new -s $SESSION_NAME
	else
	  # Session exists, attach to it
	  tmux attach-session -t $SESSION_NAME
	fi
}


tmux_run_d() {

local base_name="tmuxd"
local tmuxd_ID=1

# توابعی که بررسی می کنند جلسه وجود دارد
session_exists() {
  tmux has-session -t $1 2>/dev/null
}

# حلقه تا زمانی که نام جلسه غیر موجود پیدا شود
while session_exists "$base_name-$tmuxd_ID"; do
  local tmuxd_ID=$((tmuxd_ID + 1))
done

# یک جلسه TMUX جدید ایجاد کنید
tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd"


}



f2b_status() {
	 docker exec -it fail2ban fail2ban-client reload
	 sleep 3
	 docker exec -it fail2ban fail2ban-client status
}

f2b_status_xxx() {
	docker exec -it fail2ban fail2ban-client status $xxx
}

f2b_install_sshd() {

	docker run -d \
		--name=fail2ban \
		--net=host \
		--cap-add=NET_ADMIN \
		--cap-add=NET_RAW \
		-e PUID=1000 \
		-e PGID=1000 \
		-e TZ=Etc/UTC \
		-e VERBOSITY=-vv \
		-v /path/to/fail2ban/config:/config \
		-v /var/log:/var/log:ro \
		-v /home/web/log/nginx/:/remotelogs/nginx:ro \
		--restart unless-stopped \
		lscr.io/linuxserver/fail2ban:latest

	sleep 3
	if grep -q 'Alpine' /etc/issue; then
		cd /path/to/fail2ban/config/fail2ban/filter.d
		curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd.conf
		curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf
		cd /path/to/fail2ban/config/fail2ban/jail.d/
		curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-ssh.conf
	elif command -v dnf &>/dev/null; then
		cd /path/to/fail2ban/config/fail2ban/jail.d/
		curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf
	else
		install rsyslog
		systemctl start rsyslog
		systemctl enable rsyslog
		cd /path/to/fail2ban/config/fail2ban/jail.d/
		curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/linux-ssh.conf
		systemctl restart rsyslog
	fi
}

f2b_sshd() {
	if grep -q 'Alpine' /etc/issue; then
		xxx=alpine-sshd
		f2b_status_xxx
	elif command -v dnf &>/dev/null; then
		xxx=centos-sshd
		f2b_status_xxx
	else
		xxx=linux-sshd
		f2b_status_xxx
	fi
}






server_reboot() {

	read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗？(Y/N): ")" rboot
	case "$rboot" in
	  [Yy])
		echo "مجدداً"
		reboot
		;;
	  *)
		echo "لغو شده"
		;;
	esac


}

output_status() {
	output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 }
		# مطابقت با نام کارتهای شبکه عمومی عمومی: ETH*، ENS*، ENP*، ENO*
		$1 ~ /^(eth|ens|enp|eno)[0-9]+/ {
			rx_total += $2
			tx_total += $10
		}
		END {
			rx_units = "Bytes";
			tx_units = "Bytes";
			if (rx_total > 1024) { rx_total /= 1024; rx_units = "K"; }
			if (rx_total > 1024) { rx_total /= 1024; rx_units = "M"; }
			if (rx_total > 1024) { rx_total /= 1024; rx_units = "G"; }

			if (tx_total > 1024) { tx_total /= 1024; tx_units = "K"; }
			if (tx_total > 1024) { tx_total /= 1024; tx_units = "M"; }
			if (tx_total > 1024) { tx_total /= 1024; tx_units = "G"; }

			printf("总接收:       %.2f%s\n总发送:       %.2f%s\n", rx_total, rx_units, tx_total, tx_units);
		}' /proc/net/dev)
	# echo "$output"
}



ldnmp_install_status_one() {

   if docker inspect "php" &>/dev/null; then
	clear
	send_stats "دوباره نصب محیط LDNMP امکان پذیر نیست"
	echo -e "${gl_huang}نکته:${gl_bai}محیط ساخت وب سایت نصب شده است. نیازی به نصب مجدد نیست!"
	break_end
	linux_ldnmp
   fi

}


ldnmp_install_all() {
cd ~
send_stats "محیط LDNMP را نصب کنید"
root_use
clear
echo -e "${gl_huang}محیط LDNMP نصب نشده است ، شروع به نصب محیط LDNMP ...${gl_bai}"
check_disk_space 3
check_port
install_dependency
install_docker
install_certbot
install_ldnmp_conf
install_ldnmp

}


nginx_install_all() {
cd ~
send_stats "محیط nginx را نصب کنید"
root_use
clear
echo -e "${gl_huang}nginx نصب نشده است ، شروع به نصب محیط nginx ...${gl_bai}"
check_disk_space 1
check_port
install_dependency
install_docker
install_certbot
install_ldnmp_conf
nginx_upgrade
clear
local nginx_version=$(docker exec nginx nginx -v 2>&1)
local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+")
echo "nginx نصب شده است"
echo -e "نسخه فعلی:${gl_huang}v$nginx_version${gl_bai}"
echo ""

}




ldnmp_install_status() {

	if ! docker inspect "php" &>/dev/null; then
		send_stats "لطفاً ابتدا محیط LDNMP را نصب کنید"
		ldnmp_install_all
	fi

}


nginx_install_status() {

	if ! docker inspect "nginx" &>/dev/null; then
		send_stats "لطفاً ابتدا محیط nginx را نصب کنید"
		nginx_install_all
	fi

}




ldnmp_web_on() {
	  clear
	  echo "مال شما$webnameساخته شده!"
	  echo "https://$yuming"
	  echo "------------------------"
	  echo "$webnameاطلاعات نصب به شرح زیر است:"

}

nginx_web_on() {
	  clear
	  echo "مال شما$webnameساخته شده!"
	  echo "https://$yuming"

}



ldnmp_wp() {
  clear
  # wordpress
  webname="WordPress"
  yuming="${1:-}"
  send_stats "نصب کردن$webname"
  echo "استقرار را شروع کنید$webname"
  if [ -z "$yuming" ]; then
	add_yuming
  fi
  repeat_add_yuming
  ldnmp_install_status
  install_ssltls
  certs_status
  add_db
  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/wordpress.com.conf
  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
  nginx_http_on

  cd /home/web/html
  mkdir $yuming
  cd $yuming
  wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-latest.zip
  # wget -O latest.zip https://cn.wordpress.org/latest-zh_CN.zip
  # wget -O latest.zip https://wordpress.org/latest.zip
  unzip latest.zip
  rm latest.zip
  echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379');" >> /home/web/html/$yuming/wordpress/wp-config-sample.php
  sed -i "s|database_name_here|$dbname|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
  sed -i "s|username_here|$dbuse|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
  sed -i "s|password_here|$dbusepasswd|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
  sed -i "s|localhost|mysql|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
  cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php

  restart_ldnmp
  nginx_web_on
# echo "نام پایگاه داده: $ dbname"
# اکو "نام کاربری: $ dbuse"
# ECHO "رمز عبور: $ dbusepasswd"
# ECHO "آدرس پایگاه داده: MySQL"
# ECHO "پیشوند جدول: WP_"

}


ldnmp_Proxy() {
	clear
	webname="反向代理-IP+端口"
	yuming="${1:-}"
	reverseproxy="${2:-}"
	port="${3:-}"

	send_stats "نصب کردن$webname"
	echo "استقرار را شروع کنید$webname"
	if [ -z "$yuming" ]; then
		add_yuming
	fi
	if [ -z "$reverseproxy" ]; then
		read -e -p "لطفاً IP ضد نسل خود را وارد کنید:" reverseproxy
	fi

	if [ -z "$port" ]; then
		read -e -p "لطفاً درگاه ضد نسل خود را وارد کنید:" port
	fi
	nginx_install_status
	install_ssltls
	certs_status
	wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf
	sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	sed -i "s/0.0.0.0/$reverseproxy/g" /home/web/conf.d/$yuming.conf
	sed -i "s|0000|$port|g" /home/web/conf.d/$yuming.conf
	nginx_http_on
	docker exec nginx nginx -s reload
	nginx_web_on
}



ldnmp_Proxy_backend() {
	clear
	webname="反向代理-负载均衡"
	yuming="${1:-}"
	reverseproxy_port="${2:-}"

	send_stats "نصب کردن$webname"
	echo "استقرار را شروع کنید$webname"
	if [ -z "$yuming" ]; then
		add_yuming
	fi

	# دریافت چندین IP توسط کاربر: پورت ها (جدا شده توسط فضاها)
	if [ -z "$reverseproxy_port" ]; then
		read -e -p "لطفاً چندین پورت IP+ ضد نسل خود را که توسط فضاها از هم جدا شده اند وارد کنید (به عنوان مثال ، 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port
	fi

	nginx_install_status
	install_ssltls
	certs_status
	wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf

	backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8)
	sed -i "s/backend_yuming_com/backend_$backend/g" /home/web/conf.d/"$yuming".conf


	sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf

	# به صورت پویا پیکربندی بالادست تولید می کند
	upstream_servers=""
	for server in $reverseproxy_port; do
		upstream_servers="$upstream_servers    server $server;\n"
	done

	# متغیرها را در قالب ها جایگزین کنید
	sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf

	nginx_http_on
	docker exec nginx nginx -s reload
	nginx_web_on
}




ldnmp_web_status() {
	root_use
	while true; do
		local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l)
		local output="站点: ${gl_lv}${cert_count}${gl_bai}"

		local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
		local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l)
		local db_output="数据库: ${gl_lv}${db_count}${gl_bai}"

		clear
		send_stats "مدیریت سایت LDNMP"
		echo "محیط LDNMP"
		echo "------------------------"
		ldnmp_v

		# ls -t /home/web/conf.d | sed 's/\.[^.]*$//'
		echo -e "${output}زمان انقضا گواهی"
		echo -e "------------------------"
		for cert_file in /home/web/certs/*_cert.pem; do
		  local domain=$(basename "$cert_file" | sed 's/_cert.pem//')
		  if [ -n "$domain" ]; then
			local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}')
			local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d')
			printf "%-30s%s\n" "$domain" "$formatted_date"
		  fi
		done

		echo "------------------------"
		echo ""
		echo -e "${db_output}"
		echo -e "------------------------"
		local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
		docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys"

		echo "------------------------"
		echo ""
		echo "فهرست سایت"
		echo "------------------------"
		echo -e "داده${gl_hui}/home/web/html${gl_bai}گواهی${gl_hui}/home/web/certs${gl_bai}پیکربندی${gl_hui}/home/web/conf.d${gl_bai}"
		echo "------------------------"
		echo ""
		echo "عمل کردن"
		echo "------------------------"
		echo "1. درخواست/به روزرسانی گواهی نام دامنه 2. نام دامنه سایت را تغییر دهید"
		echo "3. حافظه پنهان سایت را تمیز کنید. یک سایت مرتبط ایجاد کنید"
		echo "5. مشاهده ورود به سیستم دسترسی 6. مشاهده خطای خطای"
		echo "7. ویرایش پیکربندی جهانی 8. پیکربندی سایت را ویرایش کنید"
		echo "9. مدیریت پایگاه داده سایت 10. مشاهده گزارش تجزیه و تحلیل سایت"
		echo "------------------------"
		echo "20. داده های سایت مشخص شده را حذف کنید"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
		case $sub_choice in
			1)
				send_stats "برای گواهی نام دامنه اقدام کنید"
				read -e -p "لطفاً نام دامنه خود را وارد کنید:" yuming
				install_certbot
				docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null
				install_ssltls
				certs_status

				;;

			2)
				send_stats "نام دامنه سایت را تغییر دهید"
				echo -e "${gl_hong}بسیار توصیه می شود:${gl_bai}ابتدا از کل داده های سایت نسخه پشتیبان تهیه کرده و سپس نام دامنه سایت را تغییر دهید!"
				read -e -p "لطفاً نام دامنه قدیمی را وارد کنید:" oddyuming
				read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming
				install_certbot
				install_ssltls
				certs_status

				# جایگزینی mysql
				add_db

				local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g')
				local odd_dbname="${odd_dbname}"

				docker exec mysql mysqldump -u root -p"$dbrootpasswd" $odd_dbname | docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname
				docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE $odd_dbname;"


				local tables=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW TABLES;" | awk '{ if (NR>1) print $1 }')
				for table in $tables; do
					columns=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW COLUMNS FROM $table;" | awk '{ if (NR>1) print $1 }')
					for column in $columns; do
						docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "UPDATE $table SET $column = REPLACE($column, '$oddyuming', '$yuming') WHERE $column LIKE '%$oddyuming%';"
					done
				done

				# جایگزینی فهرست وب سایت
				mv /home/web/html/$oddyuming /home/web/html/$yuming

				find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} +
				find /home/web/html/$yuming -type f -exec sed -i "s/$oddyuming/$yuming/g" {} +

				mv /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf
				sed -i "s/$oddyuming/$yuming/g" /home/web/conf.d/$yuming.conf

				rm /home/web/certs/${oddyuming}_key.pem
				rm /home/web/certs/${oddyuming}_cert.pem

				docker exec nginx nginx -s reload

				;;


			3)
				web_cache
				;;
			4)
				send_stats "یک سایت مرتبط ایجاد کنید"
				echo -e "نام دامنه جدیدی را برای سایت موجود برای دسترسی مرتبط کنید"
				read -e -p "لطفاً نام دامنه موجود را وارد کنید:" oddyuming
				read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming
				install_certbot
				install_ssltls
				certs_status

				cp /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf
				sed -i "s|server_name $oddyuming|server_name $yuming|g" /home/web/conf.d/$yuming.conf
				sed -i "s|/etc/nginx/certs/${oddyuming}_cert.pem|/etc/nginx/certs/${yuming}_cert.pem|g" /home/web/conf.d/$yuming.conf
				sed -i "s|/etc/nginx/certs/${oddyuming}_key.pem|/etc/nginx/certs/${yuming}_key.pem|g" /home/web/conf.d/$yuming.conf

				docker exec nginx nginx -s reload

				;;
			5)
				send_stats "مشاهده ورود به سیستم دسترسی"
				tail -n 200 /home/web/log/nginx/access.log
				break_end
				;;
			6)
				send_stats "مشاهده خطای مشاهده"
				tail -n 200 /home/web/log/nginx/error.log
				break_end
				;;
			7)
				send_stats "پیکربندی جهانی را ویرایش کنید"
				install nano
				nano /home/web/nginx.conf
				docker exec nginx nginx -s reload
				;;

			8)
				send_stats "پیکربندی سایت را ویرایش کنید"
				read -e -p "برای ویرایش پیکربندی سایت ، لطفاً نام دامنه مورد نظر برای ویرایش را وارد کنید:" yuming
				install nano
				nano /home/web/conf.d/$yuming.conf
				docker exec nginx nginx -s reload
				;;
			9)
				phpmyadmin_upgrade
				break_end
				;;
			10)
				send_stats "مشاهده داده های سایت"
				install goaccess
				goaccess --log-format=COMBINED /home/web/log/nginx/access.log
				;;

			20)
				web_del
				docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null

				;;
			*)
				break  # 跳出循环，退出菜单
				;;
		esac
	done


}


check_panel_app() {
if $lujing ; then
	check_panel="${gl_lv}已安装${gl_bai}"
else
	check_panel=""
fi
}



install_panel() {
send_stats "${panelname}مدیریت کردن"
while true; do
	clear
	check_panel_app
	echo -e "$panelname $check_panel"
	echo "${panelname}امروزه این یک هیئت مدیره عملیاتی و مدیریت نگهداری محبوب و قدرتمند است."
	echo "معرفی رسمی وب سایت:$panelurl "

	echo ""
	echo "------------------------"
	echo "1. نصب 2. مدیریت 3. حذف نصب کنید"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" choice
	 case $choice in
		1)
			check_disk_space 1
			install wget
			iptables_open
			panel_app_install
			send_stats "${panelname}نصب کردن"
			;;
		2)
			panel_app_manage
			send_stats "${panelname}کنترل کردن"

			;;
		3)
			panel_app_uninstall
			send_stats "${panelname}حذف کردن"
			;;
		*)
			break
			;;
	 esac
	 break_end
done

}



check_frp_app() {

if [ -d "/home/frp/" ]; then
	check_frp="${gl_lv}已安装${gl_bai}"
else
	check_frp="${gl_hui}未安装${gl_bai}"
fi

}



donlond_frp() {
	mkdir -p /home/frp/ && cd /home/frp/
	rm -rf /home/frp/frp_0.61.0_linux_amd64

	arch=$(uname -m)
	frp_v=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep -oP '"tag_name": "v\K.*?(?=")')

	if [[ "$arch" == "x86_64" ]]; then
		curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_amd64.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz
	elif [[ "$arch" == "armv7l" || "$arch" == "aarch64" ]]; then
		curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_arm.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz
	else
		echo "معماری CPU فعلی پشتیبانی نمی شود:$arch"
	fi

	# آخرین پرونده FRP بارگیری شده را پیدا کنید
	latest_file=$(ls -t /home/frp/frp_*.tar.gz | head -n 1)

	# پرونده را از حالت فشرده خارج کنید
	tar -zxvf "$latest_file"

	# نام پوشه فشرده شده را دریافت کنید
	dir_name=$(tar -tzf "$latest_file" | head -n 1 | cut -f 1 -d '/')

	# پوشه را به نام نسخه یکپارچه تغییر نام دهید
	mv "$dir_name" "frp_0.61.0_linux_amd64"



}



generate_frps_config() {

	send_stats "سرور FRP را نصب کنید"
	# درگاه ها و اعتبارنامه های تصادفی تولید کنید
	local bind_port=8055
	local dashboard_port=8056
	local token=$(openssl rand -hex 16)
	local dashboard_user="user_$(openssl rand -hex 4)"
	local dashboard_pwd=$(openssl rand -hex 8)

	donlond_frp

	# یک فایل frps.toml ایجاد کنید
	cat <<EOF > /home/frp/frp_0.61.0_linux_amd64/frps.toml
[common]
bind_port = $bind_port
authentication_method = token
token = $token
dashboard_port = $dashboard_port
dashboard_user = $dashboard_user
dashboard_pwd = $dashboard_pwd
EOF

	# اطلاعات تولید شده
	ip_address
	echo "------------------------"
	echo "پارامترهای مورد نیاز برای استقرار مشتری"
	echo "سرویس IP:$ipv4_address"
	echo "token: $token"
	echo
	echo "اطلاعات پانل FRP"
	echo "آدرس پنل FRP: http: //$ipv4_address:$dashboard_port"
	echo "نام کاربری پنل FRP:$dashboard_user"
	echo "رمز عبور پنل FRP:$dashboard_pwd"
	echo
	echo "------------------------"
	install tmux
	tmux kill-session -t frps >/dev/null 2>&1
	tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"
	check_crontab_installed
	crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
	(crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1

	open_port 8055 8056

}



configure_frpc() {
	send_stats "مشتری FRP را نصب کنید"
	read -e -p "لطفاً IP Docking Network External را وارد کنید:" server_addr
	read -e -p "لطفاً توکن docking شبکه خارجی را وارد کنید:" token
	echo

	if command -v opkg >/dev/null 2>&1; then
		opkg update
		opkg install grep
	fi

	donlond_frp

	cat <<EOF > /home/frp/frp_0.61.0_linux_amd64/frpc.toml
[common]
server_addr = ${server_addr}
server_port = 8055
token = ${token}

EOF

	install tmux
	tmux kill-session -t frpc >/dev/null 2>&1
	tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
	check_crontab_installed
	crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
	(crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1

	open_port 8055

}

add_forwarding_service() {
	send_stats "سرویس Intranet FRP را اضافه کنید"
	# کاربر را وادار به وارد کردن نام سرویس و اطلاعات ارسال کنید
	read -e -p "لطفاً نام سرویس را وارد کنید:" service_name
	read -e -p "لطفاً نوع حمل و نقل (TCP/UDP) را وارد کنید [TCP پیش فرض] را وارد کنید:" service_type
	local service_type=${service_type:-tcp}
	read -e -p "لطفاً IP Intranet را وارد کنید [پیش فرض 127.0.0.1 را وارد کنید]:" local_ip
	local local_ip=${local_ip:-127.0.0.1}
	read -e -p "لطفاً درگاه اینترانت را وارد کنید:" local_port
	read -e -p "لطفاً درگاه شبکه خارجی را وارد کنید:" remote_port

	# ورودی کاربر را به پرونده پیکربندی بنویسید
	cat <<EOF >> /home/frp/frp_0.61.0_linux_amd64/frpc.toml
[$service_name]
type = ${service_type}
local_ip = ${local_ip}
local_port = ${local_port}
remote_port = ${remote_port}

EOF

	# اطلاعات تولید شده
	echo "خدمت کردن$service_nameبا موفقیت به frpc.toml اضافه شد"

	tmux kill-session -t frpc >/dev/null 2>&1
	tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"

	open_port $local_port

}



delete_forwarding_service() {
	send_stats "سرویس Intranet FRP را حذف کنید"
	# کاربر را وادار به وارد کردن نام خدماتی که باید حذف شود
	read -e -p "لطفاً نام خدماتی را که باید حذف شود وارد کنید:" service_name
	# برای حذف سرویس و تنظیمات مربوط به آن از SED استفاده کنید
	sed -i "/\[$service_name\]/,/^$/d" /home/frp/frp_0.61.0_linux_amd64/frpc.toml
	echo "خدمت کردن$service_nameبا موفقیت از frpc.toml حذف شد"

	tmux kill-session -t frpc >/dev/null 2>&1
	tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"

}


list_forwarding_services() {
	local config_file="$1"

	# هدر را چاپ کنید
	printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议"

	awk '
	BEGIN {
		server_addr=""
		server_port=""
		current_service=""
	}

	/^server_addr = / {
		gsub(/"|'"'"'/, "", $3)
		server_addr=$3
	}

	/^server_port = / {
		gsub(/"|'"'"'/, "", $3)
		server_port=$3
	}

	/^\[.*\]/ {
		# اگر اطلاعات سرویس وجود دارد ، قبل از پردازش سرویس جدید ، سرویس فعلی را چاپ کنید
		if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") {
			printf "%-16s %-21s %-26s %-10s\n", \
				current_service, \
				local_ip ":" local_port, \
				server_addr ":" remote_port, \
				type
		}

		# نام سرویس فعلی را به روز کنید
		if ($1 != "[common]") {
			gsub(/[\[\]]/, "", $1)
			current_service=$1
			# مقدار قبلی را پاک کنید
			local_ip=""
			local_port=""
			remote_port=""
			type=""
		}
	}

	/^local_ip = / {
		gsub(/"|'"'"'/, "", $3)
		local_ip=$3
	}

	/^local_port = / {
		gsub(/"|'"'"'/, "", $3)
		local_port=$3
	}

	/^remote_port = / {
		gsub(/"|'"'"'/, "", $3)
		remote_port=$3
	}

	/^type = / {
		gsub(/"|'"'"'/, "", $3)
		type=$3
	}

	END {
		# اطلاعات را برای آخرین سرویس چاپ کنید
		if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") {
			printf "%-16s %-21s %-26s %-10s\n", \
				current_service, \
				local_ip ":" local_port, \
				server_addr ":" remote_port, \
				type
		}
	}' "$config_file"
}



# درگاه سرور FRP را دریافت کنید
get_frp_ports() {
	mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u)
}

# ایجاد آدرس دسترسی
generate_access_urls() {
	# ابتدا همه درگاه ها را دریافت کنید
	get_frp_ports

	# بررسی کنید که آیا پورت هایی غیر از 8055/8056 وجود دارد؟
	local has_valid_ports=false
	for port in "${ports[@]}"; do
		if [[ $port != "8055" && $port != "8056" ]]; then
			has_valid_ports=true
			break
		fi
	done

	# عنوان و محتوا را فقط در صورت وجود درگاه معتبر نشان دهید
	if [ "$has_valid_ports" = true ]; then
		echo "آدرس دسترسی خارجی خدمات FRP:"

		# پردازش آدرس IPv4
		for port in "${ports[@]}"; do
			if [[ $port != "8055" && $port != "8056" ]]; then
				echo "http://${ipv4_address}:${port}"
			fi
		done

		# پردازش آدرس های IPv6 (در صورت وجود)
		if [ -n "$ipv6_address" ]; then
			for port in "${ports[@]}"; do
				if [[ $port != "8055" && $port != "8056" ]]; then
					echo "http://[${ipv6_address}]:${port}"
				fi
			done
		fi

		# رسیدگی به پیکربندی HTTPS
		for port in "${ports[@]}"; do
			if [[ $port != "8055" && $port != "8056" ]]; then
				frps_search_pattern="${ipv4_address}:${port}"
				for file in /home/web/conf.d/*.conf; do
					if [ -f "$file" ]; then
						if grep -q "$frps_search_pattern" "$file" 2>/dev/null; then
							echo "https://$(basename "$file" .conf)"
						fi
					fi
				done
			fi
		done
	fi
}


frps_main_ports() {
	ip_address
	generate_access_urls
}




frps_panel() {
	send_stats "سرور FRP"
	local docker_port=8056
	while true; do
		clear
		check_frp_app
		echo -e "سرور FRP$check_frp"
		echo "برای افشای دستگاه ها بدون IP عمومی در اینترنت ، یک محیط سرویس نفوذ Intranet FRP ایجاد کنید"
		echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/"
		echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=124.0"
		if [ -d "/home/frp/" ]; then
			check_docker_app_ip
			frps_main_ports
		fi
		echo ""
		echo "------------------------"
		echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
		echo "------------------------"
		echo "5. دسترسی به نام دامنه برای سرویس Intranet 6. دسترسی به نام دامنه را حذف کنید"
		echo "------------------------"
		echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
		echo "------------------------"
		echo "00. وضعیت خدمات را تازه کنید. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "انتخاب خود را وارد کنید:" choice
		case $choice in
			1)
				generate_frps_config
				rm -rf /home/frp/*.tar.gz
				echo "سرور FRP نصب شده است"
				;;
			2)
				cp -f /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml
				donlond_frp
				cp -f /home/frp/frps.toml /home/frp/frp_0.61.0_linux_amd64/frps.toml
				tmux kill-session -t frps >/dev/null 2>&1
				tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"
				crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
				(crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1
				rm -rf /home/frp/*.tar.gz
				echo "سرور FRP به روز شده است"
				;;
			3)
				crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
				tmux kill-session -t frps >/dev/null 2>&1
				rm -rf /home/frp
				close_port 8055 8056

				echo "برنامه حذف شده است"
				;;
			5)
				echo "سرویس نفوذ اینترانت معکوس در دسترسی به نام دامنه"
				send_stats "دسترسی FRP به نام دامنه خارجی"
				add_yuming
				read -e -p "لطفاً درگاه سرویس نفوذ Intranet خود را وارد کنید:" frps_port
				ldnmp_Proxy ${yuming} ${ipv4_address} ${frps_port}
				block_host_port "$frps_port" "$ipv4_address"
				;;
			6)
				echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
				web_del
				;;

			7)
				send_stats "دسترسی به IP"
				read -e -p "لطفاً برای انتشار درگاه را وارد کنید:" frps_port
				clear_host_port_rules "$frps_port" "$ipv4_address"
				;;

			8)
				send_stats "دسترسی به IP"
				echo "اگر به نام دامنه ضد نسل دسترسی پیدا کرده اید ، می توانید از این عملکرد برای مسدود کردن دسترسی به پورت IP+ استفاده کنید ، که امنیت بیشتری دارد."
				read -e -p "لطفاً درگاه مورد نیاز خود را وارد کنید:" frps_port
				block_host_port "$frps_port" "$ipv4_address"
				;;

			00)
				send_stats "وضعیت سرویس FRP را تازه کنید"
				echo "وضعیت خدمات FRP تازه شده است"
				;;

			*)
				break
				;;
		esac
		break_end
	done
}


frpc_panel() {
	send_stats "مشتری FRP"
	local docker_port=8055
	while true; do
		clear
		check_frp_app
		echo -e "مشتری FRP$check_frp"
		echo "با اتصال به سرور ، پس از اتصال ، می توانید سرویس نفوذ اینترانت را به دسترسی به اینترنت ایجاد کنید"
		echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/"
		echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=173.9"
		echo "------------------------"
		if [ -d "/home/frp/" ]; then
			list_forwarding_services "/home/frp/frp_0.61.0_linux_amd64/frpc.toml"
		fi
		echo ""
		echo "------------------------"
		echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
		echo "------------------------"
		echo "4. اضافه کردن خدمات خارجی 5. خدمات خارجی را حذف کنید 6. پیکربندی خدمات به صورت دستی"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "انتخاب خود را وارد کنید:" choice
		case $choice in
			1)
				configure_frpc
				rm -rf /home/frp/*.tar.gz
				echo "مشتری FRP نصب شده است"
				;;
			2)
				cp -f /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml
				donlond_frp
				cp -f /home/frp/frpc.toml /home/frp/frp_0.61.0_linux_amd64/frpc.toml
				tmux kill-session -t frpc >/dev/null 2>&1
				tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
				crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
				(crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1
				rm -rf /home/frp/*.tar.gz
				echo "مشتری FRP به روز شده است"
				;;

			3)
				crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
				tmux kill-session -t frpc >/dev/null 2>&1
				rm -rf /home/frp
				close_port 8055
				echo "برنامه حذف شده است"
				;;

			4)
				add_forwarding_service
				;;

			5)
				delete_forwarding_service
				;;

			6)
				install nano
				nano /home/frp/frp_0.61.0_linux_amd64/frpc.toml
				tmux kill-session -t frpc >/dev/null 2>&1
				tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
				;;

			*)
				break
				;;
		esac
		break_end
	done
}




yt_menu_pro() {

	local VIDEO_DIR="/home/yt-dlp"
	local URL_FILE="$VIDEO_DIR/urls.txt"
	local ARCHIVE_FILE="$VIDEO_DIR/archive.txt"

	mkdir -p "$VIDEO_DIR"

	while true; do

		if [ -x "/usr/local/bin/yt-dlp" ]; then
		   local YTDLP_STATUS="${gl_lv}已安装${gl_bai}"
		else
		   local YTDLP_STATUS="${gl_hui}未安装${gl_bai}"
		fi

		clear
		send_stats "ابزار بارگیری YT-DLP"
		echo -e "yt-dlp $YTDLP_STATUS"
		echo -e "YT-DLP یک ابزار قدرتمند بارگیری ویدیویی است که از هزاران سایت از جمله YouTube ، Bilibili ، Twitter و غیره پشتیبانی می کند."
		echo -e "آدرس وب سایت رسمی: https://github.com/yt-dlp/yt-dlp"
		echo "-------------------------"
		echo "لیست ویدیویی بارگیری شده:"
		ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(هنوز هیچ)"
		echo "-------------------------"
		echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
		echo "-------------------------"
		echo "5. دانلود ویدیوی مجرد 6. دانلود ویدیوی دسته ای 7. پارامتر سفارشی"
		echo "8. بارگیری به عنوان MP3 Audio 9. حذف فهرست ویدیو 10. مدیریت کوکی (در حال توسعه)"
		echo "-------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "-------------------------"
		read -e -p "لطفاً شماره گزینه را وارد کنید:" choice

		case $choice in
			1)
				send_stats "نصب YT-DLP ..."
				echo "نصب YT-DLP ..."
				install ffmpeg
				sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
				sudo chmod a+rx /usr/local/bin/yt-dlp
				echo "نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..."
				read ;;
			2)
				send_stats "yt-dlp را به روز کنید ..."
				echo "yt-dlp را به روز کنید ..."
				sudo yt-dlp -U
				echo "به روزرسانی کامل شد. برای ادامه ... هر کلید را فشار دهید ..."
				read ;;
			3)
				send_stats "حذف yt-dlp ..."
				echo "حذف yt-dlp ..."
				sudo rm -f /usr/local/bin/yt-dlp
				echo "حذف نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..."
				read ;;
			5)
				send_stats "بارگیری ویدیویی تک"
				read -e -p "لطفا لینک ویدیویی را وارد کنید:" url
				yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \
					--write-subs --sub-langs all \
					--write-thumbnail --embed-thumbnail \
					--write-info-json \
					-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
					--no-overwrites --no-post-overwrites "$url"
				read -e -p "پس از اتمام بارگیری ، هر کلید را فشار دهید تا ادامه یابد ..." ;;
			6)
				send_stats "دانلود ویدیوی دسته ای"
				install nano
				if [ ! -f "$URL_FILE" ]; then
				  echo -e "# چندین آدرس پیوند ویدیویی را وارد کنید \ n# https://www.bilibili.com/bangumi/play/ep733316؟spm_id_from=333.337.0&from_spmid=666.25.episode.0" > "$URL_FILE"
				fi
				nano $URL_FILE
				echo "اکنون بارگیری دسته را شروع کنید ..."
				yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \
					--write-subs --sub-langs all \
					--write-thumbnail --embed-thumbnail \
					--write-info-json \
					-a "$URL_FILE" \
					-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
					--no-overwrites --no-post-overwrites
				read -e -p "بارگیری دسته ای تکمیل شده است ، برای ادامه ... هر کلید را فشار دهید ..." ;;
			7)
				send_stats "بارگیری ویدیوی سفارشی"
				read -e -p "لطفاً پارامتر کامل YT-DLP را وارد کنید (به استثنای YT-DLP):" custom
				yt-dlp -P "$VIDEO_DIR" $custom \
					--write-subs --sub-langs all \
					--write-thumbnail --embed-thumbnail \
					--write-info-json \
					-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
					--no-overwrites --no-post-overwrites
				read -e -p "پس از اتمام اجرای ، برای ادامه ... هر کلید را فشار دهید ..." ;;
			8)
				send_stats "دانلود MP3"
				read -e -p "لطفا لینک ویدیویی را وارد کنید:" url
				yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \
					--write-subs --sub-langs all \
					--write-thumbnail --embed-thumbnail \
					--write-info-json \
					-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
					--no-overwrites --no-post-overwrites "$url"
				read -e -p "بارگیری صوتی به پایان رسیده است ، برای ادامه ... هر کلید را فشار دهید ..." ;;

			9)
				send_stats "حذف ویدیو"
				read -e -p "لطفاً نام فیلم حذف را وارد کنید:" rmdir
				rm -rf "$VIDEO_DIR/$rmdir"
				;;
			*)
				break ;;
		esac
	done
}





current_timezone() {
	if grep -q 'Alpine' /etc/issue; then
	   date +"%Z %z"
	else
	   timedatectl | grep "Time zone" | awk '{print $3}'
	fi

}


set_timedate() {
	local shiqu="$1"
	if grep -q 'Alpine' /etc/issue; then
		install tzdata
		cp /usr/share/zoneinfo/${shiqu} /etc/localtime
		hwclock --systohc
	else
		timedatectl set-timezone ${shiqu}
	fi
}



# مشکل قطع DPKG را برطرف کنید
fix_dpkg() {
	pkill -9 -f 'apt|dpkg'
	rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
	DEBIAN_FRONTEND=noninteractive dpkg --configure -a
}


linux_update() {
	echo -e "${gl_huang}به روزرسانی سیستم ...${gl_bai}"
	if command -v dnf &>/dev/null; then
		dnf -y update
	elif command -v yum &>/dev/null; then
		yum -y update
	elif command -v apt &>/dev/null; then
		fix_dpkg
		DEBIAN_FRONTEND=noninteractive apt update -y
		DEBIAN_FRONTEND=noninteractive apt full-upgrade -y
	elif command -v apk &>/dev/null; then
		apk update && apk upgrade
	elif command -v pacman &>/dev/null; then
		pacman -Syu --noconfirm
	elif command -v zypper &>/dev/null; then
		zypper refresh
		zypper update
	elif command -v opkg &>/dev/null; then
		opkg update
	else
		echo "مدیر بسته ناشناخته!"
		return
	fi
}



linux_clean() {
	echo -e "${gl_huang}تمیز کردن سیستم ...${gl_bai}"
	if command -v dnf &>/dev/null; then
		rpm --rebuilddb
		dnf autoremove -y
		dnf clean all
		dnf makecache
		journalctl --rotate
		journalctl --vacuum-time=1s
		journalctl --vacuum-size=500M

	elif command -v yum &>/dev/null; then
		rpm --rebuilddb
		yum autoremove -y
		yum clean all
		yum makecache
		journalctl --rotate
		journalctl --vacuum-time=1s
		journalctl --vacuum-size=500M

	elif command -v apt &>/dev/null; then
		fix_dpkg
		apt autoremove --purge -y
		apt clean -y
		apt autoclean -y
		journalctl --rotate
		journalctl --vacuum-time=1s
		journalctl --vacuum-size=500M

	elif command -v apk &>/dev/null; then
		echo "حافظه پنهان مدیر بسته را تمیز کنید ..."
		apk cache clean
		echo "ورود به سیستم سیستم ..."
		rm -rf /var/log/*
		echo "حذف حافظه پنهان APK ..."
		rm -rf /var/cache/apk/*
		echo "پرونده های موقت را حذف کنید ..."
		rm -rf /tmp/*

	elif command -v pacman &>/dev/null; then
		pacman -Rns $(pacman -Qdtq) --noconfirm
		pacman -Scc --noconfirm
		journalctl --rotate
		journalctl --vacuum-time=1s
		journalctl --vacuum-size=500M

	elif command -v zypper &>/dev/null; then
		zypper clean --all
		zypper refresh
		journalctl --rotate
		journalctl --vacuum-time=1s
		journalctl --vacuum-size=500M

	elif command -v opkg &>/dev/null; then
		echo "ورود به سیستم سیستم ..."
		rm -rf /var/log/*
		echo "پرونده های موقت را حذف کنید ..."
		rm -rf /tmp/*

	elif command -v pkg &>/dev/null; then
		echo "وابستگی های بلااستفاده را پاک کنید ..."
		pkg autoremove -y
		echo "حافظه پنهان مدیر بسته را تمیز کنید ..."
		pkg clean -y
		echo "ورود به سیستم سیستم ..."
		rm -rf /var/log/*
		echo "پرونده های موقت را حذف کنید ..."
		rm -rf /tmp/*

	else
		echo "مدیر بسته ناشناخته!"
		return
	fi
	return
}



bbr_on() {

cat > /etc/sysctl.conf << EOF
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl -p

}


set_dns() {

ip_address

rm /etc/resolv.conf
touch /etc/resolv.conf

if [ -n "$ipv4_address" ]; then
	echo "nameserver $dns1_ipv4" >> /etc/resolv.conf
	echo "nameserver $dns2_ipv4" >> /etc/resolv.conf
fi

if [ -n "$ipv6_address" ]; then
	echo "nameserver $dns1_ipv6" >> /etc/resolv.conf
	echo "nameserver $dns2_ipv6" >> /etc/resolv.conf
fi

}


set_dns_ui() {
root_use
send_stats "DNS را بهینه کنید"
while true; do
	clear
	echo "آدرس DNS را بهینه کنید"
	echo "------------------------"
	echo "آدرس DNS فعلی"
	cat /etc/resolv.conf
	echo "------------------------"
	echo ""
	echo "1. بهینه سازی DNS خارجی:"
	echo " v4: 1.1.1.1 8.8.8.8"
	echo " v6: 2606:4700:4700::1111 2001:4860:4860::8888"
	echo "2. بهینه سازی DNS داخلی:"
	echo " v4: 223.5.5.5 183.60.83.19"
	echo " v6: 2400:3200::1 2400:da00::6666"
	echo "3. تنظیمات DNS را بصورت دستی ویرایش کنید"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting
	case "$Limiting" in
	  1)
		local dns1_ipv4="1.1.1.1"
		local dns2_ipv4="8.8.8.8"
		local dns1_ipv6="2606:4700:4700::1111"
		local dns2_ipv6="2001:4860:4860::8888"
		set_dns
		send_stats "بهینه سازی DNS خارجی"
		;;
	  2)
		local dns1_ipv4="223.5.5.5"
		local dns2_ipv4="183.60.83.19"
		local dns1_ipv6="2400:3200::1"
		local dns2_ipv6="2400:da00::6666"
		set_dns
		send_stats "بهینه سازی DNS داخلی"
		;;
	  3)
		install nano
		nano /etc/resolv.conf
		send_stats "پیکربندی DNS را به صورت دستی ویرایش کنید"
		;;
	  *)
		break
		;;
	esac
done

}



restart_ssh() {
	restart sshd ssh > /dev/null 2>&1

}



correct_ssh_config() {

	local sshd_config="/etc/ssh/sshd_config"

	# اگر رمزعبور Authentication پیدا شد ، روی بله تنظیم کنید
	if grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config"; then
		sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config"
		sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config"
	fi

	# در صورت یافتن pubkeyauthentication روی بله تنظیم شده است
	if grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then
		sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
			   -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
			   -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
			   -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config"
	fi

	# اگر نه با رمز عبور و نه با pubkeyauthentication مطابقت ندارد ، مقدار پیش فرض را تنظیم کنید
	if ! grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config" && ! grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then
		sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config"
		sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config"
	fi

}


new_ssh_port() {

  # از فایلهای پیکربندی SSH پشتیبان تهیه کنید
  cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

  sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config
  sed -i "s/Port [0-9]\+/Port $new_port/g" /etc/ssh/sshd_config

  correct_ssh_config
  rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*

  restart_ssh
  open_port $new_port
  remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1

  echo "درگاه SSH به: اصلاح شده است:$new_port"

  sleep 1

}



add_sshkey() {

	ssh-keygen -t ed25519 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N ""

	cat ~/.ssh/sshkey.pub >> ~/.ssh/authorized_keys
	chmod 600 ~/.ssh/authorized_keys


	ip_address
	echo -e "اطلاعات کلیدی خصوصی تولید شده است. حتماً آن را کپی و ذخیره کنید.${gl_huang}${ipv4_address}_ssh.key${gl_bai}پرونده برای ورود به سیستم SSH آینده"

	echo "--------------------------------"
	cat ~/.ssh/sshkey
	echo "--------------------------------"

	sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
		   -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
		   -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
		   -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
	rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
	echo -e "${gl_lv}ورود به سیستم کلید خصوصی Root فعال شده است ، ورود به سیستم رمز عبور بسته شده است ، اتصال مجدد اثر خواهد داشت${gl_bai}"

}


import_sshkey() {

	read -e -p "لطفاً محتویات کلید عمومی SSH خود را وارد کنید (معمولاً با "SSH-RSA" یا "SSH-ED25519" شروع می شود):" public_key

	if [[ -z "$public_key" ]]; then
		echo -e "${gl_hong}خطا: محتوای کلید عمومی وارد نشده است.${gl_bai}"
		return 1
	fi

	echo "$public_key" >> ~/.ssh/authorized_keys
	chmod 600 ~/.ssh/authorized_keys

	sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
		   -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
		   -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
		   -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config

	rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
	echo -e "${gl_lv}کلید عمومی با موفقیت وارد شده است ، ورود به سیستم Root Private Key فعال شده است ، ورود به سیستم رمز عبور بسته شده است و اتصال مجدد اثر خواهد داشت${gl_bai}"

}




add_sshpasswd() {

echo "رمز عبور ریشه خود را تنظیم کنید"
passwd
sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config;
sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config;
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
restart_ssh
echo -e "${gl_lv}ورود به سیستم ریشه تنظیم شده است!${gl_bai}"

}


root_use() {
clear
[ "$EUID" -ne 0 ] && echo -e "${gl_huang}نکته:${gl_bai}این ویژگی به کاربر root نیاز دارد تا اجرا شود!" && break_end && kejilion
}



dd_xitong() {
		send_stats "نصب مجدد سیستم"
		dd_xitong_MollyLau() {
			wget --no-check-certificate -qO InstallNET.sh "${gh_proxy}raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh" && chmod a+x InstallNET.sh

		}

		dd_xitong_bin456789() {
			curl -O ${gh_proxy}raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
		}

		dd_xitong_1() {
		  echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}LeitboGi0ro${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}"
		  echo -e "برای ادامه ... هر کلید را فشار دهید ..."
		  read -n 1 -s -r -p ""
		  install wget
		  dd_xitong_MollyLau
		}

		dd_xitong_2() {
		  echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}Teddysun.com${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}"
		  echo -e "برای ادامه ... هر کلید را فشار دهید ..."
		  read -n 1 -s -r -p ""
		  install wget
		  dd_xitong_MollyLau
		}

		dd_xitong_3() {
		  echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}"
		  echo -e "برای ادامه ... هر کلید را فشار دهید ..."
		  read -n 1 -s -r -p ""
		  dd_xitong_bin456789
		}

		dd_xitong_4() {
		  echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}"
		  echo -e "برای ادامه ... هر کلید را فشار دهید ..."
		  read -n 1 -s -r -p ""
		  dd_xitong_bin456789
		}

		  while true; do
			root_use
			echo "نصب مجدد سیستم"
			echo "--------------------------------"
			echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید."
			echo -e "${gl_hui}با تشکر از مولیلاو و BIN456789 برای پشتیبانی از فیلمنامه!${gl_bai} "
			echo "------------------------"
			echo "1. Debian 12                  2. Debian 11"
			echo "3. Debian 10                  4. Debian 9"
			echo "------------------------"
			echo "11. Ubuntu 24.04              12. Ubuntu 22.04"
			echo "13. Ubuntu 20.04              14. Ubuntu 18.04"
			echo "------------------------"
			echo "21. Rocky Linux 9             22. Rocky Linux 8"
			echo "23. Alma Linux 9              24. Alma Linux 8"
			echo "25. oracle Linux 9            26. oracle Linux 8"
			echo "27. Fedora Linux 41           28. Fedora Linux 40"
			echo "29. CentOS 10                 30. CentOS 9"
			echo "------------------------"
			echo "31. Alpine Linux              32. Arch Linux"
			echo "33. Kali Linux                34. openEuler"
			echo "35. OpenSUSE TUMBLEWEED 36"
			echo "------------------------"
			echo "41. Windows 11                42. Windows 10"
			echo "43. Windows 7                 44. Windows Server 2022"
			echo "45. Windows Server 2019       46. Windows Server 2016"
			echo "47. Windows 11 ARM"
			echo "------------------------"
			echo "0. به منوی قبلی برگردید"
			echo "------------------------"
			read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید:" sys_choice
			case "$sys_choice" in
			  1)
				send_stats "نصب مجدد دبیان 12"
				dd_xitong_1
				bash InstallNET.sh -debian 12
				reboot
				exit
				;;
			  2)
				send_stats "نصب مجدد دبیان 11"
				dd_xitong_1
				bash InstallNET.sh -debian 11
				reboot
				exit
				;;
			  3)
				send_stats "نصب مجدد دبیان 10"
				dd_xitong_1
				bash InstallNET.sh -debian 10
				reboot
				exit
				;;
			  4)
				send_stats "نصب مجدد دبیان 9"
				dd_xitong_1
				bash InstallNET.sh -debian 9
				reboot
				exit
				;;
			  11)
				send_stats "Ubuntu 24.04 را دوباره نصب کنید"
				dd_xitong_1
				bash InstallNET.sh -ubuntu 24.04
				reboot
				exit
				;;
			  12)
				send_stats "22.04 اوبونتو را دوباره نصب کنید"
				dd_xitong_1
				bash InstallNET.sh -ubuntu 22.04
				reboot
				exit
				;;
			  13)
				send_stats "20.04 اوبونتو را دوباره نصب کنید"
				dd_xitong_1
				bash InstallNET.sh -ubuntu 20.04
				reboot
				exit
				;;
			  14)
				send_stats "Ubuntu 18.04 را دوباره نصب کنید"
				dd_xitong_1
				bash InstallNET.sh -ubuntu 18.04
				reboot
				exit
				;;


			  21)
				send_stats "Rockylinux9 را دوباره نصب کنید"
				dd_xitong_3
				bash reinstall.sh rocky
				reboot
				exit
				;;

			  22)
				send_stats "Rockylinux8 را دوباره نصب کنید"
				dd_xitong_3
				bash reinstall.sh rocky 8
				reboot
				exit
				;;

			  23)
				send_stats "نصب مجدد alma9"
				dd_xitong_3
				bash reinstall.sh almalinux
				reboot
				exit
				;;

			  24)
				send_stats "نصب مجدد alma8"
				dd_xitong_3
				bash reinstall.sh almalinux 8
				reboot
				exit
				;;

			  25)
				send_stats "اوراکل 9 را دوباره نصب کنید"
				dd_xitong_3
				bash reinstall.sh oracle
				reboot
				exit
				;;

			  26)
				send_stats "دوباره نصب Oracle8"
				dd_xitong_3
				bash reinstall.sh oracle 8
				reboot
				exit
				;;

			  27)
				send_stats "نصب مجدد fedora41"
				dd_xitong_3
				bash reinstall.sh fedora
				reboot
				exit
				;;

			  28)
				send_stats "نصب مجدد Fedora40"
				dd_xitong_3
				bash reinstall.sh fedora 40
				reboot
				exit
				;;

			  29)
				send_stats "نصب مجدد Centos10"
				dd_xitong_3
				bash reinstall.sh centos 10
				reboot
				exit
				;;

			  30)
				send_stats "نصب مجدد Centos9"
				dd_xitong_3
				bash reinstall.sh centos 9
				reboot
				exit
				;;

			  31)
				send_stats "نصب مجدد آلپ"
				dd_xitong_1
				bash InstallNET.sh -alpine
				reboot
				exit
				;;

			  32)
				send_stats "مجدداً قوس را نصب کنید"
				dd_xitong_3
				bash reinstall.sh arch
				reboot
				exit
				;;

			  33)
				send_stats "کالی را دوباره نصب کنید"
				dd_xitong_3
				bash reinstall.sh kali
				reboot
				exit
				;;

			  34)
				send_stats "بازگرداندن اوپنولر"
				dd_xitong_3
				bash reinstall.sh openeuler
				reboot
				exit
				;;

			  35)
				send_stats "بازگرداندن OpenSuse"
				dd_xitong_3
				bash reinstall.sh opensuse
				reboot
				exit
				;;

			  36)
				send_stats "بارگیری مجدد گاو پرواز"
				dd_xitong_3
				bash reinstall.sh fnos
				reboot
				exit
				;;


			  41)
				send_stats "نصب ویندوز 11"
				dd_xitong_2
				bash InstallNET.sh -windows 11 -lang "cn"
				reboot
				exit
				;;
			  42)
				dd_xitong_2
				send_stats "ویندوز 10 را دوباره نصب کنید"
				bash InstallNET.sh -windows 10 -lang "cn"
				reboot
				exit
				;;
			  43)
				send_stats "نصب ویندوز 7"
				dd_xitong_4
				bash reinstall.sh windows --iso="https://drive.massgrave.dev/cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso" --image-name='Windows 7 PROFESSIONAL'
				reboot
				exit
				;;

			  44)
				send_stats "ویندوز سرور 22 را دوباره نصب کنید"
				dd_xitong_2
				bash InstallNET.sh -windows 2022 -lang "cn"
				reboot
				exit
				;;
			  45)
				send_stats "ویندوز سرور 19 را دوباره نصب کنید"
				dd_xitong_2
				bash InstallNET.sh -windows 2019 -lang "cn"
				reboot
				exit
				;;
			  46)
				send_stats "ویندوز سرور 16 را دوباره نصب کنید"
				dd_xitong_2
				bash InstallNET.sh -windows 2016 -lang "cn"
				reboot
				exit
				;;

			  47)
				send_stats "بازوی Windows11 را دوباره نصب کنید"
				dd_xitong_4
				bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz
				reboot
				exit
				;;

			  *)
				break
				;;
			esac
		  done
}


bbrv3() {
		  root_use
		  send_stats "مدیریت BBRV3"

		  local cpu_arch=$(uname -m)
		  if [ "$cpu_arch" = "aarch64" ]; then
			bash <(curl -sL jhb.ovh/jb/bbrv3arm.sh)
			break_end
			linux_Settings
		  fi

		  if dpkg -l | grep -q 'linux-xanmod'; then
			while true; do
				  clear
				  local kernel_version=$(uname -r)
				  echo "شما هسته bbrv3 xanmod را نصب کرده اید"
				  echo "نسخه هسته فعلی:$kernel_version"

				  echo ""
				  echo "مدیریت هسته"
				  echo "------------------------"
				  echo "1. هسته BBRV3 را به روز کنید. هسته BBRV3 را حذف کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
						apt purge -y 'linux-*xanmod1*'
						update-grub

						# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
						wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes

						# مرحله 3: یک مخزن اضافه کنید
						echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list

						# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
						local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')

						apt update -y
						apt install -y linux-xanmod-x64v$version

						echo "هسته XanMod به روز شده است. بعد از راه اندازی مجدد عمل کنید"
						rm -f /etc/apt/sources.list.d/xanmod-release.list
						rm -f check_x86-64_psabi.sh*

						server_reboot

						  ;;
					  2)
						apt purge -y 'linux-*xanmod1*'
						update-grub
						echo "هسته Xanmod حذف نشده است. بعد از راه اندازی مجدد عمل کنید"
						server_reboot
						  ;;

					  *)
						  break  # 跳出循环，退出菜单
						  ;;

				  esac
			done
		else

		  clear
		  echo "شتاب BBR3 را تنظیم کنید"
		  echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv14k421x7bs؟t=0.1"
		  echo "------------------------------------------------"
		  echo "فقط از دبیان/اوبونتو پشتیبانی کنید"
		  echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و BBR3 را برای ارتقاء هسته لینوکس فعال کنید."
		  echo "VPS دارای حافظه 512 متر است ، لطفاً حافظه مجازی 1G را از قبل اضافه کنید تا از تماس تلفنی به دلیل حافظه ناکافی جلوگیری شود!"
		  echo "------------------------------------------------"
		  read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice

		  case "$choice" in
			[Yy])
			if [ -r /etc/os-release ]; then
				. /etc/os-release
				if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then
					echo "محیط فعلی از آن پشتیبانی نمی کند ، فقط از سیستم های Debian و Ubuntu پشتیبانی می کند"
					break_end
					linux_Settings
				fi
			else
				echo "برای تعیین نوع سیستم عامل امکان پذیر نیست"
				break_end
				linux_Settings
			fi

			check_swap
			install wget gnupg

			# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
			wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes

			# مرحله 3: یک مخزن اضافه کنید
			echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list

			# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
			local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')

			apt update -y
			apt install -y linux-xanmod-x64v$version

			bbr_on

			echo "هسته XANMOD نصب شده و BBR3 با موفقیت فعال می شود. بعد از راه اندازی مجدد عمل کنید"
			rm -f /etc/apt/sources.list.d/xanmod-release.list
			rm -f check_x86-64_psabi.sh*
			server_reboot

			  ;;
			[Nn])
			  echo "لغو شده"
			  ;;
			*)
			  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
			  ;;
		  esac
		fi

}


elrepo_install() {
	# وارد کردن کلید عمومی Elrepo GPG
	echo "کلید عمومی Elrepo GPG را وارد کنید ..."
	rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
	# نسخه سیستم را تشخیص دهید
	local os_version=$(rpm -q --qf "%{VERSION}" $(rpm -qf /etc/os-release) 2>/dev/null | awk -F '.' '{print $1}')
	local os_name=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
	# اطمینان حاصل کنید که ما روی یک سیستم عامل پشتیبانی شده اجرا می کنیم
	if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then
		echo "سیستم عامل های پشتیبانی نشده:$os_name"
		break_end
		linux_Settings
	fi
	# اطلاعات سیستم عامل شناسایی شده را چاپ کنید
	echo "سیستم عامل شناسایی شده:$os_name $os_version"
	# پیکربندی انبار الپو مربوطه را مطابق با نسخه سیستم نصب کنید
	if [[ "$os_version" == 8 ]]; then
		echo "تنظیمات مخزن Elrepo (نسخه 8) را نصب کنید ..."
		yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
	elif [[ "$os_version" == 9 ]]; then
		echo "تنظیمات مخزن Elrepo را نصب کنید (نسخه 9) ..."
		yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
	else
		echo "نسخه های سیستم پشتیبانی نشده:$os_version"
		break_end
		linux_Settings
	fi
	# مخزن هسته Elrepo را فعال کرده و جدیدترین هسته اصلی را نصب کنید
	echo "مخزن هسته Elrepo را فعال کنید و آخرین هسته اصلی را نصب کنید ..."
	# yum -y --enablerepo=elrepo-kernel install kernel-ml
	yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml
	echo "پیکربندی مخزن Elrepo در آخرین هسته اصلی خط نصب و به روز شده است."
	server_reboot

}


elrepo() {
		  root_use
		  send_stats "مدیریت هسته Red Hat"
		  if uname -r | grep -q 'elrepo'; then
			while true; do
				  clear
				  kernel_version=$(uname -r)
				  echo "شما هسته Elrepo را نصب کرده اید"
				  echo "نسخه هسته فعلی:$kernel_version"

				  echo ""
				  echo "مدیریت هسته"
				  echo "------------------------"
				  echo "1. هسته Elrepo را به روز کنید."
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
						dnf remove -y elrepo-release
						rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps
						elrepo_install
						send_stats "هسته Red Hat را به روز کنید"
						server_reboot

						  ;;
					  2)
						dnf remove -y elrepo-release
						rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps
						echo "هسته Elrepo حذف نشده است. بعد از راه اندازی مجدد عمل کنید"
						send_stats "هسته Red Hat را حذف نصب کنید"
						server_reboot

						  ;;
					  *)
						  break  # 跳出循环，退出菜单
						  ;;

				  esac
			done
		else

		  clear
		  echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و هسته لینوکس را برای شما به روز می کند"
		  echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mh4y1w7qa؟t=529.2"
		  echo "------------------------------------------------"
		  echo "فقط پشتیبانی از توزیع سری Red Hat Centos/Redhat/Alma/Rocky/Oracle"
		  echo "ارتقاء هسته لینوکس می تواند عملکرد و امنیت سیستم را بهبود بخشد. توصیه می شود در صورت اجازه و ارتقاء محیط تولید با احتیاط ، آن را امتحان کنید!"
		  echo "------------------------------------------------"
		  read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice

		  case "$choice" in
			[Yy])
			  check_swap
			  elrepo_install
			  send_stats "升级红帽内核"
			  server_reboot
			  ;;
			[Nn])
			  echo "已取消"
			  ;;
			*)
			  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
			  ;;
		  esac
		fi

}




clamav_freshclam() {
	echo -e "${gl_huang}正在更新病毒库...${gl_bai}"
	docker run --rm \
		--name clamav \
		--mount source=clam_db,target=/var/lib/clamav \
		clamav/clamav-debian:latest \
		freshclam
}

clamav_scan() {
	if [ $# -eq 0 ]; then
		echo "لطفاً دایرکتوری را برای اسکن مشخص کنید."
		return
	fi

	echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}"

	# 构建 mount 参数
	local MOUNT_PARAMS=""
	for dir in "$@"; do
		MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} "
	done

	# 构建 clamscan 命令参数
	local SCAN_PARAMS=""
	for dir in "$@"; do
		SCAN_PARAMS+="/mnt/host${dir} "
	done

	mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1
	> /home/docker/clamav/log/scan.log > /dev/null 2>&1

	# 执行 Docker 命令
	docker run -it --rm \
		--name clamav \
		--mount source=clam_db,target=/var/lib/clamav \
		$MOUNT_PARAMS \
		-v /home/docker/clamav/log/:/var/log/clamav/ \
		clamav/clamav-debian:latest \
		clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS

	echo -e "${gl_lv}$@ اسکن تکمیل شده است ، گزارش ویروس ذخیره می شود${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}"
	echo -e "${gl_lv}如果有病毒请在${gl_huang}scan.log${gl_lv}文件中搜索FOUND关键字确认病毒位置 ${gl_bai}"

}







clamav() {
		  root_use
		  send_stats "病毒扫描管理"
		  while true; do
				clear
				echo "ابزار اسکن ویروس Clamav"
				echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1tqvze4eqm؟t=0.1"
				echo "------------------------"
				echo "این یک ابزار نرم افزاری آنتی ویروس منبع باز است که عمدتاً برای تشخیص و حذف انواع بدافزار مورد استفاده قرار می گیرد."
				echo "از جمله ویروس ها ، اسب های تروجان ، جاسوس ، اسکریپت های مخرب و سایر نرم افزارهای مضر."
				echo "------------------------"
				echo -e "${gl_lv}1 اسکن کامل دیسک${gl_bai}             ${gl_huang}2. فهرست مهم را اسکن کنید${gl_bai}            ${gl_kjlan}3. اسکن دایرکتوری سفارشی${gl_bai}"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
				case $sub_choice in
					1)
					  send_stats "اسکن دیسک کامل"
					  install_docker
					  docker volume create clam_db > /dev/null 2>&1
					  clamav_freshclam
					  clamav_scan /
					  break_end

						;;
					2)
					  send_stats "اسکن دایرکتوری مهم"
					  install_docker
					  docker volume create clam_db > /dev/null 2>&1
					  clamav_freshclam
					  clamav_scan /etc /var /usr /home /root
					  break_end
						;;
					3)
					  send_stats "اسکن دایرکتوری سفارشی"
					  read -e -p "لطفاً برای اسکن ، جدا شده توسط فضاها (به عنوان مثال: /etc /var /usr /home /root) دایرکتوری را وارد کنید:" directories
					  install_docker
					  clamav_freshclam
					  clamav_scan $directories
					  break_end
						;;
					*)
					  break  # 跳出循环，退出菜单
						;;
				esac
		  done

}




# عملکرد بهینه سازی حالت با کارایی بالا
optimize_high_performance() {
	echo -e "${gl_lv}روی دادن${tiaoyou_moshi}...${gl_bai}"

	echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
	ulimit -n 65535

	echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
	sysctl -w vm.swappiness=10 2>/dev/null
	sysctl -w vm.dirty_ratio=15 2>/dev/null
	sysctl -w vm.dirty_background_ratio=5 2>/dev/null
	sysctl -w vm.overcommit_memory=1 2>/dev/null
	sysctl -w vm.min_free_kbytes=65536 2>/dev/null

	echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
	sysctl -w net.core.rmem_max=16777216 2>/dev/null
	sysctl -w net.core.wmem_max=16777216 2>/dev/null
	sysctl -w net.core.netdev_max_backlog=250000 2>/dev/null
	sysctl -w net.core.somaxconn=4096 2>/dev/null
	sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null
	sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null
	sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
	sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null
	sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
	sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null

	echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
	sysctl -w vm.vfs_cache_pressure=50 2>/dev/null

	echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
	sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null

	echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
	# برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید
	echo never > /sys/kernel/mm/transparent_hugepage/enabled
	# تعادل Numa را غیرفعال کنید
	sysctl -w kernel.numa_balancing=0 2>/dev/null


}

# عملکرد بهینه سازی حالت تساوی
optimize_balanced() {
	echo -e "${gl_lv}تغییر به حالت تساوی ...${gl_bai}"

	echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
	ulimit -n 32768

	echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
	sysctl -w vm.swappiness=30 2>/dev/null
	sysctl -w vm.dirty_ratio=20 2>/dev/null
	sysctl -w vm.dirty_background_ratio=10 2>/dev/null
	sysctl -w vm.overcommit_memory=0 2>/dev/null
	sysctl -w vm.min_free_kbytes=32768 2>/dev/null

	echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
	sysctl -w net.core.rmem_max=8388608 2>/dev/null
	sysctl -w net.core.wmem_max=8388608 2>/dev/null
	sysctl -w net.core.netdev_max_backlog=125000 2>/dev/null
	sysctl -w net.core.somaxconn=2048 2>/dev/null
	sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608' 2>/dev/null
	sysctl -w net.ipv4.tcp_wmem='4096 32768 8388608' 2>/dev/null
	sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
	sysctl -w net.ipv4.tcp_max_syn_backlog=4096 2>/dev/null
	sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
	sysctl -w net.ipv4.ip_local_port_range='1024 49151' 2>/dev/null

	echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
	sysctl -w vm.vfs_cache_pressure=75 2>/dev/null

	echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
	sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null

	echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
	# صفحه شفاف را بازیابی کنید
	echo always > /sys/kernel/mm/transparent_hugepage/enabled
	# تعادل Numa را بازیابی کنید
	sysctl -w kernel.numa_balancing=1 2>/dev/null


}

# عملکرد تنظیمات پیش فرض را بازیابی کنید
restore_defaults() {
	echo -e "${gl_lv}به تنظیمات پیش فرض بازگردید ...${gl_bai}"

	echo -e "${gl_lv}بازگرداندن توصیف کننده پرونده ...${gl_bai}"
	ulimit -n 1024

	echo -e "${gl_lv}بازیابی حافظه مجازی ...${gl_bai}"
	sysctl -w vm.swappiness=60 2>/dev/null
	sysctl -w vm.dirty_ratio=20 2>/dev/null
	sysctl -w vm.dirty_background_ratio=10 2>/dev/null
	sysctl -w vm.overcommit_memory=0 2>/dev/null
	sysctl -w vm.min_free_kbytes=16384 2>/dev/null

	echo -e "${gl_lv}بازگرداندن تنظیمات شبکه ...${gl_bai}"
	sysctl -w net.core.rmem_max=212992 2>/dev/null
	sysctl -w net.core.wmem_max=212992 2>/dev/null
	sysctl -w net.core.netdev_max_backlog=1000 2>/dev/null
	sysctl -w net.core.somaxconn=128 2>/dev/null
	sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456' 2>/dev/null
	sysctl -w net.ipv4.tcp_wmem='4096 16384 4194304' 2>/dev/null
	sysctl -w net.ipv4.tcp_congestion_control=cubic 2>/dev/null
	sysctl -w net.ipv4.tcp_max_syn_backlog=2048 2>/dev/null
	sysctl -w net.ipv4.tcp_tw_reuse=0 2>/dev/null
	sysctl -w net.ipv4.ip_local_port_range='32768 60999' 2>/dev/null

	echo -e "${gl_lv}بازگرداندن مدیریت حافظه پنهان ...${gl_bai}"
	sysctl -w vm.vfs_cache_pressure=100 2>/dev/null

	echo -e "${gl_lv}تنظیمات CPU را بازیابی کنید ...${gl_bai}"
	sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null

	echo -e "${gl_lv}بهینه سازی های دیگر را بازیابی کنید ...${gl_bai}"
	# صفحه شفاف را بازیابی کنید
	echo always > /sys/kernel/mm/transparent_hugepage/enabled
	# تعادل Numa را بازیابی کنید
	sysctl -w kernel.numa_balancing=1 2>/dev/null

}



# عملکرد بهینه سازی ساختمان وب سایت
optimize_web_server() {
	echo -e "${gl_lv}به حالت بهینه سازی ساختمان وب سایت بروید ...${gl_bai}"

	echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
	ulimit -n 65535

	echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
	sysctl -w vm.swappiness=10 2>/dev/null
	sysctl -w vm.dirty_ratio=20 2>/dev/null
	sysctl -w vm.dirty_background_ratio=10 2>/dev/null
	sysctl -w vm.overcommit_memory=1 2>/dev/null
	sysctl -w vm.min_free_kbytes=65536 2>/dev/null

	echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
	sysctl -w net.core.rmem_max=16777216 2>/dev/null
	sysctl -w net.core.wmem_max=16777216 2>/dev/null
	sysctl -w net.core.netdev_max_backlog=5000 2>/dev/null
	sysctl -w net.core.somaxconn=4096 2>/dev/null
	sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null
	sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null
	sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
	sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null
	sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
	sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null

	echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
	sysctl -w vm.vfs_cache_pressure=50 2>/dev/null

	echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
	sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null

	echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
	# برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید
	echo never > /sys/kernel/mm/transparent_hugepage/enabled
	# تعادل Numa را غیرفعال کنید
	sysctl -w kernel.numa_balancing=0 2>/dev/null


}


Kernel_optimize() {
	root_use
	while true; do
	  clear
	  send_stats "مدیریت تنظیم هسته لینوکس"
	  echo "بهینه سازی پارامترهای هسته در سیستم لینوکس"
	  echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1kb421j7yg؟t=0.1"
	  echo "------------------------------------------------"
	  echo "انواع مختلفی از حالت های تنظیم پارامتر سیستم ارائه شده است و کاربران می توانند مطابق سناریوهای استفاده خودشان انتخاب و تغییر کنند."
	  echo -e "${gl_huang}نکته:${gl_bai}لطفاً از آن با احتیاط در محیط تولید استفاده کنید!"
	  echo "--------------------"
	  echo "1. حالت بهینه سازی با کارایی بالا: عملکرد سیستم را به حداکثر برساند و توصیف کننده های فایل ، حافظه مجازی ، تنظیمات شبکه ، مدیریت حافظه نهان و تنظیمات CPU را بهینه کنید."
	  echo "2. حالت بهینه سازی متعادل: تعادل بین عملکرد و مصرف منابع ، مناسب برای استفاده روزانه."
	  echo "3. حالت بهینه سازی وب سایت: برای بهبود قابلیت های پردازش اتصال همزمان ، سرعت پاسخ و عملکرد کلی ، برای سرور وب سایت بهینه سازی کنید."
	  echo "4. حالت بهینه سازی پخش زنده: برای کاهش تأخیر و بهبود عملکرد انتقال ، نیازهای ویژه جریان پخش زنده را بهینه کنید."
	  echo "5. حالت بهینه سازی سرور بازی: برای بهبود قابلیت های پردازش همزمان و سرعت پاسخ ، برای سرورهای بازی بهینه سازی کنید."
	  echo "6. تنظیمات پیش فرض را بازیابی کنید: تنظیمات سیستم را به پیکربندی پیش فرض بازیابی کنید."
	  echo "--------------------"
	  echo "0. به منوی قبلی برگردید"
	  echo "--------------------"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
	  case $sub_choice in
		  1)
			  cd ~
			  clear
			  local tiaoyou_moshi="高性能优化模式"
			  optimize_high_performance
			  send_stats "بهینه سازی حالت با کارایی بالا"
			  ;;
		  2)
			  cd ~
			  clear
			  optimize_balanced
			  send_stats "بهینه سازی حالت متعادل"
			  ;;
		  3)
			  cd ~
			  clear
			  optimize_web_server
			  send_stats "مدل بهینه سازی وب سایت"
			  ;;
		  4)
			  cd ~
			  clear
			  local tiaoyou_moshi="直播优化模式"
			  optimize_high_performance
			  send_stats "بهینه سازی جریان مستقیم"
			  ;;
		  5)
			  cd ~
			  clear
			  local tiaoyou_moshi="游戏服优化模式"
			  optimize_high_performance
			  send_stats "بهینه سازی سرور بازی"
			  ;;
		  6)
			  cd ~
			  clear
			  restore_defaults
			  send_stats "تنظیمات پیش فرض را بازیابی کنید"
			  ;;
		  *)
			  break
			  ;;
	  esac
	  break_end
	done
}





update_locale() {
	local lang=$1
	local locale_file=$2

	if [ -f /etc/os-release ]; then
		. /etc/os-release
		case $ID in
			debian|ubuntu|kali)
				install locales
				sed -i "s/^\s*#\?\s*${locale_file}/${locale_file}/" /etc/locale.gen
				locale-gen
				echo "LANG=${lang}" > /etc/default/locale
				export LANG=${lang}
				echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}"
				hash -r
				break_end

				;;
			centos|rhel|almalinux|rocky|fedora)
				install glibc-langpack-zh
				localectl set-locale LANG=${lang}
				echo "LANG=${lang}" | tee /etc/locale.conf
				echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}"
				hash -r
				break_end
				;;
			*)
				echo "سیستم های پشتیبانی نشده:$ID"
				break_end
				;;
		esac
	else
		echo "سیستم های پشتیبانی نشده ، نوع سیستم قابل تشخیص نیست."
		break_end
	fi
}




linux_language() {
root_use
send_stats "سوئیچ زبان سیستم"
while true; do
  clear
  echo "زبان فعلی سیستم:$LANG"
  echo "------------------------"
  echo "1. انگلیسی 2. ساده چینی 3. چینی سنتی"
  echo "------------------------"
  echo "0. به منوی قبلی برگردید"
  echo "------------------------"
  read -e -p "انتخاب خود را وارد کنید:" choice

  case $choice in
	  1)
		  update_locale "en_US.UTF-8" "en_US.UTF-8"
		  send_stats "تغییر به انگلیسی"
		  ;;
	  2)
		  update_locale "zh_CN.UTF-8" "zh_CN.UTF-8"
		  send_stats "تغییر به چینی ساده شده"
		  ;;
	  3)
		  update_locale "zh_TW.UTF-8" "zh_TW.UTF-8"
		  send_stats "به چینی سنتی بروید"
		  ;;
	  *)
		  break
		  ;;
  esac
done
}



shell_bianse_profile() {

if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
	sed -i '/^PS1=/d' ~/.bashrc
	echo "${bianse}" >> ~/.bashrc
	# source ~/.bashrc
else
	sed -i '/^PS1=/d' ~/.profile
	echo "${bianse}" >> ~/.profile
	# source ~/.profile
fi
echo -e "${gl_lv}تغییر تکمیل شده است SSH را دوباره وصل کنید تا تغییرات را مشاهده کنید!${gl_bai}"

hash -r
break_end

}



shell_bianse() {
  root_use
  send_stats "ابزار زیباسازی خط فرمان"
  while true; do
	clear
	echo "ابزار زیباسازی خط فرمان"
	echo "------------------------"
	echo -e "1. \033[1;32mroot \033[1;34mlocalhost \033[1;31m~ \033[0m${gl_bai}#"
	echo -e "2. \033[1;35mroot \033[1;36mlocalhost \033[1;33m~ \033[0m${gl_bai}#"
	echo -e "3. \033[1;31mroot \033[1;32mlocalhost \033[1;34m~ \033[0m${gl_bai}#"
	echo -e "4. \033[1;36mroot \033[1;33mlocalhost \033[1;37m~ \033[0m${gl_bai}#"
	echo -e "5. \033[1;37mroot \033[1;31mlocalhost \033[1;32m~ \033[0m${gl_bai}#"
	echo -e "6. \033[1;33mroot \033[1;34mlocalhost \033[1;35m~ \033[0m${gl_bai}#"
	echo -e "7. root localhost ~ #"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "انتخاب خود را وارد کنید:" choice

	case $choice in
	  1)
		local bianse="PS1='\[\033[1;32m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;31m\]\w\[\033[0m\] # '"
		shell_bianse_profile

		;;
	  2)
		local bianse="PS1='\[\033[1;35m\]\u\[\033[0m\]@\[\033[1;36m\]\h\[\033[0m\] \[\033[1;33m\]\w\[\033[0m\] # '"
		shell_bianse_profile
		;;
	  3)
		local bianse="PS1='\[\033[1;31m\]\u\[\033[0m\]@\[\033[1;32m\]\h\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] # '"
		shell_bianse_profile
		;;
	  4)
		local bianse="PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\] \[\033[1;37m\]\w\[\033[0m\] # '"
		shell_bianse_profile
		;;
	  5)
		local bianse="PS1='\[\033[1;37m\]\u\[\033[0m\]@\[\033[1;31m\]\h\[\033[0m\] \[\033[1;32m\]\w\[\033[0m\] # '"
		shell_bianse_profile
		;;
	  6)
		local bianse="PS1='\[\033[1;33m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;35m\]\w\[\033[0m\] # '"
		shell_bianse_profile
		;;
	  7)
		local bianse=""
		shell_bianse_profile
		;;
	  *)
		break
		;;
	esac

  done
}




linux_trash() {
  root_use
  send_stats "ایستگاه بازیافت سیستم"

  local bashrc_profile="/root/.bashrc"
  local TRASH_DIR="$HOME/.local/share/Trash/files"

  while true; do

	local trash_status
	if ! grep -q "trash-put" "$bashrc_profile"; then
		trash_status="${gl_hui}未启用${gl_bai}"
	else
		trash_status="${gl_lv}已启用${gl_bai}"
	fi

	clear
	echo -e "سطل بازیافت فعلی${trash_status}"
	echo -e "پس از فعال کردن ، پرونده های حذف شده توسط RM ابتدا وارد سطل بازیافت می شوند تا از حذف اشتباه پرونده های مهم جلوگیری شود!"
	echo "------------------------------------------------"
	ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "سطل بازیافت خالی است"
	echo "------------------------"
	echo "1. سطل بازیافت را فعال کنید. سطل بازیافت را ببندید"
	echo "3. بازیابی مطالب 4. سطل بازیافت را پاک کنید"
	echo "------------------------"
	echo "0. به منوی قبلی برگردید"
	echo "------------------------"
	read -e -p "انتخاب خود را وارد کنید:" choice

	case $choice in
	  1)
		install trash-cli
		sed -i '/alias rm/d' "$bashrc_profile"
		echo "alias rm='trash-put'" >> "$bashrc_profile"
		source "$bashrc_profile"
		echo "سطل بازیافت فعال شده و پرونده های حذف شده به سطل بازیافت منتقل می شوند."
		sleep 2
		;;
	  2)
		remove trash-cli
		sed -i '/alias rm/d' "$bashrc_profile"
		echo "alias rm='rm -i'" >> "$bashrc_profile"
		source "$bashrc_profile"
		echo "سطل بازیافت بسته است و پرونده مستقیماً حذف می شود."
		sleep 2
		;;
	  3)
		read -e -p "برای بازیابی نام پرونده را وارد کنید:" file_to_restore
		if [ -e "$TRASH_DIR/$file_to_restore" ]; then
		  mv "$TRASH_DIR/$file_to_restore" "$HOME/"
		  echo "$file_to_restoreبه فهرست خانه بازگردانده شد."
		else
		  echo "پرونده وجود ندارد"
		fi
		;;
	  4)
		read -e -p "تأیید سطل بازیافت را تأیید کنید؟ [y/n]:" confirm
		if [[ "$confirm" == "y" ]]; then
		  trash-empty
		  echo "سطل بازیافت پاک شده است."
		fi
		;;
	  *)
		break
		;;
	esac
  done
}



# تهیه نسخه پشتیبان
create_backup() {
	send_stats "تهیه نسخه پشتیبان"
	local TIMESTAMP=$(date +"%Y%m%d%H%M%S")

	# کاربر را وادار به وارد کردن فهرست پشتیبان کنید
	echo "یک مثال پشتیبان ایجاد کنید:"
	echo "- از یک دایرکتوری واحد نسخه پشتیبان تهیه کنید: /var /www"
	echo "- پشتیبان گیری از دایرکتوری های متعدد: /etc /home /var /log"
	echo "- Enter Enter از دایرکتوری پیش فرض ( /etc /usr /home) استفاده می کند"
	read -r -p "لطفاً برای تهیه نسخه پشتیبان از دایرکتوری وارد کنید (چندین دایرکتوری توسط فضاها از هم جدا می شوند و اگر مستقیماً وارد شوید ، از فهرست پیش فرض استفاده کنید):" input

	# اگر کاربر دایرکتوری را وارد نکرد ، از فهرست پیش فرض استفاده کنید
	if [ -z "$input" ]; then
		BACKUP_PATHS=(
			"/etc"              # 配置文件和软件包配置
			"/usr"              # 已安装的软件文件
			"/home"             # 用户数据
		)
	else
		# دایرکتوری را که توسط کاربر وارد شده است در یک آرایه توسط فضاها جدا کنید
		IFS=' ' read -r -a BACKUP_PATHS <<< "$input"
	fi

	# پیشوند پرونده پشتیبان تهیه کنید
	local PREFIX=""
	for path in "${BACKUP_PATHS[@]}"; do
		# نام دایرکتوری را استخراج کنید و برش ها را حذف کنید
		dir_name=$(basename "$path")
		PREFIX+="${dir_name}_"
	done

	# آخرین زیر را حذف کنید
	local PREFIX=${PREFIX%_}

	# نام پرونده پشتیبان تهیه کنید
	local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz"

	# دایرکتوری را که توسط کاربر انتخاب شده است چاپ کنید
	echo "دایرکتوری پشتیبان که شما انتخاب کردید:"
	for path in "${BACKUP_PATHS[@]}"; do
		echo "- $path"
	done

	# تهیه نسخه پشتیبان
	echo "ایجاد یک نسخه پشتیبان$BACKUP_NAME..."
	install tar
	tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}"

	# بررسی کنید که آیا دستور موفقیت آمیز است
	if [ $? -eq 0 ]; then
		echo "نسخه پشتیبان با موفقیت ایجاد شد:$BACKUP_DIR/$BACKUP_NAME"
	else
		echo "ایجاد پشتیبان گیری نشد!"
		exit 1
	fi
}

# بازیابی پشتیبان گیری
restore_backup() {
	send_stats "بازیابی پشتیبان گیری"
	# پشتیبان مورد نظر برای بازیابی را انتخاب کنید
	read -e -p "لطفاً نام پرونده پشتیبان را برای بازیابی وارد کنید:" BACKUP_NAME

	# بررسی کنید که آیا پرونده پشتیبان وجود دارد
	if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then
		echo "پرونده پشتیبان وجود ندارد!"
		exit 1
	fi

	echo "بازیابی پشتیبان گیری$BACKUP_NAME..."
	tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C /

	if [ $? -eq 0 ]; then
		echo "پشتیبان گیری و بازیابی با موفقیت!"
	else
		echo "بازیابی پشتیبان گیری نشد!"
		exit 1
	fi
}

# تهیه نسخه پشتیبان
list_backups() {
	echo "نسخه پشتیبان تهیه شده در دسترس:"
	ls -1 "$BACKUP_DIR"
}

# تهیه نسخه پشتیبان
delete_backup() {
	send_stats "تهیه نسخه پشتیبان"

	read -e -p "لطفاً نام پرونده پشتیبان را وارد کنید تا حذف شود:" BACKUP_NAME

	# بررسی کنید که آیا پرونده پشتیبان وجود دارد
	if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then
		echo "پرونده پشتیبان وجود ندارد!"
		exit 1
	fi

	# تهیه نسخه پشتیبان
	rm -f "$BACKUP_DIR/$BACKUP_NAME"

	if [ $? -eq 0 ]; then
		echo "نسخه پشتیبان با موفقیت حذف شد!"
	else
		echo "حذف پشتیبان انجام نشد!"
		exit 1
	fi
}

# منوی اصلی تهیه نسخه پشتیبان
linux_backup() {
	BACKUP_DIR="/backups"
	mkdir -p "$BACKUP_DIR"
	while true; do
		clear
		send_stats "عملکرد پشتیبان گیری سیستم"
		echo "عملکرد پشتیبان گیری سیستم"
		echo "------------------------"
		list_backups
		echo "------------------------"
		echo "1. یک نسخه پشتیبان تهیه کنید. بازیابی پشتیبان 3 را بازیابی کنید. نسخه پشتیبان را حذف کنید"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" choice
		case $choice in
			1) create_backup ;;
			2) restore_backup ;;
			3) delete_backup ;;
			*) break ;;
		esac
		read -e -p "برای ادامه ... Enter را فشار دهید ..."
	done
}









# نمایش لیست اتصال
list_connections() {
	echo "اتصال ذخیره شده:"
	echo "------------------------"
	cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}'
	echo "------------------------"
}


# یک اتصال جدید اضافه کنید
add_connection() {
	send_stats "یک اتصال جدید اضافه کنید"
	echo "مثال برای ایجاد یک اتصال جدید:"
	echo "- نام اتصال: my_server"
	echo "- آدرس IP: 192.168.1.100"
	echo "- نام کاربری: ریشه"
	echo "- بندر: 22"
	echo "------------------------"
	read -e -p "لطفاً نام اتصال را وارد کنید:" name
	read -e -p "لطفا آدرس IP خود را وارد کنید:" ip
	read -e -p "لطفاً نام کاربری (پیش فرض: ریشه) را وارد کنید:" user
	local user=${user:-root}  # 如果用户未输入，则使用默认值 root
	read -e -p "لطفاً شماره پورت را وارد کنید (پیش فرض: 22):" port
	local port=${port:-22}  # 如果用户未输入，则使用默认值 22

	echo "لطفاً روش احراز هویت را انتخاب کنید:"
	echo "1. رمز عبور"
	echo "2. کلید"
	read -e -p "لطفاً انتخاب را وارد کنید (1/2):" auth_choice

	case $auth_choice in
		1)
			read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key
			echo  # 换行
			;;
		2)
			echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:"
			local password_or_key=""
			while IFS= read -r line; do
				# اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد
				if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then
					break
				fi
				# اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید
				if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then
					local password_or_key+="${line}"$'\n'
				fi
			done

			# بررسی کنید که آیا این محتوای کلیدی است
			if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then
				local key_file="$KEY_DIR/$name.key"
				echo -n "$password_or_key" > "$key_file"
				chmod 600 "$key_file"
				local password_or_key="$key_file"
			fi
			;;
		*)
			echo "انتخاب نامعتبر!"
			return
			;;
	esac

	echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE"
	echo "اتصال ذخیره می شود!"
}



# اتصال را حذف کنید
delete_connection() {
	send_stats "اتصال را حذف کنید"
	read -e -p "لطفاً شماره اتصال را وارد کنید تا حذف شود:" num

	local connection=$(sed -n "${num}p" "$CONFIG_FILE")
	if [[ -z "$connection" ]]; then
		echo "خطا: اتصال مربوطه یافت نشد."
		return
	fi

	IFS='|' read -r name ip user port password_or_key <<< "$connection"

	# اگر اتصال از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید
	if [[ "$password_or_key" == "$KEY_DIR"* ]]; then
		rm -f "$password_or_key"
	fi

	sed -i "${num}d" "$CONFIG_FILE"
	echo "اتصال حذف شده است!"
}

# از اتصال استفاده کنید
use_connection() {
	send_stats "از اتصال استفاده کنید"
	read -e -p "لطفاً شماره اتصال را برای استفاده وارد کنید:" num

	local connection=$(sed -n "${num}p" "$CONFIG_FILE")
	if [[ -z "$connection" ]]; then
		echo "خطا: اتصال مربوطه یافت نشد."
		return
	fi

	IFS='|' read -r name ip user port password_or_key <<< "$connection"

	echo "اتصال به$name ($ip)..."
	if [[ -f "$password_or_key" ]]; then
		# با یک کلید ارتباط برقرار کنید
		ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip"
		if [[ $? -ne 0 ]]; then
			echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:"
			echo "1. آیا مسیر فایل کلید صحیح است؟$password_or_key"
			echo "2. آیا مجوزهای پرونده کلیدی صحیح است (باید 600 باشد)."
			echo "3. آیا سرور هدف اجازه ورود به سیستم را با استفاده از کلید می دهد."
		fi
	else
		# با یک رمز عبور ارتباط برقرار کنید
		if ! command -v sshpass &> /dev/null; then
			echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید."
			echo "روش نصب:"
			echo "  - Ubuntu/Debian: apt install sshpass"
			echo "  - CentOS/RHEL: yum install sshpass"
			return
		fi
		sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip"
		if [[ $? -ne 0 ]]; then
			echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:"
			echo "1. آیا نام کاربری و رمز عبور صحیح است."
			echo "2. آیا سرور هدف اجازه ورود به رمز عبور را می دهد."
			echo "3. آیا سرویس SSH سرور هدف به طور عادی در حال اجرا است."
		fi
	fi
}


ssh_manager() {
	send_stats "ابزار اتصال از راه دور SSH"

	CONFIG_FILE="$HOME/.ssh_connections"
	KEY_DIR="$HOME/.ssh/ssh_manager_keys"

	# بررسی کنید که آیا پرونده پیکربندی و فهرست کلید وجود دارد و آیا وجود ندارد ، آن را ایجاد کنید
	if [[ ! -f "$CONFIG_FILE" ]]; then
		touch "$CONFIG_FILE"
	fi

	if [[ ! -d "$KEY_DIR" ]]; then
		mkdir -p "$KEY_DIR"
		chmod 700 "$KEY_DIR"
	fi

	while true; do
		clear
		echo "ابزار اتصال از راه دور SSH"
		echo "از طریق SSH می تواند به سایر سیستم های لینوکس متصل شود"
		echo "------------------------"
		list_connections
		echo "1. یک اتصال جدید ایجاد کنید. از یک اتصال استفاده کنید 3. یک اتصال را حذف کنید"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" choice
		case $choice in
			1) add_connection ;;
			2) use_connection ;;
			3) delete_connection ;;
			0) break ;;
			*) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;;
		esac
	done
}












# لیست پارتیشن های دیسک سخت موجود
list_partitions() {
	echo "پارتیشن های دیسک سخت موجود:"
	lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop"
}

# پارتیشن را سوار کنید
mount_partition() {
	send_stats "پارتیشن را سوار کنید"
	read -e -p "لطفاً نام پارتیشن را برای نصب وارد کنید (به عنوان مثال SDA1):" PARTITION

	# بررسی کنید که آیا پارتیشن وجود دارد
	if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
		echo "پارتیشن وجود ندارد!"
		return
	fi

	# بررسی کنید که آیا پارتیشن از قبل نصب شده است
	if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then
		echo "پارتیشن از قبل نصب شده است!"
		return
	fi

	# یک نقطه کوه ایجاد کنید
	MOUNT_POINT="/mnt/$PARTITION"
	mkdir -p "$MOUNT_POINT"

	# پارتیشن را سوار کنید
	mount "/dev/$PARTITION" "$MOUNT_POINT"

	if [ $? -eq 0 ]; then
		echo "پارتیشن با موفقیت:$MOUNT_POINT"
	else
		echo "پارتیشن کوه شکست خورد!"
		rmdir "$MOUNT_POINT"
	fi
}

# پارتیشن را حذف نصب کنید
unmount_partition() {
	send_stats "پارتیشن را حذف نصب کنید"
	read -e -p "لطفاً نام پارتیشن را وارد کنید (به عنوان مثال SDA1):" PARTITION

	# بررسی کنید که آیا پارتیشن از قبل نصب شده است
	MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION")
	if [ -z "$MOUNT_POINT" ]; then
		echo "پارتیشن نصب نشده است!"
		return
	fi

	# پارتیشن را حذف نصب کنید
	umount "/dev/$PARTITION"

	if [ $? -eq 0 ]; then
		echo "حذف پارتیشن با موفقیت:$MOUNT_POINT"
		rmdir "$MOUNT_POINT"
	else
		echo "حذف پارتیشن انجام نشد!"
	fi
}

# لیست پارتیشن های نصب شده
list_mounted_partitions() {
	echo "پارتیشن نصب شده:"
	df -h | grep -v "tmpfs\|udev\|overlay"
}

# پارتیشن فرمت
format_partition() {
	send_stats "پارتیشن فرمت"
	read -e -p "لطفاً نام پارتیشن را به قالب وارد کنید (به عنوان مثال SDA1):" PARTITION

	# بررسی کنید که آیا پارتیشن وجود دارد
	if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
		echo "پارتیشن وجود ندارد!"
		return
	fi

	# بررسی کنید که آیا پارتیشن از قبل نصب شده است
	if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then
		echo "پارتیشن نصب شده است ، لطفاً ابتدا آن را حذف کنید!"
		return
	fi

	# نوع سیستم فایل را انتخاب کنید
	echo "لطفاً نوع سیستم فایل را انتخاب کنید:"
	echo "1. ext4"
	echo "2. xfs"
	echo "3. ntfs"
	echo "4. vfat"
	read -e -p "لطفا انتخاب خود را وارد کنید:" FS_CHOICE

	case $FS_CHOICE in
		1) FS_TYPE="ext4" ;;
		2) FS_TYPE="xfs" ;;
		3) FS_TYPE="ntfs" ;;
		4) FS_TYPE="vfat" ;;
		*) echo "انتخاب نامعتبر!"; return ;;
	esac

	# تأیید قالب بندی
	read -e -p "تأیید قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPEاین است؟ (y/n):" CONFIRM
	if [ "$CONFIRM" != "y" ]; then
		echo "این عملیات لغو شده است."
		return
	fi

	# پارتیشن فرمت
	echo "قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPE ..."
	mkfs.$FS_TYPE "/dev/$PARTITION"

	if [ $? -eq 0 ]; then
		echo "قالب پارتیشن موفقیت آمیز بود!"
	else
		echo "قالب بندی پارتیشن شکست خورد!"
	fi
}

# وضعیت پارتیشن را بررسی کنید
check_partition() {
	send_stats "وضعیت پارتیشن را بررسی کنید"
	read -e -p "لطفاً نام پارتیشن را برای بررسی وارد کنید (به عنوان مثال SDA1):" PARTITION

	# بررسی کنید که آیا پارتیشن وجود دارد
	if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
		echo "پارتیشن وجود ندارد!"
		return
	fi

	# وضعیت پارتیشن را بررسی کنید
	echo "پارتیشن /dev /را بررسی کنید$PARTITIONوضعیت:"
	fsck "/dev/$PARTITION"
}

# منوی اصلی
disk_manager() {
	send_stats "عملکرد مدیریت دیسک سخت"
	while true; do
		clear
		echo "مدیریت پارتیشن دیسک سخت"
		echo -e "${gl_huang}این عملکرد در داخل دوره آزمایش آزمایش می شود ، لطفاً از آن در محیط تولید استفاده نکنید.${gl_bai}"
		echo "------------------------"
		list_partitions
		echo "------------------------"
		echo "1. پارتیشن را سوار کنید. پارتیشن را حذف کنید. نمایش پارتیشن نصب شده"
		echo "4. پارتیشن 5 را قالب بندی کنید. وضعیت پارتیشن را بررسی کنید"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" choice
		case $choice in
			1) mount_partition ;;
			2) unmount_partition ;;
			3) list_mounted_partitions ;;
			4) format_partition ;;
			5) check_partition ;;
			*) break ;;
		esac
		read -e -p "برای ادامه ... Enter را فشار دهید ..."
	done
}




# لیست کار را نشان دهید
list_tasks() {
	echo "وظایف همگام سازی ذخیره شده:"
	echo "---------------------------------"
	awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE"
	echo "---------------------------------"
}

# یک کار جدید اضافه کنید
add_task() {
	send_stats "یک کار همگام سازی جدید اضافه کنید"
	echo "یک مثال کار همگام سازی جدید ایجاد کنید:"
	echo "- نام کار: backup_www"
	echo "- دایرکتوری محلی: /var /www"
	echo "- آدرس از راه دور: user@192.168.1.100"
	echo "- دایرکتوری از راه دور: /پشتیبان /www"
	echo "- شماره پورت (پیش فرض 22)"
	echo "---------------------------------"
	read -e -p "لطفاً نام کار را وارد کنید:" name
	read -e -p "لطفا وارد فهرست محلی شوید:" local_path
	read -e -p "لطفاً فهرست راه دور را وارد کنید:" remote_path
	read -e -p "لطفاً کاربر از راه دور IP را وارد کنید:" remote
	read -e -p "لطفاً درگاه SSH را وارد کنید (پیش فرض 22):" port
	port=${port:-22}

	echo "لطفاً روش احراز هویت را انتخاب کنید:"
	echo "1. رمز عبور"
	echo "2. کلید"
	read -e -p "لطفاً (1/2) را انتخاب کنید:" auth_choice

	case $auth_choice in
		1)
			read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key
			echo  # 换行
			auth_method="password"
			;;
		2)
			echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:"
			local password_or_key=""
			while IFS= read -r line; do
				# اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد
				if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then
					break
				fi
				# اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید
				if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then
					password_or_key+="${line}"$'\n'
				fi
			done

			# بررسی کنید که آیا این محتوای کلیدی است
			if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then
				local key_file="$KEY_DIR/${name}_sync.key"
				echo -n "$password_or_key" > "$key_file"
				chmod 600 "$key_file"
				password_or_key="$key_file"
				auth_method="key"
			else
				echo "محتوای کلیدی نامعتبر!"
				return
			fi
			;;
		*)
			echo "انتخاب نامعتبر!"
			return
			;;
	esac

	echo "لطفاً حالت همگام سازی را انتخاب کنید:"
	echo "1. حالت استاندارد (-AVZ)"
	echo "2. پرونده هدف را حذف کنید (-avz-delete)"
	read -e -p "لطفاً (1/2) را انتخاب کنید:" mode
	case $mode in
		1) options="-avz" ;;
		2) options="-avz --delete" ;;
		*) echo "انتخاب نامعتبر ، از پیش فرض -avz استفاده کنید"; options="-avz" ;;
	esac

	echo "$name|$local_path|$remote|$remote_path|$port|$options|$auth_method|$password_or_key" >> "$CONFIG_FILE"

	install rsync rsync

	echo "کار ذخیره شد!"
}

# یک کار را حذف کنید
delete_task() {
	send_stats "کارهای همگام سازی را حذف کنید"
	read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num

	local task=$(sed -n "${num}p" "$CONFIG_FILE")
	if [[ -z "$task" ]]; then
		echo "خطا: کار مربوطه یافت نشد."
		return
	fi

	IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task"

	# اگر کار از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید
	if [[ "$auth_method" == "key" && "$password_or_key" == "$KEY_DIR"* ]]; then
		rm -f "$password_or_key"
	fi

	sed -i "${num}d" "$CONFIG_FILE"
	echo "کار حذف شد!"
}


run_task() {
	send_stats "انجام کارهای هماهنگ سازی"

	CONFIG_FILE="$HOME/.rsync_tasks"
	CRON_FILE="$HOME/.rsync_cron"

	# پارامترها را تجزیه و تحلیل کنید
	local direction="push"  # 默认是推送到远端
	local num

	if [[ "$1" == "push" || "$1" == "pull" ]]; then
		direction="$1"
		num="$2"
	else
		num="$1"
	fi

	# اگر شماره کار ورودی وجود ندارد ، کاربر را مجبور به ورود کنید
	if [[ -z "$num" ]]; then
		read -e -p "لطفاً شماره کار را برای اجرای آن وارد کنید:" num
	fi

	local task=$(sed -n "${num}p" "$CONFIG_FILE")
	if [[ -z "$task" ]]; then
		echo "خطا: کار یافت نشد!"
		return
	fi

	IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task"

	# منبع و مسیر هدف را مطابق با جهت همگام سازی تنظیم کنید
	if [[ "$direction" == "pull" ]]; then
		echo "کشیدن هماهنگ سازی به محلی:$remote:$local_path -> $remote_path"
		source="$remote:$local_path"
		destination="$remote_path"
	else
		echo "همگام سازی را به انتهای از راه دور فشار دهید:$local_path -> $remote:$remote_path"
		source="$local_path"
		destination="$remote:$remote_path"
	fi

	# پارامترهای مشترک اتصال SSH را اضافه کنید
	local ssh_options="-p $port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

	if [[ "$auth_method" == "password" ]]; then
		if ! command -v sshpass &> /dev/null; then
			echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید."
			echo "روش نصب:"
			echo "  - Ubuntu/Debian: apt install sshpass"
			echo "  - CentOS/RHEL: yum install sshpass"
			return
		fi
		sshpass -p "$password_or_key" rsync $options -e "ssh $ssh_options" "$source" "$destination"
	else
		# بررسی کنید که آیا پرونده اصلی وجود دارد و آیا مجوزها صحیح هستند
		if [[ ! -f "$password_or_key" ]]; then
			echo "خطا: پرونده کلیدی وجود ندارد:$password_or_key"
			return
		fi

		if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then
			echo "هشدار: مجوزهای کلیدی پرونده نادرست است و تعمیر می شوند ..."
			chmod 600 "$password_or_key"
		fi

		rsync $options -e "ssh -i $password_or_key $ssh_options" "$source" "$destination"
	fi

	if [[ $? -eq 0 ]]; then
		echo "هماهنگ سازی کامل است!"
	else
		echo "هماهنگ سازی شکست خورد! لطفا موارد زیر را بررسی کنید:"
		echo "1. آیا اتصال شبکه طبیعی است؟"
		echo "2. آیا میزبان از راه دور در دسترس است؟"
		echo "3. آیا اطلاعات احراز هویت صحیح است؟"
		echo "4. آیا دایرکتوری های محلی و از راه دور مجوزهای دسترسی صحیح دارند"
	fi
}


# یک کار به موقع ایجاد کنید
schedule_task() {
	send_stats "کارهای زمان بندی همگام سازی را اضافه کنید"

	read -e -p "لطفاً شماره کار را وارد کنید تا مرتباً هماهنگ شود:" num
	if ! [[ "$num" =~ ^[0-9]+$ ]]; then
		echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!"
		return
	fi

	echo "لطفاً فاصله اجرای به موقع را انتخاب کنید:"
	echo "1) یک بار در ساعت اجرا کنید"
	echo "2) یک بار در روز اجرا کنید"
	echo "3) هفته ای یک بار اجرا کنید"
	read -e -p "لطفاً گزینه ها را وارد کنید (1/2/3):" interval

	local random_minute=$(shuf -i 0-59 -n 1)  # 生成 0-59 之间的随机分钟数
	local cron_time=""
	case "$interval" in
		1) cron_time="$random_minute * * * *" ;;  # 每小时，随机分钟执行
		2) cron_time="$random_minute 0 * * *" ;;  # 每天，随机分钟执行
		3) cron_time="$random_minute 0 * * 1" ;;  # 每周，随机分钟执行
		*) echo "خطا: لطفاً یک گزینه معتبر وارد کنید!" ; return ;;
	esac

	local cron_job="$cron_time k rsync_run $num"
	local cron_job="$cron_time k rsync_run $num"

	# بررسی کنید که آیا همان کار قبلاً وجود دارد
	if crontab -l | grep -q "k rsync_run $num"; then
		echo "خطا: همگام سازی زمان این کار از قبل وجود دارد!"
		return
	fi

	# یک crontab برای کاربر ایجاد کنید
	(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
	echo "کار زمان بندی ایجاد شده است:$cron_job"
}

# مشاهده وظایف برنامه ریزی شده
view_tasks() {
	echo "کارهای زمان بندی فعلی:"
	echo "---------------------------------"
	crontab -l | grep "k rsync_run"
	echo "---------------------------------"
}

# کارهای زمان بندی را حذف کنید
delete_task_schedule() {
	send_stats "وظایف زمان بندی همگام سازی را حذف کنید"
	read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num
	if ! [[ "$num" =~ ^[0-9]+$ ]]; then
		echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!"
		return
	fi

	crontab -l | grep -v "k rsync_run $num" | crontab -
	echo "شماره کار حذف شده$numکارهای زمان بندی"
}


# منوی اصلی مدیریت کار
rsync_manager() {
	CONFIG_FILE="$HOME/.rsync_tasks"
	CRON_FILE="$HOME/.rsync_cron"

	while true; do
		clear
		echo "ابزار همگام سازی از راه دور RSYNC"
		echo "هماهنگ سازی بین دایرکتوری های از راه دور از هماهنگ سازی افزایشی ، کارآمد و پایدار پشتیبانی می کند."
		echo "---------------------------------"
		list_tasks
		echo
		view_tasks
		echo
		echo "1. ایجاد یک کار جدید 2. یک کار را حذف کنید"
		echo "3. هماهنگ سازی محلی را در انتهای از راه دور انجام دهید. هماهنگ سازی از راه دور را به انتهای محلی انجام دهید"
		echo "5. یک کار زمان بندی ایجاد کنید 6. یک کار زمان بندی را حذف کنید"
		echo "---------------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "---------------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" choice
		case $choice in
			1) add_task ;;
			2) delete_task ;;
			3) run_task push;;
			4) run_task pull;;
			5) schedule_task ;;
			6) delete_task_schedule ;;
			0) break ;;
			*) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;;
		esac
		read -e -p "برای ادامه ... Enter را فشار دهید ..."
	done
}









linux_ps() {

	clear
	send_stats "پرس و جو اطلاعاتی سیستم"

	ip_address

	local cpu_info=$(lscpu | awk -F': +' '/Model name:/ {print $2; exit}')

	local cpu_usage_percent=$(awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf "%.0f\n", (($2+$4-u1) * 100 / (t-t1))}' \
		<(grep 'cpu ' /proc/stat) <(sleep 1; grep 'cpu ' /proc/stat))

	local cpu_cores=$(nproc)

	local cpu_freq=$(cat /proc/cpuinfo | grep "MHz" | head -n 1 | awk '{printf "%.1f GHz\n", $4/1000}')

	local mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2fM (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}')

	local disk_info=$(df -h | awk '$NF=="/"{printf "%s/%s (%s)", $3, $2, $5}')

	local ipinfo=$(curl -s ipinfo.io)
	local country=$(echo "$ipinfo" | grep 'country' | awk -F': ' '{print $2}' | tr -d '",')
	local city=$(echo "$ipinfo" | grep 'city' | awk -F': ' '{print $2}' | tr -d '",')
	local isp_info=$(echo "$ipinfo" | grep 'org' | awk -F': ' '{print $2}' | tr -d '",')

	local load=$(uptime | awk '{print $(NF-2), $(NF-1), $NF}')
	local dns_addresses=$(awk '/^nameserver/{printf "%s ", $2} END {print ""}' /etc/resolv.conf)


	local cpu_arch=$(uname -m)

	local hostname=$(uname -n)

	local kernel_version=$(uname -r)

	local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
	local queue_algorithm=$(sysctl -n net.core.default_qdisc)

	local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"')

	output_status

	local current_time=$(date "+%Y-%m-%d %I:%M %p")


	local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}')

	local runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}')

	local timezone=$(current_timezone)


	echo ""
	echo -e "پرس و جو اطلاعاتی سیستم"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}نام میزبان:${gl_bai}$hostname"
	echo -e "${gl_kjlan}نسخه سیستم:${gl_bai}$os_info"
	echo -e "${gl_kjlan}نسخه لینوکس:${gl_bai}$kernel_version"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}معماری CPU:${gl_bai}$cpu_arch"
	echo -e "${gl_kjlan}مدل CPU:${gl_bai}$cpu_info"
	echo -e "${gl_kjlan}تعداد هسته های CPU:${gl_bai}$cpu_cores"
	echo -e "${gl_kjlan}فرکانس CPU:${gl_bai}$cpu_freq"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}اشغال CPU:${gl_bai}$cpu_usage_percent%"
	echo -e "${gl_kjlan}بار سیستم:${gl_bai}$load"
	echo -e "${gl_kjlan}حافظه فیزیکی:${gl_bai}$mem_info"
	echo -e "${gl_kjlan}حافظه مجازی:${gl_bai}$swap_info"
	echo -e "${gl_kjlan}اشغال دیسک سخت:${gl_bai}$disk_info"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}$output"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}الگوریتم شبکه:${gl_bai}$congestion_algorithm $queue_algorithm"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}اپراتور:${gl_bai}$isp_info"
	if [ -n "$ipv4_address" ]; then
		echo -e "${gl_kjlan}آدرس IPv4:${gl_bai}$ipv4_address"
	fi

	if [ -n "$ipv6_address" ]; then
		echo -e "${gl_kjlan}آدرس IPv6:${gl_bai}$ipv6_address"
	fi
	echo -e "${gl_kjlan}آدرس DNS:${gl_bai}$dns_addresses"
	echo -e "${gl_kjlan}موقعیت جغرافیایی:${gl_bai}$country $city"
	echo -e "${gl_kjlan}زمان سیستم:${gl_bai}$timezone $current_time"
	echo -e "${gl_kjlan}-------------"
	echo -e "${gl_kjlan}زمان اجرا:${gl_bai}$runtime"
	echo



}



linux_tools() {

  while true; do
	  clear
	  # send_stats "ابزارهای اساسی"
	  echo -e "ابزارهای اساسی"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}ابزار دانلود فرفری${gl_huang}★${gl_bai}                   ${gl_kjlan}2.   ${gl_bai}ابزار بارگیری Wget${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}3.   ${gl_bai}ابزار مجوز مدیریت فوق العاده سودو${gl_kjlan}4.   ${gl_bai}ابزار ارتباط ارتباطی SOCAT"
	  echo -e "${gl_kjlan}5.   ${gl_bai}ابزار نظارت بر سیستم HTOP${gl_kjlan}6.   ${gl_bai}ابزار نظارت بر ترافیک شبکه IFTOP"
	  echo -e "${gl_kjlan}7.   ${gl_bai}ابزار فشرده سازی فشرده سازی زیپ از حالت فشرده${gl_kjlan}8.   ${gl_bai}ابزار فشرده سازی فشرده سازی TAR GZ"
	  echo -e "${gl_kjlan}9.   ${gl_bai}ابزار اجرای پس زمینه چند کانال Tmux${gl_kjlan}10.  ${gl_bai}FFMPEG ویدیوی رمزگذاری ابزار پخش مستقیم"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}11.  ${gl_bai}ابزارهای نظارت مدرن BTOP${gl_huang}★${gl_bai}             ${gl_kjlan}12.  ${gl_bai}ابزار مدیریت پرونده"
	  echo -e "${gl_kjlan}13.  ${gl_bai}ابزار مشاهده اشغال دیسک NCDU${gl_kjlan}14.  ${gl_bai}ابزار جستجوی جهانی FZF"
	  echo -e "${gl_kjlan}15.  ${gl_bai}ویرایشگر متن VIM${gl_kjlan}16.  ${gl_bai}ویرایشگر متن نانو${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}17.  ${gl_bai}سیستم کنترل نسخه GIT"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}21.  ${gl_bai}ضمانت صفحه ماتریس${gl_kjlan}22.  ${gl_bai}امنیت صفحه نمایش"
	  echo -e "${gl_kjlan}26.  ${gl_bai}بازی تتریس${gl_kjlan}27.  ${gl_bai}بازی خوردن مار"
	  echo -e "${gl_kjlan}28.  ${gl_bai}بازی مهاجم فضا"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}31.  ${gl_bai}همه را نصب کنید${gl_kjlan}32.  ${gl_bai}همه نصب ها (به استثنای ذخیره کننده های صفحه نمایش و بازی)${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}33.  ${gl_bai}حذف همه"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}41.  ${gl_bai}ابزار مشخص شده را نصب کنید${gl_kjlan}42.  ${gl_bai}ابزار مشخص شده را حذف کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			  clear
			  install curl
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  curl --help
			  send_stats "پیچ را نصب کنید"
			  ;;
		  2)
			  clear
			  install wget
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  wget --help
			  send_stats "نصب wget"
			  ;;
			3)
			  clear
			  install sudo
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  sudo --help
			  send_stats "sudo را نصب کنید"
			  ;;
			4)
			  clear
			  install socat
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  socat -h
			  send_stats "SOCAT را نصب کنید"
			  ;;
			5)
			  clear
			  install htop
			  clear
			  htop
			  send_stats "HTOP را نصب کنید"
			  ;;
			6)
			  clear
			  install iftop
			  clear
			  iftop
			  send_stats "iftop را نصب کنید"
			  ;;
			7)
			  clear
			  install unzip
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  unzip
			  send_stats "anzip را نصب کنید"
			  ;;
			8)
			  clear
			  install tar
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  tar --help
			  send_stats "تار نصب"
			  ;;
			9)
			  clear
			  install tmux
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  tmux --help
			  send_stats "نصب tmux"
			  ;;
			10)
			  clear
			  install ffmpeg
			  clear
			  echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
			  ffmpeg --help
			  send_stats "نصب ffmpeg"
			  ;;

			11)
			  clear
			  install btop
			  clear
			  btop
			  send_stats "BTOP را نصب کنید"
			  ;;
			12)
			  clear
			  install ranger
			  cd /
			  clear
			  ranger
			  cd ~
			  send_stats "Ranger را نصب کنید"
			  ;;
			13)
			  clear
			  install ncdu
			  cd /
			  clear
			  ncdu
			  cd ~
			  send_stats "NCDU را نصب کنید"
			  ;;
			14)
			  clear
			  install fzf
			  cd /
			  clear
			  fzf
			  cd ~
			  send_stats "FZF را نصب کنید"
			  ;;
			15)
			  clear
			  install vim
			  cd /
			  clear
			  vim -h
			  cd ~
			  send_stats "نصب ویم"
			  ;;
			16)
			  clear
			  install nano
			  cd /
			  clear
			  nano -h
			  cd ~
			  send_stats "نانو را نصب کنید"
			  ;;


			17)
			  clear
			  install git
			  cd /
			  clear
			  git --help
			  cd ~
			  send_stats "git را نصب کنید"
			  ;;

			21)
			  clear
			  install cmatrix
			  clear
			  cmatrix
			  send_stats "نصب cmatrix"
			  ;;
			22)
			  clear
			  install sl
			  clear
			  sl
			  send_stats "نصب SL"
			  ;;
			26)
			  clear
			  install bastet
			  clear
			  bastet
			  send_stats "باست را نصب کنید"
			  ;;
			27)
			  clear
			  install nsnake
			  clear
			  nsnake
			  send_stats "nsnake را نصب کنید"
			  ;;
			28)
			  clear
			  install ninvaders
			  clear
			  ninvaders
			  send_stats "ninvaders را نصب کنید"
			  ;;

		  31)
			  clear
			  send_stats "همه را نصب کنید"
			  install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git
			  ;;

		  32)
			  clear
			  send_stats "نصب همه (به استثنای بازی ها و ذخیره های صفحه نمایش)"
			  install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git
			  ;;


		  33)
			  clear
			  send_stats "حذف همه"
			  remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git
			  ;;

		  41)
			  clear
			  read -e -p "لطفاً نام ابزار نصب شده را وارد کنید (wget curl sudo htop):" installname
			  install $installname
			  send_stats "نرم افزار مشخص شده را نصب کنید"
			  ;;
		  42)
			  clear
			  read -e -p "لطفاً نام ابزار حذف شده را وارد کنید (HTOP UFW TMUX CMATRIX):" removename
			  remove $removename
			  send_stats "نرم افزار مشخص شده را حذف کنید"
			  ;;

		  0)
			  kejilion
			  ;;

		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end
  done




}


linux_bbr() {
	clear
	send_stats "مدیریت BBR"
	if [ -f "/etc/alpine-release" ]; then
		while true; do
			  clear
			  local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
			  local queue_algorithm=$(sysctl -n net.core.default_qdisc)
			  echo "الگوریتم مسدود کننده TCP فعلی:$congestion_algorithm $queue_algorithm"

			  echo ""
			  echo "مدیریت BBR"
			  echo "------------------------"
			  echo "1. BBRV3 را روشن کنید. BBRV3 را خاموش کنید (راه اندازی مجدد)"
			  echo "------------------------"
			  echo "0. به منوی قبلی برگردید"
			  echo "------------------------"
			  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

			  case $sub_choice in
				  1)
					bbr_on
					send_stats "Alpine BBR3 را فعال کنید"
					  ;;
				  2)
					sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf
					sysctl -p
					server_reboot
					  ;;
				  *)
					  break  # 跳出循环，退出菜单
					  ;;

			  esac
		done
	else
		install wget
		wget --no-check-certificate -O tcpx.sh ${gh_proxy}raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcpx.sh
		chmod +x tcpx.sh
		./tcpx.sh
	fi


}





linux_docker() {

	while true; do
	  clear
	  # Send_stats "مدیریت داکر"
	  echo -e "مدیریت داکر"
	  docker_tato
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}محیط داکر را نصب و به روز کنید${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}2.   ${gl_bai}مشاهده وضعیت جهانی Docker${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}3.   ${gl_bai}مدیریت کانتینر داکر${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}4.   ${gl_bai}مدیریت تصویر داکر"
	  echo -e "${gl_kjlan}5.   ${gl_bai}مدیریت شبکه داکر"
	  echo -e "${gl_kjlan}6.   ${gl_bai}مدیریت حجم داکر"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}7.   ${gl_bai}ظروف داکر بی فایده و حجم داده های شبکه آینه را تمیز کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}8.   ${gl_bai}منبع Docker را جایگزین کنید"
	  echo -e "${gl_kjlan}9.   ${gl_bai}پرونده daemon.json را ویرایش کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}11.  ${gl_bai}دسترسی Docker-IPV6 را فعال کنید"
	  echo -e "${gl_kjlan}12.  ${gl_bai}دسترسی نزدیک Docker-IPV6"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}20.  ${gl_bai}محیط داکر را حذف کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			clear
			send_stats "محیط داکر را نصب کنید"
			install_add_docker

			  ;;
		  2)
			  clear
			  local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
			  local image_count=$(docker images -q 2>/dev/null | wc -l)
			  local network_count=$(docker network ls -q 2>/dev/null | wc -l)
			  local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)

			  send_stats "داکر وضعیت جهانی"
			  echo "نسخه داکر"
			  docker -v
			  docker compose version

			  echo ""
			  echo -e "تصویر داکر:${gl_lv}$image_count${gl_bai} "
			  docker image ls
			  echo ""
			  echo -e "ظرف داکر:${gl_lv}$container_count${gl_bai}"
			  docker ps -a
			  echo ""
			  echo -e "حجم داکر:${gl_lv}$volume_count${gl_bai}"
			  docker volume ls
			  echo ""
			  echo -e "شبکه داکر:${gl_lv}$network_count${gl_bai}"
			  docker network ls
			  echo ""

			  ;;
		  3)
			  docker_ps
			  ;;
		  4)
			  docker_image
			  ;;

		  5)
			  while true; do
				  clear
				  send_stats "مدیریت شبکه داکر"
				  echo "لیست شبکه داکر"
				  echo "------------------------------------------------------------"
				  docker network ls
				  echo ""

				  echo "------------------------------------------------------------"
				  container_ids=$(docker ps -q)
				  printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"

				  for container_id in $container_ids; do
					  local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")

					  local container_name=$(echo "$container_info" | awk '{print $1}')
					  local network_info=$(echo "$container_info" | cut -d' ' -f2-)

					  while IFS= read -r line; do
						  local network_name=$(echo "$line" | awk '{print $1}')
						  local ip_address=$(echo "$line" | awk '{print $2}')

						  printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
					  done <<< "$network_info"
				  done

				  echo ""
				  echo "شبکه"
				  echo "------------------------"
				  echo "1. ایجاد یک شبکه"
				  echo "2. به اینترنت بپیوندید"
				  echo "3. از شبکه خارج شوید"
				  echo "4. شبکه را حذف کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
						  send_stats "ایجاد یک شبکه"
						  read -e -p "یک نام شبکه جدید تنظیم کنید:" dockernetwork
						  docker network create $dockernetwork
						  ;;
					  2)
						  send_stats "به اینترنت بپیوندید"
						  read -e -p "به نام شبکه بپیوندید:" dockernetwork
						  read -e -p "این ظروف به شبکه اضافه می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames

						  for dockername in $dockernames; do
							  docker network connect $dockernetwork $dockername
						  done
						  ;;
					  3)
						  send_stats "به اینترنت بپیوندید"
						  read -e -p "نام شبکه خروجی:" dockernetwork
						  read -e -p "این ظروف از شبکه خارج می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames

						  for dockername in $dockernames; do
							  docker network disconnect $dockernetwork $dockername
						  done

						  ;;

					  4)
						  send_stats "شبکه را حذف کنید"
						  read -e -p "لطفاً نام شبکه را وارد کنید تا حذف شود:" dockernetwork
						  docker network rm $dockernetwork
						  ;;

					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done
			  ;;

		  6)
			  while true; do
				  clear
				  send_stats "مدیریت حجم داکر"
				  echo "لیست حجم داکر"
				  docker volume ls
				  echo ""
				  echo "عملیات حجم"
				  echo "------------------------"
				  echo "1. یک جلد جدید ایجاد کنید"
				  echo "2. حجم مشخص شده را حذف کنید"
				  echo "3. همه جلد ها را حذف کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
						  send_stats "یک جلد جدید ایجاد کنید"
						  read -e -p "نام جلد جدید را تنظیم کنید:" dockerjuan
						  docker volume create $dockerjuan

						  ;;
					  2)
						  read -e -p "نام حجم حذف را وارد کنید (لطفاً چندین نام حجم را با فضاها جدا کنید):" dockerjuans

						  for dockerjuan in $dockerjuans; do
							  docker volume rm $dockerjuan
						  done

						  ;;

					   3)
						  send_stats "همه حجم ها را حذف کنید"
						  read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗？(Y/N): ")" choice
						  case "$choice" in
							[Yy])
							  docker volume prune -f
							  ;;
							[Nn])
							  ;;
							*)
							  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
							  ;;
						  esac
						  ;;

					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done
			  ;;
		  7)
			  clear
			  send_stats "تمیز کردن داکر"
			  read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络，包括停止的容器，确定清理吗？(Y/N): ")" choice
			  case "$choice" in
				[Yy])
				  docker system prune -af --volumes
				  ;;
				[Nn])
				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac
			  ;;
		  8)
			  clear
			  send_stats "منبع"
			  bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
			  ;;

		  9)
			  clear
			  install nano
			  mkdir -p /etc/docker && nano /etc/docker/daemon.json
			  restart docker
			  ;;

		  11)
			  clear
			  send_stats "Docker V6 باز است"
			  docker_ipv6_on
			  ;;

		  12)
			  clear
			  send_stats "Docker V6 سطح"
			  docker_ipv6_off
			  ;;

		  20)
			  clear
			  send_stats "داکر حذف نصب"
			  read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗？(Y/N): ")" choice
			  case "$choice" in
				[Yy])
				  docker ps -a -q | xargs -r docker rm -f && docker images -q | xargs -r docker rmi && docker network prune -f && docker volume prune -f
				  remove docker docker-compose docker-ce docker-ce-cli containerd.io
				  rm -f /etc/docker/daemon.json
				  hash -r
				  ;;
				[Nn])
				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac
			  ;;

		  0)
			  kejilion
			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end


	done


}



linux_test() {

	while true; do
	  clear
	  # send_stats "مجموعه اسکریپت تست"
	  echo -e "مجموعه اسکریپت تست"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}تشخیص وضعیت IP و باز کردن وضعیت"
	  echo -e "${gl_kjlan}1.   ${gl_bai}تشخیص وضعیت قفل chatgpt"
	  echo -e "${gl_kjlan}2.   ${gl_bai}تست قفل رسانه جریان منطقه"
	  echo -e "${gl_kjlan}3.   ${gl_bai}Yeahwu Streaming Media Detection Ollock"
	  echo -e "${gl_kjlan}4.   ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت IP Xykt${gl_huang}★${gl_bai}"

	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}اندازه گیری سرعت شبکه"
	  echo -e "${gl_kjlan}11.  ${gl_bai}BestTrace سه تست مسیریابی تأخیر Backhaul Network"
	  echo -e "${gl_kjlan}12.  ${gl_bai}تست خط سه شبکه MTR_TRACE"
	  echo -e "${gl_kjlan}13.  ${gl_bai}اندازه گیری سرعت سه شبکه فوق العاده"
	  echo -e "${gl_kjlan}14.  ${gl_bai}اسکریپت تست Backhaul NxTrace"
	  echo -e "${gl_kjlan}15.  ${gl_bai}NxTrace اسکریپت تست Backhaul IP را مشخص می کند"
	  echo -e "${gl_kjlan}16.  ${gl_bai}آزمون خط سه شبکه Ludashi2020"
	  echo -e "${gl_kjlan}17.  ${gl_bai}اسکریپت تست سرعت چند منظوره I-ABC"
	  echo -e "${gl_kjlan}18.  ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت شبکه NetQuality${gl_huang}★${gl_bai}"

	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}تست عملکرد سخت افزار"
	  echo -e "${gl_kjlan}21.  ${gl_bai}تست عملکرد YABS"
	  echo -e "${gl_kjlan}22.  ${gl_bai}اسکریپت تست عملکرد CPU IICU/GB5"

	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}تست جامع"
	  echo -e "${gl_kjlan}31.  ${gl_bai}تست عملکرد نیمکت"
	  echo -e "${gl_kjlan}32.  ${gl_bai}بررسی هیولا فیوژن SpiritySDX${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			  clear
			  send_stats "تشخیص وضعیت قفل chatgpt"
			  bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh)
			  ;;
		  2)
			  clear
			  send_stats "تست قفل رسانه جریان منطقه"
			  bash <(curl -L -s check.unlock.media)
			  ;;
		  3)
			  clear
			  send_stats "Yeahwu Streaming Media Detection Ollock"
			  install wget
			  wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash
			  ;;
		  4)
			  clear
			  send_stats "اسکریپت معاینه فیزیکی با کیفیت xykt_ip"
			  bash <(curl -Ls IP.Check.Place)
			  ;;


		  11)
			  clear
			  send_stats "BestTrace سه تست مسیریابی تأخیر Backhaul Network"
			  install wget
			  wget -qO- git.io/besttrace | bash
			  ;;
		  12)
			  clear
			  send_stats "MTR_TRACE سه تست خط بازگشت شبکه"
			  curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash
			  ;;
		  13)
			  clear
			  send_stats "اندازه گیری سرعت سه شبکه فوق العاده"
			  bash <(curl -Lso- https://git.io/superspeed_uxh)
			  ;;
		  14)
			  clear
			  send_stats "اسکریپت تست Backhaul NxTrace"
			  curl nxtrace.org/nt |bash
			  nexttrace --fast-trace --tcp
			  ;;
		  15)
			  clear
			  send_stats "NxTrace اسکریپت تست Backhaul IP را مشخص می کند"
			  echo "لیست IP هایی که می توانند ارجاع شوند"
			  echo "------------------------"
			  echo "مخابرات پکن: 219.141.136.12"
			  echo "پکن یونیکوم: 202.106.50.1"
			  echo "موبایل پکن: 221.179.155.161"
			  echo "مخابرات شانگهای: 202.96.209.133"
			  echo "شانگهای یونیکوم: 210.22.97.1"
			  echo "موبایل شانگهای: 211.136.112.200"
			  echo "Telecom Guangzhou: 58.60.188.222"
			  echo "Guangzhou Unicom: 210.21.196.6"
			  echo "موبایل گوانگژو: 120.196.165.24"
			  echo "چنگدو از راه دور: 61.139.2.69"
			  echo "چنگدو یونیکوم: 119.6.6.6"
			  echo "Chengdu Mobile: 211.137.96.205"
			  echo "Hunan Telecom: 36.111.200.100"
			  echo "Hunan Unicom: 42.48.16.100"
			  echo "Hunan Mobile: 39.134.254.6"
			  echo "------------------------"

			  read -e -p "یک IP مشخص را وارد کنید:" testip
			  curl nxtrace.org/nt |bash
			  nexttrace $testip
			  ;;

		  16)
			  clear
			  send_stats "آزمون خط سه شبکه Ludashi2020"
			  curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh
			  ;;

		  17)
			  clear
			  send_stats "اسکریپت تست سرعت چند منظوره I-ABC"
			  bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh)
			  ;;

		  18)
			  clear
			  send_stats "اسکریپت تست کیفیت شبکه"
			  bash <(curl -sL Net.Check.Place)
			  ;;

		  21)
			  clear
			  send_stats "تست عملکرد YABS"
			  check_swap
			  curl -sL yabs.sh | bash -s -- -i -5
			  ;;
		  22)
			  clear
			  send_stats "اسکریپت تست عملکرد CPU IICU/GB5"
			  check_swap
			  bash <(curl -sL bash.icu/gb5)
			  ;;

		  31)
			  clear
			  send_stats "تست عملکرد نیمکت"
			  curl -Lso- bench.sh | bash
			  ;;
		  32)
			  send_stats "بررسی هیولا فیوژن SpiritySDX"
			  clear
			  curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh
			  ;;

		  0)
			  kejilion

			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end

	done


}


linux_Oracle() {


	 while true; do
	  clear
	  send_stats "مجموعه اسکریپت Oracle Cloud"
	  echo -e "مجموعه اسکریپت Oracle Cloud"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}اسکریپت فعال دستگاه بیکار را نصب کنید"
	  echo -e "${gl_kjlan}2.   ${gl_bai}اسکریپت فعال دستگاه بیکار را حذف نصب کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}3.   ${gl_bai}DD اسکریپت سیستم را دوباره نصب کنید"
	  echo -e "${gl_kjlan}4.   ${gl_bai}کارآگاه r فیلمنامه را شروع کنید"
	  echo -e "${gl_kjlan}5.   ${gl_bai}حالت ورود به سیستم رمز عبور را روشن کنید"
	  echo -e "${gl_kjlan}6.   ${gl_bai}ابزار بازیابی IPv6"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			  clear
			  echo "اسکریپت فعال: CPU 10-20 ٪ حافظه 20 ٪ اشغال می کند"
			  read -e -p "آیا مطمئناً آن را نصب می کنید؟ (y/n):" choice
			  case "$choice" in
				[Yy])

				  install_docker

				  # مقادیر پیش فرض را تنظیم کنید
				  local DEFAULT_CPU_CORE=1
				  local DEFAULT_CPU_UTIL="10-20"
				  local DEFAULT_MEM_UTIL=20
				  local DEFAULT_SPEEDTEST_INTERVAL=120

				  # کاربر را وادار کنید تا تعداد هسته های CPU و درصد اشغال را وارد کند و در صورت ورود ، از مقدار پیش فرض استفاده کنید.
				  read -e -p "لطفاً تعداد هسته های CPU را وارد کنید [پیش فرض:$DEFAULT_CPU_CORE]: " cpu_core
				  local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE}

				  read -e -p "لطفاً محدوده درصد استفاده از CPU را وارد کنید (به عنوان مثال ، 10-20) [پیش فرض:$DEFAULT_CPU_UTIL]: " cpu_util
				  local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL}

				  read -e -p "لطفاً درصد استفاده از حافظه را وارد کنید [پیش فرض:$DEFAULT_MEM_UTIL]: " mem_util
				  local mem_util=${mem_util:-$DEFAULT_MEM_UTIL}

				  read -e -p "لطفاً زمان فاصله زمانی (ثانیه) را وارد کنید [پیش فرض:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval
				  local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL}

				  # ظرف داکر را اجرا کنید
				  docker run -itd --name=lookbusy --restart=always \
					  -e TZ=Asia/Shanghai \
					  -e CPU_UTIL="$cpu_util" \
					  -e CPU_CORE="$cpu_core" \
					  -e MEM_UTIL="$mem_util" \
					  -e SPEEDTEST_INTERVAL="$speedtest_interval" \
					  fogforest/lookbusy
				  send_stats "اسکریپت فعال نصب Oracle Cloud"

				  ;;
				[Nn])

				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac
			  ;;
		  2)
			  clear
			  docker rm -f lookbusy
			  docker rmi fogforest/lookbusy
			  send_stats "Oracle Cloud اسکریپت فعال را حذف نصب کرد"
			  ;;

		  3)
		  clear
		  echo "نصب مجدد سیستم"
		  echo "--------------------------------"
		  echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید."
		  read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice

		  case "$choice" in
			[Yy])
			  while true; do
				read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید: 1. Debian12 | 2. Ubuntu20.04:" sys_choice

				case "$sys_choice" in
				  1)
					local xitong="-d 12"
					break  # 结束循环
					;;
				  2)
					local xitong="-u 20.04"
					break  # 结束循环
					;;
				  *)
					echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید."
					;;
				esac
			  done

			  read -e -p "لطفاً رمز ورود مجدد خود را وارد کنید:" vpspasswd
			  install wget
			  bash <(wget --no-check-certificate -qO- "${gh_proxy}raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh") $xitong -v 64 -p $vpspasswd -port 22
			  send_stats "Oracle Cloud دوباره نصب اسکریپت سیستم"
			  ;;
			[Nn])
			  echo "لغو شده"
			  ;;
			*)
			  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
			  ;;
		  esac
			  ;;

		  4)
			  clear
			  echo "این ویژگی در مرحله توسعه است ، بنابراین با ما همراه باشید!"
			  ;;
		  5)
			  clear
			  add_sshpasswd

			  ;;
		  6)
			  clear
			  bash <(curl -L -s jhb.ovh/jb/v6.sh)
			  echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!"
			  send_stats "رفع IPv6"
			  ;;
		  0)
			  kejilion

			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end

	done



}


docker_tato() {

	local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
	local image_count=$(docker images -q 2>/dev/null | wc -l)
	local network_count=$(docker network ls -q 2>/dev/null | wc -l)
	local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)

	if command -v docker &> /dev/null; then
		echo -e "${gl_kjlan}------------------------"
		echo -e "${gl_lv}محیط نصب شده است${gl_bai}ظرف:${gl_lv}$container_count${gl_bai}آینه:${gl_lv}$image_count${gl_bai}شبکه:${gl_lv}$network_count${gl_bai}رول:${gl_lv}$volume_count${gl_bai}"
	fi
}



ldnmp_tato() {
local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l)
local output="站点: ${gl_lv}${cert_count}${gl_bai}"

local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml 2>/dev/null | tr -d '[:space:]')
if [ -n "$dbrootpasswd" ]; then
	local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2>/dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l)
fi

local db_output="数据库: ${gl_lv}${db_count}${gl_bai}"


if command -v docker &>/dev/null; then
	if docker ps --filter "name=nginx" --filter "status=running" | grep -q nginx; then
		echo -e "${gl_huang}------------------------"
		echo -e "${gl_lv}محیط نصب شده است${gl_bai}  $output  $db_output"
	fi
fi

}


fix_phpfpm_conf() {
	local container_name=$1
	docker exec "$container_name" sh -c "mkdir -p /run/$container_name && chmod 777 /run/$container_name"
	docker exec "$container_name" sh -c "sed -i '1i [global]\\ndaemonize = no' /usr/local/etc/php-fpm.d/www.conf"
	docker exec "$container_name" sh -c "sed -i '/^listen =/d' /usr/local/etc/php-fpm.d/www.conf"
	docker exec "$container_name" sh -c "echo -e '\nlisten = /run/$container_name/php-fpm.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0777' >> /usr/local/etc/php-fpm.d/www.conf"
	docker exec "$container_name" sh -c "rm -f /usr/local/etc/php-fpm.d/zz-docker.conf"

	find /home/web/conf.d/ -type f -name "*.conf" -exec sed -i "s#fastcgi_pass ${container_name}:9000;#fastcgi_pass unix:/run/${container_name}/php-fpm.sock;#g" {} \;

}






linux_ldnmp() {
  while true; do

	clear
	# SEND_STATS "ساختمان وب سایت LDNMP"
	echo -e "${gl_huang}ساختمان وب سایت LDNMP"
	ldnmp_tato
	echo -e "${gl_huang}------------------------"
	echo -e "${gl_huang}1.   ${gl_bai}محیط LDNMP را نصب کنید${gl_huang}★${gl_bai}                   ${gl_huang}2.   ${gl_bai}وردپرس را نصب کنید${gl_huang}★${gl_bai}"
	echo -e "${gl_huang}3.   ${gl_bai}تالار گفتمان دیسکو را نصب کنید${gl_huang}4.   ${gl_bai}دسک تاپ Kadao Cloud را نصب کنید"
	echo -e "${gl_huang}5.   ${gl_bai}ایستگاه فیلم و تلویزیون Apple CMS را نصب کنید${gl_huang}6.   ${gl_bai}یک شبکه کارت دیجیتال Unicorn نصب کنید"
	echo -e "${gl_huang}7.   ${gl_bai}وب سایت Flarum Forum را نصب کنید${gl_huang}8.   ${gl_bai}وب سایت وبلاگ سبک Typecho را نصب کنید"
	echo -e "${gl_huang}9.   ${gl_bai}بستر لینک مشترک Linkstack را نصب کنید${gl_huang}20.  ${gl_bai}سایت پویا را سفارشی کنید"
	echo -e "${gl_huang}------------------------"
	echo -e "${gl_huang}21.  ${gl_bai}فقط nginx را نصب کنید${gl_huang}★${gl_bai}                     ${gl_huang}22.  ${gl_bai}هدایت سایت"
	echo -e "${gl_huang}23.  ${gl_bai}پورت معکوس Proxy-IP+${gl_huang}★${gl_bai}            ${gl_huang}24.  ${gl_bai}پروکسی معکوس سایت - نام دامنه"
	echo -e "${gl_huang}25.  ${gl_bai}بستر مدیریت رمز عبور Bitwarden را نصب کنید${gl_huang}26.  ${gl_bai}وب سایت وبلاگ هاله را نصب کنید"
	echo -e "${gl_huang}27.  ${gl_bai}Generator Word Prompt Word Painting AI را نصب کنید${gl_huang}28.  ${gl_bai}تعادل بار پروکسی معکوس سایت"
	echo -e "${gl_huang}30.  ${gl_bai}سایت استاتیک را سفارشی کنید"
	echo -e "${gl_huang}------------------------"
	echo -e "${gl_huang}31.  ${gl_bai}مدیریت داده های سایت${gl_huang}★${gl_bai}                    ${gl_huang}32.  ${gl_bai}از کل داده های سایت پشتیبان تهیه کنید"
	echo -e "${gl_huang}33.  ${gl_bai}پشتیبان گیری از راه دور به موقع${gl_huang}34.  ${gl_bai}کل داده های سایت را بازیابی کنید"
	echo -e "${gl_huang}------------------------"
	echo -e "${gl_huang}35.  ${gl_bai}محافظت از محیط LDNMP${gl_huang}36.  ${gl_bai}محیط LDNMP را بهینه کنید"
	echo -e "${gl_huang}37.  ${gl_bai}محیط LDNMP را به روز کنید${gl_huang}38.  ${gl_bai}حذف محیط LDNMP"
	echo -e "${gl_huang}------------------------"
	echo -e "${gl_huang}0.   ${gl_bai}بازگشت به منوی اصلی"
	echo -e "${gl_huang}------------------------${gl_bai}"
	read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice


	case $sub_choice in
	  1)
	  ldnmp_install_status_one
	  ldnmp_install_all
		;;
	  2)
	  ldnmp_wp
		;;

	  3)
	  clear
	  # تالار گفتمان
	  webname="Discuz论坛"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/discuz.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20240520.zip
	  unzip latest.zip
	  rm latest.zip

	  restart_ldnmp


	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "پیشوند جدول: discuz_"


		;;

	  4)
	  clear
	  # دسک تاپ کدا
	  webname="可道云桌面"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/kdy.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  wget -O latest.zip ${gh_proxy}github.com/kalcaddle/kodbox/archive/refs/tags/1.50.02.zip
	  unzip -o latest.zip
	  rm latest.zip
	  mv /home/web/html/$yuming/kodbox* /home/web/html/$yuming/kodbox
	  restart_ldnmp

	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "میزبان redis: redis"

		;;

	  5)
	  clear
	  # CM Apple
	  webname="苹果CMS"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/maccms.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  # wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && rm maccms10.zip
	  wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && mv maccms10-*/* . && rm -r maccms10-* && rm maccms10.zip
	  cd /home/web/html/$yuming/template/ && wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/DYXS2.zip && unzip DYXS2.zip && rm /home/web/html/$yuming/template/DYXS2.zip
	  cp /home/web/html/$yuming/template/DYXS2/asset/admin/Dyxs2.php /home/web/html/$yuming/application/admin/controller
	  cp /home/web/html/$yuming/template/DYXS2/asset/admin/dycms.html /home/web/html/$yuming/application/admin/view/system
	  mv /home/web/html/$yuming/admin.php /home/web/html/$yuming/vip.php && wget -O /home/web/html/$yuming/application/extra/maccms.php ${gh_proxy}raw.githubusercontent.com/kejilion/Website_source_code/main/maccms.php

	  restart_ldnmp


	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "درگاه پایگاه داده: 3306"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "پیشوند پایگاه داده: MAC_"
	  echo "------------------------"
	  echo "پس از موفقیت نصب ، وارد آدرس پس زمینه شوید"
	  echo "https://$yuming/vip.php"

		;;

	  6)
	  clear
	  # کارت شمارش یک پا
	  webname="独脚数卡"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/dujiaoka.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  wget ${gh_proxy}github.com/assimon/dujiaoka/releases/download/2.0.6/2.0.6-antibody.tar.gz && tar -zxvf 2.0.6-antibody.tar.gz && rm 2.0.6-antibody.tar.gz

	  restart_ldnmp


	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "درگاه پایگاه داده: 3306"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo ""
	  echo "آدرس redis: redis"
	  echo "رمز عبور redis: به طور پیش فرض پر نشده است"
	  echo "بندر ردیس: 6379"
	  echo ""
	  echo "URL وب سایت: https: //$yuming"
	  echo "مسیر ورود به سیستم پس زمینه: /مدیر"
	  echo "------------------------"
	  echo "نام کاربری: مدیر"
	  echo "رمز عبور: مدیر"
	  echo "------------------------"
	  echo "اگر Red Error0 هنگام ورود به سیستم در گوشه سمت راست بالا ظاهر می شود ، لطفاً از دستور زیر استفاده کنید:"
	  echo "من همچنین بسیار عصبانی هستم که کارت شماره یونیکورن بسیار مشکل ساز است و چنین مشکلاتی وجود خواهد داشت!"
	  echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env"

		;;

	  7)
	  clear
	  # انجمن
	  webname="flarum论坛"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/flarum.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming

	  docker exec php sh -c "php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\""
	  docker exec php sh -c "php composer-setup.php"
	  docker exec php sh -c "php -r \"unlink('composer-setup.php');\""
	  docker exec php sh -c "mv composer.phar /usr/local/bin/composer"

	  docker exec php composer create-project flarum/flarum /var/www/html/$yuming
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require flarum-lang/chinese-simplified"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/polls"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/sitemap"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/oauth"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/best-answer:*"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require v17development/flarum-seo"
	  docker exec php sh -c "cd /var/www/html/$yuming && composer require clarkwinkelmann/flarum-ext-emojionearea"


	  restart_ldnmp


	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "پیشوند جدول: flarum_"
	  echo "اطلاعات سرپرست توسط خودتان تنظیم شده است"

		;;

	  8)
	  clear
	  # typecho
	  webname="typecho"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/typecho.com.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  wget -O latest.zip ${gh_proxy}github.com/typecho/typecho/releases/latest/download/typecho.zip
	  unzip latest.zip
	  rm latest.zip

	  restart_ldnmp


	  clear
	  ldnmp_web_on
	  echo "پیشوند پایگاه داده: typecho_"
	  echo "آدرس پایگاه داده: MySQL"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "نام بانک اطلاعاتی:$dbname"

		;;


	  9)
	  clear
	  # LinkStack
	  webname="LinkStack"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/refs/heads/main/index_php.conf
	  sed -i "s|/var/www/html/yuming.com/|/var/www/html/yuming.com/linkstack|g" /home/web/conf.d/$yuming.conf
	  sed -i "s|yuming.com|$yuming|g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming
	  wget -O latest.zip ${gh_proxy}github.com/linkstackorg/linkstack/releases/latest/download/linkstack.zip
	  unzip latest.zip
	  rm latest.zip

	  restart_ldnmp


	  clear
	  ldnmp_web_on
	  echo "آدرس پایگاه داده: MySQL"
	  echo "درگاه پایگاه داده: 3306"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
		;;

	  20)
	  clear
	  webname="PHP动态站点"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  ldnmp_install_status
	  install_ssltls
	  certs_status
	  add_db

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/index_php.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming

	  clear
	  echo -e "[${gl_huang}1/6${gl_bai}] کد منبع PHP را بارگذاری کنید"
	  echo "-------------"
	  echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست"
	  read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download

	  if [ -n "$url_download" ]; then
		  wget "$url_download"
	  fi

	  unzip $(ls -t *.zip | head -n 1)
	  rm -f $(ls -t *.zip | head -n 1)

	  clear
	  echo -e "[${gl_huang}2/6${gl_bai}] مسیری که در آن index.php قرار دارد"
	  echo "-------------"
	  # find "$(realpath .)" -name "index.php" -print
	  find "$(realpath .)" -name "index.php" -print | xargs -I {} dirname {}

	  read -e -p "لطفاً مسیر index.php را وارد کنید ، مشابه (/home/web/html/$yuming/wordpress/）： " index_lujing

	  sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf
	  sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf

	  clear
	  echo -e "[${gl_huang}3/6${gl_bai}] لطفاً نسخه PHP را انتخاب کنید"
	  echo "-------------"
	  read -e -p "1. آخرین نسخه PHP | 2. PHP7.4:" pho_v
	  case "$pho_v" in
		1)
		  sed -i "s#php:9000#php:9000#g" /home/web/conf.d/$yuming.conf
		  local PHP_Version="php"
		  ;;
		2)
		  sed -i "s#php:9000#php74:9000#g" /home/web/conf.d/$yuming.conf
		  local PHP_Version="php74"
		  ;;
		*)
		  echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید."
		  ;;
	  esac


	  clear
	  echo -e "[${gl_huang}4/6${gl_bai}] پسوند مشخص شده را نصب کنید"
	  echo "-------------"
	  echo "پسوند نصب شده"
	  docker exec php php -m

	  read -e -p "$(echo -e "输入需要安装的扩展名称，如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 ： ")" php_extensions
	  if [ -n "$php_extensions" ]; then
		  docker exec $PHP_Version install-php-extensions $php_extensions
	  fi


	  clear
	  echo -e "[${gl_huang}5/6${gl_bai}] پیکربندی سایت را ویرایش کنید"
	  echo "-------------"
	  echo "برای ادامه هر کلید ، هر کلید را فشار دهید ، و می توانید پیکربندی سایت را با جزئیات ، مانند محتوای شبه استاتیک و غیره تنظیم کنید."
	  read -n 1 -s -r -p ""
	  install nano
	  nano /home/web/conf.d/$yuming.conf


	  clear
	  echo -e "[${gl_huang}6/6${gl_bai}] مدیریت پایگاه داده"
	  echo "-------------"
	  read -e -p "1. من یک سایت جدید می سازم. من یک سایت قدیمی می سازم و یک نسخه پشتیبان از پایگاه داده دارم:" use_db
	  case $use_db in
		  1)
			  echo
			  ;;
		  2)
			  echo "پشتیبان گیری از پایگاه داده باید یک بسته فشرده شده .GZ-end باشد. لطفاً آن را در/خانه/فهرست قرار دهید تا از واردات داده های پشتیبان Pagoda/1Panel پشتیبانی کنید."
			  read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور داده های پشتیبان وارد کنید. مستقیماً Enter را فشار دهید از راه دور بارگیری می شود:" url_download_db

			  cd /home/
			  if [ -n "$url_download_db" ]; then
				  wget "$url_download_db"
			  fi
			  gunzip $(ls -t *.gz | head -n 1)
			  latest_sql=$(ls -t *.sql | head -n 1)
			  dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
			  docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname < "/home/$latest_sql"
			  echo "داده های جدول واردات پایگاه داده"
			  docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;"
			  rm -f *.sql
			  echo "واردات پایگاه داده تکمیل شد"
			  ;;
		  *)
			  echo
			  ;;
	  esac

	  docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini

	  restart_ldnmp
	  ldnmp_web_on
	  prefix="web$(shuf -i 10-99 -n 1)_"
	  echo "آدرس پایگاه داده: MySQL"
	  echo "نام بانک اطلاعاتی:$dbname"
	  echo "نام کاربری:$dbuse"
	  echo "رمز عبور:$dbusepasswd"
	  echo "پیشوند جدول:$prefix"
	  echo "اطلاعات ورود به سیستم توسط خود شما تنظیم شده است"

		;;


	  21)
	  ldnmp_install_status_one
	  nginx_install_all
		;;

	  22)
	  clear
	  webname="站点重定向"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  read -e -p "لطفاً نام دامنه پرش را وارد کنید:" reverseproxy
	  nginx_install_status
	  install_ssltls
	  certs_status

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/rewrite.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  sed -i "s/baidu.com/$reverseproxy/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  docker exec nginx nginx -s reload

	  nginx_web_on


		;;

	  23)
	  ldnmp_Proxy
		;;

	  24)
	  clear
	  webname="反向代理-域名"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  echo -e "قالب نام دامنه:${gl_huang}google.com${gl_bai}"
	  read -e -p "لطفاً نام دامنه ضد نسل خود را وارد کنید:" fandai_yuming
	  nginx_install_status
	  install_ssltls
	  certs_status

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  sed -i "s|fandaicom|$fandai_yuming|g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  docker exec nginx nginx -s reload

	  nginx_web_on

		;;


	  25)
	  clear
	  webname="Bitwarden"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  nginx_install_status
	  install_ssltls
	  certs_status

	  docker run -d \
		--name bitwarden \
		--restart always \
		-p 3280:80 \
		-v /home/web/html/$yuming/bitwarden/data:/data \
		vaultwarden/server
	  duankou=3280
	  reverse_proxy

	  nginx_web_on

		;;

	  26)
	  clear
	  webname="halo"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  nginx_install_status
	  install_ssltls
	  certs_status

	  docker run -d --name halo --restart always -p 8010:8090 -v /home/web/html/$yuming/.halo2:/root/.halo2 halohub/halo:2
	  duankou=8010
	  reverse_proxy

	  nginx_web_on

		;;

	  27)
	  clear
	  webname="AI绘画提示词生成器"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  nginx_install_status
	  install_ssltls
	  certs_status

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming

	  wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/ai_prompt_generator.zip
	  unzip $(ls -t *.zip | head -n 1)
	  rm -f $(ls -t *.zip | head -n 1)

	  docker exec nginx chmod -R nginx:nginx /var/www/html
	  docker exec nginx nginx -s reload

	  nginx_web_on

		;;

	  28)
	  ldnmp_Proxy_backend
		;;


	  30)
	  clear
	  webname="静态站点"
	  send_stats "نصب کردن$webname"
	  echo "استقرار را شروع کنید$webname"
	  add_yuming
	  repeat_add_yuming
	  nginx_install_status
	  install_ssltls
	  certs_status

	  wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf
	  sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
	  nginx_http_on

	  cd /home/web/html
	  mkdir $yuming
	  cd $yuming


	  clear
	  echo -e "[${gl_huang}1/2${gl_bai}] کد منبع استاتیک را بارگذاری کنید"
	  echo "-------------"
	  echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست"
	  read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download

	  if [ -n "$url_download" ]; then
		  wget "$url_download"
	  fi

	  unzip $(ls -t *.zip | head -n 1)
	  rm -f $(ls -t *.zip | head -n 1)

	  clear
	  echo -e "[${gl_huang}2/2${gl_bai}] مسیری که در آن index.html واقع شده است"
	  echo "-------------"
	  # find "$(realpath .)" -name "index.html" -print
	  find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {}

	  read -e -p "لطفاً مسیر index.html را وارد کنید ، مشابه (/home/web/html/$yuming/index/）： " index_lujing

	  sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf
	  sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf

	  docker exec nginx chmod -R nginx:nginx /var/www/html
	  docker exec nginx nginx -s reload

	  nginx_web_on

		;;







	31)
	  ldnmp_web_status
	  ;;


	32)
	  clear
	  send_stats "نسخه پشتیبان از محیط زیست LDNMP"

	  local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz"
	  echo -e "${gl_huang}پشتیبان گیری$backup_filename ...${gl_bai}"
	  cd /home/ && tar czvf "$backup_filename" web

	  while true; do
		clear
		echo "پرونده پشتیبان ایجاد شده است: /صفحه اصلی$backup_filename"
		read -e -p "آیا می خواهید داده های پشتیبان را به یک سرور از راه دور منتقل کنید؟ (y/n):" choice
		case "$choice" in
		  [Yy])
			read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip
			if [ -z "$remote_ip" ]; then
			  echo "خطا: لطفاً IP از راه دور سرور را وارد کنید."
			  continue
			fi
			local latest_tar=$(ls -t /home/*.tar.gz | head -1)
			if [ -n "$latest_tar" ]; then
			  ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip"
			  sleep 2  # 添加等待时间
			  scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/"
			  echo "این پرونده به دایرکتوری خانه از راه دور سرور منتقل شده است."
			else
			  echo "پرونده منتقل شده یافت نشد."
			fi
			break
			;;
		  [Nn])
			break
			;;
		  *)
			echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
			;;
		esac
	  done
	  ;;

	33)
	  clear
	  send_stats "پشتیبان گیری از راه دور به موقع"
	  read -e -p "IP سرور از راه دور را وارد کنید:" useip
	  read -e -p "رمز ورود سرور از راه دور را وارد کنید:" usepasswd

	  cd ~
	  wget -O ${useip}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1
	  chmod +x ${useip}_beifen.sh

	  sed -i "s/0.0.0.0/$useip/g" ${useip}_beifen.sh
	  sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh

	  echo "------------------------"
	  echo "1. پشتیبان گیری هفتگی 2. پشتیبان گیری روزانه"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi

	  case $dingshi in
		  1)
			  check_crontab_installed
			  read -e -p "روز هفته را برای پشتیبان گیری هفتگی خود انتخاب کنید (0-6 ، 0 نشان دهنده یکشنبه):" weekday
			  (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1
			  ;;
		  2)
			  check_crontab_installed
			  read -e -p "زمان پشتیبان گیری روزانه (ساعت ، 0-23) را انتخاب کنید:" hour
			  (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1
			  ;;
		  *)
			  break  # 跳出
			  ;;
	  esac

	  install sshpass

	  ;;

	34)
	  root_use
	  send_stats "ترمیم محیط LDNMP"
	  echo "پشتیبان گیری سایت موجود"
	  echo "-------------------------"
	  ls -lt /home/*.gz | awk '{print $NF}'
	  echo ""
	  read -e -p  "برای بازیابی آخرین نسخه پشتیبان وارد شوید ، نام فایل پشتیبان را وارد کنید تا نسخه پشتیبان تهیه شده را بازیابی کنید ، 0 را وارد کنید تا از آن خارج شوید:" filename

	  if [ "$filename" == "0" ]; then
		  break_end
		  linux_ldnmp
	  fi

	  # اگر کاربر نام پرونده را وارد نکرد ، از آخرین بسته فشرده شده استفاده کنید
	  if [ -z "$filename" ]; then
		  local filename=$(ls -t /home/*.tar.gz | head -1)
	  fi

	  if [ -n "$filename" ]; then
		  cd /home/web/ > /dev/null 2>&1
		  docker compose down > /dev/null 2>&1
		  rm -rf /home/web > /dev/null 2>&1

		  echo -e "${gl_huang}رفع فشار انجام می شود$filename ...${gl_bai}"
		  cd /home/ && tar -xzf "$filename"

		  check_port
		  install_dependency
		  install_docker
		  install_certbot
		  install_ldnmp
	  else
		  echo "هیچ بسته فشرده سازی یافت نشد."
	  fi

	  ;;

	35)
	  send_stats "دفاع محیط زیست LDNMP"
	  while true; do
		check_waf_status
		check_cf_mode
		if [ -x "$(command -v fail2ban-client)" ] ; then
			clear
			remove fail2ban
			rm -rf /etc/fail2ban
		else
			  clear
			  docker_name="fail2ban"
			  check_docker_app
			  echo -e "برنامه دفاع وب سایت سرور${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}"
			  echo "------------------------"
			  echo "1. برنامه دفاع را نصب کنید"
			  echo "------------------------"
			  echo "5. مشاهده سابقه رهگیری SSH 6. مشاهده سابقه رهگیری وب سایت"
			  echo "7. لیست قوانین دفاعی را مشاهده کنید 8. مشاهده نظارت بر زمان واقعی سیاههها"
			  echo "------------------------"
			  echo "11. پیکربندی پارامترهای رهگیری 12. همه IP های مسدود شده را پاک کنید"
			  echo "------------------------"
			  echo "21. حالت Cloudflare 22. بار زیاد در 5 ثانیه سپر"
			  echo "------------------------"
			  echo "31. WAF 32 را روشن کنید. WAF را خاموش کنید"
			  echo "33. DDOS Defense 34 را روشن کنید. دفاع DDOS را خاموش کنید"
			  echo "------------------------"
			  echo "9. برنامه دفاعی را حذف کنید"
			  echo "------------------------"
			  echo "0. به منوی قبلی برگردید"
			  echo "------------------------"
			  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
			  case $sub_choice in
				  1)
					  f2b_install_sshd
					  cd /path/to/fail2ban/config/fail2ban/filter.d
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf
					  cd /path/to/fail2ban/config/fail2ban/jail.d/
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf
					  sed -i "/cloudflare/d" /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf
					  f2b_status
					  ;;
				  5)
					  echo "------------------------"
					  f2b_sshd
					  echo "------------------------"
					  ;;
				  6)

					  echo "------------------------"
					  local xxx="fail2ban-nginx-cc"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-418"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-bad-request"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-badbots"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-botsearch"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-deny"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-http-auth"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-nginx-unauthorized"
					  f2b_status_xxx
					  echo "------------------------"
					  local xxx="docker-php-url-fopen"
					  f2b_status_xxx
					  echo "------------------------"

					  ;;

				  7)
					  docker exec -it fail2ban fail2ban-client status
					  ;;
				  8)
					  tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log

					  ;;
				  9)
					  docker rm -f fail2ban
					  rm -rf /path/to/fail2ban
					  crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null
					  echo "برنامه دفاعی Fail2ban حذف نشده است"
					  ;;

				  11)
					  install nano
					  nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf
					  f2b_status
					  break
					  ;;

				  12)
					  docker exec -it fail2ban fail2ban-client unban --all
					  ;;

				  21)
					  send_stats "حالت CloudFlare"
					  echo "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و کلید جهانی API را بدست آورید"
					  echo "https://dash.cloudflare.com/login"
					  read -e -p "شماره حساب CF را وارد کنید:" cfuser
					  read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken

					  wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default11.conf
					  docker exec nginx nginx -s reload

					  cd /path/to/fail2ban/config/fail2ban/jail.d/
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf

					  cd /path/to/fail2ban/config/fail2ban/action.d
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/cloudflare-docker.conf

					  sed -i "s/kejilion@outlook.com/$cfuser/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf
					  sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf
					  f2b_status

					  echo "حالت CloudFlare برای مشاهده سوابق رهگیری در پس زمینه CF ، سایت های امنیت-امنیت پیکربندی شده است"
					  ;;

				  22)
					  send_stats "بار زیاد در سپر 5 ثانیه"
					  echo -e "${gl_huang}وب سایت به طور خودکار هر 5 دقیقه یکبار تشخیص می دهد. هنگامی که بار زیاد تشخیص داده می شود ، سپر به طور خودکار روشن می شود و بار کم به مدت 5 ثانیه به طور خودکار خاموش می شود.${gl_bai}"
					  echo "--------------"
					  echo "پارامترهای CF را دریافت کنید:"
					  echo -e "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و آن را بدست آورید${gl_huang}Global API Key${gl_bai}"
					  echo -e "برای دریافت به سمت راست پایین صفحه خلاصه نام دامنه پس زمینه CF بروید${gl_huang}شناسه منطقه${gl_bai}"
					  echo "https://dash.cloudflare.com/login"
					  echo "--------------"
					  read -e -p "شماره حساب CF را وارد کنید:" cfuser
					  read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken
					  read -e -p "شناسه منطقه نام دامنه را در CF وارد کنید:" cfzonID

					  cd ~
					  install jq bc
					  check_crontab_installed
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/CF-Under-Attack.sh
					  chmod +x CF-Under-Attack.sh
					  sed -i "s/AAAA/$cfuser/g" ~/CF-Under-Attack.sh
					  sed -i "s/BBBB/$cftoken/g" ~/CF-Under-Attack.sh
					  sed -i "s/CCCC/$cfzonID/g" ~/CF-Under-Attack.sh

					  local cron_job="*/5 * * * * ~/CF-Under-Attack.sh"

					  local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job")

					  if [ -z "$existing_cron" ]; then
						  (crontab -l 2>/dev/null; echo "$cron_job") | crontab -
						  echo "اسکریپت باز شدن محافظ اتوماتیک بار بالا اضافه شده است"
					  else
						  echo "اسکریپت Shield Automatic در حال حاضر وجود دارد ، نیازی به اضافه کردن آن نیست"
					  fi

					  ;;

				  31)
					  nginx_waf on
					  echo "سایت WAF فعال است"
					  send_stats "سایت WAF فعال است"
					  ;;

				  32)
				  	  nginx_waf off
					  echo "سایت WAF بسته شده است"
					  send_stats "سایت WAF بسته شده است"
					  ;;

				  33)
					  enable_ddos_defense
					  ;;

				  34)
					  disable_ddos_defense
					  ;;

				  *)
					  break
					  ;;
			  esac
		fi
	  break_end
	  done
		;;

	36)
		  while true; do
			  clear
			  send_stats "محیط LDNMP را بهینه کنید"
			  echo "محیط LDNMP را بهینه کنید"
			  echo "------------------------"
			  echo "1. حالت استاندارد 2. حالت عملکرد بالا (توصیه می شود 2H2G یا بالاتر)"
			  echo "------------------------"
			  echo "0. به منوی قبلی برگردید"
			  echo "------------------------"
			  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
			  case $sub_choice in
				  1)
				  send_stats "حالت استاندارد سایت"

				  # تنظیم nginx
				  sed -i 's/worker_connections.*/worker_connections 10240;/' /home/web/nginx.conf
				  sed -i 's/worker_processes.*/worker_processes 4;/' /home/web/nginx.conf

				  # تنظیم PHP
				  wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini
				  docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini
				  docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini
				  rm -rf /home/optimized_php.ini

				  # تنظیم PHP
				  wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www-1.conf
				  docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf
				  docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf
				  rm -rf /home/www.conf

				  fix_phpfpm_conf php
				  fix_phpfpm_conf php74

				  # تنظیم mysql
				  wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config-1.cnf
				  docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/
				  rm -rf /home/custom_mysql_config.cnf


				  cd /home/web && docker compose restart

				  restart_redis
				  optimize_balanced


				  echo "محیط LDNMP روی حالت استاندارد تنظیم شده است"

					  ;;
				  2)
				  send_stats "حالت عملکرد بالا سایت"

				  # تنظیم nginx
				  sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf
				  sed -i 's/worker_processes.*/worker_processes 8;/' /home/web/nginx.conf

				  # تنظیم PHP
				  wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini
				  docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini
				  docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini
				  rm -rf /home/optimized_php.ini

				  # تنظیم PHP
				  wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www.conf
				  docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf
				  docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf
				  rm -rf /home/www.conf

				  fix_phpfpm_conf php
				  fix_phpfpm_conf php74

				  # تنظیم mysql
				  wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config.cnf
				  docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/
				  rm -rf /home/custom_mysql_config.cnf

				  cd /home/web && docker compose restart

				  restart_redis
				  optimize_web_server

				  echo "محیط LDNMP روی حالت عملکرد بالا تنظیم شده است"

					  ;;
				  *)
					  break
					  ;;
			  esac
			  break_end

		  done
		;;


	37)
	  root_use
	  while true; do
		  clear
		  send_stats "محیط LDNMP را به روز کنید"
		  echo "محیط LDNMP را به روز کنید"
		  echo "------------------------"
		  ldnmp_v
		  echo "نسخه جدیدی از قطعات را کشف کنید"
		  echo "------------------------"
		  check_docker_image_update nginx
		  if [ -n "$update_status" ]; then
			echo -e "${gl_huang}nginx $update_status${gl_bai}"
		  fi
		  check_docker_image_update php
		  if [ -n "$update_status" ]; then
			echo -e "${gl_huang}php $update_status${gl_bai}"
		  fi
		  check_docker_image_update mysql
		  if [ -n "$update_status" ]; then
			echo -e "${gl_huang}mysql $update_status${gl_bai}"
		  fi
		  check_docker_image_update redis
		  if [ -n "$update_status" ]; then
			echo -e "${gl_huang}redis $update_status${gl_bai}"
		  fi
		  echo "------------------------"
		  echo
		  echo "1. به روزرسانی Nginx 2. MySQL 3 را به روز کنید. PHP 4 را به روز کنید. Redis را به روز کنید"
		  echo "------------------------"
		  echo "5. محیط کامل را به روز کنید"
		  echo "------------------------"
		  echo "0. به منوی قبلی برگردید"
		  echo "------------------------"
		  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
		  case $sub_choice in
			  1)
			  nginx_upgrade

				  ;;

			  2)
			  local ldnmp_pods="mysql"
			  read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 8.0 8.3 8.4 9.0) (برای دریافت آخرین نسخه وارد شوید):" version
			  local version=${version:-latest}

			  cd /home/web/
			  cp /home/web/docker-compose.yml /home/web/docker-compose1.yml
			  sed -i "s/image: mysql/image: mysql:${version}/" /home/web/docker-compose.yml
			  docker rm -f $ldnmp_pods
			  docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
			  docker compose up -d --force-recreate $ldnmp_pods
			  docker restart $ldnmp_pods
			  cp /home/web/docker-compose1.yml /home/web/docker-compose.yml
			  send_stats "تمدید کردن$ldnmp_pods"
			  echo "تمدید کردن${ldnmp_pods}پایان"

				  ;;
			  3)
			  local ldnmp_pods="php"
			  read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 7.4 8.0 8.1 8.2 8.3) (برای دریافت آخرین نسخه وارد شوید):" version
			  local version=${version:-8.3}
			  cd /home/web/
			  cp /home/web/docker-compose.yml /home/web/docker-compose1.yml
			  sed -i "s/kjlion\///g" /home/web/docker-compose.yml > /dev/null 2>&1
			  sed -i "s/image: php:fpm-alpine/image: php:${version}-fpm-alpine/" /home/web/docker-compose.yml
			  docker rm -f $ldnmp_pods
			  docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
  			  docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
			  docker compose up -d --force-recreate $ldnmp_pods
			  docker exec php chown -R www-data:www-data /var/www/html

			  run_command docker exec php sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories > /dev/null 2>&1

			  docker exec php apk update
			  curl -sL ${gh_proxy}github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o /usr/local/bin/install-php-extensions
			  docker exec php mkdir -p /usr/local/bin/
			  docker cp /usr/local/bin/install-php-extensions php:/usr/local/bin/
			  docker exec php chmod +x /usr/local/bin/install-php-extensions
			  docker exec php install-php-extensions mysqli pdo_mysql gd intl zip exif bcmath opcache redis imagick


			  docker exec php sh -c 'echo "upload_max_filesize=50M " > /usr/local/etc/php/conf.d/uploads.ini' > /dev/null 2>&1
			  docker exec php sh -c 'echo "post_max_size=50M " > /usr/local/etc/php/conf.d/post.ini' > /dev/null 2>&1
			  docker exec php sh -c 'echo "memory_limit=256M" > /usr/local/etc/php/conf.d/memory.ini' > /dev/null 2>&1
			  docker exec php sh -c 'echo "max_execution_time=1200" > /usr/local/etc/php/conf.d/max_execution_time.ini' > /dev/null 2>&1
			  docker exec php sh -c 'echo "max_input_time=600" > /usr/local/etc/php/conf.d/max_input_time.ini' > /dev/null 2>&1
			  docker exec php sh -c 'echo "max_input_vars=5000" > /usr/local/etc/php/conf.d/max_input_vars.ini' > /dev/null 2>&1

			  fix_phpfpm_con $ldnmp_pods

			  docker restart $ldnmp_pods > /dev/null 2>&1
			  cp /home/web/docker-compose1.yml /home/web/docker-compose.yml
			  send_stats "تمدید کردن$ldnmp_pods"
			  echo "تمدید کردن${ldnmp_pods}پایان"

				  ;;
			  4)
			  local ldnmp_pods="redis"
			  cd /home/web/
			  docker rm -f $ldnmp_pods
			  docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
			  docker compose up -d --force-recreate $ldnmp_pods
			  docker restart $ldnmp_pods > /dev/null 2>&1
			  restart_redis
			  send_stats "تمدید کردن$ldnmp_pods"
			  echo "تمدید کردن${ldnmp_pods}پایان"

				  ;;
			  5)
				read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户，请慎重更新LDNMP环境，会有数据库更新失败的风险。确定更新LDNMP环境吗？(Y/N): ")" choice
				case "$choice" in
				  [Yy])
					send_stats "محیط LDNMP را کاملاً به روز کنید"
					cd /home/web/
					docker compose down --rmi all

					check_port
					install_dependency
					install_docker
					install_certbot
					install_ldnmp
					;;
				  *)
					;;
				esac
				  ;;
			  *)
				  break
				  ;;
		  esac
		  break_end
	  done


	  ;;

	38)
		root_use
		send_stats "حذف محیط LDNMP"
		read -e -p "$(echo -e "${gl_hong}强烈建议：${gl_bai}先备份全部网站数据，再卸载LDNMP环境。确定删除所有网站数据吗？(Y/N): ")" choice
		case "$choice" in
		  [Yy])
			cd /home/web/
			docker compose down --rmi all
			docker compose -f docker-compose.phpmyadmin.yml down > /dev/null 2>&1
			docker compose -f docker-compose.phpmyadmin.yml down --rmi all > /dev/null 2>&1
			rm -rf /home/web
			;;
		  [Nn])

			;;
		  *)
			echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
			;;
		esac
		;;

	0)
		kejilion
	  ;;

	*)
		echo "ورودی نامعتبر!"
	esac
	break_end

  done

}



linux_panel() {

	while true; do
	  clear
	  # send_stats "بازار برنامه"
	  echo -e "بازار کاربرد"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}نسخه رسمی پنل باوتا${gl_kjlan}2.   ${gl_bai}نسخه بین المللی Aapanel"
	  echo -e "${gl_kjlan}3.   ${gl_bai}پانل مدیریت نسل 1 پانل${gl_kjlan}4.   ${gl_bai}پانل بصری nginxproxymanager"
	  echo -e "${gl_kjlan}5.   ${gl_bai}برنامه لیست پرونده های چند فروشگاهی Alist${gl_kjlan}6.   ${gl_bai}نسخه وب دسک تاپ Ubuntu از راه دور"
	  echo -e "${gl_kjlan}7.   ${gl_bai}پانل نظارت Nezha Probe VPS${gl_kjlan}8.   ${gl_bai}پانل بارگیری مغناطیسی QB آفلاین BT"
	  echo -e "${gl_kjlan}9.   ${gl_bai}برنامه سرور پستی Poste.io${gl_kjlan}10.  ${gl_bai}سیستم چت آنلاین چند نفره Rocketchat"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}11.  ${gl_bai}نرم افزار مدیریت پروژه Zendao${gl_kjlan}12.  ${gl_bai}پانل qinglong پانل مدیریت وظیفه به موقع"
	  echo -e "${gl_kjlan}13.  ${gl_bai}دیسک شبکه CloudReve${gl_huang}★${gl_bai}                     ${gl_kjlan}14.  ${gl_bai}برنامه ساده مدیریت عکس تختخواب"
	  echo -e "${gl_kjlan}15.  ${gl_bai}سیستم مدیریت چندرسانه ای Emby${gl_kjlan}16.  ${gl_bai}پانل تست سرعت سرعت"
	  echo -e "${gl_kjlan}17.  ${gl_bai}Adguardhome Adware${gl_kjlan}18.  ${gl_bai}Office Office Office Office Office"
	  echo -e "${gl_kjlan}19.  ${gl_bai}پانل فایروال Thunder Pool WAF${gl_kjlan}20.  ${gl_bai}پانل مدیریت کانتینر Portainer"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}21.  ${gl_bai}نسخه وب VScode${gl_kjlan}22.  ${gl_bai}ابزار نظارت بر Uptimekuma"
	  echo -e "${gl_kjlan}23.  ${gl_bai}یادداشت صفحه وب یادداشت${gl_kjlan}24.  ${gl_bai}Webtop Remote Desktop Edition${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}25.  ${gl_bai}دیسک شبکه NextCloud${gl_kjlan}26.  ${gl_bai}چارچوب مدیریت وظیفه زمان بندی QD-Today"
	  echo -e "${gl_kjlan}27.  ${gl_bai}پنل مدیریت پشته ظرف Dockge${gl_kjlan}28.  ${gl_bai}ابزار تست سرعت Librespeed"
	  echo -e "${gl_kjlan}29.  ${gl_bai}سایت جستجوی جمع آوری Searxng${gl_huang}★${gl_bai}                 ${gl_kjlan}30.  ${gl_bai}سیستم آلبوم خصوصی Photoprism"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}31.  ${gl_bai}مجموعه ابزار stirlingpdf${gl_kjlan}32.  ${gl_bai}نرم افزار نمودار آنلاین Drawio رایگان${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}33.  ${gl_bai}پانل ناوبری آفتاب${gl_kjlan}34.  ${gl_bai}پلت فرم اشتراک فایل Pingvin-Share"
	  echo -e "${gl_kjlan}35.  ${gl_bai}دایره مینیمالیستی دوستان${gl_kjlan}36.  ${gl_bai}وب سایت جمع آوری چت Lobechatai"
	  echo -e "${gl_kjlan}37.  ${gl_bai}جعبه ابزار myip${gl_huang}★${gl_bai}                        ${gl_kjlan}38.  ${gl_bai}سطل خانوادگی شیایایا آلیست"
	  echo -e "${gl_kjlan}39.  ${gl_bai}ابزار ضبط پخش زنده Bililive${gl_kjlan}40.  ${gl_bai}نسخه وب وب سایت ابزار اتصال SSH"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}41.  ${gl_bai}پنل مدیریت ماوس${gl_kjlan}42.  ${gl_bai}ابزار اتصال از راه دور Nexte"
	  echo -e "${gl_kjlan}43.  ${gl_bai}میز از راه دور Rustdesk (سرور)${gl_huang}★${gl_bai}          ${gl_kjlan}44.  ${gl_bai}میز از راه دور Rustdesk (رله)${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}45.  ${gl_bai}ایستگاه شتاب داکر${gl_kjlan}46.  ${gl_bai}ایستگاه شتاب GitHub${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}47.  ${gl_bai}نظارت بر پرومتئوس${gl_kjlan}48.  ${gl_bai}پرومتئوس (نظارت میزبان)"
	  echo -e "${gl_kjlan}49.  ${gl_bai}پرومتئوس (نظارت بر کانتینر)${gl_kjlan}50.  ${gl_bai}ابزار نظارت دوباره پر کردن"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}51.  ${gl_bai}پنل مرغ PVE${gl_kjlan}52.  ${gl_bai}پنل مدیریت کانتینر dpanel"
	  echo -e "${gl_kjlan}53.  ${gl_bai}LLAMA3 CHAT AI MODEL${gl_kjlan}54.  ${gl_bai}پانل مدیریت ساختمان وب سایت میزبان AMH"
	  echo -e "${gl_kjlan}55.  ${gl_bai}نفوذ اینترانت FRP (سمت سرور)${gl_huang}★${gl_bai}	         ${gl_kjlan}56.  ${gl_bai}نفوذ اینترانت FRP (مشتری)${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}57.  ${gl_bai}Deepseek Chat AI مدل بزرگ${gl_kjlan}58.  ${gl_bai}پایگاه دانش مدل بزرگ متفاوت${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}59.  ${gl_bai}مدیریت دارایی مدل بزرگ Newapi${gl_kjlan}60.  ${gl_bai}ماشین سنگر منبع باز Jumpserver"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}61.  ${gl_bai}سرور ترجمه آنلاین${gl_kjlan}62.  ${gl_bai}پایه دانش مدل بزرگ ragflow"
	  echo -e "${gl_kjlan}63.  ${gl_bai}پلت فرم AI خود میزبان OpenWebui${gl_huang}★${gl_bai}             ${gl_kjlan}64.  ${gl_bai}جعبه ابزار آن"
	  echo -e "${gl_kjlan}65.  ${gl_bai}پلت فرم گردش کار اتوماسیون N8N${gl_huang}★${gl_bai}               ${gl_kjlan}66.  ${gl_bai}ابزار بارگیری ویدیویی YT-DLP"
	  echo -e "${gl_kjlan}67.  ${gl_bai}DDNS-GO ابزار مدیریت DNS DNS${gl_huang}★${gl_bai}               ${gl_kjlan}68.  ${gl_bai}بستر مدیریت گواهینامه Allinssl"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)

			local lujing="[ -d "/www/server/panel" ]"
			local panelname="宝塔面板"
			local panelurl="https://www.bt.cn/new/index.html"

			panel_app_install() {
				if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
			}

			panel_app_manage() {
				bt
			}

			panel_app_uninstall() {
				curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh
				chmod +x bt-uninstall.sh
				./bt-uninstall.sh
			}

			install_panel



			  ;;
		  2)

			local lujing="[ -d "/www/server/panel" ]"
			local panelname="aapanel"
			local panelurl="https://www.aapanel.com/new/index.html"

			panel_app_install() {
				URL=https://www.aapanel.com/script/install_7.0_en.sh && if [ -f /usr/bin/curl ];then curl -ksSO "$URL" ;else wget --no-check-certificate -O install_7.0_en.sh "$URL";fi;bash install_7.0_en.sh aapanel
			}

			panel_app_manage() {
				bt
			}

			panel_app_uninstall() {
				curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh
				chmod +x bt-uninstall.sh
				./bt-uninstall.sh
			}

			install_panel

			  ;;
		  3)

			local lujing="command -v 1pctl > /dev/null 2>&1"
			local panelname="1Panel"
			local panelurl="https://1panel.cn/"

			panel_app_install() {
				install bash
				curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
			}

			panel_app_manage() {
				1pctl user-info
				1pctl update password
			}

			panel_app_uninstall() {
				1pctl uninstall
			}

			install_panel

			  ;;
		  4)

			local docker_name="npm"
			local docker_img="jc21/nginx-proxy-manager:latest"
			local docker_port=81

			docker_rum() {

				docker run -d \
				  --name=$docker_name \
				  -p ${docker_port}:81 \
				  -p 80:80 \
				  -p 443:443 \
				  -v /home/docker/npm/data:/data \
				  -v /home/docker/npm/letsencrypt:/etc/letsencrypt \
				  --restart=always \
				  $docker_img


			}

			local docker_describe="如果您已经安装了其他面板或者LDNMP建站环境，建议先卸载，再安装npm！"
			local docker_url="官网介绍: https://nginxproxymanager.com/"
			local docker_use="echo \"初始用户名: admin@example.com\""
			local docker_passwd="echo \"初始密码: changeme\""
			local app_size="1"

			docker_app

			  ;;

		  5)

			local docker_name="alist"
			local docker_img="xhofe/alist-aria2:latest"
			local docker_port=5244

			docker_rum() {

				docker run -d \
					--restart=always \
					-v /home/docker/alist:/opt/alist/data \
					-p ${docker_port}:5244 \
					-e PUID=0 \
					-e PGID=0 \
					-e UMASK=022 \
					--name="alist" \
					xhofe/alist-aria2:latest

			}


			local docker_describe="一个支持多种存储，支持网页浏览和 WebDAV 的文件列表程序，由 gin 和 Solidjs 驱动"
			local docker_url="官网介绍: https://alist.nn.ci/zh/"
			local docker_use="docker exec -it alist ./alist admin random"
			local docker_passwd=""
			local app_size="1"
			docker_app

			  ;;

		  6)

			local docker_name="webtop-ubuntu"
			local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde"
			local docker_port=3006

			docker_rum() {


						docker run -d \
						  --name=webtop-ubuntu \
						  --security-opt seccomp=unconfined \
						  -e PUID=1000 \
						  -e PGID=1000 \
						  -e TZ=Etc/UTC \
						  -e SUBFOLDER=/ \
						  -e TITLE=Webtop \
						  -p ${docker_port}:3000 \
						  -v /home/docker/webtop/data:/config \
						  -v /var/run/docker.sock:/var/run/docker.sock \
						  --shm-size="1gb" \
						  --restart unless-stopped \
						  lscr.io/linuxserver/webtop:ubuntu-kde



			}


			local docker_describe="webtop基于Ubuntu的容器，包含官方支持的完整桌面环境，可通过任何现代 Web 浏览器访问"
			local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/"
			local docker_use=""
			local docker_passwd=""
			local app_size="2"
			docker_app


			  ;;
		  7)
			clear
			send_stats "Nezha بسازید"
			local docker_name="nezha-dashboard"
			local docker_port=8008
			while true; do
				check_docker_app
				check_docker_image_update $docker_name
				clear
				echo -e "نظارت بر نزا$check_docker $update_status"
				echo "منبع باز ، نظارت بر سرور سبک و کاربردی آسان و کاربردی و بهره برداری از سرور"
				echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1"
				if docker inspect "$docker_name" &>/dev/null; then
					local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
					check_docker_app_ip
				fi
				echo ""
				echo "------------------------"
				echo "1. استفاده کنید"
				echo "------------------------"
				echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
				echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "انتخاب خود را وارد کنید:" choice

				case $choice in
					1)
						check_disk_space 1
						install unzip jq
						install_docker
						curl -sL ${gh_proxy}raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && ./nezha.sh
						local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
						check_docker_app_ip
						;;
					5)
						echo "${docker_name}تنظیمات دسترسی دامنه"
						send_stats "${docker_name}تنظیمات دسترسی دامنه"
						add_yuming
						ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
						block_container_port "$docker_name" "$ipv4_address"
						;;

					6)
						echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
						web_del
						;;

					7)
						send_stats "دسترسی به IP${docker_name}"
						clear_container_rules "$docker_name" "$ipv4_address"
						;;

					8)
						send_stats "دسترسی به IP${docker_name}"
						block_container_port "$docker_name" "$ipv4_address"
						;;

					*)
						break
						;;

				esac
				break_end
			done
			  ;;

		  8)

			local docker_name="qbittorrent"
			local docker_img="lscr.io/linuxserver/qbittorrent:latest"
			local docker_port=8081

			docker_rum() {

				docker run -d \
				  --name=qbittorrent \
				  -e PUID=1000 \
				  -e PGID=1000 \
				  -e TZ=Etc/UTC \
				  -e WEBUI_PORT=${docker_port} \
				  -e TORRENTING_PORT=56881 \
				  -p ${docker_port}:${docker_port} \
				  -p 56881:56881 \
				  -p 56881:56881/udp \
				  -v /home/docker/qbittorrent/config:/config \
				  -v /home/docker/qbittorrent/downloads:/downloads \
				  --restart unless-stopped \
				  lscr.io/linuxserver/qbittorrent:latest

			}

			local docker_describe="qbittorrent离线BT磁力下载服务"
			local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent"
			local docker_use="sleep 3"
			local docker_passwd="docker logs qbittorrent"
			local app_size="1"
			docker_app

			  ;;

		  9)
			send_stats "یک اداره پست بسازید"
			clear
			install telnet
			local docker_name=“mailserver”
			while true; do
				check_docker_app
				check_docker_image_update $docker_name

				clear
				echo -e "خدمات پستی$check_docker $update_status"
				echo "Poste.io یک راه حل سرور Mail Source Source است."
				echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1"

				echo ""
				echo "تشخیص بندر"
				port=25
				timeout=3
				if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then
				  echo -e "${gl_lv}بندر$portدر حال حاضر موجود است${gl_bai}"
				else
				  echo -e "${gl_hong}بندر$portدر حال حاضر موجود نیست${gl_bai}"
				fi
				echo ""

				if docker inspect "$docker_name" &>/dev/null; then
					yuming=$(cat /home/docker/mail.txt)
					echo "آدرس دسترسی:"
					echo "https://$yuming"
				fi

				echo "------------------------"
				echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "انتخاب خود را وارد کنید:" choice

				case $choice in
					1)
						check_disk_space 2
						read -e -p "لطفاً نام دامنه ایمیل را به عنوان مثال ، mail.yuming.com تنظیم کنید:" yuming
						mkdir -p /home/docker
						echo "$yuming" > /home/docker/mail.txt
						echo "------------------------"
						ip_address
						echo "ابتدا این سوابق DNS را تجزیه کنید"
						echo "A           mail            $ipv4_address"
						echo "CNAME       imap            $yuming"
						echo "CNAME       pop             $yuming"
						echo "CNAME       smtp            $yuming"
						echo "MX          @               $yuming"
						echo "TXT         @               v=spf1 mx ~all"
						echo "TXT         ?               ?"
						echo ""
						echo "------------------------"
						echo "برای ادامه ... هر کلید را فشار دهید ..."
						read -n 1 -s -r -p ""

						install jq
						install_docker

						docker run \
							--net=host \
							-e TZ=Europe/Prague \
							-v /home/docker/mail:/data \
							--name "mailserver" \
							-h "$yuming" \
							--restart=always \
							-d analogic/poste.io

						clear
						echo "poste.io نصب شده است"
						echo "------------------------"
						echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:"
						echo "https://$yuming"
						echo ""

						;;

					2)
						docker rm -f mailserver
						docker rmi -f analogic/poste.i
						yuming=$(cat /home/docker/mail.txt)
						docker run \
							--net=host \
							-e TZ=Europe/Prague \
							-v /home/docker/mail:/data \
							--name "mailserver" \
							-h "$yuming" \
							--restart=always \
							-d analogic/poste.i
						clear
						echo "poste.io نصب شده است"
						echo "------------------------"
						echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:"
						echo "https://$yuming"
						echo ""
						;;
					3)
						docker rm -f mailserver
						docker rmi -f analogic/poste.io
						rm /home/docker/mail.txt
						rm -rf /home/docker/mail
						echo "برنامه حذف شده است"
						;;

					*)
						break
						;;

				esac
				break_end
			done

			  ;;

		  10)

			local app_name="Rocket.Chat聊天系统"
			local app_text="Rocket.Chat 是一个开源的团队通讯平台，支持实时聊天、音视频通话、文件共享等多种功能，"
			local app_url="官方介绍: https://www.rocket.chat/"
			local docker_name="rocketchat"
			local docker_port="3897"
			local app_size="2"

			docker_app_install() {
				docker run --name db -d --restart=always \
					-v /home/docker/mongo/dump:/dump \
					mongo:latest --replSet rs5 --oplogSize 256
				sleep 1
				docker exec -it db mongosh --eval "printjson(rs.initiate())"
				sleep 5
				docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat

				clear
				ip_address
				echo "نصب شده"
				check_docker_app_ip
			}

			docker_app_update() {
				docker rm -f rocketchat
				docker rmi -f rocket.chat:latest
				docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat
				clear
				ip_address
				echo "Rocket.Chat نصب شده است"
				check_docker_app_ip
			}

			docker_app_uninstall() {
				docker rm -f rocketchat
				docker rmi -f rocket.chat
				docker rm -f db
				docker rmi -f mongo:latest
				rm -rf /home/docker/mongo
				echo "برنامه حذف شده است"
			}

			docker_app_plus
			  ;;



		  11)
			local docker_name="zentao-server"
			local docker_img="idoop/zentao:latest"
			local docker_port=82


			docker_rum() {


				docker run -d -p ${docker_port}:80 \
				  -e ADMINER_USER="root" -e ADMINER_PASSWD="password" \
				  -e BIND_ADDRESS="false" \
				  -v /home/docker/zentao-server/:/opt/zbox/ \
				  --add-host smtp.exmail.qq.com:163.177.90.125 \
				  --name zentao-server \
				  --restart=always \
				  idoop/zentao:latest


			}

			local docker_describe="禅道是通用的项目管理软件"
			local docker_url="官网介绍: https://www.zentao.net/"
			local docker_use="echo \"初始用户名: admin\""
			local docker_passwd="echo \"初始密码: 123456\""
			local app_size="2"
			docker_app

			  ;;

		  12)
			local docker_name="qinglong"
			local docker_img="whyour/qinglong:latest"
			local docker_port=5700

			docker_rum() {


				docker run -d \
				  -v /home/docker/qinglong/data:/ql/data \
				  -p ${docker_port}:5700 \
				  --name qinglong \
				  --hostname qinglong \
				  --restart unless-stopped \
				  whyour/qinglong:latest


			}

			local docker_describe="青龙面板是一个定时任务管理平台"
			local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app

			  ;;
		  13)

			local app_name="cloudreve网盘"
			local app_text="cloudreve是一个支持多家云存储的网盘系统"
			local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1"
			local docker_name="cloudreve"
			local docker_port="5212"
			local app_size="2"

			docker_app_install() {
				cd /home/ && mkdir -p docker/cloud && cd docker/cloud && mkdir temp_data && mkdir -vp cloudreve/{uploads,avatar} && touch cloudreve/conf.ini && touch cloudreve/cloudreve.db && mkdir -p aria2/config && mkdir -p data/aria2 && chmod -R 777 data/aria2
				curl -o /home/docker/cloud/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/cloudreve-docker-compose.yml
				sed -i "s/5212:5212/${docker_port}:5212/g" /home/docker/cloud/docker-compose.yml
				cd /home/docker/cloud/
				docker compose up -d
				clear
				echo "نصب شده"
				check_docker_app_ip
			}


			docker_app_update() {
				cd /home/docker/cloud/ && docker compose down --rmi all
				cd /home/docker/cloud/ && docker compose up -d
			}


			docker_app_uninstall() {
				cd /home/docker/cloud/ && docker compose down --rmi all
				rm -rf /home/docker/cloud
				echo "برنامه حذف شده است"
			}

			docker_app_plus
			  ;;

		  14)
			local docker_name="easyimage"
			local docker_img="ddsderek/easyimage:latest"
			local docker_port=85
			docker_rum() {

				docker run -d \
				  --name easyimage \
				  -p ${docker_port}:80 \
				  -e TZ=Asia/Shanghai \
				  -e PUID=1000 \
				  -e PGID=1000 \
				  -v /home/docker/easyimage/config:/app/web/config \
				  -v /home/docker/easyimage/i:/app/web/i \
				  --restart unless-stopped \
				  ddsderek/easyimage:latest

			}

			local docker_describe="简单图床是一个简单的图床程序"
			local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  15)
			local docker_name="emby"
			local docker_img="linuxserver/emby:latest"
			local docker_port=8096

			docker_rum() {

				docker run -d --name=emby --restart=always \
					-v /home/docker/emby/config:/config \
					-v /home/docker/emby/share1:/mnt/share1 \
					-v /home/docker/emby/share2:/mnt/share2 \
					-v /mnt/notify:/mnt/notify \
					-p ${docker_port}:8096 \
					-e UID=1000 -e GID=100 -e GIDLIST=100 \
					linuxserver/emby:latest

			}


			local docker_describe="emby是一个主从式架构的媒体服务器软件，可以用来整理服务器上的视频和音频，并将音频和视频流式传输到客户端设备"
			local docker_url="官网介绍: https://emby.media/"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  16)
			local docker_name="looking-glass"
			local docker_img="wikihostinc/looking-glass-server"
			local docker_port=89


			docker_rum() {

				docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server

			}

			local docker_describe="Speedtest测速面板是一个VPS网速测试工具，多项测试功能，还可以实时监控VPS进出站流量"
			local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app

			  ;;
		  17)

			local docker_name="adguardhome"
			local docker_img="adguard/adguardhome"
			local docker_port=3000

			docker_rum() {

				docker run -d \
					--name adguardhome \
					-v /home/docker/adguardhome/work:/opt/adguardhome/work \
					-v /home/docker/adguardhome/conf:/opt/adguardhome/conf \
					-p 53:53/tcp \
					-p 53:53/udp \
					-p ${docker_port}:3000/tcp \
					--restart always \
					adguard/adguardhome


			}


			local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件，未来将不止是一个DNS服务器。"
			local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app

			  ;;


		  18)

			local docker_name="onlyoffice"
			local docker_img="onlyoffice/documentserver"
			local docker_port=8082

			docker_rum() {

				docker run -d -p ${docker_port}:80 \
					--restart=always \
					--name onlyoffice \
					-v /home/docker/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
					-v /home/docker/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
					 onlyoffice/documentserver


			}

			local docker_describe="onlyoffice是一款开源的在线office工具，太强大了！"
			local docker_url="官网介绍: https://www.onlyoffice.com/"
			local docker_use=""
			local docker_passwd=""
			local app_size="2"
			docker_app

			  ;;

		  19)
			send_stats "یک استخر رعد و برق بسازید"

			local docker_name=safeline-mgt
			local docker_port=9443
			while true; do
				check_docker_app
				clear
				echo -e "سرویس استخر تندر$check_docker"
				echo "لی چی یک صفحه برنامه فایروال سایت WAF است که توسط Changting Technology ساخته شده است که می تواند سایت آژانس را برای دفاع خودکار معکوس کند."
				echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mz421t74c؟t=0.1"
				if docker inspect "$docker_name" &>/dev/null; then
					check_docker_app_ip
				fi
				echo ""

				echo "------------------------"
				echo "1. نصب 2. بروزرسانی 3. تنظیم مجدد رمز عبور 4. حذف نصب کنید"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "انتخاب خود را وارد کنید:" choice

				case $choice in
					1)
						install_docker
						check_disk_space 5
						bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
						clear
						echo "پانل Whunder Pool WAF نصب شده است"
						check_docker_app_ip
						docker exec safeline-mgt resetadmin

						;;

					2)
						bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"
						docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}')
						echo ""
						clear
						echo "پانل WAF THIRDER POOL WAF به روز شده است"
						check_docker_app_ip
						;;
					3)
						docker exec safeline-mgt resetadmin
						;;
					4)
						cd /data/safeline
						docker compose down --rmi all
						echo "اگر شما فهرست نصب پیش فرض هستید ، این پروژه اکنون حذف نشده است. اگر دایرکتوری نصب را سفارشی می کنید ، برای اجرای آن باید به دایرکتوری نصب بروید:"
						echo "docker compose down && docker compose down --rmi all"
						;;
					*)
						break
						;;

				esac
				break_end
			done

			  ;;

		  20)
			local docker_name="portainer"
			local docker_img="portainer/portainer"
			local docker_port=9050

			docker_rum() {

				docker run -d \
					--name portainer \
					-p ${docker_port}:9000 \
					-v /var/run/docker.sock:/var/run/docker.sock \
					-v /home/docker/portainer:/data \
					--restart always \
					portainer/portainer

			}


			local docker_describe="portainer是一个轻量级的docker容器管理面板"
			local docker_url="官网介绍: https://www.portainer.io/"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app

			  ;;

		  21)
			local docker_name="vscode-web"
			local docker_img="codercom/code-server"
			local docker_port=8180


			docker_rum() {

				docker run -d -p ${docker_port}:8080 -v /home/docker/vscode-web:/home/coder/.local/share/code-server --name vscode-web --restart always codercom/code-server

			}


			local docker_describe="VScode是一款强大的在线代码编写工具"
			local docker_url="官网介绍: ${gh_proxy}github.com/coder/code-server"
			local docker_use="sleep 3"
			local docker_passwd="docker exec vscode-web cat /home/coder/.config/code-server/config.yaml"
			local app_size="1"
			docker_app
			  ;;
		  22)
			local docker_name="uptime-kuma"
			local docker_img="louislam/uptime-kuma:latest"
			local docker_port=3003


			docker_rum() {

				docker run -d \
					--name=uptime-kuma \
					-p ${docker_port}:3001 \
					-v /home/docker/uptime-kuma/uptime-kuma-data:/app/data \
					--restart=always \
					louislam/uptime-kuma:latest

			}


			local docker_describe="Uptime Kuma 易于使用的自托管监控工具"
			local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  23)
			local docker_name="memos"
			local docker_img="ghcr.io/usememos/memos:latest"
			local docker_port=5230

			docker_rum() {

				docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart always ghcr.io/usememos/memos:latest

			}

			local docker_describe="Memos是一款轻量级、自托管的备忘录中心"
			local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  24)
			local docker_name="webtop"
			local docker_img="lscr.io/linuxserver/webtop:latest"
			local docker_port=3083

			docker_rum() {


				docker run -d \
				  --name=webtop \
				  --security-opt seccomp=unconfined \
				  -e PUID=1000 \
				  -e PGID=1000 \
				  -e TZ=Etc/UTC \
				  -e SUBFOLDER=/ \
				  -e TITLE=Webtop \
				  -e LC_ALL=zh_CN.UTF-8 \
				  -e DOCKER_MODS=linuxserver/mods:universal-package-install \
				  -e INSTALL_PACKAGES=font-noto-cjk \
				  -p ${docker_port}:3000 \
				  -v /home/docker/webtop/data:/config \
				  -v /var/run/docker.sock:/var/run/docker.sock \
				  --shm-size="1gb" \
				  --restart unless-stopped \
				  lscr.io/linuxserver/webtop:latest


			}


			local docker_describe="webtop基于 Alpine、Ubuntu、Fedora 和 Arch 的容器，包含官方支持的完整桌面环境，可通过任何现代 Web 浏览器访问"
			local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/"
			local docker_use=""
			local docker_passwd=""
			local app_size="2"
			docker_app
			  ;;

		  25)
			local docker_name="nextcloud"
			local docker_img="nextcloud:latest"
			local docker_port=8989
			local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)

			docker_rum() {

				docker run -d --name nextcloud --restart=always -p ${docker_port}:80 -v /home/docker/nextcloud:/var/www/html -e NEXTCLOUD_ADMIN_USER=nextcloud -e NEXTCLOUD_ADMIN_PASSWORD=$rootpasswd nextcloud

			}

			local docker_describe="Nextcloud拥有超过 400,000 个部署，是您可以下载的最受欢迎的本地内容协作平台"
			local docker_url="官网介绍: https://nextcloud.com/"
			local docker_use="echo \"账号: nextcloud  密码: $rootpasswd\""
			local docker_passwd=""
			local app_size="3"
			docker_app
			  ;;

		  26)
			local docker_name="qd"
			local docker_img="qdtoday/qd:latest"
			local docker_port=8923

			docker_rum() {

				docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd

			}

			local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架"
			local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;
		  27)
			local docker_name="dockge"
			local docker_img="louislam/dockge:latest"
			local docker_port=5003

			docker_rum() {

				docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v  /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge

			}

			local docker_describe="dockge是一个可视化的docker-compose容器管理面板"
			local docker_url="官网介绍: ${gh_proxy}github.com/louislam/dockge"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  28)
			local docker_name="speedtest"
			local docker_img="ghcr.io/librespeed/speedtest"
			local docker_port=8028

			docker_rum() {

				docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest

			}

			local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具，即开即用"
			local docker_url="官网介绍: ${gh_proxy}github.com/librespeed/speedtest"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  29)
			local docker_name="searxng"
			local docker_img="alandoyle/searxng:latest"
			local docker_port=8700

			docker_rum() {
				docker run --name=searxng \
					-d --init \
					--restart=unless-stopped \
					-v /home/docker/searxng/config:/etc/searxng \
					-v /home/docker/searxng/templates:/usr/local/searxng/searx/templates/simple \
					-v /home/docker/searxng/theme:/usr/local/searxng/searx/static/themes/simple \
					-p ${docker_port}:8080/tcp \
					alandoyle/searxng:latest
			}

			local docker_describe="searxng是一个私有且隐私的搜索引擎站点"
			local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  30)
			local docker_name="photoprism"
			local docker_img="photoprism/photoprism:latest"
			local docker_port=2342
			local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)

			docker_rum() {

				docker run -d \
					--name photoprism \
					--restart always \
					--security-opt seccomp=unconfined \
					--security-opt apparmor=unconfined \
					-p ${docker_port}:2342 \
					-e PHOTOPRISM_UPLOAD_NSFW="true" \
					-e PHOTOPRISM_ADMIN_PASSWORD="$rootpasswd" \
					-v /home/docker/photoprism/storage:/photoprism/storage \
					-v /home/docker/photoprism/Pictures:/photoprism/originals \
					photoprism/photoprism

			}


			local docker_describe="photoprism非常强大的私有相册系统"
			local docker_url="官网介绍: https://www.photoprism.app/"
			local docker_use="echo \"账号: admin  密码: $rootpasswd\""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;


		  31)
			local docker_name="s-pdf"
			local docker_img="frooodle/s-pdf:latest"
			local docker_port=8020

			docker_rum() {

				docker run -d \
					--name s-pdf \
					--restart=always \
					 -p ${docker_port}:8080 \
					 -v /home/docker/s-pdf/trainingData:/usr/share/tesseract-ocr/5/tessdata \
					 -v /home/docker/s-pdf/extraConfigs:/configs \
					 -v /home/docker/s-pdf/logs:/logs \
					 -e DOCKER_ENABLE_SECURITY=false \
					 frooodle/s-pdf:latest
			}

			local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具，使用 docker，允许您对 PDF 文件执行各种操作，例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。"
			local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  32)
			local docker_name="drawio"
			local docker_img="jgraph/drawio"
			local docker_port=7080

			docker_rum() {

				docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio

			}


			local docker_describe="这是一个强大图表绘制软件。思维导图，拓扑图，流程图，都能画"
			local docker_url="官网介绍: https://www.drawio.com/"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  33)
			local docker_name="sun-panel"
			local docker_img="hslr/sun-panel"
			local docker_port=3009

			docker_rum() {

				docker run -d --restart=always -p ${docker_port}:3002 \
					-v /home/docker/sun-panel/conf:/app/conf \
					-v /home/docker/sun-panel/uploads:/app/uploads \
					-v /home/docker/sun-panel/database:/app/database \
					--name sun-panel \
					hslr/sun-panel

			}

			local docker_describe="Sun-Panel服务器、NAS导航面板、Homepage、浏览器首页"
			local docker_url="官网介绍: https://doc.sun-panel.top/zh_cn/"
			local docker_use="echo \"账号: admin@sun.cc  密码: 12345678\""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  34)
			local docker_name="pingvin-share"
			local docker_img="stonith404/pingvin-share"
			local docker_port=3060

			docker_rum() {

				docker run -d \
					--name pingvin-share \
					--restart always \
					-p ${docker_port}:3000 \
					-v /home/docker/pingvin-share/data:/opt/app/backend/data \
					stonith404/pingvin-share
			}

			local docker_describe="Pingvin Share 是一个可自建的文件分享平台，是 WeTransfer 的一个替代品"
			local docker_url="官网介绍: ${gh_proxy}github.com/stonith404/pingvin-share"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;


		  35)
			local docker_name="moments"
			local docker_img="kingwrcy/moments:latest"
			local docker_port=8035

			docker_rum() {

				docker run -d --restart unless-stopped \
					-p ${docker_port}:3000 \
					-v /home/docker/moments/data:/app/data \
					-v /etc/localtime:/etc/localtime:ro \
					-v /etc/timezone:/etc/timezone:ro \
					--name moments \
					kingwrcy/moments:latest
			}


			local docker_describe="极简朋友圈，高仿微信朋友圈，记录你的美好生活"
			local docker_url="معرفی رسمی وب سایت:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file"
			local docker_use="echo \"账号: admin  密码: a123456\""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;



		  36)
			local docker_name="lobe-chat"
			local docker_img="lobehub/lobe-chat:latest"
			local docker_port=8036

			docker_rum() {

				docker run -d -p ${docker_port}:3210 \
					--name lobe-chat \
					--restart=always \
					lobehub/lobe-chat
			}

			local docker_describe="LobeChat聚合市面上主流的AI大模型，ChatGPT/Claude/Gemini/Groq/Ollama"
			local docker_url="官网介绍: ${gh_proxy}github.com/lobehub/lobe-chat"
			local docker_use=""
			local docker_passwd=""
			local app_size="2"
			docker_app
			  ;;

		  37)
			local docker_name="myip"
			local docker_img="jason5ng32/myip:latest"
			local docker_port=8037

			docker_rum() {

				docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest

			}


			local docker_describe="是一个多功能IP工具箱，可以查看自己IP信息及连通性，用网页面板呈现"
			local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  38)
			send_stats "سطل خانوادگی شیایایا"
			clear
			install_docker
			check_disk_space 1
			bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"
			  ;;

		  39)

			if [ ! -d /home/docker/bililive-go/ ]; then
				mkdir -p /home/docker/bililive-go/ > /dev/null 2>&1
				wget -O /home/docker/bililive-go/config.yml ${gh_proxy}raw.githubusercontent.com/hr3lxphr6j/bililive-go/master/config.yml > /dev/null 2>&1
			fi

			local docker_name="bililive-go"
			local docker_img="chigusa/bililive-go"
			local docker_port=8039

			docker_rum() {

				docker run --restart=always --name bililive-go -v /home/docker/bililive-go/config.yml:/etc/bililive-go/config.yml -v /home/docker/bililive-go/Videos:/srv/bililive -p ${docker_port}:8080 -d chigusa/bililive-go

			}

			local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具"
			local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/bililive-go"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  40)
			local docker_name="webssh"
			local docker_img="jrohy/webssh"
			local docker_port=8040
			docker_rum() {
				docker run -d -p ${docker_port}:5032 --restart always --name webssh -e TZ=Asia/Shanghai jrohy/webssh
			}

			local docker_describe="简易在线ssh连接工具和sftp工具"
			local docker_url="官网介绍: ${gh_proxy}github.com/Jrohy/webssh"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  41)

			local lujing="[ -d "/www/server/panel" ]"
			local panelname="耗子面板"
			local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel"

			panel_app_install() {
				mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o install.sh https://dl.cdn.haozi.net/panel/install.sh && bash install.sh
				cd ~
			}

			panel_app_manage() {
				panel-cli
			}

			panel_app_uninstall() {
				mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o uninstall.sh https://dl.cdn.haozi.net/panel/uninstall.sh && bash uninstall.sh
				cd ~
			}

			install_panel

			  ;;


		  42)
			local docker_name="nexterm"
			local docker_img="germannewsmaker/nexterm:latest"
			local docker_port=8042

			docker_rum() {

				docker run -d \
				  --name nexterm \
				  -p ${docker_port}:6989 \
				  -v /home/docker/nexterm:/app/data \
				  --restart unless-stopped \
				  germannewsmaker/nexterm:latest

			}

			local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。"
			local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  43)
			local docker_name="hbbs"
			local docker_img="rustdesk/rustdesk-server"
			local docker_port=0000

			docker_rum() {

				docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs

			}


			local docker_describe="rustdesk开源的远程桌面(服务端)，类似自己的向日葵私服。"
			local docker_url="官网介绍: https://rustdesk.com/zh-cn/"
			local docker_use="docker logs hbbs"
			local docker_passwd="echo \"把你的IP和key记录下，会在远程桌面客户端中用到。去44选项装中继端吧！\""
			local app_size="1"
			docker_app
			  ;;

		  44)
			local docker_name="hbbr"
			local docker_img="rustdesk/rustdesk-server"
			local docker_port=0000

			docker_rum() {

				docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr

			}

			local docker_describe="rustdesk开源的远程桌面(中继端)，类似自己的向日葵私服。"
			local docker_url="官网介绍: https://rustdesk.com/zh-cn/"
			local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  45)
			local docker_name="registry"
			local docker_img="registry:2"
			local docker_port=8045

			docker_rum() {

				docker run -d \
					-p ${docker_port}:5000 \
					--name registry \
					-v /home/docker/registry:/var/lib/registry \
					-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
					--restart always \
					registry:2

			}

			local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。"
			local docker_url="官网介绍: https://hub.docker.com/_/registry"
			local docker_use=""
			local docker_passwd=""
			local app_size="2"
			docker_app
			  ;;

		  46)
			local docker_name="ghproxy"
			local docker_img="wjqserver/ghproxy:latest"
			local docker_port=8046

			docker_rum() {

				docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest

			}

			local docker_describe="使用Go实现的GHProxy，用于加速部分地区Github仓库的拉取。"
			local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  47)



			local app_name="普罗米修斯监控"
			local app_text="Prometheus+Grafana企业级监控系统"
			local app_url="官网介绍: https://prometheus.io"
			local docker_name="grafana"
			local docker_port="8047"
			local app_size="2"

			docker_app_install() {
				prometheus_install
				clear
				ip_address
				echo "نصب شده"
				check_docker_app_ip
				echo "نام کاربری و رمز عبور اولیه عبارتند از: مدیر"
			}

			docker_app_update() {
				docker rm -f node-exporter prometheus grafana
				docker rmi -f prom/node-exporter
				docker rmi -f prom/prometheus:latest
				docker rmi -f grafana/grafana:latest
				docker_app_install
			}

			docker_app_uninstall() {
				docker rm -f node-exporter prometheus grafana
				docker rmi -f prom/node-exporter
				docker rmi -f prom/prometheus:latest
				docker rmi -f grafana/grafana:latest

				rm -rf /home/docker/monitoring
				echo "برنامه حذف شده است"
			}

			docker_app_plus
			  ;;

		  48)
			local docker_name="node-exporter"
			local docker_img="prom/node-exporter"
			local docker_port=8048

			docker_rum() {

				docker run -d \
  					--name=node-exporter \
  					-p ${docker_port}:9100 \
  					--restart unless-stopped \
  					prom/node-exporter


			}

			local docker_describe="这是一个普罗米修斯的主机数据采集组件，请部署在被监控主机上。"
			local docker_url="官网介绍: https://github.com/prometheus/node_exporter"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  49)
			local docker_name="cadvisor"
			local docker_img="gcr.io/cadvisor/cadvisor:latest"
			local docker_port=8049

			docker_rum() {

				docker run -d \
  					--name=cadvisor \
  					--restart unless-stopped \
  					-p ${docker_port}:8080 \
  					--volume=/:/rootfs:ro \
  					--volume=/var/run:/var/run:rw \
  					--volume=/sys:/sys:ro \
  					--volume=/var/lib/docker/:/var/lib/docker:ro \
  					gcr.io/cadvisor/cadvisor:latest \
  					-housekeeping_interval=10s \
  					-docker_only=true

			}

			local docker_describe="这是一个普罗米修斯的容器数据采集组件，请部署在被监控主机上。"
			local docker_url="官网介绍: https://github.com/google/cadvisor"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;


		  50)
			local docker_name="changedetection"
			local docker_img="dgtlmoon/changedetection.io:latest"
			local docker_port=8050

			docker_rum() {

				docker run -d --restart always -p ${docker_port}:5000 \
					-v /home/docker/datastore:/datastore \
					--name changedetection dgtlmoon/changedetection.io:latest

			}

			local docker_describe="这是一款网站变化检测、补货监控和通知的小工具"
			local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;


		  51)
			clear
			send_stats "مرغ"
			check_disk_space 1
			curl -L ${gh_proxy}raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh
			  ;;


		  52)
			local docker_name="dpanel"
			local docker_img="dpanel/dpanel:lite"
			local docker_port=8052

			docker_rum() {

				docker run -it -d --name dpanel --restart=always \
  					-p ${docker_port}:8080 -e APP_NAME=dpanel \
  					-v /var/run/docker.sock:/var/run/docker.sock \
  					-v /home/docker/dpanel:/dpanel \
  					dpanel/dpanel:lite

			}

			local docker_describe="Docker可视化面板系统，提供完善的docker管理功能。"
			local docker_url="官网介绍: https://github.com/donknap/dpanel"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  53)
			local docker_name="ollama"
			local docker_img="ghcr.io/open-webui/open-webui:ollama"
			local docker_port=8053

			docker_rum() {

				docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama

			}

			local docker_describe="OpenWebUI一款大语言模型网页框架，接入全新的llama3大语言模型"
			local docker_url="官网介绍: https://github.com/open-webui/open-webui"
			local docker_use="docker exec ollama ollama run llama3.2:1b"
			local docker_passwd=""
			local app_size="5"
			docker_app
			  ;;

		  54)

			local lujing="[ -d "/www/server/panel" ]"
			local panelname="AMH面板"
			local panelurl="官方地址: https://amh.sh/index.htm?amh"

			panel_app_install() {
				cd ~
				wget https://dl.amh.sh/amh.sh && bash amh.sh
			}

			panel_app_manage() {
				panel_app_install
			}

			panel_app_uninstall() {
				panel_app_install
			}

			install_panel
			  ;;


		  55)
		  	frps_panel
			  ;;

		  56)
			frpc_panel
			  ;;

		  57)
			local docker_name="ollama"
			local docker_img="ghcr.io/open-webui/open-webui:ollama"
			local docker_port=8053

			docker_rum() {

				docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama

			}

			local docker_describe="OpenWebUI一款大语言模型网页框架，接入全新的DeepSeek R1大语言模型"
			local docker_url="官网介绍: https://github.com/open-webui/open-webui"
			local docker_use="docker exec ollama ollama run deepseek-r1:1.5b"
			local docker_passwd=""
			local app_size="5"
			docker_app
			  ;;


		  58)
			local app_name="Dify知识库"
			local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成"
			local app_url="官方网站: https://docs.dify.ai/zh-hans"
			local docker_name="docker-nginx-1"
			local docker_port="8058"
			local app_size="3"

			docker_app_install() {
				install git
				mkdir -p  /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env
				# sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env
				sed -i "s/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/" /home/docker/dify/docker/.env

				docker compose up -d
				clear
				echo "نصب شده"
				check_docker_app_ip
			}

			docker_app_update() {
				cd  /home/docker/dify/docker/ && docker compose down --rmi all
				cd  /home/docker/dify/
				git pull origin main
				sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=8058/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env
				cd  /home/docker/dify/docker/ && docker compose up -d
			}

			docker_app_uninstall() {
				cd  /home/docker/dify/docker/ && docker compose down --rmi all
				rm -rf /home/docker/dify
				echo "برنامه حذف شده است"
			}

			docker_app_plus

			  ;;

		  59)
			local app_name="New API"
			local app_text="新一代大模型网关与AI资产管理系统"
			local app_url="官方网站: https://github.com/Calcium-Ion/new-api"
			local docker_name="new-api"
			local docker_port="8059"
			local app_size="3"

			docker_app_install() {
				install git
				mkdir -p  /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/Calcium-Ion/new-api.git && cd new-api

				sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \
					   -e 's/container_name: redis/container_name: redis-new-api/g' \
					   -e 's/container_name: mysql/container_name: mysql-new-api/g' \
					   docker-compose.yml


				docker compose up -d
				clear
				echo "نصب شده"
				check_docker_app_ip
			}

			docker_app_update() {
				cd  /home/docker/new-api/ && docker compose down --rmi all
				cd  /home/docker/new-api/
				git pull origin main
				sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \
					   -e 's/container_name: redis/container_name: redis-new-api/g' \
					   -e 's/container_name: mysql/container_name: mysql-new-api/g' \
					   docker-compose.yml

				docker compose up -d
				clear
				echo "نصب شده"
				check_docker_app_ip

			}

			docker_app_uninstall() {
				cd  /home/docker/new-api/ && docker compose down --rmi all
				rm -rf /home/docker/new-api
				echo "برنامه حذف شده است"
			}

			docker_app_plus

			  ;;


		  60)

			local app_name="JumpServer开源堡垒机"
			local app_text="是一个开源的特权访问管理 (PAM) 工具，该程序占用80端口不支持添加域名访问了"
			local app_url="官方介绍: https://github.com/jumpserver/jumpserver"
			local docker_name="jms_web"
			local docker_port="80"
			local app_size="2"

			docker_app_install() {
				curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
				clear
				echo "نصب شده"
				check_docker_app_ip
				echo "نام کاربری اولیه: مدیر"
				echo "رمز عبور اولیه: Changeme"
			}


			docker_app_update() {
				cd /opt/jumpserver-installer*/
				./jmsctl.sh upgrade
				echo "برنامه به روز شده است"
			}


			docker_app_uninstall() {
				cd /opt/jumpserver-installer*/
				./jmsctl.sh uninstall
				cd /opt
				rm -rf jumpserver-installer*/
				rm -rf jumpserver
				echo "برنامه حذف شده است"
			}

			docker_app_plus
			  ;;

		  61)
			local docker_name="libretranslate"
			local docker_img="libretranslate/libretranslate:latest"
			local docker_port=8061

			docker_rum() {

				docker run -d \
  					-p ${docker_port}:5000 \
  					--name libretranslate \
  					libretranslate/libretranslate \
  					--load-only ko,zt,zh,en,ja,pt,es,fr,de,ru

			}

			local docker_describe="免费开源机器翻译 API，完全自托管，它的翻译引擎由开源Argos Translate库提供支持。"
			local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate"
			local docker_use=""
			local docker_passwd=""
			local app_size="5"
			docker_app
			  ;;



		  62)
			local app_name="RAGFlow知识库"
			local app_text="基于深度文档理解的开源 RAG（检索增强生成）引擎"
			local app_url="官方网站: https://github.com/infiniflow/ragflow"
			local docker_name="ragflow-server"
			local docker_port="8062"
			local app_size="8"

			docker_app_install() {
				install git
				mkdir -p  /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker
				sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml
				docker compose up -d
				clear
				echo "نصب شده"
				check_docker_app_ip
			}

			docker_app_update() {
				cd  /home/docker/ragflow/docker/ && docker compose down --rmi all
				cd  /home/docker/ragflow/
				git pull origin main
				cd  /home/docker/ragflow/docker/
				sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml
				docker compose up -d
			}

			docker_app_uninstall() {
				cd  /home/docker/ragflow/docker/ && docker compose down --rmi all
				rm -rf /home/docker/ragflow
				echo "برنامه حذف شده است"
			}

			docker_app_plus

			  ;;


		  63)
			local docker_name="open-webui"
			local docker_img="ghcr.io/open-webui/open-webui:main"
			local docker_port=8063

			docker_rum() {

				docker run -d -p ${docker_port}:8080 -v /home/docker/open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

			}

			local docker_describe="OpenWebUI一款大语言模型网页框架，官方精简版本，支持各大模型API接入"
			local docker_url="官网介绍: https://github.com/open-webui/open-webui"
			local docker_use=""
			local docker_passwd=""
			local app_size="3"
			docker_app
			  ;;

		  64)
			local docker_name="it-tools"
			local docker_img="corentinth/it-tools:latest"
			local docker_port=8064

			docker_rum() {
				docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
			}

			local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
			local docker_url="官网介绍: https://github.com/CorentinTh/it-tools"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;


		  65)
			local docker_name="n8n"
			local docker_img="docker.n8n.io/n8nio/n8n"
			local docker_port=8065

			docker_rum() {

				add_yuming
				mkdir -p /home/docker/n8n
				chmod -R 777 /home/docker/n8n

				docker run -d --name n8n \
				  --restart always \
				  -p ${docker_port}:5678 \
				  -v /home/docker/n8n:/home/node/.n8n \
				  -e N8N_HOST=${yuming} \
				  -e N8N_PORT=5678 \
				  -e N8N_PROTOCOL=https \
				  -e N8N_WEBHOOK_URL=https://${yuming}/ \
				  docker.n8n.io/n8nio/n8n

				ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
				block_container_port "$docker_name" "$ipv4_address"

			}

			local docker_describe="是一款功能强大的自动化工作流平台"
			local docker_url="官网介绍: https://github.com/n8n-io/n8n"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  66)
			yt_menu_pro
			  ;;


		  67)
			local docker_name="ddns-go"
			local docker_img="jeessy/ddns-go"
			local docker_port=9876

			docker_rum() {
				docker run -d \
						 --name ddns-go \
						 --restart=always \
						 -p ${docker_port}:9876 \
						 -v /home/docker/ddns-go:/root \
						 jeessy/ddns-go

			}

			local docker_describe="自动将你的公网 IP（IPv4/IPv6）实时更新到各大 DNS 服务商，实现动态域名解析。"
			local docker_url="官网介绍: https://github.com/CorentinTh/it-tools"
			local docker_use=""
			local docker_passwd=""
			local app_size="1"
			docker_app
			  ;;

		  68)
			local docker_name="allinssl"
			local docker_img="allinssl/allinssl:latest"
			local docker_port=7979

			docker_rum() {
				docker run -itd --name allinssl -p ${docker_port}:8888 -v /home/docker/allinssl/data:/www/allinssl/data -e ALLINSSL_USER=allinssl -e ALLINSSL_PWD=allinssldocker -e ALLINSSL_URL=allinssl allinssl/allinssl:latest
			}

			local docker_describe="开源免费的 SSL 证书自动化管理平台"
			local docker_url="官网介绍: https://allinssl.com"
			local docker_use="echo \"初始用户名: allinssl\""
			local docker_passwd="echo \"初始密码: allinssldocker\""
			local app_size="1"
			docker_app
			  ;;


		  0)
			  kejilion
			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end

	done
}


linux_work() {

	while true; do
	  clear
	  send_stats "فضای کاری من"
	  echo -e "فضای کاری من"
	  echo -e "این سیستم فضای کاری را در اختیار شما قرار می دهد که می تواند روی پس زمینه اجرا شود ، که می توانید برای انجام کارهای بلند مدت از آن استفاده کنید."
	  echo -e "حتی اگر SSH را قطع کنید ، وظایف موجود در فضای کاری قطع نمی شود و وظایف موجود در پس زمینه مقیم خواهد شد."
	  echo -e "${gl_huang}نکته:${gl_bai}پس از ورود به فضای کاری ، از Ctrl+B استفاده کنید و D را به تنهایی فشار دهید تا از فضای کاری خارج شوید!"
	  echo -e "${gl_kjlan}------------------------"
	  echo "لیست فضاهای کاری موجود موجود"
	  echo -e "${gl_kjlan}------------------------"
	  tmux list-sessions
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}فضای کاری شماره 1"
	  echo -e "${gl_kjlan}2.   ${gl_bai}فضای کاری شماره 2"
	  echo -e "${gl_kjlan}3.   ${gl_bai}فضای کاری شماره 3"
	  echo -e "${gl_kjlan}4.   ${gl_bai}فضای کاری شماره 4"
	  echo -e "${gl_kjlan}5.   ${gl_bai}فضای کاری شماره 5"
	  echo -e "${gl_kjlan}6.   ${gl_bai}فضای کاری شماره 6"
	  echo -e "${gl_kjlan}7.   ${gl_bai}فضای کاری شماره 7"
	  echo -e "${gl_kjlan}8.   ${gl_bai}فضای کاری شماره 8"
	  echo -e "${gl_kjlan}9.   ${gl_bai}فضای کاری شماره 9"
	  echo -e "${gl_kjlan}10.  ${gl_bai}فضای کاری شماره 10"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}21.  ${gl_bai}حالت مقیم SSH${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}22.  ${gl_bai}فضای کاری را ایجاد و وارد کنید"
	  echo -e "${gl_kjlan}23.  ${gl_bai}دستورات را به فضای کاری پس زمینه تزریق کنید"
	  echo -e "${gl_kjlan}24.  ${gl_bai}فضای کاری مشخص شده را حذف کنید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in

		  1)
			  clear
			  install tmux
			  local SESSION_NAME="work1"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run

			  ;;
		  2)
			  clear
			  install tmux
			  local SESSION_NAME="work2"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  3)
			  clear
			  install tmux
			  local SESSION_NAME="work3"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  4)
			  clear
			  install tmux
			  local SESSION_NAME="work4"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  5)
			  clear
			  install tmux
			  local SESSION_NAME="work5"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  6)
			  clear
			  install tmux
			  local SESSION_NAME="work6"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  7)
			  clear
			  install tmux
			  local SESSION_NAME="work7"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  8)
			  clear
			  install tmux
			  local SESSION_NAME="work8"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  9)
			  clear
			  install tmux
			  local SESSION_NAME="work9"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;
		  10)
			  clear
			  install tmux
			  local SESSION_NAME="work10"
			  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
			  tmux_run
			  ;;

		  21)
			while true; do
			  clear
			  if grep -q 'tmux attach-session -t sshd || tmux new-session -s sshd' ~/.bashrc; then
				  local tmux_sshd_status="${gl_lv}开启${gl_bai}"
			  else
				  local tmux_sshd_status="${gl_hui}关闭${gl_bai}"
			  fi
			  send_stats "حالت مقیم SSH"
			  echo -e "حالت مقیم SSH${tmux_sshd_status}"
			  echo "پس از فعال شدن اتصال SSH ، مستقیماً وارد حالت مقیم شده و به حالت کار قبلی باز می گردد."
			  echo "------------------------"
			  echo "1. روشن را روشن کنید. خاموش کنید"
			  echo "------------------------"
			  echo "0. به منوی قبلی برگردید"
			  echo "------------------------"
			  read -e -p "لطفا انتخاب خود را وارد کنید:" gongzuoqu_del
			  case "$gongzuoqu_del" in
				1)
			  	  install tmux
			  	  local SESSION_NAME="sshd"
			  	  send_stats "فضای کاری را شروع کنید$SESSION_NAME"
				  grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\ n# به طور خودکار جلسه tmux \ nif را وارد کنید [[-z \"\$TMUX\" ]]; then\n    tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc
				  source ~/.bashrc
			  	  tmux_run
				  ;;
				2)
				  sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc
				  tmux kill-window -t sshd
				  ;;
				*)
				  break
				  ;;
			  esac
			done
			  ;;

		  22)
			  read -e -p "لطفاً نام فضای کاری را که ایجاد کرده اید یا وارد کرده اید ، مانند 1001 KJ001 Work1 وارد کنید:" SESSION_NAME
			  tmux_run
			  send_stats "فضای کاری سفارشی"
			  ;;


		  23)
			  read -e -p "لطفاً دستور مورد نظر خود را در پس زمینه وارد کنید ، مانند: curl -fssl https://get.docker.com | sh:" tmuxd
			  tmux_run_d
			  send_stats "دستورات را به فضای کاری پس زمینه تزریق کنید"
			  ;;

		  24)
			  read -e -p "لطفاً نام فضای کاری را که می خواهید حذف کنید وارد کنید:" gongzuoqu_name
			  tmux kill-window -t $gongzuoqu_name
			  send_stats "فضای کاری را حذف کنید"
			  ;;

		  0)
			  kejilion
			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end

	done


}












linux_Settings() {

	while true; do
	  clear
	  # SEND_STATS "ابزارهای سیستم"
	  echo -e "ابزار سیستم"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}1.   ${gl_bai}کلیدهای میانبر راه اندازی اسکریپت را تنظیم کنید${gl_kjlan}2.   ${gl_bai}رمز ورود ورود به سیستم را تغییر دهید"
	  echo -e "${gl_kjlan}3.   ${gl_bai}حالت ورود به سیستم رمز عبور${gl_kjlan}4.   ${gl_bai}نسخه مشخص شده پایتون را نصب کنید"
	  echo -e "${gl_kjlan}5.   ${gl_bai}همه بنادر را باز کنید${gl_kjlan}6.   ${gl_bai}پورت اتصال SSH را اصلاح کنید"
	  echo -e "${gl_kjlan}7.   ${gl_bai}优化DNS地址                        ${gl_kjlan}8.   ${gl_bai}سیستم نصب مجدد یک کلیک${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}9.   ${gl_bai}禁用ROOT账户创建新账户             ${gl_kjlan}10.  ${gl_bai}اولویت IPv4/IPv6 را تغییر دهید"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}11.  ${gl_bai}查看端口占用状态                   ${gl_kjlan}12.  ${gl_bai}اندازه حافظه مجازی را تغییر دهید"
	  echo -e "${gl_kjlan}13.  ${gl_bai}مدیریت کاربر${gl_kjlan}14.  ${gl_bai}ژنراتور کاربر/رمز عبور"
	  echo -e "${gl_kjlan}15.  ${gl_bai}تنظیم منطقه زمانی سیستم${gl_kjlan}16.  ${gl_bai}شتاب BBR3 را تنظیم کنید"
	  echo -e "${gl_kjlan}17.  ${gl_bai}فایروال مدیر پیشرفته${gl_kjlan}18.  ${gl_bai}نام میزبان را تغییر دهید"
	  echo -e "${gl_kjlan}19.  ${gl_bai}منبع به روزرسانی سیستم سوئیچ${gl_kjlan}20.  ${gl_bai}مدیریت وظیفه زمان بندی"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}21.  ${gl_bai}تجزیه میزبان بومی${gl_kjlan}22.  ${gl_bai}SSH防御程序"
	  echo -e "${gl_kjlan}23.  ${gl_bai}خاموش کردن خودکار از حد فعلی${gl_kjlan}24.  ${gl_bai}حالت ورود به سیستم کلید خصوصی"
	  echo -e "${gl_kjlan}25.  ${gl_bai}نظارت بر سیستم TG-BOT و هشدار زودهنگام${gl_kjlan}26.  ${gl_bai}رفع آسیب پذیری های پرخطر Openssh (Xiuyuan)"
	  echo -e "${gl_kjlan}27.  ${gl_bai}ارتقاء هسته Red Hat Linux${gl_kjlan}28.  ${gl_bai}بهینه سازی پارامترهای هسته در سیستم لینوکس${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}29.  ${gl_bai}ابزار اسکن ویروس${gl_huang}★${gl_bai}                     ${gl_kjlan}30.  ${gl_bai}مدیر پرونده"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}31.  ${gl_bai}سوئیچ زبان سیستم${gl_kjlan}32.  ${gl_bai}ابزار زیباسازی خط فرمان${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}33.  ${gl_bai}سطل بازیافت سیستم را تنظیم کنید${gl_kjlan}34.  ${gl_bai}تهیه نسخه پشتیبان از سیستم و بازیابی"
	  echo -e "${gl_kjlan}35.  ${gl_bai}ابزار اتصال از راه دور SSH${gl_kjlan}36.  ${gl_bai}ابزار مدیریت پارتیشن دیسک سخت"
	  echo -e "${gl_kjlan}37.  ${gl_bai}تاریخ خط فرمان${gl_kjlan}38.  ${gl_bai}ابزار همگام سازی از راه دور RSYNC"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}41.  ${gl_bai}صفحه پیام${gl_kjlan}66.  ${gl_bai}بهینه سازی سیستم یک مرحله ای${gl_huang}★${gl_bai}"
	  echo -e "${gl_kjlan}99.  ${gl_bai}سرور را مجدداً راه اندازی کنید${gl_kjlan}100. ${gl_bai}حریم خصوصی و امنیت"
	  echo -e "${gl_kjlan}101. ${gl_bai}استفاده پیشرفته از فرمان k${gl_huang}★${gl_bai}                    ${gl_kjlan}102. ${gl_bai}حذف اسکریپت شیر ​​فناوری"
	  echo -e "${gl_kjlan}------------------------"
	  echo -e "${gl_kjlan}0.   ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			  while true; do
				  clear
				  read -e -p "لطفاً کلید میانبر خود را وارد کنید (0 را برای خروج وارد کنید):" kuaijiejian
				  if [ "$kuaijiejian" == "0" ]; then
					   break_end
					   linux_Settings
				  fi
				  find /usr/local/bin/ -type l -exec bash -c 'test "$(readlink -f {})" = "/usr/local/bin/k" && rm -f {}' \;
				  ln -s /usr/local/bin/k /usr/local/bin/$kuaijiejian
				  echo "کلیدهای میانبر تنظیم شده اند"
				  send_stats "کلیدهای میانبر اسکریپت تنظیم شده اند"
				  break_end
				  linux_Settings
			  done
			  ;;

		  2)
			  clear
			  send_stats "رمز ورود ورود خود را تنظیم کنید"
			  echo "رمز ورود ورود خود را تنظیم کنید"
			  passwd
			  ;;
		  3)
			  root_use
			  send_stats "حالت رمز عبور"
			  add_sshpasswd
			  ;;

		  4)
			root_use
			send_stats "مدیریت نسخه PY"
			echo "مدیریت نسخه پایتون"
			echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1pm42157ck؟t=0.1"
			echo "---------------------------------------"
			echo "این ویژگی یکپارچه هر نسخه ای را که به طور رسمی توسط پایتون پشتیبانی می شود نصب می کند!"
			local VERSION=$(python3 -V 2>&1 | awk '{print $2}')
			echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}"
			echo "------------"
			echo "نسخه توصیه شده: 3.12 3.11 3.10 3.9 3.8 2.7"
			echo "پرس و جو نسخه های بیشتر: https://www.python.org/downloads/"
			echo "------------"
			read -e -p "شماره نسخه Python را که می خواهید نصب کنید وارد کنید (0 را برای خروج وارد کنید):" py_new_v


			if [[ "$py_new_v" == "0" ]]; then
				send_stats "مدیریت اسکریپت PY"
				break_end
				linux_Settings
			fi


			if ! grep -q 'export PYENV_ROOT="\$HOME/.pyenv"' ~/.bashrc; then
				if command -v yum &>/dev/null; then
					yum update -y && yum install git -y
					yum groupinstall "Development Tools" -y
					yum install openssl-devel bzip2-devel libffi-devel ncurses-devel zlib-devel readline-devel sqlite-devel xz-devel findutils -y

					curl -O https://www.openssl.org/source/openssl-1.1.1u.tar.gz
					tar -xzf openssl-1.1.1u.tar.gz
					cd openssl-1.1.1u
					./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
					make
					make install
					echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf
					ldconfig -v
					cd ..

					export LDFLAGS="-L/usr/local/openssl/lib"
					export CPPFLAGS="-I/usr/local/openssl/include"
					export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"

				elif command -v apt &>/dev/null; then
					apt update -y && apt install git -y
					apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev -y
				elif command -v apk &>/dev/null; then
					apk update && apk add git
					apk add --no-cache bash gcc musl-dev libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev libc6-compat linux-headers make xz-dev build-base  ncurses-dev
				else
					echo "مدیر بسته ناشناخته!"
					return
				fi

				curl https://pyenv.run | bash
				cat << EOF >> ~/.bashrc

export PYENV_ROOT="\$HOME/.pyenv"
if [[ -d "\$PYENV_ROOT/bin" ]]; then
  export PATH="\$PYENV_ROOT/bin:\$PATH"
fi
eval "\$(pyenv init --path)"
eval "\$(pyenv init -)"
eval "\$(pyenv virtualenv-init -)"

EOF

			fi

			sleep 1
			source ~/.bashrc
			sleep 1
			pyenv install $py_new_v
			pyenv global $py_new_v

			rm -rf /tmp/python-build.*
			rm -rf $(pyenv root)/cache/*

			local VERSION=$(python -V 2>&1 | awk '{print $2}')
			echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}"
			send_stats "نسخه PY SCRIPT SCRIPT"

			  ;;

		  5)
			  root_use
			  send_stats "بندر"
			  iptables_open
			  remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1
			  echo "همه درگاه ها باز هستند"

			  ;;
		  6)
			root_use
			send_stats "درگاه SSH را اصلاح کنید"

			while true; do
				clear
				sed -i 's/#Port/Port/' /etc/ssh/sshd_config

				# شماره پورت SSH فعلی را بخوانید
				local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')

				# شماره پورت SSH فعلی را چاپ کنید
				echo -e "شماره پورت SSH فعلی:${gl_huang}$current_port ${gl_bai}"

				echo "------------------------"
				echo "اعداد با شماره پورت از 1 تا 65535. (برای خروج 0 را وارد کنید)"

				# کاربر را وادار به وارد کردن شماره پورت SSH جدید کنید
				read -e -p "لطفاً شماره پورت جدید SSH را وارد کنید:" new_port

				# تعیین کنید که آیا شماره پورت در محدوده معتبر است
				if [[ $new_port =~ ^[0-9]+$ ]]; then  # 检查输入是否为数字
					if [[ $new_port -ge 1 && $new_port -le 65535 ]]; then
						send_stats "درگاه SSH اصلاح شده است"
						new_ssh_port
					elif [[ $new_port -eq 0 ]]; then
						send_stats "از اصلاح بندر SSH خارج شوید"
						break
					else
						echo "شماره پورت نامعتبر است ، لطفاً یک عدد بین 1 تا 65535 وارد کنید."
						send_stats "ورودی پورت SSH نامعتبر است"
						break_end
					fi
				else
					echo "ورودی نامعتبر است ، لطفاً شماره را وارد کنید."
					send_stats "ورودی پورت SSH نامعتبر است"
					break_end
				fi
			done


			  ;;


		  7)
			set_dns_ui
			  ;;

		  8)

			dd_xitong
			  ;;
		  9)
			root_use
			send_stats "کاربران جدید ریشه را غیرفعال می کنند"
			read -e -p "لطفاً نام کاربری جدید را وارد کنید (برای خروج 0 را وارد کنید):" new_username
			if [ "$new_username" == "0" ]; then
				break_end
				linux_Settings
			fi

			useradd -m -s /bin/bash "$new_username"
			passwd "$new_username"

			echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers

			passwd -l root

			echo "این عملیات به پایان رسیده است."
			;;


		  10)
			root_use
			send_stats "اولویت V4/V6 را تنظیم کنید"
			while true; do
				clear
				echo "اولویت V4/V6 را تنظیم کنید"
				echo "------------------------"
				local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6)

				if [ "$ipv6_disabled" -eq 1 ]; then
					echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv4${gl_bai}اولویت"
				else
					echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv6${gl_bai}اولویت"
				fi
				echo ""
				echo "------------------------"
				echo "1. اولویت IPv4 2. اولویت IPv6 3. ابزار تعمیر IPv6"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "یک شبکه ترجیحی را انتخاب کنید:" choice

				case $choice in
					1)
						sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1
						echo "به اولویت IPv4 تبدیل شد"
						send_stats "به اولویت IPv4 تبدیل شد"
						;;
					2)
						sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1
						echo "به اولویت IPv6 تغییر یافته است"
						send_stats "به اولویت IPv6 تغییر یافته است"
						;;

					3)
						clear
						bash <(curl -L -s jhb.ovh/jb/v6.sh)
						echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!"
						send_stats "رفع IPv6"
						;;

					*)
						break
						;;

				esac
			done
			;;

		  11)
			clear
			ss -tulnape
			;;

		  12)
			root_use
			send_stats "حافظه مجازی را تنظیم کنید"
			while true; do
				clear
				echo "حافظه مجازی را تنظیم کنید"
				local swap_used=$(free -m | awk 'NR==3{print $3}')
				local swap_total=$(free -m | awk 'NR==3{print $2}')
				local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}')

				echo -e "حافظه مجازی فعلی:${gl_huang}$swap_info${gl_bai}"
				echo "------------------------"
				echo "1. 1024m 2 را اختصاص دهید. 2048m 3 را اختصاص دهید. 4096m را اختصاص دهید. اندازه سفارشی"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "لطفا انتخاب خود را وارد کنید:" choice

				case "$choice" in
				  1)
					send_stats "حافظه مجازی 1G تنظیم شده است"
					add_swap 1024

					;;
				  2)
					send_stats "2G حافظه مجازی تنظیم شده است"
					add_swap 2048

					;;
				  3)
					send_stats "حافظه مجازی 4G تنظیم شده است"
					add_swap 4096

					;;

				  4)
					read -e -p "لطفاً اندازه حافظه مجازی (واحد M) را وارد کنید:" new_swap
					add_swap "$new_swap"
					send_stats "حافظه مجازی سفارشی تنظیم شده است"
					;;

				  *)
					break
					;;
				esac
			done
			;;

		  13)
			  while true; do
				root_use
				send_stats "مدیریت کاربر"
				echo "لیست کاربری"
				echo "----------------------------------------------------------------------------"
				printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限"
				while IFS=: read -r username _ userid groupid _ _ homedir shell; do
					local groups=$(groups "$username" | cut -d : -f 2)
					local sudo_status=$(sudo -n -lU "$username" 2>/dev/null | grep -q '(ALL : ALL)' && echo "Yes" || echo "No")
					printf "%-20s %-30s %-20s %-10s\n" "$username" "$homedir" "$groups" "$sudo_status"
				done < /etc/passwd


				  echo ""
				  echo "عملیات حساب"
				  echo "------------------------"
				  echo "1. یک حساب عادی ایجاد کنید. یک حساب حق بیمه ایجاد کنید"
				  echo "------------------------"
				  echo "3. بالاترین مجوزها را بدهید 4. بالاترین مجوزها را لغو کنید"
				  echo "------------------------"
				  echo "5. حساب را حذف کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
					   # کاربر را وادار به وارد کردن نام کاربری جدید کند
					   read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username

					   # یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید
					   useradd -m -s /bin/bash "$new_username"
					   passwd "$new_username"

					   echo "این عملیات به پایان رسیده است."
						  ;;

					  2)
					   # کاربر را وادار به وارد کردن نام کاربری جدید کند
					   read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username

					   # یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید
					   useradd -m -s /bin/bash "$new_username"
					   passwd "$new_username"

					   # به کاربران جدید مجوزهای سودو را اعطا کنید
					   echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers

					   echo "این عملیات به پایان رسیده است."

						  ;;
					  3)
					   read -e -p "لطفا نام کاربری خود را وارد کنید:" username
					   # به کاربران جدید مجوزهای سودو را اعطا کنید
					   echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers
						  ;;
					  4)
					   read -e -p "لطفا نام کاربری خود را وارد کنید:" username
					   # مجوزهای سودو کاربر را از پرونده sudoers حذف کنید
					   sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers

						  ;;
					  5)
					   read -e -p "لطفاً برای حذف نام کاربری را وارد کنید:" username
					   # کاربر و فهرست خانه آن را حذف کنید
					   userdel -r "$username"
						  ;;

					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done
			  ;;

		  14)
			clear
			send_stats "تولید کننده اطلاعات کاربر"
			echo "نام کاربری تصادفی"
			echo "------------------------"
			for i in {1..5}; do
				username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)"
				echo "نام کاربری تصادفی$i: $username"
			done

			echo ""
			echo "نام تصادفی"
			echo "------------------------"
			local first_names=("John" "Jane" "Michael" "Emily" "David" "Sophia" "William" "Olivia" "James" "Emma" "Ava" "Liam" "Mia" "Noah" "Isabella")
			local last_names=("Smith" "Johnson" "Brown" "Davis" "Wilson" "Miller" "Jones" "Garcia" "Martinez" "Williams" "Lee" "Gonzalez" "Rodriguez" "Hernandez")

			# 5 نام کاربری تصادفی ایجاد کنید
			for i in {1..5}; do
				local first_name_index=$((RANDOM % ${#first_names[@]}))
				local last_name_index=$((RANDOM % ${#last_names[@]}))
				local user_name="${first_names[$first_name_index]} ${last_names[$last_name_index]}"
				echo "نام کاربری تصادفی$i: $user_name"
			done

			echo ""
			echo "uuid تصادفی"
			echo "------------------------"
			for i in {1..5}; do
				uuid=$(cat /proc/sys/kernel/random/uuid)
				echo "uuid تصادفی$i: $uuid"
			done

			echo ""
			echo "رمز عبور تصادفی 16 بیتی"
			echo "------------------------"
			for i in {1..5}; do
				local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
				echo "رمز عبور تصادفی$i: $password"
			done

			echo ""
			echo "رمز عبور تصادفی 32 بیتی"
			echo "------------------------"
			for i in {1..5}; do
				local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)
				echo "رمز عبور تصادفی$i: $password"
			done
			echo ""

			  ;;

		  15)
			root_use
			send_stats "تغییر منطقه زمانی"
			while true; do
				clear
				echo "اطلاعات زمان سیستم"

				# منطقه زمانی سیستم فعلی را دریافت کنید
				local timezone=$(current_timezone)

				# زمان فعلی سیستم را دریافت کنید
				local current_time=$(date +"%Y-%m-%d %H:%M:%S")

				# منطقه زمانی و زمان را نشان دهید
				echo "منطقه زمانی فعلی سیستم:$timezone"
				echo "زمان فعلی سیستم:$current_time"

				echo ""
				echo "سوئیچینگ منطقه زمانی"
				echo "------------------------"
				echo "آسیا"
				echo "1. زمان شانگهای در چین 2. زمان هنگ کنگ در چین"
				echo "3 زمان توکیو در ژاپن 4. زمان سئول در کره جنوبی"
				echo "5. زمان سنگاپور 6. زمان کلکته در هند"
				echo "7. زمان دبی در امارات 8. زمان سیدنی در استرالیا"
				echo "9. زمان در بانکوک ، تایلند"
				echo "------------------------"
				echo "اروپا"
				echo "11. زمان لندن در انگلستان 12. زمان پاریس در فرانسه"
				echo "13. برلین زمان ، آلمان 14. زمان مسکو ، روسیه"
				echo "15. زمان اوترخت در هلند 16. زمان مادرید در اسپانیا"
				echo "------------------------"
				echo "آمریکا"
				echo "21. زمان غربی 22. زمان شرقی"
				echo "23. زمان کانادا 24. زمان مکزیک"
				echo "25. زمان برزیل 26. زمان آرژانتین"
				echo "------------------------"
				echo "31. UTC زمان استاندارد جهانی"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice


				case $sub_choice in
					1) set_timedate Asia/Shanghai ;;
					2) set_timedate Asia/Hong_Kong ;;
					3) set_timedate Asia/Tokyo ;;
					4) set_timedate Asia/Seoul ;;
					5) set_timedate Asia/Singapore ;;
					6) set_timedate Asia/Kolkata ;;
					7) set_timedate Asia/Dubai ;;
					8) set_timedate Australia/Sydney ;;
					9) set_timedate Asia/Bangkok ;;
					11) set_timedate Europe/London ;;
					12) set_timedate Europe/Paris ;;
					13) set_timedate Europe/Berlin ;;
					14) set_timedate Europe/Moscow ;;
					15) set_timedate Europe/Amsterdam ;;
					16) set_timedate Europe/Madrid ;;
					21) set_timedate America/Los_Angeles ;;
					22) set_timedate America/New_York ;;
					23) set_timedate America/Vancouver ;;
					24) set_timedate America/Mexico_City ;;
					25) set_timedate America/Sao_Paulo ;;
					26) set_timedate America/Argentina/Buenos_Aires ;;
					31) set_timedate UTC ;;
					*) break ;;
				esac
			done
			  ;;

		  16)

			bbrv3
			  ;;

		  17)
			  iptables_panel

			  ;;

		  18)
		  root_use
		  send_stats "نام میزبان را تغییر دهید"

		  while true; do
			  clear
			  local current_hostname=$(uname -n)
			  echo -e "نام میزبان فعلی:${gl_huang}$current_hostname${gl_bai}"
			  echo "------------------------"
			  read -e -p "لطفاً نام میزبان جدید را وارد کنید (0 را برای خروج وارد کنید):" new_hostname
			  if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then
				  if [ -f /etc/alpine-release ]; then
					  # Alpine
					  echo "$new_hostname" > /etc/hostname
					  hostname "$new_hostname"
				  else
					  # سیستم های دیگر مانند Debian ، Ubuntu ، Centos و غیره
					  hostnamectl set-hostname "$new_hostname"
					  sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname
					  systemctl restart systemd-hostnamed
				  fi

				  if grep -q "127.0.0.1" /etc/hosts; then
					  sed -i "s/127.0.0.1 .*/127.0.0.1       $new_hostname localhost localhost.localdomain/g" /etc/hosts
				  else
					  echo "127.0.0.1       $new_hostname localhost localhost.localdomain" >> /etc/hosts
				  fi

				  if grep -q "^::1" /etc/hosts; then
					  sed -i "s/^::1 .*/::1             $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback/g" /etc/hosts
				  else
					  echo "::1             $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts
				  fi

				  echo "نام میزبان به:$new_hostname"
				  send_stats "نام میزبان تغییر کرده است"
				  sleep 1
			  else
				  echo "خارج شده ، نام میزبان تغییر نکرده است."
				  break
			  fi
		  done
			  ;;

		  19)
		  root_use
		  send_stats "منبع بروزرسانی سیستم را تغییر دهید"
		  clear
		  echo "منطقه منبع بروزرسانی را انتخاب کنید"
		  echo "برای تغییر منبع به روزرسانی سیستم به LinuxMirrors متصل شوید"
		  echo "------------------------"
		  echo "1. سرزمین اصلی چین [پیش فرض] 2. سرزمین اصلی چین [شبکه آموزش] 3 مناطق خارج از کشور"
		  echo "------------------------"
		  echo "0. به منوی قبلی برگردید"
		  echo "------------------------"
		  read -e -p "انتخاب خود را وارد کنید:" choice

		  case $choice in
			  1)
				  send_stats "منبع پیش فرض در سرزمین اصلی چین"
				  bash <(curl -sSL https://linuxmirrors.cn/main.sh)
				  ;;
			  2)
				  send_stats "منبع آموزش در سرزمین اصلی چین"
				  bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu
				  ;;
			  3)
				  send_stats "مبداء خارج از کشور"
				  bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad
				  ;;
			  *)
				  echo "لغو شده"
				  ;;

		  esac

			  ;;

		  20)
		  send_stats "مدیریت وظیفه زمان بندی"
			  while true; do
				  clear
				  check_crontab_installed
				  clear
				  echo "لیست کار به موقع"
				  crontab -l
				  echo ""
				  echo "عمل کردن"
				  echo "------------------------"
				  echo "1. اضافه کردن وظایف زمان بندی 2. کارهای زمان بندی را حذف کنید."
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

				  case $sub_choice in
					  1)
						  read -e -p "لطفاً دستور اجرای کار جدید را وارد کنید:" newquest
						  echo "------------------------"
						  echo "1. وظایف ماهانه 2. وظایف هفتگی"
						  echo "3 وظایف روزانه 4. وظایف ساعتی"
						  echo "------------------------"
						  read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi

						  case $dingshi in
							  1)
								  read -e -p "انتخاب کنید چه روز از هر ماه برای انجام وظایف؟ (1-30):" day
								  (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1
								  ;;
							  2)
								  read -e -p "انتخاب کنید که چه هفته ای برای انجام کار انجام شود؟ (0-6 ، 0 نشان دهنده یکشنبه):" weekday
								  (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1
								  ;;
							  3)
								  read -e -p "انتخاب کنید که هر روز چه زمانی انجام دهید؟ (ساعت ، 0-23):" hour
								  (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1
								  ;;
							  4)
								  read -e -p "برای انجام کار کدام دقیقه از ساعت را وارد کنید؟ (دقیقه ، 0-60):" minute
								  (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1
								  ;;
							  *)
								  break  # 跳出
								  ;;
						  esac
						  send_stats "کارهای به موقع اضافه کنید"
						  ;;
					  2)
						  read -e -p "لطفاً کلمات کلیدی را که باید حذف شوند وارد کنید:" kquest
						  crontab -l | grep -v "$kquest" | crontab -
						  send_stats "کارهای زمان بندی را حذف کنید"
						  ;;
					  3)
						  crontab -e
						  send_stats "کارهای زمان بندی را ویرایش کنید"
						  ;;
					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done

			  ;;

		  21)
			  root_use
			  send_stats "تجزیه میزبان محلی"
			  while true; do
				  clear
				  echo "لیست تجزیه میزبان بومی"
				  echo "اگر مسابقات پارس را در اینجا اضافه کنید ، دیگر از تجزیه پویا استفاده نمی شود"
				  cat /etc/hosts
				  echo ""
				  echo "عمل کردن"
				  echo "------------------------"
				  echo "1. یک تجزیه جدید را اضافه کنید. آدرس تجزیه را حذف کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns

				  case $host_dns in
					  1)
						  read -e -p "لطفاً یک فرمت جدید تجزیه و تحلیل را وارد کنید: 110.25.5.5.33 Kejilion.pro:" addhost
						  echo "$addhost" >> /etc/hosts
						  send_stats "تجزیه میزبان محلی اضافه شده است"

						  ;;
					  2)
						  read -e -p "لطفاً کلمات کلیدی محتوای تجزیه کننده را که باید حذف شوند وارد کنید:" delhost
						  sed -i "/$delhost/d" /etc/hosts
						  send_stats "تجزیه و حذف میزبان محلی"
						  ;;
					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done
			  ;;

		  22)
		  root_use
		  send_stats "دفاع SSH"
		  while true; do
			if [ -x "$(command -v fail2ban-client)" ] ; then
				clear
				remove fail2ban
				rm -rf /etc/fail2ban
			else
				clear
				docker_name="fail2ban"
				check_docker_app
				echo -e "برنامه دفاعی SSH$check_docker"
				echo "Fail2ban ابزاری SSH برای جلوگیری از نیروی بی رحمانه است"
				echo "معرفی رسمی وب سایت:${gh_proxy}github.com/fail2ban/fail2ban"
				echo "------------------------"
				echo "1. برنامه دفاع را نصب کنید"
				echo "------------------------"
				echo "2. مشاهده سوابق رهگیری SSH"
				echo "3. نظارت بر ورود به سیستم در زمان واقعی"
				echo "------------------------"
				echo "9. برنامه دفاعی را حذف کنید"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
				case $sub_choice in
					1)
						install_docker
						f2b_install_sshd

						cd ~
						f2b_status
						break_end
						;;
					2)
						echo "------------------------"
						f2b_sshd
						echo "------------------------"
						break_end
						;;
					3)
						tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log
						break
						;;
					9)
						docker rm -f fail2ban
						rm -rf /path/to/fail2ban
						echo "برنامه دفاعی Fail2ban حذف نشده است"
						;;
					*)
						break
						;;
				esac
			fi
		  done
			  ;;


		  23)
			root_use
			send_stats "عملکرد خاموش محدودیت فعلی"
			while true; do
				clear
				echo "عملکرد خاموش محدودیت فعلی"
				echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mc411j7qd؟t=0.1"
				echo "------------------------------------------------"
				echo "استفاده فعلی ترافیک ، راه اندازی مجدد محاسبه ترافیک سرور پاک می شود!"
				output_status
				echo "$output"

				# بررسی کنید که آیا پرونده Limiting_shut_down.sh وجود دارد
				if [ -f ~/Limiting_Shut_down.sh ]; then
					# مقدار آستانه_ gb را دریافت کنید
					local rx_threshold_gb=$(grep -oP 'rx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh)
					local tx_threshold_gb=$(grep -oP 'tx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh)
					echo -e "${gl_lv}آستانه محدودیت جریان ورودی جریان فعلی: این است:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}"
					echo -e "${gl_lv}آستانه محدودیت جریان خروجی فعلی:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}"
				else
					echo -e "${gl_hui}عملکرد خاموش محدود فعلی فعال نیست${gl_bai}"
				fi

				echo
				echo "------------------------------------------------"
				echo "این سیستم تشخیص می دهد که آیا ترافیک واقعی هر دقیقه به آستانه می رسد و سرور پس از رسیدن به طور خودکار خاموش می شود!"
				echo "------------------------"
				echo "1. عملکرد خاموش کردن محدودیت فعلی را روشن کنید. عملکرد خاموش کردن محدودیت فعلی را غیرفعال کنید"
				echo "------------------------"
				echo "0. به منوی قبلی برگردید"
				echo "------------------------"
				read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting

				case "$Limiting" in
				  1)
					# اندازه حافظه مجازی جدید را وارد کنید
					echo "اگر سرور واقعی دارای 100 گرم ترافیک باشد ، می توان آستانه را روی 95 گرم تنظیم کرده و از قبل برق را خاموش کرد تا از خطاهای ترافیکی یا سرریز جلوگیری شود."
					read -e -p "لطفاً آستانه ترافیک دریافتی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" rx_threshold_gb
					rx_threshold_gb=${rx_threshold_gb:-100}
					read -e -p "لطفاً آستانه ترافیک برون مرزی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" tx_threshold_gb
					tx_threshold_gb=${tx_threshold_gb:-100}
					read -e -p "لطفاً تاریخ تنظیم مجدد ترافیک را وارد کنید (تنظیم مجدد پیش فرض در اول هر ماه):" cz_day
					cz_day=${cz_day:-1}

					cd ~
					curl -Ss -o ~/Limiting_Shut_down.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/Limiting_Shut_down1.sh
					chmod +x ~/Limiting_Shut_down.sh
					sed -i "s/110/$rx_threshold_gb/g" ~/Limiting_Shut_down.sh
					sed -i "s/120/$tx_threshold_gb/g" ~/Limiting_Shut_down.sh
					check_crontab_installed
					crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
					(crontab -l ; echo "* * * * * ~/Limiting_Shut_down.sh") | crontab - > /dev/null 2>&1
					crontab -l | grep -v 'reboot' | crontab -
					(crontab -l ; echo "0 1 $cz_day * * reboot") | crontab - > /dev/null 2>&1
					echo "خاموش کردن محدودیت فعلی تنظیم شده است"
					send_stats "خاموش کردن محدودیت فعلی تنظیم شده است"
					;;
				  2)
					check_crontab_installed
					crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
					crontab -l | grep -v 'reboot' | crontab -
					rm ~/Limiting_Shut_down.sh
					echo "عملکرد خاموش کردن محدودیت فعلی خاموش شده است"
					;;
				  *)
					break
					;;
				esac
			done
			  ;;


		  24)

			  root_use
			  send_stats "ورود به سیستم خصوصی"
			  while true; do
				  clear
			  	  echo "حالت ورود به سیستم کلید خصوصی"
			  	  echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1q4421x78n؟t=209.4"
			  	  echo "------------------------------------------------"
			  	  echo "یک جفت کلیدی تولید می شود ، یک روش امن تر برای ورود به سیستم SSH"
				  echo "------------------------"
				  echo "1. یک کلید جدید را تولید کنید. یک کلید موجود را وارد کنید 3. کلید بومی را مشاهده کنید"
				  echo "------------------------"
				  echo "0. به منوی قبلی برگردید"
				  echo "------------------------"
				  read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns

				  case $host_dns in
					  1)
				  		send_stats "یک کلید جدید ایجاد کنید"
				  		add_sshkey
						break_end

						  ;;
					  2)
						send_stats "یک کلید عمومی موجود را وارد کنید"
						import_sshkey
						break_end

						  ;;
					  3)
						send_stats "کلید مخفی محلی را مشاهده کنید"
						echo "------------------------"
						echo "اطلاعات کلیدی عمومی"
						cat ~/.ssh/authorized_keys
						echo "------------------------"
						echo "اطلاعات کلید خصوصی"
						cat ~/.ssh/sshkey
						echo "------------------------"
						break_end

						  ;;
					  *)
						  break  # 跳出循环，退出菜单
						  ;;
				  esac
			  done

			  ;;

		  25)
			  root_use
			  send_stats "هشدار تلگرام"
			  echo "نظارت بر TG-BOT و عملکرد هشدار زودهنگام"
			  echo "مقدمه ویدیویی: https://youtu.be/vll-eb3z_ty"
			  echo "------------------------------------------------"
			  echo "برای دریافت هشدارهای اولیه برای تحقق نظارت بر زمان واقعی و هشدار زودهنگام CPU ، حافظه ، هارد دیسک ، ترافیک و ورود به سیستم SSH ، باید API TG Robot و ID کاربر را پیکربندی کنید."
			  echo "پس از رسیدن به آستانه ، کاربر به کاربر ارسال می شود"
			  echo -e "${gl_hui}- در مورد ترافیک ، راه اندازی مجدد سرور دوباره محاسبه می شود-${gl_bai}"
			  read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice

			  case "$choice" in
				[Yy])
				  send_stats "هشدار تلگرام فعال است"
				  cd ~
				  install nano tmux bc jq
				  check_crontab_installed
				  if [ -f ~/TG-check-notify.sh ]; then
					  chmod +x ~/TG-check-notify.sh
					  nano ~/TG-check-notify.sh
				  else
					  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-check-notify.sh
					  chmod +x ~/TG-check-notify.sh
					  nano ~/TG-check-notify.sh
				  fi
				  tmux kill-session -t TG-check-notify > /dev/null 2>&1
				  tmux new -d -s TG-check-notify "~/TG-check-notify.sh"
				  crontab -l | grep -v '~/TG-check-notify.sh' | crontab - > /dev/null 2>&1
				  (crontab -l ; echo "@reboot tmux new -d -s TG-check-notify '~/TG-check-notify.sh'") | crontab - > /dev/null 2>&1

				  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-SSH-check-notify.sh > /dev/null 2>&1
				  sed -i "3i$(grep '^TELEGRAM_BOT_TOKEN=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh > /dev/null 2>&1
				  sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh
				  chmod +x ~/TG-SSH-check-notify.sh

				  # به پرونده ~/.profile اضافه کنید
				  if ! grep -q 'bash ~/TG-SSH-check-notify.sh' ~/.profile > /dev/null 2>&1; then
					  echo 'bash ~/TG-SSH-check-notify.sh' >> ~/.profile
					  if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
						 echo 'source ~/.profile' >> ~/.bashrc
					  fi
				  fi

				  source ~/.profile

				  clear
				  echo "سیستم هشدار زودهنگام TG-BOT آغاز شده است"
				  echo -e "${gl_hui}You can also place the TG-check-notify.sh warning file in the root directory on other machines and use it directly!${gl_bai}"
				  ;;
				[Nn])
				  echo "لغو شده"
				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac
			  ;;

		  26)
			  root_use
			  send_stats "آسیب پذیری های پرخطر را در SSH رفع کنید"
			  cd ~
			  curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh
			  chmod +x ~/upgrade_openssh9.8p1.sh
			  ~/upgrade_openssh9.8p1.sh
			  rm -f ~/upgrade_openssh9.8p1.sh
			  ;;

		  27)
			  elrepo
			  ;;
		  28)
			  Kernel_optimize
			  ;;

		  29)
			  clamav
			  ;;

		  30)
			  linux_file
			  ;;

		  31)
			  linux_language
			  ;;

		  32)
			  shell_bianse
			  ;;
		  33)
			  linux_trash
			  ;;
		  34)
			  linux_backup
			  ;;
		  35)
			  ssh_manager
			  ;;
		  36)
			  disk_manager
			  ;;
		  37)
			  clear
			  send_stats "تاریخ خط فرمان"
			  get_history_file() {
				  for file in "$HOME"/.bash_history "$HOME"/.ash_history "$HOME"/.zsh_history "$HOME"/.local/share/fish/fish_history; do
					  [ -f "$file" ] && { echo "$file"; return; }
				  done
				  return 1
			  }

			  history_file=$(get_history_file) && cat -n "$history_file"
			  ;;

		  38)
			  rsync_manager
			  ;;


		  41)
			clear
			send_stats "صفحه پیام"
			echo "صفحه پیام Lion Technology به جامعه رسمی منتقل شده است! لطفاً پیامی را در جامعه رسمی بگذارید!"
			echo "https://bbs.kejilion.pro/"
			  ;;

		  66)

			  root_use
			  send_stats "تنظیم یک مرحله"
			  echo "بهینه سازی سیستم یک مرحله ای"
			  echo "------------------------------------------------"
			  echo "موارد زیر اداره و بهینه می شود"
			  echo "1. سیستم را به جدیدترین به روز کنید"
			  echo "2. پرونده های ناخواسته سیستم را تمیز کنید"
			  echo -e "3. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}"
			  echo -e "4. شماره پورت SSH را روی آن تنظیم کنید${gl_huang}5522${gl_bai}"
			  echo -e "5. همه درگاه ها را باز کنید"
			  echo -e "6. روشن کنید${gl_huang}BBR${gl_bai}تسریع کردن"
			  echo -e "7. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}"
			  echo -e "8. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}خارج از کشور: 1.1.1.1 8.8.8.8 داخلی: 223.5.5.5${gl_bai}"
			  echo -e "9. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}"
			  echo -e "10. بهینه سازی پارامتر هسته در سیستم لینوکس را تغییر دهید${gl_huang}حالت بهینه سازی متعادل${gl_bai}"
			  echo "------------------------------------------------"
			  read -e -p "آیا مطمئناً تعمیر و نگهداری یک کلیک دارید؟ (y/n):" choice

			  case "$choice" in
				[Yy])
				  clear
				  send_stats "شروع تنظیم یک مرحله ای"
				  echo "------------------------------------------------"
				  linux_update
				  echo -e "[${gl_lv}OK${gl_bai}] 1/10. سیستم را به آخرین به روز کنید"

				  echo "------------------------------------------------"
				  linux_clean
				  echo -e "[${gl_lv}OK${gl_bai}] 2/10. پرونده های ناخواسته سیستم را تمیز کنید"

				  echo "------------------------------------------------"
				  add_swap 1024
				  echo -e "[${gl_lv}OK${gl_bai}] 3/10. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}"

				  echo "------------------------------------------------"
				  local new_port=5522
				  new_ssh_port
				  echo -e "[${gl_lv}OK${gl_bai}] 4/10. شماره پورت SSH را روی تنظیم کنید${gl_huang}5522${gl_bai}"
				  echo "------------------------------------------------"
				  echo -e "[${gl_lv}OK${gl_bai}] 5/10. همه بنادر را باز کنید"

				  echo "------------------------------------------------"
				  bbr_on
				  echo -e "[${gl_lv}OK${gl_bai}] 6/10. باز${gl_huang}BBR${gl_bai}تسریع کردن"

				  echo "------------------------------------------------"
				  set_timedate Asia/Shanghai
				  echo -e "[${gl_lv}OK${gl_bai}] 7/10. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}"

				  echo "------------------------------------------------"
				  local country=$(curl -s ipinfo.io/country)
				  if [ "$country" = "CN" ]; then
					 local dns1_ipv4="223.5.5.5"
					 local dns2_ipv4="183.60.83.19"
					 local dns1_ipv6="2400:3200::1"
					 local dns2_ipv6="2400:da00::6666"
				  else
					 local dns1_ipv4="1.1.1.1"
					 local dns2_ipv4="8.8.8.8"
					 local dns1_ipv6="2606:4700:4700::1111"
					 local dns2_ipv6="2001:4860:4860::8888"
				  fi

				  set_dns
				  echo -e "[${gl_lv}OK${gl_bai}] 8/10. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}${gl_bai}"

				  echo "------------------------------------------------"
				  install_docker
				  install wget sudo tar unzip socat btop nano vim
				  echo -e "[${gl_lv}OK${gl_bai}] 9/10. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}"
				  echo "------------------------------------------------"

				  echo "------------------------------------------------"
				  optimize_balanced
				  echo -e "[${gl_lv}OK${gl_bai}] 10/10. بهینه سازی پارامترهای هسته برای سیستم لینوکس"
				  echo -e "${gl_lv}تنظیم سیستم یک مرحله ای به پایان رسیده است${gl_bai}"

				  ;;
				[Nn])
				  echo "لغو شده"
				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac

			  ;;

		  99)
			  clear
			  send_stats "سیستم را مجدداً راه اندازی کنید"
			  server_reboot
			  ;;
		  100)

			root_use
			while true; do
			  clear
			  if grep -q '^ENABLE_STATS="true"' /usr/local/bin/k > /dev/null 2>&1; then
			  	local status_message="${gl_lv}正在采集数据${gl_bai}"
			  elif grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then
			  	local status_message="${gl_hui}采集已关闭${gl_bai}"
			  else
			  	local status_message="无法确定的状态"
			  fi

			  echo "حریم خصوصی و امنیت"
			  echo "اسکریپت داده هایی را در مورد توابع کاربر جمع آوری می کند ، تجربه اسکریپت را بهینه می کند و عملکردهای سرگرم کننده و مفید تری ایجاد می کند."
			  echo "شماره نسخه اسکریپت ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکرد مورد استفاده را جمع آوری می کند."
			  echo "------------------------------------------------"
			  echo -e "وضعیت فعلی:$status_message"
			  echo "--------------------"
			  echo "1. مجموعه را روشن کنید"
			  echo "2. مجموعه را ببندید"
			  echo "--------------------"
			  echo "0. به منوی قبلی برگردید"
			  echo "--------------------"
			  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
			  case $sub_choice in
				  1)
					  cd ~
					  sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' /usr/local/bin/k
					  sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' ~/kejilion.sh
					  echo "مجموعه فعال شده است"
					  send_stats "جمع آوری حریم خصوصی و امنیت فعال شده است"
					  ;;
				  2)
					  cd ~
					  sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' /usr/local/bin/k
					  sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh
					  echo "مجموعه بسته"
					  send_stats "حریم خصوصی و امنیت برای جمع آوری بسته شده است"
					  ;;
				  *)
					  break
					  ;;
			  esac
			done
			  ;;

		  101)
			  clear
			  k_info
			  ;;

		  102)
			  clear
			  send_stats "حذف اسکریپت شیر ​​فناوری"
			  echo "حذف اسکریپت شیر ​​فناوری"
			  echo "------------------------------------------------"
			  echo "اسکریپت kejilion را کاملاً حذف کرده و بر عملکردهای دیگر شما تأثیر نمی گذارد"
			  read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice

			  case "$choice" in
				[Yy])
				  clear
				  (crontab -l | grep -v "kejilion.sh") | crontab -
				  rm -f /usr/local/bin/k
				  rm ~/kejilion.sh
				  echo "فیلمنامه حذف شده است ، خداحافظ!"
				  break_end
				  clear
				  exit
				  ;;
				[Nn])
				  echo "لغو شده"
				  ;;
				*)
				  echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
				  ;;
			  esac
			  ;;

		  0)
			  kejilion

			  ;;
		  *)
			  echo "ورودی نامعتبر!"
			  ;;
	  esac
	  break_end

	done



}






linux_file() {
	root_use
	send_stats "مدیر پرونده"
	while true; do
		clear
		echo "مدیر پرونده"
		echo "------------------------"
		echo "مسیر فعلی"
		pwd
		echo "------------------------"
		ls --color=auto -x
		echo "------------------------"
		echo "1. دایرکتوری را وارد کنید 2. دایرکتوری را ایجاد کنید. مجوزهای فهرست را تغییر دهید."
		echo "5. فهرست را حذف کنید 6. به فهرست منو قبلی برگردید"
		echo "------------------------"
		echo "11. یک پرونده 12 ایجاد کنید. یک پرونده را ویرایش کنید."
		echo "15. پرونده را حذف کنید"
		echo "------------------------"
		echo "21. دایرکتوری پرونده فشرده 22. فهرست پرونده unzip 23. فهرست پرونده های پرونده 24. کپی کردن دایرکتوری پرونده"
		echo "25. پرونده را به سرور دیگری منتقل کنید"
		echo "------------------------"
		echo "0. به منوی قبلی برگردید"
		echo "------------------------"
		read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting

		case "$Limiting" in
			1)  # 进入目录
				read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname
				cd "$dirname" 2>/dev/null || echo "ورود به دایرکتوری امکان پذیر نیست"
				send_stats "به دایرکتوری بروید"
				;;
			2)  # 创建目录
				read -e -p "لطفاً نام دایرکتوری را وارد کنید تا ایجاد کنید:" dirname
				mkdir -p "$dirname" && echo "دایرکتوری ایجاد شده است" || echo "آفرینش شکست خورد"
				send_stats "دایرکتوری ایجاد کنید"
				;;
			3)  # 修改目录权限
				read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname
				read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm
				chmod "$perm" "$dirname" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد"
				send_stats "مجوزهای فهرست را اصلاح کنید"
				;;
			4)  # 重命名目录
				read -e -p "لطفاً نام فهرست فعلی را وارد کنید:" current_name
				read -e -p "لطفاً نام دایرکتوری جدید را وارد کنید:" new_name
				mv "$current_name" "$new_name" && echo "دایرکتوری تغییر نام داده است" || echo "تغییر نام انجام نشد"
				send_stats "تغییر نام دایرکتوری"
				;;
			5)  # 删除目录
				read -e -p "لطفاً نام دایرکتوری را وارد کنید تا حذف شود:" dirname
				rm -rf "$dirname" && echo "فهرست حذف شده است" || echo "حذف انجام نشد"
				send_stats "فهرست را حذف کنید"
				;;
			6)  # 返回上一级选单目录
				cd ..
				send_stats "به فهرست منوی قبلی برگردید"
				;;
			11) # 创建文件
				read -e -p "لطفاً نام پرونده را برای ایجاد وارد کنید:" filename
				touch "$filename" && echo "پرونده ایجاد شده است" || echo "آفرینش شکست خورد"
				send_stats "یک فایل ایجاد کنید"
				;;
			12) # 编辑文件
				read -e -p "لطفاً نام پرونده را برای ویرایش وارد کنید:" filename
				install nano
				nano "$filename"
				send_stats "پرونده ها را ویرایش کنید"
				;;
			13) # 修改文件权限
				read -e -p "لطفاً نام پرونده را وارد کنید:" filename
				read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm
				chmod "$perm" "$filename" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد"
				send_stats "مجوزهای پرونده را اصلاح کنید"
				;;
			14) # 重命名文件
				read -e -p "لطفاً نام پرونده فعلی را وارد کنید:" current_name
				read -e -p "لطفاً یک نام پرونده جدید وارد کنید:" new_name
				mv "$current_name" "$new_name" && echo "پرونده تغییر نام داد" || echo "تغییر نام انجام نشد"
				send_stats "تغییر نام پرونده"
				;;
			15) # 删除文件
				read -e -p "لطفاً نام پرونده را وارد کنید تا حذف شود:" filename
				rm -f "$filename" && echo "پرونده حذف شده است" || echo "حذف انجام نشد"
				send_stats "پرونده ها را حذف کنید"
				;;
			21) # 压缩文件/目录
				read -e -p "لطفاً نام پرونده/دایرکتوری را وارد کنید تا فشرده شود:" name
				install tar
				tar -czvf "$name.tar.gz" "$name" && echo "فشرده به$name.tar.gz" || echo "فشرده سازی انجام نشد"
				send_stats "پرونده ها/دایرکتوری های فشرده شده"
				;;
			22) # 解压文件/目录
				read -e -p "لطفاً نام پرونده را وارد کنید (.tar.gz):" filename
				install tar
				tar -xzvf "$filename" && echo "فشرده شده$filename" || echo "رفع فشار انجام نشد"
				send_stats "پرونده ها/دایرکتوری ها"
				;;

			23) # 移动文件或目录
				read -e -p "لطفاً برای حرکت پرونده یا مسیر دایرکتوری را وارد کنید:" src_path
				if [ ! -e "$src_path" ]; then
					echo "خطا: پرونده یا فهرست وجود ندارد."
					send_stats "جابجایی پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد"
					continue
				fi

				read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path
				if [ -z "$dest_path" ]; then
					echo "خطا: لطفاً مسیر هدف را وارد کنید."
					send_stats "فایل یا فهرست جابجایی انجام نشد: مسیر مقصد مشخص نشده است"
					continue
				fi

				mv "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری به$dest_path" || echo "جابجایی پرونده ها یا دایرکتوری ها انجام نشد"
				send_stats "جابجایی پرونده ها یا دایرکتوری ها"
				;;


		   24) # 复制文件目录
				read -e -p "لطفاً برای کپی کردن پرونده یا مسیر دایرکتوری را وارد کنید:" src_path
				if [ ! -e "$src_path" ]; then
					echo "خطا: پرونده یا فهرست وجود ندارد."
					send_stats "کپی کردن یک پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد"
					continue
				fi

				read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path
				if [ -z "$dest_path" ]; then
					echo "خطا: لطفاً مسیر هدف را وارد کنید."
					send_stats "کپی کردن پرونده یا دایرکتوری انجام نشد: مسیر مقصد مشخص نشده است"
					continue
				fi

				# از گزینه -r برای کپی مجدد دایرکتوری استفاده کنید
				cp -r "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری در آن کپی شده است$dest_path" || echo "کپی کردن یک پرونده یا فهرست انجام نشد"
				send_stats "کپی کردن پرونده ها یا دایرکتوری ها"
				;;


			 25) # 传送文件至远端服务器
				read -e -p "لطفاً مسیر فایل را برای انتقال وارد کنید:" file_to_transfer
				if [ ! -f "$file_to_transfer" ]; then
					echo "خطا: پرونده وجود ندارد."
					send_stats "انتقال پرونده انجام نشد: پرونده وجود ندارد"
					continue
				fi

				read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip
				if [ -z "$remote_ip" ]; then
					echo "خطا: لطفاً IP از راه دور سرور را وارد کنید."
					send_stats "انتقال پرونده انجام نشد: IP از راه دور سرور وارد نشده است"
					continue
				fi

				read -e -p "لطفاً نام کاربری سرور از راه دور (ریشه پیش فرض) را وارد کنید:" remote_user
				remote_user=${remote_user:-root}

				read -e -p "لطفاً رمز عبور سرور از راه دور را وارد کنید:" -s remote_password
				echo
				if [ -z "$remote_password" ]; then
					echo "خطا: لطفاً رمز عبور سرور از راه دور را وارد کنید."
					send_stats "انتقال پرونده انجام نشد: رمز عبور سرور از راه دور وارد نشده است"
					continue
				fi

				read -e -p "لطفاً درگاه ورود را وارد کنید (پیش فرض 22):" remote_port
				remote_port=${remote_port:-22}

				# ورودی های قدیمی را برای میزبان های شناخته شده پاک کنید
				ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip"
				sleep 2  # 等待时间

				# انتقال پرونده ها با استفاده از SCP
				scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" <<EOF
$remote_password
EOF

				if [ $? -eq 0 ]; then
					echo "این پرونده به دایرکتوری خانه از راه دور سرور منتقل شده است."
					send_stats "انتقال پرونده با موفقیت"
				else
					echo "انتقال پرونده انجام نشد."
					send_stats "انتقال پرونده انجام نشد"
				fi

				break_end
				;;



			0)  # 返回上一级选单
				send_stats "به منوی منوی قبلی برگردید"
				break
				;;
			*)  # 处理无效输入
				echo "انتخاب نامعتبر ، لطفا دوباره وارد شوید"
				send_stats "انتخاب نامعتبر"
				;;
		esac
	done
}






cluster_python3() {
	install python3 python3-paramiko
	cd ~/cluster/
	curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/python-for-vps/main/cluster/$py_task
	python3 ~/cluster/$py_task
}


run_commands_on_servers() {

	install sshpass

	local SERVERS_FILE="$HOME/cluster/servers.py"
	local SERVERS=$(grep -oP '{"name": "\K[^"]+|"hostname": "\K[^"]+|"port": \K[^,]+|"username": "\K[^"]+|"password": "\K[^"]+' "$SERVERS_FILE")

	# تبدیل اطلاعات استخراج شده به یک آرایه
	IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS"

	# از طریق سرور تکرار کنید و دستورات را اجرا کنید
	for ((i=0; i<${#SERVER_ARRAY[@]}; i+=5)); do
		local name=${SERVER_ARRAY[i]}
		local hostname=${SERVER_ARRAY[i+1]}
		local port=${SERVER_ARRAY[i+2]}
		local username=${SERVER_ARRAY[i+3]}
		local password=${SERVER_ARRAY[i+4]}
		echo
		echo -e "${gl_huang}وصل کردن به$name ($hostname)...${gl_bai}"
		# sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1"
		sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1"
	done
	echo
	break_end

}


linux_cluster() {
mkdir cluster
if [ ! -f ~/cluster/servers.py ]; then
	cat > ~/cluster/servers.py << EOF
servers = [

]
EOF
fi

while true; do
	  clear
	  send_stats "مرکز کنترل خوشه"
	  echo "کنترل خوشه سرور"
	  cat ~/cluster/servers.py
	  echo
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  echo -e "${gl_kjlan}مدیریت لیست سرور${gl_bai}"
	  echo -e "${gl_kjlan}1.  ${gl_bai}یک سرور اضافه کنید${gl_kjlan}2.  ${gl_bai}سرور را حذف کنید${gl_kjlan}3.  ${gl_bai}ویرایش سرور"
	  echo -e "${gl_kjlan}4.  ${gl_bai}خوشه${gl_kjlan}5.  ${gl_bai}بازگرداندن خوشه"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  echo -e "${gl_kjlan}وظایف را در دسته ها انجام دهید${gl_bai}"
	  echo -e "${gl_kjlan}11. ${gl_bai}اسکریپت شیر ​​فنی را نصب کنید${gl_kjlan}12. ${gl_bai}سیستم را به روز کنید${gl_kjlan}13. ${gl_bai}سیستم را تمیز کنید"
	  echo -e "${gl_kjlan}14. ${gl_bai}داکر را نصب کنید${gl_kjlan}15. ${gl_bai}BBR3 را نصب کنید${gl_kjlan}16. ${gl_bai}حافظه مجازی 1G را تنظیم کنید"
	  echo -e "${gl_kjlan}17. ${gl_bai}منطقه زمانی را به شانگهای تنظیم کنید${gl_kjlan}18. ${gl_bai}همه بنادر را باز کنید${gl_kjlan}51. ${gl_bai}دستورات سفارشی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  echo -e "${gl_kjlan}0.  ${gl_bai}بازگشت به منوی اصلی"
	  echo -e "${gl_kjlan}------------------------${gl_bai}"
	  read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice

	  case $sub_choice in
		  1)
			  send_stats "یک سرور خوشه اضافه کنید"
			  read -e -p "نام سرور:" server_name
			  read -e -p "IP سرور:" server_ip
			  read -e -p "درگاه سرور (22):" server_port
			  local server_port=${server_port:-22}
			  read -e -p "نام کاربری سرور (ریشه):" server_username
			  local server_username=${server_username:-root}
			  read -e -p "رمز عبور کاربر سرور:" server_password

			  sed -i "/servers = \[/a\    {\"name\": \"$server_name\", \"hostname\": \"$server_ip\", \"port\": $server_port, \"username\": \"$server_username\", \"password\": \"$server_password\", \"remote_path\": \"/home/\"}," ~/cluster/servers.py

			  ;;
		  2)
			  send_stats "سرور خوشه را حذف کنید"
			  read -e -p "لطفاً کلمات کلیدی مورد نیاز برای حذف را وارد کنید:" rmserver
			  sed -i "/$rmserver/d" ~/cluster/servers.py
			  ;;
		  3)
			  send_stats "سرور خوشه را ویرایش کنید"
			  install nano
			  nano ~/cluster/servers.py
			  ;;

		  4)
			  clear
			  send_stats "خوشه"
			  echo -e "لطفا${gl_huang}/root/cluster/servers.py${gl_bai}فایل را بارگیری کنید و نسخه پشتیبان تهیه کنید!"
			  break_end
			  ;;

		  5)
			  clear
			  send_stats "بازگرداندن خوشه"
			  echo "لطفاً Servers.py خود را بارگذاری کرده و برای شروع بارگذاری ، هر کلید را فشار دهید!"
			  echo -e "لطفا خود را بارگذاری کنید${gl_huang}servers.py${gl_bai}پرونده به${gl_huang}/root/cluster/${gl_bai}بازیابی را کامل کنید!"
			  break_end
			  ;;

		  11)
			  local py_task="install_kejilion.py"
			  cluster_python3
			  ;;
		  12)
			  run_commands_on_servers "k update"
			  ;;
		  13)
			  run_commands_on_servers "k clean"
			  ;;
		  14)
			  run_commands_on_servers "k docker install"
			  ;;
		  15)
			  run_commands_on_servers "k bbr3"
			  ;;
		  16)
			  run_commands_on_servers "k swap 1024"
			  ;;
		  17)
			  run_commands_on_servers "k time Asia/Shanghai"
			  ;;
		  18)
			  run_commands_on_servers "k iptables_open"
			  ;;

		  51)
			  send_stats "اجرای دستورات را سفارشی کنید"
			  read -e -p "لطفاً دستور اجرای دسته را وارد کنید:" mingling
			  run_commands_on_servers "${mingling}"
			  ;;

		  *)
			  kejilion
			  ;;
	  esac
done

}




kejilion_Affiliates() {

clear
send_stats "ستون تبلیغاتی"
echo "ستون تبلیغاتی"
echo "------------------------"
echo "این یک تجربه تبلیغی و خرید ساده تر و زیبا تر را در اختیار کاربران قرار می دهد!"
echo ""
echo -e "پیشنهادات سرور"
echo "------------------------"
echo -e "${gl_lan}Leica Cloud Hong Kong CN2 GIA کره جنوبی دوتایی ISP US CN2 GIA تخفیف${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.lcayun.com/aff/zexuqbim${gl_bai}"
echo "------------------------"
echo -e "${gl_lan}Racknerd 10.99 دلار در سال ایالات متحده 1 هسته اصلی 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://my.racknerd.com/aff.php؟aff=5501&pid=879${gl_bai}"
echo "------------------------"
echo -e "${gl_zi}Hostinger 52.7 دلار در سال ایالات متحده 1 Core 4g Memory 50G هارد 4T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f؟_ga=GA1.3.942352702.1711283207${gl_bai}"
echo "------------------------"
echo -e "${gl_huang}آجر کننده ، 49 دلار در هر سه ماهه ، CN2GIA ایالات متحده ، ژاپن Softbank ، 2 هسته ، حافظه 1 گرم ، هارد 20 گرم ، ترافیک 1T در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://bandwagonhost.com/aff.php؟aff=69004&pid=87${gl_bai}"
echo "------------------------"
echo -e "${gl_lan}DMIT 28 دلار در هر سه ماهه CN2GIA 1 CORE 2G حافظه 20G هارد 800 گرم ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.dmit.io/aff.php؟aff=4966&pid=100${gl_bai}"
echo "------------------------"
echo -e "${gl_zi}V.PS 6.9 دلار در هر ماه توکیو SoftBank 2 هسته 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://vps.hosting/cart/tokyo-cloud-kvm-vps/؟id=148&؟affid=1355&؟affid=1355${gl_bai}"
echo "------------------------"
echo -e "${gl_kjlan}پیشنهادات VPS محبوب تر${gl_bai}"
echo -e "${gl_bai}وب سایت: https://kejilion.pro/topvps/${gl_bai}"
echo "------------------------"
echo ""
echo -e "تخفیف نام دامنه"
echo "------------------------"
echo -e "${gl_lan}GNAME 8.8 دلار نام دامنه COM سال اول 6.68 دلار نام دامنه CC سال اول${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.gname.com/register؟tt=86836&ttcode=kejilion86836&ttbj=sh${gl_bai}"
echo "------------------------"
echo ""
echo -e "شیر فناوری اطراف"
echo "------------------------"
echo -e "${gl_kjlan}ایستگاه ب:${gl_bai}https://b23.tv/2mqnQyh              ${gl_kjlan}لوله روغن:${gl_bai}https://www.youtube.com/@kejilion${gl_bai}"
echo -e "${gl_kjlan}وب سایت رسمی:${gl_bai}https://kejilion.pro/               ${gl_kjlan}ناوبری:${gl_bai}https://dh.kejilion.pro/${gl_bai}"
echo -e "${gl_kjlan}وبلاگ:${gl_bai}https://blog.kejilion.pro/          ${gl_kjlan}مرکز نرم افزار:${gl_bai}https://app.kejilion.pro/${gl_bai}"
echo "------------------------"
echo ""
}





kejilion_update() {

send_stats "به روزرسانی اسکریپت"
cd ~
while true; do
	clear
	echo "گزارش به روزرسانی"
	echo "------------------------"
	echo "همه گزارش ها:${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt"
	echo "------------------------"

	curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt | tail -n 30
	local sh_v_new=$(curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh | grep -o 'sh_v="[0-9.]*"' | cut -d '"' -f 2)

	if [ "$sh_v" = "$sh_v_new" ]; then
		echo -e "${gl_lv}شما در حال حاضر آخرین نسخه هستید!${gl_huang}v$sh_v${gl_bai}"
		send_stats "اسکریپت به روز است و به روزرسانی لازم نیست"
	else
		echo "نسخه جدیدی را کشف کنید!"
		echo -e "نسخه فعلی V$sh_vآخرین نسخه${gl_huang}v$sh_v_new${gl_bai}"
	fi


	local cron_job="kejilion.sh"
	local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job")

	if [ -n "$existing_cron" ]; then
		echo "------------------------"
		echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}"
	fi

	echo "------------------------"
	echo "1. به روز کنید اکنون 2. بروزرسانی خودکار را روشن کنید. به روزرسانی خودکار را خاموش کنید"
	echo "------------------------"
	echo "0. به منوی اصلی برگردید"
	echo "------------------------"
	read -e -p "لطفا انتخاب خود را وارد کنید:" choice
	case "$choice" in
		1)
			clear
			local country=$(curl -s ipinfo.io/country)
			if [ "$country" = "CN" ]; then
				curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/cn/kejilion.sh && chmod +x kejilion.sh
			else
				curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh
			fi
			canshu_v6
			CheckFirstRun_true
			yinsiyuanquan2
			cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1
			echo -e "${gl_lv}اسکریپت به آخرین نسخه به روز شده است!${gl_huang}v$sh_v_new${gl_bai}"
			send_stats "فیلمنامه به روز است$sh_v_new"
			break_end
			~/kejilion.sh
			exit
			;;
		2)
			clear
			local country=$(curl -s ipinfo.io/country)
			local ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb)
			if [ "$country" = "CN" ]; then
				SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"CN\"/g' ./kejilion.sh"
			elif [ -n "$ipv6_address" ]; then
				SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"V6\"/g' ./kejilion.sh"
			else
				SH_Update_task="curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh"
			fi
			check_crontab_installed
			(crontab -l | grep -v "kejilion.sh") | crontab -
			# (crontab -l 2>/dev/null; echo "0 2 * * * bash -c \"$SH_Update_task\"") | crontab -
			(crontab -l 2>/dev/null; echo "$(shuf -i 0-59 -n 1) 2 * * * bash -c \"$SH_Update_task\"") | crontab -
			echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}"
			send_stats "بروزرسانی خودکار اسکریپت را روشن کنید"
			break_end
			;;
		3)
			clear
			(crontab -l | grep -v "kejilion.sh") | crontab -
			echo -e "${gl_lv}به روزرسانی خودکار بسته است${gl_bai}"
			send_stats "به روزرسانی خودکار اسکریپت را ببندید"
			break_end
			;;
		*)
			kejilion_sh
			;;
	esac
done

}





kejilion_sh() {
while true; do
clear
echo -e "${gl_kjlan}"
echo "╦╔═╔═╗ ╦╦╦  ╦╔═╗╔╗╔ ╔═╗╦ ╦"
echo "╠╩╗║╣  ║║║  ║║ ║║║║ ╚═╗╠═╣"
echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩"
echo -e "جعبه ابزار Script Lion Technology V$sh_v"
echo -e "ورودی خط فرمان${gl_huang}k${gl_kjlan}سریع اسکریپت ها را شروع کنید${gl_bai}"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}1.   ${gl_bai}پرس و جو اطلاعاتی سیستم"
echo -e "${gl_kjlan}2.   ${gl_bai}بروزرسانی سیستم"
echo -e "${gl_kjlan}3.   ${gl_bai}پاکسازی سیستم"
echo -e "${gl_kjlan}4.   ${gl_bai}ابزارهای اساسی"
echo -e "${gl_kjlan}5.   ${gl_bai}مدیریت BBR"
echo -e "${gl_kjlan}6.   ${gl_bai}مدیریت داکر"
echo -e "${gl_kjlan}7.   ${gl_bai}مدیریت پیچ و خم"
echo -e "${gl_kjlan}8.   ${gl_bai}مجموعه اسکریپت تست"
echo -e "${gl_kjlan}9.   ${gl_bai}مجموعه اسکریپت Oracle Cloud"
echo -e "${gl_huang}10.  ${gl_bai}ساختمان وب سایت LDNMP"
echo -e "${gl_kjlan}11.  ${gl_bai}بازار کاربرد"
echo -e "${gl_kjlan}12.  ${gl_bai}فضای کاری من"
echo -e "${gl_kjlan}13.  ${gl_bai}ابزار سیستم"
echo -e "${gl_kjlan}14.  ${gl_bai}کنترل خوشه سرور"
echo -e "${gl_kjlan}15.  ${gl_bai}ستون تبلیغاتی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}p.   ${gl_bai}اسکریپت افتتاح سرور Palu Palu Phantom Beast"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}00.  ${gl_bai}به روزرسانی اسکریپت"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}0.   ${gl_bai}اسکریپت خروجی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice

case $choice in
  1) linux_ps ;;
  2) clear ; send_stats "بروزرسانی سیستم" ; linux_update ;;
  3) clear ; send_stats "پاکسازی سیستم" ; linux_clean ;;
  4) linux_tools ;;
  5) linux_bbr ;;
  6) linux_docker ;;
  7) clear ; send_stats "مدیریت پیچ و خم" ; install wget
	wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token]
	;;
  8) linux_test ;;
  9) linux_Oracle ;;
  10) linux_ldnmp ;;
  11) linux_panel ;;
  12) linux_work ;;
  13) linux_Settings ;;
  14) linux_cluster ;;
  15) kejilion_Affiliates ;;
  p) send_stats "اسکریپت افتتاح سرور Palu Palu Phantom Beast" ; cd ~
	 curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh
	 exit
	 ;;
  00) kejilion_update ;;
  0) clear ; exit ;;
  *) echo "ورودی نامعتبر!" ;;
esac
	break_end
done
}


k_info() {
send_stats "k مورد استفاده مرجع فرمان"
echo "-------------------"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1ib421e7it؟t=0.1"
echo "موارد زیر مورد استفاده مرجع فرمان K است:"
echo "شروع اسکریپت k"
echo "نصب بسته نرم افزاری k نصب nano wget | k اضافه کردن نانو wget | k نصب نانو wget"
echo "بسته بندی k حذف nano wget | K Del Nano Wget | k حذف نانو wget | k حذف نانو wget"
echo "به روزرسانی سیستم K به روزرسانی | k به روزرسانی"
echo "زباله های سیستم تمیز K Clean | k تمیز"
echo "نصب مجدد صفحه سیستم k dd | k نصب مجدد"
echo "کنترل پنل BBR3 K BBR3 | k bbrv3"
echo "پنل تنظیم هسته K NHYH | بهینه سازی هسته"
echo "تنظیم حافظه مجازی k مبادله 2048"
echo "تنظیم منطقه زمانی مجازی k زمان آسیا/شانگهای | k منطقه زمانی آسیا/شانگهای"
echo "سطل زباله بازیافت سیستم | K HSZ | سطل بازیافت k"
echo "عملکرد پشتیبان گیری از سیستم K Backup | k bf | پشتیبان گیری K"
echo "ابزار اتصال از راه دور SSH K SSH | k اتصال از راه دور"
echo "ابزار همگام سازی از راه دور RSYNC K RSYNC | k هماهنگ سازی از راه دور"
echo "ابزار مدیریت دیسک سخت دیسک k | مدیریت دیسک سخت"
echo "نفوذ Intranet (سمت سرور) K FRPS"
echo "نفوذ Intranet (مشتری) K FRPC"
echo "نرم افزار شروع K شروع SSHD | k شروع SSHD"
echo "نرم افزار STOP K STOP SSHD | k متوقف SSHD"
echo "راه اندازی مجدد نرم افزار K Restart SSHD | k راه اندازی مجدد SSHD"
echo "مشاهده وضعیت نرم افزار وضعیت K SSHD | K وضعیت SSHD"
echo "نرم افزار بوت K فعال کردن Docker | k autostart docke | k Docker Startup"
echo "گواهی نام دامنه برنامه K SSL"
echo "نام دامنه گواهینامه انقضاء k ssl ps"
echo "نصب محیط Docker نصب K Docker | K Docker نصب"
echo "Docker Container Management K Docker PS | K Docker Container"
echo "docker镜像管理      k docker img |k docker 镜像"
echo "مدیریت سایت LDNMP K وب"
echo "پاک کردن حافظه پنهان LDNMP k حافظه نهان"
echo "نصب وردپرس k wp | k وردپرس | k wp xxx.com"
echo "پروکسی معکوس k fd | k rp | k anti-generation | k fd xxx.com"
echo "نصب بار تعادل K LoadBalance | K متعادل کننده بار"
echo "صفحه فایروال K FHQ | K فایروال"
echo "Open Port K DKDK 8080 | K درگاه باز 8080"
echo "بستن بندر K GBDK 7800 | K نزدیک بندر 7800"
echo "انتشار IP K fxip 127.0.0.0/8 | k نسخه IP 127.0.0.0/8"
echo "Block IP K Zzip 177.5.25.36 | K بلوک IP 177.5.25.36"


}



if [ "$#" -eq 0 ]; then
	# اگر پارامتری وجود ندارد ، منطق تعاملی را اجرا کنید
	kejilion_sh
else
	# اگر پارامترهایی وجود دارد ، عملکرد مربوطه را اجرا کنید
	case $1 in
		install|add|安装)
			shift
			send_stats "نصب نرم افزار"
			install "$@"
			;;
		remove|del|uninstall|卸载)
			shift
			send_stats "نرم افزار را حذف نصب کنید"
			remove "$@"
			;;
		update|更新)
			linux_update
			;;
		clean|清理)
			linux_clean
			;;
		dd|重装)
			dd_xitong
			;;
		bbr3|bbrv3)
			bbrv3
			;;
		nhyh|内核优化)
			Kernel_optimize
			;;
		trash|hsz|回收站)
			linux_trash
			;;
		backup|bf|备份)
			linux_backup
			;;
		ssh|远程连接)
			ssh_manager
			;;

		rsync|远程同步)
			rsync_manager
			;;

		rsync_run)
			shift
			send_stats "همگام سازی RSYNC به موقع"
			run_task "$@"
			;;

		disk|硬盘管理)
			disk_manager
			;;

		wp|wordpress)
			shift
			ldnmp_wp "$@"

			;;
		fd|rp|反代)
			shift
			ldnmp_Proxy "$@"
			;;

		loadbalance|负载均衡)
			ldnmp_Proxy_backend
			;;

		swap)
			shift
			send_stats "به سرعت حافظه مجازی را تنظیم کنید"
			add_swap "$@"
			;;

		time|时区)
			shift
			send_stats "به سرعت منطقه زمانی را تنظیم کنید"
			set_timedate "$@"
			;;


		iptables_open)
			iptables_open
			;;

		frps)
			frps_panel
			;;

		frpc)
			frpc_panel
			;;


		打开端口|dkdk)
			shift
			open_port "$@"
			;;

		关闭端口|gbdk)
			shift
			close_port "$@"
			;;

		放行IP|fxip)
			shift
			allow_ip "$@"
			;;

		阻止IP|zzip)
			shift
			block_ip "$@"
			;;

		防火墙|fhq)
			iptables_panel
			;;

		status|状态)
			shift
			send_stats "نمای وضعیت نرم افزار"
			status "$@"
			;;
		start|启动)
			shift
			send_stats "راه اندازی نرم افزار"
			start "$@"
			;;
		stop|停止)
			shift
			send_stats "مکث نرم افزاری"
			stop "$@"
			;;
		restart|重启)
			shift
			send_stats "راه اندازی مجدد نرم افزار"
			restart "$@"
			;;

		enable|autostart|开机启动)
			shift
			send_stats "چکمه های نرم افزاری بالا"
			enable "$@"
			;;

		ssl)
			shift
			if [ "$1" = "ps" ]; then
				send_stats "وضعیت گواهی را بررسی کنید"
				ssl_ps
			elif [ -z "$1" ]; then
				add_ssl
				send_stats "به سرعت برای یک گواهی درخواست کنید"
			elif [ -n "$1" ]; then
				add_ssl "$1"
				send_stats "به سرعت برای یک گواهی درخواست کنید"
			else
				k_info
			fi
			;;

		docker)
			shift
			case $1 in
				install|安装)
					send_stats "داکر را به سرعت نصب کنید"
					install_docker
					;;
				ps|容器)
					send_stats "مدیریت سریع کانتینر"
					docker_ps
					;;
				img|镜像)
					send_stats "مدیریت سریع آینه"
					docker_image
					;;
				*)
					k_info
					;;
			esac
			;;

		web)
		   shift
			if [ "$1" = "cache" ]; then
				web_cache
			elif [ -z "$1" ]; then
				ldnmp_web_status
			else
				k_info
			fi
			;;
		*)
			k_info
			;;
	esac
fi
