diff --git a/PluralKit.Bot/CommandMeta/CommandTree.cs b/PluralKit.Bot/CommandMeta/CommandTree.cs index 600ab47b..4393b798 100644 --- a/PluralKit.Bot/CommandMeta/CommandTree.cs +++ b/PluralKit.Bot/CommandMeta/CommandTree.cs @@ -234,18 +234,14 @@ public partial class CommandTree Commands.GroupRandomMember(var param, var flags) => ctx.Execute(GroupMemberRandom, m => m.GroupMember(ctx, param.target, flags.all, flags.show_embed, flags)), Commands.SystemLink(var param, _) => ctx.Execute(Link, m => m.LinkSystem(ctx, param.account)), Commands.SystemUnlink(var param, var flags) => ctx.Execute(Unlink, m => m.UnlinkAccount(ctx, param.account, flags.yes)), - Commands.SystemMembersListSelf(var param, var flags) => ctx.Execute(SystemList, m => m.MemberList(ctx, ctx.System, null, flags)), - Commands.SystemMembersSearchSelf(var param, var flags) => ctx.Execute(SystemFind, m => m.MemberList(ctx, ctx.System, param.query, flags)), - Commands.SystemMembersList(var param, var flags) => ctx.Execute(SystemList, m => m.MemberList(ctx, param.target, null, flags)), - Commands.SystemMembersSearch(var param, var flags) => ctx.Execute(SystemFind, m => m.MemberList(ctx, param.target, param.query, flags)), + Commands.SystemMembersSelf(var param, var flags) => ctx.Execute(SystemList, m => m.MemberList(ctx, ctx.System, param.query, flags)), + Commands.SystemMembers(var param, var flags) => ctx.Execute(SystemList, m => m.MemberList(ctx, param.target, param.query, flags)), Commands.MemberListGroups(var param, var flags) => ctx.Execute(MemberGroups, m => m.ListMemberGroups(ctx, param.target, null, flags, flags.all)), Commands.MemberSearchGroups(var param, var flags) => ctx.Execute(MemberGroups, m => m.ListMemberGroups(ctx, param.target, param.query, flags, flags.all)), - Commands.GroupListMembers(var param, var flags) => ctx.Execute(GroupMemberList, m => m.ListGroupMembers(ctx, param.target, null, flags)), - Commands.GroupSearchMembers(var param, var flags) => ctx.Execute(GroupMemberList, m => m.ListGroupMembers(ctx, param.target, param.query, flags)), - Commands.SystemListGroups(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, param.target, null, flags, flags.all)), - Commands.SystemSearchGroups(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, param.target, param.query, flags, flags.all)), - Commands.GroupListGroups(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, ctx.System, null, flags, flags.all)), - Commands.GroupSearchGroups(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, ctx.System, param.query, flags, flags.all)), + Commands.GroupMembers(var param, var flags) => ctx.Execute(GroupMemberList, m => m.ListGroupMembers(ctx, param.target, param.query, flags)), + Commands.SystemGroups(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, param.target, param.query, flags, flags.all)), + Commands.SystemGroupsSelf(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, ctx.System, param.query, flags, flags.all)), + Commands.GroupsSelf(var param, var flags) => ctx.Execute(GroupList, g => g.ListSystemGroups(ctx, ctx.System, param.query, flags, flags.all)), Commands.GroupNew(var param, _) => ctx.Execute(GroupNew, g => g.CreateGroup(ctx, param.name)), Commands.GroupInfo(var param, var flags) => ctx.Execute(GroupInfo, g => g.ShowGroupCard(ctx, param.target, flags.show_embed, flags.all)), Commands.GroupShowName(var param, var flags) => ctx.Execute(GroupRename, g => g.ShowGroupDisplayName(ctx, param.target, flags.GetReplyFormat())), diff --git a/crates/command_definitions/src/group.rs b/crates/command_definitions/src/group.rs index 6512722d..8dc7f468 100644 --- a/crates/command_definitions/src/group.rs +++ b/crates/command_definitions/src/group.rs @@ -1,11 +1,13 @@ +use std::iter::once; + use command_parser::token::TokensIterator; use crate::utils::get_list_flags; use super::*; -pub fn group() -> (&'static str, [&'static str; 2]) { - ("group", ["g", "groups"]) +pub fn group() -> (&'static str, [&'static str; 1]) { + ("group", ["g"]) } pub fn targeted() -> TokensIterator { @@ -151,19 +153,11 @@ pub fn cmds() -> impl Iterator { .into_iter(); let apply_list_opts = |cmd: Command| cmd.flags(get_list_flags()); + let search_param = Optional(Remainder(("query", OpaqueString))); - let search = tokens!( - ("search", ["find", "query"]), - Remainder(("query", OpaqueString)) - ); - let group_list_members = tokens!(group_target, ("members", ["list", "ls"])); - let group_list_members_cmd = [ - command!(group_list_members => "group_list_members"), - command!(group_list_members, "list" => "group_list_members"), - command!(group_list_members, search => "group_search_members"), - ] - .into_iter() - .map(apply_list_opts); + let group_list_members_cmd = + once(command!(group_target, ("members", ["list", "ls"]), search_param => "group_members")) + .map(apply_list_opts); let group_modify_members_cmd = [ command!(group_target, "add", Optional(MemberRefs) => "group_add_member") @@ -173,12 +167,8 @@ pub fn cmds() -> impl Iterator { ] .into_iter(); - let system_groups_cmd = [ - command!(group, ("list", ["ls"]) => "group_list_groups"), - command!(group, search => "group_search_groups"), - ] - .into_iter() - .map(apply_list_opts); + let system_groups_cmd = + once(command!(group, ("list", ["ls"]), search_param => "groups_self")).map(apply_list_opts); system_groups_cmd .chain(group_new_cmd) diff --git a/crates/command_definitions/src/member.rs b/crates/command_definitions/src/member.rs index 655384ff..a8be537e 100644 --- a/crates/command_definitions/src/member.rs +++ b/crates/command_definitions/src/member.rs @@ -1,3 +1,5 @@ +use std::iter::once; + use command_parser::token::TokensIterator; use crate::utils::get_list_flags; @@ -294,15 +296,11 @@ pub fn cmds() -> impl Iterator { .chain(member_webhook_avatar_cmd) .chain(member_server_avatar_cmd); - let member_group = tokens!(member_target, group::group()); - let member_list_group_cmds = [ - command!(member_group => "member_list_groups"), - command!(member_group, "list" => "member_list_groups"), - command!(member_group, ("search", ["find", "query"]), Remainder(("query", OpaqueString)) => "member_search_groups"), - ] - .into_iter() + let member_group = tokens!(member_target, ("groups", ["group"])); + let member_list_group_cmds = once( + command!(member_group, Optional(Remainder(("query", OpaqueString))) => "member_groups"), + ) .map(|cmd| cmd.flags(get_list_flags())); - let member_add_remove_group_cmds = [ command!(member_group, "add", Optional(("groups", GroupRefs)) => "member_group_add") .help("Adds a member to one or more groups"), @@ -339,6 +337,6 @@ pub fn cmds() -> impl Iterator { .chain(member_display_id_cmd) .chain(member_delete_cmd) .chain(member_easter_eggs) - .chain(member_list_group_cmds) .chain(member_add_remove_group_cmds) + .chain(member_list_group_cmds) } diff --git a/crates/command_definitions/src/system.rs b/crates/command_definitions/src/system.rs index 7b6d77e0..4ec0f017 100644 --- a/crates/command_definitions/src/system.rs +++ b/crates/command_definitions/src/system.rs @@ -269,35 +269,24 @@ pub fn edit() -> impl Iterator { ] .into_iter(); - let list = ("list", ["ls", "l"]); - let system_list = tokens!("members", list); - let search = tokens!( - ("search", ["query", "find"]), - Remainder(("query", OpaqueString)) - ); - let add_list_flags = |cmd: Command| cmd.flags(get_list_flags()); - let system_list_cmd = [ - command!(system_target, system_list => "system_members_list"), - command!(system_target, search => "system_members_search"), - ] - .into_iter() - .map(add_list_flags); - let system_list_self_cmd = [ - command!(system_list => "system_members_list_self"), - command!(system, system_list => "system_members_list_self"), - command!(system, search => "system_members_search_self"), - ] - .into_iter() - .map(add_list_flags); + let search_param = Optional(Remainder(("query", OpaqueString))); + let apply_list_opts = |cmd: Command| cmd.flags(get_list_flags()); - let system_groups = tokens!(system_target, group::group()); - let system_groups_cmd = [ - command!(system_groups => "system_list_groups"), - command!(system_groups, list => "system_list_groups"), - command!(system_groups, search => "system_search_groups"), + let members_subcmd = tokens!(("members", ["ls", "list"]), search_param); + let system_members_cmd = + once(command!(system_target, members_subcmd => "system_members")).map(apply_list_opts); + let system_members_self_cmd = [ + command!(system, members_subcmd => "system_members_self"), + command!(members_subcmd => "system_members_self"), ] .into_iter() - .map(add_list_flags); + .map(apply_list_opts); + + let groups_subcmd = tokens!("groups", search_param); + let system_groups_cmd = + once(command!(system_target, groups_subcmd => "system_groups")).map(apply_list_opts); + let system_group_self_cmd = + once(command!(system, groups_subcmd => "system_groups_self")).map(apply_list_opts); let system_display_id_self_cmd = once(command!(system, "id" => "system_display_id_self")); let system_display_id_cmd = once(command!(system_target, "id" => "system_display_id")); @@ -315,7 +304,8 @@ pub fn edit() -> impl Iterator { .chain(system_avatar_self_cmd) .chain(system_server_avatar_self_cmd) .chain(system_banner_self_cmd) - .chain(system_list_self_cmd) + .chain(system_members_self_cmd) + .chain(system_group_self_cmd) .chain(system_display_id_self_cmd) .chain(system_front_self_cmd) .chain(system_delete) @@ -334,7 +324,7 @@ pub fn edit() -> impl Iterator { .chain(system_info_cmd) .chain(system_front_cmd) .chain(system_link) - .chain(system_list_cmd) + .chain(system_members_cmd) .chain(system_groups_cmd) .chain(system_display_id_cmd) } diff --git a/crates/command_definitions/src/utils.rs b/crates/command_definitions/src/utils.rs index 6eb40c57..1c589ef0 100644 --- a/crates/command_definitions/src/utils.rs +++ b/crates/command_definitions/src/utils.rs @@ -48,7 +48,7 @@ pub fn get_list_flags() -> [Flag; 22] { ["with-image", "with-icon", "wa", "wi", "ia", "ii", "img"], )), Flag::from(("with-pronouns", ["wp", "wprns"])), - Flag::from(("with-displayname", ["wdn"])), + Flag::from(("with-display-name", ["wdn"])), Flag::from(("with-birthday", ["wbd", "wb"])), ] }