+package net.pterodactylus.irc.connection;
+
+import static java.util.Arrays.asList;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.pterodactylus.irc.Connection;
+import net.pterodactylus.irc.Nickname;
+import net.pterodactylus.irc.Reply;
+import net.pterodactylus.irc.event.ChannelNicknames;
+
+import com.google.common.eventbus.EventBus;
+
+/**
+ * Handles the list of nicknames that are sent on a {@code JOIN}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class ChannelNickHandler implements Handler {
+
+ private static final List<String> COMMANDS_TO_HANDLE =
+ asList("353", "366");
+ private final EventBus eventBus;
+ private final Connection connection;
+ private final PrefixHandler prefixHandler;
+ private final List<Nickname> nicknames = new ArrayList<>();
+
+ public ChannelNickHandler(EventBus eventBus, Connection connection,
+ PrefixHandler prefixHandler) {
+ this.eventBus = eventBus;
+ this.connection = connection;
+ this.prefixHandler = prefixHandler;
+ }
+
+ @Override
+ public boolean willHandle(Reply reply) {
+ return COMMANDS_TO_HANDLE.contains(reply.command());
+ }
+
+ @Override
+ public void handleReply(Reply reply) {
+ String command = reply.command();
+ List<String> parameters = reply.parameters();
+ if (command.equals("353")) {
+ asList(parameters.get(3).split(" ")).stream().forEach(
+ (nick) -> nicknames.add(prefixHandler.getNickname(nick)));
+ } else if (command.equals("366")) {
+ eventBus.post(new ChannelNicknames(connection, parameters.get(1),
+ nicknames));
+ nicknames.clear();
+ }
+ }
+
+}