68 lines
2.2 KiB
Markdown
68 lines
2.2 KiB
Markdown
# Design: Matrix-Native MusicLink Routing
|
|
|
|
## Goal
|
|
Make MusicLink a native Matrix bot that listens to multiple rooms and posts follow-up messages in the **same room** that originated the message. This removes Matterbridge from the routing path and eliminates cross-room fan-out.
|
|
|
|
## Background
|
|
Legacy deployment used Matterbridge as an API gateway. When multiple Matrix rooms were configured in a single Matterbridge gateway, messages fanned out to other rooms, causing unintended cross-posting (including DM leakage). The system is now Matrix-native.
|
|
|
|
## Objectives
|
|
- **Correct routing:** Responses go back to the originating room (no cross-room fan-out).
|
|
- **Multi-room support:** One MusicLink instance can monitor multiple Matrix rooms.
|
|
- **No fan-out bus:** Remove Matterbridge dependency for routing.
|
|
- **Minimal operational complexity:** Single service, single config, single token.
|
|
|
|
## Non-Goals
|
|
- Replacing mautrix-slack (Slack ↔ Matrix bridge remains).
|
|
- Adding new link providers beyond current MusicLink behavior.
|
|
|
|
## High-Level Architecture
|
|
|
|
```
|
|
Slack Room
|
|
-> mautrix-slack (Matrix portal room)
|
|
-> MusicLink (Matrix-native bot)
|
|
-> same Matrix portal room (follow-up message)
|
|
-> mautrix-slack -> Slack
|
|
```
|
|
|
|
## Current Implementation
|
|
|
|
### 1) Matrix Client
|
|
- Uses mautrix-go with a bot access token.
|
|
- Syncs events from configured rooms.
|
|
- Ignores messages from the bot itself.
|
|
- Posts responses as standalone messages in the same room (no reply/thread relation).
|
|
|
|
### 2) Room Configuration
|
|
Matrix allowlist in config:
|
|
|
|
```toml
|
|
[matrix]
|
|
server = "https://clarun.xyz"
|
|
accessToken = "..."
|
|
userId = "@musiclink:clarun.xyz"
|
|
rooms = [
|
|
"!DPQveBnfuDrbgOe6dm:clarun.xyz",
|
|
"!dT40EUcemb8e6bPiig:clarun.xyz"
|
|
]
|
|
```
|
|
|
|
### 3) Message Handling
|
|
- Parse message body for supported music links.
|
|
- Call `idonthavespotify` (existing behavior).
|
|
- Post formatted response in the same room.
|
|
|
|
### 4) Loop Prevention
|
|
- Ignore events from `@musiclink`.
|
|
- Ignore events without link matches.
|
|
- Rate limit handling with retry/backoff.
|
|
|
|
## Risks
|
|
- Token handling and access permissions for the bot user.
|
|
- Message deduplication and race conditions in sync processing.
|
|
|
|
## Status
|
|
- Matrix-native mode implemented.
|
|
- Matterbridge routing removed.
|