tools/ubot-plugins/url-bot-rs/src/bin/ubot-url-plugin.rs
author unc0rr
Sat, 12 Jun 2021 20:15:42 +0200
changeset 15790 efe4e3290870
permissions -rw-r--r--
Add url bot plugin based on url-bot-rs (only the difference from their repo)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15790
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     1
use url_bot_rs::config::Rtd;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     2
use url_bot_rs::VERSION;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     3
use url_bot_rs::{feat, http::resolve_url, param, plugins::TITLE_PLUGINS, tld::TLD};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     4
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     5
use anyhow::Result as AHResult;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     6
use atty::{is, Stream};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     7
use directories::ProjectDirs;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     8
use docopt::Docopt;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
     9
use failure::Error;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    10
use lazy_static::lazy_static;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    11
use log::{error, info};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    12
use regex::Regex;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    13
use reqwest::Url;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    14
use serde_derive::Deserialize;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    15
use std::collections::HashSet;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    16
use std::path::PathBuf;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    17
use stderrlog::{ColorChoice, Timestamp};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    18
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    19
use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    20
use tokio_amqp::*;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    21
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    22
use futures::prelude::*;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    23
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    24
use rand::distributions::Alphanumeric;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    25
use rand::{thread_rng, Rng};
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    26
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    27
use std::sync::mpsc;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    28
use std::thread;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    29
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    30
// docopt usage string
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    31
const USAGE: &str = "
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    32
URL munching IRC bot.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    33
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    34
Usage:
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    35
    ubot-url-plugin [options] [-v...] [--conf=PATH...] [--conf-dir=DIR...]
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    36
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    37
Options:
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    38
    -h --help           Show this help message.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    39
    --version           Print version.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    40
    -v --verbose        Show extra information.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    41
    -t --timestamp      Force timestamps.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    42
