Files
new_lottery_bot/Makefile
Andrew K. Choi 505d26f0e9
Some checks reported errors
continuous-integration/drone/push Build encountered an error
feat: Система автоматического подтверждения выигрышей с поддержкой множественных счетов
Основные изменения:

 Новые функции:
- Система регистрации пользователей с множественными счетами
- Автоматическое подтверждение выигрышей через inline-кнопки
- Механизм переигровки для неподтвержденных выигрышей (24 часа)
- Подтверждение на уровне счетов (каждый счет подтверждается отдельно)
- Скрипт полной очистки базы данных

🔧 Технические улучшения:
- Исправлена ошибка MissingGreenlet при lazy loading (добавлен joinedload/selectinload)
- Добавлено поле claimed_at для отслеживания времени подтверждения
- Пакетное добавление счетов с выбором розыгрыша
- Проверка владения конкретным счетом при подтверждении

📚 Документация:
- docs/AUTO_CONFIRM_SYSTEM.md - Полная документация системы подтверждения
- docs/ACCOUNT_BASED_CONFIRMATION.md - Подтверждение на уровне счетов
- docs/REGISTRATION_SYSTEM.md - Система регистрации
- docs/ADMIN_COMMANDS.md - Команды администратора
- docs/CLEAR_DATABASE.md - Очистка БД
- docs/QUICK_GUIDE.md - Быстрое начало
- docs/UPDATE_LOG.md - Журнал обновлений

🗄️ База данных:
- Миграция 003: Таблицы accounts, winner_verifications
- Миграция 004: Поле claimed_at в таблице winners
- Скрипт scripts/clear_database.py для полной очистки

🎮 Новые команды:
Админские:
- /check_unclaimed <lottery_id> - Проверка неподтвержденных выигрышей
- /redraw <lottery_id> - Повторный розыгрыш
- /add_accounts - Пакетное добавление счетов
- /list_accounts <telegram_id> - Список счетов пользователя

Пользовательские:
- /register - Регистрация с вводом данных
- /my_account - Просмотр своих счетов
- Callback confirm_win_{id} - Подтверждение выигрыша

🛠️ Makefile:
- make clear-db - Очистка всех данных из БД (с подтверждением)

🔒 Безопасность:
- Проверка владения счетом при подтверждении
- Защита от подтверждения чужих счетов
- Независимое подтверждение каждого выигрышного счета

📊 Логика работы:
1. Пользователь регистрируется и добавляет счета
2. Счета участвуют в розыгрыше
3. Победители получают уведомление с кнопкой подтверждения
4. Каждый счет подтверждается отдельно (24 часа на подтверждение)
5. Неподтвержденные выигрыши переигрываются через /redraw
2025-11-16 14:01:30 +09:00

136 lines
5.7 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Makefile для телеграм-бота розыгрышей
.PHONY: help install setup setup-postgres init-db run test clean
# По умолчанию показываем справку
help:
@echo "🎲 Телеграм-бот для розыгрышей"
@echo "================================"
@echo ""
@echo "Доступные команды:"
@echo " make install - Установка зависимостей"
@echo " make setup-postgres- Настройка PostgreSQL БД"
@echo " make setup - Первоначальная настройка"
@echo " make init-db - Инициализация базы данных"
@echo " make run - Запуск бота"
@echo " make test - Запуск тестов и примеров"
@echo " make migration - Создание миграции"
@echo " make migrate - Применение миграций"
@echo " make sample - Создание тестового розыгрыша"
@echo " make stats - Показать статистику"
@echo " make demo-admin - Демонстрация админ-панели"
@echo " make test-admin - Тестирование улучшений админки"
@echo " make clear-db - ⚠️ УДАЛИТЬ ВСЕ ДАННЫЕ из БД"
@echo ""
@echo "Быстрый старт с PostgreSQL:"
@echo " 1. cp .env.example .env"
@echo " 2. Отредактируйте .env файл"
@echo " 3. make setup-postgres"
@echo " 4. make migrate"
@echo " 5. make setup"
@echo " 6. make run"
# Установка зависимостей
install:
@echo "📦 Установка зависимостей..."
python3 -m venv .venv
. .venv/bin/activate && pip install -r requirements.txt
# Настройка PostgreSQL базы данных
setup-postgres:
@echo "🐘 Настройка PostgreSQL базы данных..."
./scripts/setup_postgres.sh
# Первоначальная настройка
setup: install
@echo "🔧 Настройка проекта..."
@if [ ! -f .env ]; then \
echo "❌ Файл .env не найден! Скопируйте .env.example в .env"; \
exit 1; \
fi
. .venv/bin/activate && python -c "from src.utils.utils import setup_admin_users; import asyncio; asyncio.run(setup_admin_users())"
@echo "✅ Настройка завершена!"
# Инициализация базы данных
init-db:
@echo "🗄️ Инициализация базы данных..."
. .venv/bin/activate && python -c "from src.core.database import init_db; import asyncio; asyncio.run(init_db())"
@echo "✅ База данных инициализирована!"
# Проверка подключения к базе данных
check-db:
@echo "🔍 Проверка подключения к базе данных..."
. .venv/bin/activate && python -c "from src.core.database import async_session_maker; import asyncio; asyncio.run(async_session_maker().__aenter__())"
@echo "✅ Подключение к базе данных работает!"
# Запуск бота
run:
@echo "🚀 Запуск бота..."
. .venv/bin/activate && python main.py
# Создание миграции
migration:
@echo "📄 Создание новой миграции..."
. .venv/bin/activate && alembic revision --autogenerate -m "$(MSG)"
# Применение миграций
migrate:
@echo "⬆️ Применение миграций..."
. .venv/bin/activate && alembic upgrade head
# Тесты и примеры
test:
@echo "🧪 Запуск тестов..."
. .venv/bin/activate && python scripts/examples.py
# Создание тестового розыгрыша
sample:
@echo "🎲 Создание тестового розыгрыша..."
. .venv/bin/activate && python -c "from src.utils.utils import create_sample_lottery; import asyncio; asyncio.run(create_sample_lottery())"
# Статистика
stats:
@echo "📊 Статистика бота..."
. .venv/bin/activate && python -c "from src.utils.utils import show_stats; import asyncio; asyncio.run(show_stats())"
# Демонстрация админ-панели
demo-admin:
@echo "🎪 Демонстрация возможностей админ-панели..."
. .venv/bin/activate && python src/display/demo_admin.py
# Тестирование улучшений админки
test-admin:
@echo "🧪 Тестирование новых функций админ-панели..."
. .venv/bin/activate && python tests/test_admin_improvements.py
# ⚠️ ОПАСНО: Полная очистка базы данных
clear-db:
@echo "⚠️ ВНИМАНИЕ! Это удалит ВСЕ данные из базы данных!"
@echo " - Все пользователи"
@echo " - Все розыгрыши"
@echo " - Все счета"
@echo " - Все участия"
@echo " - Всех победителей"
@echo ""
@read -p "Вы уверены? Введите 'yes' для подтверждения: " confirm; \
if [ "$$confirm" = "yes" ]; then \
echo "🗑️ Очистка базы данных..."; \
. .venv/bin/activate && python scripts/clear_database.py; \
else \
echo "❌ Отменено"; \
fi
# Очистка
clean:
@echo "🧹 Очистка временных файлов..."
find . -type f -name "*.pyc" -delete
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.log" -delete
@echo "✅ Очистка завершена!"
# Полная переустановка
reset: clean
@echo "🔄 Полная переустановка..."
rm -f *.db *.sqlite *.sqlite3
rm -rf migrations/versions/*.py
make setup