aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-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)
+ }
+}
='logsubject'>add stuff to ignore for git and containersMax Audron-0/+3 2021-09-07add cargo chef to container build to utilize cachingMax Audron-8/+12 2021-09-07handle CTCP ACTION in sed moduleMax Audron-2/+16 2021-09-07put benchmark behind feature flag we can compile using stable rustMax Audron-7/+17 2021-09-07handle error cases in sed moduleMax Audron-8/+15 2021-06-29add rmr to channels1.3.2Max Audron-1/+1 2021-06-28>.>: add . as eyeMax Audron-1/+1 2021-06-28add lmr to channels1.3.1Max Audron-1/+1 2021-06-23rewrite sed regex to work cross channelMax Audron-115/+141 2021-06-23add required metadata for publishing to macros crateMax Audron-5/+12 2021-06-23add ability to use path and dotted syntax for functionsMax Audron-8/+39 2021-06-21publish macros subcrateMax Audron-20/+20 2021-06-13release version 1.2.1Max Audron-2/+2 * fix crash on empty message 2021-06-13fix crash on message only containing whitespaceMax Audron-1/+4 2021-06-11Release version 1.2.01.2.0Max Audron-2/+2 * add pet command 2021-06-06make pet more compactR0flcopt3r/catinator-pet-commandMax Audron-5/+5 2021-06-05feat: adds pet command.R0flcopt3r-0/+90 When petting the cat it will reply with some random action. 2021-06-05feat: send actionR0flcopt3r-1/+9 2021-06-05release version 1.1.0Max Audron-2/+2 2021-06-05document proc macrosMax Audron-4/+97 2021-06-05add intensifyMax Audron-3/+27 2021-06-05add privmsg macroMax Audron-2/+40 2021-06-05fix jb remote urlsMax Audron-4/+4 2021-06-05remove egress gateway configMax Audron-10/+0 2021-06-05update tanka dependenciesMax Audron-8/+8 2021-06-05fix init container nameMax Audron-1/+1 2021-06-05fix tanka dependency pathMax Audron-8/+8 2021-06-05switch to https url for tanka util libMax Audron-2/+2 2021-06-05bump version to 1.0.2Max Audron-2/+2 2021-06-05add tanka ci configurationMax Audron-1/+1 2021-06-05ready tanka deploy for CIMax Audron-32/+69 2021-06-05remove tanka vendoringMax Audron-27651/+0 2021-05-26Release 1.0.1Max Audron-3/+3 2021-05-26fix log breaking once buffer fullMax Audron-2/+33 the log_msg function was poping the newest message and replacing it with the newest message, it should be poping the oldest messages. 2021-05-16add deployment stuffMax Audron-6/+27786 2021-05-15add container buildMax Audron-2/+35