html terminal
Diffstat (limited to 'src/bot/mod.rs')
-rw-r--r--src/bot/mod.rs38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/bot/mod.rs b/src/bot/mod.rs
index c5cfc36..e85015f 100644
--- a/src/bot/mod.rs
+++ b/src/bot/mod.rs
@@ -12,10 +12,12 @@ use anyhow::Result;
use maps::Maps;
use poise::serenity_prelude::*;
+use regex::Regex;
use serenity::http::Http;
use serenity::model::channel::Message;
use std::fmt::Write;
use std::fs::read_to_string;
+use std::sync::LazyLock;
use std::sync::{
atomic::{AtomicU8, Ordering},
Arc, OnceLock,
@@ -95,7 +97,7 @@ pub async fn in_guild(ctx: Context<'_>) -> Result<bool> {
Ok(ctx.guild_id().map_or(false, |i| i.0 == GUILD))
}
-pub async fn safe(m: &Message, c: &serenity::client::Context) -> String {
+pub async fn discord_to_mindustry(m: &Message, c: &serenity::client::Context) -> String {
let mut result = m.content.clone();
for u in &m.mentions {
@@ -119,7 +121,37 @@ pub async fn safe(m: &Message, c: &serenity::client::Context) -> String {
result = result.replace(&mention, "@deleted-role");
}
}
- emoji::mindustry::to_discord(&result)
+
+ pub fn parse(x: &[u8]) -> u64 {
+ let mut n = 0;
+ for &b in x {
+ n = n * 10 + (b - b'0') as u64
+ }
+ n
+ }
+
+ static CHANNEL: LazyLock<Regex> = LazyLock::new(|| Regex::new("<#([0-9]+)>").unwrap());
+ let mut new = result.clone();
+ for m in CHANNEL.captures_iter(&result) {
+ new = new.replace(
+ m.get(0).unwrap().as_str(),
+ &[
+ "#",
+ c.http()
+ .get_channel(parse(m.get(1).unwrap().as_str().as_bytes()))
+ .await
+ .unwrap()
+ .guild()
+ .unwrap()
+ .name(),
+ ]
+ .concat(),
+ );
+ }
+
+ static EMOJI: LazyLock<Regex> =
+ LazyLock::new(|| Regex::new("<a?:([a-zA-Z_]+):[0-9]+>").unwrap());
+ EMOJI.replace(&new, ":$1:").into_owned()
}
pub async fn say(c: &serenity::client::Context, m: &Message, d: &Data) -> Result<()> {
@@ -127,7 +159,7 @@ pub async fn say(c: &serenity::client::Context, m: &Message, d: &Data) -> Result
.author_nick(&c.http)
.await
.unwrap_or_else(|| m.author.name.replace("ggfenguin", "eris"));
- for l in safe(m, c).await.lines() {
+ for l in discord_to_mindustry(m, c).await.lines() {
if send!(
d.stdin,
"say [royal] [coral][[[scarlet]{n}[coral]]:[white] {l}"