From 80f8bed9b91469ec49dfa72ae83bde42c4d6d474 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 4 Feb 2023 14:13:27 +0200 Subject: [PATCH] Subscribe to bridged guilds on connect --- go.mod | 2 +- go.sum | 4 ++-- user.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 54b09dd..4456c89 100644 --- a/go.mod +++ b/go.mod @@ -34,4 +34,4 @@ require ( maunium.net/go/mauflag v1.0.0 // indirect ) -replace github.com/bwmarrin/discordgo => github.com/beeper/discordgo v0.0.0-20230129125832-37978ff8e399 +replace github.com/bwmarrin/discordgo => github.com/beeper/discordgo v0.0.0-20230204115541-789543fc10ab diff --git a/go.sum b/go.sum index 1d754db..22bbada 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= -github.com/beeper/discordgo v0.0.0-20230129125832-37978ff8e399 h1:3GZhhiyeXo/r40NmaQddBpCfosSSIrSrqZBLXJWrtYc= -github.com/beeper/discordgo v0.0.0-20230129125832-37978ff8e399/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/beeper/discordgo v0.0.0-20230204115541-789543fc10ab h1:TYb2GpqpkbhzaWLXh3YER0C/nzGThxgCRRuJbeFM0L0= +github.com/beeper/discordgo v0.0.0-20230204115541-789543fc10ab/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= diff --git a/user.go b/user.go index 8539157..ac30554 100644 --- a/user.go +++ b/user.go @@ -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