From eb77798c35595c628e05e39b45555a9ab1ea7aad Mon Sep 17 00:00:00 2001 From: Aadi Desai <21363892+supleed2@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:36:45 +0100 Subject: [PATCH] Add whois commands TODO: commands are currently exact, add fuzzy finding --- src/cmds.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 5 +++-- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/cmds.rs b/src/cmds.rs index b852781..cc609a8 100644 --- a/src/cmds.rs +++ b/src/cmds.rs @@ -549,3 +549,68 @@ pub(crate) async fn delete_all_manual(ctx: ACtx<'_>) -> Result<(), Error> { Ok(()) } } + +/// Unreachable, used to create whois command folder +#[poise::command( + slash_command, + subcommands("whois_by_id", "whois_by_nickname", "whois_by_realname") +)] +pub(crate) async fn whois(_ctx: ACtx<'_>) -> Result<(), Error> { + unreachable!() +} + +/// (Public) Get member info by Discord ID +#[poise::command(slash_command, rename = "id")] +pub(crate) async fn whois_by_id(ctx: ACtx<'_>, id: serenity::User) -> Result<(), Error> { + println!("Cmd: ({}) whois_by_id {id}", ctx.author().name); + match db::get_member_by_id(&ctx.data().db, id.id.into()).await? { + Some(m) => { + ctx.send(|c| c.content(format!("{id}: {}", m.nickname)).ephemeral(true)) + .await? + } + None => ctx.say(format!("No member entry found for {id}")).await?, + }; + Ok(()) +} + +/// (Public) Get member info by Nickname (Exact) +#[poise::command(slash_command, rename = "nick")] +pub(crate) async fn whois_by_nickname(ctx: ACtx<'_>, nickname: String) -> Result<(), Error> { + println!("Cmd: ({}) whois_by_nickname {nickname}", ctx.author().name); + // TODO: fuzzy finding + match db::get_member_by_nickname(&ctx.data().db, &nickname).await? { + Some(m) => { + ctx.send(|c| { + c.content(format!("{nickname}: <@{}>", m.discord_id)) + .ephemeral(true) + }) + .await? + } + None => { + ctx.say(format!("No member entry found for nickname {nickname}",)) + .await? + } + }; + Ok(()) +} + +/// (Public) Get member info by Real Name (Exact) +#[poise::command(slash_command, rename = "name")] +pub(crate) async fn whois_by_realname(ctx: ACtx<'_>, realname: String) -> Result<(), Error> { + println!("Cmd: ({}) whois_by_realname {realname}", ctx.author().name); + // TODO: fuzzy finding + match db::get_member_by_realname(&ctx.data().db, &realname).await? { + Some(m) => { + ctx.send(|c| { + c.content(format!("{realname}: <@{}>", m.discord_id)) + .ephemeral(true) + }) + .await? + } + None => { + ctx.say(format!("No member entry found for realname {realname}",)) + .await? + } + }; + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index cb94660..02d544f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -136,6 +136,7 @@ async fn poise( cmds::get_manual(), cmds::add_manual(), cmds::delete_all_manual(), + cmds::whois(), ], event_handler: { |c, e, f, d| Box::pin(event_handler(c, e, f, d)) }, ..Default::default() @@ -160,7 +161,7 @@ async fn poise( }); // Return NanoBot - Ok(service::NanoBot { router, discord }) + Ok(service::NanoBot { discord, router }) } async fn event_handler( @@ -199,7 +200,7 @@ async fn event_handler( id if id.starts_with("verify-") => verify::manual_4(ctx, m, data, id).await?, _ => { println!("Unknown interaction, printing:\n{m:#?}"); - verify::unknown(ctx, m).await? + verify::unknown(ctx, m).await?; } } }