Finish refactoring

This commit is contained in:
2025-08-10 21:15:53 -03:00
parent f123282699
commit a004fe2308
50 changed files with 2639 additions and 587 deletions
+23 -25
View File
@@ -1,36 +1,30 @@
use std::sync::Arc;
use twilight_http::Client;
use twilight_model::{
gateway::payload::incoming::InteractionCreate,
http::interaction::{InteractionResponse, InteractionResponseType},
id::{Id, marker::InteractionMarker},
oauth::Application,
};
use crate::framework::{
commands::messages::OriginalMessageUpdater, handlers::Handlers, interactions::{registry::Registry, InteractionError}
commands::messages::OriginalMessageUpdater, interactions::InteractionError, runtime::Runtime,
};
pub struct InteractionContext {
pub struct InteractionContext<T> {
pub event: InteractionCreate,
pub handlers: Arc<Handlers>,
pub rt: Arc<Runtime<T>>,
pub prefix: String,
}
impl InteractionContext {
pub fn new(
event: InteractionCreate,
handlers: Arc<Handlers>,
) -> Self {
Self {
event,
handlers
}
impl<T> InteractionContext<T> {
pub fn new(event: InteractionCreate, rt: Arc<Runtime<T>>, prefix: String) -> Self {
Self { event, rt, prefix }
}
pub async fn defer(&self) -> Result<(), InteractionError> {
self.handlers.http
.interaction(self.handlers.app.id)
self.rt
.http
.interaction(self.rt.app.id)
.create_response(
self.event.id,
&self.event.token,
@@ -46,8 +40,9 @@ impl InteractionContext {
}
pub async fn think(&self) -> Result<(), InteractionError> {
self.handlers.http
.interaction(self.handlers.app.id)
self.rt
.http
.interaction(self.rt.app.id)
.create_response(
self.event.id,
&self.event.token,
@@ -62,27 +57,30 @@ impl InteractionContext {
Ok(())
}
pub fn original_message(&self) -> Option<OriginalMessage> {
pub fn original_message(&self) -> Option<OriginalMessage<T>> {
self.event.message.as_ref().map(|_| OriginalMessage {
interaction_id: self.event.id,
interaction_token: self.event.token.clone(),
handlers: self.handlers.clone()
rt: self.rt.clone(),
})
}
}
pub struct OriginalMessage {
pub struct OriginalMessage<T> {
interaction_id: Id<InteractionMarker>,
interaction_token: String,
handlers: Arc<Handlers>
rt: Arc<Runtime<T>>,
}
impl OriginalMessage {
pub fn edit(&self) -> OriginalMessageUpdater {
impl<T> OriginalMessage<T>
where
T: Send + Sync + 'static,
{
pub fn edit(&self) -> OriginalMessageUpdater<T> {
OriginalMessageUpdater::new(
self.interaction_id,
self.interaction_token.clone(),
self.handlers.clone(),
self.rt.clone(),
)
}
}