Эх сурвалжийг харах

Improve logs and fix things with avatar reuploads

Tulir Asokan 2 жил өмнө
parent
commit
3247709abb
3 өөрчлөгдсөн 14 нэмэгдсэн , 16 устгасан
  1. 1 1
      attachments.go
  2. 4 8
      portal_convert.go
  3. 9 7
      puppet.go

+ 1 - 1
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)
 }

+ 4 - 8
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).

+ 9 - 7
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