I've just pushed a bunch of changes to the IRC protocol. The main theme for these changes is for refactoring the IRC code structure, such that it is better understandable, has a better separation of concerns, is more reliable (hopefully), etc.
Additionally, I've made the following fixes and improvements:
* Chat room auto-joining now works correctly (no more multi-threading issues)
* Quickly disabling and (re)enabling an account does not duplicate account's chat rooms anymore, properly disconnects and cleans up.
* Fix occasional issues where setting IRC account 'offline' would immediately start reconnecting.
* Allow nick changes on right click -> Change nickname. (But does not do nick changes upon opening/joining a chat room.)
* Also implemented /nick as a command: /nick <newnick>
* Unsupported commands now result in failed delivery event (so you don't accidentally send your command as a plain message)
* Support for a number of IRC server ISUPPORT parameters such that we can identify invalid values as specified by the IRC server. (NICKLEN, CHANNELLEN, TOPICLEN, KICKLEN, AWAYLEN, CHANLIMIT)
* Implemented the 'ban' operation.
* Updated irc-api library which: silences close connection exception upon proper disconnect (looked like an error even though nothing was wrong) and properly fires failed channel join event in case the user is banned from a channel or some other cases causing joining to fail.
Let me know what you think! (good and/or bad :P)