aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-05-15 13:58:01 +0200
committerMax Audron <audron@cocaine.farm>2021-05-15 13:58:01 +0200
commitd0bff910b0b038ee85bc285bef7a63870a3474ab (patch)
treeb840d0b932c080fa5d5053b6bf66a91f94a80481 /src/lib.rs
init
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..1e3be91
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,70 @@
+#![feature(test)]
+extern crate test;
+
+use anyhow::Result;
+
+use irc::client::prelude::*;
+
+pub mod config;
+pub mod hooks;
+
+pub use macros::catinator;
+
+#[macro_export]
+macro_rules! reply {
+ ( $msg:expr, $text:expr ) => {
+ bot.send_privmsg($msg.response_target().unwrap(), $text.as_str())?;
+ };
+}
+
+
+pub struct Bot {
+ pub config: config::Config,
+ pub irc_client: irc::client::Client,
+}
+
+impl Bot {
+ pub async fn new(config_path: &str) -> Result<Bot> {
+ use std::fs;
+
+ let config_str = fs::read_to_string(config_path)?;
+ let config: config::Config = toml::from_str(&config_str)?;
+
+ let irc_config: Config = config.clone().into();
+
+ let irc_client = Client::from_config(irc_config.clone()).await?;
+
+ Ok(Bot { irc_client, config })
+ }
+
+ pub async fn sasl_init(&self) -> Result<()> {
+ self.irc_client
+ .send_cap_req(&vec![irc::client::prelude::Capability::Sasl])?;
+ self.irc_client
+ .send(Command::NICK(self.config.user.nickname.clone()))?;
+ self.irc_client.send(Command::USER(
+ self.config.user.nickname.clone(),
+ "0".to_owned(),
+ self.config.user.realname.clone(),
+ ))?;
+ self.irc_client.send_sasl_plain()?;
+
+ Ok(())
+ }
+
+ pub fn send_privmsg(
+ &self,
+ target: &str,
+ message: &str,
+ ) -> std::result::Result<(), irc::error::Error> {
+ self.irc_client.send_privmsg(target, message)
+ }
+
+ pub fn send_notice(
+ &self,
+ target: &str,
+ message: &str,
+ ) -> std::result::Result<(), irc::error::Error> {
+ self.irc_client.send_notice(target, message)
+ }
+}