summaryrefslogtreecommitdiff
path: root/src/commands/moderation
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/moderation')
-rw-r--r--src/commands/moderation/clear.rs39
-rw-r--r--src/commands/moderation/clear_messages.rs30
-rw-r--r--src/commands/moderation/mod.rs11
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;