Add /whowas

master
C. McEnroe 2020-12-30 14:29:32 -05:00
parent 05fbcb41c9
commit 8b6a476c35
4 changed files with 37 additions and 4 deletions

View File

@ -1,4 +1,4 @@
.Dd December 29, 2020 .Dd December 30, 2020
.Dt CATGIRL 1 .Dt CATGIRL 1
.Os .Os
. .
@ -339,6 +339,8 @@ Press
twice to copy the current topic. twice to copy the current topic.
.It Ic /whois Ar nick .It Ic /whois Ar nick
Query information about a user. Query information about a user.
.It Ic /whowas Ar nick
Query past information about a user.
.El .El
. .
.Ss UI Commands .Ss UI Commands

1
chat.h
View File

@ -260,6 +260,7 @@ extern struct Replies {
uint topic; uint topic;
uint who; uint who;
uint whois; uint whois;
uint whowas;
} replies; } replies;
void handle(struct Message *msg); void handle(struct Message *msg);

View File

@ -316,6 +316,13 @@ static void commandWhois(uint id, char *params) {
replies.whois += count; 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) { static void commandNS(uint id, char *params) {
(void)id; (void)id;
if (params) ircFormat("PRIVMSG NickServ :%s\r\n", params); if (params) ircFormat("PRIVMSG NickServ :%s\r\n", params);
@ -500,6 +507,7 @@ static const struct Handler {
{ "/uninvex", commandUninvex, 0 }, { "/uninvex", commandUninvex, 0 },
{ "/voice", commandVoice, 0 }, { "/voice", commandVoice, 0 },
{ "/whois", commandWhois, 0 }, { "/whois", commandWhois, 0 },
{ "/whowas", commandWhowas, 0 },
{ "/window", commandWindow, 0 }, { "/window", commandWindow, 0 },
}; };

View File

@ -1058,12 +1058,12 @@ static void handleReplyWhoisUser(struct Message *msg) {
static void handleReplyWhoisServer(struct Message *msg) { static void handleReplyWhoisServer(struct Message *msg) {
require(msg, false, 4); require(msg, false, 4);
if (!replies.whois) return; if (!replies.whois && !replies.whowas) return;
uiFormat( uiFormat(
Network, Warm, tagTime(msg), 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], 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--; 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) { static void handleReplyAway(struct Message *msg) {
require(msg, false, 3); require(msg, false, 3);
// Might be part of a WHOIS response. // Might be part of a WHOIS response.
@ -1300,6 +1320,7 @@ static const struct Handler {
{ "311", handleReplyWhoisUser }, { "311", handleReplyWhoisUser },
{ "312", handleReplyWhoisServer }, { "312", handleReplyWhoisServer },
{ "313", handleReplyWhoisGeneric }, { "313", handleReplyWhoisGeneric },
{ "314", handleReplyWhowasUser },
{ "315", handleReplyEndOfWho }, { "315", handleReplyEndOfWho },
{ "317", handleReplyWhoisIdle }, { "317", handleReplyWhoisIdle },
{ "318", handleReplyEndOfWhois }, { "318", handleReplyEndOfWhois },
@ -1320,6 +1341,7 @@ static const struct Handler {
{ "366", handleReplyEndOfNames }, { "366", handleReplyEndOfNames },
{ "367", handleReplyBanList }, { "367", handleReplyBanList },
{ "368", handleReplyEndOfBanList }, { "368", handleReplyEndOfBanList },
{ "369", handleReplyEndOfWhowas },
{ "372", handleReplyMOTD }, { "372", handleReplyMOTD },
{ "378", handleReplyWhoisGeneric }, { "378", handleReplyWhoisGeneric },
{ "379", handleReplyWhoisGeneric }, { "379", handleReplyWhoisGeneric },