From 047bdd870de13cd1ea36ea35db131d336d2abe53 Mon Sep 17 00:00:00 2001 From: dusk Date: Fri, 4 Apr 2025 04:47:00 +0900 Subject: [PATCH] feat: implement system delete command --- PluralKit.Bot/CommandMeta/CommandTree.cs | 3 +-- PluralKit.Bot/Commands/SystemEdit.cs | 3 +-- crates/command_definitions/src/system.rs | 13 +++++++++++-- crates/commands/src/bin/write_cs_glue.rs | 12 ++++++------ 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/PluralKit.Bot/CommandMeta/CommandTree.cs b/PluralKit.Bot/CommandMeta/CommandTree.cs index 9d6a860f..38e49001 100644 --- a/PluralKit.Bot/CommandMeta/CommandTree.cs +++ b/PluralKit.Bot/CommandMeta/CommandTree.cs @@ -95,6 +95,7 @@ public partial class CommandTree Commands.SystemShowBanner(var param, var flags) => ctx.Execute(SystemBannerImage, m => m.ShowBannerImage(ctx, param.target, flags.GetReplyFormat())), Commands.SystemClearBanner(var param, var flags) => ctx.Execute(SystemBannerImage, m => m.ClearBannerImage(ctx, ctx.System, flags.yes)), Commands.SystemChangeBanner(var param, _) => ctx.Execute(SystemBannerImage, m => m.ChangeBannerImage(ctx, ctx.System, param.banner)), + Commands.SystemDelete(_, var flags) => ctx.Execute(SystemDelete, m => m.Delete(ctx, ctx.System, flags.no_export)), _ => // this should only ever occur when deving if commands are not implemented... ctx.Reply( @@ -364,8 +365,6 @@ public partial class CommandTree await ctx.CheckSystem(target).Execute(GroupList, g => g.ListSystemGroups(ctx, target)); else if (ctx.Match("privacy")) await ctx.CheckSystem(target).Execute(SystemPrivacy, m => m.SystemPrivacy(ctx, target)); - else if (ctx.Match("delete", "remove", "destroy", "erase", "yeet")) - await ctx.CheckSystem(target).Execute(SystemDelete, m => m.Delete(ctx, target)); else if (ctx.Match("id")) await ctx.CheckSystem(target).Execute(SystemId, m => m.DisplayId(ctx, target)); else if (ctx.Match("random", "rand", "r")) diff --git a/PluralKit.Bot/Commands/SystemEdit.cs b/PluralKit.Bot/Commands/SystemEdit.cs index 66a51a39..8fe73c77 100644 --- a/PluralKit.Bot/Commands/SystemEdit.cs +++ b/PluralKit.Bot/Commands/SystemEdit.cs @@ -774,10 +774,9 @@ public class SystemEdit : ctx.Reply(msg)); } - public async Task Delete(Context ctx, PKSystem target) + public async Task Delete(Context ctx, PKSystem target, bool noExport) { ctx.CheckSystem().CheckOwnSystem(target); - var noExport = ctx.MatchFlag("ne", "no-export"); var warnMsg = $"{Emojis.Warn} Are you sure you want to delete your system? If so, reply to this message with your system's ID (`{target.DisplayHid(ctx.Config)}`).\n"; if (!noExport) diff --git a/crates/command_definitions/src/system.rs b/crates/command_definitions/src/system.rs index e7befa9a..83750af8 100644 --- a/crates/command_definitions/src/system.rs +++ b/crates/command_definitions/src/system.rs @@ -159,8 +159,10 @@ pub fn edit() -> impl Iterator { .into_iter(); let system_server_avatar = tokens!(system_target, ("serveravatar", ["spfp"])); - let system_server_avatar_cmd = [command!(system_server_avatar => "system_show_server_avatar") - .help("Shows the system's server avatar")] + let system_server_avatar_cmd = [ + command!(system_server_avatar => "system_show_server_avatar") + .help("Shows the system's server avatar"), + ] .into_iter(); let system_server_avatar_self = tokens!(system, ("serveravatar", ["spfp"])); @@ -192,6 +194,12 @@ pub fn edit() -> impl Iterator { ] .into_iter(); + let system_delete = std::iter::once( + command!(system, ("delete", ["erase", "remove", "yeet"]) => "system_delete") + .flag(("no-export", ["ne"])) + .help("Deletes the system"), + ); + system_new_cmd .chain(system_name_self_cmd) .chain(system_server_name_self_cmd) @@ -203,6 +211,7 @@ pub fn edit() -> impl Iterator { .chain(system_avatar_self_cmd) .chain(system_server_avatar_self_cmd) .chain(system_banner_self_cmd) + .chain(system_delete) .chain(system_name_cmd) .chain(system_server_name_cmd) .chain(system_description_cmd) diff --git a/crates/commands/src/bin/write_cs_glue.rs b/crates/commands/src/bin/write_cs_glue.rs index 6eb1f593..cd69b3b1 100644 --- a/crates/commands/src/bin/write_cs_glue.rs +++ b/crates/commands/src/bin/write_cs_glue.rs @@ -34,7 +34,7 @@ fn main() -> Result<(), Box> { writeln!( &mut command_params_init, r#"@{name} = await ctx.ParamResolve{extract_fn_name}("{name}") ?? throw new PKError("this is a bug"),"#, - name = param.name(), + name = param.name().replace("-", "_"), extract_fn_name = get_param_param_ty(param.kind()), )?; } @@ -44,14 +44,14 @@ fn main() -> Result<(), Box> { writeln!( &mut command_flags_init, r#"@{name} = await ctx.FlagResolve{extract_fn_name}("{name}"),"#, - name = flag.get_name(), + name = flag.get_name().replace("-", "_"), extract_fn_name = get_param_param_ty(kind), )?; } else { writeln!( &mut command_flags_init, r#"@{name} = ctx.Parameters.HasFlag("{name}"),"#, - name = flag.get_name(), + name = flag.get_name().replace("-", "_"), )?; } } @@ -92,7 +92,7 @@ fn main() -> Result<(), Box> { writeln!( &mut command_params_fields, r#"public required {ty} @{name};"#, - name = param.name(), + name = param.name().replace("-", "_"), ty = get_param_ty(param.kind()), )?; } @@ -102,14 +102,14 @@ fn main() -> Result<(), Box> { writeln!( &mut command_flags_fields, r#"public {ty}? @{name};"#, - name = flag.get_name(), + name = flag.get_name().replace("-", "_"), ty = get_param_ty(kind), )?; } else { writeln!( &mut command_flags_fields, r#"public required bool @{name};"#, - name = flag.get_name(), + name = flag.get_name().replace("-", "_"), )?; } }