react client tag
Copyright © 2016 James Wheare <james@irccloud.com>
Unlimited redistribution and modification of this document is allowed provided that the above copyright notice and this permission notice remains intact.
This specification is a work-in-progress and may have major incompatible changes without warning.
This specification may change at any time and we do not recommend implementing it in a production environment.
This is a work-in-progress specification.
Software implementing this work-in-progress specification MUST NOT use the
unprefixed +react or +unreact tag names. Instead, implementations SHOULD use the
+draft/react and +draft/unreact tag names to be interoperable with other software
implementing a compatible work-in-progress version.
The final version of the specification will use unprefixed tag names.
This specification defines client-only message tags to indicate reactions and unreactions to other messages
This tag provides a means of communicating with context-sensitive, potentially non-textual reactions. It allows chat participants to respond to each other with text, symbols, emoticons, or emoji that donβt necessarily appear as full messages, but instead as lightweight annotations, displayed adjacent to a parent message.
While most IRC users do not expect messages to be removable, reactions are meant to be sent quickly, changed based on opinion and removed if sent accidentally. For this reason, it is common for implementations of emoji reactions in other protocols to allow an unreaction feature.
Clients wishing to use this tag MUST negotiate the message-tags capability with the server. Additionally, this tag MUST be used in conjunction with the +reply client tag.
The react tag is sent by a client with the client-only prefix +. The value has no restrictions.
+draft/react=<reaction>
The unreact tag is sent by a client with the client-only prefix +. The value has no restrictions.
+draft/unreact=<reaction>
These tags MAY be attached to an empty message.
The +draft/react and +draft/unreact tags MUST NOT both be attached to a single message.
This section is non-normative
When reactions are sent as empty messages, they may not be visible to clients that donβt support them. This may be the desired outcome, since theyβre intended as lightweight responses whose meaning might be lost when detached from their parent context. They may also be numerous and take up more room in the message history than intended by the sender.
However, reactions might also create their own context, sparking further conversation, so it might make sense to display them as a full message body.
Clients might wish to enable a preference to allow their users to choose whether they want to send reactions as tag-only or duplicated in the message body.
Other reasons for users not to see a reaction might include:
This specification doesnβt define any restrictions on what can be sent as the reaction value. Clients might wish to apply their own restrictions for which values are allowed to be sent or received. For instance, a byte limit may be appropriate, or white/blacklists.
In this example, a TAGMSG is sent to a channel with an ID provided by the server. A client sends a reaction reply to this message and the server sends an echo-message back to the client.
S: @msgid=123 :nick!user@host PRIVMSG #channel :Hello!
C: @+reply=123;+draft/react=lol TAGMSG #channel
S: @msgid=456;+reply=123;+draft/react=lol :nick2!user2@host2 TAGMSG #channel
An example of an emoticon reaction
C: @+reply=123;+draft/react=:) TAGMSG #channel
An example of an emoji reaction
C: @+reply=123;+draft/react=π TAGMSG #channel
An example of a reaction sent as a PRIVMSG with an additional message body
C: @+reply=123;+draft/react=lol PRIVMSG #channel :lol
An example of a reaction and unreaction sent as a TAGMSGs
S: @msgid=123 :nick!user@host PRIVMSG #football :They won!
C: @+reply=123;+draft/react=π¦π· TAGMSG #football
S: @msgid=124 :nick!user@host PRIVMSG #football :Actually it was Germany...
C: @+reply=123;+draft/unreact=π¦π· TAGMSG #football
C: @+reply=123;+draft/react=π©πͺ TAGMSG #football
Software supporting +draft/react: IRCCloud, ObsidianIRC, Palaver, Goguma, Limnoria, Matrix2051