IRC: nobody is ever shown typing #127

Closed
opened 2026-09-06 12:04:36 -04:00 by Salastil · 1 comment
Owner

moho shows who is composing on Matrix, Discord, Kick and Sneedchat. On IRC it shows
nobody, ever, and sends nothing - the +typing client tag is neither requested nor
emitted (backend/irc.rs:703 lists the capabilities asked for; message-tags is
among them, which is the half this needs).

IRC has had this for a while now and the clients people compare moho to support it:
it is a tag on an empty TAGMSG, gated on message-tags, and servers without it are
unaffected.

What is needed

  • Send @+typing=active TAGMSG while composing and =done on send or on stopping,
    rate-limited the way the spec asks - a keystroke is not an event.
  • Read the same tag from others and feed it into the typing state the client already
    keeps per buffer (typingByBuffer).
  • Nothing at all where the server does not offer message-tags, which is the ordinary
    case on older networks and must stay silent rather than sending a stray TAGMSG.

Done looks like: the same "somebody is typing" line IRC's own modern clients show.

Reference: Halloy, Goguma, and the +typing client tag.

moho shows who is composing on Matrix, Discord, Kick and Sneedchat. On IRC it shows nobody, ever, and sends nothing - the `+typing` client tag is neither requested nor emitted (`backend/irc.rs:703` lists the capabilities asked for; `message-tags` is among them, which is the half this needs). IRC has had this for a while now and the clients people compare moho to support it: it is a tag on an empty TAGMSG, gated on `message-tags`, and servers without it are unaffected. **What is needed** - Send `@+typing=active` TAGMSG while composing and `=done` on send or on stopping, rate-limited the way the spec asks - a keystroke is not an event. - Read the same tag from others and feed it into the typing state the client already keeps per buffer (`typingByBuffer`). - Nothing at all where the server does not offer `message-tags`, which is the ordinary case on older networks and must stay silent rather than sending a stray TAGMSG. **Done looks like:** the same "somebody is typing" line IRC's own modern clients show. Reference: Halloy, Goguma, and the `+typing` client tag.
Salastil added the featureprotocol labels 2026-09-06 12:04:36 -04:00
Author
Owner

Finished — https://git.salastil.com/Salastil/nobilis/commit/d888104 and https://git.salastil.com/Salastil/moho/commit/7e9f07b

+typing sent as a TAGMSG and read back the same way, gated on message-tags, feeding the same typing event every other backend emits. Six-second expiry, kept per buffer so one person stopping does not clear the others, and never opening a conversation that does not already exist — a stranger typing at you should not put a window on screen before they have said anything.

Verified live on Libera with a scratch client at the other end: the probe's @+typing=active TAGMSG showed as "mohoprobe3 is typing…" and cleared when it stopped; moho's own send arrived at the probe as @+typing=active TAGMSG mohoprobeB.

Worth knowing: this only worked after fixing the capability bug in the same commit — CAP ACK puts its list in the parameter before the trailing one, and moho read the trailing one, so no capability from any server had ever been recorded. See #129.

Finished — https://git.salastil.com/Salastil/nobilis/commit/d888104 and https://git.salastil.com/Salastil/moho/commit/7e9f07b `+typing` sent as a TAGMSG and read back the same way, gated on `message-tags`, feeding the same typing event every other backend emits. Six-second expiry, kept per buffer so one person stopping does not clear the others, and never opening a conversation that does not already exist — a stranger typing at you should not put a window on screen before they have said anything. Verified live on Libera with a scratch client at the other end: the probe's `@+typing=active TAGMSG` showed as "mohoprobe3 is typing…" and cleared when it stopped; moho's own send arrived at the probe as `@+typing=active TAGMSG mohoprobeB`. Worth knowing: this only worked after fixing the capability bug in the same commit — `CAP ACK` puts its list in the parameter before the trailing one, and moho read the trailing one, so **no capability from any server had ever been recorded**. See #129.
Salastil removed the protocol label 2026-09-06 12:49:16 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#127