diff options
author | C. McEnroe | 2020-02-02 17:26:20 -0500 |
---|---|---|
committer | C. McEnroe | 2020-02-02 17:26:20 -0500 |
commit | b535f0abdde6fb79f9f972d0b39c8b0a7a837339 (patch) | |
tree | 66d6dde524f93bb8b8a45d22e7af78bb89913abc | |
parent | e8d0d71775e2a9602a233682e30246d7b7651e55 (diff) |
Handle notices and actions
-rw-r--r-- | handle.c | 27 |
1 files changed, 22 insertions, 5 deletions
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 }, }; |