Automatically join a stored channel on INVITE
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.
This commit is contained in:
parent
6e79a94172
commit
f5612ead04
12
upstream.go
12
upstream.go
|
@ -1616,6 +1616,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
|
||||
|
|
Loading…
Reference in a new issue