1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
use async_trait::async_trait;
use twilight_model::id::{marker::ChannelMarker, Id};
use twilight_model::channel::Message;
use crate::system::{log::Logger, types::{Response, System}};
use super::SeancePlugin;
pub struct ProxyPrefixes;
#[async_trait]
impl<'system> SeancePlugin<'system> for ProxyPrefixes {
fn get_commands(&self) -> Vec<&'static str> {
vec![]
}
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()) {
None => continue,
Some(captures) => match captures.name("content") {
None => continue,
Some(matched_content) => {
logger.log_line(Some(member.discord_token.clone()), "Matched prefix".to_string()).await;
*response = Response::Proxy { member: member.clone(), content: matched_content.as_str().to_string() };
return
},
}
}
}
}
}
async fn post_response<'message>(&self, _logger: &'system Logger, _system: &'system System, _message: &'message Message, _channel: Id<ChannelMarker>, _response: &'message Response) {
return
}
}
|