Messaging · Root
Relay Formatter
Formats messages from explicitly marked relay bots on networks without native IRCv3 relay support.
- Version
- 0.2.0
- Runs as
- Server Root
- Grove API
- 1
- Updated
- 2026-10-01
Requested access
3 permissions
Network access
No internet access
Its manifest declares no external hosts. Grove’s sandbox blocks network requests outside the package.
From the extension
README
Relay Formatter — a Grove Root
Relay Formatter improves the common fallback format used by bridge bots when an
individual message does not carry IRCv3 draft/relaymsg:
<Alice> hello from the bridged room
[Alice] hello from the bridged room
[Alice]: hello from the bridged room
It also understands bridge context prefixes and preserves them in the message:
[project/room] <Alice> hello from the bridged room
After you mark the real bot in Mango’s channel member menu, the Root displays
Alice as the visible sender, the body as hello from the bridged room, and a
neutral relay symbol matching the member-list marker. Hovering the symbol shows
the real bridge bot; older Mango versions fall back to a RELAY:BridgeBot text
badge. The message’s authoritative source remains the bot, so
identity-sensitive actions such as WHOIS, ignore, and auditing still point to
the IRC user that sent the line. Reply and Copy use the visible bridged sender.
CHATHISTORY and bouncer playback messages pass through the filter. Starting the Root or marking/unmarking a relay bot also asks Mango to replay the current transcript through the live filter, so already-loaded rows update immediately.
Try it
- Install this folder, then start Relay Formatter in the Grove manager.
- Approve inbound message filtering, native member actions, and storage.
- Right-click the relay bot in a channel’s member list.
- Choose Extensions → Mark as Relay Bot — Relay Formatter.
- Mango shows a relay icon beside the member, a checkmark in the Extensions menu, and changes the action to Unmark as Relay Bot.
The selection is stored separately for each network using the canonical member
key Mango supplies for that server’s negotiated IRC CASEMAPPING.
Settings
In Grove Manager, open Relay Formatter → Settings to choose automatic detection (the default) or restrict formatting to one of the three envelopes above. This preference applies to all networks; marked-bot selections remain network-specific. Saving refreshes running instances and retained messages without restarting the extension. Older Mango builds without live settings notifications apply the change when the Root is restarted.
No custom regular expressions are required. Restricting the format is useful when a marked bot also emits ordinary bracket-prefixed messages.
Deliberately conservative
The formatter only touches an ordinary message when all of these are true:
- its real source was explicitly marked by the user;
- the message has no native relay identity;
- the text is a non-empty
<Name> body,[Name] body, or[Name]: bodyenvelope allowed by the selected format.
An optional bounded [context] prefix is accepted before an angle-bracket envelope. Paired
Markdown bold delimiters around the fallback nickname are removed because
Mango’s sender column is plain text; all other prefix shapes remain untouched.
The server may advertise draft/relaymsg and still receive fallback envelopes
from a bridge connected to a network without it. Relay Formatter therefore
checks the authoritative tag on each message instead of treating the
network-wide capability as proof that every bridge used it.
ACTION, NOTICE, malformed text, native relay messages, and all messages from unmarked users pass through unchanged. A storage or runtime error also fails open because formatting must never hide a message.
The Root requests no network access and sends no IRC traffic.
manifest.jsonapp.mango.grove.relay-formatter
{
"grove": 1,
"id": "app.mango.grove.relay-formatter",
"name": "Relay Formatter",
"version": "0.2.0",
"description": "Formats messages from explicitly marked relay bots on networks without native IRCv3 relay support.",
"author": {
"name": "Mango",
"url": "https://mangoirc.chat"
},
"readme": "README.md",
"entry": "index.html",
"settings": "settings.html",
"presentation": {
"surfaces": [
"headless"
],
"scope": "server"
},
"capabilities": [
"messages.filter.inbound",
"ui.member-actions",
"storage"
],
"hostPermissions": []
}