Forward image attachments from Discord to Matrix
Also, there is work-in-progress work on forwarding images from encrypted Matrix roomslegacy
parent
e0731c2df3
commit
0649ea0503
|
@ -61,6 +61,7 @@ impl EventHandler for DiscordHandler {
|
|||
}
|
||||
|
||||
async fn message(&self, ctx: Context, message: Message) {
|
||||
// TODO: Replace with proper management system for linking channels together
|
||||
if let Some(target) = message.content.strip_prefix("phoebe!link ") {
|
||||
if message
|
||||
.member(&ctx)
|
||||
|
@ -100,6 +101,16 @@ impl EventHandler for DiscordHandler {
|
|||
author: get_message_author(&ctx, &message).await,
|
||||
replies_to,
|
||||
})));
|
||||
|
||||
for attachment in message.attachments.iter() {
|
||||
let _ = self
|
||||
.event_tx
|
||||
.send(MessageEvent::SendImage(Box::new(SentImageMessage {
|
||||
source: MessageReference::from(&message),
|
||||
author: get_message_author(&ctx, &message).await,
|
||||
image_url: attachment.proxy_url.clone(),
|
||||
})));
|
||||
}
|
||||
}
|
||||
|
||||
async fn message_update(
|
||||
|
|
|
@ -149,6 +149,7 @@ async fn get_room_message_event(
|
|||
}
|
||||
|
||||
async fn on_room_message_event(
|
||||
client: Client,
|
||||
ctx: Arc<MatrixHandler>,
|
||||
event: SyncMessageEvent<MessageEventContent>,
|
||||
room: Room,
|
||||
|
@ -157,12 +158,13 @@ async fn on_room_message_event(
|
|||
if let Some(Relation::Replacement(replacement)) = &event.content.relates_to {
|
||||
on_message_edited(ctx, &event, room, replacement).await;
|
||||
} else {
|
||||
on_message_sent(ctx, &event, room).await;
|
||||
on_message_sent(client, ctx, &event, room).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn on_message_sent(
|
||||
client: Client,
|
||||
ctx: Arc<MatrixHandler>,
|
||||
event: &SyncMessageEvent<MessageEventContent>,
|
||||
room: Joined,
|
||||
|
@ -226,8 +228,15 @@ async fn on_message_sent(
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: Handle encrypted image uploads (we will have to decrypt it and upload it somewhere)
|
||||
matrix_sdk::media::MediaType::Encrypted(_encrypted_file) => None,
|
||||
matrix_sdk::media::MediaType::Encrypted(encrypted_file) => {
|
||||
if let Some(file_data) =
|
||||
client.get_file(content.clone(), true).await.ok().flatten()
|
||||
{
|
||||
todo!("Reupload encrypted file to publicly accessible URL")
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
None
|
||||
|
@ -461,7 +470,9 @@ pub async fn create_matrix_client(
|
|||
|
||||
let on_msg_ctx = event_handler.clone();
|
||||
client
|
||||
.register_event_handler(move |ev, room| on_room_message_event(on_msg_ctx.clone(), ev, room))
|
||||
.register_event_handler(move |ev, room| {
|
||||
on_room_message_event(client.clone(), on_msg_ctx.clone(), ev, room)
|
||||
})
|
||||
.await;
|
||||
|
||||
let on_redact_ctx = event_handler.clone();
|
||||
|
|
Loading…
Reference in New Issue