From 1aa410e4f464f18b08b80f8358f0d8c4954e349c Mon Sep 17 00:00:00 2001 From: Iris System Date: Wed, 11 Oct 2023 15:17:09 +1300 Subject: [PATCH 001/207] fix(bot): remove query params from avatar attachment on member creation see also commit 8cf50a7d9726d5a215280add59da3d859e9a0ad1 --- PluralKit.Bot/Commands/Member.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index 9bc5dc47..41866ea7 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -70,8 +70,12 @@ public class Member if (avatarArg != null) try { - await AvatarUtils.VerifyAvatarOrThrow(_client, avatarArg.Url); - await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = avatarArg.Url }, conn); + // XXX: strip query params from attachment URLs because of new Discord CDN shenanigans + var uriBuilder = new UriBuilder(avatarArg.Url); + uriBuilder.Query = ""; + + await AvatarUtils.VerifyAvatarOrThrow(_client, uriBuilder.Uri.AbsoluteUri); + await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = uriBuilder.Uri.AbsoluteUri }, conn); dispatchData.Add("avatar_url", avatarArg.Url); } From 29382b252f76397a649ba53341828dcf7a5b4e57 Mon Sep 17 00:00:00 2001 From: Iris System Date: Wed, 22 Nov 2023 22:11:47 +1300 Subject: [PATCH 002/207] fix(dashboard): noindex on public profile pages --- dashboard/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/dashboard/main.go b/dashboard/main.go index 294fe6dc..267592f5 100644 --- a/dashboard/main.go +++ b/dashboard/main.go @@ -46,6 +46,7 @@ func main() { r.NotFound(notFoundHandler) r.Get("/profile/{type}/{id}", func(rw http.ResponseWriter, r *http.Request) { + rw.Header().Set("X-Robots-Tag", "noindex") defer func() { if a := recover(); a != nil { notFoundHandler(rw, r) From 7ef76a8e6752f4868ffc5c86ebd2802d85d8a7ef Mon Sep 17 00:00:00 2001 From: Petal Ladenson Date: Fri, 26 Jan 2024 17:56:37 -0700 Subject: [PATCH 003/207] feat(bot): add origin message id to pk;msg (#595) --- PluralKit.Bot/Services/EmbedService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index 8077c0d2..1c6b73ad 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -432,7 +432,8 @@ public class EmbedService : $"{msg.Member.NameFor(ctx)} (`{msg.Member.Hid}`)" , true)) .Field(new Embed.Field("Sent by", userStr, true)) - .Timestamp(DiscordUtils.SnowflakeToInstant(msg.Message.Mid).ToDateTimeOffset().ToString("O")); + .Timestamp(DiscordUtils.SnowflakeToInstant(msg.Message.Mid).ToDateTimeOffset().ToString("O")) + .Footer(new Embed.EmbedFooter($"Original Message ID: {msg.Message.OriginalMid}")); var roles = memberInfo?.Roles?.ToList(); if (roles != null && roles.Count > 0 && showContent) From 36622905d35c995bb7c47f3aa23f1b388b51b3df Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:57:11 +0000 Subject: [PATCH 004/207] fix(bot): channels can now have 15 webhooks (#601) --- PluralKit.Bot/Services/WebhookCacheService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Services/WebhookCacheService.cs b/PluralKit.Bot/Services/WebhookCacheService.cs index 8900d930..eff638f9 100644 --- a/PluralKit.Bot/Services/WebhookCacheService.cs +++ b/PluralKit.Bot/Services/WebhookCacheService.cs @@ -94,9 +94,9 @@ public class WebhookCacheService // We don't have one, so we gotta create a new one // but first, make sure we haven't hit the webhook cap yet... - if (webhooks.Length >= 10) + if (webhooks.Length >= 15) throw new PKError( - "This channel has the maximum amount of possible webhooks (10) already created. A server admin must delete one or more webhooks so PluralKit can create one for proxying."); + "This channel has the maximum amount of possible webhooks (15) already created. A server admin must delete one or more webhooks so PluralKit can create one for proxying."); return await DoCreateWebhook(channelId); } From bf51c1921b1ca756cdce11aff53633d640bf3452 Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:58:10 +0000 Subject: [PATCH 005/207] fix(bot): add member hid to rename response if new name contains spaces (#602) --- PluralKit.Bot/Commands/MemberEdit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index 71eb5301..ef5289ae 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -45,7 +45,7 @@ public class MemberEdit await ctx.Reply($"{Emojis.Success} Member renamed (using {newName.Length}/{Limits.MaxMemberNameLength} characters)."); if (newName.Contains(" ")) await ctx.Reply( - $"{Emojis.Note} Note that this member's name now contains spaces. You will need to surround it with \"double quotes\" when using commands referring to it."); + $"{Emojis.Note} Note that this member's name now contains spaces. You will need to surround it with \"double quotes\" when using commands referring to it, or just use the member's 5-character ID (which is `{target.Hid}`)."); if (target.DisplayName != null) await ctx.Reply( $"{Emojis.Note} Note that this member has a display name set ({target.DisplayName}), and will be proxied using that name instead."); From e167b0e0d9eef1c10625dbe85730e2504a00e914 Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:58:32 +0000 Subject: [PATCH 006/207] fix(bot): remove '@mention' instruction from ShowBannerImage (#603) --- PluralKit.Bot/Commands/MemberEdit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index ef5289ae..84b50015 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -213,7 +213,7 @@ public class MemberEdit else { throw new PKSyntaxError( - "This member does not have a banner image set. Set one by attaching an image to this command, or by passing an image URL or @mention."); + "This member does not have a banner image set. Set one by attaching an image to this command, or by passing an image URL."); } } From a27200de6e16446c47ef37a4048f04059e8b35ff Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:59:10 +0000 Subject: [PATCH 007/207] fix(bot): add link to support server to member limit warnings (#604) --- PluralKit.Bot/Commands/Member.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index 41866ea7..95998f67 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -109,10 +109,10 @@ public class Member $"{Emojis.Note} Note that this member's name contains spaces. You will need to surround it with \"double quotes\" when using commands referring to it, or just use the member's 5-character ID (which is `{member.Hid}`)."); if (memberCount >= memberLimit) await ctx.Reply( - $"{Emojis.Warn} You have reached the per-system member limit ({memberLimit}). You will be unable to create additional members until existing members are deleted."); + $"{Emojis.Warn} You have reached the per-system member limit ({memberLimit}). If you need to add more members, you can either delete existing members, or ask for your limit to be raised in the PluralKit support server: "); else if (memberCount >= Limits.WarnThreshold(memberLimit)) await ctx.Reply( - $"{Emojis.Warn} You are approaching the per-system member limit ({memberCount} / {memberLimit} members). Please review your member list for unused or duplicate members."); + $"{Emojis.Warn} You are approaching the per-system member limit ({memberCount} / {memberLimit} members). Once you reach this limit, you will be unable to create new members until existing members are deleted, or you can ask for your limit to be raised in the PluralKit support server: "); } public async Task ViewMember(Context ctx, PKMember target) From 08012d7c624b1f579336fdb17fffef43d4069f72 Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:59:30 +0000 Subject: [PATCH 008/207] fix(bot): add link to support server to group limit warnings (#605) --- PluralKit.Bot/Commands/Groups.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index 4041f17c..ae401fcd 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -44,7 +44,7 @@ public class Groups var groupLimit = ctx.Config.GroupLimitOverride ?? Limits.MaxGroupCount; if (existingGroupCount >= groupLimit) throw new PKError( - $"System has reached the maximum number of groups ({groupLimit}). Please delete unused groups first in order to create new ones."); + $"System has reached the maximum number of groups ({groupLimit}). If you need to add more groups, you can either delete existing groups, or ask for your limit to be raised in the PluralKit support server: "); // Warn if there's already a group by this name var existingGroup = await ctx.Repository.GetGroupByName(ctx.System.Id, groupName); @@ -93,7 +93,7 @@ public class Groups if (existingGroupCount >= Limits.WarnThreshold(groupLimit)) await ctx.Reply( - $"{Emojis.Warn} You are approaching the per-system group limit ({existingGroupCount} / {groupLimit} groups). Please review your group list for unused or duplicate groups."); + $"{Emojis.Warn} You are approaching the per-system group limit ({existingGroupCount} / {groupLimit} groups). Once you reach this limit, you will be unable to create new groups until existing groups are deleted, or you can ask for your limit to be raised in the PluralKit support server: "); } public async Task RenameGroup(Context ctx, PKGroup target) From b48a36eb4b3419ee1390f4a80e25ac3e950bd3aa Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 00:59:59 +0000 Subject: [PATCH 009/207] fix(bot): inconsistent period cleanup in `pk;cfg` (#606) --- PluralKit.Bot/Commands/Config.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Commands/Config.cs b/PluralKit.Bot/Commands/Config.cs index 37098c97..21f4a2e7 100644 --- a/PluralKit.Bot/Commands/Config.cs +++ b/PluralKit.Bot/Commands/Config.cs @@ -97,7 +97,7 @@ public class Config items.Add(new( "Proxy error", - "Whether to send an error message when proxying fails.", + "Whether to send an error message when proxying fails", EnabledDisabled(ctx.Config.ProxyErrorMessageEnabled), "enabled" )); From 2d26fee5f5879c46e85ba8b102ad676576ebb032 Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 01:00:20 +0000 Subject: [PATCH 010/207] fix(bot): correct inconsistencies in group avatar/banner messages (#607) --- PluralKit.Bot/Commands/Groups.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index ae401fcd..a16fe9e5 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -300,7 +300,7 @@ public class Groups else { throw new PKSyntaxError( - "This group does not have an icon set. Set one by attaching an image to this command, or by passing an image URL or @mention."); + "This group does not have an avatar set. Set one by attaching an image to this command, or by passing an image URL or @mention."); } } @@ -364,7 +364,7 @@ public class Groups else { throw new PKSyntaxError( - "This group does not have a banner image set. Set one by attaching an image to this command, or by passing an image URL or @mention."); + "This group does not have a banner image set. Set one by attaching an image to this command, or by passing an image URL."); } } From 8e0b4ed4fa8ff2cd7ea5ae9b9102447e88df242b Mon Sep 17 00:00:00 2001 From: Ouroboros <66399070+vmorrisonwood@users.noreply.github.com> Date: Sat, 27 Jan 2024 01:00:42 +0000 Subject: [PATCH 011/207] fix(bot): update credits on `pk;help` (#609) --- PluralKit.Bot/Commands/Help.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Commands/Help.cs b/PluralKit.Bot/Commands/Help.cs index 50067fe0..a072d374 100644 --- a/PluralKit.Bot/Commands/Help.cs +++ b/PluralKit.Bot/Commands/Help.cs @@ -11,7 +11,7 @@ public class Help { Title = "PluralKit", Description = "PluralKit is a bot designed for plural communities on Discord, and is open for anyone to use. It allows you to register systems, maintain system information, set up message proxying, log switches, and more.", - Footer = new("By @Ske#6201 | Myriad design by @Layl#8888, art by https://twitter.com/sillyvizion | GitHub: https://github.com/PluralKit/PluralKit/ | Website: https://pluralkit.me/"), + Footer = new("By @ske | Myriad design by @layl, art by @tedkalashnikov | GitHub: https://github.com/PluralKit/PluralKit/ | Website: https://pluralkit.me/"), Color = DiscordUtils.Blue, }; From 283de562d37b8b494c251ed40e6d37d5ee4e57cb Mon Sep 17 00:00:00 2001 From: multimasks <102671475+multimasks@users.noreply.github.com> Date: Fri, 26 Jan 2024 20:01:14 -0500 Subject: [PATCH 012/207] fix(docs): update FAQ with latest emoji issues (#608) updated nitro emoji question to include "pk must be in source server" + twitch integration issues --- docs/content/faq.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/content/faq.md b/docs/content/faq.md index 04f5b230..4d5c6bfb 100644 --- a/docs/content/faq.md +++ b/docs/content/faq.md @@ -68,8 +68,10 @@ No. This is a limitation in Discord itself, and cannot be changed. The color com * Discord sometimes has issues displaying avatars. We can't do anything about that, sorry :( ### Why can't I use nitro emoji in some channels? -Webhooks inherit nitro emoji permissions from the `@everyone` role, so `@everyone` must have the "Use External Emoji" permission to be able to use nitro emoji with PluralKit. -If it still doesn't work, make sure this permission isn't denied in channel overrides (found in channel settings -> permissions). +* Webhooks inherit nitro emoji permissions from the `@everyone` role, so `@everyone` must have the "Use External Emoji" permission to be able to use nitro emoji with PluralKit. +If it still doesn't work, make sure this permission isn't denied in channel overrides (found in channel settings -> permissions). You can also check if it's a permissions issue with `pk;permcheck`. +* PluralKit must be in the server the emojis are from. This is because of a change made by Discord in 2022. +* Because PluralKit cannot be a Twitch subscriber, it will never be able to use emojis from Twitch integrations. ### Why can't I invite PluralKit to my server? From 97d2f155019058185db05e9eb7d04fd5aa64416c Mon Sep 17 00:00:00 2001 From: Iris System Date: Sat, 27 Jan 2024 16:05:20 +1300 Subject: [PATCH 013/207] fix(scheduled_tasks): int32 -> int64 in stats update --- services/scheduled_tasks/tasks.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/scheduled_tasks/tasks.go b/services/scheduled_tasks/tasks.go index 896e87f9..912c7b90 100644 --- a/services/scheduled_tasks/tasks.go +++ b/services/scheduled_tasks/tasks.go @@ -71,7 +71,7 @@ func update_stats() { data_stats := run_data_stats_query() for _, key := range table_stat_keys { - val := data_stats[key+"_count"].(int32) + val := data_stats[key+"_count"].(int64) do_stats_insert(plural(key), int(val)) } } From 823db4cd24d8fcb9ac02fc46977957f5fb78e71a Mon Sep 17 00:00:00 2001 From: Iris System Date: Sat, 27 Jan 2024 16:22:41 +1300 Subject: [PATCH 014/207] fix(scheduled_tasks): maybe actually make it work --- services/scheduled_tasks/repo.go | 2 +- services/scheduled_tasks/tasks.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/scheduled_tasks/repo.go b/services/scheduled_tasks/repo.go index 5003908e..db881e8f 100644 --- a/services/scheduled_tasks/repo.go +++ b/services/scheduled_tasks/repo.go @@ -69,7 +69,7 @@ func run_data_stats_query() map[string]interface{} { return s } -func do_stats_insert(table string, value int) { +func do_stats_insert(table string, value int64) { if stats_db == nil { return } diff --git a/services/scheduled_tasks/tasks.go b/services/scheduled_tasks/tasks.go index 912c7b90..d6f2178d 100644 --- a/services/scheduled_tasks/tasks.go +++ b/services/scheduled_tasks/tasks.go @@ -13,8 +13,8 @@ func task_main() { log.Println("running per-minute scheduled tasks") update_db_meta() - update_stats() update_bot_status() + update_stats() } var table_stat_keys = []string{"system", "member", "group", "switch", "message"} @@ -66,13 +66,13 @@ func get_discord_counts() (int, int) { func update_stats() { guild_count, channel_count := get_discord_counts() - do_stats_insert("guilds", guild_count) - do_stats_insert("channels", channel_count) + do_stats_insert("guilds", int64(guild_count)) + do_stats_insert("channels", int64(channel_count)) data_stats := run_data_stats_query() for _, key := range table_stat_keys { val := data_stats[key+"_count"].(int64) - do_stats_insert(plural(key), int(val)) + do_stats_insert(plural(key), val) } } From 8befb1c857e1269ca3dd23282de28a5832b5368a Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Fri, 9 Feb 2024 04:38:17 +0100 Subject: [PATCH 015/207] fix(bot): avoid 403 status codes on image upload (#611) --- .../CommandSystem/Context/ContextAvatarExt.cs | 10 +++++++--- PluralKit.Bot/Commands/Groups.cs | 4 ++-- PluralKit.Bot/Commands/Member.cs | 14 +++++++++----- PluralKit.Bot/Commands/MemberAvatar.cs | 2 +- PluralKit.Bot/Commands/MemberEdit.cs | 2 +- PluralKit.Bot/Commands/SystemEdit.cs | 6 +++--- PluralKit.Bot/Utils/AvatarUtils.cs | 16 +++++++++++++--- 7 files changed, 36 insertions(+), 18 deletions(-) diff --git a/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs b/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs index 825443da..83bb1028 100644 --- a/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs +++ b/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs @@ -33,11 +33,14 @@ public static class ContextAvatarExt // If we have an attachment, use that if (ctx.Message.Attachments.FirstOrDefault() is { } attachment) { - // XXX: strip query params from attachment URLs because of new Discord CDN shenanigans + // XXX: discord attachment URLs are unable to be validated without their query params + // keep both the URL with query (for validation) and the clean URL (for storage) around var uriBuilder = new UriBuilder(attachment.ProxyUrl); - uriBuilder.Query = ""; - return new ParsedImage { Url = uriBuilder.Uri.AbsoluteUri, Source = AvatarSource.Attachment }; + ParsedImage img = new ParsedImage { Url = uriBuilder.Uri.AbsoluteUri, Source = AvatarSource.Attachment }; + uriBuilder.Query = ""; + img.CleanUrl = uriBuilder.Uri.AbsoluteUri; + return img; } // We should only get here if there are no arguments (which would get parsed as URL + throw if error) @@ -49,6 +52,7 @@ public static class ContextAvatarExt public struct ParsedImage { public string Url; + public string? CleanUrl; public AvatarSource Source; public User? SourceUser; } diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index a16fe9e5..e3f539a2 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -263,7 +263,7 @@ public class Groups await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); - await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { Icon = img.Url }); + await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { Icon = img.CleanUrl ?? img.Url }); var msg = img.Source switch { @@ -328,7 +328,7 @@ public class Groups await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); - await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { BannerImage = img.Url }); + await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { BannerImage = img.CleanUrl ?? img.Url }); var msg = img.Source switch { diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index 95998f67..a34087c1 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -70,14 +70,18 @@ public class Member if (avatarArg != null) try { - // XXX: strip query params from attachment URLs because of new Discord CDN shenanigans - var uriBuilder = new UriBuilder(avatarArg.Url); + // XXX: discord attachment URLs are unable to be validated without their query params + // keep both the URL with query (for validation) and the clean URL (for storage) around + var uriBuilder = new UriBuilder(avatarArg.ProxyUrl); + ParsedImage img = new ParsedImage { Url = uriBuilder.Uri.AbsoluteUri, Source = AvatarSource.Attachment }; + uriBuilder.Query = ""; + img.CleanUrl = uriBuilder.Uri.AbsoluteUri; - await AvatarUtils.VerifyAvatarOrThrow(_client, uriBuilder.Uri.AbsoluteUri); - await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = uriBuilder.Uri.AbsoluteUri }, conn); + await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); + await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = img.CleanUrl ?? img.Url }, conn); - dispatchData.Add("avatar_url", avatarArg.Url); + dispatchData.Add("avatar_url", img.CleanUrl); } catch (Exception e) { diff --git a/PluralKit.Bot/Commands/MemberAvatar.cs b/PluralKit.Bot/Commands/MemberAvatar.cs index d5f5f544..7986e9d4 100644 --- a/PluralKit.Bot/Commands/MemberAvatar.cs +++ b/PluralKit.Bot/Commands/MemberAvatar.cs @@ -139,7 +139,7 @@ public class MemberAvatar ctx.CheckSystem().CheckOwnMember(target); await AvatarUtils.VerifyAvatarOrThrow(_client, avatarArg.Value.Url); - await UpdateAvatar(location, ctx, target, avatarArg.Value.Url); + await UpdateAvatar(location, ctx, target, avatarArg.Value.CleanUrl ?? avatarArg.Value.Url); await PrintResponse(location, ctx, target, avatarArg.Value, guildData); } diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index 84b50015..b6193249 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -182,7 +182,7 @@ public class MemberEdit { await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); - await ctx.Repository.UpdateMember(target.Id, new MemberPatch { BannerImage = img.Url }); + await ctx.Repository.UpdateMember(target.Id, new MemberPatch { BannerImage = img.CleanUrl ?? img.Url }); var msg = img.Source switch { diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index e6d3ddcd..b1a73e74 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -475,7 +475,7 @@ public class SystemEdit await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); - await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { AvatarUrl = img.Url }); + await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { AvatarUrl = img.CleanUrl ?? img.Url }); var msg = img.Source switch { @@ -543,7 +543,7 @@ public class SystemEdit await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); - await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { AvatarUrl = img.Url }); + await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { AvatarUrl = img.CleanUrl ?? img.Url }); var msg = img.Source switch { @@ -640,7 +640,7 @@ public class SystemEdit { await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); - await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { BannerImage = img.Url }); + await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { BannerImage = img.CleanUrl ?? img.Url }); var msg = img.Source switch { diff --git a/PluralKit.Bot/Utils/AvatarUtils.cs b/PluralKit.Bot/Utils/AvatarUtils.cs index 1fd573c4..00f3059f 100644 --- a/PluralKit.Bot/Utils/AvatarUtils.cs +++ b/PluralKit.Bot/Utils/AvatarUtils.cs @@ -63,11 +63,21 @@ public static class AvatarUtils // This lets us add resizing parameters to "borrow" their media proxy server to downsize the image // which in turn makes it more likely to be underneath the size limit! private static readonly Regex DiscordCdnUrl = - new(@"^https?://(?:cdn\.discordapp\.com|media\.discordapp\.net)/attachments/(\d{17,19})/(\d{17,19})/([^/\\&\?]+)\.(png|jpg|jpeg|webp)(\?.*)?$"); + new(@"^https?://(?:cdn\.discordapp\.com|media\.discordapp\.net)/attachments/(\d{17,19})/(\d{17,19})/([^/\\&\?]+)\.(png|jpg|jpeg|webp)(?:\?(?.*))?$"); private static readonly string DiscordMediaUrlReplacement = "https://media.discordapp.net/attachments/$1/$2/$3.$4?width=256&height=256"; - public static string? TryRewriteCdnUrl(string? url) => - url == null ? null : DiscordCdnUrl.Replace(url, DiscordMediaUrlReplacement); + public static string? TryRewriteCdnUrl(string? url) + { + if (url == null) + return null; + + var match = DiscordCdnUrl.Match(url); + var newUrl = DiscordCdnUrl.Replace(url, DiscordMediaUrlReplacement); + if (match.Groups["query"].Success) + newUrl += "&" + match.Groups["query"].Value; + + return newUrl; + } } \ No newline at end of file From 8157c6932e5d24b4134c7bee64c70f63ffa6e355 Mon Sep 17 00:00:00 2001 From: Astrid Date: Sun, 11 Feb 2024 03:53:46 +0100 Subject: [PATCH 016/207] feat: add support for external avatar hosting service (#614) --- PluralKit.Bot/BotConfig.cs | 1 + PluralKit.Bot/Commands/Groups.cs | 6 +- PluralKit.Bot/Commands/Member.cs | 6 +- PluralKit.Bot/Commands/MemberAvatar.cs | 6 +- PluralKit.Bot/Commands/MemberEdit.cs | 5 +- PluralKit.Bot/Commands/SystemEdit.cs | 7 +- PluralKit.Bot/Modules.cs | 1 + .../Services/AvatarHostingService.cs | 65 +++++++++++++++++++ PluralKit.Bot/Utils/AvatarUtils.cs | 2 + 9 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 PluralKit.Bot/Services/AvatarHostingService.cs diff --git a/PluralKit.Bot/BotConfig.cs b/PluralKit.Bot/BotConfig.cs index 18c44b28..4621717e 100644 --- a/PluralKit.Bot/BotConfig.cs +++ b/PluralKit.Bot/BotConfig.cs @@ -25,6 +25,7 @@ public class BotConfig public string? RedisGatewayUrl { get; set; } public string? DiscordBaseUrl { get; set; } + public string? AvatarServiceUrl { get; set; } public bool DisableErrorReporting { get; set; } = false; diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index e3f539a2..dad4190c 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -21,13 +21,15 @@ public class Groups private readonly HttpClient _client; private readonly DispatchService _dispatch; private readonly EmbedService _embeds; + private readonly AvatarHostingService _avatarHosting; public Groups(EmbedService embeds, HttpClient client, - DispatchService dispatch) + DispatchService dispatch, AvatarHostingService avatarHosting) { _embeds = embeds; _client = client; _dispatch = dispatch; + _avatarHosting = avatarHosting; } public async Task CreateGroup(Context ctx) @@ -261,6 +263,7 @@ public class Groups { ctx.CheckOwnGroup(target); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { Icon = img.CleanUrl ?? img.Url }); @@ -326,6 +329,7 @@ public class Groups { ctx.CheckOwnGroup(target); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index a34087c1..dad5e1cc 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -16,13 +16,15 @@ public class Member private readonly HttpClient _client; private readonly DispatchService _dispatch; private readonly EmbedService _embeds; + private readonly AvatarHostingService _avatarHosting; public Member(EmbedService embeds, HttpClient client, - DispatchService dispatch) + DispatchService dispatch, AvatarHostingService avatarHosting) { _embeds = embeds; _client = client; _dispatch = dispatch; + _avatarHosting = avatarHosting; } public async Task NewMember(Context ctx) @@ -78,6 +80,8 @@ public class Member uriBuilder.Query = ""; img.CleanUrl = uriBuilder.Uri.AbsoluteUri; + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = img.CleanUrl ?? img.Url }, conn); diff --git a/PluralKit.Bot/Commands/MemberAvatar.cs b/PluralKit.Bot/Commands/MemberAvatar.cs index 7986e9d4..a0654a25 100644 --- a/PluralKit.Bot/Commands/MemberAvatar.cs +++ b/PluralKit.Bot/Commands/MemberAvatar.cs @@ -9,10 +9,12 @@ namespace PluralKit.Bot; public class MemberAvatar { private readonly HttpClient _client; + private readonly AvatarHostingService _avatarHosting; - public MemberAvatar(HttpClient client) + public MemberAvatar(HttpClient client, AvatarHostingService avatarHosting) { _client = client; + _avatarHosting = avatarHosting; } private async Task AvatarClear(MemberAvatarLocation location, Context ctx, PKMember target, MemberGuildSettings? mgs) @@ -138,6 +140,8 @@ public class MemberAvatar } ctx.CheckSystem().CheckOwnMember(target); + + avatarArg = await _avatarHosting.TryRehostImage(avatarArg.Value, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, avatarArg.Value.Url); await UpdateAvatar(location, ctx, target, avatarArg.Value.CleanUrl ?? avatarArg.Value.Url); await PrintResponse(location, ctx, target, avatarArg.Value, guildData); diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index b6193249..d2e943b3 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -13,10 +13,12 @@ namespace PluralKit.Bot; public class MemberEdit { private readonly HttpClient _client; + private readonly AvatarHostingService _avatarHosting; - public MemberEdit(HttpClient client) + public MemberEdit(HttpClient client, AvatarHostingService avatarHosting) { _client = client; + _avatarHosting = avatarHosting; } public async Task Name(Context ctx, PKMember target) @@ -180,6 +182,7 @@ public class MemberEdit async Task SetBannerImage(ParsedImage img) { + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateMember(target.Id, new MemberPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index b1a73e74..243ccaa6 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -18,12 +18,14 @@ public class SystemEdit private readonly HttpClient _client; private readonly DataFileService _dataFiles; private readonly PrivateChannelService _dmCache; + private readonly AvatarHostingService _avatarHosting; - public SystemEdit(DataFileService dataFiles, HttpClient client, PrivateChannelService dmCache) + public SystemEdit(DataFileService dataFiles, HttpClient client, PrivateChannelService dmCache, AvatarHostingService avatarHosting) { _dataFiles = dataFiles; _client = client; _dmCache = dmCache; + _avatarHosting = avatarHosting; } public async Task Name(Context ctx, PKSystem target) @@ -473,6 +475,7 @@ public class SystemEdit { ctx.CheckOwnSystem(target); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { AvatarUrl = img.CleanUrl ?? img.Url }); @@ -541,6 +544,7 @@ public class SystemEdit { ctx.CheckOwnSystem(target); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { AvatarUrl = img.CleanUrl ?? img.Url }); @@ -638,6 +642,7 @@ public class SystemEdit else if (await ctx.MatchImage() is { } img) { + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Modules.cs b/PluralKit.Bot/Modules.cs index 2c4c0841..730908a9 100644 --- a/PluralKit.Bot/Modules.cs +++ b/PluralKit.Bot/Modules.cs @@ -136,6 +136,7 @@ public class BotModule: Module builder.RegisterType().AsSelf().SingleInstance(); builder.RegisterType().AsSelf().SingleInstance(); builder.RegisterType().AsSelf().SingleInstance(); + builder.RegisterType().AsSelf().SingleInstance(); // Sentry stuff builder.Register(_ => new Scope(null)).AsSelf().InstancePerLifetimeScope(); diff --git a/PluralKit.Bot/Services/AvatarHostingService.cs b/PluralKit.Bot/Services/AvatarHostingService.cs new file mode 100644 index 00000000..68a512ee --- /dev/null +++ b/PluralKit.Bot/Services/AvatarHostingService.cs @@ -0,0 +1,65 @@ +using System.Net; +using System.Net.Http.Json; + +namespace PluralKit.Bot; + +public class AvatarHostingService +{ + private readonly BotConfig _config; + private readonly HttpClient _client; + + public AvatarHostingService(BotConfig config, HttpClient client) + { + _config = config; + _client = client; + } + + public async Task TryRehostImage(ParsedImage input, RehostedImageType type, ulong userId) + { + var uploaded = await TryUploadAvatar(input.Url, type, userId); + if (uploaded != null) + { + // todo: make new image type called Cdn? + return new ParsedImage { Url = uploaded, Source = AvatarSource.Url }; + } + + return input; + } + + public async Task TryUploadAvatar(string? avatarUrl, RehostedImageType type, ulong userId) + { + if (!AvatarUtils.IsDiscordCdnUrl(avatarUrl)) + return null; + + if (_config.AvatarServiceUrl == null) + return null; + + var kind = type switch + { + RehostedImageType.Avatar => "avatar", + RehostedImageType.Banner => "banner", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) + }; + + var response = await _client.PostAsJsonAsync(_config.AvatarServiceUrl + "/pull", + new { url = avatarUrl, kind, uploaded_by = userId }); + if (response.StatusCode != HttpStatusCode.OK) + { + var error = await response.Content.ReadFromJsonAsync(); + throw new PKError($"Error uploading image to CDN: {error.Error}"); + } + + var success = await response.Content.ReadFromJsonAsync(); + return success.Url; + } + + public record ErrorResponse(string Error); + + public record SuccessResponse(string Url, bool New); + + public enum RehostedImageType + { + Avatar, + Banner, + } +} \ No newline at end of file diff --git a/PluralKit.Bot/Utils/AvatarUtils.cs b/PluralKit.Bot/Utils/AvatarUtils.cs index 00f3059f..70206593 100644 --- a/PluralKit.Bot/Utils/AvatarUtils.cs +++ b/PluralKit.Bot/Utils/AvatarUtils.cs @@ -80,4 +80,6 @@ public static class AvatarUtils return newUrl; } + + public static bool IsDiscordCdnUrl(string? url) => url != null && DiscordCdnUrl.Match(url).Success; } \ No newline at end of file From 5499a20a2cc7f1ea0ad7629b055762e62e55c593 Mon Sep 17 00:00:00 2001 From: Iris System Date: Wed, 14 Feb 2024 04:19:11 +1300 Subject: [PATCH 017/207] fix(bot): allow mixed-case file extensions for CDN URLs --- PluralKit.Bot/Utils/AvatarUtils.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Utils/AvatarUtils.cs b/PluralKit.Bot/Utils/AvatarUtils.cs index 70206593..0f6d314c 100644 --- a/PluralKit.Bot/Utils/AvatarUtils.cs +++ b/PluralKit.Bot/Utils/AvatarUtils.cs @@ -63,7 +63,7 @@ public static class AvatarUtils // This lets us add resizing parameters to "borrow" their media proxy server to downsize the image // which in turn makes it more likely to be underneath the size limit! private static readonly Regex DiscordCdnUrl = - new(@"^https?://(?:cdn\.discordapp\.com|media\.discordapp\.net)/attachments/(\d{17,19})/(\d{17,19})/([^/\\&\?]+)\.(png|jpg|jpeg|webp)(?:\?(?.*))?$"); + new(@"^https?://(?:cdn\.discordapp\.com|media\.discordapp\.net)/attachments/(\d{17,19})/(\d{17,19})/([^/\\&\?]+)\.(png|jpe?g|webp)(?:\?(?.*))?$", RegexOptions.IgnoreCase); private static readonly string DiscordMediaUrlReplacement = "https://media.discordapp.net/attachments/$1/$2/$3.$4?width=256&height=256"; From 6547f1ca206d2d2fa4b35c62ec69165c0e05db8b Mon Sep 17 00:00:00 2001 From: Iris System Date: Wed, 14 Feb 2024 04:41:02 +1300 Subject: [PATCH 018/207] fix(bot): add AvatarSource.HostedCdn --- PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs | 3 ++- PluralKit.Bot/Commands/Groups.cs | 6 ++++-- PluralKit.Bot/Commands/Member.cs | 5 +++-- PluralKit.Bot/Commands/MemberAvatar.cs | 4 +++- PluralKit.Bot/Commands/MemberEdit.cs | 3 ++- PluralKit.Bot/Commands/SystemEdit.cs | 9 ++++++--- PluralKit.Bot/Services/AvatarHostingService.cs | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs b/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs index 83bb1028..ca2ff912 100644 --- a/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs +++ b/PluralKit.Bot/CommandSystem/Context/ContextAvatarExt.cs @@ -61,5 +61,6 @@ public enum AvatarSource { Url, User, - Attachment + Attachment, + HostedCdn } \ No newline at end of file diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index dad4190c..cbe128dc 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -273,13 +273,14 @@ public class Groups AvatarSource.User => $"{Emojis.Success} Group icon changed to {img.SourceUser?.Username}'s avatar!\n{Emojis.Warn} If {img.SourceUser?.Username} changes their avatar, the group icon will need to be re-set.", AvatarSource.Url => $"{Emojis.Success} Group icon changed to the image at the given URL.", + AvatarSource.HostedCdn => $"{Emojis.Success} Group icon changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} Group icon changed to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the group icon will stop working.", _ => throw new ArgumentOutOfRangeException() }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); @@ -337,6 +338,7 @@ public class Groups var msg = img.Source switch { AvatarSource.Url => $"{Emojis.Success} Group banner image changed to the image at the given URL.", + AvatarSource.HostedCdn => $"{Emojis.Success} Group banner image changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} Group banner image changed to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the banner image will stop working.", AvatarSource.User => throw new PKError("Cannot set a banner image to an user's avatar."), @@ -344,7 +346,7 @@ public class Groups }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index dad5e1cc..14055127 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -69,13 +69,14 @@ public class Member // Try to match an image attached to the message var avatarArg = ctx.Message.Attachments.FirstOrDefault(); Exception imageMatchError = null; + ParsedImage img = new(); if (avatarArg != null) try { // XXX: discord attachment URLs are unable to be validated without their query params // keep both the URL with query (for validation) and the clean URL (for storage) around var uriBuilder = new UriBuilder(avatarArg.ProxyUrl); - ParsedImage img = new ParsedImage { Url = uriBuilder.Uri.AbsoluteUri, Source = AvatarSource.Attachment }; + img = new ParsedImage { Url = uriBuilder.Uri.AbsoluteUri, Source = AvatarSource.Attachment }; uriBuilder.Query = ""; img.CleanUrl = uriBuilder.Uri.AbsoluteUri; @@ -109,7 +110,7 @@ public class Member if (avatarArg != null) if (imageMatchError == null) await ctx.Reply( - $"{Emojis.Success} Member avatar set to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the avatar will stop working."); + $"{Emojis.Success} Member avatar set to attached image." + (img.Source == AvatarSource.Attachment ? $"\n{Emojis.Warn} If you delete the message containing the attachment, the avatar will stop working." : "")); else await ctx.Reply($"{Emojis.Error} Couldn't set avatar: {imageMatchError.Message}"); if (memberName.Contains(" ")) diff --git a/PluralKit.Bot/Commands/MemberAvatar.cs b/PluralKit.Bot/Commands/MemberAvatar.cs index a0654a25..f1e012b8 100644 --- a/PluralKit.Bot/Commands/MemberAvatar.cs +++ b/PluralKit.Bot/Commands/MemberAvatar.cs @@ -174,13 +174,15 @@ public class MemberAvatar $"{Emojis.Success} Member {location.Name()} changed to {avatar.SourceUser?.Username}'s avatar!{serverFrag}\n{Emojis.Warn} If {avatar.SourceUser?.Username} changes their avatar, the member's avatar will need to be re-set.", AvatarSource.Url => $"{Emojis.Success} Member {location.Name()} changed to the image at the given URL.{serverFrag}", + AvatarSource.HostedCdn => + $"{Emojis.Success} Member {location.Name()} changed to attached image.{serverFrag}", AvatarSource.Attachment => $"{Emojis.Success} Member {location.Name()} changed to attached image.{serverFrag}\n{Emojis.Warn} If you delete the message containing the attachment, the avatar will stop working.", _ => throw new ArgumentOutOfRangeException() }; // The attachment's already right there, no need to preview it. - var hasEmbed = avatar.Source != AvatarSource.Attachment; + var hasEmbed = avatar.Source != AvatarSource.Attachment && avatar.Source != AvatarSource.HostedCdn; return hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(avatar.Url)).Build()) : ctx.Reply(msg); diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index d2e943b3..328fdc74 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -190,6 +190,7 @@ public class MemberEdit var msg = img.Source switch { AvatarSource.Url => $"{Emojis.Success} Member banner image changed to the image at the given URL.", + AvatarSource.HostedCdn => $"{Emojis.Success} Member banner image changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} Member banner image changed to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the banner image will stop working.", AvatarSource.User => throw new PKError("Cannot set a banner image to an user's avatar."), @@ -197,7 +198,7 @@ public class MemberEdit }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index 243ccaa6..30617f64 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -485,13 +485,14 @@ public class SystemEdit AvatarSource.User => $"{Emojis.Success} System icon changed to {img.SourceUser?.Username}'s avatar!\n{Emojis.Warn} If {img.SourceUser?.Username} changes their avatar, the system icon will need to be re-set.", AvatarSource.Url => $"{Emojis.Success} System icon changed to the image at the given URL.", + AvatarSource.HostedCdn => $"{Emojis.Success} System icon changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} System icon changed to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the system icon will stop working.", _ => throw new ArgumentOutOfRangeException() }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); @@ -555,13 +556,14 @@ public class SystemEdit $"{Emojis.Success} System icon for this server changed to {img.SourceUser?.Username}'s avatar! It will now be used for anything that uses system avatar in this server.\n{Emojis.Warn} If {img.SourceUser?.Username} changes their avatar, the system icon for this server will need to be re-set.", AvatarSource.Url => $"{Emojis.Success} System icon for this server changed to the image at the given URL. It will now be used for anything that uses system avatar in this server.", + AvatarSource.HostedCdn => $"{Emojis.Success} System icon for this server changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} System icon for this server changed to attached image. It will now be used for anything that uses system avatar in this server.\n{Emojis.Warn} If you delete the message containing the attachment, the system icon for this server will stop working.", _ => throw new ArgumentOutOfRangeException() }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); @@ -650,6 +652,7 @@ public class SystemEdit var msg = img.Source switch { AvatarSource.Url => $"{Emojis.Success} System banner image changed to the image at the given URL.", + AvatarSource.HostedCdn => $"{Emojis.Success} System banner image changed to attached image.", AvatarSource.Attachment => $"{Emojis.Success} System banner image changed to attached image.\n{Emojis.Warn} If you delete the message containing the attachment, the banner image will stop working.", AvatarSource.User => throw new PKError("Cannot set a banner image to an user's avatar."), @@ -657,7 +660,7 @@ public class SystemEdit }; // The attachment's already right there, no need to preview it. - var hasEmbed = img.Source != AvatarSource.Attachment; + var hasEmbed = img.Source != AvatarSource.Attachment && img.Source != AvatarSource.HostedCdn; await (hasEmbed ? ctx.Reply(msg, new EmbedBuilder().Image(new Embed.EmbedImage(img.Url)).Build()) : ctx.Reply(msg)); diff --git a/PluralKit.Bot/Services/AvatarHostingService.cs b/PluralKit.Bot/Services/AvatarHostingService.cs index 68a512ee..799b5eb1 100644 --- a/PluralKit.Bot/Services/AvatarHostingService.cs +++ b/PluralKit.Bot/Services/AvatarHostingService.cs @@ -20,7 +20,7 @@ public class AvatarHostingService if (uploaded != null) { // todo: make new image type called Cdn? - return new ParsedImage { Url = uploaded, Source = AvatarSource.Url }; + return new ParsedImage { Url = uploaded, Source = AvatarSource.HostedCdn }; } return input; From 71ea11e97e6896f826eaad5c14a9b01907df8ba7 Mon Sep 17 00:00:00 2001 From: Iris System Date: Wed, 14 Feb 2024 06:30:51 +1300 Subject: [PATCH 019/207] feat: add system_id parameter to avatar pull requests --- PluralKit.Bot/Commands/Groups.cs | 4 ++-- PluralKit.Bot/Commands/Member.cs | 2 +- PluralKit.Bot/Commands/MemberAvatar.cs | 2 +- PluralKit.Bot/Commands/MemberEdit.cs | 2 +- PluralKit.Bot/Commands/SystemEdit.cs | 6 +++--- PluralKit.Bot/Services/AvatarHostingService.cs | 9 +++++---- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index cbe128dc..837e2d9e 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -263,7 +263,7 @@ public class Groups { ctx.CheckOwnGroup(target); - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { Icon = img.CleanUrl ?? img.Url }); @@ -330,7 +330,7 @@ public class Groups { ctx.CheckOwnGroup(target); - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateGroup(target.Id, new GroupPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index 14055127..d07b91cf 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -81,7 +81,7 @@ public class Member uriBuilder.Query = ""; img.CleanUrl = uriBuilder.Uri.AbsoluteUri; - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateMember(member.Id, new MemberPatch { AvatarUrl = img.CleanUrl ?? img.Url }, conn); diff --git a/PluralKit.Bot/Commands/MemberAvatar.cs b/PluralKit.Bot/Commands/MemberAvatar.cs index f1e012b8..e626944e 100644 --- a/PluralKit.Bot/Commands/MemberAvatar.cs +++ b/PluralKit.Bot/Commands/MemberAvatar.cs @@ -141,7 +141,7 @@ public class MemberAvatar ctx.CheckSystem().CheckOwnMember(target); - avatarArg = await _avatarHosting.TryRehostImage(avatarArg.Value, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + avatarArg = await _avatarHosting.TryRehostImage(avatarArg.Value, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, avatarArg.Value.Url); await UpdateAvatar(location, ctx, target, avatarArg.Value.CleanUrl ?? avatarArg.Value.Url); await PrintResponse(location, ctx, target, avatarArg.Value, guildData); diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index 328fdc74..be08c55a 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -182,7 +182,7 @@ public class MemberEdit async Task SetBannerImage(ParsedImage img) { - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateMember(target.Id, new MemberPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index 30617f64..c8c501c1 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -475,7 +475,7 @@ public class SystemEdit { ctx.CheckOwnSystem(target); - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { AvatarUrl = img.CleanUrl ?? img.Url }); @@ -545,7 +545,7 @@ public class SystemEdit { ctx.CheckOwnSystem(target); - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Avatar, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url); await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { AvatarUrl = img.CleanUrl ?? img.Url }); @@ -644,7 +644,7 @@ public class SystemEdit else if (await ctx.MatchImage() is { } img) { - img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id); + img = await _avatarHosting.TryRehostImage(img, AvatarHostingService.RehostedImageType.Banner, ctx.Author.Id, ctx.System); await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, true); await ctx.Repository.UpdateSystem(target.Id, new SystemPatch { BannerImage = img.CleanUrl ?? img.Url }); diff --git a/PluralKit.Bot/Services/AvatarHostingService.cs b/PluralKit.Bot/Services/AvatarHostingService.cs index 799b5eb1..a080bae8 100644 --- a/PluralKit.Bot/Services/AvatarHostingService.cs +++ b/PluralKit.Bot/Services/AvatarHostingService.cs @@ -1,3 +1,4 @@ +using PluralKit.Core; using System.Net; using System.Net.Http.Json; @@ -14,9 +15,9 @@ public class AvatarHostingService _client = client; } - public async Task TryRehostImage(ParsedImage input, RehostedImageType type, ulong userId) + public async Task TryRehostImage(ParsedImage input, RehostedImageType type, ulong userId, PKSystem? system) { - var uploaded = await TryUploadAvatar(input.Url, type, userId); + var uploaded = await TryUploadAvatar(input.Url, type, userId, system); if (uploaded != null) { // todo: make new image type called Cdn? @@ -26,7 +27,7 @@ public class AvatarHostingService return input; } - public async Task TryUploadAvatar(string? avatarUrl, RehostedImageType type, ulong userId) + public async Task TryUploadAvatar(string? avatarUrl, RehostedImageType type, ulong userId, PKSystem? system) { if (!AvatarUtils.IsDiscordCdnUrl(avatarUrl)) return null; @@ -42,7 +43,7 @@ public class AvatarHostingService }; var response = await _client.PostAsJsonAsync(_config.AvatarServiceUrl + "/pull", - new { url = avatarUrl, kind, uploaded_by = userId }); + new { url = avatarUrl, kind, uploaded_by = userId, system_id = system?.Uuid.ToString() }); if (response.StatusCode != HttpStatusCode.OK) { var error = await response.Content.ReadFromJsonAsync(); From 99f905de4c3f5cd537d9e078b4057d7bf4eaf5a7 Mon Sep 17 00:00:00 2001 From: ashe Date: Tue, 13 Feb 2024 02:55:21 -0700 Subject: [PATCH 020/207] fix(api): refactor autoproxy controller so unlatching can work (#615) --- .../Controllers/v2/AutoproxyControllerV2.cs | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/PluralKit.API/Controllers/v2/AutoproxyControllerV2.cs b/PluralKit.API/Controllers/v2/AutoproxyControllerV2.cs index d72c6d78..2f42b5f5 100644 --- a/PluralKit.API/Controllers/v2/AutoproxyControllerV2.cs +++ b/PluralKit.API/Controllers/v2/AutoproxyControllerV2.cs @@ -53,7 +53,7 @@ public class AutoproxyControllerV2: PKControllerBase private async Task Patch(PKSystem system, ulong? guildId, ulong? channelId, JObject data, AutoproxySettings oldData) { - var updateMember = data.ContainsKey("autoproxy_member"); + var updateMember = data.ContainsKey("autoproxy_member") && data.Value("autoproxy_member") != null; PKMember? member = null; if (updateMember) @@ -64,15 +64,37 @@ public class AutoproxyControllerV2: PKControllerBase } var patch = AutoproxyPatch.FromJson(data, member?.Id); - patch.AssertIsValid(); + + var newAutoproxyMode = patch.AutoproxyMode.IsPresent ? patch.AutoproxyMode : oldData.AutoproxyMode; + var newAutoproxyMember = patch.AutoproxyMember.IsPresent ? patch.AutoproxyMember : oldData.AutoproxyMember; + if (updateMember && member == null) + { patch.Errors.Add(new("autoproxy_member", "Member not found.")); - if (updateMember && !( - (patch.AutoproxyMode.IsPresent && patch.AutoproxyMode.Value == AutoproxyMode.Member) - || (!patch.AutoproxyMode.IsPresent && oldData.AutoproxyMode == AutoproxyMode.Member)) - ) - patch.Errors.Add(new("autoproxy_member", "Cannot update autoproxy member if autoproxy mode is set to latch")); + } + + if (newAutoproxyMode.Value == AutoproxyMode.Member) + { + if (!updateMember) + { + patch.Errors.Add(new("autoproxy_member", "An autoproxy member must be supplied for autoproxy mode 'member'")); + } + + patch.AutoproxyMode = newAutoproxyMode; + patch.AutoproxyMember = newAutoproxyMember; + } + else + { + if (updateMember) + { + patch.Errors.Add(new("autoproxy_member", "Cannot update autoproxy member if autoproxy mode is not set to 'member'")); + } + + patch.AutoproxyMode = newAutoproxyMode; + patch.AutoproxyMember = null; + } + if (patch.Errors.Count > 0) throw new ModelParseError(patch.Errors); From a4fd48e64d5ab686a9325169186ac48bce1a5f71 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 13:04:27 +0100 Subject: [PATCH 021/207] fix(dashboard): make formatted group preview use total group count --- dashboard/src/components/member/GroupEdit.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/src/components/member/GroupEdit.svelte b/dashboard/src/components/member/GroupEdit.svelte index 40411744..611ac3f0 100644 --- a/dashboard/src/components/member/GroupEdit.svelte +++ b/dashboard/src/components/member/GroupEdit.svelte @@ -150,7 +150,7 @@ {#if groupsWithMember && groupsWithMember.length > 0}

