fix(bot): fix import/export with incorrect webhook_avatar_url

Incorrect use of `member.WebhookAvatarFor` in member JSON creation
meant that exports of members without a webhook avatar set had the
normal avatar URL present in both fields.

This also adds a check to the importer to ignore the value of the
webhook_avatar_url field if it is the same as the avatar_url field.

Fixes: ccb89f50e9 (feat(bot): allow separate member avatars for proxied messages)
Co-authored-by: spiral <spiral@spiral.sh>
This commit is contained in:
Iris System 2023-03-21 23:35:15 +13:00
parent 399cfdb19f
commit 2bffee5450
2 changed files with 11 additions and 2 deletions

View File

@ -132,7 +132,7 @@ public static class PKMemberExt
o.Add("birthday", member.BirthdayFor(ctx)?.FormatExport());
o.Add("pronouns", member.PronounsFor(ctx));
o.Add("avatar_url", member.AvatarFor(ctx).TryGetCleanCdnUrl());
o.Add("webhook_avatar_url", member.WebhookAvatarFor(ctx).TryGetCleanCdnUrl());
o.Add("webhook_avatar_url", member.AvatarPrivacy.Get(ctx, member.WebhookAvatarUrl?.TryGetCleanCdnUrl()));
o.Add("banner", member.DescriptionPrivacy.Get(ctx, member.BannerImage).TryGetCleanCdnUrl());
o.Add("description", member.DescriptionFor(ctx));
o.Add("created", member.CreatedFor(ctx)?.FormatExport());

View File

@ -98,8 +98,17 @@ public class MemberPatch: PatchObject
if (o.ContainsKey("name")) patch.Name = o.Value<string>("name");
if (o.ContainsKey("color")) patch.Color = o.Value<string>("color").NullIfEmpty()?.ToLower();
if (o.ContainsKey("display_name")) patch.DisplayName = o.Value<string>("display_name").NullIfEmpty();
if (o.ContainsKey("webhook_avatar_url")) patch.WebhookAvatarUrl = o.Value<string>("webhook_avatar_url").NullIfEmpty();
if (o.ContainsKey("avatar_url")) patch.AvatarUrl = o.Value<string>("avatar_url").NullIfEmpty();
if (o.ContainsKey("webhook_avatar_url"))
{
var str = o.Value<string>("webhook_avatar_url").NullIfEmpty();
// XXX: ignore webhook_avatar_url if it's exactly the same as avatar_url
// to work around some export files containing the value of avatar_url in
// both fields accidentally
if (str != null && patch.AvatarUrl.Value != str) patch.WebhookAvatarUrl = str;
else patch.WebhookAvatarUrl = null;
}
if (o.ContainsKey("banner")) patch.BannerImage = o.Value<string>("banner").NullIfEmpty();
if (o.ContainsKey("birthday"))