Checkpoint

This commit is contained in:
2026-03-07 19:27:40 -03:00
parent d0b5f86740
commit 21678239b5
50 changed files with 599 additions and 506 deletions
+26 -15
View File
@@ -1,20 +1,14 @@
use std::{
ops::{Deref, DerefMut},
time::Duration,
};
use std::ops::{Deref, DerefMut};
use std::time::Duration;
use scylla::client::session::Session;
use crate::{
database::models::{Message, User},
extras::Extras,
framework::commands::{
arguments::{ArgumentParsingError, FromArguments, NeedyString},
context::CommandContext,
},
state::State,
utils::split_at_nth_from_end,
};
use crate::database::models::{Message, User};
use crate::extras::Extras;
use crate::framework::commands::arguments::{ArgumentParsingError, FromArguments, NeedyString};
use crate::framework::commands::context::CommandContext;
use crate::state::State;
use crate::utils::split_at_nth_from_end;
/// Fetch a user by their ID from the database.
///
@@ -110,7 +104,24 @@ impl FromArguments<State, Extras> for UserArgument {
.parse()
.map_err(|_| ArgumentParsingError::InvalidArgument)?;
user = get_user_by_id(user_id, &ctx.rt.state.db).await?;
match get_user_by_id(user_id, &ctx.rt.state.db).await {
Ok(result) => user = result,
Err(error) => {
if matches!(error, ArgumentParsingError::InvalidArgument) {
let message =
Message::get_by_propagation_message_id(user_id, &ctx.rt.state.db)
.await?;
if let Some(message) = message {
user = get_user_by_id(message.author_id, &ctx.rt.state.db).await?;
} else {
return Err(ArgumentParsingError::InvalidArgument);
}
} else {
return Err(error);
}
}
}
} else {
// The argument is (probably) a username.
+13 -19
View File
@@ -1,26 +1,20 @@
use async_trait::async_trait;
use time::UtcDateTime;
use crate::{
database::models::{UserIncident, UserIncidentType},
extras::Extras,
framework::{
commands::{
Command, CommandError,
arguments::{Arg, Argument, ArgumentParsingError, NeedyGreedyString, ParseArguments},
context::CommandContext,
permissions::Permission,
},
runtime::Runtime,
},
groups::moderation::{
arguments::{DurationArgument, UserArgument},
get_incident_page,
permissions::{BotModeratorPermission, BotOwnerPermission},
},
state::State,
utils::get_random_u64,
use crate::database::models::{UserIncident, UserIncidentType};
use crate::extras::Extras;
use crate::framework::commands::arguments::{
Arg, Argument, ArgumentParsingError, NeedyGreedyString, ParseArguments,
};
use crate::framework::commands::context::CommandContext;
use crate::framework::commands::permissions::Permission;
use crate::framework::commands::{Command, CommandError};
use crate::framework::runtime::Runtime;
use crate::groups::moderation::arguments::{DurationArgument, UserArgument};
use crate::groups::moderation::get_incident_page;
use crate::groups::moderation::permissions::{BotModeratorPermission, BotOwnerPermission};
use crate::state::State;
use crate::utils::get_random_u64;
#[derive(Debug)]
pub struct ModeratorCommand;
+8 -8
View File
@@ -1,14 +1,14 @@
use async_trait::async_trait;
use twilight_model::channel::message::component::ButtonStyle;
use crate::{
database::models::UserIncident,
extras::Extras,
framework::interactions::{InteractionError, components::Button, context::InteractionContext},
groups::moderation::get_incident_page,
state::State,
utils::get_random_u64,
};
use crate::database::models::UserIncident;
use crate::extras::Extras;
use crate::framework::interactions::InteractionError;
use crate::framework::interactions::components::Button;
use crate::framework::interactions::context::InteractionContext;
use crate::groups::moderation::get_incident_page;
use crate::state::State;
use crate::utils::get_random_u64;
#[derive(Debug)]
pub struct ArrowIncidentButton {
+3 -5
View File
@@ -4,11 +4,9 @@ use twilight_util::builder::embed::{
EmbedAuthorBuilder, EmbedBuilder, EmbedFieldBuilder, ImageSource,
};
use crate::{
constants::{COLOR_RED, COLOR_YELLOW},
database::models::{UserIncident, UserIncidentType},
utils::ellipse,
};
use crate::constants::{COLOR_RED, COLOR_YELLOW};
use crate::database::models::{UserIncident, UserIncidentType};
use crate::utils::ellipse;
fn format_timestamp(timestamp: UtcDateTime) -> String {
format!(
+7 -11
View File
@@ -1,17 +1,13 @@
use scylla::client::session::Session;
use crate::{
database::models::{DatabaseError, UserIncident, UserIncidentType},
extras::Extras,
framework::messages::MessageBuilder,
groups::moderation::{
components::{
ArrowIncidentButton, CounterButton, DeleteIncidentButton, ExpireIncidentButton,
},
embeds::incident_embed,
},
state::State,
use crate::database::models::{DatabaseError, UserIncident, UserIncidentType};
use crate::extras::Extras;
use crate::framework::messages::MessageBuilder;
use crate::groups::moderation::components::{
ArrowIncidentButton, CounterButton, DeleteIncidentButton, ExpireIncidentButton,
};
use crate::groups::moderation::embeds::incident_embed;
use crate::state::State;
pub mod arguments;
pub mod commands;
+5 -5
View File
@@ -1,10 +1,10 @@
use async_trait::async_trait;
use crate::{
extras::Extras,
framework::commands::{CommandError, context::CommandContext, permissions::Permission},
state::State,
};
use crate::extras::Extras;
use crate::framework::commands::CommandError;
use crate::framework::commands::context::CommandContext;
use crate::framework::commands::permissions::Permission;
use crate::state::State;
#[derive(Debug)]
pub struct BotOwnerPermission;