Telegram-бот с режимом игры по вопросам и админ-панелью для управления своими вопросами.
- Игра: получить вопрос, показать ответ, перейти к следующему.
- Команды: создать команду, вступить по диплинку или UUID-коду, выйти из команды.
- Команды: создатель может кикать участников без бана.
- Админка: добавить вопрос, просмотреть свои вопросы, отредактировать, удалить.
- Главное меню через
/menu. - При
/startбот отправляет приветствие и сразу показывает меню. - Кнопка
Админкав меню видна только пользователям изADMIN_IDS.
- Вопросы и команды используют
UUIDкак идентификатор. - Если пользователь без команды: учет просмотра ведется по
user_id. - Если пользователь в команде: учет просмотра ведется по
team_id, и список отвеченных вопросов общий для всех участников команды. - Вопрос, который уже был показан в этой области видимости (пользователь или команда), повторно не показывается.
- Вопросы, созданные самим пользователем, ему в игре не показываются.
- При создании вопроса автор автоматически помечается как уже видевший этот вопрос (персонально).
- Go 1.25
- go-telegram/bot
- PostgreSQL 16
- Redis 7
- Docker Compose
- Скопируйте пример переменных окружения:
cp .env.example .env- Заполните
.env:
BOT_TOKEN— токен Telegram-ботаADMIN_IDS— список Telegramuser_idадминов через запятуюLOG_CHAT_ID—chat_idслужебного чата логов (для событий первого/startи команды/get)TELEGRAM_PROXY_URL— необязательный прокси для Telegram API, напримерhttp://127.0.0.1:8080илиsocks5://127.0.0.1:1080POSTGRES_*иPOSTGRES_DSN— настройки PostgresREDIS_ADDR,REDIS_PASSWORD,REDIS_DB— настройки Redis
- Запустите проект:
docker compose up -d --build- Проверьте статус и логи:
docker compose ps
docker compose logs -f bot/start— приветствие + показ главного меню/start jointeam-<uuid>— вход в команду по диплинку/menu— открыть главное меню/jointeam <uuid>— вход в команду по UUID вручную/get <id>— команда для лог-чата: показать данные пользователя по Telegramid
Пересоздать контейнеры с пересборкой:
docker compose up -d --build --force-recreateПолная очистка (контейнеры, образы, тома) и чистая пересборка:
docker compose down --rmi all --volumes --remove-orphans
docker builder prune -af
docker compose build --no-cache
docker compose up -dinternal/adapters/controller/telegram— Telegram-контроллер и менюinternal/adapters/repository/postgres— вопросы и история просмотренных вопросовinternal/adapters/repository/redisstate— хранение состояния форм админкиinternal/domain/service— бизнес-логика игры/админки/доступаinternal/domain/schema— доменные модели
- ✅
Добавить отображение Telegram-имен участников в списке команды✅ - ✅~~Добавить добавление вопросов Пуллом (до 25)~~✅
- ✅
Создание qr-code для присоединения в команду✅ - ✅
Профили пользователей и статистика✅ - Создание паков вопросов (айти пак, школьный пак)
- Достижения