feat(paroxysm): upload queries for all quotes to eta's pastebin
- Currently, asking for all your quotes either stalls the bot, or doesn't result in you getting all your quotes, or both. This aims to resolve this oversight by shoving them all in a pastebin. - This uses the lovely `crimp` library by tazjin, which is really good at just doing HTTP stuff with minimal fuss. Amazing! (although we should probably actually use the depot version) - Everything is hard coded for now, but we probably don't care. - Stuff expires after 24 hours, for privacy reasons? - We also had to add a function to format entries without colours, and took the opportunity to clean up the format!() a bit. Change-Id: I6e75968c7da48a51fff327355b8fa2c025d0db75 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1872 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi> Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
parent
13088392e2
commit
9e118c6d69
5 changed files with 116 additions and 12 deletions
66
fun/paroxysm/Cargo.lock
generated
66
fun/paroxysm/Cargo.lock
generated
|
@ -138,6 +138,16 @@ name = "core-foundation-sys"
|
|||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "crimp"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"curl 0.4.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.114 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.57 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.7.3"
|
||||
|
@ -182,6 +192,34 @@ dependencies = [
|
|||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curl"
|
||||
version = "0.4.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"curl-sys 0.4.36+curl-7.71.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.74 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curl-sys"
|
||||
version = "0.4.36+curl-7.71.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.58 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.74 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "diesel"
|
||||
version = "1.4.5"
|
||||
|
@ -428,6 +466,17 @@ name = "libc"
|
|||
version = "0.2.74"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "libz-sys"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.58 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.74 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.3.0"
|
||||
|
@ -690,6 +739,7 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"chrono 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crimp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"diesel 1.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -976,6 +1026,17 @@ name = "smallvec"
|
|||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.3.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.74 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"redox_syscall 0.1.57 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.36"
|
||||
|
@ -1351,10 +1412,13 @@ dependencies = [
|
|||
"checksum config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9107d78ed62b3fa5a86e7d18e647abed48cfd8f8fab6c72f4cdb982d196f7e6"
|
||||
"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
|
||||
"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
|
||||
"checksum crimp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbe8f9a320ad9c1a2e3bacedaa281587bd297fb10a10179fd39f777049d04794"
|
||||
"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285"
|
||||
"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
|
||||
"checksum crossbeam-queue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
|
||||
"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
|
||||
"checksum curl 0.4.33 (registry+https://github.com/rust-lang/crates.io-index)" = "78baca05127a115136a9898e266988fc49ca7ea2c839f60fc6e1fc9df1599168"
|
||||
"checksum curl-sys 0.4.36+curl-7.71.1 (registry+https://github.com/rust-lang/crates.io-index)" = "68cad94adeb0c16558429c3c34a607acc9ea58e09a7b66310aabc9788fc5d721"
|
||||
"checksum diesel 1.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2de9deab977a153492a1468d1b1c0662c1cf39e5ea87d0c060ecd59ef18d8c"
|
||||
"checksum diesel_derives 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
|
||||
"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
|
||||
|
@ -1385,6 +1449,7 @@ dependencies = [
|
|||
"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
|
||||
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
"checksum libc 0.2.74 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f02823cf78b754822df5f7f268fb59822e7296276d3e069d8e8cb26a14bd10"
|
||||
"checksum libz-sys 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "af67924b8dd885cccea261866c8ce5b74d239d272e154053ff927dae839f5ae9"
|
||||
"checksum linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd"
|
||||
"checksum linked-hash-map 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a"
|
||||
"checksum lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
|
||||
|
@ -1449,6 +1514,7 @@ dependencies = [
|
|||
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
|
||||
"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
|
||||
"checksum smallvec 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3757cb9d89161a2f24e1cf78efa0c1fcff485d18e3f55e0aa3480824ddaa0f3f"
|
||||
"checksum socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918"
|
||||
"checksum syn 1.0.36 (registry+https://github.com/rust-lang/crates.io-index)" = "4cdb98bcb1f9d81d07b536179c269ea15999b5d14ea958196413869445bb5250"
|
||||
"checksum synstructure 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
|
||||
"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
|
||||
|
|
|
@ -7,6 +7,7 @@ version = "0.1.0"
|
|||
[dependencies]
|
||||
chrono = "0.4"
|
||||
config = "0.9"
|
||||
crimp = "0.2"
|
||||
env_logger = "0.7"
|
||||
failure = "0.1"
|
||||
irc = "0.13"
|
||||
|
|
|
@ -5,12 +5,13 @@ let
|
|||
in
|
||||
pkgs.naersk.buildPackage {
|
||||
name = "paroxysm";
|
||||
version = "0.0.1";
|
||||
version = "0.0.2";
|
||||
src = ./.;
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
openssl
|
||||
pkgconfig
|
||||
postgresql.lib
|
||||
curl
|
||||
];
|
||||
}
|
||||
|
|
|
@ -108,8 +108,12 @@ impl KeywordDetails {
|
|||
}
|
||||
|
||||
pub fn format_entry(&self, idx: usize) -> Option<String> {
|
||||
self.format_entry_colours(idx, true)
|
||||
}
|
||||
|
||||
pub fn format_entry_colours(&self, idx: usize, with_colours: bool) -> Option<String> {
|
||||
if let Some(ent) = self.entries.get(idx.saturating_sub(1)) {
|
||||
let gen_clr = if self.keyword.chan == "*" {
|
||||
let gen_clr = if self.keyword.chan == "*" && with_colours {
|
||||
"\x0307"
|
||||
} else {
|
||||
""
|
||||
|
@ -117,13 +121,18 @@ impl KeywordDetails {
|
|||
let zwsp_name = Self::add_zwsp_to_name(&self.keyword.name)
|
||||
.unwrap_or_else(|| self.keyword.name.clone());
|
||||
Some(format!(
|
||||
"\x02{}{}\x0f\x0315[{}/{}]\x0f: {} \x0f\x0314[{}]\x0f",
|
||||
"{}{}{name}{}[{idx}/{total}]{}: {text} {}[{date}]{}",
|
||||
if with_colours { "\x02" } else { "" },
|
||||
gen_clr,
|
||||
zwsp_name,
|
||||
idx,
|
||||
self.entries.len(),
|
||||
ent.text,
|
||||
ent.creation_ts.date()
|
||||
if with_colours { "\x0f\x0315" } else { "" },
|
||||
if with_colours { "\x0f" } else { "" },
|
||||
if with_colours { "\x0f\x0314" } else { "" },
|
||||
if with_colours { "\x0f" } else { "" },
|
||||
name = zwsp_name,
|
||||
idx = idx,
|
||||
total = self.entries.len(),
|
||||
text = ent.text,
|
||||
date = ent.creation_ts.date()
|
||||
))
|
||||
} else {
|
||||
None
|
||||
|
|
|
@ -230,12 +230,39 @@ impl App {
|
|||
if let Some(mut idx) = idx {
|
||||
if idx == -1 {
|
||||
// 'get all entries' ('*' parses into this)
|
||||
// step 1: make a blob of all the quotes
|
||||
let mut data_to_upload = String::new();
|
||||
for i in 0..kwd.entries.len() {
|
||||
self.client.send_notice(
|
||||
nick,
|
||||
format!("[{}] {}", chan, kwd.format_entry(i + 1).unwrap()),
|
||||
)?;
|
||||
data_to_upload
|
||||
.push_str(&kwd.format_entry_colours(i + 1, false).unwrap());
|
||||
data_to_upload.push('\n');
|
||||
}
|
||||
// step 2: attempt to POST it to eta's pastebin
|
||||
// TODO(eta): make configurable
|
||||
let response = crimp::Request::put("https://theta.eu.org/lx/upload")
|
||||
.user_agent("paroxysm/0.0.2 crimp/0.2")?
|
||||
.header("Linx-Expiry", "86400")? // 24 hours
|
||||
.body("text/plain", data_to_upload.as_bytes())
|
||||
.timeout(std::time::Duration::from_secs(2))?
|
||||
.send()?
|
||||
.as_string()?;
|
||||
// step 3: tell the world about it
|
||||
if response.status != 200 {
|
||||
Err(format_err!(
|
||||
"upload returned {}: {}",
|
||||
response.status,
|
||||
response.body
|
||||
))?
|
||||
}
|
||||
self.client.send_notice(
|
||||
target,
|
||||
format!(
|
||||
"\x02{}\x0f: uploaded {} quotes to \x02\x0311{}\x0f (will expire in \x0224\x0f hours)",
|
||||
subj,
|
||||
kwd.entries.len(),
|
||||
response.body
|
||||
)
|
||||
)?;
|
||||
} else {
|
||||
if idx == 0 {
|
||||
idx = 1;
|
||||
|
|
Loading…
Reference in a new issue