diff options
Diffstat (limited to 'degesch.c')
-rw-r--r-- | degesch.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -4041,6 +4041,35 @@ irc_handle_mode_user (struct server *s, char **params) // --- Input handling ---------------------------------------------------------- static void +irc_handle_invite (struct server *s, const struct irc_message *msg) +{ + if (!msg->prefix || msg->params.len < 2) + return; + + const char *target = msg->params.vector[0]; + const char *channel_name = msg->params.vector[1]; + + struct buffer *buffer; + if (!(buffer = str_map_find (&s->irc_buffer_map, channel_name))) + buffer = s->buffer; + + // FIXME: logging + char *who = irc_cut_nickname (msg->prefix); + char *who_utf8 = irc_to_utf8 (s->ctx, who); + free (who); + + // IRCv3.2 invite-notify extension allows the target to be someone else + if (irc_is_this_us (s, target)) + buffer_send_status (s->ctx, buffer, + "%s has invited you to %s", who_utf8, channel_name); + else + buffer_send_status (s->ctx, buffer, + "%s has invited %s to %s", who_utf8, target, channel_name); + + free (who_utf8); +} + +static void irc_handle_join (struct server *s, const struct irc_message *msg) { if (!msg->prefix || msg->params.len < 1) @@ -4601,6 +4630,7 @@ static struct irc_handler g_irc_handlers[] = { // This list needs to stay sorted + { "INVITE", irc_handle_invite }, { "JOIN", irc_handle_join }, { "KICK", irc_handle_kick }, { "MODE", irc_handle_mode }, |