feat: add documentation for TUI, messages & attachments, and IRC gateway; update index and TOC

This commit is contained in:
HueByte
2026-07-16 20:02:18 +02:00
parent 35a4eec749
commit ca3c1ec2b5
11 changed files with 455 additions and 5 deletions
+103
View File
@@ -0,0 +1,103 @@
# IRC Gateway
Every EchoHub server can expose a second door: a built-in **IRC gateway** that speaks the
classic IRC protocol on port 6667. Any standard IRC client — irssi, WeeChat, HexChat,
Halloy — can join the same channels as TUI users, see the same messages, and chat with the
same accounts. Under the hood both protocols call the same chat service, so a message sent
from IRC appears instantly in the TUI and vice versa (see [Architecture](architecture.md)).
## Enabling the gateway
The gateway is off by default. Enable it in `appsettings.json` (or `Irc__Enabled=true` as an
environment variable):
```json
{
"Irc": {
"Enabled": true,
"Port": 6667,
"TlsEnabled": false,
"TlsPort": 6697,
"TlsCertPath": "",
"ServerName": "echohub",
"Motd": "Welcome to EchoHub IRC Gateway!"
}
}
```
The plaintext listener always starts on `Port`. The TLS listener on `TlsPort` starts only
when `TlsEnabled` is `true` **and** `TlsCertPath` points to a PKCS#12 (`.pfx`) certificate.
See the [configuration reference](configuration.md#irc-gateway) for every option.
## Connecting & authentication
Your IRC **nick is your EchoHub username** and your server password is your **account
password**. Two flows are supported:
```bash
# classic PASS/NICK/USER — most clients call this the "server password"
irssi -c chat.example.com -p 6667 -w <password> -n <username>
```
or **SASL PLAIN** (advertised via `CAP LS`), where the SASL username/password are the account
credentials.
A few things worth knowing:
- **Connecting auto-registers.** If the username doesn't exist yet, the gateway creates the
account with that password (usernames: 350 chars of `a-z 0-9 _ -`; passwords: 6+ chars).
The very first account ever created on a server becomes the **Owner**.
- Because of that, a typo'd password for an *existing* account fails with
`Username is already taken` — the gateway tried to log in, couldn't, then tried to register
the name. If you see that error, re-check your password.
- Connecting without a password is rejected: `Password required. Use PASS command or SASL PLAIN.`
## What maps to what
| IRC | EchoHub |
| --- | --- |
| `JOIN #room` | Join a channel (history is replayed on join) |
| `JOIN #room <key>` | Join a password-protected (`+k`) channel |
| `PART` / `QUIT` | Leave channel / disconnect |
| `LIST` | Public channels only (password-protected ones show a `[+k]` hint) |
| `TOPIC` | Read or set the channel topic (permission-checked) |
| `NAMES` / `WHO` | Online users in the channel |
| `WHOIS` | Profile: display name, channels, idle time, away status |
| `AWAY [message]` | Sets your EchoHub status to Away / back to Online |
| `MODE #room +k <key>` / `-k` | Set / clear the channel password |
Private (unlisted) channels don't appear in `LIST`, but members who know the exact name can
still `JOIN` them. Channels are not auto-created from IRC — create them from the TUI first.
## How messages look
- **Attachments** arrive as labeled link lines — `[Image: photo.png] https://…`,
`♪ [Audio: song.mp3] https://…`, `[File: report.pdf] https://…` — and image attachments
additionally render their **ASCII-art preview** using truecolor ANSI escapes, so a modern
terminal IRC client shows actual picture previews.
- **Link embeds** are appended as `│`-prefixed text lines.
- Long messages are split at word boundaries into IRC-safe lines (~400 bytes each);
incoming messages may be up to 2,000 characters like any EchoHub message.
- Your own messages aren't echoed back (standard IRC convention).
- Moderation actions surface natively: kicks arrive as `KICK`, bans and channel nukes as
server `NOTICE`s.
## Limitations
The gateway bridges what IRC can express — and deliberately refuses what it can't:
- **No end-to-end encrypted rooms.** Joining an [encrypted room](encrypted-rooms.md) fails
with *"Cannot join channel — end-to-end encrypted, use the EchoHub client."* Bridging one
would require the server to hold the room key, breaking the zero-knowledge design.
- **No private messages.** `PRIVMSG` to a nick is rejected; EchoHub is channel-based.
- **Usernames, not display names.** Messages are attributed to the account username;
a user's display name is visible via `WHOIS`/`WHO` (realname field).
- **No client features.** Uploading attachments, profiles, themes, and reactions to status
changes are TUI-client features. Other users' status changes aren't pushed to IRC —
discover them with `WHOIS`/`WHO`.
## How IRC users appear to TUI users
Users connected *only* through the gateway are tagged `[irc]` in the users panel — a hint
that they can't receive encrypted content or use client-side features. Someone connected
with both an IRC client and the TUI shows untagged.