diff --git a/src/commands/self_roles/admin.rs b/src/commands/self_roles/admin.rs index 2e41b53..46f96dc 100644 --- a/src/commands/self_roles/admin.rs +++ b/src/commands/self_roles/admin.rs @@ -58,6 +58,24 @@ pub async fn remove(ctx: Context<'_>, user: User) -> Result<(), Error> { Ok(()) } +/// Remove a selfrole from the database without deleting it or attempting to take it from the user +#[poise::command(slash_command, prefix_command, required_permissions = "MANAGE_ROLES")] +pub async fn forget(ctx: Context<'_>, user: User) -> Result<(), Error> { + let guild = ctx.guild_id().ok_or(BigBirbError::GuildOnly)?; + let mut tx = ctx.data().database.begin().await?; + + if let Some(role) = super::get_user_role(user.id, guild, &mut *tx).await? { + super::remove_role(role, guild, &mut *tx).await?; + common::no_ping_reply(&ctx, format!("{user}'s selfrole has been forgotten.")).await?; + } else { + common::no_ping_reply(&ctx, format!("{user} has no selfrole set.")).await?; + } + + tx.commit().await?; + + Ok(()) +} + /// Give a user an existing role as their self role #[poise::command(slash_command, prefix_command, required_permissions = "MANAGE_ROLES")] pub async fn give(ctx: Context<'_>, user: User, role: Role, force: Option) -> Result<(), Error> { diff --git a/src/commands/self_roles/mod.rs b/src/commands/self_roles/mod.rs index a9c5436..8a3c6ac 100644 --- a/src/commands/self_roles/mod.rs +++ b/src/commands/self_roles/mod.rs @@ -31,6 +31,7 @@ pub async fn role(_ctx: Context<'_>) -> Result<(), Error> { "admin::name", "admin::color", "admin::remove", + "admin::forget", "admin::set", "admin::give", "whois::whois",