summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..37ae19c
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,65 @@
+#![feature(proc_macro)]
+extern crate irc;
+#[macro_use]
+extern crate lazy_static;
+
+#[macro_use]
+mod plugin;
+mod plugins;
+
+use std::thread::spawn;
+use std::sync::{Arc, Mutex};
+use irc::client::prelude::*;
+
+use plugin::Plugin;
+
+pub fn run() {
+ let server = IrcServer::new("config.toml").unwrap();
+ server.identify().unwrap();
+
+ let plugins: Vec<Arc<Mutex<Plugin>>> =
+ vec![Arc::new(Mutex::new(plugins::emoji::Emoji::new()))];
+
+ server
+ .for_each_incoming(|message| {
+ let message = Arc::new(message);
+
+ for plugin in plugins.clone().into_iter() {
+ let server = server.clone();
+ let message = message.clone();
+
+ spawn(move || {
+ let mut plugin = match plugin.lock() {
+ Ok(plugin) => plugin,
+ Err(poisoned) => poisoned.into_inner(),
+ };
+
+ if plugin.is_allowed(&server, &message) {
+ plugin.execute(&server, &message).unwrap();
+ }
+ });
+ }
+ })
+ .unwrap();
+}
+
+#[cfg(test)]
+mod tests {
+ use irc::client::prelude::*;
+
+ pub fn make_server(cmd: &str) -> IrcServer {
+ let config = Config {
+ nickname: Some(format!("test")),
+ server: Some(format!("irc.test.net")),
+ channels: Some(vec![format!("#test")]),
+ use_mock_connection: Some(true),
+ ..Default::default()
+ };
+
+ IrcServer::from_config(config).unwrap()
+ }
+
+ pub fn get_server_value(server: &IrcServer) -> String {
+ unimplemented!();
+ }
+}