mod.rs (5896B)
1 //! ChatOps - Developer-focused slash commands for BHCLI 2 //! 3 //! This module provides a flexible and extensible slash command system 4 //! to support advanced developer-focused features. 5 6 pub mod command_router; 7 pub mod commands; 8 pub mod registry; 9 pub mod result; 10 11 pub use command_router::ChatOpsRouter; 12 pub use registry::CommandRegistry; 13 pub use result::{ChatOpError, ChatOpResult}; 14 15 use crate::ai_service::AIService; 16 use std::sync::Arc; 17 use tokio::runtime::Runtime; 18 19 /// Context provided to commands during execution 20 #[derive(Clone)] 21 pub struct CommandContext { 22 pub username: String, 23 #[allow(dead_code)] 24 pub room: Option<String>, 25 pub role: UserRole, 26 } 27 28 /// User role for permission checking 29 #[derive(Clone, Debug, PartialEq)] 30 pub enum UserRole { 31 Guest, 32 Member, 33 Staff, 34 Admin, 35 } 36 37 /// Main ChatOps handler trait 38 pub trait ChatCommand: Send + Sync { 39 fn name(&self) -> &'static str; 40 fn description(&self) -> &'static str; 41 fn usage(&self) -> &'static str; 42 fn execute( 43 &self, 44 args: Vec<String>, 45 context: &CommandContext, 46 ) -> Result<ChatOpResult, ChatOpError>; 47 fn aliases(&self) -> Vec<&'static str> { 48 vec![] 49 } 50 fn required_role(&self) -> UserRole { 51 UserRole::Guest 52 } 53 } 54 55 /// Initialize the ChatOps system with default commands 56 pub fn init_chatops() -> CommandRegistry { 57 let mut registry = CommandRegistry::new(); 58 59 // Account Management 60 registry.register(Box::new(commands::account::AccountCommand)); 61 registry.register(Box::new(commands::account::StatusCommand)); 62 registry.register(Box::new(commands::account::TestDelegateCommand)); 63 64 // Documentation & Lookup 65 registry.register(Box::new(commands::doc::ManCommand)); 66 registry.register(Box::new(commands::doc::DocCommand)); 67 registry.register(Box::new(commands::doc::ExplainCommand)); 68 registry.register(Box::new(commands::doc::CheatCommand)); 69 registry.register(Box::new(commands::doc::StackOverflowCommand)); 70 registry.register(Box::new(commands::doc::RefCommand)); 71 72 // Tooling & Utilities 73 registry.register(Box::new(commands::tools::HashCommand)); 74 registry.register(Box::new(commands::tools::UuidCommand)); 75 registry.register(Box::new(commands::tools::Base64Command)); 76 registry.register(Box::new(commands::tools::RegexCommand)); 77 registry.register(Box::new(commands::tools::WhoisCommand)); 78 registry.register(Box::new(commands::tools::DigCommand)); 79 registry.register(Box::new(commands::tools::IpInfoCommand)); 80 registry.register(Box::new(commands::tools::RandCommand)); 81 registry.register(Box::new(commands::tools::TimeCommand)); 82 83 // Chat Linking & Session Intelligence 84 registry.register(Box::new(commands::chat::ChatLinkCommand)); 85 registry.register(Box::new(commands::chat::QuoteCommand)); 86 registry.register(Box::new(commands::chat::RoomsCommand)); 87 registry.register(Box::new(commands::chat::WhereIsCommand)); 88 89 // Note: AI commands require dependencies and should be registered via init_chatops_with_ai() 90 91 // GitHub and Git Integration 92 registry.register(Box::new(commands::github::GitHubCommand)); 93 registry.register(Box::new(commands::github::GistCommand)); 94 registry.register(Box::new(commands::github::CratesCommand)); 95 registry.register(Box::new(commands::github::NpmCommand)); 96 registry.register(Box::new(commands::github::PipCommand)); 97 98 // Network & Protocol Diagnostics 99 registry.register(Box::new(commands::network::PingCommand)); 100 registry.register(Box::new(commands::network::TraceCommand)); 101 registry.register(Box::new(commands::network::PortScanCommand)); 102 registry.register(Box::new(commands::network::HeadersCommand)); 103 registry.register(Box::new(commands::network::CurlCommand)); 104 registry.register(Box::new(commands::network::SslCommand)); 105 registry.register(Box::new(commands::network::TorCheckCommand)); 106 107 // Fun & Misc 108 registry.register(Box::new(commands::misc::AsciiCommand)); 109 registry.register(Box::new(commands::misc::FortuneCommand)); 110 registry.register(Box::new(commands::misc::MotdCommand)); 111 registry.register(Box::new(commands::misc::AfkCommand)); 112 registry.register(Box::new(commands::misc::AliasCommand)); 113 114 // Note Management 115 registry.register(Box::new(commands::notes::ViewNotesCommand)); 116 registry.register(Box::new(commands::notes::EditNotesCommand)); 117 118 registry 119 } 120 121 /// Initialize the ChatOps system with AI service integration 122 pub fn init_chatops_with_ai(ai_service: Arc<AIService>, runtime: Arc<Runtime>) -> CommandRegistry { 123 let mut registry = init_chatops(); // Start with base commands 124 125 // Add AI-enhanced commands 126 registry.register(Box::new(commands::ai::SummarizeCommand::new( 127 Arc::clone(&ai_service), 128 Arc::clone(&runtime), 129 ))); 130 registry.register(Box::new(commands::ai::TranslateCommand::new( 131 Arc::clone(&ai_service), 132 Arc::clone(&runtime), 133 ))); 134 registry.register(Box::new(commands::ai::DetectCommand::new( 135 Arc::clone(&ai_service), 136 Arc::clone(&runtime), 137 ))); 138 registry.register(Box::new(commands::ai::SentimentCommand::new( 139 Arc::clone(&ai_service), 140 Arc::clone(&runtime), 141 ))); 142 registry.register(Box::new(commands::ai::AtmosphereCommand::new(Arc::clone( 143 &ai_service, 144 )))); 145 registry.register(Box::new(commands::ai::ModCheckCommand::new( 146 Arc::clone(&ai_service), 147 Arc::clone(&runtime), 148 ))); 149 registry.register(Box::new(commands::ai::AIStatusCommand::new(Arc::clone( 150 &ai_service, 151 )))); 152 registry.register(Box::new(commands::ai::FixCommand::new( 153 Arc::clone(&ai_service), 154 Arc::clone(&runtime), 155 ))); 156 registry.register(Box::new(commands::ai::ReviewCommand::new( 157 Arc::clone(&ai_service), 158 Arc::clone(&runtime), 159 ))); 160 161 registry 162 }