Add v1 of the shitty-emojipasta

This commit is contained in:
2020-10-29 16:06:48 +01:00
parent ac039233ea
commit d6fa0c5530
5 changed files with 3879 additions and 412 deletions

818
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,4 +12,8 @@ telegram-bot = "0.7.0"
dotenv = "0.15.0" dotenv = "0.15.0"
tokio = { version="^0.2.0", features=["macros"] } tokio = { version="^0.2.0", features=["macros"] }
futures = "^0.3.5" futures = "^0.3.5"
serde_json = "1.0"
once_cell = "^1.4.1"
indexmap = { version="1.6.0", features=["serde-1"] }
rand = "0.7.3"

View File

@@ -1,7 +1,7 @@
IMAGE_TAG=harbor.blacknova.io/nvls/sarcastifybot:latest IMAGE_TAG=harbor.blacknova.io/nvls/sarcastifybot:latest
image: image:
docker build -t $(IMAGE_TAG) . podman build -t $(IMAGE_TAG) .
push: push:
docker push $(IMAGE_TAG) podman push $(IMAGE_TAG)

3408
assets/emojis.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,13 @@ use std::env;
use dotenv::dotenv; use dotenv::dotenv;
use futures::StreamExt; use futures::StreamExt;
use telegram_bot::*; use telegram_bot::*;
use once_cell::sync::Lazy;
use indexmap::map::IndexMap;
static EMOJI_DATA: Lazy<IndexMap<String, String>> = Lazy::new(|| {
let data = include_str!("../assets/emojis.json");
serde_json::from_str(data).expect("Failed to parse json emoji data")
});
/// Returns two versions of AlTeRnAtInG case equivalents of the given message /// Returns two versions of AlTeRnAtInG case equivalents of the given message
/// The first result contains the a version beginning with an uppercase letter, /// The first result contains the a version beginning with an uppercase letter,
@@ -49,33 +56,65 @@ fn generate_spaced(message: &str) -> String
result result
} }
fn generate_emojipasta(message: &str) -> String
{
use rand::seq::SliceRandom;
let mut rng = rand::thread_rng();
let emojis: Vec<&String> = EMOJI_DATA.values().collect();
let mut result: Vec<String> = Vec::new();
let mut stream = message.split_whitespace().enumerate();
while let Some((_, word)) = stream.next() {
result.push(word.into());
// Lowercase word
let word: String = word.to_lowercase();
if let Some(emoji) = EMOJI_DATA.get(&word) {
result.push(emoji.to_string());
} else if let Some(emoji) = emojis.choose(&mut rng) {
result.push(emoji.to_string());
}
}
return result.join(" ");
}
fn generate_responses(message: &str) -> Vec<InlineQueryResult> { fn generate_responses(message: &str) -> Vec<InlineQueryResult> {
if message == "" { if message == "" {
return vec![]; return vec![];
} }
let (option1, option2) = generate_alternate_case(message); let (alt_up, alt_down) = generate_alternate_case(message);
let option3 = generate_spaced(message); let spaced = generate_spaced(message);
let pasta = generate_emojipasta(message);
vec![ vec![
InlineQueryResultArticle::new( InlineQueryResultArticle::new(
"altcase_1", option1.clone(), InputTextMessageContent { "altcase_up", alt_up.clone(), InputTextMessageContent {
message_text: option1, message_text: alt_up,
parse_mode: None, parse_mode: None,
disable_web_page_preview: false, disable_web_page_preview: false,
} }
).into(), ).into(),
InlineQueryResultArticle::new( InlineQueryResultArticle::new(
"altcase_2", option2.clone(), InputTextMessageContent { "altcase_down", alt_down.clone(), InputTextMessageContent {
message_text: option2, message_text: alt_down,
parse_mode: None, parse_mode: None,
disable_web_page_preview: false, disable_web_page_preview: false,
} }
).into(), ).into(),
InlineQueryResultArticle::new( InlineQueryResultArticle::new(
"spaced", option3.clone(), InputTextMessageContent { "spaced", spaced.clone(), InputTextMessageContent {
message_text: option3, message_text: spaced,
parse_mode: None,
disable_web_page_preview: false,
}
).into(),
InlineQueryResultArticle::new(
"emojipasta", pasta.clone(), InputTextMessageContent {
message_text: pasta,
parse_mode: None, parse_mode: None,
disable_web_page_preview: false, disable_web_page_preview: false,
} }