lab_resource_manager/interface/slack/
bot.rs1use super::commands::SlackCommandHandler;
2use slack_morphism::prelude::*;
3use std::sync::Arc;
4
5pub struct SlackBot {
11 command_handler: Arc<SlackCommandHandler>,
12 client: Arc<SlackHyperClient>,
13}
14
15impl SlackBot {
16 pub async fn new(
22 command_handler: Arc<SlackCommandHandler>,
23 ) -> Result<Self, Box<dyn std::error::Error + Send + Sync>> {
24 let client = Arc::new(SlackClient::new(SlackClientHyperConnector::new()?));
25
26 Ok(Self {
27 command_handler,
28 client,
29 })
30 }
31
32 pub async fn handle_command(
34 &self,
35 event: SlackCommandEvent,
36 ) -> Result<SlackCommandEventResponse, Box<dyn std::error::Error + Send + Sync>> {
37 self.command_handler.route_slash_command(event).await
38 }
39
40 pub fn client(&self) -> Arc<SlackHyperClient> {
42 self.client.clone()
43 }
44}