/suricate_budget_bot

Бот для отслеживания долгов друг другу.

Primary LanguagePython

Suricate bot

Введение

Проблема: У нас с девушкой раздельный бюджет (каждый платит за себя, либо делим пополам). Всех всё устраивает, но в такой модели походы в магазин становятся настоящей мукой. После каждой покупки продуктов на несколько дней надо сесть и распределить продукты на общие, личные того, кто платил, и личные "должника", и записать это в долговой список.

Решение: После нескольких таких разборов стопки чеков я всё же решил потратить недельку и написать Telegram-бота для автоматизации данной задачи. "Киллер фичей" данного бота я считаю возможность считать список продуктов и дату покупки из QR-кода на чеке. Но так как парсинг этих данных связан с ФНС, то проект может быть полезен в целом для людей из России. Именно поэтому README, комментарии и фразы бота на русском. Проект получился достаточно личным и "семейным", но если вы столкнулись с такой же проблемой, или вам просто хочется посмотреть на него, то приятного просмотра. Спасибо, что загляну ли в мой репозиторий :)

Настройка

Создать файл bot_config.py с подобным содержанием:

INN = "ваш ИНН"
PASSWORD = "пароль от портала ФНС"
CLIENT_SECRET = "с портала ФНС"

TOKEN = "токен бота"
SELECTED_USERS = [123456789, 012345678]  # id пользователей с доступом к боту (9 цифр)

Тесты

В репозитории есть файлы: test_db.py и test_qr_nalog.py. При помощи этих файлов вы можете проверить работоспособность мудулей по работе с базой данных и обработкой QR-кодов.

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

docker build -t suricate_bot ./
docker run -d suricate_bot

(-d, --detach: Run container in background and print container ID)

Работа с ботом

Начало

Приветственное сообщение, которое подсказывает, как работать с ботом.

В нижней панели имеется две кнопки. Одна выводит справку об основных командах. А вторая быстро выводит результат: кто сколько должен в итоге.

Далее следует добавить пользователей в базу данных (далее БД):

И добавим второго:

При попытке добавить третьего вызовется ошибка. Это бот для двух человек

На этом основная настройка закончена. Теперь вы можете пользоваться ботом в "штатном режиме"!

Ежедневное использование

Первая покупка c чеком

Для начала можно просто загрузить фото с QR-кодом из чека:

Бот предложит 3 варианта:

  • Если вы ошиблись, то просто нажмите кнопку "Отменить"
  • Если вы знаете, что покупали только общие продукты, то просто нажмите "Пополам"
  • Если же вы покупали какие-то продукты только для себя любимого, то кнопка "Уточнить" для вас

Воспользуемся последним вариантом. Бот предложит выбрать, кто оплатил покупку.

А потом вы можете уточнить товары при помощи кнопок, как это описано в сообщении.

В завершении нажимаем "Завершить уточнение"

Проверить нашу покупку в списке долгов можно при помощи команды:

Вторая покупка с чеком

Снова отправляем фото чека

Но в этот раз мы точно знаем, что покупка была общей. Поэтому нам просто нужно разделить сумму пополам и записать её в базу долгов.

Мы видим, что обе наши покупки в базе. И мы легко можем узнать, кто и сколько должен.

Третья покупка (быстрый текстовый вариант)

Если у вас нет чека (например: автобус, такси и т.д.) или вы просто его выкинули, но помните сумму, и что она общая. То вы можете просто написать свою покупку в формате "МАГАЗИН - СУММА" ('-' обязательно).

Но, если вы вдруг осознали, что ошиблись с расходом, то можете в любой момент удалить его из БД.

Чистка БД

Избавляемся от долгов.

Если в какой-то момент вам надоело ходить в должниках, и вы отдали итоговый долг, то можете смело стирать все долги из БД и быть свободным человеком.

Естественно, это действие необратимо. Поэтому будьте внимательны перед тем, как подтверждать его. После подтверждения все расходы удалятся (пользователи остаются).

Новая жизнь

Если в вашей жизни начался новый этап (или вам просто надело быть Котиксоном), то в любой момент можно произвести обнуление. Данная операция очистит всю БД, в том числе и долги с пользователями.

После удаления вы увидите подтверждающее сообщение и можете начать всё с белого листа.

Конец

Спасибо за внимание к моему проекту, а так же за чтение такого большого README. Хорошего дня!