create more usable helper functions

This commit is contained in:
2025-02-20 21:18:00 -05:00
parent f3ac3359ec
commit 764538d928
3 changed files with 36 additions and 31 deletions

View File

@@ -1,7 +1,7 @@
use crate::common::{Context, Error};
use sqlx::{PgExecutor, Row};
use poise::serenity_prelude::{RoleId, UserId, GuildId};
use poise::serenity_prelude::{EditRole, GuildId, Permissions, RoleId, UserId};
mod register;
mod whois;
@@ -26,6 +26,35 @@ pub async fn role(_ctx: Context<'_>) -> Result<(), Error> {
Ok(())
}
/// Edit a user's personal role, creates it with some default values if it doesn't exist.
pub async fn edit_role<'a, E>(ctx: Context<'a>, user: UserId, guild: GuildId, edit: EditRole<'a>, db: E) -> Result<RoleId, Error>
where E: PgExecutor<'a> + Clone,
{
if let Some(role) = get_user_role(user, guild, db.clone()).await? {
guild.role(ctx, role).await?.edit(ctx, edit).await?;
Ok(role)
} else {
create_role(ctx, user, guild, edit, db).await
}
}
async fn create_role<'a, E>(ctx: Context<'a>, user: UserId, guild: GuildId, edit: EditRole<'a>, db: E) -> Result<RoleId, Error>
where E: PgExecutor<'a>,
{
let def = EditRole::new()
.name(user.to_user(ctx).await?.name)
.permissions(Permissions::empty());
let member = guild.member(ctx, user).await?;
let mut role = guild.create_role(ctx, def).await?;
role.edit(ctx, edit).await?;
member.add_role(ctx, &role).await?;
update_user_role(user, guild, role.id, db).await?;
Ok(role.id)
}
/// Remove a row concerning a user's self role from the database
pub async fn remove_user_role<'a, E>(user: UserId, guild: GuildId, db: E) -> Result<(), Error>
where E: PgExecutor<'a>,