From 54262e2d206b21be2dffb11c2bdd2914b03675f2 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Sun, 26 Apr 2015 22:53:38 +0200
Subject: degesch: implement /ctcp, stubplement /me
---
degesch.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 46 insertions(+), 4 deletions(-)
diff --git a/degesch.c b/degesch.c
index 95350ae..628c9d3 100644
--- a/degesch.c
+++ b/degesch.c
@@ -112,6 +112,12 @@ isdigit_ascii (int c)
return c >= '0' && c <= '9';
}
+static int
+toupper_ascii (int c)
+{
+ return c >= 'A' && c <= 'Z' ? c : c - ('a' - 'A');
+}
+
/// Shorthand to set an error and return failure from the function
#define FAIL(...) \
BLOCK_START \
@@ -3312,6 +3318,42 @@ handle_command_notice (struct app_context *ctx, char *arguments)
return true;
}
+static bool
+handle_command_ctcp (struct app_context *ctx, char *arguments)
+{
+ if (!server_command_check (ctx, "send messages"))
+ return true;
+ if (!*arguments)
+ return false;
+
+ char *target = cut_word (&arguments);
+ if (!*arguments)
+ return false;
+
+ char *tag = cut_word (&arguments);
+ for (char *p = tag; *p; p++)
+ *p = toupper_ascii (*p);
+
+ if (*arguments)
+ irc_send (ctx, "PRIVMSG %s :\x01%s %s\x01", target, tag, arguments);
+ else
+ irc_send (ctx, "PRIVMSG %s :\x01%s\x01", target, tag);
+
+ buffer_send_status (ctx, ctx->server_buffer,
+ "CTCP query to %s: %s", target, tag);
+ return true;
+}
+
+static bool
+handle_command_me (struct app_context *ctx, char *arguments)
+{
+ if (!server_command_check (ctx, "send messages"))
+ return true;
+
+ // TODO
+ return true;
+}
+
static bool
handle_command_quit (struct app_context *ctx, char *arguments)
{
@@ -3412,10 +3454,10 @@ g_command_handlers[] =
" " },
{ "notice", handle_command_notice, "Send notice to a nick or channel",
" " },
-#if 0
- { "ctcp", NULL, "", "" },
- { "me", NULL, "", "" },
-#endif
+ { "ctcp", handle_command_ctcp, "Send a CTCP query",
+ " " },
+ { "me", handle_command_me, "Send a CTCP action",
+ "" },
{ "join", handle_command_join, "Join channels",
"[channel...]" },
--
cgit v1.2.3-70-g09d2