mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-13 09:10:14 +00:00
feat: implement system name etc. commands
This commit is contained in:
parent
87f6fe9d75
commit
ac52b5c257
10 changed files with 155 additions and 103 deletions
|
|
@ -26,6 +26,8 @@ pub fn all() -> impl Iterator<Item = Command> {
|
|||
.chain(member::cmds())
|
||||
.chain(config::cmds())
|
||||
.chain(fun::cmds())
|
||||
.map(|cmd| cmd.flag(("plaintext", ["pt"])))
|
||||
.map(|cmd| cmd.flag(("raw", ["r"])))
|
||||
}
|
||||
|
||||
pub const RESET: (&str, [&str; 2]) = ("reset", ["clear", "default"]);
|
||||
|
|
|
|||
|
|
@ -2,15 +2,51 @@ use super::*;
|
|||
|
||||
pub fn cmds() -> impl Iterator<Item = Command> {
|
||||
let system = ("system", ["s"]);
|
||||
let new = ("new", ["n"]);
|
||||
let system_target = tokens!(system, SystemRef);
|
||||
|
||||
let system_new = tokens!(system, new);
|
||||
let system_info_cmd = [
|
||||
command!(system => "system_info_self").help("Shows information about your system"),
|
||||
command!(system_target, ("info", ["show", "view"]) => "system_info")
|
||||
.help("Shows information about your system"),
|
||||
]
|
||||
.into_iter()
|
||||
.map(|cmd| {
|
||||
cmd.flag(("public", ["pub"]))
|
||||
.flag(("private", ["priv"]))
|
||||
.flag(("all", ["a"]))
|
||||
});
|
||||
|
||||
[
|
||||
command!(system => "system_show").help("Shows information about your system"),
|
||||
let system_name = tokens!(system_target, "name");
|
||||
let system_name_cmd = [
|
||||
command!(system_name => "system_show_name").help("Shows the systems name"),
|
||||
command!(system_name, ("clear", ["c"]) => "system_clear_name")
|
||||
.help("Clears the system's name"),
|
||||
command!(system_name, ("name", OpaqueString) => "system_rename")
|
||||
.help("Renames a given system"),
|
||||
]
|
||||
.into_iter();
|
||||
|
||||
let system_server_name = tokens!(system_target, ("servername", ["sn", "guildname"]));
|
||||
let system_server_name_cmd = [
|
||||
command!(system_server_name => "system_show_server_name")
|
||||
.help("Shows the system's server name"),
|
||||
command!(system_server_name, ("clear", ["c"]) => "system_clear_server_name")
|
||||
.help("Clears the system's server name"),
|
||||
command!(system_server_name, ("name", OpaqueString) => "system_rename_server_name")
|
||||
.help("Renames the system's server name"),
|
||||
]
|
||||
.into_iter();
|
||||
|
||||
let system_new = tokens!(system, ("new", ["n"]));
|
||||
let system_new_cmd = [
|
||||
command!(system_new => "system_new").help("Creates a new system"),
|
||||
command!(system_new, ("name", OpaqueString) => "system_new_name")
|
||||
.help("Creates a new system (using the provided name)"),
|
||||
]
|
||||
.into_iter()
|
||||
.into_iter();
|
||||
|
||||
system_info_cmd
|
||||
.chain(system_name_cmd)
|
||||
.chain(system_server_name_cmd)
|
||||
.chain(system_new_cmd)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,18 +106,18 @@ impl From<(&str, ParameterKind)> for Flag {
|
|||
}
|
||||
}
|
||||
|
||||
impl<const L: usize> From<[&str; L]> for Flag {
|
||||
fn from(value: [&str; L]) -> Self {
|
||||
let mut flag = Flag::new(value[0]);
|
||||
for alias in &value[1..] {
|
||||
flag = flag.alias(*alias);
|
||||
impl<const L: usize> From<(&str, [&str; L])> for Flag {
|
||||
fn from((name, aliases): (&str, [&str; L])) -> Self {
|
||||
let mut flag = Flag::new(name);
|
||||
for alias in aliases {
|
||||
flag = flag.alias(alias);
|
||||
}
|
||||
flag
|
||||
}
|
||||
}
|
||||
|
||||
impl<const L: usize> From<([&str; L], ParameterKind)> for Flag {
|
||||
fn from((names, value): ([&str; L], ParameterKind)) -> Self {
|
||||
Flag::from(names).value(value)
|
||||
impl<const L: usize> From<((&str, [&str; L]), ParameterKind)> for Flag {
|
||||
fn from(((name, aliases), value): ((&str, [&str; L]), ParameterKind)) -> Self {
|
||||
Flag::from((name, aliases)).value(value)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
use std::{env, fmt::Write, fs, path::PathBuf, str::FromStr};
|
||||
|
||||
use command_parser::{
|
||||
parameter::{Parameter, ParameterKind},
|
||||
token::Token,
|
||||
command, parameter::{Parameter, ParameterKind}, token::Token
|
||||
};
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
|
|
@ -34,7 +33,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
for param in &command_params {
|
||||
writeln!(
|
||||
&mut command_params_init,
|
||||
r#"{name} = await ctx.ParamResolve{extract_fn_name}("{name}") ?? throw new PKError("this is a bug"),"#,
|
||||
r#"@{name} = await ctx.ParamResolve{extract_fn_name}("{name}") ?? throw new PKError("this is a bug"),"#,
|
||||
name = param.name(),
|
||||
extract_fn_name = get_param_param_ty(param.kind()),
|
||||
)?;
|
||||
|
|
@ -44,14 +43,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
if let Some(kind) = flag.get_value() {
|
||||
writeln!(
|
||||
&mut command_flags_init,
|
||||
r#"{name} = await ctx.FlagResolve{extract_fn_name}("{name}"),"#,
|
||||
r#"@{name} = await ctx.FlagResolve{extract_fn_name}("{name}"),"#,
|
||||
name = flag.get_name(),
|
||||
extract_fn_name = get_param_param_ty(kind),
|
||||
)?;
|
||||
} else {
|
||||
writeln!(
|
||||
&mut command_flags_init,
|
||||
r#"{name} = ctx.Parameters.HasFlag("{name}"),"#,
|
||||
r#"@{name} = ctx.Parameters.HasFlag("{name}"),"#,
|
||||
name = flag.get_name(),
|
||||
)?;
|
||||
}
|
||||
|
|
@ -92,7 +91,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
for param in &command_params {
|
||||
writeln!(
|
||||
&mut command_params_fields,
|
||||
r#"public required {ty} {name};"#,
|
||||
r#"public required {ty} @{name};"#,
|
||||
name = param.name(),
|
||||
ty = get_param_ty(param.kind()),
|
||||
)?;
|
||||
|
|
@ -102,18 +101,32 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
if let Some(kind) = flag.get_value() {
|
||||
writeln!(
|
||||
&mut command_flags_fields,
|
||||
r#"public {ty}? {name};"#,
|
||||
r#"public {ty}? @{name};"#,
|
||||
name = flag.get_name(),
|
||||
ty = get_param_ty(kind),
|
||||
)?;
|
||||
} else {
|
||||
writeln!(
|
||||
&mut command_flags_fields,
|
||||
r#"public required bool {name};"#,
|
||||
r#"public required bool @{name};"#,
|
||||
name = flag.get_name(),
|
||||
)?;
|
||||
}
|
||||
}
|
||||
let mut command_reply_format = String::new();
|
||||
if command.flags.iter().any(|flag| flag.get_name() == "plaintext") {
|
||||
writeln!(
|
||||
&mut command_reply_format,
|
||||
r#"if (plaintext) return ReplyFormat.Plaintext;"#,
|
||||
)?;
|
||||
}
|
||||
if command.flags.iter().any(|flag| flag.get_name() == "raw") {
|
||||
writeln!(
|
||||
&mut command_reply_format,
|
||||
r#"if (raw) return ReplyFormat.Raw;"#,
|
||||
)?;
|
||||
}
|
||||
command_reply_format.push_str("return ReplyFormat.Standard;\n");
|
||||
write!(
|
||||
&mut glue,
|
||||
r#"
|
||||
|
|
@ -124,6 +137,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
public class {command_name}Flags
|
||||
{{
|
||||
{command_flags_fields}
|
||||
|
||||
public ReplyFormat GetReplyFormat()
|
||||
{{
|
||||
{command_reply_format}
|
||||
}}
|
||||
}}
|
||||
"#,
|
||||
command_name = command_callback_to_name(&command.cb),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue