Files
owncast-IRC-bridge/chat-summaries/2026-03-10_21-00-summary.md
cottongin 196997f728 fix: HTML-escape IRC username in Owncast chat, fix WebSocket auth, fix echo suppression
- Escape angle brackets around IRC username so Owncast doesn't swallow
  them as HTML tags (&lt;nick&gt; instead of <nick>)
- Register a chat user via POST /api/chat/register to obtain an
  accessToken, then pass it as a query param when connecting to /ws
  (Owncast closes the WebSocket immediately without one)
- Cache the access token across reconnections; re-register only on
  rejection
- Add ws_display_name config option (default "IRC Bridge")
- Fix echo suppression: record_sent and is_echo now both compare
  raw body instead of mismatched formatted/raw values

Made-with: Cursor
2026-03-12 14:06:41 -04:00

1.1 KiB

Debug: IRC + WebSocket connection failures

Task

Investigated why both IRC and WebSocket connections were failing immediately after connecting, entering infinite reconnection loops with exponential backoff.

Findings

Both issues were external/environmental, not code bugs:

  1. IRC (irc.zeronode.net): Server was rejecting with ERROR :Closing link: ... [No more connections allowed from your host via this connect class (global)]. Too many existing connections from the same host IP.

  2. WebSocket (wss://owncast.bowlafterbowl.com/ws): Caddy proxy successfully upgraded (101), but the Owncast backend immediately reset the connection. Owncast instance was offline.

Changes Made

None (instrumentation added for debugging was fully reverted after diagnosis).

Follow-up Items

  • Consider logging the actual IRC ERROR message content instead of the generic "IRC stream ended" — would make future diagnosis faster without instrumentation.
  • Consider detecting fatal IRC errors (connection class limits, K-lines) and stopping reconnection attempts rather than continuing to hammer the server.