IRCv3
The IRCv3 adapter targets Modern IRC and stable IRCv3 extensions. Managed TCP/TLS, a host-owned socket, and ingest(rawEvent) all enter one Ircv3Client session state machine without opening a private listener.
Resource and message mapping
- IRC channels map to canonical groups/channels; nicknames or accounts map to users.
- Channel PRIVMSG/NOTICE becomes a channel message; messages addressed to the bot nickname become direct messages.
- CTCP ACTION becomes action text and
+replybecomes a reply segment. account-tagor the extended-join account is preferred as the stable user ID while the nickname remains the display name.- JOIN/PART/QUIT/KICK, INVITE, TOPIC, MODE, and NICK/ACCOUNT/AWAY/CHGHOST/SETNAME map to canonical notices or requests.
- Uninterpreted stable messages retain the complete
raw_eventandextensions.ircv3data.
IRC has no standard media upload. Public HTTP(S) media URLs explicitly degrade to text, while can_send_image and can_send_record return false. TOPIC is a channel subject, not a channel name, so it is exposed as set_irc_topic rather than masquerading as canonical set_group_name.
Negotiation, recovery, and request correlation
- CAP LS 302 handles multiline capability lists and ends negotiation after ACK/NAK.
- SASL PLAIN/EXTERNAL completes before CAP END;
sasl_requiredprevents silent anonymous fallback. - Managed connections default to TLS, bind an
AbortSignal, retry indefinitely with jittered exponential backoff, and isolate old connections by generation. - When labeled-response is available, requests and BATCH replies can run concurrently; WHOIS/NAMES/CHATHISTORY queries are serialized on legacy servers.
- A message
msgidmay be reused by history or retransmission, so canonical delivery IDs use connection generation plus occurrence sequence. - Byte streams require CRLF and independently enforce the IRCv3 tag section and 512-byte main section limits.
Platform capabilities
Canonical actions cover messages, history, user/channel/member queries, nickname, channel departure, kick/invite/operator changes, invitation handling, announcements, status, and version. Platform actions additionally expose JOIN/PART, NOTICE/ACTION, TOPIC/MODE, KICK/INVITE, WHOIS/NAMES, MONITOR, AWAY, SETNAME, typing, CHATHISTORY, the session snapshot, and controlled raw commands.
Capabilities narrow from live server state. History requires explicit negotiation of WIP draft/chathistory and its stable dependencies plus CHATHISTORY ISUPPORT; MONITOR, setname, and typing similarly depend on ISUPPORT, CAP ACK, and CLIENTTAGDENY. Configured event_commands bound the canonical events an account can produce.
Only stable capabilities are requested by default. draft/multiline remains work in progress and is not advertised as stable multipart messaging. Explicit vendor/draft capabilities are allowed, but unknown semantics remain in the raw message.
See IRCv3 Configuration. Official references: IRCv3 Specifications, Capability Negotiation, Message Tags, SASL, and Modern IRC.