Add support for extras, conditionally displaying commands in the help command, and start working on moderation commands

This commit is contained in:
2025-08-22 18:06:52 -03:00
parent 55ae1c8937
commit 8868b18be3
41 changed files with 1075 additions and 368 deletions
+26 -17
View File
@@ -11,21 +11,18 @@ use twilight_util::builder::embed::{EmbedAuthorBuilder, EmbedBuilder, ImageSourc
use crate::{
constants::COLOR_WHITE,
database::models::{
Call, Channel, Message, User, UserIncident, get_or_create_user_and_set_last_seen,
},
database::models::{Call, Channel, Message, User, UserIncident},
discord::sanitizing::SanitizeDiscordMarkdown,
extras::Extras,
framework::{
events::traits::{
commands::extras::ExtrasGetter, events::traits::{
EventResult, OnMessageDeleteHandler, OnMessageEditHandler, OnMessageHandler,
},
interactions::components::ActionRow,
runtime::Runtime,
}, interactions::components::ActionRow, runtime::Runtime
},
groups::calls::{
components::{CodeOfConductButton, NeedHelpButton},
embeds, get_display_profile,
moderation::{Action, Rule, escape_message},
moderation::{escape_message, Action, Rule},
},
state::State,
utils::{ellipse, i64_to_u64},
@@ -35,7 +32,7 @@ async fn penalize_user(
user: User,
message: Message,
broken_rules: Vec<Arc<dyn Rule>>,
rt: &Runtime<State>,
rt: &Runtime<State, Extras>,
) -> Result<(), Box<dyn Error>> {
let reason = format!(
"You broke the following rules during a call:\n{}",
@@ -88,8 +85,13 @@ async fn penalize_user(
pub struct CallMessageHandler;
#[async_trait]
impl OnMessageHandler<State> for CallMessageHandler {
async fn on_message(&self, event: &MessageCreate, rt: Arc<Runtime<State>>) -> EventResult {
impl OnMessageHandler<State, Extras> for CallMessageHandler {
async fn on_message(
&self,
event: &MessageCreate,
rt: Arc<Runtime<State, Extras>>,
extras: Arc<dyn ExtrasGetter<State, Extras = Extras>>,
) -> EventResult {
if event.author.bot || event.author.system.unwrap_or(false) {
return Ok(());
}
@@ -144,7 +146,8 @@ impl OnMessageHandler<State> for CallMessageHandler {
return Ok(());
};
let user = get_or_create_user_and_set_last_seen(event.author.clone(), &rt.state.db).await?;
let user =
User::get_or_create_and_set_last_seen(event.author.clone(), &rt.state.db).await?;
let user_incidents = UserIncident::get_for_user(event.author.id.get(), &rt.state.db)
.await?
@@ -314,8 +317,12 @@ impl OnMessageHandler<State> for CallMessageHandler {
pub struct CallMessageEditHandler;
#[async_trait]
impl OnMessageEditHandler<State> for CallMessageEditHandler {
async fn on_message_edit(&self, event: &MessageUpdate, rt: Arc<Runtime<State>>) -> EventResult {
impl OnMessageEditHandler<State, Extras> for CallMessageEditHandler {
async fn on_message_edit(
&self,
event: &MessageUpdate,
rt: Arc<Runtime<State, Extras>>,
) -> EventResult {
log::trace!(
"Edited message was '{}' sent by {} (bot? {:?})",
event.content,
@@ -368,7 +375,9 @@ impl OnMessageEditHandler<State> for CallMessageEditHandler {
.reply(event.id)
.await?;
let user = get_or_create_user_and_set_last_seen(event.author.clone(), &rt.state.db).await?;
let user =
User::get_or_create_and_set_last_seen(event.author.clone(), &rt.state.db)
.await?;
penalize_user(user, message, rules, &rt).await?;
@@ -404,11 +413,11 @@ impl OnMessageEditHandler<State> for CallMessageEditHandler {
pub struct CallMessageDeleteHandler;
#[async_trait]
impl OnMessageDeleteHandler<State> for CallMessageDeleteHandler {
impl OnMessageDeleteHandler<State, Extras> for CallMessageDeleteHandler {
async fn on_message_delete(
&self,
event: &MessageDelete,
rt: Arc<Runtime<State>>,
rt: Arc<Runtime<State, Extras>>,
) -> EventResult {
let Some(channel) = Channel::get_by_id(event.channel_id.get(), &rt.state.db).await? else {
return Ok(());