From 4782b5f825a4eda0e1fcfc0b29efe47992f909b7 Mon Sep 17 00:00:00 2001 From: rladenson Date: Sun, 5 Jan 2025 04:50:58 -0700 Subject: [PATCH] feat: compress commands that give multiple responses into one response --- PluralKit.Bot/Commands/Groups.cs | 20 ++++++++++--------- PluralKit.Bot/Commands/Member.cs | 21 ++++++++------------ PluralKit.Bot/Commands/MemberEdit.cs | 29 +++++++++++++--------------- PluralKit.Bot/Commands/SystemEdit.cs | 14 ++++++++------ 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs index be07495b..fdf0eee1 100644 --- a/PluralKit.Bot/Commands/Groups.cs +++ b/PluralKit.Bot/Commands/Groups.cs @@ -91,11 +91,12 @@ public class Groups $"> {ctx.DefaultPrefix}group **{reference}** description **This is my new group, and here is the description!**")) .Field(new Embed.Field("Set the group icon", $"> {ctx.DefaultPrefix}group **{reference}** icon\n*(with an image attached)*")); - await ctx.Reply($"{Emojis.Success} Group created!", eb.Build()); + var replyStr = $"{Emojis.Success} Group created!"; if (existingGroupCount >= Limits.WarnThreshold(groupLimit)) - await ctx.Reply( - $"{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: "); + replyStr += $"\n{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: "; + + await ctx.Reply(replyStr, eb.Build()); } public async Task RenameGroup(Context ctx, PKGroup target) @@ -188,9 +189,10 @@ public class Groups var patch = new GroupPatch { DisplayName = Partial.Null() }; await ctx.Repository.UpdateGroup(target.Id, patch); - await ctx.Reply($"{Emojis.Success} Group display name cleared."); + var replyStr = $"{Emojis.Success} Group display name cleared."; if (target.NamePrivacy == PrivacyLevel.Private) - await ctx.Reply($"{Emojis.Warn} Since this group no longer has a display name set, their name privacy **can no longer take effect**."); + replyStr += $"\n{Emojis.Warn} Since this group no longer has a display name set, their name privacy **can no longer take effect**."; + await ctx.Reply(replyStr); } else { @@ -603,12 +605,12 @@ public class Groups _ => throw new InvalidOperationException($"Invalid subject/level tuple ({subject}, {level})") }; - await ctx.Reply( - $"{Emojis.Success} {target.Name}'s **{subjectName}** has been set to **{level.LevelName()}**. {explanation}"); + var replyStr = $"{Emojis.Success} {target.Name}'s **{subjectName}** has been set to **{level.LevelName()}**. {explanation}"; if (subject == GroupPrivacySubject.Name && level == PrivacyLevel.Private && target.DisplayName == null) - await ctx.Reply( - $"{Emojis.Warn} This group does not have a display name set, and name privacy **will not take effect**."); + replyStr += $"\n{Emojis.Warn} This group does not have a display name set, and name privacy **will not take effect**."; + + await ctx.Reply(replyStr); } if (ctx.Match("all") || newValueFromCommand != null) diff --git a/PluralKit.Bot/Commands/Member.cs b/PluralKit.Bot/Commands/Member.cs index 2a82f85c..46cbfbf9 100644 --- a/PluralKit.Bot/Commands/Member.cs +++ b/PluralKit.Bot/Commands/Member.cs @@ -100,28 +100,23 @@ public class Member }); // Send confirmation and space hint - await ctx.Reply( - $"{Emojis.Success} Member \"{memberName}\" (`{member.DisplayHid(ctx.Config)}`) registered! Check out the getting started page for how to get a member up and running: https://pluralkit.me/start#create-a-member"); + var replyStr = $"{Emojis.Success} Member \"{memberName}\" (`{member.DisplayHid(ctx.Config)}`) registered! Check out the getting started page for how to get a member up and running: https://pluralkit.me/start#create-a-member"; // todo: move this to ModelRepository if (await ctx.Database.Execute(conn => conn.QuerySingleAsync("select has_private_members(@System)", new { System = ctx.System.Id })) && !ctx.Config.MemberDefaultPrivate) //if has private members - await ctx.Reply( - $"{Emojis.Warn} This member is currently **public**. To change this, use `{ctx.DefaultPrefix}member {member.DisplayHid(ctx.Config)} private`."); + replyStr += $"\n{Emojis.Warn} This member is currently **public**. To change this, use `{ctx.DefaultPrefix}member {member.DisplayHid(ctx.Config)} private`."; if (avatarArg != null) if (imageMatchError == null) - await ctx.Reply( - $"{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." : "")); + replyStr += $"\n{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}"); + replyStr += $"\n{Emojis.Error} Couldn't set avatar: {imageMatchError.Message}"; if (memberName.Contains(" ")) - await ctx.Reply( - $"{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 short ID (which is `{member.DisplayHid(ctx.Config)}`)."); + replyStr += $"\n{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 short ID (which is `{member.DisplayHid(ctx.Config)}`)."; if (memberCount >= memberLimit) - await ctx.Reply( - $"{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: "); + replyStr += $"\n{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). 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: "); + replyStr += $"\n{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: "; + await ctx.Reply(replyStr); } public async Task ViewMember(Context ctx, PKMember target) diff --git a/PluralKit.Bot/Commands/MemberEdit.cs b/PluralKit.Bot/Commands/MemberEdit.cs index 1cef2dab..86320128 100644 --- a/PluralKit.Bot/Commands/MemberEdit.cs +++ b/PluralKit.Bot/Commands/MemberEdit.cs @@ -39,11 +39,11 @@ public class MemberEdit await ctx.Reply(target.NameFor(lctx), embed: eb.Build()); break; default: - var replyStr = $"Name for member {target.DisplayHid(ctx.Config)} is **{target.NameFor(lctx)}**."; + var replyStrQ = $"Name for member {target.DisplayHid(ctx.Config)} is **{target.NameFor(lctx)}**."; if (target.System == ctx.System?.Id) - replyStr += $"\nTo rename {target.DisplayHid(ctx.Config)} type `{ctx.DefaultPrefix}member {target.NameFor(ctx)} rename `." + replyStrQ += $"\nTo rename {target.DisplayHid(ctx.Config)} type `{ctx.DefaultPrefix}member {target.NameFor(ctx)} rename `." + $" Using {target.NameFor(lctx).Length}/{Limits.MaxMemberNameLength} characters."; - await ctx.Reply(replyStr); + await ctx.Reply(replyStrQ); break; } return; @@ -70,21 +70,19 @@ public class MemberEdit var patch = new MemberPatch { Name = Partial.Present(newName) }; await ctx.Repository.UpdateMember(target.Id, patch); - await ctx.Reply($"{Emojis.Success} Member renamed (using {newName.Length}/{Limits.MaxMemberNameLength} characters)."); + var replyStr = $"{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, or just use the member's short ID (which is `{target.DisplayHid(ctx.Config)}`)."); + replyStr += $"\n{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 short ID (which is `{target.DisplayHid(ctx.Config)}`)."; 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."); + replyStr += $"\n{Emojis.Note} Note that this member has a display name set ({target.DisplayName}), and will be proxied using that name instead."; if (ctx.Guild != null) { var memberGuildConfig = await ctx.Repository.GetMemberGuild(ctx.Guild.Id, target.Id); if (memberGuildConfig.DisplayName != null) - await ctx.Reply( - $"{Emojis.Note} Note that this member has a server name set ({memberGuildConfig.DisplayName}) in this server ({ctx.Guild.Name}), and will be proxied using that name here."); + replyStr += $"\n{Emojis.Note} Note that this member has a server name set ({memberGuildConfig.DisplayName}) in this server ({ctx.Guild.Name}), and will be proxied using that name here."; } + await ctx.Reply(replyStr); } public async Task Description(Context ctx, PKMember target) @@ -886,19 +884,18 @@ public class MemberEdit _ => throw new InvalidOperationException($"Invalid subject/level tuple ({subject}, {level})") }; - await ctx.Reply( - $"{Emojis.Success} {target.NameFor(ctx)}'s **{subjectName}** has been set to **{level.LevelName()}**. {explanation}"); + var replyStr = $"{Emojis.Success} {target.NameFor(ctx)}'s **{subjectName}** has been set to **{level.LevelName()}**. {explanation}"; // Name privacy only works given a display name if (subject == MemberPrivacySubject.Name && level == PrivacyLevel.Private && target.DisplayName == null) - await ctx.Reply( - $"{Emojis.Warn} This member does not have a display name set, and name privacy **will not take effect**."); + replyStr += $"\n{Emojis.Warn} This member does not have a display name set, and name privacy **will not take effect**."; // Avatar privacy doesn't apply when proxying if no server avatar is set if (subject == MemberPrivacySubject.Avatar && level == PrivacyLevel.Private && guildSettings?.AvatarUrl == null) - await ctx.Reply( - $"{Emojis.Warn} This member does not have a server avatar set, so *proxying* will **still show the member avatar**. If you want to hide your avatar when proxying here, set a server avatar: `{ctx.DefaultPrefix}member {target.Reference(ctx)} serveravatar`"); + replyStr += $"\n{Emojis.Warn} This member does not have a server avatar set, so *proxying* will **still show the member avatar**. If you want to hide your avatar when proxying here, set a server avatar: `{ctx.DefaultPrefix}member {target.Reference(ctx)} serveravatar`"; + + await ctx.Reply(replyStr); } if (ctx.Match("all") || newValueFromCommand != null) diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index f6b29879..e7e4d6b4 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -386,22 +386,24 @@ public class SystemEdit await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { Tag = newTag }); - await ctx.Reply( - $"{Emojis.Success} System server tag changed (using {newTag.Length}/{Limits.MaxSystemTagLength} characters). Member names will now have the tag {newTag.AsCode()} when proxied in the current server '{ctx.Guild.Name}'.\n\nTo check or change where your tag appears in your name use the command `{ctx.DefaultPrefix}cfg name format`."); + var replyStr = $"{Emojis.Success} System server tag changed (using {newTag.Length}/{Limits.MaxSystemTagLength} characters). Member names will now have the tag {newTag.AsCode()} when proxied in the current server '{ctx.Guild.Name}'.\n\nTo check or change where your tag appears in your name use the command `{ctx.DefaultPrefix}cfg name format`."; if (!settings.TagEnabled) - await ctx.Reply(setDisabledWarning); + replyStr += "\n" + setDisabledWarning; + + await ctx.Reply(replyStr); } async Task Clear() { await ctx.Repository.UpdateSystemGuild(target.Id, ctx.Guild.Id, new SystemGuildPatch { Tag = null }); - await ctx.Reply( - $"{Emojis.Success} System server tag cleared. Member names will now use the global system tag, if there is one set.\n\nTo check or change where your tag appears in your name use the command `{ctx.DefaultPrefix}cfg name format`."); + var replyStr = $"{Emojis.Success} System server tag cleared. Member names will now use the global system tag, if there is one set.\n\nTo check or change where your tag appears in your name use the command `{ctx.DefaultPrefix}cfg name format`."; if (!settings.TagEnabled) - await ctx.Reply(setDisabledWarning); + replyStr += "\n" + setDisabledWarning; + + await ctx.Reply(replyStr); } async Task EnableDisable(bool newValue)