mrsbfh

Matrix-Rust-SDK-Bot-Framework-Helper
git clone git://archive.git.mtrnord.blog/MTRNord/mrsbfh.git
Log | Files | Refs | README

commit 0add5a53852ee976b5f9e108225a233d9bb57690
parent 8f4e269165091d6b9542f372410162f7fe34f61e
Author: MTRNord <mtrnord1@gmail.com>
Date:   Wed,  8 Sep 2021 19:42:41 +0200

Update to matrix-sdk 0.3

Diffstat:
Mexample-bot/Cargo.toml | 4++--
Mexample-bot/src/matrix/mod.rs | 4++--
Mexample-bot/src/matrix/sync.rs | 8++++----
Mmrsbfh-macros/src/lib.rs | 54+++++++++++++++++++++++++-----------------------------
Mmrsbfh/Cargo.toml | 4++--
5 files changed, 35 insertions(+), 39 deletions(-)

diff --git a/example-bot/Cargo.toml b/example-bot/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies.matrix-sdk] -version = "0.2" +version = "0.3" [dependencies] mrsbfh = {path = "../mrsbfh"} @@ -16,7 +16,7 @@ serde = "1.0" tracing = "0.1" tracing-subscriber = "0.2" tracing-futures = "0.2.4" -tokio = { version = "0.2", features = ["full"] } +tokio = { version = "1", features = ["full"] } clap = "=3.0.0-beta.2" clap_derive = "=3.0.0-beta.2" async-trait = "0.1.41" diff --git a/example-bot/src/matrix/mod.rs b/example-bot/src/matrix/mod.rs @@ -51,7 +51,7 @@ pub async fn setup(config: Config<'_>) -> Result<Client, Box<dyn Error>> { Ok(login_response) => { info!("Session: {:#?}", login_response); let session = Session { - homeserver: client.homeserver().to_string(), + homeserver: client.homeserver().await.to_string(), user_id: login_response.user_id.to_string(), access_token: login_response.access_token, device_id: login_response.device_id.into(), @@ -73,7 +73,7 @@ pub async fn start_sync( config: Config<'static>, ) -> Result<(), Box<dyn Error>> { client - .add_event_emitter(Box::new(sync::Bot::new(client.clone(), config.clone()))) + .set_event_handler(Box::new(sync::Bot::new(client.clone(), config.clone()))) .await; info!("Starting full Sync..."); diff --git a/example-bot/src/matrix/sync.rs b/example-bot/src/matrix/sync.rs @@ -6,7 +6,7 @@ use matrix_sdk::{ room::member::MemberEventContent, room::message::MessageEventContent, StrippedStateEvent, SyncMessageEvent, }, - Client, EventEmitter, SyncRoom, + Client, EventHandler, room::Room, }; use tokio::sync::mpsc; use tracing::*; @@ -29,14 +29,14 @@ impl Bot { #[mrsbfh::commands::commands] #[mrsbfh::utils::autojoin] #[async_trait] -impl EventEmitter for Bot { - async fn on_room_message(&self, room: SyncRoom, event: &SyncMessageEvent<MessageEventContent>) { +impl EventHandler for Bot { + async fn on_room_message(&self, room: Room, event: &SyncMessageEvent<MessageEventContent>) { println!("message example") } async fn on_stripped_state_member( &self, - room: SyncRoom, + room: Room, room_member: &StrippedStateEvent<MemberEventContent>, _: Option<MemberEventContent>, ) { diff --git a/mrsbfh-macros/src/lib.rs b/mrsbfh-macros/src/lib.rs @@ -103,10 +103,9 @@ pub fn command_generate(args: TokenStream, input: TokenStream) -> TokenStream { }); let mut help_format_string = String::from("{}"); input.variants.iter().for_each(|_| { - help_format_string = format!("{}{}", help_format_string,"{}"); + help_format_string = format!("{}{}", help_format_string, "{}"); }); - let bot_name = match get_arg( input.span(), args.clone(), @@ -230,47 +229,41 @@ pub fn autojoin(_: TokenStream, input: TokenStream) -> TokenStream { if method.sig.ident == "on_stripped_state_member" { let original = method.block.clone(); let new_block = syn::parse_quote! { - { - #original + { + #original - // Autojoin logic - if room_member.state_key != self.client.user_id().await.unwrap() { - warn!("Got invite that isn't for us"); - return; - } - if let matrix_sdk::SyncRoom::Invited(room) = room { - let room_id = { - let room = room.read().await; - room.room_id.clone() - }; - let client = self.client.clone(); - - tokio::spawn(async move { - info!("Autojoining room {}", room_id); + // Autojoin logic + if room_member.state_key != self.client.user_id().await.unwrap() { + warn!("Got invite that isn't for us"); + return; + } + if let matrix_sdk::room::Room::Invited(room) = room { + info!("Autojoining room {}", room.room_id()); let mut delay = 2; - while let Err(err) = client.join_room_by_id(&room_id).await { + while let Err(err) = room.accept_invitation().await { // retry autojoin due to synapse sending invites, before the // invited user can join for more information see // https://github.com/matrix-org/synapse/issues/4345 error!( "Failed to join room {} ({:?}), retrying in {}s", - room_id, err, delay + room.room_id(), + err, + delay ); - tokio::time::delay_for(tokio::time::Duration::from_secs(delay)).await; + tokio::time::sleep(tokio::time::Duration::from_secs(delay)).await; delay *= 2; if delay > 3600 { - error!("Can't join room {} ({:?})", room_id, err); + error!("Can't join room {} ({:?})", room.room_id(), err); break; } } - info!("Successfully joined room {}", room_id); - }); + info!("Successfully joined room {}", room.room_id()); + } } - } - }; + }; method.block = new_block; } } @@ -315,9 +308,12 @@ pub fn commands(_: TokenStream, input: TokenStream) -> TokenStream { #original // Command matching logic - if let matrix_sdk::SyncRoom::Joined(room) = room { + if let matrix_sdk::room::Room::Joined(room) = room { let msg_body = if let matrix_sdk::events::SyncMessageEvent { - content: matrix_sdk::events::room::message::MessageEventContent::Text(matrix_sdk::events::room::message::TextMessageEventContent { body: msg_body, .. }), + content: matrix_sdk::events::room::message::MessageEventContent { + msgtype: matrix_sdk::events::room::message::MessageType::Text(matrix_sdk::events::room::message::TextMessageEventContent { body: msg_body, .. }), + .. + }, .. } = event { @@ -332,7 +328,7 @@ pub fn commands(_: TokenStream, input: TokenStream) -> TokenStream { let sender = event.sender.clone().to_string(); let (tx, mut rx) = mpsc::channel(100); - let room_id = room.read().await.clone().room_id; + let room_id = room.room_id(); let cloned_config = self.config.clone(); let cloned_client = self.client.clone(); diff --git a/mrsbfh/Cargo.toml b/mrsbfh/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies.matrix-sdk] -version = "0.2" +version = "0.3" [dependencies] url = "2.2.1" @@ -18,7 +18,7 @@ thiserror = "1.0" # Command macros mrsbfh-macros = {path = "../mrsbfh-macros", optional = true} -tokio = { version = "0.2", features = ["full"] } +tokio = { version = "1", features = ["full"] } tracing = "0.1" serde = "1.0"