2.diff (9871B)
1 diff --git a/example-bot/Cargo.toml b/example-bot/Cargo.toml 2 index 6fb9533..ffbc3df 100644 3 --- a/example-bot/Cargo.toml 4 +++ b/example-bot/Cargo.toml 5 @@ -1,13 +1,14 @@ 6 +cargo-features = ["edition2021"] 7 [package] 8 name = "example-bot" 9 version = "0.1.0" 10 authors = ["MTRNord <mtrnord1@gmail.com>"] 11 -edition = "2018" 12 +edition = "2021" 13 14 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 15 16 [dependencies.matrix-sdk] 17 -version = "0.2" 18 +version = "0.3" 19 20 [dependencies] 21 mrsbfh = {path = "../mrsbfh"} 22 @@ -15,8 +16,9 @@ serde = "1.0" 23 tracing = "0.1" 24 tracing-subscriber = "0.2" 25 tracing-futures = "0.2.4" 26 -tokio = { version = "0.2", features = ["full"] } 27 -clap = "3.0.0-beta.2" 28 +tokio = { version = "1", features = ["full"] } 29 +clap = "=3.0.0-beta.2" 30 +clap_derive = "=3.0.0-beta.2" 31 async-trait = "0.1.41" 32 thiserror = "1.0" 33 regex = "1.4.3" 34 diff --git a/example-bot/src/matrix/mod.rs b/example-bot/src/matrix/mod.rs 35 index 4e2caa7..61c8e18 100644 36 --- a/example-bot/src/matrix/mod.rs 37 +++ b/example-bot/src/matrix/mod.rs 38 @@ -51,7 +51,7 @@ pub async fn setup(config: Config<'_>) -> Result<Client, Box<dyn Error>> { 39 Ok(login_response) => { 40 info!("Session: {:#?}", login_response); 41 let session = Session { 42 - homeserver: client.homeserver().to_string(), 43 + homeserver: client.homeserver().await.to_string(), 44 user_id: login_response.user_id.to_string(), 45 access_token: login_response.access_token, 46 device_id: login_response.device_id.into(), 47 @@ -73,7 +73,7 @@ pub async fn start_sync( 48 config: Config<'static>, 49 ) -> Result<(), Box<dyn Error>> { 50 client 51 - .add_event_emitter(Box::new(sync::Bot::new(client.clone(), config.clone()))) 52 + .set_event_handler(Box::new(sync::Bot::new(client.clone(), config.clone()))) 53 .await; 54 55 info!("Starting full Sync..."); 56 diff --git a/example-bot/src/matrix/sync.rs b/example-bot/src/matrix/sync.rs 57 index 2ee388a..e10c999 100644 58 --- a/example-bot/src/matrix/sync.rs 59 +++ b/example-bot/src/matrix/sync.rs 60 @@ -6,7 +6,7 @@ use matrix_sdk::{ 61 room::member::MemberEventContent, room::message::MessageEventContent, StrippedStateEvent, 62 SyncMessageEvent, 63 }, 64 - Client, EventEmitter, SyncRoom, 65 + Client, EventHandler, room::Room, 66 }; 67 use tokio::sync::mpsc; 68 use tracing::*; 69 @@ -29,14 +29,14 @@ impl Bot { 70 #[mrsbfh::commands::commands] 71 #[mrsbfh::utils::autojoin] 72 #[async_trait] 73 -impl EventEmitter for Bot { 74 - async fn on_room_message(&self, room: SyncRoom, event: &SyncMessageEvent<MessageEventContent>) { 75 +impl EventHandler for Bot { 76 + async fn on_room_message(&self, room: Room, event: &SyncMessageEvent<MessageEventContent>) { 77 println!("message example") 78 } 79 80 async fn on_stripped_state_member( 81 &self, 82 - room: SyncRoom, 83 + room: Room, 84 room_member: &StrippedStateEvent<MemberEventContent>, 85 _: Option<MemberEventContent>, 86 ) { 87 diff --git a/mrsbfh-macros/Cargo.toml b/mrsbfh-macros/Cargo.toml 88 index 2b94b30..cfd0e22 100644 89 --- a/mrsbfh-macros/Cargo.toml 90 +++ b/mrsbfh-macros/Cargo.toml 91 @@ -1,8 +1,9 @@ 92 +cargo-features = ["edition2021"] 93 [package] 94 name = "mrsbfh-macros" 95 version = "0.1.0" 96 authors = ["MTRNord <mtrnord1@gmail.com>"] 97 -edition = "2018" 98 +edition = "2021" 99 100 [lib] 101 proc-macro = true 102 diff --git a/mrsbfh-macros/src/lib.rs b/mrsbfh-macros/src/lib.rs 103 index 58732b8..8597ff5 100644 104 --- a/mrsbfh-macros/src/lib.rs 105 +++ b/mrsbfh-macros/src/lib.rs 106 @@ -103,10 +103,9 @@ pub fn command_generate(args: TokenStream, input: TokenStream) -> TokenStream { 107 }); 108 let mut help_format_string = String::from("{}"); 109 input.variants.iter().for_each(|_| { 110 - help_format_string = format!("{}{}", help_format_string,"{}"); 111 + help_format_string = format!("{}{}", help_format_string, "{}"); 112 }); 113 114 - 115 let bot_name = match get_arg( 116 input.span(), 117 args.clone(), 118 @@ -230,47 +229,41 @@ pub fn autojoin(_: TokenStream, input: TokenStream) -> TokenStream { 119 if method.sig.ident == "on_stripped_state_member" { 120 let original = method.block.clone(); 121 let new_block = syn::parse_quote! { 122 - { 123 - #original 124 + { 125 + #original 126 127 - // Autojoin logic 128 - if room_member.state_key != self.client.user_id().await.unwrap() { 129 - warn!("Got invite that isn't for us"); 130 - return; 131 - } 132 - if let matrix_sdk::SyncRoom::Invited(room) = room { 133 - let room_id = { 134 - let room = room.read().await; 135 - room.room_id.clone() 136 - }; 137 - let client = self.client.clone(); 138 - 139 - tokio::spawn(async move { 140 - info!("Autojoining room {}", room_id); 141 + // Autojoin logic 142 + if room_member.state_key != self.client.user_id().await.unwrap() { 143 + warn!("Got invite that isn't for us"); 144 + return; 145 + } 146 + if let matrix_sdk::room::Room::Invited(room) = room { 147 + info!("Autojoining room {}", room.room_id()); 148 let mut delay = 2; 149 150 - while let Err(err) = client.join_room_by_id(&room_id).await { 151 + while let Err(err) = room.accept_invitation().await { 152 // retry autojoin due to synapse sending invites, before the 153 // invited user can join for more information see 154 // https://github.com/matrix-org/synapse/issues/4345 155 error!( 156 "Failed to join room {} ({:?}), retrying in {}s", 157 - room_id, err, delay 158 + room.room_id(), 159 + err, 160 + delay 161 ); 162 163 - tokio::time::delay_for(tokio::time::Duration::from_secs(delay)).await; 164 + tokio::time::sleep(tokio::time::Duration::from_secs(delay)).await; 165 delay *= 2; 166 167 if delay > 3600 { 168 - error!("Can't join room {} ({:?})", room_id, err); 169 + error!("Can't join room {} ({:?})", room.room_id(), err); 170 break; 171 } 172 } 173 - info!("Successfully joined room {}", room_id); 174 - }); 175 + info!("Successfully joined room {}", room.room_id()); 176 + } 177 } 178 - } 179 - }; 180 + }; 181 method.block = new_block; 182 } 183 } 184 @@ -315,9 +308,12 @@ pub fn commands(_: TokenStream, input: TokenStream) -> TokenStream { 185 #original 186 187 // Command matching logic 188 - if let matrix_sdk::SyncRoom::Joined(room) = room { 189 + if let matrix_sdk::room::Room::Joined(room) = room { 190 let msg_body = if let matrix_sdk::events::SyncMessageEvent { 191 - content: matrix_sdk::events::room::message::MessageEventContent::Text(matrix_sdk::events::room::message::TextMessageEventContent { body: msg_body, .. }), 192 + content: matrix_sdk::events::room::message::MessageEventContent { 193 + msgtype: matrix_sdk::events::room::message::MessageType::Text(matrix_sdk::events::room::message::TextMessageEventContent { body: msg_body, .. }), 194 + .. 195 + }, 196 .. 197 } = event 198 { 199 @@ -332,7 +328,7 @@ pub fn commands(_: TokenStream, input: TokenStream) -> TokenStream { 200 let sender = event.sender.clone().to_string(); 201 202 let (tx, mut rx) = mpsc::channel(100); 203 - let room_id = room.read().await.clone().room_id; 204 + let room_id = room.room_id(); 205 206 let cloned_config = self.config.clone(); 207 let cloned_client = self.client.clone(); 208 diff --git a/mrsbfh/Cargo.toml b/mrsbfh/Cargo.toml 209 index 3ba15e5..f64056c 100644 210 --- a/mrsbfh/Cargo.toml 211 +++ b/mrsbfh/Cargo.toml 212 @@ -1,13 +1,14 @@ 213 +cargo-features = ["edition2021"] 214 [package] 215 name = "mrsbfh" 216 version = "0.1.0" 217 authors = ["MTRNord <mtrnord1@gmail.com>"] 218 -edition = "2018" 219 +edition = "2021" 220 221 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 222 223 [dependencies.matrix-sdk] 224 -version = "0.2" 225 +version = "0.3" 226 227 [dependencies] 228 url = "2.2.1" 229 @@ -17,7 +18,7 @@ thiserror = "1.0" 230 # Command macros 231 mrsbfh-macros = {path = "../mrsbfh-macros", optional = true} 232 233 -tokio = { version = "0.2", features = ["full"] } 234 +tokio = { version = "1", features = ["full"] } 235 tracing = "0.1" 236 237 serde = "1.0"