{"id":29561443,"url":"https://github.com/timur-sa/schedulebot","last_synced_at":"2026-04-30T12:35:15.551Z","repository":{"id":304520302,"uuid":"1018992993","full_name":"Timur-SA/ScheduleBot","owner":"Timur-SA","description":"Made for Sirius IT-Round. ","archived":false,"fork":false,"pushed_at":"2025-07-13T18:50:16.000Z","size":292,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T12:35:02.224Z","etag":null,"topics":["aiogram","apscheduler","json","python","sqlalchemy","telegram"],"latest_commit_sha":null,"homepage":"https://t.me/SiriusSchedule_bot","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Timur-SA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-13T14:03:22.000Z","updated_at":"2025-07-13T18:50:20.000Z","dependencies_parsed_at":"2025-07-13T17:31:02.433Z","dependency_job_id":"706501d4-e297-4516-9ed1-95d86137dea5","html_url":"https://github.com/Timur-SA/ScheduleBot","commit_stats":null,"previous_names":["timur-sa/schedulebot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Timur-SA/ScheduleBot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Timur-SA%2FScheduleBot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Timur-SA%2FScheduleBot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Timur-SA%2FScheduleBot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Timur-SA%2FScheduleBot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Timur-SA","download_url":"https://codeload.github.com/Timur-SA/ScheduleBot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Timur-SA%2FScheduleBot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32465009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiogram","apscheduler","json","python","sqlalchemy","telegram"],"created_at":"2025-07-18T16:10:34.360Z","updated_at":"2026-04-30T12:35:15.544Z","avatar_url":"https://github.com/Timur-SA.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ScheduleBot\nTelegram-бот с возможностью получения напоминаний про события, а также создания своих.\n**Сделано для ИТ-Раунда.**\n**Автор: Степанов Тимур**\n\n---\n# Установка\n1) Перейти в корень проекта:\n```shell\n...\\Downloads\u003e cd .\\ScheduleBot\\\n```\n\n2) Активировать venv:\n```shell\n...\\ScheduleBot\u003e .\\Scripts\\Activate\n```\n\n3) Установить зависимости:\n```shell\n(ScheduleBot) ...\\ScheduleBot\u003e pip install -r .\\requirements.txt\n```\n\n4) Указать токен:\n```python\n#./=BOT=/config.py\nfrom aiogram import Bot\n\nbot = Bot(token=\"ТОКЕН\")\n```\n\n\u003e [!IMPORTANT]\n\u003e Тестовый токен уже указан, шаг 4 **РЕКОМЕНДУЕТСЯ** пропустить.\n\u003e Токен будет доступен в рамках конкурса, после окончания проверки проектного этапа токен перестанет действовать\n\n5) Запуск:\n```shell\n(ScheduleBot) ...\\ScheduleBot\u003e python \".\\=BOT=\\main.py\"\n```\n\n6) Бот запущен!\n\u003e [!IMPORTANT]\n\u003e При стандартном токене, бот доступен по ссылке: https://t.me/SiriusUniversitySchedule_Bot (@SiriusUniversitySchedule_Bot)\n\n# Технические решения\n## Aiogram\nИспользуется асинхронная библиотека для мессенджера Telegram.\nВыбор обусловлен популярностью библиотеки, широким функционалом, большим количеством документации/обучающих материалов, а также: возможностью улучшения быстродействия программы в будущем.\nИмеется ввиду полный переход на асинхронные библиотеки, функции, а также распараллеливание задач.\n\n## JSON\nПростота формата и его абсолютная универсальность повиляла на выбор именно этого типа данных для их хранения, записи и чтения.\n### Структура: \n**global.json:**\n```JSON\n{\n\t\"2025-07-15\":\n\t[\n\t\t{\n\t\t\t\"time\": \"09:00\",\n\t\t\t\"name\": \"Доброе утро, Сириус!\",\n\t\t\t\"group\": \".ALL\"\n\t\t},\n\t\t{\n\t\t\t\"time\": \"13:00\",\n\t\t\t\"name\": \"Вебинар\",\n\t\t\t\"group\": \".ALL\"\n\t\t}\n\t]\n}\n```\n\n\u003e [!NOTE]\n\u003e В данных уже существуют группы пользователей, но их обработка не производится. Если реализовать проверку на принадлежность к группе, то появиться возможность создавать события для отдельных классов учеников, групп студентов и т.п.\n\n**{uid}.json:**\n```JSON\n{\n\t\"2025-07-14\":\n\t[\n\t\t{\n\t\t\t\"time\": \"10:00\",\n\t\t\t\"name\": \"Дедлайн по ИТ-Раунду!\"\n\t\t}\n\t]\n}\n```\n\n\u003e [!NOTE]\n\u003e Можно значительно ускорить работу с данными, заменив массив словарей на словарь (день, ключ - дата) со словарями (события, ключ - время).\n\u003e Сейчас для получения доступа к определённому событию необходимо получить доступ ко дню (за **O(1)**) и к самому событию (за **O(n)**, где **n** - максимальное количество событий в одном дне). \n\u003e При изменении структуры доступ будет осуществляться за **O(1)**\n\n## APScheduler и SQLAlchemy\nДля отправления сообщений в определённое время (напоминания), используется библиотека APScheduler, которая хранит все запланированные задачи в БД SQLite, доступ к которой осуществляется через SQLAlchemy.\nТакой выбор обусловлен надёжностью и автономностью APScheduler, а также тем, что хранение запланированных задач уже полностью реализовано в библиотеке.\n\n## Структура проекта\n### =BOT=: (в порядке разработки)\n- **main.py** - Запуск бота, APScheduler\nРеализовано базовое логирование состояния бота\n\n- **handlers.py** - Обработка сообщений и команд.\nРеализована работа с FSM, валидация аргументов команд с помощью регулярных выражений.\nДоступные функции см. в блоке \"## Функционал\"\n\n- **data.py** - Работа с JSON.\nРеализовано хранение, запись, изменение и чтение данных.\n\n- **keyboards.py** - Клавиатуры для удобного ввода\nДобавляет возможность подтверждения рискованных операций (удаление данных). \n\n- **reminders.py** - Планирование выполнения функций с помощью APScheduler.\nПозволяет боту присылать сообщения самостоятельно в заданное время.\n\n- **config.py** - Доступ к токену и к корню проекта.\n### =BOT=/DataTables:\n**global.json** - События\n**{uid}.json** - Напоминания\n**notifications.sqlite** - БД для APScheduler\n## Функционал\nРеализованы все обязательные функции из ТЗ.\nПолный список команд:\n- **/start**\n- **/today**\n- **/tomorrow**\n- **/add** {Название из нескольких слов} {ГГГГ-ММ-ДД} {чч:мм} \n- **/del (/delete)** {ГГГГ-ММ-ДД} {чч:мм} [^1]\n- **/help**\n- **/schedule**\n\n[^1]: Удалить напоминание из списка (**/today** и **/tomorrow**)\n\n\n---\n**Исходя из разработанного функционала, считаю разработку MVP успешной.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimur-sa%2Fschedulebot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimur-sa%2Fschedulebot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimur-sa%2Fschedulebot/lists"}