Skip to content

MuhammadIbrahimli/Wealth-Logger-Bot

Repository files navigation

Wealth Logger Bot - Телеграм-бот для учёта инвестиций

Телеграм-бот на Python для учёта инвестиций в Bitcoin (BTC) и золото.

Возможности

  • Визуальный интерфейс с интерактивными кнопками
  • Главное меню для быстрой навигации
  • ✅ Регистрация пользователей через /start
  • ✅ Добавление покупок через интерактивный диалог с подсказками
  • ✅ Автоматический расчёт количества актива, средней цены, текущей стоимости и прибыли/убытка
  • Портфель с цветовой индикацией (зелёный = прибыль, красный = убыток)
  • Графики статистики (рост инвестиций, история цен, распределение активов)
  • ✅ Детальная статистика по каждому активу
  • ✅ Обновление текущих цен через CoinGecko API
  • Автоматические уведомления о ценах - бот отправляет уведомления при значительных изменениях цен
  • Резерв для покупок - установите резерв и отслеживайте его в портфеле
  • Проверка резерва - предупреждение при превышении резерва при покупке
  • ✅ SQLite база данных для хранения данных

Оптимизации

Бот оптимизирован для быстрой работы и стабильности:

  • Асинхронные запросы к API для получения цен (httpx)
  • 💾 Кэширование цен на 5 минут для уменьшения нагрузки на API
  • 🔄 Пакетное обновление цен - все активы обновляются одновременно
  • 🛡️ Улучшенная обработка ошибок при работе с Telegram и API
  • 📊 Оптимизированные вычисления портфеля (взвешенная средняя цена)
  • 📝 Детальное логирование всех операций в файл bot.log
  • 🎯 Безопасные методы отправки сообщений с обработкой сетевых ошибок
  • ⚙️ Асинхронное создание графиков для ускорения ответов

Установка

  1. Клонируйте репозиторий или скачайте файлы

  2. Установите зависимости:

pip install -r requirements.txt
  1. Для работы графиков установите Google Chrome:

    Графики создаются с помощью библиотеки Plotly, которая требует установленный Google Chrome.

    Вариант 1 (рекомендуется): Установите Chrome вручную:

    • Linux/Docker: Установите Chrome или Chromium:
      # Ubuntu/Debian
      sudo apt-get update && sudo apt-get install -y chromium-browser
      
      # Или используйте официальный скрипт Plotly:
      plotly_get_chrome
    • Windows: Скачайте и установите Chrome с официального сайта
    • macOS: Установите Chrome через Homebrew или скачайте с официального сайта

    Вариант 2: Используйте автоматическую установку через Plotly:

    python -c "import plotly; plotly.io.kaleido.scope.chromium_args += ['--no-sandbox', '--disable-setuid-sandbox']"
    plotly_get_chrome

    Примечание: Если Chrome не установлен, графики не будут создаваться, но бот продолжит работать и покажет текстовую статистику.

  2. Настройте токен бота:

    • Получите токен у @BotFather в Telegram
    • Откройте файл .env и замените your_bot_token_here на ваш токен:
      BOT_TOKEN=ваш_токен_здесь
      
    • Файл .env уже добавлен в .gitignore и не будет закоммичен в репозиторий

Запуск

Локальный запуск:

python main.py

Развертывание на Railway

Railway автоматически определит Dockerfile и установит все зависимости, включая Chrome для графиков.

Шаги для развертывания:

  1. Подключите репозиторий к Railway:

    • Зайдите на railway.app
    • Создайте новый проект
    • Выберите "Deploy from GitHub repo" и подключите ваш репозиторий
  2. Настройте переменные окружения:

    • В настройках проекта Railway добавьте переменную окружения:
      BOT_TOKEN=ваш_токен_здесь
      
    • Опционально можно добавить:
      DATABASE_NAME=wealth_logger.db
      
  3. Railway автоматически:

    • ✅ Обнаружит Dockerfile
    • ✅ Установит все Python зависимости из requirements.txt
    • ✅ Установит Google Chrome и Chromium для графиков
    • ✅ Настроит все необходимые системные библиотеки
    • ✅ Запустит бота
  4. После деплоя:

    • Бот будет автоматически запускаться при каждом обновлении кода
    • Все зависимости, включая Chrome, будут установлены автоматически
    • Графики будут работать без дополнительной настройки

