feat(irc): join valid channels from invite (#354)

This commit is contained in:
Ludvig Lundgren 2022-07-16 01:23:28 +02:00 committed by GitHub
parent f74b348b26
commit 01888aeb1c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -619,11 +619,6 @@ func (h *Handler) handlePart(msg ircmsg.Message) {
h.log.Debug().Msgf("PART channel %v", channel) 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 // reset monitoring status
v, ok := h.channelHealth[channel] v, ok := h.channelHealth[channel]
if !ok { if !ok {
@ -642,8 +637,7 @@ func (h *Handler) handlePart(msg ircmsg.Message) {
func (h *Handler) PartChannel(channel string) error { func (h *Handler) PartChannel(channel string) error {
h.log.Debug().Msgf("PART channel %v", channel) h.log.Debug().Msgf("PART channel %v", channel)
err := h.client.Part(channel) if err := h.client.Part(channel); err != nil {
if err != nil {
h.log.Error().Err(err).Msgf("error handling part: %v", channel) h.log.Error().Err(err).Msgf("error handling part: %v", channel)
return err return err
} }
@ -670,23 +664,29 @@ func (h *Handler) handleJoined(msg ircmsg.Message) {
} }
// get channel // get channel
channel := msg.Params[1] channel := strings.ToLower(msg.Params[1])
h.log.Debug().Msgf("JOINED: %v", 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 // set monitoring on current channelHealth, or add new
v, ok := h.channelHealth[strings.ToLower(channel)] v, ok := h.channelHealth[channel]
if ok { if ok {
v.SetMonitoring() v.SetMonitoring()
} else if v == nil { } else if v == nil {
h.AddChannelHealth(channel) h.AddChannelHealth(channel)
} }
valid := h.isValidChannel(channel) h.log.Info().Msgf("Monitoring channel %v", msg.Params[1])
if valid {
h.log.Info().Msgf("Monitoring channel %v", msg.Params[1])
return
}
} }
func (h *Handler) sendConnectCommands(msg string) error { func (h *Handler) sendConnectCommands(msg string) error {
@ -721,6 +721,14 @@ func (h *Handler) handleInvite(msg ircmsg.Message) {
// get channel // get channel
channel := msg.Params[1] 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) h.log.Debug().Msgf("INVITE from %v, joining %v", msg.Nick(), channel)
err := h.client.Join(channel) err := h.client.Join(channel)
@ -817,6 +825,24 @@ func (h *Handler) isValidChannel(channel string) bool {
return true 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 // irc line can contain lots of extra stuff like color so lets clean that
func (h *Handler) cleanMessage(message string) string { func (h *Handler) cleanMessage(message string) string {
var regexMessageClean = `\x0f|\x1f|\x02|\x03(?:[\d]{1,2}(?:,[\d]{1,2})?)?` var regexMessageClean = `\x0f|\x1f|\x02|\x03(?:[\d]{1,2}(?:,[\d]{1,2})?)?`