";
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    43
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    44
#[derive(Debug, Deserialize, Default)]
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    45
pub struct Args {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    46
    flag_verbose: usize,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    47
    flag_conf: Vec<PathBuf>,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    48
    flag_conf_dir: Vec<PathBuf>,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    49
    flag_timestamp: bool,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    50
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    51
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    52
const MIN_VERBOSITY: usize = 2;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    53
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    54
#[derive(Debug, PartialEq)]
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    55
enum TitleResp {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    56
    Title(String),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    57
    Error(String),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    58
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    59
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    60
/// Run available plugins on a single URL, return the first successful title.
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    61
fn process_plugins(rtd: &Rtd, url: &Url) -> Option<String> {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    62
    let result: String = TITLE_PLUGINS
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    63
        .iter()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    64
        .filter(|p| p.check(&rtd.conf.plugins, url))
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    65
        .filter_map(|p| p.evaluate(&rtd, url).ok())
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    66
        .take(1)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    67
        .collect();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    68
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    69
    if result.is_empty() {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    70
        None
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    71
    } else {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    72
        Some(result)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    73
    }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    74
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    75
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    76
/// find titles in a message and generate responses
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    77
fn process_titles(rtd: &Rtd, msg: &str) -> impl Iterator<Item = TitleResp> {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    78
    let mut responses: Vec<TitleResp> = vec![];
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    79
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    80
    let mut num_processed = 0;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    81
    let mut dedup_urls = HashSet::new();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    82
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    83
    // look at each space-separated message token
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    84
    for token in msg.split_whitespace() {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    85
        // the token must not contain unsafe characters
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    86
        if contains_unsafe_chars(token) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    87
            continue;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    88
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    89
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    90
        // get a full URL for tokens without a scheme
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    91
        let maybe_token = if feat!(rtd, partial_urls) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    92
            add_scheme_for_tld(token)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    93
        } else {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    94
            None
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    95
        };
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    96
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    97
        let token = maybe_token.as_ref().map_or(token, String::as_str);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    98
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
    99
        // the token must be a valid url
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   100
        let url = match token.parse::<Url>() {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   101
            Ok(url) => url,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   102
            _ => continue,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   103
        };
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   104
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   105
        // the scheme must be http or https
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   106
        if !["http", "https"].contains(&url.scheme()) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   107
            continue;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   108
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   109
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   110
        // skip duplicate urls within the message
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   111
        if dedup_urls.contains(&url) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   112
            continue;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   113
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   114
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   115
        info!("[{}] RESOLVE <{}>", rtd.conf.network.name, token);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   116
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   117
        // try to get the title from the url
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   118
        let title = if let Some(title) = process_plugins(rtd, &url) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   119
            title
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   120
        } else {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   121
            match resolve_url(token, rtd) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   122
                Ok(title) => title,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   123
                Err(err) => {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   124
                    error!("{:?}", err);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   125
                    responses.push(TitleResp::Error(err.to_string()));
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   126
                    continue;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   127
                }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   128
            }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   129
        };
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   130
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   131
        // limit response length, see RFC1459
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   132
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   133
        let msg = utf8_truncate(&format!("⤷ {}", title), 510);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   134
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   135
        info!("[{}] {}", rtd.conf.network.name, msg);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   136
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   137
        responses.push(TitleResp::Title(msg.to_string()));
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   138
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   139
        dedup_urls.insert(url);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   140
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   141
        // limit the number of processed URLs
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   142
        num_processed += 1;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   143
        if num_processed == param!(rtd, url_limit) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   144
            break;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   145
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   146
    }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   147
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   148
    responses.into_iter()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   149
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   150
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   151
// regex for unsafe characters, as defined in RFC 1738
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   152
const RE_UNSAFE_CHARS: &str = r#"[{}|\\^~\[\]`<>"]"#;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   153
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   154
/// does the token contain characters not permitted by RFC 1738
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   155
fn contains_unsafe_chars(token: &str) -> bool {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   156
    lazy_static! {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   157
        static ref UNSAFE: Regex = Regex::new(RE_UNSAFE_CHARS).unwrap();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   158
    }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   159
    UNSAFE.is_match(token)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   160
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   161
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   162
/// truncate to a maximum number of bytes, taking UTF-8 into account
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   163
fn utf8_truncate(s: &str, n: usize) -> String {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   164
    s.char_indices()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   165
        .take_while(|(len, c)| len + c.len_utf8() <= n)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   166
        .map(|(_, c)| c)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   167
        .collect()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   168
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   169
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   170
lazy_static! {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   171
    static ref REPEATED_DOTS: Regex = Regex::new(r"\.\.+").unwrap();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   172
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   173
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   174
/// if a token has a recognised TLD, but no scheme, add one
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   175
pub fn add_scheme_for_tld(token: &str) -> Option<String> {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   176
    if token.parse::<Url>().is_err() {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   177
        if token.starts_with(|s: char| !s.is_alphabetic()) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   178
            return None;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   179
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   180
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   181
        if REPEATED_DOTS.is_match(&token) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   182
            return None;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   183
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   184
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   185
        let new_token = format!("http://{}", token);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   186
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   187
        if let Ok(url) = new_token.parse::<Url>() {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   188
            if !url.domain()?.contains('.') {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   189
                return None;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   190
            }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   191
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   192
            // reject email addresses
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   193
            if url.username() != "" {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   194
                return None;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   195
            }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   196
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   197
            let tld = url.domain()?.split('.').last()?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   198
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   199
            if TLD.contains(tld) {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   200
                return Some(new_token);
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   201
            }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   202
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   203
    }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   204
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   205
    None
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   206
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   207
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   208
fn init_rtd() -> AHResult<Rtd, Error> {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   209
    // parse command line arguments with docopt
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   210
    let args: Args = Docopt::new(USAGE)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   211
        .and_then(|d| d.version(Some(VERSION.to_string())).deserialize())
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   212
        .unwrap_or_else(|e| e.exit());
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   213
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   214
    // avoid timestamping when piped, e.g. systemd
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   215
    let timestamp = if is(Stream::Stderr) || args.flag_timestamp {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   216
        Timestamp::Second
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   217
    } else {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   218
        Timestamp::Off
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   219
    };
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   220
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   221
    stderrlog::new()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   222
        .module(module_path!())
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   223
        .modules(vec![
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   224
            "url_bot_rs::message",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   225
            "url_bot_rs::config",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   226
            "url_bot_rs::http",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   227
        ])
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   228
        .verbosity(args.flag_verbose + MIN_VERBOSITY)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   229
        .timestamp(timestamp)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   230
        .color(ColorChoice::Never)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   231
        .init()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   232
        .unwrap();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   233
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   234
    let dirs = ProjectDirs::from("org", "", "url-bot-rs").unwrap();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   235
    let default_conf_dir = dirs.config_dir();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   236
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   237
    let default_conf = default_conf_dir.join("config.toml");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   238
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   239
    let rtd: Rtd = Rtd::new().conf(&default_conf).load()?.init_http_client()?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   240
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   241
    Ok(rtd)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   242
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   243
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   244
fn random_string(size: usize) -> String {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   245
    thread_rng()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   246
        .sample_iter(&Alphanumeric)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   247
        .take(size)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   248
        .map(char::from)
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   249
        .collect()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   250
}
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   251
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   252
#[tokio::main]
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   253
async fn main() -> AHResult<()> {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   254
    let (tx1, rx1) = mpsc::channel::<String>();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   255
    let (tx2, rx2) = mpsc::channel();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   256
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   257
    thread::spawn(move || {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   258
        let rtd = init_rtd().expect("RTD not initialized");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   259
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   260
        loop {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   261
            let message = &rx1.recv().expect("rx1 recv error");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   262
            let titles: Vec<_> = process_titles(&rtd, message).collect();
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   263
            tx2.send(titles).expect("tx2 send error");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   264
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   265
    });
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   266
    let amqp_url = std::env::var("AMQP_URL").expect("expected AMQP_URL env variabe");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   267
    let conn = Connection::connect(&amqp_url, ConnectionProperties::default().with_tokio()).await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   268
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   269
    let pub_channel = conn.create_channel().await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   270
    let sub_channel = conn.create_channel().await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   271
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   272
    let queue = sub_channel
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   273
        .queue_declare(
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   274
            &random_string(32),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   275
            QueueDeclareOptions {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   276
                exclusive: true,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   277
                auto_delete: true,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   278
                ..QueueDeclareOptions::default()
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   279
            },
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   280
            FieldTable::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   281
        )
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   282
        .await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   283
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   284
    sub_channel
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   285
        .queue_bind(
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   286
            queue.name().as_str(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   287
            "irc",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   288
            "msg.hedgewars",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   289
            QueueBindOptions::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   290
            FieldTable::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   291
        )
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   292
        .await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   293
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   294
    let mut subscriber = sub_channel
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   295
        .basic_consume(
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   296
            queue.name().as_str(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   297
            &random_string(32),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   298
            BasicConsumeOptions::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   299
            FieldTable::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   300
        )
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   301
        .await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   302
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   303
    while let Some(amqp_message) = subscriber.next().await {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   304
        let (_, delivery) = amqp_message.expect("error in consumer");
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   305
        delivery.ack(BasicAckOptions::default()).await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   306
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   307
        let chat_message = String::from_utf8(delivery.data)?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   308
        if let Some((_who, message)) = chat_message.split_once('\n') {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   309
            tx1.send(message.to_owned())?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   310
            let titles = rx2.recv()?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   311
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   312
            for title in titles {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   313
                let title_message = match title {
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   314
                    TitleResp::Title(t) => t,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   315
                    TitleResp::Error(e) => e,
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   316
                };
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   317
                pub_channel
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   318
                    .basic_publish(
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   319
                        "irc",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   320
                        "say.hedgewars",
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   321
                        BasicPublishOptions::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   322
                        title_message.as_bytes().to_vec(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   323
                        BasicProperties::default(),
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   324
                    )
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   325
                    .await?;
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   326
            }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   327
        }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   328
    }
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   329
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   330
    Ok(())
efe4e3290870 Add url bot plugin based on url-bot-rs (only the difference from their repo)
unc0rr
parents:
diff changeset
   331
}