Remember I said the IRC protocol is junk? Well, there's more.
RFC 2812 supercedes
RFC 1459. RFC 2812 specifies
that characters []\^
and {}|~
should be considered
equivalent for purposes of case-insensitive matching of channel names and nicks.
RFC 1459 does too, but omits ^
and ~
which is generally
regarded as an erroneous omission.
RFC 2812 defines message 005 as RPL_BOUNCE, but this draft RFC (which the IETF says has expired and therefore been deleted from their archive without becoming an RFC) redefines message 005 as RPL_ISUPPORT, which seems to be usiversally recognized despite the conflict with RFC 2812 (noted in section 4.4 of the draft). The RPL_ISUPPORT message is more clearly explained here.
Unfortunately I've encountered at least one server which a) fails to adhere to RFC 1459 or RFC 2812 with regards to case mapping, and b) also fails to adhere to this draft RFC to send an RPL_ISUPPORT message which indicates CASEMAPPING=ascii. The author of the draft said (in section 4.5) that he was not aware of any servers that do this, but I've found one, and there must be more. At least I can take some comfort in knowing that this situation not only confuses my bot, but also confuses the client I use. I'll bug the server admins about fixing this. In the mean time, I've hacked my bot to allow this stuff to be overridden on a per-network basis in the configuration, so it will work in a non-broken way even on broken servers. Yay!