https://github.com/timur-sa/schedulebot
Made for Sirius IT-Round.
https://github.com/timur-sa/schedulebot
aiogram apscheduler json python sqlalchemy telegram
Last synced: 2 months ago
JSON representation
Made for Sirius IT-Round.
- Host: GitHub
- URL: https://github.com/timur-sa/schedulebot
- Owner: Timur-SA
- Created: 2025-07-13T14:03:22.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-07-13T18:50:16.000Z (12 months ago)
- Last Synced: 2026-04-30T12:35:02.224Z (2 months ago)
- Topics: aiogram, apscheduler, json, python, sqlalchemy, telegram
- Language: PowerShell
- Homepage: https://t.me/SiriusSchedule_bot
- Size: 285 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ScheduleBot
Telegram-бот с возможностью получения напоминаний про события, а также создания своих.
**Сделано для ИТ-Раунда.**
**Автор: Степанов Тимур**
---
# Установка
1) Перейти в корень проекта:
```shell
...\Downloads> cd .\ScheduleBot\
```
2) Активировать venv:
```shell
...\ScheduleBot> .\Scripts\Activate
```
3) Установить зависимости:
```shell
(ScheduleBot) ...\ScheduleBot> pip install -r .\requirements.txt
```
4) Указать токен:
```python
#./=BOT=/config.py
from aiogram import Bot
bot = Bot(token="ТОКЕН")
```
> [!IMPORTANT]
> Тестовый токен уже указан, шаг 4 **РЕКОМЕНДУЕТСЯ** пропустить.
> Токен будет доступен в рамках конкурса, после окончания проверки проектного этапа токен перестанет действовать
5) Запуск:
```shell
(ScheduleBot) ...\ScheduleBot> python ".\=BOT=\main.py"
```
6) Бот запущен!
> [!IMPORTANT]
> При стандартном токене, бот доступен по ссылке: https://t.me/SiriusUniversitySchedule_Bot (@SiriusUniversitySchedule_Bot)
# Технические решения
## Aiogram
Используется асинхронная библиотека для мессенджера Telegram.
Выбор обусловлен популярностью библиотеки, широким функционалом, большим количеством документации/обучающих материалов, а также: возможностью улучшения быстродействия программы в будущем.
Имеется ввиду полный переход на асинхронные библиотеки, функции, а также распараллеливание задач.
## JSON
Простота формата и его абсолютная универсальность повиляла на выбор именно этого типа данных для их хранения, записи и чтения.
### Структура:
**global.json:**
```JSON
{
"2025-07-15":
[
{
"time": "09:00",
"name": "Доброе утро, Сириус!",
"group": ".ALL"
},
{
"time": "13:00",
"name": "Вебинар",
"group": ".ALL"
}
]
}
```
> [!NOTE]
> В данных уже существуют группы пользователей, но их обработка не производится. Если реализовать проверку на принадлежность к группе, то появиться возможность создавать события для отдельных классов учеников, групп студентов и т.п.
**{uid}.json:**
```JSON
{
"2025-07-14":
[
{
"time": "10:00",
"name": "Дедлайн по ИТ-Раунду!"
}
]
}
```
> [!NOTE]
> Можно значительно ускорить работу с данными, заменив массив словарей на словарь (день, ключ - дата) со словарями (события, ключ - время).
> Сейчас для получения доступа к определённому событию необходимо получить доступ ко дню (за **O(1)**) и к самому событию (за **O(n)**, где **n** - максимальное количество событий в одном дне).
> При изменении структуры доступ будет осуществляться за **O(1)**
## APScheduler и SQLAlchemy
Для отправления сообщений в определённое время (напоминания), используется библиотека APScheduler, которая хранит все запланированные задачи в БД SQLite, доступ к которой осуществляется через SQLAlchemy.
Такой выбор обусловлен надёжностью и автономностью APScheduler, а также тем, что хранение запланированных задач уже полностью реализовано в библиотеке.
## Структура проекта
### =BOT=: (в порядке разработки)
- **main.py** - Запуск бота, APScheduler
Реализовано базовое логирование состояния бота
- **handlers.py** - Обработка сообщений и команд.
Реализована работа с FSM, валидация аргументов команд с помощью регулярных выражений.
Доступные функции см. в блоке "## Функционал"
- **data.py** - Работа с JSON.
Реализовано хранение, запись, изменение и чтение данных.
- **keyboards.py** - Клавиатуры для удобного ввода
Добавляет возможность подтверждения рискованных операций (удаление данных).
- **reminders.py** - Планирование выполнения функций с помощью APScheduler.
Позволяет боту присылать сообщения самостоятельно в заданное время.
- **config.py** - Доступ к токену и к корню проекта.
### =BOT=/DataTables:
**global.json** - События
**{uid}.json** - Напоминания
**notifications.sqlite** - БД для APScheduler
## Функционал
Реализованы все обязательные функции из ТЗ.
Полный список команд:
- **/start**
- **/today**
- **/tomorrow**
- **/add** {Название из нескольких слов} {ГГГГ-ММ-ДД} {чч:мм}
- **/del (/delete)** {ГГГГ-ММ-ДД} {чч:мм} [^1]
- **/help**
- **/schedule**
[^1]: Удалить напоминание из списка (**/today** и **/tomorrow**)
---
**Исходя из разработанного функционала, считаю разработку MVP успешной.**