diff --git a/services/phoebe-discord/src/sender.rs b/services/phoebe-discord/src/sender.rs index 9b3e485..67c7487 100644 --- a/services/phoebe-discord/src/sender.rs +++ b/services/phoebe-discord/src/sender.rs @@ -1,6 +1,6 @@ use phoebe::{ attachments::attachment_to_url, - mid_chat::{ChatMessage, ChatMessageEdit, ChatMessageReference, ChatReference}, + mid_chat::{ChatAttachment, ChatMessage, ChatMessageEdit, ChatMessageReference, ChatReference}, prelude::*, }; @@ -72,6 +72,34 @@ async fn create_webhook_reply_embeds( vec![] } +async fn create_discord_attachments(source: &'_ ChatMessage) -> Vec> { + source + .attachments + .iter() + .map(|a| match a { + ChatAttachment::Online { + url, + media_type: Some(media_type), + } => { + if media_type.starts_with("image/") { + AttachmentType::Image(url) + } else { + todo!("Handle non-image online attachment") + } + } + ChatAttachment::Online { .. } => { + todo!("Handle online attachment with no media_type") + } + ChatAttachment::InMemory { + file_name, data, .. + } => AttachmentType::Bytes { + filename: file_name.clone(), + data: data.into(), + }, + }) + .collect() +} + pub async fn send_discord_message( discord: &mut DiscordService, source: &ChatMessage, @@ -95,19 +123,7 @@ pub async fn send_discord_message( None }; - let files = source - .attachments - .iter() - .map(|a| match a { - phoebe::mid_chat::ChatAttachment::Online { url, .. } => AttachmentType::Image(url), - phoebe::mid_chat::ChatAttachment::InMemory { - file_name, data, .. - } => AttachmentType::Bytes { - filename: file_name.clone(), - data: data.into(), - }, - }) - .collect::>(); + let files = create_discord_attachments(source).await; if let Some(webhook) = get_or_create_webhook_for_channel(&mut *discord, &channel_id).await { let reply_embeds = if let Some((channel, message)) = discord_reply {