utils.rs
1 use std::future::Future; 2 3 use matrix_sdk::{ 4 Room, 5 ruma::{ 6 api::client::message::send_message_event, 7 events::room::message::{OriginalRoomMessageEvent, Relation, RoomMessageEventContent}, 8 }, 9 }; 10 11 pub trait RoomExt { 12 fn reply_to( 13 &self, 14 event: &OriginalRoomMessageEvent, 15 content: RoomMessageEventContent, 16 ) -> impl Future<Output = Result<send_message_event::v3::Response, matrix_sdk::Error>> + Send; 17 } 18 19 impl RoomExt for Room { 20 async fn reply_to( 21 &self, 22 event: &OriginalRoomMessageEvent, 23 mut content: RoomMessageEventContent, 24 ) -> Result<send_message_event::v3::Response, matrix_sdk::Error> { 25 content.relates_to = event 26 .content 27 .relates_to 28 .as_ref() 29 .filter(|rl| matches!(rl, Relation::Thread(_))) 30 .cloned(); 31 self.send(content).await 32 } 33 } 34 35 pub fn message(text: impl AsRef<str> + Into<String>) -> RoomMessageEventContent { 36 RoomMessageEventContent::text_markdown(text) 37 } 38 39 pub fn notice(text: impl AsRef<str> + Into<String>) -> RoomMessageEventContent { 40 RoomMessageEventContent::notice_markdown(text) 41 } 42 43 pub fn html_notice(text: impl Into<String> + Clone) -> RoomMessageEventContent { 44 RoomMessageEventContent::notice_html(text.clone(), text) 45 } 46 47 pub fn html_message(html: impl Into<String> + Clone) -> RoomMessageEventContent { 48 RoomMessageEventContent::text_html(html.clone(), html) 49 } 50 51 pub fn error_message(text: impl AsRef<str>) -> RoomMessageEventContent { 52 message(format!("❌ Error: {}", text.as_ref())) 53 }