diff --git a/PluralKit.Bot/CommandMeta/CommandTree.cs b/PluralKit.Bot/CommandMeta/CommandTree.cs index f16e4360..036df4bb 100644 --- a/PluralKit.Bot/CommandMeta/CommandTree.cs +++ b/PluralKit.Bot/CommandMeta/CommandTree.cs @@ -173,6 +173,8 @@ public partial class CommandTree Commands.GroupRandomMember(var param, var flags) => ctx.Execute(GroupMemberRandom, m => m.GroupMember(ctx, param.target, flags.all, flags.show_embed)), Commands.SystemLink => ctx.Execute(Link, m => m.LinkSystem(ctx)), Commands.SystemUnlink(var param, _) => ctx.Execute(Unlink, m => m.UnlinkAccount(ctx, param.target)), + Commands.MembersList => ctx.Execute(SystemList, m => m.MemberList(ctx, ctx.System)), + Commands.SystemMembersList(var param, _) => ctx.Execute(SystemList, m => m.MemberList(ctx, param.target)), _ => // this should only ever occur when deving if commands are not implemented... ctx.Reply( @@ -410,10 +412,8 @@ public partial class CommandTree private async Task HandleSystemCommandTargeted(Context ctx, PKSystem target) { - if (ctx.Match("list", "l", "members", "ls")) - await ctx.CheckSystem(target).Execute(SystemList, m => m.MemberList(ctx, target)); - else if (ctx.Match("find", "search", "query", "fd", "s")) - await ctx.CheckSystem(target).Execute(SystemFind, m => m.MemberList(ctx, target)); + if (ctx.Match("find", "search", "query", "fd", "s")) + await ctx.CheckSystem(target).Execute(SystemFind, m => m.MemberList(ctx, target)); // TODO: this lmao (ParseListOptions) else if (ctx.Match("groups", "gs")) await ctx.CheckSystem(target).Execute(GroupList, g => g.ListSystemGroups(ctx, target)); else if (ctx.Match("id")) diff --git a/crates/command_definitions/src/member.rs b/crates/command_definitions/src/member.rs index 7c070773..14ad283b 100644 --- a/crates/command_definitions/src/member.rs +++ b/crates/command_definitions/src/member.rs @@ -1,8 +1,18 @@ +use command_parser::token::TokensIterator; + use super::*; +pub fn member() -> (&'static str, [&'static str; 1]) { + ("member", ["m"]) +} + +pub fn targetted() -> TokensIterator { + tokens!(member(), MemberRef) +} + pub fn cmds() -> impl Iterator { - let member = ("member", ["m"]); - let member_target = tokens!(member, MemberRef); + let member = member(); + let member_target = targetted(); let name = ("name", ["n"]); let description = ("description", ["desc"]); @@ -288,7 +298,10 @@ pub fn cmds() -> impl Iterator { [command!(member_target, "soulscream" => "member_soulscream").show_in_suggestions(false)] .into_iter(); + let member_list = [command!(member, "list" => "members_list")].into_iter(); + member_new_cmd + .chain(member_list) .chain(member_info_cmd) .chain(member_name_cmd) .chain(member_description_cmd) diff --git a/crates/command_definitions/src/system.rs b/crates/command_definitions/src/system.rs index 7de89f84..fcb3c20f 100644 --- a/crates/command_definitions/src/system.rs +++ b/crates/command_definitions/src/system.rs @@ -251,6 +251,9 @@ pub fn edit() -> impl Iterator { ] .into_iter(); + let system_list = + [command!(system_target, ("members", ["list"]) => "system_members_list")].into_iter(); + system_new_cmd .chain(system_name_self_cmd) .chain(system_server_name_self_cmd) @@ -278,4 +281,5 @@ pub fn edit() -> impl Iterator { .chain(system_info_cmd) .chain(system_front_cmd) .chain(system_link) + .chain(system_list) }