├── config.py ├── scripts ├── variables.sh ├── del_cl.sh ├── backup.sh ├── restore.sh ├── enterface.sh ├── start_wg.sh └── add_cl.sh ├── requirements.txt ├── docker-compose.yml ├── README.md ├── rm_user.sh ├── Dockerfile └── main.py /config.py: -------------------------------------------------------------------------------- 1 | mainid = [] 2 | api_tg = "" 3 | -------------------------------------------------------------------------------- /scripts/variables.sh: -------------------------------------------------------------------------------- 1 | vap_ip_local=1 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pyTelegramBotAPI 2 | qrcode 3 | -------------------------------------------------------------------------------- /scripts/del_cl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ip=$1 4 | my_variable=$(grep -n "10.10.0.${ip}" /etc/wireguard/wg0.conf | cut -d ':' -f 1) 5 | 6 | sed -i "$(($my_variable-2)),$my_variable d" /etc/wireguard/wg0.conf 7 | #systemctl restart wg-quick@wg0 8 | wg-quick down wg0 9 | wg-quick up wg0 10 | 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | mytelegrambot: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | volumes: 8 | - /etc/wireguard:/etc/wireguard 9 | # environment: 10 | # VARIABLE_NAME: value 11 | network_mode: host 12 | ports: 13 | - 51830:51830/udp 14 | # sysctls: 15 | # - net.ipv4.conf.all.src_valid_mark=1 16 | privileged: true 17 | cap_add: 18 | - NET_ADMIN # Добавьте эту строку 19 | restart: always 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # wg_telegram 2 | Управляй своим Wireguard сервером через Telegram. 3 | Бот находится в разработке! 4 |
Данный проект направлен на упрощение развертывание инфраструктуры своей виртуальной приватной сети.
5 | 6 |
Перед заупском нужно доавить в файл config.py api телеграм и id пользователей у которых будет доступ к боту.
7 |
Id можно получить у бота @get_myidbot
mainid = [] 9 |
api_tg = ""
10 | 11 |
Запуск через python:
12 |
pip install --no-cache-dir -r requirements.txt
13 |
python3 main.py
14 | 15 |
Запуск через Docker:
16 |
docker compose up -d
17 | -------------------------------------------------------------------------------- /scripts/backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Путь к исходной директории 4 | SOURCE_DIR="/etc/wireguard/" 5 | 6 | # Получение пути к директории, в которой находится скрипт backup.sh 7 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 8 | 9 | # Путь и имя архива 10 | BACKUP_FILE="$SCRIPT_DIR/../reset/wg0_backup.zip" 11 | 12 | # Проверяем, существует ли архив 13 | if [[ -f "$BACKUP_FILE" ]]; then 14 | # Архив существует, удаляем его 15 | rm "$BACKUP_FILE" 16 | fi 17 | 18 | # Создаем новый архив 19 | zip -r "$BACKUP_FILE" "$SOURCE_DIR" 20 | 21 | # Переходим в директорию с исходными файлами перед добавлением дополнительных файлов 22 | cd "$SOURCE_DIR" 23 | 24 | # Добавляем файл cofigs.txt в архив без сохранения пути 25 | zip -j "$BACKUP_FILE" "$SCRIPT_DIR/../cofigs.txt" 26 | 27 | wg-quick down wg0 28 | wg-quick up wg0 29 | 30 | -------------------------------------------------------------------------------- /scripts/restore.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Получение пути к директории, в которой находится скрипт restore.sh 4 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 5 | 6 | # Путь и имя архива 7 | BACKUP_FILE="$SCRIPT_DIR/../reset/wg0_backup.zip" 8 | 9 | # Директория для распаковки 10 | DESTINATION_DIR="/etc/wireguard/" 11 | 12 | # Проверка наличия архива 13 | if [ ! -f "$BACKUP_FILE" ]; then 14 | echo "Архив $BACKUP_FILE не найден." 15 | exit 1 16 | fi 17 | 18 | # Удаляем все файлы из директории назначения 19 | rm -rf "$DESTINATION_DIR"/* 20 | 21 | # Переходим в директорию назначения 22 | cd "$DESTINATION_DIR" 23 | 24 | # Распаковываем архив 25 | unzip -j "$BACKUP_FILE" 26 | 27 | # Проверка наличия распакованного файла 28 | if [ ! -f "$DESTINATION_DIR/cofigs.txt" ]; then 29 | echo "Распакованный файл cofigs.txt не найден в директории $DESTINATION_DIR." 30 | exit 1 31 | fi 32 | 33 | # Перемещаем файл cofigs.txt 34 | mv cofigs.txt "$SCRIPT_DIR"/.. 35 | 36 | wg-quick down wg0 37 | wg-quick up wg0 38 | 39 | -------------------------------------------------------------------------------- /rm_user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ip_address=$1 4 | ip_address=10.10.0.$ip_address 5 | file_path="cofigs.txt" 6 | 7 | # Проверяем, передан ли IP-адрес в качестве аргумента 8 | if [ -z "$ip_address" ]; then 9 | echo "Не указан IP-адрес." 10 | exit 1 11 | fi 12 | 13 | # Проверяем, существует ли файл 14 | if [ ! -f "$file_path" ]; then 15 | echo "Файл $file_path не существует." 16 | exit 1 17 | fi 18 | 19 | # Считываем имя пользователя из файла 20 | username=$(awk -F" = " -v ip="$ip_address" '$1 == ip {print $2}' "$file_path") 21 | 22 | if [ -z "$username" ]; then 23 | echo "Пользователь с IP-адресом $ip_address не найден в файле $file_path." 24 | exit 1 25 | fi 26 | 27 | # Удаляем строку с указанным IP-адресом из файла 28 | sed -i "/$ip_address/d" "$file_path" 29 | 30 | # Удаляем файл /etc/wireguard/${username}_cl.conf 31 | rm -f "/etc/wireguard/${username}_cl.conf" 32 | rm -f "/etc/wireguard/${username}_privatekey" 33 | rm -f "/etc/wireguard/${username}_publickey" 34 | echo "Пользователь $username с IP-адресом $ip_address был удален из файла $file_path и удален файл /etc/wireguard/${username}_cl.conf" 35 | -------------------------------------------------------------------------------- /scripts/enterface.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Получение имени интерфейса с доступом в интернет 4 | internet_interface=$(ip a | awk '/^[0-9]+: .* state UP/ {gsub(/:/,"",$2); print $2}' | grep -E '^ens[0-9]+') 5 | 6 | # Проверка наличия интерфейса с доступом в интернет 7 | if [ -z "$internet_interface" ]; then 8 | echo "Интерфейс с доступом в интернет не найден." 9 | internet_interface="eth0" 10 | # exit 1 11 | fi 12 | 13 | # Получение IP-адреса интерфейса с доступом в интернет 14 | ip_address=$(ip a show dev $internet_interface | awk '/inet / {split($2, a, "/"); print a[1]}') 15 | 16 | # Проверка наличия IP-адреса 17 | if [ -z "$ip_address" ]; then 18 | echo "IP-адрес интерфейса $internet_interface не найден." 19 | exit 1 20 | fi 21 | 22 | # Вывод информации 23 | #echo "Веб-интерфейс с доступом в интернет:" 24 | ip_address_glob=$(curl -s ifconfig.me) 25 | echo "Полученный IP-адрес: $ip_address_glob" 26 | #echo "internet_interface=$internet_interface" > variables.sh 27 | echo "Имя интерфейса: $internet_interface" 28 | echo "internet_interface=${internet_interface}" >> variables.sh 29 | echo "IP-адрес: $ip_address" 30 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Используем базовый образ Ubuntu 2 | FROM ubuntu:latest 3 | 4 | # Устанавливаем необходимые пакеты 5 | RUN apt-get update && \ 6 | DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-pip wireguard-tools curl && \ 7 | apt-get clean && \ 8 | rm -rf /var/lib/apt/lists/* 9 | 10 | # Создаем виртуальный сетевой интерфейс eth0 внутри контейнера 11 | RUN ip link add dev ens18 type dummy || true 12 | 13 | # Настраиваем IP-адрес для виртуального интерфейса eth0 14 | RUN ip addr add 192.168.1.100/24 dev ens18 || true 15 | 16 | # Включаем виртуальный интерфейс eth0 17 | RUN ip link set dev ens18 up || true 18 | 19 | # Устанавливаем переменную среды для корректной работы Python внутри контейнера 20 | ENV LANG C.UTF-8 21 | 22 | # Устанавливаем рабочую директорию внутри контейнера 23 | WORKDIR /app 24 | 25 | # Копируем зависимости проекта (requirements.txt) в контейнер 26 | COPY requirements.txt . 27 | 28 | # Устанавливаем зависимости проекта 29 | RUN pip install --no-cache-dir -r requirements.txt 30 | 31 | # Копируем файлы проекта в контейнер 32 | COPY . . 33 | 34 | # Настраиваем переменные окружения, если необходимо 35 | ENV VARIABLE_NAME=value 36 | 37 | # Запускаем команду для запуска вашего телеграм бота 38 | CMD ["python3", "main.py"] 39 | -------------------------------------------------------------------------------- /scripts/start_wg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source variables.sh 3 | apt update 4 | apt install -y wireguard iptables fish zip unzip iproute2 5 | 6 | rm cofigs.txt 7 | touch cofigs.txt 8 | echo "vap_ip_local=1" > variables.sh 9 | ip_address_glob=$(curl -s ifconfig.me) 10 | echo "ip_address_glob=$ip_address_glob" >> variables.sh 11 | 12 | internet_interface=$(ip a | awk '/^[0-9]+: .* state UP/ {gsub(/:/,"",$2); print $2}' | grep -E '^ens[0-9]+') 13 | if [ -z "$internet_interface" ]; then 14 | echo "Интерфейс с доступом в интернет не найден." 15 | internet_interface="eth0" 16 | fi 17 | ip_address=$(ip a show dev $internet_interface | awk '/inet / {split($2, a, "/"); print a[1]}') 18 | if [ -z "$ip_address" ]; then 19 | echo "IP-адрес интерфейса $internet_interface не найден." 20 | exit 1 21 | fi 22 | echo "internet_interface=${internet_interface}" >> variables.sh 23 | 24 | wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey 25 | chmod 600 /etc/wireguard/privatekey 26 | var_private_key=$(cat /etc/wireguard/privatekey) 27 | var_public_key=$(cat /etc/wireguard/publickey) 28 | echo "var_private_key=\"$var_private_key\"" >> variables.sh 29 | echo "var_public_key=\"$var_public_key\"" >> variables.sh 30 | echo "[Interface] 31 | PrivateKey = ${var_private_key} 32 | Address = 10.10.0.1/24 33 | ListenPort = 51830 34 | PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ${internet_interface} -j MASQUERADE 35 | PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ${internet_interface} -j MASQUERADE 36 | " | tee -a /etc/wireguard/wg0.conf 37 | 38 | echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 39 | sysctl -p 40 | 41 | # Вместо использования systemctl 42 | wg-quick up wg0 43 | 44 | -------------------------------------------------------------------------------- /scripts/add_cl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | var_username=$1 4 | var_ip_address_glob2="$ip_address_glob" 5 | source variables.sh 6 | ((vap_ip_local++)) 7 | 8 | # Запрос имени пользователя 9 | #read -p "Введите имя пользователя: " var_username 10 | 11 | wg genkey | tee "/etc/wireguard/${var_username}_privatekey" | wg pubkey | tee "/etc/wireguard/${var_username}_publickey" > /dev/null 12 | echo "[Peer]" >> /etc/wireguard/wg0.conf 13 | echo "PublicKey = $(cat "/etc/wireguard/${var_username}_publickey")" >> /etc/wireguard/wg0.conf 14 | echo "AllowedIPs = 10.10.0.${vap_ip_local}/32" >> /etc/wireguard/wg0.conf 15 | 16 | # Перезапускаем WireGuard интерфейс 17 | wg-quick down wg0 18 | wg-quick up wg0 19 | 20 | # Добавим отладочную информацию 21 | ls -la "/etc/wireguard" 22 | 23 | if [ -e "/etc/wireguard/${var_username}_cl.conf" ]; then 24 | rm "/etc/wireguard/${var_username}_cl.conf" 25 | fi 26 | 27 | # Добавим отладочную информацию 28 | ls -la "/etc/wireguard" 29 | 30 | echo "[Interface] 31 | PrivateKey = $(cat "/etc/wireguard/${var_username}_privatekey") 32 | Address = 10.10.0.${vap_ip_local}/24 33 | DNS = 8.8.8.8 34 | 35 | [Peer] 36 | PublicKey = ${var_public_key} 37 | Endpoint = ${ip_address_glob}:51830 38 | AllowedIPs = 0.0.0.0/0 39 | PersistentKeepalive = 20" | tee -a /etc/wireguard/${var_username}_cl.conf 40 | 41 | # Перезапускаем WireGuard интерфейс 42 | wg-quick down wg0 43 | wg-quick up wg0 44 | 45 | # Перезаписываем значение переменной vap_ip_local в файле variables.sh 46 | grep -q "vap_ip_local=" variables.sh && sed -i "s/vap_ip_local=.*/vap_ip_local=${vap_ip_local}/" variables.sh || echo "vap_ip_local=${vap_ip_local}" >> variables.sh 47 | 48 | echo "ip_address_glob=${ip_address_glob}" >> variables.sh 49 | echo "Новый клиент ${var_username} добавлен." 50 | echo "10.10.0.${vap_ip_local} = ${var_username}" >> cofigs.txt 51 | 52 | exit 0 53 | 54 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import telebot 2 | from telebot import types # для указание типов 3 | import time 4 | import datetime 5 | import subprocess 6 | import sys 7 | import os 8 | import glob 9 | import qrcode 10 | from config import * 11 | #from config import * 12 | config = "" 13 | # Создаем экземпляр бота 14 | bot = telebot.TeleBot(api_tg) 15 | 16 | def save_config(message): 17 | global config 18 | config = message.text 19 | print("----------------") 20 | print(config) 21 | print("----------------") 22 | string = str(config) 23 | bot.send_message(message.chat.id, "Настройки конфигурации сохранены") 24 | return string 25 | 26 | def qr(name_qr, chat_id): 27 | # Чтение содержимого файла 28 | with open(name_qr, 'r') as file: 29 | text = file.read() 30 | # Создание объекта QR-кода 31 | qr = qrcode.QRCode(version=1, box_size=10, border=5) 32 | qr.add_data(text) 33 | qr.make(fit=True) 34 | # Создание изображения QR-кода 35 | img = qr.make_image(fill_color='black', back_color='white') 36 | # Сохранение изображения в файл 37 | img_path = "my_qrcode.png" 38 | img.save("my_qrcode.png") 39 | # Отправка QR-кода через Telegram бота 40 | with open(img_path, 'rb') as f: 41 | bot.send_photo(chat_id=chat_id, photo=f) 42 | # Удаление QR-кода 43 | os.remove(img_path) 44 | 45 | def check_message(message): 46 | valid_chars = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_!? ') 47 | new_message = ''.join(c if c in valid_chars else '_' for c in message) 48 | new_message = new_message.replace(' ', '_') 49 | return new_message.lower().strip() 50 | 51 | def check_number_in_range(number): 52 | try: 53 | num = int(number) 54 | if 2 <= num <= 253: 55 | return True 56 | else: 57 | return False 58 | except ValueError: 59 | return False 60 | 61 | def buttons(message): 62 | # bot.send_message(message.chat.id, text="Привет хозяин") 63 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 64 | botton32 = types.KeyboardButton("Конфиги") 65 | botton42 = types.KeyboardButton("Удалить_конфиг") 66 | botton41 = types.KeyboardButton("Добавить_конфиг") 67 | back = types.KeyboardButton("Назад") 68 | markup.add(botton32, botton41, botton42, back) 69 | bot.send_message(message.chat.id, text="Выполни запрос", reply_markup=markup) 70 | 71 | def del_vpn(message): 72 | if message.sticker is not None: 73 | # Если пользователь отправил стикер вместо текста 74 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не стикер.') 75 | buttons(message) 76 | elif message.voice is not None: 77 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не голосовое сообщение.') 78 | buttons(message) 79 | elif message.document is not None: 80 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не документ.') 81 | buttons(message) 82 | else: 83 | # Обработка текстового сообщения 84 | bot.reply_to(message, 'Вы отправили текстовое сообщение.') 85 | config_string = check_message(message.text) 86 | if check_number_in_range(message.text): 87 | subprocess.run(['scripts/del_cl.sh', config_string]) 88 | script_path = os.path.dirname(os.path.realpath(__file__)) 89 | rm_user_script = os.path.join(script_path, "rm_user.sh") 90 | subprocess.run([rm_user_script, config_string]) 91 | bot.send_message(message.chat.id, f"IP-адрес 10.10.0.{config_string} успешно удален.") 92 | print(f"{message.text} находится в допустимом диапазоне.") 93 | else: 94 | print(f"{message.text} не находится в допустимом диапазоне.") 95 | bot.send_message(message.chat.id, f"IP-адрес 10.10.0.{config_string} не может быть удален. Ввведите число от 2 до 253") 96 | buttons(message) 97 | 98 | 99 | 100 | def add_vpn(message): 101 | if message.chat.id in mainid: 102 | # bot.send_message(message.chat.id, text="Привет избранный!!") 103 | if message.sticker is not None: 104 | # Если пользователь отправил стикер вместо текста 105 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не стикер.') 106 | buttons(message) 107 | elif message.voice is not None: 108 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не голосовое сообщение.') 109 | buttons(message) 110 | elif message.document is not None: 111 | bot.reply_to(message, 'Пожалуйста, отправьте текстовое сообщение, а не документ.') 112 | buttons(message) 113 | else: 114 | # Обработка текстового сообщения 115 | # bot.reply_to(message, 'Вы отправили текстовое сообщение.') 116 | config_string = check_message(message.text) 117 | subprocess.run(['scripts/add_cl.sh', config_string]) 118 | bot.send_message(message.chat.id, f"Конфиг {config_string}.conf создан") 119 | config_file_path = f"/etc/wireguard/{config_string}_cl.conf" 120 | qr(config_file_path, message.chat.id) 121 | with open(config_file_path, 'rb') as file: 122 | bot.send_document(message.chat.id, file) 123 | with open(config_file_path, 'r') as file: 124 | config_content = file.read() 125 | bot.send_message(message.chat.id, config_content) 126 | bot.send_message(message.chat.id, "Конфигурационный файл успешно отправлен.") 127 | buttons(message) 128 | 129 | @bot.message_handler(commands=['start']) 130 | def start(message): 131 | if message.chat.id in mainid: 132 | # bot.send_message(message.chat.id, text="Привет избранный!!") 133 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 134 | btn1q = types.KeyboardButton("Мониторинг") 135 | btn2q = types.KeyboardButton("Администрирование") 136 | markup.add(btn1q, btn2q) 137 | bot.send_message(message.chat.id, text="{0.first_name}, добро пожаловать в бот управления VPN Wireguard".format(message.from_user), reply_markup=markup) 138 | elif(str(message.chat.id) != mainid): 139 | bot.send_message(message.chat.id, text="Привет, {0.first_name}! Ты заплутал!!".format(message.from_user)) 140 | 141 | @bot.message_handler(content_types=['sticker']) 142 | def handle_sticker(message): 143 | # Обработка сообщения со стикером 144 | bot.reply_to(message, 'Вы отправили стикер!') 145 | 146 | @bot.message_handler(commands=["id"]) 147 | def id(message): 148 | bot.send_message(message.chat.id, text="Id :"+str(message.chat.id)+"\nusername :"+str(message.from_user.username)) 149 | print(str(message.chat.id)) 150 | 151 | @bot.message_handler(content_types=['text']) 152 | def func(message): 153 | if message.chat.id in mainid: 154 | # bot.send_message(message.chat.id, text="Привет избранный!!") 155 | formatted_message = check_message(message.text) 156 | print(formatted_message) 157 | if not formatted_message: # Проверяем, что сообщение не пустое 158 | return 159 | if(message.text == "Мониторинг"): 160 | # bot.send_message(message.chat.id, text="Здесь мониторинг vpn сервера") 161 | buttons(message) 162 | elif(message.text == "Администрирование"): 163 | if (1==1): 164 | # bot.send_message(message.chat.id, text="Привет хозяин") 165 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 166 | botton22 = types.KeyboardButton("Установка_Wireguard") 167 | botton_reset = types.KeyboardButton("Сохранить_конигурацию") 168 | botton_reset_up = types.KeyboardButton("Импортировать_конигурацию") 169 | back = types.KeyboardButton("Назад") 170 | markup.add(botton22, botton_reset, botton_reset_up, back) 171 | bot.send_message(message.chat.id, text="Выполни запрос", reply_markup=markup) 172 | elif message.text == "Удалить_конфиг": 173 | bot.send_message(message.chat.id, "Введите последний октет ip, который нужно удалить.", reply_markup=types.ReplyKeyboardRemove()) 174 | config_file_path_txt = f"cofigs.txt" 175 | with open(config_file_path_txt, 'rb') as file: 176 | config_content = file.read() 177 | bot.send_message(message.chat.id, config_content) 178 | bot.send_message(message.chat.id, "Введите последний октет ip, который нужно удалить. Например если нужно удалить ip адресс 10.10.0.47, то введите 47") 179 | bot.register_next_step_handler(message, del_vpn) 180 | elif message.text == "Добавить_конфиг": 181 | bot.send_message(message.chat.id, "Введите название нового конфига", reply_markup=types.ReplyKeyboardRemove()) 182 | bot.register_next_step_handler(message, add_vpn) 183 | elif message.text == "Конфиги": 184 | bot.send_message(message.chat.id, "Вот ваша конфигурация Wireguard") 185 | config_file_path = f"/etc/wireguard/wg0.conf" 186 | with open(config_file_path, 'rb') as file: 187 | bot.send_document(message.chat.id, file) 188 | with open(config_file_path, 'r') as file: 189 | config_content = file.read() 190 | bot.send_message(message.chat.id, config_content) 191 | file_list = glob.glob('/etc/wireguard/*.conf') 192 | for file_path in file_list: 193 | if os.path.basename(file_path) != 'wg0.conf': 194 | with open(file_path, 'rb') as file: 195 | bot.send_document(message.chat.id, document=file) 196 | config_file_path_txt = f"cofigs.txt" 197 | with open(config_file_path_txt, 'rb') as file: 198 | config_content = file.read() 199 | bot.send_message(message.chat.id, config_content) 200 | # bot.send_message(message.chat.id, "Конфигурационный файл успешно отправлен.") 201 | elif message.text == "Сохранить_конигурацию": 202 | subprocess.run(['scripts/backup.sh']) 203 | print("ok") 204 | bot.send_message(message.chat.id, text="Резервная копия создана") 205 | elif message.text == "Импортировать_конигурацию": 206 | subprocess.run(['scripts/restore.sh']) 207 | print("ok2") 208 | bot.send_message(message.chat.id, text="Резервная копия импортированна") 209 | elif message.text == "Установка_Wireguard": 210 | # Проверка наличия файла 211 | file_path = '/etc/wireguard/wg0.conf' 212 | if os.path.isfile(file_path): 213 | print(f"Файл {file_path} существует.") 214 | # bot.send_message(message.chat.id, "Wireguard уже настроен. \nХотите настроить заново?") 215 | # bot.send_message(message.chat.id, "Хотите установить все заново?") 216 | # bot.send_message(message.chat.id, text="Привет хозяин") 217 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 218 | botton_yes = types.KeyboardButton("Да") 219 | botton_no = types.KeyboardButton("Нет") 220 | markup.add(botton_yes, botton_no) 221 | bot.send_message(message.chat.id, text="Wireguard уже настроен. \nХотите настроить заново?", reply_markup=markup) 222 | else: 223 | print(f"Файла {file_path} не существует.") 224 | bot.send_message(message.chat.id, "Запускаю установку Wireguard. \nПожалуйста дождитесь завершения установки.") 225 | subprocess.run(['scripts/start_wg.sh']) 226 | bot.send_message(message.chat.id, "Установка Wireguard завершена") 227 | elif (message.text == "Да"): 228 | bot.send_message(message.chat.id, "Удаляю конфиги!") 229 | command = "rm variables.sh && rm -r /etc/wireguard/ && mkdir /etc/wireguard/ && rm cofigs.txt" 230 | subprocess.run(command, shell=True) 231 | # # Удаление файла variables.sh 232 | # subprocess.run("rm variables.sh", shell=True) 233 | # # Удаление каталога /etc/wireguard/ 234 | # subprocess.run("rm -r /etc/wireguard/", shell=True) 235 | # # Пауза для обеспечения времени на завершение предыдущей команды 236 | # time.sleep(10) 237 | # # Создание каталога /etc/wireguard/ 238 | # subprocess.run("mkdir /etc/wireguard/", shell=True) 239 | # # Удаление файла cofigs.txt 240 | # subproces.run("rm cofigs.txt", shell=True) 241 | bot.send_message(message.chat.id, "Запускаю установку Wireguard") 242 | subprocess.run(['scripts/start_wg.sh']) 243 | bot.send_message(message.chat.id, "Установка Wireguard завершена") 244 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 245 | button1 = types.KeyboardButton("Мониторинг") 246 | button2 = types.KeyboardButton("Администрирование") 247 | markup.add(button1, button2) 248 | bot.send_message(message.chat.id, text="Назад", reply_markup=markup) 249 | elif (message.text == "Нет"): 250 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 251 | button1 = types.KeyboardButton("Мониторинг") 252 | button2 = types.KeyboardButton("Администрирование") 253 | markup.add(button1, button2) 254 | bot.send_message(message.chat.id, text="Назад", reply_markup=markup) 255 | elif (message.text == "Назад"): 256 | markup = types.ReplyKeyboardMarkup(resize_keyboard=True) 257 | button1 = types.KeyboardButton("Мониторинг") 258 | button2 = types.KeyboardButton("Администрирование") 259 | markup.add(button1, button2) 260 | bot.send_message(message.chat.id, text="Назад", reply_markup=markup) 261 | else: 262 | bot.send_message(message.chat.id, text="На такую комманду я не запрограммировал..") 263 | message_text = message.text 264 | print(message_text) 265 | elif(str(message.chat.id) != mainid): 266 | bot.send_message(message.chat.id, text="Привет, {0.first_name}! Ты заплутал!!".format(message.from_user)) 267 | 268 | bot.polling(none_stop=True) 269 | 270 | --------------------------------------------------------------------------------