On Tue, Sep 11, 2012 at 3:43 PM, <exarkun@twistedmatrix.com> wrote:
This is the excuse that is always given for not implementing a new feature on `IRCClient`. However, here's another equivalent way of stating the objection:
IRC is a terrible protocol and it is very difficult to implement a method like `names` reliably, due to the various vague and obscure corner cases presented. Therefore, instead of Twisted tackling this problem and providing a single (perhaps imperfect) implementation, every single IRC application developer should instead rediscover this sad reality for themselves and then implement their own uniquely buggy version of this functionality.
Actually, my recommendation would be to avoid trying to implement functionality of this nature in any application at all. The only way to reliably use the NAMES command is the way twisted.words.im.ircsupport and real IRC clients do: handle RPL_NAMREPLY / RPL_ENDOFNAMES without regard to any NAMES command you may or may not have issued, and then issue a NAMES command at certain points without any regard for a response that may or may not be sent to you by the IRC server. Having said that, I guess IRCClient could handle the parsing of RPL_NAMREPLY / RPL_ENDOFNAMES messages into a single list of names, which could then be delivered as a single event. My main concern with most of the more complex implementation strategies is that they impose a non-zero cost on users of IRCClient, as well as encouraging the implementation of unreliable features; at the very least, I think "anti-IRC" code like this should be an extra layer on top of the basic IRC protocol implementation. -- mithrandi, i Ainil en-Balandor, a faer Ambar