summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--catgirl.14
-rw-r--r--chat.h1
-rw-r--r--command.c8
-rw-r--r--handle.c28
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 },