Skip to content

Inline Telegram bot for couples to track wishes, places to visit, and generate conversation starters via OpenRouter API.[1] Built with Python and aiogram.

License

Notifications You must be signed in to change notification settings

nmanachinsky/WishLocker_Inline_Bot

Repository files navigation

License

WishLocker Inline Bot

Инлайн‑бот для 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 вместо спама новыми сообщениями.

Установка и запуск

1. Клонировать репозиторий

git clone https://github.com/BUka228/WishLocker_Inline_Bot.git
cd WishLocker_Inline_Bot

2. Создать и активировать виртуальное окружение (рекомендуется)

python3 -m venv venv
source venv/bin/activate  # macOS / Linux
# для Windows:
# venv\Scripts\activate

3. Установить зависимости

Если у вас уже есть requirements.txt, используйте его. В противном случае достаточно установить основные пакеты:

pip install aiogram python-dotenv aiohttp

4. Настроить переменные окружения

Создайте файл .env в корне проекта:

BOT_TOKEN=<токен_от_BotFather>

# Опционально, но нужно для работы генерации вопросов для разговора:
OPENROUTER_API_KEY=<ключ_OpenRouter>

Переменные загружаются в config.py через python-dotenv.

Без OPENROUTER_API_KEY все функции бота, кроме генерации вопросов для разговора, будут работать штатно. В этом случае при нажатии кнопки вопроса пользователь увидит понятное сообщение о том, что ключ не настроен.

5. Запустить бота

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 перезапустите бота.


Как пользоваться

Inline‑режим (счёт желаний и списки)

  1. Добавьте бота в Telegram.

  2. В любом чате начните вводить:

    @имя_бота
    
  3. Выберите одну из карточек:

    • «Показать текущий счёт» — основная карточка со счётом и кнопками.
    • «Список мест для желаний» — список мест (по умолчанию непосещённые).
    • «Зоопарк желаний» — список животных.
    • «Вопрос для разговора» (вход через специальную карточку с кнопкой).
  4. Отправьте карточку в чат: под сообщением появятся кнопки.

  5. Используйте кнопки, чтобы изменять счёт, тратить желания или управлять списками.

  6. Чтобы добавить произвольное количество очков, напишите число после имени бота:

    @имя_бота 50
    

    Появится вариант начислить именно это количество выбранному участнику.

Чат с ботом (места и зоопарк)

В личном чате с ботом доступны дополнительные меню:

  1. Отправьте /start — бот покажет главное меню.
  2. Выберите:
    • 📋 Места — работа со списком мест:
      • Просмотр всех мест.
      • Добавление нового места («➕ Добавить место»).
      • Фильтрация на непосещённые / посещённые.
      • Редактирование/удаление мест через 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 в БД.

About

Inline Telegram bot for couples to track wishes, places to visit, and generate conversation starters via OpenRouter API.[1] Built with Python and aiogram.

Topics

Resources

License

Stars

Watchers

Forks

Languages