summary refs log tree commit diff
path: root/src/system/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'src/system/plugin')
-rw-r--r--src/system/plugin/autoproxy.rs51
-rw-r--r--src/system/plugin/prefixes.rs19
2 files changed, 38 insertions, 32 deletions
diff --git a/src/system/plugin/autoproxy.rs b/src/system/plugin/autoproxy.rs
index 67d93a0..0bbebf5 100644
--- a/src/system/plugin/autoproxy.rs
+++ b/src/system/plugin/autoproxy.rs
@@ -3,7 +3,7 @@ use std::sync::Arc;
 use tokio::sync::Mutex;
 use twilight_model::{channel::{Channel, Message}, id::{marker::ChannelMarker, Id}, util::Timestamp};
 use crate::system::types::{System, Member, Response};
-use super::{CommandOutcome, SeancePlugin};
+use super::SeancePlugin;
 use tokio::time::sleep;
 use std::time::Duration;
 use super::Logger;
@@ -29,30 +29,31 @@ impl Autoproxy {
 }
 
 #[async_trait]
-impl SeancePlugin for Autoproxy {
-    async fn handle_command(&self, logger: &Logger, system: &System, message: &Message) -> CommandOutcome {
-        if message.content.starts_with(format!("{}auto ", system.command_prefix).as_str()) {
-            let args = message.content.replace(format!("{}auto ", system.command_prefix).as_str(), "");
-            let mut remainder = args.split_whitespace();
-            let first_word = remainder.next();
-
-            match first_word {
-                Some("off") => *self.current_state.lock().await = InnerState::Off,
-                Some("latch") => *self.current_state.lock().await = InnerState::LatchInactive,
-                Some("member") => {
-                    return CommandOutcome::Errored { message: "Member mode not supported yet".to_string() }
-                },
-                Some(other) => return CommandOutcome::Errored { message: format!("Unknown autoproxy mode: {other}") },
-                None => return CommandOutcome::Errored { message: "Must specify autoproxy mode".to_string() },
-            }
+impl<'system> SeancePlugin<'system> for Autoproxy {
+    fn get_commands(&self) -> Vec<&'static str> {
+        vec!["auto"]
+    }
 
-            CommandOutcome::Handled
-        } else {
-            CommandOutcome::Skipped
-        }
+    async fn handle_command<'message>(&self, logger: &'system Logger, system: &'system System, message: &'message Message, args: Vec<&'message str>) {
+        let mut args = args.iter().map(|r| *r);
+        let first_word = args.next();
+
+        match first_word {
+            Some("off") => *self.current_state.lock().await = InnerState::Off,
+            Some("latch") => *self.current_state.lock().await = InnerState::LatchInactive,
+            Some("member") => {
+                logger.log_err(None, "Member mode not supported yet".to_string()).await;
+            },
+            Some(other) => {
+                logger.log_err(None, format!("Unknown autoproxy mode: {other}")).await;
+            },
+            None => {
+                logger.log_err(None, "Must specify autoproxy mode".to_string()).await;
+            }
+        };
     }
 
-    async fn handle_message(&self, logger: &Logger, system: &System, message: &Message, response: &mut Response) {
+    async fn handle_message<'message>(&self, logger: &'system Logger, system: &'system System, message: &'message Message, response: &'message mut Response) {
         let starting_state = {self.current_state.lock().await.clone()};
         if message.content.starts_with("\\") {
             logger.log_line(None, "Skipping proxy".to_string()).await;
@@ -97,10 +98,9 @@ impl SeancePlugin for Autoproxy {
         }
     }
 
-    async fn post_response(&self, logger: &Logger, system: &System, message: &Message, channel: Id<ChannelMarker>, response: &Response) {
+    async fn post_response<'message>(&self, logger: &'system Logger, system: &'system System, message: &'message Message, channel: Id<ChannelMarker>, response: &'message Response) {
         match response {
-            Response::Noop { delete_source } => return,
-            Response::Proxy { member, content } => {
+            Response::Proxy { member, content: _ } => {
                 let current_state = {self.current_state.lock().await.clone()};
                 match current_state {
                     InnerState::Off => return,
@@ -156,6 +156,7 @@ impl SeancePlugin for Autoproxy {
                     },
                 }
             },
+            _ => return,
         }
 
     }
diff --git a/src/system/plugin/prefixes.rs b/src/system/plugin/prefixes.rs
index 609dafd..42d8631 100644
--- a/src/system/plugin/prefixes.rs
+++ b/src/system/plugin/prefixes.rs
@@ -1,18 +1,23 @@
 use async_trait::async_trait;
 use twilight_model::id::{marker::ChannelMarker, Id};
-use crate::system::{log::Logger, types::Response};
+use twilight_model::channel::Message;
+use crate::system::{log::Logger, types::{Response, System}};
 
-use super::{CommandOutcome, SeancePlugin};
+use super::SeancePlugin;
 
 pub struct ProxyPrefixes;
 
 #[async_trait]
-impl SeancePlugin for ProxyPrefixes {
-    async fn handle_command(&self, _logger: &Logger, _system: &crate::system::types::System, _message: &twilight_model::channel::Message) -> CommandOutcome {
-        CommandOutcome::Skipped
+impl<'system> SeancePlugin<'system> for ProxyPrefixes {
+    fn get_commands(&self) -> Vec<&'static str> {
+        vec![]
     }
 
-    async fn handle_message(&self, logger: &Logger, system: &crate::system::types::System, message: &twilight_model::channel::Message, response: &mut crate::system::types::Response) {
+    async fn handle_command<'message>(&self, _logger: &'system Logger, _system: &'system System, _message: &'message Message, args: Vec<&'message str>) {
+        unreachable!("Prefix plugin has no commands")
+    }
+
+    async fn handle_message<'message>(&self, logger: &'system Logger, system: &'system System, message: &'message Message, response: &'message mut Response) {
         if let Response::Noop { delete_source: _ } = response {
             for member in &system.members {
                 match member.message_pattern.captures(message.content.as_str()) {
@@ -30,7 +35,7 @@ impl SeancePlugin for ProxyPrefixes {
         }
     }
 
-    async fn post_response(&self, _logger: &Logger, _system: &crate::system::types::System, _message: &twilight_model::channel::Message, _channel: Id<ChannelMarker>, _response: &crate::system::types::Response) {
+    async fn post_response<'message>(&self, _logger: &'system Logger, _system: &'system System, _message: &'message Message, _channel: Id<ChannelMarker>, _response: &'message Response) {
         return
     }
 }