Bridge discord formatting to IRC

This commit is contained in:
Yash Karandikar 2022-01-18 16:55:05 -06:00
parent 4e1e9ce86f
commit 21402aa859
3 changed files with 52 additions and 1 deletions

28
Cargo.lock generated
View file

@ -183,6 +183,7 @@ dependencies = [
"anyhow",
"irc",
"lazy_static",
"pulldown-cmark",
"regex",
"serde",
"serenity",
@ -381,6 +382,15 @@ dependencies = [
"version_check",
]
[[package]]
name = "getopts"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
dependencies = [
"unicode-width",
]
[[package]]
name = "getrandom"
version = "0.1.16"
@ -886,6 +896,18 @@ dependencies = [
"unicode-xid",
]
[[package]]
name = "pulldown-cmark"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34f197a544b0c9ab3ae46c359a7ec9cbbb5c7bf97054266fecb7ead794a181d6"
dependencies = [
"bitflags",
"getopts",
"memchr",
"unicase",
]
[[package]]
name = "quote"
version = "1.0.10"
@ -1450,6 +1472,12 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "unicode-xid"
version = "0.2.2"

View file

@ -12,6 +12,7 @@ toml = "0.5"
serde = "1.0"
regex = "1.5.4"
lazy_static = "1.4"
pulldown-cmark = "0.9.1"
[dependencies.tokio]
version = "1.15.0"

View file

@ -25,6 +25,8 @@ use irc::{
use lazy_static::lazy_static;
use regex::Regex;
use pulldown_cmark::Parser;
use serde::Deserialize;
#[derive(Deserialize)]
@ -156,7 +158,27 @@ impl EventHandler for Handler {
}
}
let mut computed = msg.content.clone();
let mut computed = String::new();
{
use pulldown_cmark::Event::*;
use pulldown_cmark::Tag::*;
let parser = Parser::new(&msg.content);
for event in parser {
match event {
Text(t) | Html(t) | Code(t) => computed.push_str(&t),
End(_) => computed.push('\x0F'),
Start(tag) => match tag {
Emphasis => computed.push('\x1D'),
Strong => computed.push('\x02'),
Link(_, dest, _) => computed.push_str(&dest),
_ => {}
},
_ => {}
}
}
}
for mat in PING_RE_1.find_iter(&msg.content) {
let slice = &msg.content[mat.start() + 2..mat.end() - 1];