feat: unset a channel as a logger #12
@ -39,7 +39,9 @@ WHERE guild_id = ?1
|
|||||||
.fetch_all(&self.pool)
|
.fetch_all(&self.pool)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
error!("Error getting logging channels for guild {guild_id}: {e:?}");
|
error!(
|
||||||
|
"Error getting logging channels for guild {guild_id}: {e:?}"
|
||||||
|
);
|
||||||
e
|
e
|
||||||
})?;
|
})?;
|
||||||
Ok(channels.iter().map(|id| id.channel_id as u64).collect())
|
Ok(channels.iter().map(|id| id.channel_id as u64).collect())
|
||||||
@ -70,4 +72,27 @@ VALUES ( ?1, ?2 )
|
|||||||
})
|
})
|
||||||
.map(|_| ())
|
.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;
|
use super::utils::serenity;
|
||||||
|
|
||||||
|
type Result = ::std::result::Result<(), Error>;
|
||||||
|
|
||||||
#[allow(clippy::unused_async)]
|
#[allow(clippy::unused_async)]
|
||||||
#[poise::command(
|
#[poise::command(
|
||||||
slash_command,
|
slash_command,
|
||||||
subcommands("add_channel", "list_channels"),
|
subcommands("add_channel", "list_channels", "remove_channel"),
|
||||||
required_permissions = "ADMINISTRATOR"
|
required_permissions = "ADMINISTRATOR"
|
||||||
)]
|
)]
|
||||||
pub async fn logging(_ctx: Context<'_>) -> Result<(), Error> {
|
pub async fn logging(_ctx: Context<'_>) -> Result {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[poise::command(slash_command, aliases("add-channel"))]
|
#[poise::command(slash_command)]
|
||||||
pub async fn add_channel(
|
pub async fn add_channel(
|
||||||
ctx: Context<'_>,
|
ctx: Context<'_>,
|
||||||
#[description = "New logging channel"] channel: serenity::Channel,
|
#[description = "New logging channel"] channel: serenity::Channel,
|
||||||
) -> Result<(), Error> {
|
) -> Result {
|
||||||
let channel_id = channel.id();
|
let channel_id = channel.id();
|
||||||
let response = match ctx.guild_id() {
|
let response = match ctx.guild_id() {
|
||||||
None => "Error: Could not determine the guild's ID".to_owned(),
|
None => "Error: Could not determine the guild's ID".to_owned(),
|
||||||
@ -50,12 +52,13 @@ pub async fn add_channel(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[poise::command(slash_command, aliases("list-channels"))]
|
#[poise::command(slash_command)]
|
||||||
pub async fn list_channels(ctx: Context<'_>) -> Result<(), Error> {
|
pub async fn list_channels(ctx: Context<'_>) -> Result {
|
||||||
let response = match ctx.guild_id() {
|
let response = match ctx.guild_id() {
|
||||||
None => "Error: Could not determine the guild's ID".to_owned(),
|
None => "Error: Could not determine the guild's ID".to_owned(),
|
||||||
Some(guild_id) => {
|
Some(guild_id) => {
|
||||||
match ctx.data().database.get_logging_channel(guild_id).await {
|
match ctx.data().database.get_logging_channel(guild_id).await {
|
||||||
|
Err(e) => format!("Could not retrieve loggers: {e:?}"),
|
||||||
Ok(channels) => {
|
Ok(channels) => {
|
||||||
if channels.is_empty() {
|
if channels.is_empty() {
|
||||||
"No channels registered as loggers".to_owned()
|
"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…
Reference in New Issue
Block a user