From 01888aeb1c1f6ad41c0e77013a4dd7b2c5360626 Mon Sep 17 00:00:00 2001 From: Ludvig Lundgren Date: Sat, 16 Jul 2022 01:23:28 +0200 Subject: [PATCH] feat(irc): join valid channels from invite (#354) --- internal/irc/handler.go | 54 ++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/internal/irc/handler.go b/internal/irc/handler.go index 873c084..19f2aa2 100644 --- a/internal/irc/handler.go +++ b/internal/irc/handler.go @@ -619,11 +619,6 @@ func (h *Handler) handlePart(msg ircmsg.Message) { h.log.Debug().Msgf("PART channel %v", channel) - if err := h.client.Part(channel); err != nil { - h.log.Error().Err(err).Msgf("error handling part: %v", channel) - return - } - // reset monitoring status v, ok := h.channelHealth[channel] if !ok { @@ -642,8 +637,7 @@ func (h *Handler) handlePart(msg ircmsg.Message) { func (h *Handler) PartChannel(channel string) error { h.log.Debug().Msgf("PART channel %v", channel) - err := h.client.Part(channel) - if err != nil { + if err := h.client.Part(channel); err != nil { h.log.Error().Err(err).Msgf("error handling part: %v", channel) return err } @@ -670,23 +664,29 @@ func (h *Handler) handleJoined(msg ircmsg.Message) { } // get channel - channel := msg.Params[1] + channel := strings.ToLower(msg.Params[1]) h.log.Debug().Msgf("JOINED: %v", msg.Params[1]) + // check if channel is valid and if not lets part + valid := h.isValidHandlerChannel(channel) + if !valid { + if err := h.PartChannel(channel); err != nil { + h.log.Error().Err(err).Msgf("error handling part for unwanted channel: %v", channel) + return + } + return + } + // set monitoring on current channelHealth, or add new - v, ok := h.channelHealth[strings.ToLower(channel)] + v, ok := h.channelHealth[channel] if ok { v.SetMonitoring() } else if v == nil { h.AddChannelHealth(channel) } - valid := h.isValidChannel(channel) - if valid { - h.log.Info().Msgf("Monitoring channel %v", msg.Params[1]) - return - } + h.log.Info().Msgf("Monitoring channel %v", msg.Params[1]) } func (h *Handler) sendConnectCommands(msg string) error { @@ -721,6 +721,14 @@ func (h *Handler) handleInvite(msg ircmsg.Message) { // get channel channel := msg.Params[1] + h.log.Trace().Msgf("INVITE from %v to join: %v ", msg.Nick(), channel) + + validChannel := h.isValidHandlerChannel(channel) + if !validChannel { + h.log.Trace().Msgf("invite from %v to join: %v - invalid channel, skip joining", msg.Nick(), channel) + return + } + h.log.Debug().Msgf("INVITE from %v, joining %v", msg.Nick(), channel) err := h.client.Join(channel) @@ -817,6 +825,24 @@ func (h *Handler) isValidChannel(channel string) bool { return true } +// check if channel is from definition or user defined +func (h *Handler) isValidHandlerChannel(channel string) bool { + channel = strings.ToLower(channel) + + _, ok := h.validChannels[channel] + if ok { + return true + } + + for _, ircChannel := range h.network.Channels { + if channel == strings.ToLower(ircChannel.Name) { + return true + } + } + + return false +} + // irc line can contain lots of extra stuff like color so lets clean that func (h *Handler) cleanMessage(message string) string { var regexMessageClean = `\x0f|\x1f|\x02|\x03(?:[\d]{1,2}(?:,[\d]{1,2})?)?`