Инлайн‑бот для Telegram, который помогает вести игровой счёт желаний между двумя людьми и параллельно собирать общий список мест для желаний и милый «зоопарк желаний».
Бот показывает текущее количество баллов и накопленных «желаний» у каждого участника, а также позволяет:
- Начислять / списывать очки кнопками.
- Одновременно добавлять очки обоим участникам.
- Конвертировать 100 очков в одно «желание».
- Тратить желания с живым обновлением сообщения.
- Вести список мест, которые вы хотите посетить (с пометкой «посещено / не посещено» и автором идеи).
- Вести «зоопарк желаний» — отдельный список милых сущностей (животных), связанных с вашими желаниями.
- Получать вопросы для разговора — бот запрашивает у OpenRouter один тёплый вопрос для беседы.
- Показывать случайное число 1 или 2 — мини‑рандом для бытовых решений.
Бот работает в inline‑режиме: достаточно написать @имя_бота в любом чате. Дополнительно доступно управление через кнопки и обычные сообщения в чате с ботом.
- Python 3.10+
- aiogram — фреймворк для Telegram‑ботов
- python-dotenv — загрузка переменных окружения из файла
.env - aiohttp — HTTP‑клиент для запросов к OpenRouter
Хранение данных — в локальном JSON‑файле score_data.json (без внешней БД).
-
Игровой счёт желаний
- Два участника с настраиваемыми именами и эмодзи (через
config.py). - Кнопки
+1/-1для каждого участника. - Кнопка
+1 обоим(⭐), чтобы поощрять общие моменты. - Автоматическая конвертация: при достижении
100очков — 1 желание, счёт обнуляется. - Кнопка «Потратить желание» с информативным обновлением сообщения.
- Два участника с настраиваемыми именами и эмодзи (через
-
Inline‑режим в любых чатах
- Вызов бота через
@bot_username. - Карточка текущего счёта с кнопками управления.
- Ввод числа после имени бота (
@bot_username 25) — быстрый сценарий начисления произвольного количества очков.
- Вызов бота через
-
Список мест для желаний
- Отдельное меню
/start→ «📋 Места». - Добавление новых мест с указанием автора идеи.
- Отметка «посещено / не посещено».
- Фильтрация мест: только непосещённые / только посещённые.
- Красивый текстовый список для шаринга через inline‑режим.
- Отдельное меню
-
«Зоопарк желаний»
- Отдельное меню «🦁 Зоопарк».
- Добавление, редактирование и удаление «животных» в зоопарке.
- Компактный список животных с inline‑кнопками управления.
-
Вопросы для разговора (OpenRouter)
- Кнопка «💬 Вопрос для разговора» в inline‑режиме.
- Запрос к OpenRouter с несколькими fallback‑моделями.
- Генерация одного тёплого вопроса на русском для личного разговора.
-
Прочее
- Мини‑рандом «1 или 2».
- Живое обновление сообщений через
edit_message_textвместо спама новыми сообщениями.
git clone https://github.com/BUka228/WishLocker_Inline_Bot.git
cd WishLocker_Inline_Botpython3 -m venv venv
source venv/bin/activate # macOS / Linux
# для Windows:
# venv\Scripts\activateЕсли у вас уже есть requirements.txt, используйте его. В противном случае достаточно установить основные пакеты:
pip install aiogram python-dotenv aiohttpСоздайте файл .env в корне проекта:
BOT_TOKEN=<токен_от_BotFather>
# Опционально, но нужно для работы генерации вопросов для разговора:
OPENROUTER_API_KEY=<ключ_OpenRouter>Переменные загружаются в config.py через python-dotenv.
Без
OPENROUTER_API_KEYвсе функции бота, кроме генерации вопросов для разговора, будут работать штатно. В этом случае при нажатии кнопки вопроса пользователь увидит понятное сообщение о том, что ключ не настроен.
python bot.pyБот запускается в режиме long polling и готов принимать обновления.
Основные настройки находятся в config.py:
BOT_TOKEN— токен Telegram‑бота.DATA_FILE— путь к JSON‑файлу с данными (по умолчаниюscore_data.json).P1_NAME,P2_NAME— отображаемые имена участников.P1_KEY,P2_KEY— ключи для доступа к данным участников в хранилище.EMOJI_P1,EMOJI_P2,EMOJI_HEART,EMOJI_WISH— эмодзи для красивого отображения.
При необходимости вы можете:
- Переименовать участников.
- Поменять эмодзи.
- Указать другой путь к файлу данных.
После изменения config.py перезапустите бота.
-
Добавьте бота в Telegram.
-
В любом чате начните вводить:
@имя_бота -
Выберите одну из карточек:
- «Показать текущий счёт» — основная карточка со счётом и кнопками.
- «Список мест для желаний» — список мест (по умолчанию непосещённые).
- «Зоопарк желаний» — список животных.
- «Вопрос для разговора» (вход через специальную карточку с кнопкой).
-
Отправьте карточку в чат: под сообщением появятся кнопки.
-
Используйте кнопки, чтобы изменять счёт, тратить желания или управлять списками.
-
Чтобы добавить произвольное количество очков, напишите число после имени бота:
@имя_бота 50Появится вариант начислить именно это количество выбранному участнику.
В личном чате с ботом доступны дополнительные меню:
- Отправьте
/start— бот покажет главное меню. - Выберите:
- 📋 Места — работа со списком мест:
- Просмотр всех мест.
- Добавление нового места («➕ Добавить место»).
- Фильтрация на непосещённые / посещённые.
- Редактирование/удаление мест через inline‑клавиатуру.
- 🦁 Зоопарк — работа со списком животных:
- Просмотр текущего зоопарка.
- Добавление нового животного.
- Редактирование/удаление животных.
- 📋 Места — работа со списком мест:
Для добавления/редактирования бот использует простое внутреннее состояние по пользователю (in‑memory словарь), чего достаточно для одного инстанса бота.
bot.py— точка входа, инициализацияBot/Dispatcher, подключение роутеров.config.py— загрузка настроек из окружения и базовых констант (имена, ключи участников, эмодзи, путь к файлу данных, ключ OpenRouter).storage.py— файловое хранилище (score_data.json):- счёт и желания для двух участников;
- список мест (
places); - список животных (
zoo).
handlers/— обработчики aiogram:inline.py— inline‑режим, первоначальная карточка, список мест, зоопарк, рандом 1/2, точка входа в вопрос для разговора;callbacks.py— обработчики нажатий на кнопки (изменение счёта, конвертация в желания, трата желания, генерация вопроса через OpenRouter);places.py— работа со списком мест в чате с ботом (добавление, редактирование, переключение статуса, фильтры);zoo.py— работа с «зоопарком желаний» (список, добавление, редактирование, удаление).
keyboards.py— inline‑ и reply‑клавиатуры (основное меню, меню мест, меню зоопарка, фильтры списка мест).texts.py— текстовые шаблоны для вывода счёта, списка мест и зоопарка.score_data.json— JSON‑файл с текущим состоянием.
При необходимости файловое хранилище можно заменить на БД (PostgreSQL, SQLite и т.п.), переопределив функции load_data / save_data и соответствующие места вызова.
- Все данные сохраняются в файле
score_data.jsonв корне проекта. - Структура включает:
- блоки по каждому участнику с
scoreиwishes; - массив
placesс полямиid,title,visited,author; - массив
zooс полямиid,title.
- блоки по каждому участнику с
- При отсутствии файла или при ошибке чтения создаётся новое состояние с нулевыми значениями.
Учтите, что при удалении файла score_data.json данные будут потеряны.
- Настраиваемые имена участников и эмодзи через команды/интерфейс, а не только через
config.py. - История изменений счёта и желаний.
- Веб‑панель или отдельная команда для просмотра статистики.
- Перенос хранилища из JSON в БД.