Improve logs and fix things with avatar reuploads

This commit is contained in:
Tulir Asokan
2023-06-17 19:37:08 +03:00
parent 00465bb715
commit 3247709abb
3 changed files with 14 additions and 16 deletions

View File

@@ -44,7 +44,7 @@ func downloadDiscordAttachment(url string) ([]byte, error) {
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode > 300 { if resp.StatusCode > 300 {
data, _ := io.ReadAll(resp.Body) 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) return io.ReadAll(resp.Body)
} }

View File

@@ -323,24 +323,20 @@ func (puppet *Puppet) addMemberMeta(part *ConvertedMessage, msg *discordgo.Messa
part.Extra = make(map[string]any) part.Extra = make(map[string]any)
} }
var avatarURL id.ContentURI var avatarURL id.ContentURI
var discordAvatarURL string
if msg.Member.Avatar != "" { if msg.Member.Avatar != "" {
var err error 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 { if err != nil {
puppet.log.Warn().Err(err). puppet.log.Warn().Err(err).
Str("avatar_id", msg.Author.Avatar). Str("avatar_id", msg.Author.Avatar).
Msg("Failed to reupload guild user 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{ part.Extra["fi.mau.discord.guild_member_metadata"] = map[string]any{
"nick": msg.Member.Nick, "nick": msg.Member.Nick,
"avatar_id": msg.Member.Avatar, "avatar_id": msg.Member.Avatar,
"avatar_url": discordAvararURL, "avatar_url": discordAvatarURL,
"avatar_mxc": avatarURL.String(), "avatar_mxc": avatarURL.String(),
} }
if msg.Member.Nick != "" || !avatarURL.IsEmpty() { if msg.Member.Nick != "" || !avatarURL.IsEmpty() {
@@ -370,7 +366,7 @@ func (puppet *Puppet) addWebhookMeta(part *ConvertedMessage, msg *discordgo.Mess
var avatarURL id.ContentURI var avatarURL id.ContentURI
if msg.Author.Avatar != "" { if msg.Author.Avatar != "" {
var err error 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 { if err != nil {
puppet.log.Warn().Err(err). puppet.log.Warn().Err(err).
Str("avatar_id", msg.Author.Avatar). Str("avatar_id", msg.Author.Avatar).

View File

@@ -216,7 +216,7 @@ func (puppet *Puppet) UpdateName(info *discordgo.User) bool {
return true 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 var downloadURL, ext string
if guildID == "" { if guildID == "" {
downloadURL = discordgo.EndpointUserAvatar(userID, avatarID) downloadURL = discordgo.EndpointUserAvatar(userID, avatarID)
@@ -233,17 +233,19 @@ func (br *DiscordBridge) reuploadUserAvatar(intent *appservice.IntentAPI, guildI
ext = "gif" ext = "gif"
} }
} }
url := br.Config.Bridge.MediaPatterns.Avatar(userID, avatarID, ext) if guildID == "" {
if !url.IsEmpty() { url := br.Config.Bridge.MediaPatterns.Avatar(userID, avatarID, ext)
return url, nil if !url.IsEmpty() {
return url, downloadURL, nil
}
} }
copied, err := br.copyAttachmentToMatrix(intent, downloadURL, false, AttachmentMeta{ copied, err := br.copyAttachmentToMatrix(intent, downloadURL, false, AttachmentMeta{
AttachmentID: fmt.Sprintf("avatar/%s/%s/%s", guildID, userID, avatarID), AttachmentID: fmt.Sprintf("avatar/%s/%s/%s", guildID, userID, avatarID),
}) })
if err != nil { 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 { func (puppet *Puppet) UpdateAvatar(info *discordgo.User) bool {
@@ -260,7 +262,7 @@ func (puppet *Puppet) UpdateAvatar(info *discordgo.User) bool {
puppet.AvatarURL = id.ContentURI{} puppet.AvatarURL = id.ContentURI{}
if puppet.Avatar != "" && (puppet.AvatarURL.IsEmpty() || avatarChanged) { 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 { if err != nil {
puppet.log.Warn().Err(err).Str("avatar_id", puppet.Avatar).Msg("Failed to reupload user avatar") puppet.log.Warn().Err(err).Str("avatar_id", puppet.Avatar).Msg("Failed to reupload user avatar")
return true return true