aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/hooks/url.rs37
-rw-r--r--src/main.rs7
2 files changed, 30 insertions, 14 deletions
diff --git a/src/hooks/url.rs b/src/hooks/url.rs
index 68caea2..2392d1d 100644
--- a/src/hooks/url.rs
+++ b/src/hooks/url.rs
@@ -1,4 +1,4 @@
-use anyhow::Result;
+use anyhow::{bail, Context, Error, Result};
use irc::client::prelude::*;
use regex::Regex;
@@ -6,9 +6,11 @@ use regex::Regex;
extern crate kuchiki;
use kuchiki::{parse_html, traits::*};
use reqwest::{get, Url};
+use tracing::{error, trace};
pub const URL_REGEX: &str = r#"(https?://|www.)\S+"#;
+#[tracing::instrument]
pub fn url_parser(msg: &str) -> Vec<String> {
let url_regex = Regex::new(URL_REGEX).unwrap();
@@ -18,24 +20,42 @@ pub fn url_parser(msg: &str) -> Vec<String> {
.collect::<Vec<String>>()
}
-pub async fn url_title(url: &str) -> Option<String> {
- let body = get(Url::parse(url).ok()?).await.ok()?.text().await.ok()?;
+#[tracing::instrument]
+pub async fn url_title(url: &str) -> Result<String, Error> {
+ let body = get(Url::parse(url).context("Failed to parse url")?)
+ .await
+ .context("Failed to make request")?
+ .text()
+ .await
+ .context("failed to get request response text")?;
let document = parse_html().one(body);
match document.select("title") {
- Ok(title) => Some(title.into_iter().nth(0)?.text_contents()),
- Err(_) => None,
+ Ok(title) => Ok(title
+ .into_iter()
+ .nth(0)
+ .context("title did not have text")?
+ .text_contents()),
+ Err(_) => bail!("could not find title"),
}
}
+#[tracing::instrument(skip(bot))]
pub fn url_preview(bot: &crate::Bot, msg: Message) -> Result<()> {
if let Command::PRIVMSG(target, text) = msg.command.clone() {
let mut titles: Vec<String> = Vec::new();
+
for url in url_parser(&text) {
- if let Some(title) = futures::executor::block_on(url_title(&url.as_str())) {
- titles.push(title);
+ trace!("got url: {:?}", url);
+ match futures::executor::block_on(url_title(&url.as_str())) {
+ Ok(title) => {
+ trace!("extracted title from url: {:?}, {:?}", title, url);
+ titles.push(title);
+ },
+ Err(err) => error!("Failed to get urls title: {:?}", err),
}
}
+
if !titles.is_empty() {
bot.send_privmsg(&target, &msg_builder(&titles))?;
}
@@ -43,12 +63,13 @@ pub fn url_preview(bot: &crate::Bot, msg: Message) -> Result<()> {
Ok(())
}
+#[tracing::instrument]
pub fn msg_builder(titles: &Vec<String>) -> String {
format!(
"Title{}: {}",
if titles.len() > 1 { "s" } else { "" },
titles.join(" --- ")
- )
+ )
}
#[cfg(test)]
diff --git a/src/main.rs b/src/main.rs
index a9faa78..776299d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,12 +2,7 @@
async fn main() {
use catinator::catinator;
- tracing_subscriber::fmt()
- .compact()
- .with_span_events(tracing_subscriber::fmt::format::FmtSpan::FULL)
- .with_max_level(tracing::Level::DEBUG)
- .with_thread_ids(true)
- .init();
+ tracing_subscriber::fmt::init();
let mut sed = catinator::hooks::sed::Sed::new();
td>-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 2021-06-13fix crash on message only containing whitespaceMax Audron-1/+4 2021-06-11Release version 1.2.01.2.0Max Audron-2/+2 2021-06-06make pet more compactR0flcopt3r/catinator-pet-commandMax Audron-5/+5 2021-06-05feat: adds pet command.R0flcopt3r-0/+90 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 2021-05-16add deployment stuffMax Audron-6/+27786 2021-05-15add container buildMax Audron-2/+35