Бот для децентрализованного мессенджера Delta Chat, предназначенный для удобной мобильной публикации постов и изображений в статический блог на Astro (gluek.info и другие шаблоны на Astro).
Проект создан в соответствии с принципами IndieWeb / POSSE (Publish on Own Site, Syndicate Elsewhere): свой сайт и Git-репозиторий остаются единственным источником правды (Single Source of Truth), а мобильный ввод превращается в быстрый удобный пайплайн.
🛠️ Стек и Технологии
- Язык: Python 3.11 (asyncio)
- Мессенджер SDK:
deltachat2RPC +deltabot_cli - Интеграция с Git: Forgejo / Gitea REST API (
ChangeFilesOptions) - База данных: SQLite (авторизация владельца, логирование постов и статистика)
- Контейнеризация: Docker + docker-compose + Caddy
- CI/CD & Уведомления: GitHub Actions + ntfy.gluek.info
✨ Ключевые Особенности
-
Атомарный single-commit постинг: В отличие от поэтапной загрузки файлов, бот использует эндпоинт
ChangeFilesOptionsREST API. Текст статьи.mdи все прикрепленные фотографии передаются в одном JSON-пейлоаде. В результате в Git создается ровно один коммит, а пайплайн сборки сайта вызывается только один раз. -
Автоматическая транслитерация и обработка:
- Заголовок из первой строки автоматически очищается и транслитерируется из кириллицы в латинский URL-slug (например,
Про сервис One-Face→pro-servis-one-face). - Автоматически генерируется описание (
description) из первых 150 символов поста. - Изображения автоматически разворачиваются в теги
.
- Заголовок из первой строки автоматически очищается и транслитерируется из кириллицы в латинский URL-slug (например,
-
Поддержка гибких структур Astro:
single_file(как вgluek.info): посты сохраняются вsrc/content/blog/<slug>.md, а медиа — вpublic/images/<slug>/.folder(как вAstro Nano): пост сохраняется вsrc/content/blog/<slug>/index.md, а медиафайлы — рядом в ту же папку с относительными ссылками./image.jpg.
-
Безопасность и сквозное шифрование:
- Сквозное шифрование (E2EE): Передача сообщений между мессенджером и ботом защищена E2EE (OpenPGP/Autocrypt).
- Строгая авторизация: Бот принимает посты только от авторизованного администратора, проверяя совпадение адреса почты и криптографического OpenPGP fingerprint (
/initadminили CLI-скриптset_admin.py). Все попытки сторонней публикации отвергаются (⛔ Access Denied). - Защита токенов: Токен доступа к Git API (
FORGEJO_TOKEN) хранится исключительно в переменном окружении.envна сервере и не раскрывается клиентам.