feat: Add admin management system with super admin controls
Some checks failed
continuous-integration/drone/pr Build is failing

- Implemented two-level admin hierarchy (super admin from .env and assigned admins)
- Only super admins (from ADMIN_IDS in .env) can manage admin assignments
- Added admin management menu to settings (visible only for super admins)
- Admins can add/remove other admins through the bot interface
- Protected super admins from deletion
- Added CLI tool for admin management (scripts/manage_admins.py)
- Added database check script (scripts/check_db.py)
- Added deployment scripts for server setup
- Added comprehensive documentation on admin management system
- Added backup and server deployment guides
This commit is contained in:
2026-02-18 13:19:26 +09:00
parent d263730cf2
commit e1b4465f89
12 changed files with 1817 additions and 2 deletions

172
scripts/deploy_server.sh Normal file
View File

@@ -0,0 +1,172 @@
#!/bin/bash
# Скрипт развертывания lottery_bot на сервере
# Использование: ./deploy_server.sh
set -e
echo "🔧 ============================================"
echo "🔧 Развертывание Lottery Bot на сервер"
echo "🔧 ============================================"
echo ""
# Цвета для вывода
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Функция для вывода сообщений
log_info() {
echo -e "${GREEN}$1${NC}"
}
log_warn() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}$1${NC}"
}
# Проверка переменных окружения
if [ -z "$DATABASE_URL" ]; then
log_error "DATABASE_URL не установлен в .env"
echo "Пример: export DATABASE_URL='postgresql://user:password@host:5432/lottery_bot'"
exit 1
fi
if [ -z "$BOT_TOKEN" ]; then
log_error "BOT_TOKEN не установлен в .env"
exit 1
fi
log_info "Переменные окружения проверены"
# 1. Проверка зависимостей
echo ""
echo "📦 Проверка зависимостей..."
if ! command -v python3 &> /dev/null; then
log_error "Python 3 не установлен"
exit 1
fi
log_info "Python 3 найден: $(python3 --version)"
if ! command -v pip3 &> /dev/null; then
log_error "pip3 не установлен"
exit 1
fi
log_info "pip3 установлен"
# 2. Создание виртуального окружения
echo ""
echo "🐍 Подготовка виртуального окружения..."
if [ ! -d "venv" ]; then
log_info "Создание виртуального окружения..."
python3 -m venv venv
else
log_warn "Виртуальное окружение уже существует"
fi
# Активируем виртуальное окружение
source venv/bin/activate
log_info "Виртуальное окружение активировано"
# 3. Установка зависимостей
echo ""
echo "📚 Установка зависимостей из requirements.txt..."
if [ -f "requirements.txt" ]; then
pip3 install --upgrade pip setuptools wheel -q
pip3 install -r requirements.txt -q
log_info "Зависимости установлены"
else
log_error "requirements.txt не найден"
exit 1
fi
# 4. Проверка подключения к БД
echo ""
echo "🗄️ Проверка подключения к базе данных..."
python3 << 'EOF'
import asyncio
from src.core.database import async_session_maker
from sqlalchemy import text
async def test_db():
try:
async with async_session_maker() as session:
result = await session.execute(text("SELECT 1"))
print("✅ Подключение к БД успешно")
return True
except Exception as e:
print(f"❌ Ошибка подключения: {e}")
return False
if not asyncio.run(test_db()):
exit(1)
EOF
if [ $? -ne 0 ]; then
log_error "Не удалось подключиться к базе данных"
exit 1
fi
# 5. Запуск миграций
echo ""
echo "📝 Запуск миграций базы данных..."
if command -v alembic &> /dev/null; then
log_info "Alembic найден, запуск миграций..."
alembic upgrade head
log_info "Миграции завершены"
else
log_warn "Alembic не найден, пропуск миграций Alembic"
# Используем встроенный скрипт инициализации
if [ -f "scripts/db_setup.py" ]; then
log_info "Использование скрипта инициализации БД..."
python3 scripts/db_setup.py
log_info "БД инициализирована"
fi
fi
# 6. Проверка конфигурации
echo ""
echo "⚙️ Проверка конфигурации..."
python3 << 'EOF'
from src.core.config import BOT_TOKEN, DATABASE_URL, ADMIN_IDS
print(f"✅ BOT_TOKEN загружен")
print(f"✅ DATABASE_URL: {DATABASE_URL[:50]}...")
print(f"✅ ADMIN_IDS: {ADMIN_IDS if ADMIN_IDS else 'Не установлены'}")
EOF
log_info "Конфигурация проверена"
# 7. Информация о запуске
echo ""
echo "🚀 ============================================"
echo "🚀 Приложение готово к запуску"
echo "🚀 ============================================"
echo ""
echo "📋 Команды для запуска:"
echo ""
echo "Режим разработки:"
echo " python3 main.py"
echo ""
echo "Производство (с systemd):"
echo " sudo systemctl start lottery-bot"
echo " sudo systemctl enable lottery-bot"
echo ""
echo "Docker:"
echo " docker-compose up -d"
echo ""
echo "⚙️ Переменные окружения:"
echo " DATABASE_URL: $(echo $DATABASE_URL | cut -c1-50)..."
echo " BOT_TOKEN: $(echo $BOT_TOKEN | cut -c1-20)...${BOT_TOKEN: -5}"
echo ""
log_info "Развертывание завершено!"