release 1.0 #15
@ -39,7 +39,9 @@ WHERE guild_id = ?1
 | 
			
		||||
        .fetch_all(&self.pool)
 | 
			
		||||
        .await
 | 
			
		||||
        .map_err(|e| {
 | 
			
		||||
            error!("Error getting logging channels for guild {guild_id}: {e:?}");
 | 
			
		||||
            error!(
 | 
			
		||||
                "Error getting logging channels for guild {guild_id}: {e:?}"
 | 
			
		||||
            );
 | 
			
		||||
            e
 | 
			
		||||
        })?;
 | 
			
		||||
        Ok(channels.iter().map(|id| id.channel_id as u64).collect())
 | 
			
		||||
@ -70,4 +72,27 @@ VALUES ( ?1, ?2 )
 | 
			
		||||
        })
 | 
			
		||||
        .map(|_| ())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn remove_logging_channel(
 | 
			
		||||
        &self,
 | 
			
		||||
        guild_id: GuildId,
 | 
			
		||||
        channel_id: ChannelId,
 | 
			
		||||
    ) -> Result<()> {
 | 
			
		||||
        let guild_id = guild_id.0 as i64;
 | 
			
		||||
        let channel_id = channel_id.0 as i64;
 | 
			
		||||
        let mut conn = self.pool.acquire().await?;
 | 
			
		||||
        sqlx::query!(r#"
 | 
			
		||||
DELETE FROM guild_log_channels
 | 
			
		||||
WHERE guild_id = ?1 AND channel_id = ?2
 | 
			
		||||
                     "#,
 | 
			
		||||
                     guild_id,
 | 
			
		||||
                     channel_id)
 | 
			
		||||
            .execute(&mut *conn)
 | 
			
		||||
            .await
 | 
			
		||||
            .map_err(|e| {
 | 
			
		||||
                error!("Error removing channel {channel_id} as a logger for guild {guild_id}: {e:?}");
 | 
			
		||||
                e
 | 
			
		||||
            })
 | 
			
		||||
            .map(|_| ())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,21 +2,23 @@ use super::{Context, Error};
 | 
			
		||||
 | 
			
		||||
use super::utils::serenity;
 | 
			
		||||
 | 
			
		||||
type Result = ::std::result::Result<(), Error>;
 | 
			
		||||
 | 
			
		||||
#[allow(clippy::unused_async)]
 | 
			
		||||
#[poise::command(
 | 
			
		||||
    slash_command,
 | 
			
		||||
    subcommands("add_channel", "list_channels"),
 | 
			
		||||
    subcommands("add_channel", "list_channels", "remove_channel"),
 | 
			
		||||
    required_permissions = "ADMINISTRATOR"
 | 
			
		||||
)]
 | 
			
		||||
pub async fn logging(_ctx: Context<'_>) -> Result<(), Error> {
 | 
			
		||||
pub async fn logging(_ctx: Context<'_>) -> Result {
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[poise::command(slash_command, aliases("add-channel"))]
 | 
			
		||||
#[poise::command(slash_command)]
 | 
			
		||||
pub async fn add_channel(
 | 
			
		||||
    ctx: Context<'_>,
 | 
			
		||||
    #[description = "New logging channel"] channel: serenity::Channel,
 | 
			
		||||
) -> Result<(), Error> {
 | 
			
		||||
) -> Result {
 | 
			
		||||
    let channel_id = channel.id();
 | 
			
		||||
    let response = match ctx.guild_id() {
 | 
			
		||||
        None => "Error: Could not determine the guild's ID".to_owned(),
 | 
			
		||||
@ -50,12 +52,13 @@ pub async fn add_channel(
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[poise::command(slash_command, aliases("list-channels"))]
 | 
			
		||||
pub async fn list_channels(ctx: Context<'_>) -> Result<(), Error> {
 | 
			
		||||
#[poise::command(slash_command)]
 | 
			
		||||
pub async fn list_channels(ctx: Context<'_>) -> Result {
 | 
			
		||||
    let response = match ctx.guild_id() {
 | 
			
		||||
        None => "Error: Could not determine the guild's ID".to_owned(),
 | 
			
		||||
        Some(guild_id) => {
 | 
			
		||||
            match ctx.data().database.get_logging_channel(guild_id).await {
 | 
			
		||||
                Err(e) => format!("Could not retrieve loggers: {e:?}"),
 | 
			
		||||
                Ok(channels) => {
 | 
			
		||||
                    if channels.is_empty() {
 | 
			
		||||
                        "No channels registered as loggers".to_owned()
 | 
			
		||||
@ -70,7 +73,34 @@ pub async fn list_channels(ctx: Context<'_>) -> Result<(), Error> {
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                Err(e) => format!("Could not retrieve loggers: {e:?}"),
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    ctx.say(response).await?;
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[poise::command(slash_command)]
 | 
			
		||||
pub async fn remove_channel(
 | 
			
		||||
    ctx: Context<'_>,
 | 
			
		||||
    #[description = "Logger channel to remove"] channel: serenity::Channel,
 | 
			
		||||
) -> Result {
 | 
			
		||||
    let channel_id = channel.id();
 | 
			
		||||
    let response = match ctx.guild_id() {
 | 
			
		||||
        None => "Error: Could not determine the guild's ID".to_owned(),
 | 
			
		||||
        Some(guild_id) => {
 | 
			
		||||
            match ctx
 | 
			
		||||
                .data()
 | 
			
		||||
                .database
 | 
			
		||||
                .remove_logging_channel(guild_id, channel_id)
 | 
			
		||||
                .await
 | 
			
		||||
            {
 | 
			
		||||
                Ok(()) => {
 | 
			
		||||
                    format!("Removed channel <#{channel_id}> as a logger")
 | 
			
		||||
                }
 | 
			
		||||
                Err(e) => {
 | 
			
		||||
                    format!("Could not remove channel as a logger: {e:?}")
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user