From 6c15275244066f1be983d506194f96a3c58ab36e Mon Sep 17 00:00:00 2001 From: Tsiry Sandratraina Date: Tue, 23 Sep 2025 15:41:20 +0300 Subject: [PATCH] feat: enhance Discord embed with user avatar and author details --- crates/jetstream/src/repo.rs | 1 + crates/jetstream/src/webhook/discord/mod.rs | 7 ++++++- crates/jetstream/src/webhook/discord/model.rs | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/jetstream/src/repo.rs b/crates/jetstream/src/repo.rs index 37baa89..e872529 100644 --- a/crates/jetstream/src/repo.rs +++ b/crates/jetstream/src/repo.rs @@ -116,6 +116,7 @@ pub async fn save_scrobble( did: did.to_string(), display_name: users[0].display_name.clone(), handle: users[0].handle.clone(), + avatar_url: users[0].avatar.clone(), }, track: discord::model::Track { title: scrobble_record.title.clone(), diff --git a/crates/jetstream/src/webhook/discord/mod.rs b/crates/jetstream/src/webhook/discord/mod.rs index 5ba67b1..869e9e9 100644 --- a/crates/jetstream/src/webhook/discord/mod.rs +++ b/crates/jetstream/src/webhook/discord/mod.rs @@ -10,7 +10,7 @@ pub fn embed_from_scrobble(s: &ScrobbleData, rkey: &str) -> DiscordEmbed { desc.push_str(&format!("\non *{}*", esc(&s.track.album))); DiscordEmbed { - title: s.user.display_name.clone(), + title: String::new(), url, description: Some(desc), timestamp: Some(s.played_at.clone()), @@ -18,6 +18,11 @@ pub fn embed_from_scrobble(s: &ScrobbleData, rkey: &str) -> DiscordEmbed { footer: Some(DiscordFooter { text: format!("Rocksky • {}", s.user.handle.clone()), }), + author: DiscordAuthor { + name: s.user.display_name.clone(), + url: format!("https://rocksky.app/profile/{}", s.user.handle), + icon_url: s.user.avatar_url.clone(), + }, } } diff --git a/crates/jetstream/src/webhook/discord/model.rs b/crates/jetstream/src/webhook/discord/model.rs index 7678835..4ece4a7 100644 --- a/crates/jetstream/src/webhook/discord/model.rs +++ b/crates/jetstream/src/webhook/discord/model.rs @@ -22,6 +22,7 @@ pub struct User { pub did: String, pub display_name: String, pub handle: String, + pub avatar_url: String, } #[derive(Debug, Deserialize, Serialize, Clone)] @@ -62,6 +63,14 @@ pub struct DiscordEmbed { pub thumbnail: Option, #[serde(skip_serializing_if = "Option::is_none")] pub footer: Option, + pub author: DiscordAuthor, +} + +#[derive(Debug, Serialize)] +pub struct DiscordAuthor { + pub name: String, + pub url: String, + pub icon_url: String, } #[derive(Debug, Serialize)] -- 2.43.0