From 3247709abb776d9d7e614d390603fc1ba5de7de6 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 17 Jun 2023 19:37:08 +0300 Subject: [PATCH] Improve logs and fix things with avatar reuploads --- attachments.go | 2 +- portal_convert.go | 12 ++++-------- puppet.go | 16 +++++++++------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/attachments.go b/attachments.go index 5e50dff..c8a7318 100644 --- a/attachments.go +++ b/attachments.go @@ -44,7 +44,7 @@ func downloadDiscordAttachment(url string) ([]byte, error) { defer resp.Body.Close() if resp.StatusCode > 300 { data, _ := io.ReadAll(resp.Body) - return nil, fmt.Errorf("unexpected status %d: %s", resp.StatusCode, data) + return nil, fmt.Errorf("unexpected status %d downloading %s: %s", resp.StatusCode, url, data) } return io.ReadAll(resp.Body) } diff --git a/portal_convert.go b/portal_convert.go index b11c65b..3c72842 100644 --- a/portal_convert.go +++ b/portal_convert.go @@ -323,24 +323,20 @@ func (puppet *Puppet) addMemberMeta(part *ConvertedMessage, msg *discordgo.Messa part.Extra = make(map[string]any) } var avatarURL id.ContentURI + var discordAvatarURL string if msg.Member.Avatar != "" { var err error - avatarURL, err = puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), msg.GuildID, msg.Author.ID, msg.Author.Avatar) + avatarURL, discordAvatarURL, err = puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), msg.GuildID, msg.Author.ID, msg.Author.Avatar) if err != nil { puppet.log.Warn().Err(err). Str("avatar_id", msg.Author.Avatar). Msg("Failed to reupload guild user avatar") } } - var discordAvararURL string - if msg.Member.Avatar != "" { - msg.Member.User = msg.Author - discordAvararURL = msg.Member.AvatarURL("") - } part.Extra["fi.mau.discord.guild_member_metadata"] = map[string]any{ "nick": msg.Member.Nick, "avatar_id": msg.Member.Avatar, - "avatar_url": discordAvararURL, + "avatar_url": discordAvatarURL, "avatar_mxc": avatarURL.String(), } if msg.Member.Nick != "" || !avatarURL.IsEmpty() { @@ -370,7 +366,7 @@ func (puppet *Puppet) addWebhookMeta(part *ConvertedMessage, msg *discordgo.Mess var avatarURL id.ContentURI if msg.Author.Avatar != "" { var err error - avatarURL, err = puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), "", msg.Author.ID, msg.Author.Avatar) + avatarURL, _, err = puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), "", msg.Author.ID, msg.Author.Avatar) if err != nil { puppet.log.Warn().Err(err). Str("avatar_id", msg.Author.Avatar). diff --git a/puppet.go b/puppet.go index 8766b07..9f4bd1c 100644 --- a/puppet.go +++ b/puppet.go @@ -216,7 +216,7 @@ func (puppet *Puppet) UpdateName(info *discordgo.User) bool { return true } -func (br *DiscordBridge) reuploadUserAvatar(intent *appservice.IntentAPI, guildID, userID, avatarID string) (id.ContentURI, error) { +func (br *DiscordBridge) reuploadUserAvatar(intent *appservice.IntentAPI, guildID, userID, avatarID string) (id.ContentURI, string, error) { var downloadURL, ext string if guildID == "" { downloadURL = discordgo.EndpointUserAvatar(userID, avatarID) @@ -233,17 +233,19 @@ func (br *DiscordBridge) reuploadUserAvatar(intent *appservice.IntentAPI, guildI ext = "gif" } } - url := br.Config.Bridge.MediaPatterns.Avatar(userID, avatarID, ext) - if !url.IsEmpty() { - return url, nil + if guildID == "" { + url := br.Config.Bridge.MediaPatterns.Avatar(userID, avatarID, ext) + if !url.IsEmpty() { + return url, downloadURL, nil + } } copied, err := br.copyAttachmentToMatrix(intent, downloadURL, false, AttachmentMeta{ AttachmentID: fmt.Sprintf("avatar/%s/%s/%s", guildID, userID, avatarID), }) if err != nil { - return url, err + return id.ContentURI{}, downloadURL, err } - return copied.MXC, nil + return copied.MXC, downloadURL, nil } func (puppet *Puppet) UpdateAvatar(info *discordgo.User) bool { @@ -260,7 +262,7 @@ func (puppet *Puppet) UpdateAvatar(info *discordgo.User) bool { puppet.AvatarURL = id.ContentURI{} if puppet.Avatar != "" && (puppet.AvatarURL.IsEmpty() || avatarChanged) { - url, err := puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), "", info.ID, puppet.Avatar) + url, _, err := puppet.bridge.reuploadUserAvatar(puppet.DefaultIntent(), "", info.ID, puppet.Avatar) if err != nil { puppet.log.Warn().Err(err).Str("avatar_id", puppet.Avatar).Msg("Failed to reupload user avatar") return true