Implement Melora: *arr media arrival webhook announcer for Matrix

Replace Bellhop scaffolding with full Melora implementation:
- FastAPI webhook endpoints for Radarr, Sonarr, and Lidarr
- matrix-nio integration with threaded room posting
- SQLite for thread root persistence and event deduplication
- Message formatting with plain text and HTML for each media type
- Shared secret authentication via X-Arr-Webhook-Secret header
- Updated dependencies, configuration, and documentation

https://claude.ai/code/session_01DuzWyMMXvLMB4VxEwJyV4X
This commit is contained in:
Claude
2026-02-28 07:38:07 +00:00
parent e6e47fd470
commit aaacd0b9bf
13 changed files with 557 additions and 222 deletions

View File

@@ -1,30 +1,16 @@
# Matrix homeserver
MATRIX_HOMESERVER_URL=https://matrix.example.com
# Matrix audit bot (pre-authenticated)
MATRIX_AUDIT_ROOM_ID=!roomid:example.com
MATRIX_BOT_USER_ID=@bot:example.com
# Matrix bot (pre-authenticated)
MATRIX_BOT_USER_ID=@melora-bot:example.com
MATRIX_BOT_ACCESS_TOKEN=syt_bot_token_here
# Radarr
RADARR_URL=https://radarr.example.com
RADARR_API_KEY=your_radarr_api_key
RADARR_QUALITY_PROFILE_ID=1
RADARR_ROOT_FOLDER=/movies
# Matrix room for arrival announcements (unencrypted)
MATRIX_ARRIVALS_ROOM_ID=!roomid:example.com
# Sonarr
SONARR_URL=https://sonarr.example.com
SONARR_API_KEY=your_sonarr_api_key
SONARR_QUALITY_PROFILE_ID=1
SONARR_ROOT_FOLDER=/tv
# Shared secret for *arr webhook authentication
# Set the same value in each *arr instance under Settings → Connect → Webhook
WEBHOOK_SECRET=your_shared_secret_here
# Lidarr
LIDARR_URL=https://lidarr.example.com
LIDARR_API_KEY=your_lidarr_api_key
LIDARR_QUALITY_PROFILE_ID=1
LIDARR_ROOT_FOLDER=/music
# App
# SESSION_SECRET_KEY is auto-generated if omitted. A new key on every restart invalidates all sessions.
# SESSION_SECRET_KEY=
DATABASE_PATH=bellhop.db
# SQLite database path
DATABASE_PATH=melora.db