From 67865263c17fa013d055e75c7a0590efb4457ac5 Mon Sep 17 00:00:00 2001 From: dusk Date: Thu, 6 Nov 2025 18:34:17 +0000 Subject: [PATCH] fix: 'pk;s f' should query fronter, not list members --- PluralKit.Bot/CommandMeta/CommandTree.cs | 3 ++ PluralKit.Bot/CommandSystem/Parameters.cs | 36 +++++++++++------------ crates/command_definitions/src/system.rs | 30 +++++++++++-------- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/PluralKit.Bot/CommandMeta/CommandTree.cs b/PluralKit.Bot/CommandMeta/CommandTree.cs index d7c32fb4..f5aad9c1 100644 --- a/PluralKit.Bot/CommandMeta/CommandTree.cs +++ b/PluralKit.Bot/CommandMeta/CommandTree.cs @@ -211,6 +211,9 @@ public partial class CommandTree Commands.SystemFronter(var param, var flags) => ctx.Execute(SystemFronter, m => m.Fronter(ctx, param.target)), Commands.SystemFronterHistory(var param, var flags) => ctx.Execute(SystemFrontHistory, m => m.FrontHistory(ctx, param.target, flags.clear)), Commands.SystemFronterPercent(var param, var flags) => ctx.Execute(SystemFrontPercent, m => m.FrontPercent(ctx, param.target, flags.duration, flags.fronters_only, flags.flat)), + Commands.SystemFronterSelf(_, var flags) => ctx.Execute(SystemFronter, m => m.Fronter(ctx, ctx.System)), + Commands.SystemFronterHistorySelf(_, var flags) => ctx.Execute(SystemFrontHistory, m => m.FrontHistory(ctx, ctx.System, flags.clear)), + Commands.SystemFronterPercentSelf(_, var flags) => ctx.Execute(SystemFrontPercent, m => m.FrontPercent(ctx, ctx.System, flags.duration, flags.fronters_only, flags.flat)), Commands.SystemDisplayId(var param, _) => ctx.Execute(SystemId, m => m.DisplayId(ctx, param.target)), Commands.SystemDisplayIdSelf => ctx.Execute(SystemId, m => m.DisplayId(ctx, ctx.System)), Commands.SystemWebhookShow => ctx.Execute(null, m => m.GetSystemWebhook(ctx)), diff --git a/PluralKit.Bot/CommandSystem/Parameters.cs b/PluralKit.Bot/CommandSystem/Parameters.cs index cbde613d..8de534fd 100644 --- a/PluralKit.Bot/CommandSystem/Parameters.cs +++ b/PluralKit.Bot/CommandSystem/Parameters.cs @@ -9,24 +9,24 @@ namespace PluralKit.Bot; // corresponds to the ffi Paramater type, but with stricter types (also avoiding exposing ffi types!) public abstract record Parameter() { - public record MemberRef(PKMember member) : Parameter; - public record MemberRefs(List members) : Parameter; - public record GroupRef(PKGroup group) : Parameter; - public record GroupRefs(List groups) : Parameter; - public record SystemRef(PKSystem system) : Parameter; - public record UserRef(User user) : Parameter; - public record MessageRef(Message.Reference message) : Parameter; - public record ChannelRef(Channel channel) : Parameter; - public record GuildRef(Guild guild) : Parameter; - public record MemberPrivacyTarget(MemberPrivacySubject target) : Parameter; - public record GroupPrivacyTarget(GroupPrivacySubject target) : Parameter; - public record SystemPrivacyTarget(SystemPrivacySubject target) : Parameter; - public record PrivacyLevel(Core.PrivacyLevel level) : Parameter; - public record Toggle(bool value) : Parameter; - public record Opaque(string value) : Parameter; - public record Number(int value) : Parameter; - public record Avatar(ParsedImage avatar) : Parameter; - public record ProxySwitchAction(SystemConfig.ProxySwitchAction action) : Parameter; + public record MemberRef(PKMember member): Parameter; + public record MemberRefs(List members): Parameter; + public record GroupRef(PKGroup group): Parameter; + public record GroupRefs(List groups): Parameter; + public record SystemRef(PKSystem system): Parameter; + public record UserRef(User user): Parameter; + public record MessageRef(Message.Reference message): Parameter; + public record ChannelRef(Channel channel): Parameter; + public record GuildRef(Guild guild): Parameter; + public record MemberPrivacyTarget(MemberPrivacySubject target): Parameter; + public record GroupPrivacyTarget(GroupPrivacySubject target): Parameter; + public record SystemPrivacyTarget(SystemPrivacySubject target): Parameter; + public record PrivacyLevel(Core.PrivacyLevel level): Parameter; + public record Toggle(bool value): Parameter; + public record Opaque(string value): Parameter; + public record Number(int value): Parameter; + public record Avatar(ParsedImage avatar): Parameter; + public record ProxySwitchAction(SystemConfig.ProxySwitchAction action): Parameter; } public class Parameters diff --git a/crates/command_definitions/src/system.rs b/crates/command_definitions/src/system.rs index 4b4847cf..2bacba40 100644 --- a/crates/command_definitions/src/system.rs +++ b/crates/command_definitions/src/system.rs @@ -249,16 +249,20 @@ pub fn edit() -> impl Iterator { .help("Changes a specific privacy setting for your system"), ].into_iter(); - let system_front = tokens!(system_target, ("front", ["fronter", "fronters", "f"])); - let system_front_cmd = [ - command!(system_front => "system_fronter"), - command!(system_front, ("history", ["h"]) => "system_fronter_history").flag(CLEAR), - command!(system_front, ("percent", ["p", "%"]) => "system_fronter_percent") - .flag(("duration", OpaqueString)) - .flag(("fronters-only", ["fo"])) - .flag("flat"), - ] - .into_iter(); + let front = ("front", ["fronter", "fronters", "f"]); + let make_system_front_cmd = |prefix: TokensIterator, suffix: &str| { + [ + command!(prefix => format!("system_fronter{}", suffix)), + command!(prefix, ("history", ["h"]) => format!("system_fronter_history{}", suffix)).flag(CLEAR), + command!(prefix, ("percent", ["p", "%"]) => format!("system_fronter_percent{}", suffix)) + .flag(("duration", OpaqueString)) + .flag(("fronters-only", ["fo"])) + .flag("flat"), + ] + .into_iter() + }; + let system_front_cmd = make_system_front_cmd(tokens!(system_target, front), ""); + let system_front_self_cmd = make_system_front_cmd(tokens!(system, front), "_self"); let system_link = [ command!("link", ("account", UserRef) => "system_link"), @@ -266,7 +270,8 @@ pub fn edit() -> impl Iterator { ] .into_iter(); - let system_list = ("members", ["list", "l", "find", "f"]); + let list = ("list", ["ls", "l"]); + let system_list = tokens!("members", list); let search = tokens!( ("search", ["query", "find"]), ("query", OpaqueStringRemainder), @@ -289,7 +294,7 @@ pub fn edit() -> impl Iterator { let system_groups = tokens!(system_target, ("groups", ["gs"])); let system_groups_cmd = [ command!(system_groups => "system_list_groups"), - command!(system_groups, ("list", ["ls"]) => "system_list_groups"), + command!(system_groups, list => "system_list_groups"), command!(system_groups, search => "system_search_groups"), ] .into_iter() @@ -315,6 +320,7 @@ pub fn edit() -> impl Iterator { .chain(system_banner_self_cmd) .chain(system_list_self_cmd) .chain(system_display_id_self_cmd) + .chain(system_front_self_cmd) .chain(system_delete) .chain(system_privacy_cmd) .chain(system_proxy_cmd)