Используется aiogram 3.3.0
- Пользователь отправляет команду /start боту.
- Администратору приходит сообщение в телеграм с кномками "разрешить" и "запретить".
- После запрета запись о пользователе добавится в БД с пометкой "baned", после этого бот перестанет обрабатывать сообщения этого пользователя. (файлы конфигурации при это не генерируются)
- После разрешения доступа для пользователя создается файл конфигурации wireguard и отправляется ботом в личные сообщения телеграм.
- Для входа в режим администратора отправьте комманду /admin (она будет обработана только от пользователя с id указанным в качестве администратора при запуске бота)
Меню администратора содержит:
- Отправка оповещения об оплате. Пользователи которым доступ предоставляется платно помечаются соответсвующим флагом в БД, при нажатии на эту кнопку всем платным пользователям придет уведомление о том что подошел срок оплаты.
- Потребление трафика. Отображает статистику об использовании трафика пользователями сервера, отсортированную по количеству загруженных данных.
- Список реальных пользователей. Отображает список пользователей, которым был предоставлен доступ. Каждый элемент списка является кнопкой, которая переводит в режим работы с отдельным пользователем.
- Меню управления отдельным пользователем. Отображает статистику потребления трафика данным пользователем и содержит список функций. - Забанить / разбанить пользователя - Добавить / убрать флаг оплаты - Удалить пользователя - Кнопка "назад" возврат к приведущему меню
- Список заблокированных пользователей. Отображает аналогичный список пользователей, которым был отклонен доступ. Из внутреннего функционала только удаление такого пользователя для возможности запросить доступ повторно.
- Перезапустить WG. Перезапускает сервис wireguard прямо по команде из телеграм.
- Закрыть. Закрывает меню администратора.
Для запуска:
- Установить Docker и Docker-compose
- Создать директории для volume
mkdir /opt/{wg_data,pg_data}
- Создать отдельную папку для проекта
mkdir /srv/wg_bot && cd /srv/wg_bot
- Создать с папке проекта файл docker-compose.yml со следующим содержимым:
version: '3.3'
volumes:
pgdata:
driver: local
driver_opts:
o: bind
type: none
device: /opt/pg_data
wgdata:
driver: local
driver_opts:
o: bind
type: none
device: /opt/wg_data
services:
db:
image: postgres:13-alpine
container_name: wg_database
restart: "unless-stopped"
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
volumes:
- "pgdata:/var/lib/postgresql/data"
bot:
image: mb0nd/wg_admin_bot:latest
container_name: wg_admin_bot
stop_signal: SIGINT
restart: "unless-stopped"
environment:
API_TOKEN: ${API_TOKEN}
ADMIN_ID: ${ADMIN_ID}
PG_URL: ${PG_URL}
LISTEN_PORT: ${LISTEN_PORT}
HOST: ${HOST}
PATH_TO_WG: ${PATH_TO_WG}
TZ: ${TZ}
ports:
- ${LISTEN_PORT}:${LISTEN_PORT}/udp
cap_add:
- "NET_ADMIN"
volumes:
- "wgdata:${PATH_TO_WG}"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 10
depends_on:
- db
- Создать в папке проекта файл .env со следующим содержимым (значения переменных заменить на свои):
#Postgres
POSTGRES_PASSWORD=your db_password
POSTGRES_USER=your db_user
#Bot
API_TOKEN=api_tocken
ADMIN_ID=admin_id
PG_URL=postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db/${POSTGRES_USER}
LISTEN_PORT=your wg_port
HOST=your host_ip
PATH_TO_WG=/etc/wireguard/
TZ=Europe/Moscow
Заполняем переменные окружения:
- POSTGRES_PASSWORD - (пароль для доступа к БД)
- POSTGRES_USER - (имя пользователя БД)
- API_TOKEN - (токен полученный от BotFather)
- ADMIN_ID - (телеграм id администратора)
- PG_URL - (URL для подключения к Postgresql)
- LISTEN_PORT - (порт используемый wireguard)
- HOST - (ip адрес сервера, по которому он доступен в интернете)
- PATH_TO_WG - /etc/wireguard/ (путь установки wireguard при установке по умолчанию)
- TZ - (временная зона)
- Выполнить команду:
docker-compose up -d
- Установить wireguard см. для своей ОС
- Установить postgresql (создать БД и учетные данные) см. для своей ОС
- Клонируем репозиторий к себе на сервер и переходим в каталог проекта
git clone https://github.com/mb0nd/wg_admin_bot.git && cd wg_admin_bot
- Создаем виртуальное окружение
python -m venv venv
- Устанавливаем зависимости
pip install --upgrade pip && pip install -r requirements.txt
- Создаем bash скрипт для запуска бота (прим. "run.sh") следующего содержания и заполняем переменные окружения аналогично для варианта с докером.
#!/usr/bin/env bash
source путь_к_папке_с_проектом/venv/bin/activate
export API_TOKEN=''
export ADMIN_ID=''
export PG_URL='postgresql+asyncpg://PG_USER:PG_PASSWORD@localhost/DB_NAME'
export LISTEN_PORT=''
export HOST=''
export PATH_TO_WG='/etc/wireguard/'
python3 путь_к_папке_с_проектом/bot/__main__.py
- Не забываем сделать скрипт исполняемым
chmod +x run.sh
- Зыпускаем бота
./run.sh