Add basic moderator commands

This commit is contained in:
2025-08-23 00:02:10 -03:00
parent 8868b18be3
commit eaa38f3474
27 changed files with 752 additions and 249 deletions
+15 -13
View File
@@ -1,9 +1,18 @@
use async_trait::async_trait;
use crate::{
constants::DEFAULT_PREFIX, database::models::Server, discord::sanitizing::SanitizeDiscordMarkdown, extras::Extras, framework::commands::{
arguments::{Arg, Argument, GreedyString, ParseArguments}, context::CommandContext, permissions::Permission, Command, CommandError
}, groups::servers::permissions::{GuildOnlyPermission, ServerModeratorPermission}, state::State
constants::DEFAULT_PREFIX,
database::models::Server,
discord::sanitizing::SanitizeDiscordMarkdown,
extras::Extras,
framework::commands::{
Command, CommandError,
arguments::{Arg, Argument, GreedyString, ParseArguments},
context::CommandContext,
permissions::Permission,
},
groups::servers::permissions::{GuildOnlyPermission, ServerModeratorPermission},
state::State,
};
#[derive(Debug)]
@@ -55,18 +64,14 @@ impl Command<State, Extras> for PrefixCommand {
&ctx.rt.http,
)
.await
.inspect_err(|e| log::error!("Failed to get or create server: {e}"))
.map_err(|_| CommandError::DatabaseFailed)?;
.inspect_err(|e| log::error!("Failed to get or create server: {e}"))?;
if prefix.is_empty() {
prefix = DEFAULT_PREFIX;
}
server.prefix = prefix.to_string();
server
.upsert(&ctx.rt.state.db)
.await
.map_err(|_| CommandError::DatabaseFailed)?;
server.upsert(&ctx.rt.state.db).await?;
ctx.send()
.content(format!(
@@ -74,10 +79,7 @@ impl Command<State, Extras> for PrefixCommand {
prefix.sanitize(false)
))
.await
.map_err(|e| {
log::error!("Failed to send prefix update message: {e}");
CommandError::MessageSendingFailed
})?;
.inspect_err(|e| log::error!("Failed to send prefix update message: {e}"))?;
Ok(())
}
+2 -4
View File
@@ -49,11 +49,9 @@ impl Permission<State, Extras> for ServerModeratorPermission {
.rt
.http
.guild_member(guild_id, ctx.event.author.id)
.await
.map_err(CommandError::DiscordAPIFailed)?
.await?
.model()
.await
.map_err(CommandError::DiscordDeserializationFailed)?;
.await?;
let Some(everyone_role) = ctx.rt.cache.role(guild_id.cast()) else {
log::warn!("Could not get @everyone role for guild ID {guild_id}!");