From b0dbc34f9a0180caf90a2d3ea98e79399435c0c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Thu, 21 May 2015 19:57:12 +0200 Subject: [PATCH] degesch: show mode changes --- degesch.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/degesch.c b/degesch.c index 021b5ed..6aff5f7 100644 --- a/degesch.c +++ b/degesch.c @@ -3828,8 +3828,50 @@ irc_handle_kick (struct server *s, const struct irc_message *msg) static void irc_handle_mode (struct server *s, const struct irc_message *msg) { + if (!msg->prefix || msg->params.len < 1) + return; + + char *who = irc_cut_nickname (msg->prefix); + const char *context = msg->params.vector[0]; + + // Join the modes back to a single string + struct str_vector copy; + str_vector_init (©); + str_vector_add_vector (©, msg->params.vector + 1); + char *reconstructed = join_str_vector (©, ' '); + str_vector_free (©); + char *modes = irc_to_utf8 (s->ctx, reconstructed); + free (reconstructed); + // TODO: parse the mode change and apply it - // TODO: log a message + + if (irc_is_channel (s, context)) + { + struct channel *channel = str_map_find (&s->irc_channels, context); + struct buffer *buffer = str_map_find (&s->irc_buffer_map, context); + hard_assert ((channel && buffer) || + (channel && !buffer) || (!channel && !buffer)); + + // FIXME: logging + if (buffer) + { + buffer_send_status (s->ctx, buffer, + "Mode %s [%s] by %s", context, modes, who); + } + } + else if (irc_is_this_us (s, context)) + { + // FIXME: logging + buffer_send_status (s->ctx, s->buffer, + "User mode [%s] by %s", modes, who); + } + else + { + // XXX: this shouldn't happen, reconnect? + } + + free (who); + free (modes); } static void