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