Add v1 of the shitty-emojipasta
This commit is contained in:
818
Cargo.lock
generated
818
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||||
|
|||||||
4
Makefile
4
Makefile
@@ -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
3408
assets/emojis.json
Normal file
File diff suppressed because it is too large
Load Diff
55
src/main.rs
55
src/main.rs
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user