├── 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 |
--------------------------------------------------------------------------------