Subscribe to bridged guilds on connect

This commit is contained in:
Tulir Asokan
2023-02-04 14:13:27 +02:00
parent 7cdd1bb9e4
commit 80f8bed9b9
3 changed files with 31 additions and 3 deletions

28
user.go
View File

@@ -521,6 +521,7 @@ func (user *User) Connect() error {
user.Session = session
user.Session.AddHandler(user.readyHandler)
user.Session.AddHandler(user.resumeHandler)
user.Session.AddHandler(user.connectedHandler)
user.Session.AddHandler(user.disconnectedHandler)
user.Session.AddHandler(user.invalidAuthHandler)
@@ -613,9 +614,36 @@ func (user *User) readyHandler(_ *discordgo.Session, r *discordgo.Ready) {
user.Update()
}
go user.subscribeGuilds(2 * time.Second)
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
}
func (user *User) subscribeGuilds(delay time.Duration) {
for _, guildMeta := range user.Session.State.Guilds {
guild := user.bridge.GetGuildByID(guildMeta.ID, false)
if guild != nil && guild.MXID != "" {
user.log.Debugfln("Subscribing to guild %s", guild.ID)
dat := discordgo.GuildSubscribeData{
GuildID: guild.ID,
Typing: true,
Activities: true,
Threads: true,
}
err := user.Session.SubscribeGuild(dat)
if err != nil {
user.log.Warnfln("Failed to subscribe to %s: %v", guild.ID, err)
}
time.Sleep(delay)
}
}
}
func (user *User) resumeHandler(_ *discordgo.Session, r *discordgo.Resumed) {
user.log.Debugln("Discord connection resumed")
user.subscribeGuilds(0 * time.Second)
}
func (user *User) addPrivateChannelToSpace(portal *Portal) bool {
if portal.MXID == "" {
return false