Skip to content

GaussGun3000/DeadlinerTelegramBot

Repository files navigation

Deadliner BOT

Бот предназначен для группового контроля дедлайнов (один список на всех). Каждый пользователь может отдельно сохранять список выполенных заданий.

Проект (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. Для моих одногруппников, что пожелают добавить в бота фич. Пишите мне в телегу или вк. Буду рад, конечно, если до деплоя сделаете всё сами, но и помочь буду не против.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages