GithubHelp home page GithubHelp logo

ircdocs / modern-irc Goto Github PK

View Code? Open in Web Editor NEW
190.0 190.0 33.0 4.5 MB

A useful overview and reference to the IRC client protocol as it is implemented today.

Home Page: http://modern.ircdocs.horse/

License: Other

HTML 32.48% Ruby 19.85% Sass 47.67%
ctcp irc irc-protocol

modern-irc's People

Contributors

0xflotus avatar aaronmdjones avatar alyssais avatar asl97 avatar awfulcooking avatar classabbyamp avatar csmith avatar danieloaks avatar delthas avatar dependabot[bot] avatar dequis avatar dutsky avatar emersion avatar emersonveenstra avatar flashcode avatar hhirtz avatar jeanm avatar jwheare avatar jwilk avatar kashike avatar kroppt avatar mitchr avatar progval avatar sadiecat avatar sdipendra avatar slingamn avatar stripedmonkey avatar tommyrot avatar winterqt avatar yeta1990 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

modern-irc's Issues

Add a formatting doc

Describes colours, bold, italic, all that junk. Start off with just the basics, expand it where client support is actually available and exists.

formatting: Add hex colour codes

Requested on IRC, adding the hex colour codes to the formatting doc would be good. Need to be denoted as not a lot of clients support them iirc

TRACE command

This is a difficult command to specify, so I'll create an issue explicitly for this. This is to specify the command itself, as well as the related numerics.

The RFCs don't have much actual real specs on it, so this will need to be almost 100% retrieved from real implementations.

please help

connectionreg: Suggestions/clarifications

Some extra clarifications from @Jonast to look at

  1. Clarification of nothing else may be sent before login sequence is completed:

"The server MUST then respond as though the client sent it the MOTD command, i.e. it must send either the successful Message of the Day numerics or the ERR_NOMOTD numeric." -> "The server MUST then respond as though the client sent it the MOTD command, i.e. it must send either the successful Message of the Day numerics or the ERR_NOMOTD numeric. The server MUST NOT send any JOIN, PRIVMSG, MODE or any other not login-related event before this entire login sequence is complete and everything up to the MOTD or ERR_NOMOTD has been sent."

  1. Maybe a note should be added for future numerics (since this discussion also was about some future flexibility for new implementation additions and protocol updates), mainly as a heads up to client devs to not make things explode:

"... and at least one RPL_ISUPPORT (005) numeric to the client. The server SHOULD then respond [...]" -> "... and at least one RPL_ISUPPORT (005) numeric to the client. Now, any additional numerics for additional login and server information MAY be sent if supported by this specific server only, although it is not recommended to server authors to send any such additional non-standard numerics unless they were enabled by a related CAP request of the client. The server SHOULD then respond [...]"

What about the two features?

I like IRC. But I'm not sure I understand the low-level thing, so here are my two assumptions:

  1. It can support web socket? (server end?)
  2. It can filter content in a channel, ex.: I can set myself to a mode when in a channel, where I only accept receiving those messages @ me, or for some keywords show up. (maybe client end)

Serve website with HTTPS

As of its future v2.3.0 version, the Help window of The Lounge will now be pointing to http://modern.ircdocs.horse/formatting.html#colors to explain/list colors to users (see thelounge/thelounge#1034).

It would be really nice if we could direct our users to an HTTPS version of this site.
I realize this website is served with GitHub Pages which supports both custom domains and HTTPS but not at the same time. I am not a sales rep or anything, but I have been using Netlify (for free) for this exact purpose and HTTPS, HSTS, HTTP/2 and GitHub integration comes for free. It's a 1-click thing like GitHub Pages, nothing to configure.

LIST/NAMES: <server> parameter

RFC1459 and 2812 both contain the following:
LIST [<channel>{,<channel>} [<server>]]

Same thing for NAMES

We don't define that <server> parameter... this is irritating. Add <server> param and go over method for determining if supplied param is <server> or elist stuff.

Define more numerics as standard

We don't currently define these. Probably good to.

  • RPL_ENDOFWHO
  • ERR_WASNOSUCHNICK
  • RPL_CREATIONTIME
  • RPL_TOPICTIME -> actually RPL_TOPICWHOTIME

fakelag/queue/etc

various measures to stop clients from sending 900000 messages and spamming the ircd to death, look at them and see if we want to add a section on them (as well as recommended actions for clients). may even fit best into a totally separate document if we want to add it at all (my initial thoughts are towards not doing it)

LUSER -> LUSERS

I think I accidentally refer to LUSERS as LUSER in a few places. Investigate and fix.

Clients shouldn't send prefix of :<nick>

Simply put, clients shouldn't put prefixes on messages in general. esp. not when it's just their nickname. Just wastes space and makes things a bit more fragile. I should recommend avoiding it.

Document the less-absolute-junk parts of DCC

Look at Unreal3 being weird with SASL

Mentioned in #ircv3, should take a look and see what's going on maybe.

Not really related to modern-irc work but I'll throw the issue here anyway.

Unreal3.2.10.6

Example log:

    -> CAP LS
    -> CAP REQ :multi-prefix sasl
    -> CAP END
    <- :irc.adichat.dk CAP pereba_ LS :account-notify away-notify multi-prefix sasl tls userhost-in-names
    -> AUTHENTICATE PLAIN
    <- :irc.adichat.dk CAP pereba_ ACK :multi-prefix sasl
    <- :irc.adichat.dk 487 pereba_ :AUTHENTICATE is a server only command
    -> CAP :LS
    -> CAP REQ :multi-prefix sasl
    -> CAP END
    <- :irc.adichat.dk CAP pereba_ LS :account-notify away-notify multi-prefix sasl tls userhost-in-names
    -> AUTHENTICATE PLAIN
    <- :irc.adichat.dk CAP pereba_ ACK :multi-prefix sasl
    <- :irc.adichat.dk 487 pereba_ :AUTHENTICATE is a server only command

Document 'connection handshakes'

That is, the pings that happen during connection where the registration won't continue without the client responding to them.

Recommended on the channel:

Hey, I was wondering if there is any documentation on connection handshakes. Most networks do an id-ping after connecting - freenode somehow doesn't.

Octets vs Bytes

We should specify octets vs bytes in modern doc (i.e. 512 length for messages). Stay consistent with RFCs

Document invite list variant madness

Related to #41

Firstly, RPL_ENDOFINVITELIST 347 is mislabelled as 349 on modern, but perhaps we should also mention the mess of compatibility that is invite lists.

Firstly, invite lists can mean two things:

  • Lists of invex masks for a channel (INVEX)
  • Channels that you have been invited to (chan invites)

InspIRCd demonstrates this the best by reusing the numerics for both lists, but with different argument lists (so it is at least parseable)

# Lists masks with an invite exception (invex)
-> MODE #chan +I
   <- :irc.example.com 346 nick #chan invitee!*@* inviter 1496743061
   <- :irc.example.com 347 nick #chan :End of Channel Invite Exception List

# Lists channels you've been invited to with INVITE
-> INVITE
   <- :irc.example.com 346 nick :#chan1
   <- :irc.example.com 346 nick :#chan2
   <- :irc.example.com 347 nick :End of INVITE list

A quick review of other ircds:

  • ircu2.10.12.13: Only supports 346/347 for chan invites (says IRCnet, Undernet extension), no invex support
  • charybdis 3.5.3 and 4-rc3: Only supports 346/347 for invex lists, no chan invite support
  • inspircd 2.0.23 + 3.0.0a1: As above, uses 346/347 for both invex (via a module) and chan invites (builtin, says stolen from ircu2)
  • unreal 3.2.10.7 + 4.0.9: Uses 346/347 for invex (calls them RPL_INVEXLIST and RPL_ENDOFINVEXLIST) and uses 336/337 for chan invites. Those numerics are used for various whois extensions in other ircds

RPL_TIME: Optional args?

Apparently RPL_TIME can sometimes have some optional args. Find out what they are and document those as well:

Brought up by DarkMio on IRC:

time on gamesruge: * Prothid.NY.US.GameSurge.net 1470084003 0 :Monday August 1 2016 -- 16:40 -04:00
freenode: * kornbluth.freenode.net :Monday August 1 2016 -- 22:39:41 +02:00
qnet: * port80a.se.quakenet.org 1470084021 0 :Monday August 1 2016 -- 22:40 +02:00

formatting: color code 99

Go around and evaluate clients. See how many do implement support for 99 == fore/bg color, and how many do not. Put it back into the doc or don't based on that.

RPL_TOPICTIME/RPL_TOPICWHOTIME (numeric 333)

  • It's currently listed as RPL_TOPICTIME in this document
  • The name RPL_TOPICWHOTIME seems to be used by most. Notable exceptions are InspIRCd and this document. ~80 hits on google for RPL_TOPICTIME, ~2.4k for RPL_TOPICWHOTIME
  • It seems it originated from ircu as RPL_TOPICWHOTIME (according to https://www.alien.net.au/irc/).

In summary, it should likely be renamed to RPL_TOPICWHOTIME in the document.

Secondly, the format for this numeric is currently documented as:

"<client> <channel> <nick> <setat>"

However, this does not seem to hold for all IRC servers: at least freenode (ircd-seven?) returns a mask (i.e. nick!user@host) rather than just a nick for the third argument.

Document the less-absolute-junk parts of CTCP

i.e. investigate writing a cut-down CTCP document that should work in the real world.

Should we do this? Seems like CTCP is kinda in the same place that formatting is, a hundred specs of varying ages, all followed to various degrees and most all of them specifying some stuff everyone supports, some stuff some people support, and some stuff almost nobody supports.

Can we get rid of legacy formatting entirely?

We're running out of control codes. To avoid running out of control codes, let's come up with an extensible formatting scheme that doesn't run out of control codes.

I propose something like ANSI escape codes, but designed with IRC in mind. That way, we have infinite control codes and infinite formatting styles and it's trivial to add new ones.

Marquee, blink, etc could be added without conflicting with existing control codes. In addition to that, some codes are currently used for encryption and such, so they'd conflict too.

Add ISUPPORT implementation consideration

@thommey brings up a good point in channel, which is that clients should act fine if they get INVEX (and default to INVEX=I, but what if they receive INVEX=... will they override the default INVEX token value with literally an empty string?

Security section

If we don't already, we need to have a good Security section, detailing like the issues I found with Ergonomadic and which other servers/clients may run into.

Sitemaps

If we don't already, we should have sitemaps for Modern (and defs, and etc). Take a look and see whether it outputs them already, and if it doesn't then go through adding it.

Add well-known commands

These are commands that are generally accepted and supported on IRC daemons. So long as we have notes that these commands MAY NOT be supported by servers, should be fine to include them.

  • KLINE
  • UNKLINE
  • DLINE
  • UNDLINE
  • SA* -- SAMODE, SANICK, etc etc. SA may stand for Service Admin? If so, these are probably safe to simply ignore without any issues? Eh, investigate and see what servers do, I think these may be loadable modules in most IRCds that do support them anyway, rather than built-in proper

PRIVMSG: X@Y target rules

This is still used with NICKSERC/NS/CS commands, and users can usually send PRIVMSGs to something like [email protected] or whatever.

However, if they are still processed otherwise, they may be mostly restricted to IRC Operators. Especially ones that go to multiple targets.

Thanks to @sdaugherty for pointing this out

Flash/blink

At least EPIC supports flash/blink formatting. I'm not sure if it's enabled by default, but it at least parses it.

Seems to be \x06.

Maximum name length of 63 characters respected these days?

RFCs say server names and hostnames can only be a max of 63 characters, do servers actually respect that these days or do they allow longer names?

Related, is there an RPL_ISUPPORT token that specifies HOSTLEN or something (I think mammon may have proposed one, check out irc-defs lists).

formatting: Work out the silly mess with 0x16 and 0x12

Try to get clients to agree to do them consistently, or something.

Right now this warning suffices in the Reverse Color / Italics section, but it shouldn't be necessary.

Maybe we don't even need reverse colors, and we can just throw that into the list of characters at the end that we just write off as unusable / we don't recommend touching.

JOIN: describe JOIN 0?

JOIN 0 sent by a client usually means part every channel. How widespread is this in servers, and should we be documenting it here?

ToC popup not working on Mobile Safari

This is a very annoying issue. The Table of Contents popup (button down the bottom) will not activate for Mobile Safari. I've tried several different methods of clicking the button, bubbling events and adding various attributes to get it to play nice, but it doesn't seem to want to work for me.

To investigate more. I really don't want to have to add jQuery or something for a single .bind() call.

PASS: list ERR_PASSWDMISMATCH

ERR_PASSWDMISMATCH is used when password is incorrect. Investigate what IRCds do and then specify that they should do that if the p/w is bad.

Add missing numerics

There are lots of numerics we need to add.

  • RFC1459 numerics (minus obsolete ones)
  • RFC2812 numerics (minus obsolete ones)
  • Other widely-used, non-conflicting numerics (see irc-defs)
  • IRCv3 numerics

Add missing RFC commands/messages

This is a tracker of commands and messages from RFCs that are missing, and should be added.

  • PRIVMSG
  • NOTICE
  • MODE
  • TRACE
  • INVITE
  • KICK
  • LINKS
  • WHO
  • WHOIS
  • WHOWAS
  • KILL
  • PING
  • PONG
  • ERROR
  • REHASH
  • RESTART
  • WALLOPS
  • ISON
  • SQUIT command

There are some others in the RFC that exist (SUMMON, USERS), but I don't think they have much applicability to servers or networks today. Put them in that section at the end where we list things we don't like or support these days.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.