Бот предназначен для группового контроля дедлайнов (один список на всех). Каждый пользователь может отдельно сохранять список выполенных заданий.
Проект (Telegram бот) написан на python 3.9 c Mongo в качестве БД.
Дисклеймер: проект 2021-го года, основаня логика бота и взаимодействия с БД не пересматривалась
Обновление 15.10.2025 - бот переведен на Python-Telegram-Bot и MongoDB
Вообще, знания python 3.x и основ любого SQL достаточно для работы, но далее приведен список всего, что использовалось (отсортировано по убыванию важности).
Для управления телеграм ботом используется библиотека python-telegram-bot (PTB).
Для управления базой данных MongoDB - pymongo.
В качестве хостинга - обычная VDS на убунту.
Для структурирования заданий(дедлайнов) важен модуль datetime (для махинаций с временными поясами - pytz).
Внешние модули перечислены в requirements.txt
Деплой с помощью Docker.
В main.py описана целиком логика бота.
Про уведомления: каждый пользователь настраивает свой профиль уведомлений с любых их количеством, время до деделайна можно регулировать в часах. На каждый дедлайн на каждую пару подписчик-дедлайн выстраивается отложенная таска. Если профиль настроен так, что если есть уведомление, которое должно произойти раньше, нр
В файле my_collections собраны побочные функции по типу конфигураторов клавиатур для телеграм, преобразователей форматов времени и подобные.
В файле config.py константы
В файле database.py осуществляется управление базой данных (также определены классы-модели таблиц deadlines и subscribers).
Колонны (поля) таблицы deadlines:
| Название | Тип | Описание |
|---|---|---|
| dl_id | integer | Уникальный номер. PRIMARY KEY, autoincrement +1 |
| subject | text | Предмет дедлайна |
| task | text | Описание задания |
| date | real | Дата истечения |
Колонны (поля) таблицы subscribers:
| Название | Тип | Описание |
|---|---|---|
| user_id | numeric | Цифровой ID пользователя телеграм. PRIMARY KEY |
| marked_done | integer[] | Номера дедлайнов, отмеченных как выполненные |
Для обращения к БД используются функции save_<имя таблицы>. В функцию передается добавляемый/изменяемый/удаляемый объект класса, соответствующего таблице и число, обозначающее действие: 0 - добавить, 1 - удалить, 2 - изменить. Все данные загружаются функцией load(). Класс-модель таблицы может содержать дополнительные поля и методы, упрощающие работу с данными, касающимися этого класса, внутри скриптов.
Есть два профиля docker-compose, один только с ботом, другой сразу с mongoDB. Первый рассчитан на удаленную MongoDB. Необхоимо создать .env файл в директории со всеми остальными исходниками, где задать:
BOT_TOKEN
DB_NAME
MONGO_URI
MONGO_URI - строка для подключения к БД, при локально развертнутой БД указываем на локалхосте, в ином случае зависит от того, как именно работает удаленный инстанс (VDS/PaSS/whatever).
Пользоваться ботом (кроме /start и /get_my_id) могут только подтвержденные пользователи. Добавление в список подтвержденных пользователей только владельцем через скрытую команду /verify (доступна только ему). Админы добавляются вручную в конфиг. У админов есть свои команды (они могут их смотреть через /admin_help) - это /edit - поменять дату дедлайна, и /announce - объявление для подписчиков бота. Также удалить они могут любой дедлайн.
Бот расчитан на деплой в VDS с поддержкой Docker. Дешевые VDS на старых процессорах (без AVX2 и прочих инструкций) не смогут запустить актуальную версию Mongo, также Mongo не будет работать с 512 Мб ОЗУ. В идеале переписать на SQLite, но я стандартизировал со своими актуальными ботами. В моём случае для своего инстанса бота я использую бесплатный тариф от Mongo Atlas.
P.S. Для моих одногруппников, что пожелают добавить в бота фич. Пишите мне в телегу или вк. Буду рад, конечно, если до деплоя сделаете всё сами, но и помочь буду не против.