From 8d01c30014978e2360d5cb102e96542ecb2402b6 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 18 Feb 2024 23:35:38 +0200 Subject: [PATCH] Fix finding client to fetch messages through --- directmedia.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/directmedia.go b/directmedia.go index 02fda7f..957217d 100644 --- a/directmedia.go +++ b/directmedia.go @@ -43,6 +43,7 @@ import ( "maunium.net/go/mautrix/id" "go.mau.fi/mautrix-discord/config" + "go.mau.fi/mautrix-discord/database" ) type DirectMediaAPI struct { @@ -306,10 +307,23 @@ var ErrAttachmentNotFound = errors.New("attachment not found") func (dma *DirectMediaAPI) fetchNewAttachmentURL(ctx context.Context, meta *AttachmentMediaData) (string, time.Time, error) { var client *discordgo.Session channelIDStr := strconv.FormatUint(meta.ChannelID, 10) - users := dma.bridge.DB.GetUsersInPortal(channelIDStr) + portal := dma.bridge.GetExistingPortalByID(database.PortalKey{ChannelID: channelIDStr}) + var users []id.UserID + if portal != nil && portal.GuildID != "" { + users = dma.bridge.DB.GetUsersInPortal(portal.GuildID) + } else { + users = dma.bridge.DB.GetUsersInPortal(channelIDStr) + } for _, userID := range users { user := dma.bridge.GetCachedUserByMXID(userID) - if user != nil && user.Session != nil { + if user == nil || user.Session == nil { + continue + } + perms, err := user.Session.State.UserChannelPermissions(user.DiscordID, channelIDStr) + if err == nil && perms&discordgo.PermissionViewChannel == 0 { + continue + } + if client == nil || err == nil { client = user.Session if !client.IsUser { break