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
.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

1
chat.h
View File

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

View File

@ -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 },
};

View File

@ -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 },