summary refs log tree commit diff
path: root/handle.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--handle.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/handle.c b/handle.c
index fe64f33..44329ff 100644
--- a/handle.c
+++ b/handle.c
@@ -14,6 +14,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
+#include <assert.h>
 #include <ctype.h>
 #include <err.h>
 #include <stdbool.h>
@@ -225,6 +226,32 @@ static void handlePart(struct Message *msg) {
 	);
 }
 
+static void handleReplyNames(struct Message *msg) {
+	require(msg, false, 4);
+	size_t id = idFor(msg->params[2]);
+	char buf[1024];
+	size_t len = 0;
+	while (msg->params[3]) {
+		char *name = strsep(&msg->params[3], " ");
+		name += strspn(name, self.prefixes);
+		char *nick = strsep(&name, "!");
+		char *user = strsep(&name, "@");
+		enum Color color = (user ? hash(user) : Default);
+		completeAdd(id, nick, color);
+		int n = snprintf(
+			&buf[len], sizeof(buf) - len,
+			"%s\3%02d%s\3", (len ? ", " : ""), color, nick
+		);
+		assert(n > 0 && len + n < sizeof(buf));
+		len += n;
+	}
+	uiFormat(
+		id, Cold, tagTime(msg),
+		"In \3%02d%s\3 are %s",
+		hash(msg->params[2]), msg->params[2], buf
+	);
+}
+
 static void handleReplyNoTopic(struct Message *msg) {
 	require(msg, false, 2);
 	uiFormat(
@@ -359,6 +386,7 @@ static const struct Handler {
 	{ "005", handleReplyISupport },
 	{ "331", handleReplyNoTopic },
 	{ "332", handleReplyTopic },
+	{ "353", handleReplyNames },
 	{ "372", handleReplyMOTD },
 	{ "432", handleErrorErroneousNickname },
 	{ "433", handleErrorNicknameInUse },
sending CAP ENDJune McEnroe 2019-10-27Only increment consumer after successful sendJune McEnroe 2019-10-27Set SO_REUSEADDR on bindsJune McEnroe 2019-10-27Output ring info on SIGINFOJune McEnroe 2019-10-27Improve client/server error messagesJune McEnroe 2019-10-27Add reload cmd to rc scriptJune McEnroe 2019-10-27Reload certificate on SIGUSR1June McEnroe 2019-10-27Drop clients on zero-length readsJune McEnroe 2019-10-27Explicitly tls_handshake new clientsJune McEnroe 2019-10-26Document rationaleJune McEnroe 2019-10-26Handle nick collisionJune McEnroe 2019-10-26Wait for AUTHENTICATE + from serverJune McEnroe 2019-10-26Respond to PING with same parameterJune McEnroe 2019-10-26Add undocumented flag to disable verificationJune McEnroe 2019-10-26Do not require RPL_ISUPPORT for stateReadyJune McEnroe 2019-10-26Implement graceful shutdownJune McEnroe 2019-10-26Require PASS before USERJune McEnroe 2019-10-26Track channel topicsJune McEnroe 2019-10-26Set AWAY when no clients are connectedJune McEnroe 2019-10-26Add flags to request TOPIC and NAMES on client connectJune McEnroe 2019-10-26OopsJune McEnroe 2019-10-26Disconnect client on unknown commandJune McEnroe 2019-10-26Allow reading sensitive information from filesJune McEnroe 2019-10-26Add rc scriptJune McEnroe 2019-10-25Add install and uninstall targetsJune McEnroe 2019-10-25Expand documentationJune McEnroe 2019-10-25Add AGPLv3 notice on client registrationJune McEnroe 2019-10-25Rename project pounceJune McEnroe