Architecture
go-bot keeps platform packages independent and shares one public convention: Reply(handler) sends a returned non-empty string back to the triggering conversation.
System overview
flowchart LR
App[Application] --> TG[telegram]
App --> DC[discord]
App --> LN[line]
TG --> TTS[tts]
DC --> TTS
TG --> TGA[Telegram API]
DC --> DGA[Discord API]
LN --> LNA[LINE API]
TTS --> Gemini[Gemini TTS]
TTS --> FFmpeg[ffmpeg]
Boundaries
| Package | Transport | Focus |
|---|---|---|
telegram |
long polling | messages, callback keyboards, media, status |
discord |
WebSocket gateway | attachments, native components, status |
line |
HTTP webhook | reply, push, media save |
tts |
HTTPS + process | PCM to OGG/OPUS |
Platform packages intentionally retain their own Input and handler types because their event payloads and identifiers differ.