From 3844204a04b174ba18903717525a1b43ea575dfb Mon Sep 17 00:00:00 2001 From: ErrorNoInternet <error.nointernet@gmail.com> Date: Fri, 27 Jan 2023 19:58:24 +0800 Subject: [PATCH] Add Matrix support (part 1) --- src/matrix.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/matrix.rs diff --git a/src/matrix.rs b/src/matrix.rs new file mode 100644 index 0000000..6568b33 --- /dev/null +++ b/src/matrix.rs @@ -0,0 +1,44 @@ +use crate::log_message; +use crate::logging::LogMessageType::*; +use matrix_sdk::config::SyncSettings; +use matrix_sdk::room::Room; +use matrix_sdk::ruma::events::room::message::{ + MessageType, OriginalSyncRoomMessageEvent, RoomMessageEventContent, +}; + +pub async fn login_and_sync( + homeserver: String, + username: String, + password: String, +) -> anyhow::Result<()> { + let mut client_builder = matrix_sdk::Client::builder().homeserver_url(homeserver); + client_builder = client_builder.sled_store("matrix-store", None); + let client = client_builder.build().await.unwrap(); + client + .login_username(&username, &password) + .initial_device_display_name("ErrorNoWatcher") + .await?; + log_message(Matrix, &format!("Logging in as {}...", username)); + let response = match client.sync_once(SyncSettings::default()).await { + Ok(response) => response, + Err(error) => return Err(error.into()), + }; + client.add_event_handler(room_message_handler); + let settings = SyncSettings::default().token(response.next_batch); + client.sync(settings).await?; + + Ok(()) +} + +async fn room_message_handler(event: OriginalSyncRoomMessageEvent, room: Room) { + if let Room::Joined(room) = room { + let MessageType::Text(text_content) = event.content.msgtype else { + return; + }; + + if text_content.body.contains("!party") { + let content = RoomMessageEventContent::text_plain("🎉🎊🥳 let's PARTY!! 🥳🎊🎉"); + room.send(content, None).await.unwrap(); + } + } +}