diff options
Diffstat (limited to 'src/commands/moderation')
| -rw-r--r-- | src/commands/moderation/clear.rs | 39 | ||||
| -rw-r--r-- | src/commands/moderation/clear_messages.rs | 30 | ||||
| -rw-r--r-- | src/commands/moderation/mod.rs | 11 |
3 files changed, 31 insertions, 49 deletions
diff --git a/src/commands/moderation/clear.rs b/src/commands/moderation/clear.rs deleted file mode 100644 index bfc9c38..0000000 --- a/src/commands/moderation/clear.rs +++ /dev/null @@ -1,39 +0,0 @@ -use crate::Context; - -use eyre::{Context as _, Result}; -use log::debug; -use poise::serenity_prelude::futures::{StreamExt, TryStreamExt}; - -#[poise::command( - slash_command, - ephemeral, - required_permissions = "MANAGE_MESSAGES", - default_member_permissions = "MANAGE_MESSAGES" -)] -pub async fn clear_messages( - ctx: Context<'_>, - #[description = "How many messages to delete"] num_messages: usize, -) -> Result<()> { - ctx.defer_ephemeral().await?; - - let channel = ctx.channel_id(); - let messages = channel - .messages_iter(ctx) - .take(num_messages) - .try_fold(Vec::new(), |mut acc, msg| async move { - acc.push(msg); - Ok(acc) - }) - .await - .wrap_err_with(|| { - format!("Couldn't collect {num_messages} messages from channel {channel}") - })?; - - debug!("Clearing {num_messages} messages from channel {channel}!"); - channel.delete_messages(ctx, messages).await?; - - ctx.reply(format!("Deleted {num_messages} message(s)")) - .await?; - - Ok(()) -} diff --git a/src/commands/moderation/clear_messages.rs b/src/commands/moderation/clear_messages.rs new file mode 100644 index 0000000..8761bcb --- /dev/null +++ b/src/commands/moderation/clear_messages.rs @@ -0,0 +1,30 @@ +use crate::{Context, Error}; + +use log::debug; +use poise::serenity_prelude::GetMessages; + +#[poise::command( + slash_command, + guild_only, + ephemeral, + required_permissions = "MANAGE_MESSAGES", + default_member_permissions = "MANAGE_MESSAGES" +)] +pub async fn clear_messages( + ctx: Context<'_>, + #[description = "How many messages to delete"] num_messages: u8, +) -> Result<(), Error> { + ctx.defer_ephemeral().await?; + + let channel = ctx.channel_id(); + let to_get = GetMessages::new().limit(num_messages); + let messages = channel.messages(ctx, to_get).await?; + + debug!("Clearing {num_messages} messages from channel {channel}!"); + channel.delete_messages(ctx, messages).await?; + + ctx.reply(format!("Deleted {num_messages} message(s)")) + .await?; + + Ok(()) +} diff --git a/src/commands/moderation/mod.rs b/src/commands/moderation/mod.rs index 5a8cd08..ed6a7c6 100644 --- a/src/commands/moderation/mod.rs +++ b/src/commands/moderation/mod.rs @@ -1,10 +1 @@ -use crate::Data; - -use eyre::Report; -use poise::Command; - -mod clear; - -pub fn to_commands() -> Vec<Command<Data, Report>> { - vec![clear::clear_messages()] -} +pub mod clear_messages; |
