Skip to content

feat: add IRCv3 capabilities, WHO/WHOX, MONITOR and message splitting#22

Merged
jeromeludmann merged 18 commits intomainfrom
feat/ircv3
Mar 25, 2026
Merged

feat: add IRCv3 capabilities, WHO/WHOX, MONITOR and message splitting#22
jeromeludmann merged 18 commits intomainfrom
feat/ircv3

Conversation

@jeromeludmann
Copy link
Copy Markdown
Owner

Summary

Add comprehensive IRCv3 support with 14 new plugins, enhanced core protocol handling, and full test coverage.

Core

  • Add ACCOUNT, CHGHOST, SETNAME, TAGMSG, MONITOR commands and numerics (730-734) to protocol
  • Add IRCv3 tag value escaping/unescaping in parser
  • Add outgoing tag support in send() via overload (send(tags, command, ...params))

IRCv3 capability plugins

  • cap: Track ACK/NAK/NEW/DEL, batch CAP REQ into single message, auto-request cap-notify
  • account-notify: Emit account event on user login/logout
  • account-tag: Expose getAccount() util from message tags
  • away-notify: Emit away_notify event on away status change
  • chghost: Emit chghost event on host/ident change
  • echo-message: Intercept self-messages via emit hook, emit echo:privmsg / echo:notice
  • extended-join: Emit extended_join with account and realname
  • invite-notify: Broadcast invites to channel members
  • message-tags: Send/receive TAGMSG with client tags
  • server-time: Expose getServerTime() util
  • setname: Emit setname event + setname() command

Other plugins

  • who: WHO/WHOX with buffered replies and token matching
  • monitor: Full MONITOR support (add/remove/list/clear/status + online/offline events)
  • message-split: Auto-split long PRIVMSG/NOTICE at word boundaries, byte-aware for multi-byte
  • isupport: Generic client.state.isupport map for all ISUPPORT params

Fixes

  • Fix SASL authentication with batched CAP REQ
  • Fix echo-message suppressing normal privmsg/notice for self-messages
  • Remove circular dependency: registration no longer depends on privmsg

Docs

  • Document all new events, commands, and options in API.md
  • Add IRCv3 bullet to README

Test plan

  • 345 unit tests (84 new), all passing on Deno and Node.js
  • 21 E2E tests against real Ergo IRC server (12 new), all passing
  • E2E covers: server-time, away-notify, echo-message, setname, WHO, MONITOR, message-split, cap tracking, invite-notify, chghost, TAGMSG, extended-join, account-tag, SASL PLAIN, SASL EXTERNAL

@jeromeludmann jeromeludmann merged commit 97e5eab into main Mar 25, 2026
7 checks passed
@jeromeludmann jeromeludmann mentioned this pull request Mar 25, 2026
@jeromeludmann jeromeludmann deleted the feat/ircv3 branch April 4, 2026 21:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant