Проблема: У нас с девушкой раздельный бюджет (каждый платит за себя, либо делим пополам). Всех всё устраивает, но в такой модели походы в магазин становятся настоящей мукой. После каждой покупки продуктов на несколько дней надо сесть и распределить продукты на общие, личные того, кто платил, и личные "должника", и записать это в долговой список.
Решение: После нескольких таких разборов стопки чеков я всё же решил потратить недельку и написать 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)
Приветственное сообщение, которое подсказывает, как работать с ботом.
В нижней панели имеется две кнопки. Одна выводит справку об основных командах. А вторая быстро выводит результат: кто сколько должен в итоге.
Далее следует добавить пользователей в базу данных (далее БД):
И добавим второго:При попытке добавить третьего вызовется ошибка. Это бот для двух человек
На этом основная настройка закончена. Теперь вы можете пользоваться ботом в "штатном режиме"!
Для начала можно просто загрузить фото с QR-кодом из чека:
Бот предложит 3 варианта:
- Если вы ошиблись, то просто нажмите кнопку "Отменить"
- Если вы знаете, что покупали только общие продукты, то просто нажмите "Пополам"
- Если же вы покупали какие-то продукты только для себя любимого, то кнопка "Уточнить" для вас
Воспользуемся последним вариантом. Бот предложит выбрать, кто оплатил покупку.
А потом вы можете уточнить товары при помощи кнопок, как это описано в сообщении.
В завершении нажимаем "Завершить уточнение"
Проверить нашу покупку в списке долгов можно при помощи команды:
Снова отправляем фото чека
Но в этот раз мы точно знаем, что покупка была общей. Поэтому нам просто нужно разделить сумму пополам и записать её в базу долгов.
Мы видим, что обе наши покупки в базе. И мы легко можем узнать, кто и сколько должен.
Если у вас нет чека (например: автобус, такси и т.д.) или вы просто его выкинули, но помните сумму, и что она общая. То вы можете просто написать свою покупку в формате "МАГАЗИН - СУММА" ('-' обязательно).
Но, если вы вдруг осознали, что ошиблись с расходом, то можете в любой момент удалить его из БД.
Если в какой-то момент вам надоело ходить в должниках, и вы отдали итоговый долг, то можете смело стирать все долги из БД и быть свободным человеком.
Естественно, это действие необратимо. Поэтому будьте внимательны перед тем, как подтверждать его. После подтверждения все расходы удалятся (пользователи остаются).
Если в вашей жизни начался новый этап (или вам просто надело быть Котиксоном), то в любой момент можно произвести обнуление. Данная операция очистит всю БД, в том числе и долги с пользователями.
После удаления вы увидите подтверждающее сообщение и можете начать всё с белого листа.
Спасибо за внимание к моему проекту, а так же за чтение такого большого README. Хорошего дня!