summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-04-05 11:27:51 -0400
committerJune McEnroe <june@causal.agency>2020-04-05 11:27:51 -0400
commit8a4a9999baa28b6ace84fc1a5be69f8c71f3f88e (patch)
treee8ef22bcb8cbc927cde9c6bbf842a0f8693dc4fb
parentAdd unscoop matchers for ban/unban events (diff)
downloadlitterbox-8a4a9999baa28b6ace84fc1a5be69f8c71f3f88e.tar.gz
litterbox-8a4a9999baa28b6ace84fc1a5be69f8c71f3f88e.zip
Parse mode types from ISUPPORT
-rw-r--r--litterbox.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/litterbox.c b/litterbox.c
index d0cafef..aa6ca1a 100644
--- a/litterbox.c
+++ b/litterbox.c
@@ -122,6 +122,10 @@ static char *self;
 static char *network;
 static char *chanTypes;
 static char *prefixes;
+static char *prefixModes;
+static char *listModes;
+static char *paramModes;
+static char *setParamModes;
 
 static void set(char **field, const char *value) {
 	free(*field);
@@ -172,9 +176,13 @@ static void handleReplyISupport(struct Message *msg) {
 		} else if (!strcmp(key, "CHANTYPES")) {
 			set(&chanTypes, msg->params[i]);
 		} else if (!strcmp(key, "PREFIX")) {
-			strsep(&msg->params[i], ")");
-			if (!msg->params[i]) continue;
+			strsep(&msg->params[i], "(");
+			set(&prefixModes, strsep(&msg->params[i], ")"));
 			set(&prefixes, msg->params[i]);
+		} else if (!strcmp(key, "CHANMODES")) {
+			set(&listModes, strsep(&msg->params[i], ","));
+			set(&paramModes, strsep(&msg->params[i], ","));
+			set(&setParamModes, strsep(&msg->params[i], ","));
 		}
 	}
 }
@@ -759,6 +767,10 @@ int main(int argc, char *argv[]) {
 	set(&network, (defaultNetwork ? defaultNetwork : host));
 	set(&chanTypes, "#&");
 	set(&prefixes, "@+");
+	set(&prefixModes, "ov");
+	set(&listModes, "b");
+	set(&paramModes, "k");
+	set(&setParamModes, "l");
 
 	client = tls_client();
 	if (!client) errx(EX_SOFTWARE, "tls_client");