phoebe/services/phoebe-discord/src/sender.rs

42 lines
1.3 KiB
Rust

use phoebe::{
mid_chat::{ChatMessage, ChatMessageReference, ChatReference},
prelude::Result,
};
use serenity::{model::prelude::*, prelude::*};
use crate::{chat_conv, discord_reference};
pub async fn send_discord_message(
context: &mut Context,
source: &ChatMessage,
destination_channel: ChatReference,
) -> Result<ChatMessageReference> {
// TODO: If we have a webhook we should use the webhook
let channel_id = destination_channel.id.parse::<ChannelId>()?;
let formatted_message = chat_conv::format(&source.content);
let content = format!(
"{} ({}): {}",
source.author.display_name, source.author.reference.service, formatted_message
);
let sent_message = channel_id
.send_message(&context, move |m| {
let m = m.content(content);
if let Some(reply) = &source.replying {
let channel_id: ChannelId = reply.channel.id.parse().unwrap();
let message_id: MessageId = reply.message_id.parse::<u64>().unwrap().into();
m.reference_message((channel_id, message_id))
} else {
m
}
})
.await?;
Ok(ChatMessageReference::new(
discord_reference(sent_message.channel_id),
sent_message.id,
))
}