From 059a1080c4c26b8f17749c99ec47a49104e13c0f Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Sun, 12 Dec 2021 21:42:15 +0100 Subject: [PATCH] Get important information on messages in joined rooms --- src/matrix.rs | 56 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/matrix.rs b/src/matrix.rs index 74c4f69..5e7c3fd 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -6,15 +6,52 @@ use matrix_sdk::{ room::Room, ruma::{ events::{ - macros::EventContent, push_rules::PushRulesEvent, room::message::MessageEventContent, - room::topic::TopicEventContent, AnyRoomEvent, AnySyncRoomEvent, StateEvent, - SyncMessageEvent, SyncStateEvent, + macros::EventContent, + push_rules::PushRulesEvent, + room::message::{MessageEventContent, MessageType, TextMessageEventContent}, + room::topic::TopicEventContent, + AnyRoomEvent, AnySyncRoomEvent, StateEvent, SyncMessageEvent, SyncStateEvent, }, Int, MilliSecondsSinceUnixEpoch, UserId, }, Client, LoopCtrl, Result, RoomInfo, SyncSettings, }; +async fn on_room_message( + ev: SyncMessageEvent<MessageEventContent>, + room: Room, + _encryption_info: Option<EncryptionInfo>, +) { + if let Room::Joined(room) = room { + let room_name = match room.name() { + Some(n) => "<".to_string() + &n + ">", + None => "<--none-->".to_string(), + }; + let read_receipt = match room.user_read_receipt(room.own_user_id()).await { + Ok(Some((_ev_id, _receipt))) => "receipt".to_string(), + Err(e) => e.to_string(), + Ok(None) => "None".to_string(), + }; + let body = match ev.content.msgtype { + MessageType::Text(TextMessageEventContent { body, .. }) => "Text: ".to_string() + &body, + _ => "Unsupported type".to_string(), + }; + println!( + "===\n\ + JOINED-ROOM: {}\n\ + ROOM-NAME: {}\n\ + READ-RECEIPT: {}\n\ + FROM: {}\n\ + MSG: {}", + room.room_id(), + room_name, + read_receipt, + ev.sender, + body + ); + } +} + pub async fn connect_and_handle(config: Config) -> Result<()> { let alice = UserId::try_from(config.user_name)?; let client = Client::new(config.homeserver_url)?; @@ -34,18 +71,7 @@ pub async fn connect_and_handle(config: Config) -> Result<()> { client.sync_once(SyncSettings::default()).await?; // https://docs.rs/ruma/0.4.0/ruma/events/enum.AnySyncMessageEvent.html - client - .register_event_handler( - |ev: SyncMessageEvent<MessageEventContent>, - room: Room, - encryption_info: Option<EncryptionInfo>| async move { - println!( - "---\nROOM: {:?}\nENC: {:?}\nSME: {:?}", - room, encryption_info, ev - ); - }, - ) - .await; + client.register_event_handler(on_room_message).await; println!("Entering sync loop"); let token = client.sync_token().await.unwrap(); -- GitLab