···8484 let client = Client::new();
8585 let url = std::env::var("DISCORD_WEBHOOK_URL")
8686 .expect("DISCORD_WEBHOOK_URL environment variable must be set");
8787-8787+8888 // Get resolver app view URL from environment
8989 let resolver_app_view = std::env::var("RESOLVER_APP_VIEW")
9090 .unwrap_or_else(|_| "https://bsky.social".to_string());
9191-9191+9292 // Safely extract track name and artist from the record
9393 let track_info = message
9494 .commit
···102102 })
103103 .unwrap_or_else(|| "unknown track".to_string());
104104105105+ let submission_client_agent = message
106106+ .commit
107107+ .as_ref()
108108+ .and_then(|commit| commit.record.as_ref())
109109+ .and_then(|record| record.get("submissionClientAgent")?.as_str());
110110+105111 // Resolve the handle from the DID
106112 let handle = match resolve::resolve_identity(&message.did, &resolver_app_view).await {
107113 Ok(resolved) => resolved.identity,
···113119 };
114120115121 let payload = json!({
116116- "content": format!("{} is listening to {}", handle, track_info),
122122+ "content": format!("{} is listening to {} via `{}`", handle, track_info, submission_client_agent.unwrap_or("unknown client")),
117123 "allowed_mentions": { "parse": [] },
118124 });
119125 let response = client.post(url).json(&payload).send().await?;