- {#if finalGroupsList.length <= 5} + {#if groupsWithMember.length <= 5} {:else} From 6eadcb42b16f1430b78adbafa58a3e457ebe92d9 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 13:11:22 +0100 Subject: [PATCH 022/207] fix(dashboard): don't force items per page amount on member/group pages --- dashboard/src/components/list/PageControl.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dashboard/src/components/list/PageControl.svelte b/dashboard/src/components/list/PageControl.svelte index 89e9f05e..ac997259 100644 --- a/dashboard/src/components/list/PageControl.svelte +++ b/dashboard/src/components/list/PageControl.svelte @@ -32,13 +32,13 @@ } } - $: updateItemsPerPage(pageOptions.view) + // $: updateItemsPerPage(pageOptions.view) - function updateItemsPerPage(..._: any) { - if (pageOptions.view === "card") pageOptions.itemsPerPage = 24 - else if (pageOptions.view === "tiny") pageOptions.itemsPerPage = 36 - else pageOptions.itemsPerPage = 25 - } + // function updateItemsPerPage(..._: any) { + // if (pageOptions.view === "card") pageOptions.itemsPerPage = 24 + // else if (pageOptions.view === "tiny") pageOptions.itemsPerPage = 36 + // else pageOptions.itemsPerPage = 25 + // } From 08d050a82786e4ac94eac8cab842a349284b85c1 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 13:40:26 +0100 Subject: [PATCH 023/207] feat(dashboard): (re-)add opendyslexic and atkinson hyperlegible options --- .../fonts/AtkinsonHyperlegible-Bold.woff2 | Bin 0 -> 15800 bytes .../AtkinsonHyperlegible-BoldItalic.woff2 | Bin 0 -> 17300 bytes .../fonts/AtkinsonHyperlegible-Italic.woff2 | Bin 0 -> 16988 bytes .../fonts/AtkinsonHyperlegible-Regular.woff2 | Bin 0 -> 15208 bytes dashboard/public/fonts/OpenDyslexic-Bold.ttf | Bin 0 -> 78100 bytes .../public/fonts/OpenDyslexic-BoldItalic.ttf | Bin 0 -> 146464 bytes .../public/fonts/OpenDyslexic-Italic.ttf | Bin 0 -> 124544 bytes .../public/fonts/OpenDyslexic-Regular.ttf | Bin 0 -> 71548 bytes dashboard/src/routes/Settings/Settings.svelte | 28 ++++++-- dashboard/styles/fonts.scss | 64 ++++++++++++++++++ dashboard/styles/generic.scss | 8 ++- 11 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 dashboard/public/fonts/AtkinsonHyperlegible-Bold.woff2 create mode 100644 dashboard/public/fonts/AtkinsonHyperlegible-BoldItalic.woff2 create mode 100644 dashboard/public/fonts/AtkinsonHyperlegible-Italic.woff2 create mode 100644 dashboard/public/fonts/AtkinsonHyperlegible-Regular.woff2 create mode 100644 dashboard/public/fonts/OpenDyslexic-Bold.ttf create mode 100644 dashboard/public/fonts/OpenDyslexic-BoldItalic.ttf create mode 100644 dashboard/public/fonts/OpenDyslexic-Italic.ttf create mode 100644 dashboard/public/fonts/OpenDyslexic-Regular.ttf create mode 100644 dashboard/styles/fonts.scss diff --git a/dashboard/public/fonts/AtkinsonHyperlegible-Bold.woff2 b/dashboard/public/fonts/AtkinsonHyperlegible-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..28b979160546e51938c3dac415854e981deb23b8 GIT binary patch literal 15800 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 CQl1b1 literal 0 HcmV?d00001 diff --git a/dashboard/public/fonts/AtkinsonHyperlegible-BoldItalic.woff2 b/dashboard/public/fonts/AtkinsonHyperlegible-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ae61bb665d92f05de1b3353a4d3145fc76bca3e6 GIT binary patch literal 17300 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 literal 0 HcmV?d00001 diff --git a/dashboard/public/fonts/AtkinsonHyperlegible-Italic.woff2 b/dashboard/public/fonts/AtkinsonHyperlegible-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3b450b7ebdd76ded616c87d05d8ad3dc1dc3bab8 GIT binary patch literal 16988 zcmV)8K*qm!Pew8T0RR91076^<4*&oF0FB%L073l#0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/dashboard/public/fonts/OpenDyslexic-Bold.ttf b/dashboard/public/fonts/OpenDyslexic-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6da12f243e405bcc0ee3d71c8875c61832c4fb7b GIT binary patch literal 78100 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ģ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 H*^v0Z8geSw literal 0 HcmV?d00001 diff --git a/dashboard/src/routes/Settings/Settings.svelte b/dashboard/src/routes/Settings/Settings.svelte index f018c0b9..62ce89b6 100644 --- a/dashboard/src/routes/Settings/Settings.svelte +++ b/dashboard/src/routes/Settings/Settings.svelte @@ -22,6 +22,7 @@ }, accessibility: { opendyslexic: false, + atkinsonHyperlegible: false, pagelinks: false, expandedcards: false } @@ -38,9 +39,18 @@ localStorage.setItem("pk-config", JSON.stringify(res)); } - function toggleOpenDyslexic() { - if (settings.accessibility.opendyslexic) document.getElementById("app").classList.add("dyslexic"); - else document.getElementById("app").classList.remove("dyslexic"); + function changeFont(value: string) { + document.getElementById("app").classList.remove("dyslexic"); + document.getElementById("app").classList.remove("atkinson"); + if (value !== "default") document.getElementById("app").classList.add(value); + + if (value === "dyslexic") settings.accessibility.opendyslexic = true + else settings.accessibility.opendyslexic = false + + if (value === "atkinson") settings.accessibility.atkinsonHyperlegible = true + else settings.accessibility.atkinsonHyperlegible = false + + localStorage.setItem("pk-settings", JSON.stringify(settings)); } const revealToken = () => showToken = !showToken; @@ -82,10 +92,14 @@

Accessibility


- + + + + Expand cards by default? {settings.accessibility.expandedcards = !settings.accessibility.expandedcards; localStorage.setItem("pk-settings", JSON.stringify(settings));}}/> If enabled, lists will be expanded by default (overrides page links). diff --git a/dashboard/styles/fonts.scss b/dashboard/styles/fonts.scss new file mode 100644 index 00000000..46bdc0b0 --- /dev/null +++ b/dashboard/styles/fonts.scss @@ -0,0 +1,64 @@ +@font-face { + font-family: 'OpenDyslexic'; + src: url('/fonts/OpenDyslexic-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'OpenDyslexic'; + src: url('/fonts/OpenDyslexic-BoldItalic.ttf') format('truetype'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'OpenDyslexic'; + src: url('/fonts/OpenDyslexic-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'OpenDyslexic'; + src: url('/fonts/OpenDyslexic-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Atkinson Hyperlegible'; + src: url('/fonts/AtkinsonHyperlegible-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Atkinson Hyperlegible'; + src: url('/fonts/AtkinsonHyperlegible-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Atkinson Hyperlegible'; + src: url('/fonts/AtkinsonHyperlegible-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Atkinson Hyperlegible'; + src: url('/fonts/AtkinsonHyperlegible-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + diff --git a/dashboard/styles/generic.scss b/dashboard/styles/generic.scss index f2344623..7940a639 100644 --- a/dashboard/styles/generic.scss +++ b/dashboard/styles/generic.scss @@ -3,7 +3,7 @@ This stylesheet should be used globally regardless of theming some specific rules are meant to be overwritten by the individual themes */ -@import url('http://fonts.cdnfonts.com/css/open-dyslexic'); +@import "fonts"; // some variables $breakpoint-xs: 0px; @@ -45,7 +45,11 @@ code { } .dyslexic { - font-family: 'Open-Dyslexic', sans-serif; + font-family: 'OpenDyslexic', sans-serif; +} + +.atkinson { + font-family: 'Atkinson Hyperlegible', sans-serif; } // dashboard specific elements From 6a1b58412171008cf2d04402d675de2db8eb2fe0 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 13:52:18 +0100 Subject: [PATCH 024/207] fix(dashboard): fix groups not appearing on public member page --- dashboard/src/routes/Dash/Member/Member.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dashboard/src/routes/Dash/Member/Member.svelte b/dashboard/src/routes/Dash/Member/Member.svelte index 45133c8b..9b790466 100644 --- a/dashboard/src/routes/Dash/Member/Member.svelte +++ b/dashboard/src/routes/Dash/Member/Member.svelte @@ -87,7 +87,7 @@ async function fetchGroups() { try { let memberGroups: Group[] = await api().members($params.id).groups().get({auth: !isPublic }); - memberGroups.forEach(g => g.members = []) + if (!isPublic) memberGroups.forEach(g => g.members = []) groups.set(memberGroups) if (!isPublic) { @@ -136,7 +136,7 @@ } } - $: memberGroups = $groups.filter(g => g.members.includes(member.uuid)); + $: memberGroups = !isPublic ? $groups.filter(g => g.members.includes(member.uuid)) : $groups; $: processedList = filterList(memberGroups, $groups,listOptions); $: currentPage = paginateList(processedList, pageOptions); $: pageAmount = getPageAmount(processedList, pageOptions); From a81bbe6e26f1d669c39163d7236709eced82ab3d Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 14:08:03 +0100 Subject: [PATCH 025/207] tweak(dashboard): exit system edit mode when submitting --- dashboard/src/components/system/Edit.svelte | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/dashboard/src/components/system/Edit.svelte b/dashboard/src/components/system/Edit.svelte index 7d90aa9d..70bd609d 100644 --- a/dashboard/src/components/system/Edit.svelte +++ b/dashboard/src/components/system/Edit.svelte @@ -12,7 +12,6 @@ export let editMode: boolean; export let user: System; let loading: boolean; - let success = false; let err: string[] = []; @@ -46,8 +45,8 @@ user = res; currentUser.update(() => res); err = []; - success = true; loading = false; + editMode = false; } catch (error) { console.log(error); err.push(error.message); @@ -60,9 +59,6 @@ {#each err as error} {@html error} {/each} -{#if success} -System information updated! -{/if} From 977edb70a2b35618bf15ecff1a27044161718fc6 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 14:18:20 +0100 Subject: [PATCH 026/207] fix(dashboard): don't show old description after clearing --- dashboard/src/components/group/Body.svelte | 4 ++++ dashboard/src/components/member/Body.svelte | 4 ++++ dashboard/src/components/system/Body.svelte | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/dashboard/src/components/group/Body.svelte b/dashboard/src/components/group/Body.svelte index b7404f33..17be205c 100644 --- a/dashboard/src/components/group/Body.svelte +++ b/dashboard/src/components/group/Body.svelte @@ -121,7 +121,11 @@
Description:
+ {#if group.description} + {:else} + (no description) + {/if}
{#if (group.banner && ((settings && settings.appearance.banner_bottom) || !settings))} group banner diff --git a/dashboard/src/components/member/Body.svelte b/dashboard/src/components/member/Body.svelte index 1115c226..fada861a 100644 --- a/dashboard/src/components/member/Body.svelte +++ b/dashboard/src/components/member/Body.svelte @@ -196,7 +196,11 @@
Description:
+ {#if member.description} + {:else} + (no description) + {/if}
{#if (member.banner && ((settings && settings.appearance.banner_bottom) || !settings))} member banner diff --git a/dashboard/src/components/system/Body.svelte b/dashboard/src/components/system/Body.svelte index 2c8721cc..e44bd1ce 100644 --- a/dashboard/src/components/system/Body.svelte +++ b/dashboard/src/components/system/Body.svelte @@ -99,7 +99,11 @@
Description:
+ {#if user.description} + {:else} + (no description) + {/if}
{#if (user.banner && ((settings && settings.appearance.banner_bottom) || !settings))} system banner From 0b37274cbac8977927371a04e96c6f5cdc131566 Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 14:31:19 +0100 Subject: [PATCH 027/207] fix(dashboard): fix crash when randomizing with card view --- dashboard/src/routes/Dash/Random.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/src/routes/Dash/Random.svelte b/dashboard/src/routes/Dash/Random.svelte index 15444577..e9553bb5 100644 --- a/dashboard/src/routes/Dash/Random.svelte +++ b/dashboard/src/routes/Dash/Random.svelte @@ -236,7 +236,7 @@ {err} {:else} {#if pageOptions.view === 'card'} - + {:else} {/if} From 6d7e3d2d04c05d46fbabadf505b05f09dc1ae4ae Mon Sep 17 00:00:00 2001 From: Jake Fulmine Date: Sun, 18 Feb 2024 14:37:57 +0100 Subject: [PATCH 028/207] feat(dashboard): more randomization options! --- dashboard/src/components/list/CardView.svelte | 4 +-- dashboard/src/components/list/TextView.svelte | 2 +- dashboard/src/components/list/TinyView.svelte | 4 +-- dashboard/src/routes/Dash/Random.svelte | 33 +++++++------------ 4 files changed, 17 insertions(+), 26 deletions(-) diff --git a/dashboard/src/components/list/CardView.svelte b/dashboard/src/components/list/CardView.svelte index 9c568d7b..e3c34f5d 100644 --- a/dashboard/src/components/list/CardView.svelte +++ b/dashboard/src/components/list/CardView.svelte @@ -49,7 +49,7 @@ {#if pageOptions.type === "member"} - {#each currentList as item (item.uuid)} + {#each currentList as item, index (pageOptions.randomized ? item.uuid + '-' + index : item.uuid)}
{/each} {:else if pageOptions.type === "group"} - {#each currentList as item (item.uuid)} + {#each currentList as item, index (pageOptions.randomized ? item.uuid + '-' + index : item.uuid)}
- {#if item && (item.avatar_url || item.icon)} - {if (event.key === "Enter") {avatarOpen = true}}} on:click|stopPropagation={toggleAvatarModal} class="rounded-circle avatar" src={icon_url_resized} alt={altText} /> + {#if item && (item.avatar_url || item.webhook_avatar_url || item.icon)} + {if (event.key === "Enter") {avatarOpen = true}}} on:click|stopPropagation={toggleAvatarModal} class="rounded-circle avatar" src={icon_url} alt={altText} /> {:else} icon (default) {/if} From bd67bc57e6a3485d2e64f924354744db8f69e8d1 Mon Sep 17 00:00:00 2001 From: rladenson Date: Thu, 3 Oct 2024 00:52:43 -0600 Subject: [PATCH 109/207] fix: respect sys name privacy in group embed --- PluralKit.Bot/Services/EmbedService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index 1ce59fbb..fa9d9a90 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -263,7 +263,7 @@ public class EmbedService else if (system.NameFor(ctx) != null) nameField = $"{nameField} ({system.NameFor(ctx)})"; else - nameField = $"{nameField} ({system.Name})"; + nameField = $"{nameField}"; var eb = new EmbedBuilder() .Author(new Embed.EmbedAuthor(nameField, IconUrl: target.IconFor(pctx), Url: $"https://dash.pluralkit.me/profile/g/{target.Hid}")) From 3d9be096cbc4dcc0910115483b9404d25cc4203d Mon Sep 17 00:00:00 2001 From: rladenson Date: Thu, 3 Oct 2024 00:59:31 -0600 Subject: [PATCH 110/207] fix: respect sys name privacy in group list --- PluralKit.Bot/Commands/Groups.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index d2f421c7..7e4bc955 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -460,8 +460,8 @@ public class Groups { var title = new StringBuilder("Groups of "); - if (target.Name != null) - title.Append($"{target.Name} (`{target.DisplayHid(ctx.Config)}`)"); + if (target.NameFor(ctx) != null) + title.Append($"{target.NameFor(ctx)} (`{target.DisplayHid(ctx.Config)}`)"); else title.Append($"`{target.DisplayHid(ctx.Config)}`"); From 23fe9044645df5a6bc4ccf29344b18a1b5356831 Mon Sep 17 00:00:00 2001 From: Petal Ladenson Date: Thu, 3 Oct 2024 02:23:33 -0600 Subject: [PATCH 111/207] feat(bot): add -plaintext flag alongside -raw --- .../Context/ContextArgumentsExt.cs | 15 +- PluralKit.Bot/Commands/Groups.cs | 104 ++++++---- PluralKit.Bot/Commands/MemberEdit.cs | 132 ++++++++---- PluralKit.Bot/Commands/Message.cs | 39 ++-- PluralKit.Bot/Commands/SystemEdit.cs | 194 ++++++++++++------ 5 files changed, 322 insertions(+), 162 deletions(-) diff --git a/PluralKit.Bot/CommandSystem/Context/ContextArgumentsExt.cs b/PluralKit.Bot/CommandSystem/Context/ContextArgumentsExt.cs index 9a93440b..1a958c8e 100644 --- a/PluralKit.Bot/CommandSystem/Context/ContextArgumentsExt.cs +++ b/PluralKit.Bot/CommandSystem/Context/ContextArgumentsExt.cs @@ -91,8 +91,12 @@ public static class ContextArgumentsExt public static bool MatchClear(this Context ctx) => ctx.Match("clear", "reset", "default") || ctx.MatchFlag("c", "clear"); - public static bool MatchRaw(this Context ctx) => - ctx.Match("r", "raw") || ctx.MatchFlag("r", "raw"); + public static ReplyFormat MatchFormat(this Context ctx) + { + if (ctx.Match("r", "raw") || ctx.MatchFlag("r", "raw")) return ReplyFormat.Raw; + if (ctx.Match("pt", "plaintext") || ctx.MatchFlag("pt", "plaintext")) return ReplyFormat.Plaintext; + return ReplyFormat.Standard; + } public static bool MatchToggle(this Context ctx, bool? defaultValue = null) { @@ -184,4 +188,11 @@ public static class ContextArgumentsExt return groups; } +} + +public enum ReplyFormat +{ + Standard, + Raw, + Plaintext } \ No newline at end of file diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index 7e4bc955..36726056 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -132,40 +132,47 @@ public class Groups // No perms check, display name isn't covered by member privacy - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.DisplayName == null) + { await ctx.Reply(noDisplayNameSetMessage); - else - await ctx.Reply($"```\n{target.DisplayName}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.DisplayName}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing displayname for group {target.Reference(ctx)}"); + await ctx.Reply(target.DisplayName, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.DisplayName == null) - { - await ctx.Reply(noDisplayNameSetMessage); - } - else - { - var eb = new EmbedBuilder() - .Field(new Embed.Field("Name", target.Name)) - .Field(new Embed.Field("Display Name", target.DisplayName)); + var eb = new EmbedBuilder() + .Field(new Embed.Field("Name", target.Name)) + .Field(new Embed.Field("Display Name", target.DisplayName)); - var reference = target.Reference(ctx); + var reference = target.Reference(ctx); - if (ctx.System?.Id == target.System) - eb.Description( - $"To change display name, type `pk;group {reference} displayname `.\n" - + $"To clear it, type `pk;group {reference} displayname -clear`.\n" - + $"To print the raw display name, type `pk;group {reference} displayname -raw`."); + if (ctx.System?.Id == target.System) + eb.Description( + $"To change display name, type `pk;group {reference} displayname `.\n" + + $"To clear it, type `pk;group {reference} displayname -clear`.\n" + + $"To print the raw display name, type `pk;group {reference} displayname -raw`."); - if (ctx.System?.Id == target.System) - eb.Footer(new Embed.EmbedFooter($"Using {target.DisplayName.Length}/{Limits.MaxGroupNameLength} characters.")); + if (ctx.System?.Id == target.System) + eb.Footer(new Embed.EmbedFooter($"Using {target.DisplayName.Length}/{Limits.MaxGroupNameLength} characters.")); - await ctx.Reply(embed: eb.Build()); - } + await ctx.Reply(embed: eb.Build()); return; } @@ -201,30 +208,41 @@ public class Groups noDescriptionSetMessage += $" To set one, type `pk;group {target.Reference(ctx)} description `."; - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Description == null) + { await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply($"```\n{target.Description}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.Description}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing description for group {target.Reference(ctx)}"); + await ctx.Reply(target.Description, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Description == null) - await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply(embed: new EmbedBuilder() - .Title("Group description") - .Description(target.Description) - .Field(new Embed.Field("\u200B", - $"To print the description with formatting, type `pk;group {target.Reference(ctx)} description -raw`." - + (ctx.System?.Id == target.System - ? $" To clear it, type `pk;group {target.Reference(ctx)} description -clear`." - : "") - + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) - .Build()); + await ctx.Reply(embed: new EmbedBuilder() + .Title("Group description") + .Description(target.Description) + .Field(new Embed.Field("\u200B", + $"To print the description with formatting, type `pk;group {target.Reference(ctx)} description -raw`." + + (ctx.System?.Id == target.System + ? $" To clear it, type `pk;group {target.Reference(ctx)} description -clear`." + : "") + + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) + .Build()); return; } @@ -385,7 +403,7 @@ public class Groups public async Task GroupColor(Context ctx, PKGroup target) { var isOwnSystem = ctx.System?.Id == target.System; - var matchedRaw = ctx.MatchRaw(); + var matchedFormat = ctx.MatchFormat(); var matchedClear = ctx.MatchClear(); if (!isOwnSystem || !(ctx.HasNext() || matchedClear)) @@ -393,8 +411,10 @@ public class Groups if (target.Color == null) await ctx.Reply( "This group does not have a color set." + (isOwnSystem ? $" To set one, type `pk;group {target.Reference(ctx)} color `." : "")); - else if (matchedRaw) + else if (matchedFormat == ReplyFormat.Raw) await ctx.Reply("```\n#" + target.Color + "\n```"); + else if (matchedFormat == ReplyFormat.Plaintext) + await ctx.Reply(target.Color); else await ctx.Reply(embed: new EmbedBuilder() .Title("Group color") diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index 84afc443..3c19c171 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -70,30 +70,41 @@ public class MemberEdit noDescriptionSetMessage += $" To set one, type `pk;member {target.Reference(ctx)} description `."; - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Description == null) + { await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply($"```\n{target.Description}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.Description}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing description for member {target.Reference(ctx)}"); + await ctx.Reply(target.Description, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Description == null) - await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply(embed: new EmbedBuilder() - .Title("Member description") - .Description(target.Description) - .Field(new Embed.Field("\u200B", - $"To print the description with formatting, type `pk;member {target.Reference(ctx)} description -raw`." - + (ctx.System?.Id == target.System - ? $" To clear it, type `pk;member {target.Reference(ctx)} description -clear`." - : "") - + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) - .Build()); + await ctx.Reply(embed: new EmbedBuilder() + .Title("Member description") + .Description(target.Description) + .Field(new Embed.Field("\u200B", + $"To print the description with formatting, type `pk;member {target.Reference(ctx)} description -raw`." + + (ctx.System?.Id == target.System + ? $" To clear it, type `pk;member {target.Reference(ctx)} description -clear`." + : "") + + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) + .Build()); return; } @@ -126,26 +137,37 @@ public class MemberEdit ctx.CheckSystemPrivacy(target.System, target.PronounPrivacy); - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Pronouns == null) + { await ctx.Reply(noPronounsSetMessage); - else - await ctx.Reply($"```\n{target.Pronouns}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.Pronouns}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing pronouns for member {target.Reference(ctx)}"); + await ctx.Reply(target.Pronouns, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Pronouns == null) - await ctx.Reply(noPronounsSetMessage); - else - await ctx.Reply( - $"**{target.NameFor(ctx)}**'s pronouns are **{target.Pronouns}**.\nTo print the pronouns with formatting, type `pk;member {target.Reference(ctx)} pronouns -raw`." - + (ctx.System?.Id == target.System - ? $" To clear them, type `pk;member {target.Reference(ctx)} pronouns -clear`." - : "") - + $" Using {target.Pronouns.Length}/{Limits.MaxPronounsLength} characters."); + await ctx.Reply( + $"**{target.NameFor(ctx)}**'s pronouns are **{target.Pronouns}**.\nTo print the pronouns with formatting, type `pk;member {target.Reference(ctx)} pronouns -raw`." + + (ctx.System?.Id == target.System + ? $" To clear them, type `pk;member {target.Reference(ctx)} pronouns -clear`." + : "") + + $" Using {target.Pronouns.Length}/{Limits.MaxPronounsLength} characters."); return; } @@ -232,7 +254,7 @@ public class MemberEdit public async Task Color(Context ctx, PKMember target) { var isOwnSystem = ctx.System?.Id == target.System; - var matchedRaw = ctx.MatchRaw(); + var matchedFormat = ctx.MatchFormat(); var matchedClear = ctx.MatchClear(); if (!isOwnSystem || !(ctx.HasNext() || matchedClear)) @@ -240,8 +262,10 @@ public class MemberEdit if (target.Color == null) await ctx.Reply( "This member does not have a color set." + (isOwnSystem ? $" To set one, type `pk;member {target.Reference(ctx)} color `." : "")); - else if (matchedRaw) + else if (matchedFormat == ReplyFormat.Raw) await ctx.Reply("```\n#" + target.Color + "\n```"); + else if (matchedFormat == ReplyFormat.Plaintext) + await ctx.Reply(target.Color); else await ctx.Reply(embed: new EmbedBuilder() .Title("Member color") @@ -388,12 +412,26 @@ public class MemberEdit // No perms check, display name isn't covered by member privacy - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if what's next is "raw"/"plaintext" we need to check for null + if (format != ReplyFormat.Standard) if (target.DisplayName == null) + { await ctx.Reply(noDisplayNameSetMessage); - else - await ctx.Reply($"```\n{target.DisplayName}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.DisplayName}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing displayname for member {target.Reference(ctx)}"); + await ctx.Reply(target.DisplayName, embed: eb.Build()); return; } @@ -450,12 +488,26 @@ public class MemberEdit // No perms check, display name isn't covered by member privacy var memberGuildConfig = await ctx.Repository.GetMemberGuild(ctx.Guild.Id, target.Id); - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if what's next is "raw"/"plaintext" we need to check for null + if (format != ReplyFormat.Standard) if (memberGuildConfig.DisplayName == null) + { await ctx.Reply(noServerNameSetMessage); - else - await ctx.Reply($"```\n{memberGuildConfig.DisplayName}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{memberGuildConfig.DisplayName}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing servername for member {target.Reference(ctx)}"); + await ctx.Reply(memberGuildConfig.DisplayName, embed: eb.Build()); return; } diff --git a/PluralKit.Bot/Commands/Message.cs b/PluralKit.Bot/Commands/Message.cs index b45639d7..ca423f94 100644 --- a/PluralKit.Bot/Commands/Message.cs +++ b/PluralKit.Bot/Commands/Message.cs @@ -352,7 +352,9 @@ public class ProxiedMessage else if (!await ctx.CheckPermissionsInGuildChannel(channel, PermissionSet.ViewChannel)) showContent = false; - if (ctx.MatchRaw()) + var format = ctx.MatchFormat(); + + if (format != ReplyFormat.Standard) { var discordMessage = await _rest.GetMessageOrNull(message.Message.Channel, message.Message.Mid); if (discordMessage == null || !showContent) @@ -365,21 +367,32 @@ public class ProxiedMessage return; } - await ctx.Reply($"```{content}```"); - - if (Regex.IsMatch(content, "```.*```", RegexOptions.Singleline)) + if (format == ReplyFormat.Raw) { - var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)); - await ctx.Rest.CreateMessage( - ctx.Channel.Id, - new MessageRequest - { - Content = $"{Emojis.Warn} Message contains codeblocks, raw source sent as an attachment." - }, - new[] { new MultipartFile("message.txt", stream, null, null, null) }); + await ctx.Reply($"```{content}```"); + + if (Regex.IsMatch(content, "```.*```", RegexOptions.Singleline)) + { + var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)); + await ctx.Rest.CreateMessage( + ctx.Channel.Id, + new MessageRequest + { + Content = $"{Emojis.Warn} Message contains codeblocks, raw source sent as an attachment." + }, + new[] { new MultipartFile("message.txt", stream, null, null, null) }); + } + return; + } + + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing contents of message {message.Message.Mid}"); + await ctx.Reply(content, embed: eb.Build()); + return; } - return; } if (isDelete) diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index a3bcaa64..2ff0c528 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -37,24 +37,35 @@ public class SystemEdit if (isOwnSystem) noNameSetMessage += " Type `pk;system name ` to set one."; - if (ctx.MatchRaw()) - { - if (target.Name != null) - await ctx.Reply($"```\n{target.Name}\n```"); - else + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) + if (target.Name == null) + { await ctx.Reply(noNameSetMessage); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"` ``\n{target.Name}\n` ``"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing name for system {target.DisplayHid()}"); + await ctx.Reply(target.Name, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Name != null) - await ctx.Reply( - $"{(isOwnSystem ? "Your" : "This")} system's name is currently **{target.Name}**." - + (isOwnSystem ? " Type `pk;system name -clear` to clear it." : "") - + $" Using {target.Name.Length}/{Limits.MaxSystemNameLength} characters."); - else - await ctx.Reply(noNameSetMessage); + await ctx.Reply( + $"{(isOwnSystem ? "Your" : "This")} system's name is currently **{target.Name}**." + + (isOwnSystem ? " Type `pk;system name -clear` to clear it." : "") + + $" Using {target.Name.Length}/{Limits.MaxSystemNameLength} characters."); return; } @@ -91,24 +102,35 @@ public class SystemEdit var settings = await ctx.Repository.GetSystemGuild(ctx.Guild.Id, target.Id); - if (ctx.MatchRaw()) - { - if (settings.DisplayName != null) - await ctx.Reply($"```\n{settings.DisplayName}\n```"); - else + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) + if (settings.DisplayName == null) + { await ctx.Reply(noNameSetMessage); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"` ``\n{settings.DisplayName}\n` ``"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing servername for system {target.DisplayHid()}"); + await ctx.Reply(settings.DisplayName, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (settings.DisplayName != null) - await ctx.Reply( - $"{(isOwnSystem ? "Your" : "This")} system's name for this server is currently **{settings.DisplayName}**." - + (isOwnSystem ? " Type `pk;system servername -clear` to clear it." : "") - + $" Using {settings.DisplayName.Length}/{Limits.MaxSystemNameLength} characters."); - else - await ctx.Reply(noNameSetMessage); + await ctx.Reply( + $"{(isOwnSystem ? "Your" : "This")} system's name for this server is currently **{settings.DisplayName}**." + + (isOwnSystem ? " Type `pk;system servername -clear` to clear it." : "") + + $" Using {settings.DisplayName.Length}/{Limits.MaxSystemNameLength} characters."); return; } @@ -143,28 +165,39 @@ public class SystemEdit if (isOwnSystem) noDescriptionSetMessage += " To set one, type `pk;s description `."; - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Description == null) + { await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply($"```\n{target.Description}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"` ``\n{target.Description}\n` ``"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing description for system {target.DisplayHid()}"); + await ctx.Reply(target.Description, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Description == null) - await ctx.Reply(noDescriptionSetMessage); - else - await ctx.Reply(embed: new EmbedBuilder() - .Title("System description") - .Description(target.Description) - .Footer(new Embed.EmbedFooter( - "To print the description with formatting, type `pk;s description -raw`." - + (isOwnSystem ? " To clear it, type `pk;s description -clear`. To change it, type `pk;s description `." : "") - + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) - .Build()); + await ctx.Reply(embed: new EmbedBuilder() + .Title("System description") + .Description(target.Description) + .Footer(new Embed.EmbedFooter( + "To print the description with formatting, type `pk;s description -raw`." + + (isOwnSystem ? " To clear it, type `pk;s description -clear`. To change it, type `pk;s description `." : "") + + $" Using {target.Description.Length}/{Limits.MaxDescriptionLength} characters.")) + .Build()); return; } @@ -191,7 +224,7 @@ public class SystemEdit public async Task Color(Context ctx, PKSystem target) { var isOwnSystem = ctx.System?.Id == target.Id; - var matchedRaw = ctx.MatchRaw(); + var matchedFormat = ctx.MatchFormat(); var matchedClear = ctx.MatchClear(); if (!isOwnSystem || !(ctx.HasNext() || matchedClear)) @@ -199,8 +232,10 @@ public class SystemEdit if (target.Color == null) await ctx.Reply( "This system does not have a color set." + (isOwnSystem ? " To set one, type `pk;system color `." : "")); - else if (matchedRaw) + else if (matchedFormat == ReplyFormat.Raw) await ctx.Reply("```\n#" + target.Color + "\n```"); + else if (matchedFormat == ReplyFormat.Plaintext) + await ctx.Reply(target.Color); else await ctx.Reply(embed: new EmbedBuilder() .Title("System color") @@ -246,22 +281,33 @@ public class SystemEdit ? "You currently have no system tag set. To set one, type `pk;s tag `." : "This system currently has no system tag set."; - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Tag == null) + { await ctx.Reply(noTagSetMessage); - else - await ctx.Reply($"```\n{target.Tag}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.Tag}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing tag for system {target.DisplayHid()}"); + await ctx.Reply(target.Tag, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Tag == null) - await ctx.Reply(noTagSetMessage); - else - await ctx.Reply($"{(isOwnSystem ? "Your" : "This system's")} current system tag is {target.Tag.AsCode()}." - + (isOwnSystem ? "To change it, type `pk;s tag `. To clear it, type `pk;s tag -clear`." : "")); + await ctx.Reply($"{(isOwnSystem ? "Your" : "This system's")} current system tag is {target.Tag.AsCode()}." + + (isOwnSystem ? "To change it, type `pk;s tag `. To clear it, type `pk;s tag -clear`." : "")); return; } @@ -296,15 +342,22 @@ public class SystemEdit var settings = await ctx.Repository.GetSystemGuild(ctx.Guild.Id, target.Id); - async Task Show(bool raw = false) + async Task Show(ReplyFormat format = ReplyFormat.Standard) { if (settings.Tag != null) { - if (raw) + if (format == ReplyFormat.Raw) { await ctx.Reply($"```{settings.Tag}```"); return; } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing servertag for system {target.DisplayHid()}"); + await ctx.Reply(settings.Tag, embed: eb.Build()); + return; + } var msg = $"Your current system tag in '{ctx.Guild.Name}' is {settings.Tag.AsCode()}"; if (!settings.TagEnabled) @@ -400,8 +453,8 @@ public class SystemEdit await EnableDisable(false); else if (ctx.Match("enable") || ctx.MatchFlag("enable")) await EnableDisable(true); - else if (ctx.MatchRaw()) - await Show(true); + else if (ctx.MatchFormat() != ReplyFormat.Standard) + await Show(ctx.MatchFormat()); else if (!ctx.HasNext(false)) await Show(); else @@ -418,24 +471,35 @@ public class SystemEdit if (isOwnSystem) noPronounsSetMessage += " To set some, type `pk;system pronouns `"; - if (ctx.MatchRaw()) - { + var format = ctx.MatchFormat(); + + // if there's nothing next or what's next is "raw"/"plaintext" we're doing a query, so check for null + if (!ctx.HasNext(false) || format != ReplyFormat.Standard) if (target.Pronouns == null) + { await ctx.Reply(noPronounsSetMessage); - else - await ctx.Reply($"```\n{target.Pronouns}\n```"); + return; + } + + if (format == ReplyFormat.Raw) + { + await ctx.Reply($"```\n{target.Pronouns}\n```"); + return; + } + if (format == ReplyFormat.Plaintext) + { + var eb = new EmbedBuilder() + .Description($"Showing pronouns for system {target.DisplayHid()}"); + await ctx.Reply(target.Pronouns, embed: eb.Build()); return; } if (!ctx.HasNext(false)) { - if (target.Pronouns == null) - await ctx.Reply(noPronounsSetMessage); - else - await ctx.Reply($"{(isOwnSystem ? "Your" : "This system's")} current pronouns are **{target.Pronouns}**.\nTo print the pronouns with formatting, type `pk;system pronouns -raw`." - + (isOwnSystem ? " To clear them, type `pk;system pronouns -clear`." - : "") - + $" Using {target.Pronouns.Length}/{Limits.MaxPronounsLength} characters."); + await ctx.Reply($"{(isOwnSystem ? "Your" : "This system's")} current pronouns are **{target.Pronouns}**.\nTo print the pronouns with formatting, type `pk;system pronouns -raw`." + + (isOwnSystem ? " To clear them, type `pk;system pronouns -clear`." + : "") + + $" Using {target.Pronouns.Length}/{Limits.MaxPronounsLength} characters."); return; } From 4bd4407771ff7a853fb94ea626131b41e813a502 Mon Sep 17 00:00:00 2001 From: Petal Ladenson Date: Thu, 3 Oct 2024 02:29:38 -0600 Subject: [PATCH 112/207] feat(bot): add switch copying and more detailed switch editing --- PluralKit.Bot/CommandMeta/CommandHelp.cs | 3 +- PluralKit.Bot/CommandMeta/CommandTree.cs | 4 +- PluralKit.Bot/Commands/Switch.cs | 62 ++++++++++++++++++++++-- docs/content/command-list.md | 3 +- docs/content/tips-and-tricks.md | 4 ++ 5 files changed, 70 insertions(+), 6 deletions(-) diff --git a/PluralKit.Bot/CommandMeta/CommandHelp.cs b/PluralKit.Bot/CommandMeta/CommandHelp.cs index 5d3dc30e..843e2e1d 100644 --- a/PluralKit.Bot/CommandMeta/CommandHelp.cs +++ b/PluralKit.Bot/CommandMeta/CommandHelp.cs @@ -82,6 +82,7 @@ public partial class CommandTree public static Command SwitchMove = new Command("switch move", "switch move ", "Moves the latest switch in time"); public static Command SwitchEdit = new Command("switch edit", "switch edit [member 2] [member 3...]", "Edits the members in the latest switch"); public static Command SwitchEditOut = new Command("switch edit out", "switch edit out", "Turns the latest switch into a switch-out"); + public static Command SwitchCopy = new Command("switch copy", "switch copy [member 2] [member 3...]", "Makes a new switch with the listed members added"); public static Command SwitchDelete = new Command("switch delete", "switch delete", "Deletes the latest switch"); public static Command SwitchDeleteAll = new Command("switch delete", "switch delete all", "Deletes all logged switches"); public static Command Link = new Command("link", "link ", "Links your system to another account"); @@ -137,7 +138,7 @@ public partial class CommandTree public static Command[] SwitchCommands = { - Switch, SwitchOut, SwitchMove, SwitchEdit, SwitchEditOut, SwitchDelete, SwitchDeleteAll + Switch, SwitchOut, SwitchMove, SwitchEdit, SwitchEditOut, SwitchDelete, SwitchDeleteAll, SwitchCopy }; public static Command[] ConfigCommands = diff --git a/PluralKit.Bot/CommandMeta/CommandTree.cs b/PluralKit.Bot/CommandMeta/CommandTree.cs index 64d0a929..8864436c 100644 --- a/PluralKit.Bot/CommandMeta/CommandTree.cs +++ b/PluralKit.Bot/CommandMeta/CommandTree.cs @@ -430,13 +430,15 @@ public partial class CommandTree await ctx.Execute(SwitchEdit, m => m.SwitchEdit(ctx)); else if (ctx.Match("delete", "remove", "erase", "cancel", "yeet")) await ctx.Execute(SwitchDelete, m => m.SwitchDelete(ctx)); + else if (ctx.Match("copy", "add", "duplicate", "dupe")) + await ctx.Execute(SwitchCopy, m => m.SwitchEdit(ctx, true)); else if (ctx.Match("commands", "help")) await PrintCommandList(ctx, "switching", SwitchCommands); else if (ctx.HasNext()) // there are following arguments await ctx.Execute(Switch, m => m.SwitchDo(ctx)); else await PrintCommandNotFoundError(ctx, Switch, SwitchOut, SwitchMove, SwitchEdit, SwitchEditOut, - SwitchDelete, SystemFronter, SystemFrontHistory); + SwitchDelete, SwitchCopy, SystemFronter, SystemFrontHistory); } private async Task CommandHelpRoot(Context ctx) diff --git a/PluralKit.Bot/Commands/Switch.cs b/PluralKit.Bot/Commands/Switch.cs index 9272d911..d60da3b4 100644 --- a/PluralKit.Bot/Commands/Switch.cs +++ b/PluralKit.Bot/Commands/Switch.cs @@ -7,6 +7,7 @@ namespace PluralKit.Bot; public class Switch { + public async Task SwitchDo(Context ctx) { ctx.CheckSystem(); @@ -103,12 +104,67 @@ public class Switch await ctx.Reply($"{Emojis.Success} Switch moved to ({newSwitchDeltaStr} ago)."); } - public async Task SwitchEdit(Context ctx) + public async Task SwitchEdit(Context ctx, bool newSwitch = false) { ctx.CheckSystem(); - var members = await ctx.ParseMemberList(ctx.System.Id); - await DoEditCommand(ctx, members); + var newMembers = await ctx.ParseMemberList(ctx.System.Id); + + await using var conn = await ctx.Database.Obtain(); + var currentSwitch = await ctx.Repository.GetLatestSwitch(ctx.System.Id); + var currentSwitchMembers = await ctx.Repository.GetSwitchMembers(conn, currentSwitch.Id).ToListAsync().AsTask(); + + if (ctx.MatchFlag("first", "f")) + newMembers = FirstInSwitch(newMembers[0], currentSwitchMembers); + else if (ctx.MatchFlag("remove", "r")) + newMembers = RemoveFromSwitch(newMembers, currentSwitchMembers); + else if (ctx.MatchFlag("append", "a")) + newMembers = AppendToSwitch(newMembers, currentSwitchMembers); + else if (ctx.MatchFlag("prepend", "p")) + newMembers = PrependToSwitch(newMembers, currentSwitchMembers); + + if (newSwitch) + { + // if there's no edit flag, assume we're appending + if (!ctx.MatchFlag("first", "f", "remove", "r", "append", "a", "prepend", "p")) + newMembers = AppendToSwitch(newMembers, currentSwitchMembers); + await DoSwitchCommand(ctx, newMembers); + } + else + await DoEditCommand(ctx, newMembers); + } + + public List PrependToSwitch(List members, List currentSwitchMembers) + { + members.AddRange(currentSwitchMembers); + + return members; + } + + public List AppendToSwitch(List members, List currentSwitchMembers) + { + currentSwitchMembers.AddRange(members); + members = currentSwitchMembers; + + return members; + } + + public List RemoveFromSwitch(List members, List currentSwitchMembers) + { + var memberIds = members.Select(m => m.Id.Value); + currentSwitchMembers = currentSwitchMembers.Where(m => !memberIds.Contains(m.Id.Value)).ToList(); + members = currentSwitchMembers; + + return members; + } + + public List FirstInSwitch(PKMember member, List currentSwitchMembers) + { + currentSwitchMembers = currentSwitchMembers.Where(m => m.Id != member.Id).ToList(); + var members = new List { member }; + members.AddRange(currentSwitchMembers); + + return members; } public async Task SwitchEditOut(Context ctx) diff --git a/docs/content/command-list.md b/docs/content/command-list.md index 0df96f73..610b8858 100644 --- a/docs/content/command-list.md +++ b/docs/content/command-list.md @@ -123,7 +123,8 @@ You can have a space after `pk;`, e.g. `pk;system` and `pk; system` will do the ## Switching commands - `pk;switch [member...]` - Registers a switch with the given members. - `pk;switch out` - Registers a 'switch-out' - a switch with no associated members. -- `pk;switch edit ` - Edits the members in the latest switch. +- `pk;switch edit ` - Edits the members in the latest switch. +- `pk;switch add ` - Makes a new switch based off the current switch with the listed members added or removed. - `pk;switch move