aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorC. McEnroe <june@causal.agency>2020-02-14 21:10:40 -0500
committerC. McEnroe <june@causal.agency>2020-02-14 21:10:40 -0500
commit8aa6dd86f6c7036f6dbc065efb63e1b75e5cf0a8 (patch)
tree29231a93fb4b7083513f42ce58168d5284929575
parentSave heat, unreadTotal, unreadWarm (diff)
downloadcatgirl-8aa6dd86f6c7036f6dbc065efb63e1b75e5cf0a8.tar.gz
catgirl-8aa6dd86f6c7036f6dbc065efb63e1b75e5cf0a8.zip
Add /away
-rw-r--r--catgirl.14
-rw-r--r--chat.h1
-rw-r--r--command.c11
-rw-r--r--handle.c9
4 files changed, 24 insertions, 1 deletions
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 },