implement random commands, dont keep the subcommands only the flags

This commit is contained in:
dusk 2025-09-26 23:56:49 +00:00
parent c00ff2f371
commit c92c3f84f0
No known key found for this signature in database
13 changed files with 82 additions and 24 deletions

View file

@ -1 +1,11 @@
use command_parser::token::TokensIterator;
use super::*;
pub fn group() -> (&'static str, [&'static str; 1]) {
("group", ["g"])
}
pub fn targeted() -> TokensIterator {
tokens!(group(), GroupRef)
}

View file

@ -27,6 +27,7 @@ pub fn all() -> impl Iterator<Item = Command> {
.chain(config::cmds())
.chain(fun::cmds())
.chain(switch::cmds())
.chain(random::cmds())
.map(|cmd| {
cmd.flag(("plaintext", ["pt"]))
.flag(("raw", ["r"]))

View file

@ -1 +1,14 @@
use super::*;
pub fn cmds() -> impl Iterator<Item = Command> {
let random = ("random", ["rand"]);
let group = group::group();
[
command!(random => "random_self").flag(group),
command!(system::targeted(), random => "system_random").flag(group),
command!(group::targeted(), random => "group_random_member"),
]
.into_iter()
.map(|cmd| cmd.flag(("all", ["a"])))
}

View file

@ -1,12 +1,22 @@
use command_parser::token::TokensIterator;
use super::*;
pub fn cmds() -> impl Iterator<Item = Command> {
edit()
}
pub fn system() -> (&'static str, [&'static str; 1]) {
("system", ["s"])
}
pub fn targeted() -> TokensIterator {
tokens!(system(), SystemRef)
}
pub fn edit() -> impl Iterator<Item = Command> {
let system = ("system", ["s"]);
let system_target = tokens!(system, SystemRef);
let system = system();
let system_target = targeted();
let system_new = tokens!(system, ("new", ["n"]));
let system_new_cmd = [

View file

@ -12,6 +12,7 @@ pub enum ParameterValue {
OpaqueString(String),
MemberRef(String),
MemberRefs(Vec<String>),
GroupRef(String),
SystemRef(String),
GuildRef(String),
MemberPrivacyTarget(String),
@ -48,6 +49,7 @@ impl Display for Parameter {
}
ParameterKind::MemberRef => write!(f, "<target member>"),
ParameterKind::MemberRefs => write!(f, "<member 1> <member 2> <member 3>..."),
ParameterKind::GroupRef => write!(f, "<target group>"),
ParameterKind::SystemRef => write!(f, "<target system>"),
ParameterKind::GuildRef => write!(f, "<target guild>"),
ParameterKind::MemberPrivacyTarget => write!(f, "<privacy target>"),
@ -83,6 +85,7 @@ pub enum ParameterKind {
OpaqueStringRemainder,
MemberRef,
MemberRefs,
GroupRef,
SystemRef,
GuildRef,
MemberPrivacyTarget,
@ -99,6 +102,7 @@ impl ParameterKind {
ParameterKind::OpaqueStringRemainder => "string",
ParameterKind::MemberRef => "target",
ParameterKind::MemberRefs => "targets",
ParameterKind::GroupRef => "target",
ParameterKind::SystemRef => "target",
ParameterKind::GuildRef => "target",
ParameterKind::MemberPrivacyTarget => "member_privacy_target",
@ -122,6 +126,7 @@ impl ParameterKind {
ParameterKind::OpaqueString | ParameterKind::OpaqueStringRemainder => {
Ok(ParameterValue::OpaqueString(input.into()))
}
ParameterKind::GroupRef => Ok(ParameterValue::GroupRef(input.into())),
ParameterKind::MemberRef => Ok(ParameterValue::MemberRef(input.into())),
ParameterKind::MemberRefs => Ok(ParameterValue::MemberRefs(
input.split(' ').map(|s| s.trim().to_string()).collect(),

View file

@ -168,6 +168,7 @@ fn get_param_ty(kind: ParameterKind) -> &'static str {
ParameterKind::OpaqueString | ParameterKind::OpaqueStringRemainder => "string",
ParameterKind::MemberRef => "PKMember",
ParameterKind::MemberRefs => "List<PKMember>",
ParameterKind::GroupRef => "PKGroup",
ParameterKind::SystemRef => "PKSystem",
ParameterKind::MemberPrivacyTarget => "MemberPrivacySubject",
ParameterKind::SystemPrivacyTarget => "SystemPrivacySubject",
@ -183,6 +184,7 @@ fn get_param_param_ty(kind: ParameterKind) -> &'static str {
ParameterKind::OpaqueString | ParameterKind::OpaqueStringRemainder => "Opaque",
ParameterKind::MemberRef => "Member",
ParameterKind::MemberRefs => "Members",
ParameterKind::GroupRef => "Group",
ParameterKind::SystemRef => "System",
ParameterKind::MemberPrivacyTarget => "MemberPrivacyTarget",
ParameterKind::SystemPrivacyTarget => "SystemPrivacyTarget",

View file

@ -10,6 +10,7 @@ interface CommandResult {
interface Parameter {
MemberRef(string member);
MemberRefs(sequence<string> members);
GroupRef(string group);
SystemRef(string system);
GuildRef(string guild);
MemberPrivacyTarget(string target);

View file

@ -24,6 +24,7 @@ pub enum CommandResult {
pub enum Parameter {
MemberRef { member: String },
MemberRefs { members: Vec<String> },
GroupRef { group: String },
SystemRef { system: String },
GuildRef { guild: String },
MemberPrivacyTarget { target: String },
@ -39,6 +40,7 @@ impl From<ParameterValue> for Parameter {
match value {
ParameterValue::MemberRef(member) => Self::MemberRef { member },
ParameterValue::MemberRefs(members) => Self::MemberRefs { members },
ParameterValue::GroupRef(group) => Self::GroupRef { group },
ParameterValue::SystemRef(system) => Self::SystemRef { system },
ParameterValue::MemberPrivacyTarget(target) => Self::MemberPrivacyTarget { target },
ParameterValue::SystemPrivacyTarget(target) => Self::SystemPrivacyTarget { target },