From 95ec96fe729cc95a47b7121716917d7caa140ef0 Mon Sep 17 00:00:00 2001 From: Izan Gil <66965250+SrIzan10@users.noreply.github.com> Date: Wed, 3 Sep 2025 23:15:36 +0200 Subject: [PATCH] feat: add default emojis --- .github/workflows/docker.yml | 6 +++ slack-import-emojis/src/main.rs | 69 ++++++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 10 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 554f1b9..12d37a4 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -10,6 +10,12 @@ jobs: name: Push frontend to Docker Hub runs-on: ubuntu-latest steps: + - name: Wait + uses: NathanFirmo/wait-for-other-action@v1.0.4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + workflow: 'emojis.yml' + - name: Check out the repo uses: actions/checkout@v3 diff --git a/slack-import-emojis/src/main.rs b/slack-import-emojis/src/main.rs index 3040101..c89d188 100644 --- a/slack-import-emojis/src/main.rs +++ b/slack-import-emojis/src/main.rs @@ -6,10 +6,21 @@ use std::io::Write; #[derive(Debug, Deserialize)] struct SlackEmojiResponse { - emoji: HashMap, - #[serde(skip_serializing_if = "Option::is_none")] - #[allow(dead_code)] - error: Option, + emoji: HashMap, + #[serde(skip_serializing_if = "Option::is_none")] + #[allow(dead_code)] + error: Option, +} +#[derive(Debug, Deserialize)] +struct DefaultEmojiResponse { + emoji: HashMap, +} + +#[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 Result Result> { + 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 = response.json().await?; + let emoji_map: HashMap = 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)) + } + } +}