From b535f0abdde6fb79f9f972d0b39c8b0a7a837339 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 2 Feb 2020 17:26:20 -0500 Subject: Handle notices and actions --- handle.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'handle.c') diff --git a/handle.c b/handle.c index da635b4..2af5837 100644 --- a/handle.c +++ b/handle.c @@ -193,15 +193,31 @@ static void handleJoin(struct Message *msg) { ); } +static bool isAction(struct Message *msg) { + if (strncmp(msg->params[1], "\1ACTION ", 8)) return false; + msg->params[1] += 8; + size_t len = strlen(msg->params[1]); + if (msg->params[1][len - 1] == '\1') msg->params[1][len - 1] = '\0'; + return true; +} + static void handlePrivmsg(struct Message *msg) { require(msg, true, 2); - bool query = self.nick && !strcmp(msg->params[0], self.nick); - size_t id = idFor(query ? msg->nick : msg->params[0]); - if (query) idColors[id] = hash(msg->user); + bool query = msg->params[0][0] != '#'; // FIXME: CHANTYPES. + bool network = query && strchr(msg->nick, '.'); + bool notice = (msg->cmd[0] == 'N'); + bool action = isAction(msg); + // TODO: Send services to Network? + size_t id = (network ? Network : idFor(query ? msg->nick : msg->params[0])); + if (query && !network) idColors[id] = hash(msg->user); uiFormat( id, Warm, tagTime(msg), - "\3%d<%s>\3 %s", - hash(msg->user), msg->nick, msg->params[1] + "\3%d%s%s%s\3 %s", + hash(msg->user), + (action ? "* " : notice ? "-" : "<"), + msg->nick, + (action ? "" : notice ? "-" : ">"), + msg->params[1] ); } @@ -226,6 +242,7 @@ static const struct Handler { { "AUTHENTICATE", handleAuthenticate }, { "CAP", handleCap }, { "JOIN", handleJoin }, + { "NOTICE", handlePrivmsg }, { "PING", handlePing }, { "PRIVMSG", handlePrivmsg }, }; -- cgit 1.4.1