mirror of
https://github.com/Stone-Red-Code/EchoHub.git
synced 2026-09-04 00:56:05 +02:00
feat: add test sound command and enable notifications by default
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
- `ModerationController` with full REST API for role assignment, kicks, bans, mutes, message deletion, and channel nuking
|
||||
- Mutes support optional duration (auto-expire) and blocked users cannot log in
|
||||
- Role claim included in JWT tokens; role badges shown in the online users panel
|
||||
- Kicked and banned users are forcibly disconnected in real time — server cleans up presence, broadcasts departures, and signals client disconnect
|
||||
- Works for both SignalR and IRC connections; client shows an error dialog with the reason
|
||||
|
||||
### Private Channels
|
||||
- Channels can be created as public or private via a checkbox in the Create Channel dialog
|
||||
@@ -18,13 +20,13 @@
|
||||
|
||||
### OpenGraph Link Embeds
|
||||
- Messages containing URLs now show a rich preview below the message text
|
||||
- Server-side fetching: detects the first URL in a message, fetches the page, and parses OpenGraph meta tags (`og:title`, `og:description`, `og:image`, `og:site_name`)
|
||||
- OG images are converted to a small 24x12 colored ASCII thumbnail using the existing half-block renderer
|
||||
- Embeds are persisted in the database and included in channel history
|
||||
- TUI client renders embeds with a `▏` left border bar — site name and border in blue, title in white, description in gray, followed by the ASCII thumbnail
|
||||
- IRC gateway receives a text-only embed preview (site name, title, description) — no ASCII thumbnail to keep IRC output clean
|
||||
- Multiple URLs per message supported (up to 3) — each gets its own embed
|
||||
- Server-side fetching: detects URLs in a message, fetches each page, and parses OpenGraph meta tags (`og:title`, `og:description`, `og:site_name`)
|
||||
- Embeds are persisted in the database as a JSON array and included in channel history
|
||||
- TUI client renders embeds with a `▏` left border bar — site name and border in blue, title in white, description in gray; text word-wraps at actual viewport width
|
||||
- IRC gateway receives a text-only embed preview (site name, title, description)
|
||||
- Falls back to `<title>` tag when no OG tags are present; gracefully skips if no useful metadata is found
|
||||
- 3-second fetch timeout ensures message delivery is never significantly delayed
|
||||
- 5-second fetch timeout ensures message delivery is never significantly delayed
|
||||
- SSRF protection rejects private/loopback IP addresses before fetching
|
||||
|
||||
### Notification Sounds
|
||||
@@ -67,13 +69,16 @@
|
||||
- Emoji-to-text shortcode conversion for consistent cross-platform rendering
|
||||
- Fixed `/send` and `/avatar` commands not handling file paths with spaces correctly, even when quoted
|
||||
- Server-side newline spam protection — consecutive blank/whitespace-only lines collapsed to 1 and total lines capped at 30
|
||||
- Fixed OG tag regex truncating descriptions containing apostrophes (e.g. `"HueByte's portfolio"` was cut to `"HueByte"`) — switched to backreference-based quote pairing
|
||||
|
||||
## Infrastructure
|
||||
|
||||
- New `LinkEmbedService` on the server — URL detection, HTML fetching (first 64KB), OG tag parsing via regex, image thumbnail generation
|
||||
- `EmbedDto` record added to shared Core DTOs; `MessageDto` extended with optional `Embed` field (backward-compatible)
|
||||
- `EmbedJson` nullable column on the `Message` table stores serialized embed data (max 8KB)
|
||||
- New `LinkEmbedService` on the server — URL detection, HTML fetching (first 64KB), OG tag parsing via compiled regex
|
||||
- `EmbedDto` record added to shared Core DTOs; `MessageDto.Embeds` list for multiple embeds per message
|
||||
- `EmbedJson` nullable column on the `Message` table stores serialized embed data as JSON array (max 8KB); `DataMigrationService` auto-migrates old single-object format
|
||||
- Dedicated `"OgFetch"` named HttpClient with bot User-Agent header and 5-second timeout
|
||||
- `PresenceTracker.ForceRemoveUser()` for atomic user cleanup on kick/ban
|
||||
- `IChatBroadcaster.ForceDisconnectUserAsync()` and `IEchoHubClient.ForceDisconnect` for force-disconnect signaling
|
||||
- `NotificationSoundService` for cross-platform audio playback of embedded notification sounds
|
||||
- Startup `DataMigrationService` automatically converts old ANSI-format messages to the new color tag format on server boot, logging the count of migrated records
|
||||
- `EmojiHelper` utility for emoji-to-shortcode conversion
|
||||
|
||||
Reference in New Issue
Block a user