IRC Bridge

Last edited 2026-08-03 01:34 EDT · history · 2 views

IRC Bridge

Relays one MRC room to one external IRC server + channel.
Each bridge is its own row and its own running process — there's no
web admin page for this, and it's a completely different feature
from the per-user IRC Client at /irc/.

Configure

There's no web UI. A sysop creates a row in the mrc_irc_bridges
table directly (a one-off script, flask shell, or a small admin
tool you write yourself). The fields on a bridge row:

Field Meaning
name Label for the bridge (your own reference)
mrc_room Which local MRC room to relay
mrc_handle The name the bridge uses on the MRC side (default ircbridge)
mrc_ws_url WebSocket URL of the local MRC bridge service
irc_server / irc_port Target IRC server
irc_use_ssl TLS toggle
irc_nick Nick the bridge uses on IRC (default ANETBridge)
irc_channel / irc_channel_key Target channel + key if it's locked
sasl_user / sasl_pass SASL PLAIN credentials, if the network needs them
is_active Whether the bridge should be running

Running it

Each bridge row runs as its own instance of the systemd template unit:

systemctl enable --now anetbbs-mrc-irc-bridge@<id>.service

where <id> is the bridge row's primary key. %i in the unit
expands to that ID, so anetbbs.features.mrc_irc_bridge --bridge-id <id> knows which row's config to load. One bridge = one systemd
instance = one MRC room ↔ one IRC channel.

How it works

  1. The process opens a WebSocket to the local MRC bridge service and
    a plain TCP (or TLS) socket to the configured IRC server, joining
    the one configured channel.
  2. Messages posted in the MRC room are relayed to IRC prefixed
    [mrc:<user>].
  3. Messages said in the IRC channel are relayed into the MRC room
    prefixed [irc:<nick>].

Limits

See also