diff options
-rw-r--r-- | catgirl.1 | 4 | ||||
-rw-r--r-- | chat.h | 1 | ||||
-rw-r--r-- | command.c | 11 | ||||
-rw-r--r-- | handle.c | 9 |
4 files changed, 24 insertions, 1 deletions
@@ -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 @@ -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; @@ -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 }, @@ -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 }, |