From 24cf61c783dcbbe23572e6582a0f9ccd4e383b0d Mon Sep 17 00:00:00 2001 From: trisua Date: Mon, 5 May 2025 23:44:10 -0400 Subject: [PATCH] fix: emoji shortcodes --- Cargo.lock | 1 + crates/app/Cargo.toml | 1 + crates/app/src/public/html/components.html | 31 +++++++++---------- .../src/routes/api/v1/communities/emojis.rs | 12 +++++++ .../app/src/routes/api/v1/communities/mod.rs | 1 + crates/app/src/routes/api/v1/mod.rs | 5 +++ crates/core/src/database/emojis.rs | 5 +++ 7 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 crates/app/src/routes/api/v1/communities/emojis.rs diff --git a/Cargo.lock b/Cargo.lock index 000fc92..fcf9b38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3711,6 +3711,7 @@ dependencies = [ "axum-extra", "cf-turnstile", "contrasted", + "emojis", "futures-util", "image", "mime_guess", diff --git a/crates/app/Cargo.toml b/crates/app/Cargo.toml index 9653006..b232819 100644 --- a/crates/app/Cargo.toml +++ b/crates/app/Cargo.toml @@ -47,3 +47,4 @@ async-stripe = { version = "0.41.0", features = [ "billing", "runtime-tokio-hyper", ] } +emojis = "0.6.4" diff --git a/crates/app/src/public/html/components.html b/crates/app/src/public/html/components.html index 7fdb179..40ed72a 100644 --- a/crates/app/src/public/html/components.html +++ b/crates/app/src/public/html/components.html @@ -1146,28 +1146,25 @@ secondary=false) -%} diff --git a/crates/app/src/routes/api/v1/communities/emojis.rs b/crates/app/src/routes/api/v1/communities/emojis.rs new file mode 100644 index 0000000..ee1007c --- /dev/null +++ b/crates/app/src/routes/api/v1/communities/emojis.rs @@ -0,0 +1,12 @@ +use axum::response::IntoResponse; + +/// Expand a unicode emoji into its Gemoji shortcode. +pub async fn get_emoji_shortcode(emoji: String) -> impl IntoResponse { + match emojis::get(&emoji) { + Some(e) => match e.shortcode() { + Some(s) => s.to_string(), + None => e.name().replace(" ", "-"), + }, + None => String::new(), + } +} diff --git a/crates/app/src/routes/api/v1/communities/mod.rs b/crates/app/src/routes/api/v1/communities/mod.rs index 6e4b3bf..ab6e2bb 100644 --- a/crates/app/src/routes/api/v1/communities/mod.rs +++ b/crates/app/src/routes/api/v1/communities/mod.rs @@ -1,4 +1,5 @@ pub mod communities; +pub mod emojis; pub mod images; pub mod posts; pub mod questions; diff --git a/crates/app/src/routes/api/v1/mod.rs b/crates/app/src/routes/api/v1/mod.rs index 4f54dcc..6146ccd 100644 --- a/crates/app/src/routes/api/v1/mod.rs +++ b/crates/app/src/routes/api/v1/mod.rs @@ -311,6 +311,11 @@ pub fn routes() -> Router { ) .route("/messages", post(channels::messages::create_request)) .route("/messages/{id}", delete(channels::messages::delete_request)) + // emojis + .route( + "/lookup_emoji", + post(communities::emojis::get_emoji_shortcode), + ) } #[derive(Deserialize)] diff --git a/crates/core/src/database/emojis.rs b/crates/core/src/database/emojis.rs index 8f4d209..600cacf 100644 --- a/crates/core/src/database/emojis.rs +++ b/crates/core/src/database/emojis.rs @@ -105,6 +105,11 @@ impl DataManager { pub async fn create_emoji(&self, data: CustomEmoji) -> Result<()> { let user = self.get_user_by_id(data.owner).await?; + // check if we can create animated emojis + if !user.permissions.check(FinePermission::SUPPORTER) && data.is_animated { + return Err(Error::RequiresSupporter); + } + // check user permission in community if data.community != 0 { let membership = self