better parameters handling, implement import export

This commit is contained in:
dusk 2025-10-03 15:50:54 +00:00
parent e4f38c76a9
commit 5198f7d83b
No known key found for this signature in database
19 changed files with 250 additions and 174 deletions

View file

@ -45,19 +45,23 @@ 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_null},"#,
name = param.name().replace("-", "_"),
extract_fn_name = get_param_param_ty(param.kind()),
throw_null = param
.is_optional()
.then_some("")
.unwrap_or(" ?? throw new PKError(\"this is a bug\")"),
)?;
}
let mut command_flags_init = String::new();
for flag in &command.flags {
if let Some(kind) = flag.get_value() {
if let Some(param) = flag.get_value() {
writeln!(
&mut command_flags_init,
r#"@{name} = await ctx.FlagResolve{extract_fn_name}("{name}"),"#,
name = flag.get_name().replace("-", "_"),
extract_fn_name = get_param_param_ty(kind),
extract_fn_name = get_param_param_ty(param.kind()),
)?;
} else {
writeln!(
@ -109,19 +113,20 @@ 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}{nullable} @{name};"#,
name = param.name().replace("-", "_"),
ty = get_param_ty(param.kind()),
nullable = param.is_optional().then_some("?").unwrap_or(""),
)?;
}
let mut command_flags_fields = String::new();
for flag in &command.flags {
if let Some(kind) = flag.get_value() {
if let Some(param) = flag.get_value() {
writeln!(
&mut command_flags_fields,
r#"public {ty}? @{name};"#,
name = flag.get_name().replace("-", "_"),
ty = get_param_ty(kind),
ty = get_param_ty(param.kind()),
)?;
} else {
writeln!(

View file

@ -23,6 +23,7 @@ interface Parameter {
OpaqueString(string raw);
Toggle(boolean toggle);
Avatar(string avatar);
Null();
};
dictionary ParsedCommand {
string command_ref;

View file

@ -69,6 +69,7 @@ pub enum Parameter {
Avatar {
avatar: String,
},
Null,
}
impl From<ParameterValue> for Parameter {
@ -93,6 +94,7 @@ impl From<ParameterValue> for Parameter {
},
ParameterValue::ChannelRef(channel_id) => Self::ChannelRef { channel_id },
ParameterValue::GuildRef(guild_id) => Self::GuildRef { guild_id },
ParameterValue::Null => Self::Null,
}
}
}