Skip to content

IRCX / MSN Chat - Pre 2000 was more advanced than you might think... #48

@realJoshByrnes

Description

@realJoshByrnes

Let me flog a dead horse, and note some of the interesting things that MSN Chat had that I believe IRCv3 could benefit from (or could at least be a discussion point)...
Some of these may be implemented already, and I'm not aware of them. If this is the case, sorry. I'm not suggesting that these be implemented exactly as per IRCX/MSN, just that they are very useful and worth discussion.

MSN Chat was based upon the IRCX Draft. It's important to note that the IRCX Draft was not updated since June 1998, and MSN Chat kept pushing forward with updates in a proprietary manner. I think understanding how MSN Chat had pushed forward may help us see a way forward with IRCv3.

ACCESS command
IRCX (Section 5.1) supports adding ACCESS entries.
eg /access John ADD DENY *!*@* would disable anyone from contacting John
Additionally, it could be used to add access to channels in the form DENY, GRANT, VOICE, HOST, OWNER. ACCESS could bypass keys (for positive access)
Adding DENY access to a channel worked identically to CHMODE +b, with the exception that a reason could be added.

AUTH command
The AUTH command is well defined in the IRCX draft, although it is not opinionated on which SASL authentication methods could be used. IRCv3 has implemented a suitable alternative.

✅AWAY command
The IRCv3.1 Away-Notif spec offers a somewhat suitable alternative to what MSN did.
Limitations: Away-Notify offers no way of being able to differentiate between if a user joined the channel and was already away, and if the user joins the channel, then uses the AWAY command. It also offers no notification when joining a channel of who is away, and the draft suggests using the /who command to get this information. I'm not sure why it wasn't suggested that the server automatically send a WHO reply on behalf of the client when joining a channel and had Away-Notify set active.
MSN used an extended JOIN / NAMES (see below, which was able to show this information, as well as others)

REDIRECT message
While it may seem limited, this is an amazing command for an IRC Admin. It's very useful for load balancing (and moving geographic users to their closest server). Additionally, it is very useful when a server is taken offline for maintenance.

ONJOIN (privmsg) / ONPART (notice) messages
When a user JOINS or PARTs a channel, they would receive a message from the channel if an onjoin/onpart message was set. This was set using the PROP command. Notably, messages could be split when set by escaping using \n.
ie. Channel operator setting ONJOIN message
PROP %#Channel ONJOIN :Welcome to our channel\nI hope you enjoy your stay
User receiving ONJOIN message
:%#Channel PRIVMSG %#Channel :Welcome to our channel
:%#Channel PRIVMSG %#Channel :I hope you enjoy your stay

Standard escaping
The IRCX draft notes a standard escaping sequence, although it should be noted that \0 was used to represent NUL in later revisions, so that the AUTH command could use all 256 bytes.

              \b            " " (blank)
              \c            ","
              \\            "\"
              \r            CR
              \n            LF
              \t            TAB

IRCv3 has worked around this with various methods, such as using base64 encoding (>25% extra data), as well as using other escaping methods such as the one defined in IRCv3 Message Tags. I believe it would be beneficial to create a standard escaping sequence that MUST be used where practical.
eg. Both message tags, as well as authentication could have used the same table above (including \0).

Extended channel keys
As well as a normal channel key, it was possible to specify an OWNERKEY or HOSTKEY, which would not only allow the user to join the channel, but to receive a specific mode (+o/+q) in this case. These were set using the IRCX PROP command. eg. PROP %#Test OWNERKEY :ThisIsThePassword. Setting a key to '' (null) would render it unusable.

Self reference
IRCX defines the dollar symbol ($) as a server prefix. ie $irc.example.com, but when it is used by itself rather than a prefix, it specifies the current client/server. This allows you to send commands without knowing your nickname.
eg. On connect, where a nickname is often forcibly changed by a server, you need to establish that nickname before you can set a MODE. By using $, it does not matter which nickname you use. MODE $ +i would allow you to set invisible mode on yourself.

Longer/Unicode nicknames and channel names
Although there was some suggestion in the IRCX draft, this was later changed to assume universal support by clients. As far as I'm aware, most/all clients will support this automatically, and did pre-year 2000.

Extended JOIN/NAMES reply
When sending a JOIN message, MSN Chat would specify the status of the user.
:Nick!User@Host JOIN H,U,RXB %#Test. The same prefix was also used on NAMES replies eg H,U,RXB,@Nickname, which interestingly, would be compatible with both IRCv3.1 Multi-Prefix and IRCv3.2 Userhost-In-Names
The format for H,U,RXB was as follows:

  • Here | Gone (Away Status)
  • User | Guide | Sysop | Admin (Guide/Sysop/Admin were all different levels of IRC operator)
  • Male | Gender Neutral/Not Specified (P) | Female | No Profile (R)
  • Has Picture (Y) | No Picture (X)
  • Subscriber (B) | Non Subscriber (O)

The gender and picture fields would be set to a singular G if the user was a Guest

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions