Initial commit
This commit is contained in:
108
src/controller/dispatching.rs
Normal file
108
src/controller/dispatching.rs
Normal file
@@ -0,0 +1,108 @@
|
||||
use mxlink::MessageResponseType;
|
||||
|
||||
use crate::{entity::MessageContext, strings, Bot};
|
||||
|
||||
use super::ControllerType;
|
||||
|
||||
pub async fn dispatch_controller(
|
||||
controller_type: &ControllerType,
|
||||
message_context: &MessageContext,
|
||||
bot: &Bot,
|
||||
) {
|
||||
let result = match controller_type {
|
||||
ControllerType::Access(controller_type) => {
|
||||
super::access::dispatch_controller(controller_type, message_context, bot).await
|
||||
}
|
||||
ControllerType::Agent(controller_type) => {
|
||||
super::agent::dispatch_controller(controller_type, message_context, bot).await
|
||||
}
|
||||
ControllerType::Config(controller_type) => {
|
||||
super::cfg::dispatch_controller(controller_type, message_context, bot).await
|
||||
}
|
||||
ControllerType::Help => super::help::handle(bot, message_context).await,
|
||||
ControllerType::Unknown => {
|
||||
bot.messaging()
|
||||
.send_error_markdown_no_fail(
|
||||
message_context.room(),
|
||||
&strings::error::unknown_command_see_help(bot.command_prefix()),
|
||||
MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()),
|
||||
)
|
||||
.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
ControllerType::ProviderHelp => super::provider::handle_help(message_context, bot).await,
|
||||
ControllerType::UsageHelp => super::usage::handle_help(message_context, bot).await,
|
||||
ControllerType::ChatCompletion(controller_type) => {
|
||||
super::chat_completion::handle(
|
||||
bot,
|
||||
bot.matrix_link().clone(),
|
||||
message_context,
|
||||
controller_type,
|
||||
)
|
||||
.await
|
||||
}
|
||||
ControllerType::Error(message) => {
|
||||
bot.messaging()
|
||||
.send_error_markdown_no_fail(
|
||||
message_context.room(),
|
||||
message,
|
||||
MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()),
|
||||
)
|
||||
.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
ControllerType::ErrorInThread(message, thread_info) => {
|
||||
bot.messaging()
|
||||
.send_error_markdown_no_fail(
|
||||
message_context.room(),
|
||||
message,
|
||||
MessageResponseType::InThread(thread_info.clone()),
|
||||
)
|
||||
.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
ControllerType::Ignore => {
|
||||
tracing::trace!("Ignoring text message");
|
||||
Ok(())
|
||||
}
|
||||
ControllerType::ImageGeneration(prompt) => {
|
||||
super::image::generation::handle_image(
|
||||
bot,
|
||||
bot.matrix_link().clone(),
|
||||
message_context,
|
||||
prompt,
|
||||
)
|
||||
.await
|
||||
}
|
||||
ControllerType::StickerGeneration(prompt) => {
|
||||
super::image::generation::handle_sticker(
|
||||
bot,
|
||||
bot.matrix_link().clone(),
|
||||
message_context,
|
||||
prompt,
|
||||
)
|
||||
.await
|
||||
}
|
||||
};
|
||||
|
||||
if let Err(e) = result {
|
||||
tracing::error!(
|
||||
"Error handling message {} from sender {} in room {}: {:?}",
|
||||
message_context.event_id(),
|
||||
message_context.sender_id(),
|
||||
message_context.room_id(),
|
||||
e,
|
||||
);
|
||||
|
||||
bot.messaging()
|
||||
.send_error_markdown_no_fail(
|
||||
message_context.room(),
|
||||
strings::error::error_while_processing_message(),
|
||||
MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user