Telegram-бот для игры в карточную игру "Дурак" с возможностью ставок в Ethereum.
- 🎮 Игра в дурака с другим игроком
- 💰 Ставки в ETH
- 📊 Статистика игр
- 💳 Пополнение и вывод средств
- 🌐 Веб-интерфейс для игры через Telegram WebApp
-
Клонируйте репозиторий или скачайте файлы
-
Установите зависимости:
pip install -r requirements.txt- Создайте файл
.envна основе.env.example:
BOT_TOKEN=your_telegram_bot_token_here
WEBAPP_URL=https://your-webapp-url.com
DATABASE_URL=sqlite+aiosqlite:///./durak_bot.db
ETH_RPC_URL=https://mainnet.infura.io/v3/your_infura_key
PRIVATE_KEY=your_wallet_private_key_here
WALLET_ADDRESS=your_wallet_address_here- Запустите бота:
python bot.py- В отдельном терминале запустите веб-приложение:
cd web_app
uvicorn main:app --host 0.0.0.0 --port 8000.
├── bot.py # Точка входа для бота
├── main.py # Основная логика бота
├── database.py # Модели базы данных
├── game_logic.py # Логика игры в дурака
├── blockchain.py # Интеграция с блокчейном
├── telegram_auth.py # Валидация Telegram WebApp данных
├── game_locks.py # Блокировки для защиты от race conditions
├── game_timeouts.py # Управление таймаутами игроков
├── game_validator.py # Валидация состояния игры
├── action_tracker.py # Отслеживание действий для предотвращения дубликатов
├── requirements.txt # Зависимости Python
├── .env.example # Пример конфигурации
├── .gitignore # Игнорируемые файлы
├── README.md # Документация
└── web_app/
├── main.py # FastAPI приложение
├── static/ # Статические файлы
└── templates/
└── game.html # Интерфейс игры
/start- Начать работу с ботом/help- Справка по использованию
- Создайте новую игру через кнопку "🎮 Начать игру"
- Дождитесь подключения второго игрока (или присоединитесь к существующей игре)
- Откройте игру через веб-интерфейс
- Играйте, следуя правилам дурака
- Пополнение: Получите адрес для депозита через кнопку "📥 Пополнить баланс"
- Вывод: Введите сумму и адрес в формате
0.1 0x1234...5678 - Статистика: Просмотрите свою статистику через кнопку "📊 Статистика"
- Игра ведется колодой из 36 карт
- Цель - избавиться от всех карт
- Атакующий ходит картой
- Защитник должен отбить картой той же масти и старшего достоинства, или козырем
- Если все карты отбиты, они убираются со стола
- Если защитник не может отбить, он забирает все карты со стола
- Победитель - тот, кто первым избавится от всех карт
- Python 3.8+
- python-telegram-bot - Telegram Bot API
- FastAPI - Веб-фреймворк
- SQLAlchemy - ORM для работы с БД
- Web3.py - Интеграция с Ethereum
- SQLite - База данных
- slowapi - Rate limiting для API
Проект включает следующие механизмы защиты:
- 🔒 Блокировки - защита от race conditions при одновременных действиях
- ⏱️ Таймауты - автоматическое завершение ходов при превышении времени
- 🚦 Rate Limiting - ограничение количества запросов для защиты от спама
- ✅ Валидация - проверка целостности состояния игры и входных данных
- 🔄 Транзакции - атомарность операций с базой данных
- 🛡️ Защита от дубликатов - предотвращение повторной обработки действий
- Для работы с блокчейном требуется настройка RPC-узла (Infura, Alchemy и т.д.)
- В продакшене рекомендуется использовать PostgreSQL вместо SQLite
- Для хранения состояния игр в продакшене рекомендуется использовать Redis
- Необходимо настроить HTTPS для веб-приложения для работы Telegram WebApp
MIT