mirror of
https://github.com/SrIzan10/hctv.git
synced 2026-06-06 00:56:56 +00:00
feat: add default emojis
This commit is contained in:
@@ -6,10 +6,21 @@ use std::io::Write;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct SlackEmojiResponse {
|
||||
emoji: HashMap<String, String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
#[allow(dead_code)]
|
||||
error: Option<String>,
|
||||
emoji: HashMap<String, String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
#[allow(dead_code)]
|
||||
error: Option<String>,
|
||||
}
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct DefaultEmojiResponse {
|
||||
emoji: HashMap<String, String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct EmojiData {
|
||||
unified: String,
|
||||
has_img_twitter: bool,
|
||||
short_name: String,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
@@ -19,14 +30,23 @@ async fn main() {
|
||||
return;
|
||||
}
|
||||
|
||||
let emojis = slack_request()
|
||||
let mut slack_emojis = slack_request()
|
||||
.await
|
||||
.expect("Failed to fetch emojis from Slack API");
|
||||
.expect("Failed to fetch slack_emojis from Slack API");
|
||||
println!("{:?} slack_emojis fetched", slack_emojis.emoji.len());
|
||||
|
||||
let default_emojis = default_request()
|
||||
.await
|
||||
.expect("Failed to fetch default_emojis from GitHub");
|
||||
println!("{:?} default_emojis fetched", default_emojis.emoji.len());
|
||||
|
||||
slack_emojis.emoji.extend(default_emojis.emoji);
|
||||
|
||||
println!("{:?} emojis fetched", emojis.emoji.len());
|
||||
let mut file = File::create("emojis.json").expect("failed to create file for some reason");
|
||||
let json_data = serde_json::to_string(&emojis.emoji).expect("failed to serialize emojis wtf");
|
||||
file.write_all(json_data.as_bytes())
|
||||
let json_data =
|
||||
serde_json::to_string(&slack_emojis.emoji).expect("failed to serialize emojis wtf");
|
||||
file
|
||||
.write_all(json_data.as_bytes())
|
||||
.expect("failed to write emojis to file");
|
||||
println!("saved :yay:");
|
||||
}
|
||||
@@ -37,7 +57,10 @@ async fn slack_request() -> Result<SlackEmojiResponse, Box<dyn std::error::Error
|
||||
.get("https://slack.com/api/emoji.list")
|
||||
.header(
|
||||
"Authorization",
|
||||
format!("Bearer {}", std::env::var("SLACK_TOKEN").expect("SLACK_TOKEN not set")),
|
||||
format!(
|
||||
"Bearer {}",
|
||||
std::env::var("SLACK_TOKEN").expect("SLACK_TOKEN not set")
|
||||
),
|
||||
)
|
||||
.send()
|
||||
.await;
|
||||
@@ -50,3 +73,29 @@ async fn slack_request() -> Result<SlackEmojiResponse, Box<dyn std::error::Error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn default_request() -> Result<DefaultEmojiResponse, Box<dyn std::error::Error>> {
|
||||
const CDN_URL: &str =
|
||||
"https://cdn.jsdelivr.net/npm/emoji-datasource-twitter@15.1.2/img/twitter/64/";
|
||||
let client = reqwest::Client::new();
|
||||
let res = client
|
||||
.get("https://raw.githubusercontent.com/iamcal/emoji-data/refs/heads/master/emoji.json")
|
||||
.send()
|
||||
.await;
|
||||
|
||||
match res {
|
||||
Ok(response) => {
|
||||
let emoji_data: Vec<EmojiData> = response.json().await?;
|
||||
let emoji_map: HashMap<String, String> = emoji_data
|
||||
.into_iter()
|
||||
.filter(|e| e.has_img_twitter)
|
||||
.map(|e| (e.short_name, format!("{}{}.png", CDN_URL, e.unified.to_lowercase())))
|
||||
.collect();
|
||||
Ok(DefaultEmojiResponse { emoji: emoji_map })
|
||||
}
|
||||
Err(err) => {
|
||||
eprintln!("Error: {:?}", err);
|
||||
Err(Box::new(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user