From 8c57bd6eb74a09d4bd89fd9fd6103759e01c854d Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Sun, 26 Feb 2017 18:05:45 -0600 Subject: [PATCH] initial working implementation of autolink module --- Cargo.toml | 2 +- src/lib.rs | 2 +- src/modules/autolink.rs | 50 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/modules/autolink.rs diff --git a/Cargo.toml b/Cargo.toml index 1343dcc..9f13e27 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,4 +16,4 @@ time = "0.1" regex = "0.2" pvn = { git = "http://gitlab.monarch-pass.net/malacoda/pvn.git" } echobox = { git = "http://gitlab.monarch-pass.net/malacoda/echobox.git" } -#stc = { git = "http://gitlab.monarch-pass.net/malacoda/stc.git" } +stc = { git = "http://gitlab.monarch-pass.net/malacoda/stc.git" } diff --git a/src/lib.rs b/src/lib.rs index 8c6640a..d03b45d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,7 @@ extern crate rand; extern crate pvn; extern crate echobox; extern crate transformable_channels; -//extern crate stc; +extern crate stc; extern crate regex; #[macro_use] diff --git a/src/modules/autolink.rs b/src/modules/autolink.rs new file mode 100644 index 0000000..d5dc884 --- /dev/null +++ b/src/modules/autolink.rs @@ -0,0 +1,50 @@ +use modules::Module; +use toml::Table; + +use std::sync::Arc; +use std::sync::mpsc::Receiver; +use transformable_channels::mpsc::ExtSender; + +use event::{Event, Envelope}; + +use stc::searchers::{Searcher, AggregateSearcher}; +use stc::searchers::yugioh::{YugiohCard, YugiohSearcher}; +use stc::searchers::mtg::{MtgCard, MtgSearcher}; + +use regex::Regex; + +pub struct AutolinkModule {} + +impl AutolinkModule { + pub fn new (_: &Table, _: &Table) -> Box { + Box::new(AutolinkModule {}) + } +} + +impl Module for AutolinkModule { + fn run (&self, _: Box>, receiver: Receiver>) { + let link_regex = Regex::new(r"\[\[([^\[\]]*)\]\]").expect("Invalid regex..."); + let mut searchers = AggregateSearcher::new(); + searchers.add_searcher("mtg", Box::new(MtgSearcher::new())); + searchers.add_searcher("ygo", Box::new(YugiohSearcher::new())); + + loop { + match receiver.recv() { + Ok(envelope) => { + match envelope.event { + Event::Message { ref message } => { + debug!("Received message from module {:?}... {:?}", envelope.from, message.content); + for cap in link_regex.captures_iter(&message.content) { + if let Some(item) = searchers.exact_search(&cap[1]) { + message.reply(&format!("**Autolink:** {} -> {}", item.label(), item.url())); + } + } + } + _ => () + } + } + Err(error) => { error!("Error {:?}", error) } + } + } + } +}