1
0
Fork 0
mirror of https://github.com/EDeev/y.calendarkin.git synced 2026-10-07 16:37:50 +03:00
Commit graph

17 commits

Author SHA1 Message Date
4055242ddf
Уведомления о новых, удалённых и перенесённых событиях (#5)
При обновлении календаря (раз в 13 минут) старая выгрузка сравнивается с новой по UID события.
Бот присылает одно сообщение со списком изменений: новое событие, удалено, перенесено (было/стало).
Учитываются и отдельные вхождения повторяющихся событий — перенос (RECURRENCE-ID) и удаление
(EXDATE). Прошедшие события пропускаются: Яндекс выгружает всю историю календаря. В сообщении —
не больше 10 изменений, остальные одной строкой «…и ещё N».

Команда /changes включает и выключает эти уведомления; по умолчанию включены у всех, колонка
alarms.changes добавляется при запуске. При подписке и замене ссылки сравнения нет.

Closes #2
2026-10-07 16:27:58 +03:00
3db58a13ab Образы на git.deev.su вместо dcr.deev.su: реестр zot выведен из работы, копию из GHCR делает синхронизатор 2026-10-06 17:04:19 +03:00
abafd7a55d Хранилище — PostgreSQL вместо двух файлов SQLite
code/sql.py на psycopg 3 с пулом соединений (переподключается сам); таблицы users, urls,
alarms — в PostgreSQL user и url зарезервированы. Внутренние номера пользователей сохраняются:
на них ссылаются файлы календарей data/icals/<номер>.ics. scripts/migrate_sqlite.py переносит
старые базы со сверкой (проверено на копии рабочих: 25 пользователей, 9 подписок).
Тесты хранилища и переноса — на PostgreSQL в CI; compose поднимает бота вместе с базой.
2026-10-06 11:46:39 +00:00
5fdf39e0b5 README на русском и английском 2026-10-05 19:28:43 +00:00
73690afd8f Зависимости по рабочему окружению, тесты, CI, Docker и лицензия MIT
Тесты разбора календаря (события на сегодня, повторения, UNTIL, проверка ссылки, текст
уведомления). Образ по тегу v* публикуется в GHCR и dcr.deev.su.
2026-10-05 19:28:43 +00:00
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
18e79e24a5 Версия на aiogram 3 — та, что работает на сервере
В репозитории оставался код на aiogram 2 (executor, message_handler), а requirements.txt
уже требовал aiogram 3 — по README бот не запускался (issue #1). Переписанная версия с
разделением на bot.py / handlers.py / init.py давно работала на сервере, теперь она и здесь.
Переводы строк приведены к LF.
2026-10-05 19:22:10 +00:00
31bf093d94 README.md 2025-06-30 20:10:52 +03:00
912b106abc README.md 2025-06-30 19:53:09 +03:00
53372f0e11 requirements 2025-06-30 19:51:24 +03:00
Egor Deev
8a62313eda v. 1.2 2024-02-01 21:55:40 +04:00
Egor Deev
8863b6face v. 1.1 2024-02-01 20:38:23 +04:00
Egor Deev
7c7ba3e98a v. 1.0b 2024-02-01 20:17:03 +04:00
Egor Deev
154c100511 Delete script.py 2024-02-01 20:16:34 +04:00
Egor Deev
24edfe7c1a v. 1.0b 2024-02-01 20:15:42 +04:00
Egor Deev
9370f00bee v. 1.0 2024-01-28 14:29:05 +04:00
Egor Deev
6a5b2e00fb Initial commit 2024-01-28 14:26:42 +04:00