Some channels are typically protected with a legacy bot to which
a message is sent, causing the bot to send an INVITE to a channel,
which is invite-only.
Previously, a connect-command for sending a custom message to the
bot could be added, but there was no way to automatically accept
the invite.
This commit enables soju to automatically join a previously saved
channel when we receive an invite to it.
Examples:
- Joining #restricted, then getting disconnected from the upstream,
sending a message to the bot, receiving an invite and accepting it
- Joining #watercooler, getting kicked, then invited again after a
while
We eat the INVITE event so that we just transparently join the
channel without warning all downstreams.
Of course, of note is that we do *not* accept invites of
unknown/unsaved channels.
Thanks to eju for finding the issue and providing a first patch.
---
upstream.go | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/upstream.go b/upstream.go
index c26f993..38ecc26 100644
--- a/upstream.go+++ b/upstream.go
@@ -1587,6 +1587,18 @@ func (uc *upstreamConn) handleMessage(ctx context.Context, msg *irc.Message) err
weAreInvited := uc.isOurNick(nick)
+ if weAreInvited {+ joined := uc.channels.Get(channel) != nil+ c := uc.network.channels.Get(channel)+ if !joined && c != nil {+ // Automatically join a saved channel when we are invited+ for _, msg := range xirc.GenerateJoin([]string{c.Name}, []string{c.Key}) {+ uc.SendMessage(ctx, msg)+ }+ break+ }+ }+ uc.forEachDownstream(func(dc *downstreamConn) {
if !weAreInvited && !dc.caps.IsEnabled("invite-notify") {
return
base-commit: 97cfb366b03d0ebf40ce9a2eee3f11441a883832
--
2.41.0