Files
baibot-withmcp/src/controller/cfg/dispatching/mod.rs
Slavi Pantaleev a82e9a1d1f Add prek pre-commit hooks via mise, fix formatting and clippy warnings
- Add mise.toml (prek 0.3.2) and .pre-commit-config.yaml with hooks for
  trailing whitespace, end-of-file, YAML check, merge conflicts, large files,
  cargo fmt, cargo clippy (-D warnings), and unit tests
- Add prek/mise recipes to justfile
- Run cargo fmt to fix formatting issues
- Fix all clippy warnings: collapse nested if statements, derive Default for Avatar
2026-02-10 14:33:19 +02:00

125 lines
4.1 KiB
Rust

use crate::strings;
use crate::{Bot, entity::MessageContext};
use mxlink::MessageResponseType;
use super::controller_type::{
ConfigControllerType, ConfigSettingRelatedControllerType, SettingsStorageSource,
};
mod speech_to_text;
mod text_generation;
mod text_to_speech;
pub async fn dispatch_controller(
handler: &ConfigControllerType,
message_context: &MessageContext,
bot: &Bot,
) -> anyhow::Result<()> {
// Anyone can access Help and Status.
// Settings-related access checks are done in dispatch_config_related_handler().
match handler {
ConfigControllerType::Help => super::help::handle(bot, message_context).await,
ConfigControllerType::Status => super::status::handle(bot, message_context).await,
ConfigControllerType::SettingsRelated(config_type, config_related_handler) => {
dispatch_config_related_handler(
config_type,
config_related_handler,
message_context,
bot,
)
.await
}
}
}
async fn dispatch_config_related_handler(
config_type: &SettingsStorageSource,
handler: &ConfigSettingRelatedControllerType,
message_context: &MessageContext,
bot: &Bot,
) -> anyhow::Result<()> {
if let SettingsStorageSource::Global = config_type
&& !message_context.sender_can_manage_global_config()
{
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),
strings::global_config::no_permissions_to_administrate(),
MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()),
)
.await;
return Ok(());
}
let room_settings = match config_type {
SettingsStorageSource::Room => &message_context.room_config().settings,
SettingsStorageSource::Global => &message_context.global_config().fallback_room_settings,
};
match handler {
ConfigSettingRelatedControllerType::GetHandler(purpose) => match config_type {
SettingsStorageSource::Room => {
super::room_config::handler::handle_get(bot, message_context, *purpose).await
}
SettingsStorageSource::Global => {
super::global_config::handler::handle_get(bot, message_context, *purpose).await
}
},
ConfigSettingRelatedControllerType::SetHandler(purpose, agent_identifier) => {
match config_type {
SettingsStorageSource::Room => {
super::room_config::handler::handle_set(
bot,
bot.room_config_manager(),
message_context,
*purpose,
agent_identifier,
)
.await
}
SettingsStorageSource::Global => {
super::global_config::handler::handle_set(
bot,
bot.global_config_manager(),
message_context,
*purpose,
agent_identifier,
)
.await
}
}
}
ConfigSettingRelatedControllerType::TextGeneration(controller_type) => {
text_generation::dispatch(
controller_type,
message_context,
bot,
room_settings,
config_type,
)
.await
}
ConfigSettingRelatedControllerType::SpeechToText(controller_type) => {
speech_to_text::dispatch(
controller_type,
message_context,
bot,
room_settings,
config_type,
)
.await
}
ConfigSettingRelatedControllerType::TextToSpeech(controller_type) => {
text_to_speech::dispatch(
controller_type,
message_context,
bot,
room_settings,
config_type,
)
.await
}
}
}