diff --git a/src/matrix.rs b/src/matrix.rs index 5e7c3fd7edbec359d200b73304115f2ab73a1465..6fbb1c7e38eb92ce33f996612a8ded7a2045e1c3 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -10,7 +10,8 @@ use matrix_sdk::{ push_rules::PushRulesEvent, room::message::{MessageEventContent, MessageType, TextMessageEventContent}, room::topic::TopicEventContent, - AnyRoomEvent, AnySyncRoomEvent, StateEvent, SyncMessageEvent, SyncStateEvent, + AnyMessageEventContent, AnyRoomEvent, AnySyncRoomEvent, StateEvent, SyncMessageEvent, + SyncStateEvent, }, Int, MilliSecondsSinceUnixEpoch, UserId, }, @@ -22,16 +23,15 @@ async fn on_room_message( room: Room, _encryption_info: Option<EncryptionInfo>, ) { + let sender_id = ev.sender; + let own_id = room.own_user_id(); + if sender_id.as_str() == own_id.as_str() { return; } + 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(), @@ -40,23 +40,30 @@ async fn on_room_message( "===\n\ JOINED-ROOM: {}\n\ ROOM-NAME: {}\n\ - READ-RECEIPT: {}\n\ FROM: {}\n\ MSG: {}", room.room_id(), room_name, - read_receipt, - ev.sender, + sender_id, body ); + let content = + AnyMessageEventContent::RoomMessage(MessageEventContent::text_plain("Hello world")); + room.send(content, None).await.unwrap(); + } +} + +fn log_joined_rooms(client: &Client) { + for room in client.joined_rooms() { + println!("Got joined room: <{}>", room.name().unwrap()); } + } pub async fn connect_and_handle(config: Config) -> Result<()> { let alice = UserId::try_from(config.user_name)?; let client = Client::new(config.homeserver_url)?; - // Login client .login( alice.localpart(), @@ -67,10 +74,9 @@ pub async fn connect_and_handle(config: Config) -> Result<()> { .await?; println!("Logged as: {}", alice); - // Don't respond to old messages client.sync_once(SyncSettings::default()).await?; + log_joined_rooms(&client); - // https://docs.rs/ruma/0.4.0/ruma/events/enum.AnySyncMessageEvent.html client.register_event_handler(on_room_message).await; println!("Entering sync loop");