IRCv3: Add support for sending CTCP ACTION

Sun, 10 Nov 2024 03:52:11 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 10 Nov 2024 03:52:11 -0600
changeset 43059
c574888ce9e2
parent 43058
7b3b26faf6ed
child 43060
af191e46233d

IRCv3: Add support for sending CTCP ACTION

Testing Done:
Sent some `/action` commands and verified they showed up properly on the wire and in other clients. When we implement the `/alias` command we will add an alias to `/action` named `/me`.

Reviewed at https://reviews.imfreedom.org/r/3646/

protocols/ircv3/purpleircv3protocolconversation.c file | annotate | diff | comparison | revisions
--- a/protocols/ircv3/purpleircv3protocolconversation.c	Sun Nov 10 03:49:39 2024 -0600
+++ b/protocols/ircv3/purpleircv3protocolconversation.c	Sun Nov 10 03:52:11 2024 -0600
@@ -47,6 +47,7 @@
 	IbisClient *client = NULL;
 	IbisMessage *ibis_message = NULL;
 	GTask *task = NULL;
+	const char *contents = NULL;
 	const char *id = NULL;
 
 	account = purple_conversation_get_account(conversation);
@@ -71,9 +72,20 @@
 		id = purple_conversation_get_name(conversation);
 	}
 
+	contents = purple_message_get_contents(message);
+
 	ibis_message = ibis_message_new(IBIS_MSG_PRIVMSG);
-	ibis_message_set_params(ibis_message, id,
-	                        purple_message_get_contents(message), NULL);
+	if(purple_message_get_action(message)) {
+		IbisCTCPMessage *ctcp_message = NULL;
+
+		ibis_message_set_params(ibis_message, id, NULL);
+
+		ctcp_message = ibis_ctcp_message_new(IBIS_CTCP_ACTION);
+		ibis_ctcp_message_set_params(ctcp_message, contents, NULL);
+		ibis_message_set_ctcp_message(ibis_message, ctcp_message);
+	} else {
+		ibis_message_set_params(ibis_message, id, contents, NULL);
+	}
 
 	client = purple_ircv3_connection_get_client(v3_connection);
 	ibis_client_write(client, ibis_message);

mercurial