--- a/src/spasm-chat.c Mon Apr 20 15:51:14 2020 -0500
+++ b/src/spasm-chat.c Mon Apr 20 16:26:22 2020 -0500
@@ -46,6 +46,7 @@
typedef void (*SpasmChatMessageHandler)(SpasmChatService *sa,
@@ -59,7 +60,8 @@
*****************************************************************************/
spasm_chat_service_regex_init(SpasmChatService *chat) {
- chat->regex_message = g_regex_new("(?::(?<prefix>[^ ]+) +)?"
+ chat->regex_message = g_regex_new("(?:@(?<tags>[^ ]+) )?" + "(?::(?<prefix>[^ ]+) +)?" "(?: (?<middle>(?:[^ :]+(?: [^ :]+)*)))*"
"(?<coda> +:(?<trailing>.*)?)?",
@@ -141,15 +143,17 @@
*****************************************************************************/
-spasm_chat_service_handle_ping(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_ping(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, spasm_chat_service_real_send(chat, "PONG :%s", trailing);
-spasm_chat_service_handle_join(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_join(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, PurpleAccount *account = spasm_account_get_account(chat->sa);
@@ -206,8 +210,9 @@
-spasm_chat_service_handle_names(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_names(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, PurpleAccount *account = NULL;
PurpleConvChat *chat_conversation = NULL;
@@ -256,8 +261,9 @@
-spasm_chat_service_handle_part(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_part(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, PurpleAccount *account = spasm_account_get_account(chat->sa);
PurpleConnection *connection = NULL;
@@ -309,17 +315,21 @@
-spasm_chat_service_handle_privmsg(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_privmsg(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, if(g_regex_match(chat->regex_target, middle, 0, &info)) {
PurpleAccount *account = NULL;
PurpleConversation *conversation = NULL;
- gchar *target = NULL, *nick = NULL;
+ gchar *nick = NULL, *target = NULL; target = g_match_info_fetch_named(info, "target");
+ purple_debug_misc("spasm-chat", "privmsg tags: '%s'\n", tags); nick = spasm_chat_service_nick_from_mask(prefix);
account = spasm_account_get_account(chat->sa);
@@ -344,12 +354,12 @@
-spasm_chat_service_handle_cap(SpasmChatService *chat, const gchar *prefix,
- const gchar *middle, const gchar *trailing)
+spasm_chat_service_handle_cap(SpasmChatService *chat, const gchar *tags, + const gchar *prefix, const gchar *middle, if(g_ascii_strcasecmp(middle, "ACK") == 0) {
spasm_chat_service_real_send(chat, "CAP END");
- //spasm_chat_read(chat);
purple_debug_misc("spasm-chat", "cap-middle: '%s'\n", middle);
purple_debug_misc("spasm-chat", "cap-trailing: '%s'\n", trailing);
@@ -390,7 +400,8 @@
- gchar *prefix = NULL, *command = NULL, *middle = NULL, *trailing = NULL;
+ gchar *command = NULL, *middle = NULL, *prefix = NULL, *tags = NULL; + gchar *trailing = NULL; gboolean matches = FALSE;
@@ -405,6 +416,7 @@
+ tags = g_match_info_fetch_named(info, "tags"); prefix = g_match_info_fetch_named(info, "prefix");
command = g_match_info_fetch_named(info, "command");
middle = g_match_info_fetch_named(info, "middle");
@@ -418,11 +430,12 @@
SpasmChatMessageHandler handler = (SpasmChatMessageHandler)value;
- handler(chat, prefix, middle, trailing);
+ handler(chat, tags, prefix, middle, trailing); purple_debug_misc("spasm-chat", "no handler found for \"%s\"\n",
+ purple_debug_misc("spasm-chat", "tags: \"%s\"\n", tags); purple_debug_misc("spasm-chat", "prefix: \"%s\"\n", prefix);
purple_debug_misc("spasm-chat", "command: \"%s\"\n", command);
purple_debug_misc("spasm-chat", "middle: \"%s\"\n", middle);
@@ -430,6 +443,7 @@
purple_debug_misc("spasm-chat", "----\n");
@@ -525,7 +539,7 @@
chat->output_stream = g_io_stream_get_output_stream(G_IO_STREAM(chat->socket_connection));
/* first check that we have the right capabilities */
- spasm_chat_service_real_send(chat, "CAP REQ :twitch.tv/membership");
+ spasm_chat_service_real_send(chat, "CAP REQ :twitch.tv/membership twitch.tv/tags"); spasm_chat_service_real_send(