author | unC0Rr |
Mon, 30 Jan 2023 15:50:14 +0100 | |
branch | transitional_engine |
changeset 15942 | 6e22f4390b7e |
parent 15812 | efe4e3290870 |
permissions | -rw-r--r-- |
15812
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 |
} |