From 8aa6dd86f6c7036f6dbc065efb63e1b75e5cf0a8 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 14 Feb 2020 21:10:40 -0500 Subject: Add /away --- catgirl.1 | 4 +++- chat.h | 1 + command.c | 11 +++++++++++ handle.c | 9 +++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/catgirl.1 b/catgirl.1 index a84fd9a..770fcc8 100644 --- a/catgirl.1 +++ b/catgirl.1 @@ -1,4 +1,4 @@ -.Dd February 13, 2020 +.Dd February 14, 2020 .Dt CATGIRL 1 .Os . @@ -240,6 +240,8 @@ can be typed . .Ss Chat Commands .Bl -tag -width Ds +.It Ic /away Op Ar message +Set or clear your away status. .It Ic /join Ar channel Join a channel. .It Ic /list Op Ar channel diff --git a/chat.h b/chat.h index afa8ef9..f0dadcc 100644 --- a/chat.h +++ b/chat.h @@ -131,6 +131,7 @@ void ircFormat(const char *format, ...) void ircClose(void); extern struct Replies { + size_t away; size_t join; size_t list; size_t names; diff --git a/command.c b/command.c index e0a2e2b..00c3040 100644 --- a/command.c +++ b/command.c @@ -110,6 +110,16 @@ static void commandNick(size_t id, char *params) { ircFormat("NICK :%s\r\n", params); } +static void commandAway(size_t id, char *params) { + (void)id; + if (params) { + ircFormat("AWAY :%s\r\n", params); + } else { + ircFormat("AWAY\r\n"); + } + replies.away++; +} + static void commandTopic(size_t id, char *params) { if (params) { ircFormat("TOPIC %s :%s\r\n", idNames[id], params); @@ -235,6 +245,7 @@ static const struct Handler { Command *fn; bool restricted; } Commands[] = { + { "/away", .fn = commandAway }, { "/close", .fn = commandClose }, { "/copy", .fn = commandCopy, .restricted = true }, { "/debug", .fn = commandDebug, .restricted = true }, diff --git a/handle.c b/handle.c index 2e4f56d..6dffa17 100644 --- a/handle.c +++ b/handle.c @@ -549,6 +549,13 @@ static void handleReplyAway(struct Message *msg) { ); } +static void handleReplyNowAway(struct Message *msg) { + require(msg, false, 2); + if (!replies.away) return; + uiFormat(Network, Warm, tagTime(msg), "%s", msg->params[1]); + replies.away--; +} + static bool isAction(struct Message *msg) { if (strncmp(msg->params[1], "\1ACTION ", 8)) return false; msg->params[1] += 8; @@ -675,6 +682,8 @@ static const struct Handler { { "005", handleReplyISupport }, { "276", handleReplyWhoisGeneric }, { "301", handleReplyAway }, + { "305", handleReplyNowAway }, + { "306", handleReplyNowAway }, { "307", handleReplyWhoisGeneric }, { "311", handleReplyWhoisUser }, { "312", handleReplyWhoisServer }, -- cgit 1.4.1