1
0
Fork 0
mirror of https://github.com/EDeev/y.calendarkin.git synced 2026-10-08 00:39:27 +03:00
Telegram-бот уведомлений о событиях Яндекс.Календаря: сводка на день, напоминания, повторяющиеся события. aiogram 3, icalendar https://t.me/calendarkin_ybot
Find a file
Egor Deev 15bd36580e Исправлены ошибки и уязвимость, улучшены уведомления
Ошибки:
- исключение в фоновых циклах (сбой сети при обновлении календаря, заблокировавший бота
  пользователь, битый календарь) останавливало весь бот — теперь ошибка у одного
  пользователя логируется и не мешает остальным;
- повторяющиеся события с UNTIL местным временем или датой роняли разбор календаря
  (ValueError из dateutil) — UNTIL приводится к UTC;
- названия и описания событий подставлялись в HTML без экранирования: «<» или «&» ломали
  отправку уведомления;
- сообщение до /start и кривой ввод времени напоминаний роняли обработчик;
- при отсутствии файла календаря разбор падал.

Безопасность: ссылка скачивалась без проверки (wget), бота можно было заставить ходить по
любым адресам, включая внутренние. Теперь принимается только https://calendar.yandex.*,
скачивание — через aiohttp с таймаутом и без редиректов, содержимое проверяется как iCal
до замены старого файла.

Уведомления (по issue #3): без даты и года — только время, пустые описание и организатор
не показываются, организатор без «mailto:», для событий на весь день — «Весь день» и без
напоминаний в 00:01; новые команды /link и /unsubscribe.

Прочее: токен из BOT_TOKEN, таблицы SQLite создаются при первом запуске (пустые базы
убраны из репозитория), ссылка «АВТОР» — на EDeev вместо чужого теперь профиля IGlek.
2026-10-05 19:28:43 +00:00
code Исправлены ошибки и уязвимость, улучшены уведомления 2026-10-05 19:28:43 +00:00
data Исправлены ошибки и уязвимость, улучшены уведомления 2026-10-05 19:28:43 +00:00
db Исправлены ошибки и уязвимость, улучшены уведомления 2026-10-05 19:28:43 +00:00
.gitattributes Версия на aiogram 3 — та, что работает на сервере 2026-10-05 19:22:10 +00:00
README.md README.md 2025-06-30 20:10:52 +03:00
requirements.txt requirements 2025-06-30 19:51:24 +03:00

🗓️ Y.Calendarkin

Telegram-бот для упрощенного получения уведомлений о событиях из Яндекс.Календаря.

Python Aiogram License

📖 Описание

Y.Calendarkin — некоммерческий проект, предназначенный для автоматизации уведомлений о календарных событиях из Яндекс.Календаря через Telegram. Бот позволяет настроить гибкую систему напоминаний и получать актуальную информацию о предстоящих событиях.

✨ Основные возможности

  • 📅 Импорт календаря — поддержка ICal ссылок из Яндекс.Календаря
  • ⏰ Гибкие уведомления — настройка времени напоминаний (до 60 минут)
  • 🌅 Ежедневные отчеты — утренние сводки событий на день
  • 🎯 Моментальные уведомления — оповещения в момент начала события
  • 🌍 Поддержка часовых поясов — автоматическое определение из календаря
  • 📋 Просмотр событий — список мероприятий на текущий день

🛠️ Технологический стек

  • Backend: Python 3.8+
  • Bot Framework: Aiogram 3.x
  • Database: SQLite
  • Calendar Processing: icalendar, dateutil
  • HTTP Client: wget
  • Timezone Support: pytz

🚀 Установка и запуск

Предварительные требования

pip install -r requirements.txt

Настройка

  1. Создайте нового бота через @BotFather
  2. Получите токен и добавьте его в config.py:
TOKEN = "your_bot_token_here"
  1. Создайте структуру каталогов:
mkdir -p data/icals db

Запуск

cd code
python bot.py

📝 Использование

Начало работы

  1. Запустите бота командой /start
  2. Отправьте ICal ссылку вашего Яндекс.Календаря
  3. Настройте уведомления по своему усмотрению

Основные команды

Команда Описание
/help Справочная информация
/list События на сегодня
/notif Включить/выключить уведомления
/daily Ежедневные утренние сводки
/moment Уведомления в момент события
/get_alarm Информация о текущих настройках
/edit_alarm Изменение времени уведомлений
/stop_alarm Отключение второго уведомления

Получение ICal ссылки

  1. Откройте Яндекс.Календарь
  2. Перейдите в настройки календаря
  3. Найдите раздел "Экспорт"
  4. Скопируйте ссылку в формате ICal
  5. Отправьте ссылку боту

🏗️ Архитектура проекта

y.calendarkin/
├── code/
│   ├── bot.py          # Основная логика бота
│   ├── config.py       # Конфигурация
│   ├── script.py       # Обработка календарных файлов
│   └── sql.py          # Работа с базой данных
├── data/
│   ├── icals/          # Загруженные календари
│   └── photo_edit_alarm.jpg
├── db/                 # База данных SQLite
└── requirements.txt

📊 База данных

Проект использует две основные таблицы:

  • user — информация о пользователях и их календарях
  • alarm — настройки уведомлений для каждого пользователя

🔧 Настройка уведомлений

  • Первое уведомление: за 15 минут до события (по умолчанию)
  • Второе уведомление: за 5 минут до события (по умолчанию)
  • Диапазон настройки: от 1 до 59 минут
  • Ежедневные сводки: в 8:00 по часовому поясу пользователя

📄 Лицензия

Этот проект является некоммерческим и распространяется под лицензией MIT.

👨‍💻 Автор

Деев Егор Викторович - Backend Developer


Этот бот предназначен для личного использования и не является коммерческим продуктом.

Создано с ❤️ от вашего дорогого - deev.space ©