Примечание: Railway использует Dockerfile для сборки образа. Все зависимости, включая Chrome, устанавливаются автоматически при деплое.

Команды бота

Основные команды:

  • /start - Начать работу с ботом (открывает главное меню)
  • /menu - Открыть главное меню с кнопками
  • /buy - Добавить покупку (открывает интерактивный диалог)

Главное меню:

  • ➕ Добавить покупку - Интерактивный диалог для добавления покупки
  • 📊 Портфель - Просмотр портфеля с цветовой индикацией прибыли/убытка и учётом резерва
  • 📈 Статистика - Графики роста, истории цен и распределения активов
  • 🔄 Обновить цены - Обновление текущих цен через API
  • ⚙️ Настройки - Управление уведомлениями и резервами

Настройки:

🔔 Уведомления о ценах:

  • Включите/выключите автоматические уведомления
  • Установите порог изменения цены (по умолчанию 5%)
  • Бот проверяет цены каждые 10 минут и отправляет уведомления при превышении порога

💰 Резерв для покупок:

  • Установите сумму резерва для будущих покупок
  • Резерв отображается в портфеле отдельной строкой
  • При добавлении покупки бот предупреждает, если сумма превышает доступный резерв

Особенности интерфейса:

  • 🟢 Зелёная индикация - прибыль
  • 🔴 Красная индикация - убыток
  • 📊 Графики - визуализация роста инвестиций и распределения активов
  • 💡 Подсказки - краткие пояснения после каждого действия

Поддерживаемые активы

  • BTC (Bitcoin)
  • Gold (Золото)

Структура проекта

wealth-logger-bot/
├── main.py           # Главный файл бота с визуальным интерфейсом
├── database.py       # Работа с базой данных
├── api_client.py     # Работа с API цен
├── charts.py         # Создание графиков статистики
├── config.py         # Конфигурация
├── .env              # Токен бота (создайте этот файл)
├── .gitignore        # Игнорируемые файлы
├── requirements.txt  # Зависимости
└── README.md         # Документация

База данных

Бот использует SQLite базу данных (wealth_logger.db), которая создаётся автоматически при первом запуске.

Таблицы:

  • users - информация о пользователях
  • transactions - транзакции покупок
  • prices - кэш текущих цен
  • user_settings - настройки пользователей (уведомления, резервы)

API

Для получения текущих цен используется CoinGecko API.

Особенности реализации:

  • Асинхронные HTTP-запросы через httpx
  • Кэширование результатов на 5 минут
  • Автоматический fallback на кэш БД при ошибках API
  • Пакетная загрузка цен для нескольких активов одновременно

Логирование

Все операции бота логируются в файл bot.log с детальной информацией:

  • Запросы пользователей
  • Ошибки при работе с API и Telegram
  • Обновления цен
  • Операции с базой данных
  • Отправка уведомлений о ценах

Уровень логирования: INFO (можно изменить в main.py)

Уведомления о ценах

Бот автоматически проверяет изменения цен каждые 10 минут и отправляет уведомления пользователям, у которых включены уведомления.

Как это работает:

  1. Бот сравнивает текущую цену с предыдущей (из кэша БД)
  2. Если изменение превышает установленный порог (по умолчанию 5%), отправляется уведомление
  3. Уведомление содержит информацию о направлении изменения (рост/падение) и процент изменения

Настройка:

  • Включите/выключите уведомления в настройках
  • Измените порог изменения (например, 3% или 10%)
  • Уведомления отправляются только для активов, которые есть в вашем портфеле

Резерв для покупок

Резерв позволяет отслеживать сумму, которую вы планируете оставить для будущих покупок.

Как это работает:

  1. Установите сумму резерва в настройках
  2. Резерв отображается в портфеле отдельной строкой
  3. При добавлении покупки бот предупреждает, если сумма превышает доступный резерв
  4. Общая стоимость портфеля (с резервом) показывается в итоговой сводке

Пример:

  • Резерв: $1000
  • Уже вложено: $600
  • Доступно для покупок: $400

Лицензия

MIT

About

A Telegram bot for tracking Bitcoin (BTC) and gold investments.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors