From 0c19716f44799fe0ab31b933538bad46c8cce5b9 Mon Sep 17 00:00:00 2001 From: Wim Date: Sun, 22 Nov 2020 22:44:15 +0100 Subject: [PATCH] Join on invite (irc). Fixes #1231 (#1306) --- bridge/irc/handlers.go | 15 +++++++++++++++ bridge/irc/irc.go | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/bridge/irc/handlers.go b/bridge/irc/handlers.go index aaaf42fb..6310f57e 100644 --- a/bridge/irc/handlers.go +++ b/bridge/irc/handlers.go @@ -67,6 +67,20 @@ func (b *Birc) handleFiles(msg *config.Message) bool { return true } +func (b *Birc) handleInvite(client *girc.Client, event girc.Event) { + if len(event.Params) != 2 { + return + } + + channel := event.Params[1] + + b.Log.Debugf("got invite for %s", channel) + + if _, ok := b.channels[channel]; ok { + b.i.Cmd.Join(channel) + } +} + func (b *Birc) handleJoinPart(client *girc.Client, event girc.Event) { if len(event.Params) == 0 { b.Log.Debugf("handleJoinPart: empty Params? %#v", event) @@ -117,6 +131,7 @@ func (b *Birc) handleNewConnection(client *girc.Client, event girc.Event) { i.Handlers.Add("PART", b.handleJoinPart) i.Handlers.Add("QUIT", b.handleJoinPart) i.Handlers.Add("KICK", b.handleJoinPart) + i.Handlers.Add("INVITE", b.handleInvite) } func (b *Birc) handleNickServ() { diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index 8470a1c3..2352fcd7 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -30,6 +30,7 @@ type Birc struct { Local chan config.Message // local queue for flood control FirstConnection, authDone bool MessageDelay, MessageQueue, MessageLength int + channels map[string]bool *bridge.Config } @@ -40,6 +41,8 @@ func New(cfg *bridge.Config) bridge.Bridger { b.Nick = b.GetString("Nick") b.names = make(map[string][]string) b.connected = make(chan error) + b.channels = make(map[string]bool) + if b.GetInt("MessageDelay") == 0 { b.MessageDelay = 1300 } else { @@ -112,6 +115,7 @@ func (b *Birc) Disconnect() error { } func (b *Birc) JoinChannel(channel config.ChannelInfo) error { + b.channels[channel.Name] = true // need to check if we have nickserv auth done before joining channels for { if b.authDone {