From 8b6a476c35c4ee209dbaa3feced83aff4c02b5d5 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 30 Dec 2020 14:29:32 -0500 Subject: Add /whowas --- catgirl.1 | 4 +++- chat.h | 1 + command.c | 8 ++++++++ handle.c | 28 +++++++++++++++++++++++++--- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/catgirl.1 b/catgirl.1 index 3f65618..1c782cf 100644 --- a/catgirl.1 +++ b/catgirl.1 @@ -1,4 +1,4 @@ -.Dd December 29, 2020 +.Dd December 30, 2020 .Dt CATGIRL 1 .Os . @@ -339,6 +339,8 @@ Press twice to copy the current topic. .It Ic /whois Ar nick Query information about a user. +.It Ic /whowas Ar nick +Query past information about a user. .El . .Ss UI Commands diff --git a/chat.h b/chat.h index ccd8863..e1f6584 100644 --- a/chat.h +++ b/chat.h @@ -260,6 +260,7 @@ extern struct Replies { uint topic; uint who; uint whois; + uint whowas; } replies; void handle(struct Message *msg); diff --git a/command.c b/command.c index bf5a2e3..de8d0ff 100644 --- a/command.c +++ b/command.c @@ -316,6 +316,13 @@ static void commandWhois(uint id, char *params) { replies.whois += count; } +static void commandWhowas(uint id, char *params) { + (void)id; + if (!params) return; + ircFormat("WHOWAS %s\r\n", params); + replies.whowas++; +} + static void commandNS(uint id, char *params) { (void)id; if (params) ircFormat("PRIVMSG NickServ :%s\r\n", params); @@ -500,6 +507,7 @@ static const struct Handler { { "/uninvex", commandUninvex, 0 }, { "/voice", commandVoice, 0 }, { "/whois", commandWhois, 0 }, + { "/whowas", commandWhowas, 0 }, { "/window", commandWindow, 0 }, }; diff --git a/handle.c b/handle.c index b648840..a771fa3 100644 --- a/handle.c +++ b/handle.c @@ -1058,12 +1058,12 @@ static void handleReplyWhoisUser(struct Message *msg) { static void handleReplyWhoisServer(struct Message *msg) { require(msg, false, 4); - if (!replies.whois) return; + if (!replies.whois && !replies.whowas) return; uiFormat( Network, Warm, tagTime(msg), - "\3%02d%s\3\tis connected to %s (%s)", + "\3%02d%s\3\t%s connected to %s (%s)", completeColor(Network, msg->params[1]), msg->params[1], - msg->params[2], msg->params[3] + (replies.whowas ? "was" : "is"), msg->params[2], msg->params[3] ); } @@ -1135,6 +1135,26 @@ static void handleReplyEndOfWhois(struct Message *msg) { replies.whois--; } +static void handleReplyWhowasUser(struct Message *msg) { + require(msg, false, 6); + if (!replies.whowas) return; + completeTouch(Network, msg->params[1], hash(msg->params[2])); + uiFormat( + Network, Warm, tagTime(msg), + "\3%02d%s\3\twas %s!%s@%s (%s)", + hash(msg->params[2]), msg->params[1], + msg->params[1], msg->params[2], msg->params[3], msg->params[5] + ); +} + +static void handleReplyEndOfWhowas(struct Message *msg) { + require(msg, false, 2); + if (strcmp(msg->params[1], self.nick)) { + completeRemove(Network, msg->params[1]); + } + if (replies.whowas) replies.whowas--; +} + static void handleReplyAway(struct Message *msg) { require(msg, false, 3); // Might be part of a WHOIS response. @@ -1300,6 +1320,7 @@ static const struct Handler { { "311", handleReplyWhoisUser }, { "312", handleReplyWhoisServer }, { "313", handleReplyWhoisGeneric }, + { "314", handleReplyWhowasUser }, { "315", handleReplyEndOfWho }, { "317", handleReplyWhoisIdle }, { "318", handleReplyEndOfWhois }, @@ -1320,6 +1341,7 @@ static const struct Handler { { "366", handleReplyEndOfNames }, { "367", handleReplyBanList }, { "368", handleReplyEndOfBanList }, + { "369", handleReplyEndOfWhowas }, { "372", handleReplyMOTD }, { "378", handleReplyWhoisGeneric }, { "379", handleReplyWhoisGeneric }, -- cgit 1.4.1 ) valueChristian Hesse 2019-11-08git: update to v2.24.0Christian Hesse 2019-10-25git: update to v2.23.0Christian Hesse 2019-10-25git: update to v2.22.0Christian Hesse 2019-06-25ui-tree: allow per repository override for enable-blameChristian Hesse 2019-06-05tests: successfully validate rc versionsChristian Hesse 2019-06-05git: update to v2.21.0Christian Hesse 2019-06-05ui-ssdiff: ban strncat()Christian Hesse 2019-06-05global: make 'char *path' const where possibleChristian Hesse 2019-05-20ui-shared: restrict to 15 levelsJason A. Donenfeld 2019-02-23ui-diff,ui-tag: don't use htmlf with non-formatted stringsChris Mayo 2019-02-23ui-ssdiff: resolve HTML5 validation errorsChris Mayo 2019-01-03filters: migrate from luacrypto to luaosslJason A. Donenfeld 2019-01-02ui-shared: fix broken sizeof in title setting and rewriteJason A. Donenfeld 2018-12-09git: update to v2.20.0Christian Hesse 2018-11-25ui-blame: set repo for sbJason A. Donenfeld 2018-11-25auth-filter: pass url with query string attachedJason A. Donenfeld 2018-11-21git: use xz compressed archive for downloadChristian Hesse 2018-10-12git: update to v2.19.1Christian Hesse 2018-09-11ui-ssdiff: ban strcat()Christian Hesse 2018-09-11ui-ssdiff: ban strncpy()Christian Hesse 2018-09-11ui-shared: ban strcat()Christian Hesse 2018-09-11ui-patch: ban sprintf()Christian Hesse 2018-09-11ui-log: ban strncpy()Christian Hesse 2018-09-11ui-log: ban strcpy()Christian Hesse 2018-09-11parsing: ban sprintf()Christian Hesse 2018-09-11parsing: ban strncpy()Christian Hesse 2018-08-28filters: generate anchor links from markdownChristian Hesse 2018-08-03Bump version.Jason A. Donenfeld 2018-08-03clone: fix directory traversalJason A. Donenfeld 2018-08-03config: record repo.snapshot-prefix in the per-repo configKonstantin Ryabitsev