+ } else if (connectionEstablishHandler.willHandle(reply)) {
+ connectionEstablishHandler.handleReply(reply);
+
+ /* 005 originally was a bounce message, now used to transmit useful information about the server. */
+ } else if (command.equals("005")) {
+ for (String parameter : parameters) {
+ if (parameter.startsWith("PREFIX=")) {
+ int openParen = parameter.indexOf('(');
+ int closeParen = parameter.indexOf(')');
+ if ((openParen != -1) && (closeParen != -1)) {
+ for (int modeCharacterIndex = 1; modeCharacterIndex < (closeParen - openParen); ++modeCharacterIndex) {
+ char modeCharacter = parameter.charAt(openParen + modeCharacterIndex);
+ char modeSymbol = parameter.charAt(closeParen + modeCharacterIndex);
+ nickPrefixes.put(String.valueOf(modeSymbol), String.valueOf(modeCharacter));
+ }
+ logger.debug(String.format("Parsed Prefixes: %s", nickPrefixes));
+ }
+ } else if (parameter.startsWith("CHANTYPES=")) {
+ for (int typeIndex = 10; typeIndex < parameter.length(); ++typeIndex) {
+ channelTypes.add(parameter.charAt(typeIndex));
+ }
+ logger.debug(String.format("Parsed Channel Types: %s", channelTypes));
+ }
+ }
+
+ /* 375, 372, and 376 handle the server’s MOTD. */
+ } else if (command.equals("375")) {
+ /* MOTD starts. */
+ motd.append(parameters.get(1)).append('\n');
+ } else if (command.equals("372")) {
+ motd.append(parameters.get(1)).append('\n');
+ } else if (command.equals("376")) {
+ motd.append(parameters.get(1)).append('\n');
+ eventBus.post(new MotdReceived(this, motd.toString()));
+ motd.setLength(0);
+
+ } else if (command.equalsIgnoreCase("KICK")) {
+ eventBus.post(new KickedFromChannel(this, parameters.get(0), reply.source().get(), parameters.get(1), getOptional(parameters, 2)));
+