While it's generally useful to watch what the sdk is sending out during development using mitmproxy, users of the sdk might wonder why the example doesn't connect. Remove the proxy usage until we add a cli parser which can enable proxy support with a command line switch.
74 lines
2 KiB
Rust
74 lines
2 KiB
Rust
use std::{env, process::exit};
|
|
use url::Url;
|
|
|
|
use matrix_sdk::{
|
|
self, async_trait,
|
|
events::{
|
|
room::message::{MessageEventContent, TextMessageEventContent},
|
|
SyncMessageEvent,
|
|
},
|
|
Client, EventEmitter, RoomState, SyncSettings,
|
|
};
|
|
|
|
struct EventCallback;
|
|
|
|
#[async_trait]
|
|
impl EventEmitter for EventCallback {
|
|
async fn on_room_message(
|
|
&self,
|
|
room: RoomState,
|
|
event: &SyncMessageEvent<MessageEventContent>,
|
|
) {
|
|
if let RoomState::Joined(room) = room {
|
|
if let SyncMessageEvent {
|
|
content: MessageEventContent::Text(TextMessageEventContent { body: msg_body, .. }),
|
|
sender,
|
|
..
|
|
} = event
|
|
{
|
|
let member = room.get_member(&sender).await.unwrap().unwrap();
|
|
let name = member
|
|
.display_name()
|
|
.unwrap_or_else(|| member.user_id().as_str());
|
|
println!("{}: {}", name, msg_body);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
async fn login(
|
|
homeserver_url: String,
|
|
username: &str,
|
|
password: &str,
|
|
) -> Result<(), matrix_sdk::Error> {
|
|
let homeserver_url = Url::parse(&homeserver_url).expect("Couldn't parse the homeserver URL");
|
|
let client = Client::new(homeserver_url).unwrap();
|
|
|
|
client.add_event_emitter(Box::new(EventCallback)).await;
|
|
|
|
client
|
|
.login(username, password, None, Some("rust-sdk"))
|
|
.await?;
|
|
client.sync(SyncSettings::new()).await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), matrix_sdk::Error> {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let (homeserver_url, username, password) =
|
|
match (env::args().nth(1), env::args().nth(2), env::args().nth(3)) {
|
|
(Some(a), Some(b), Some(c)) => (a, b, c),
|
|
_ => {
|
|
eprintln!(
|
|
"Usage: {} <homeserver_url> <username> <password>",
|
|
env::args().next().unwrap()
|
|
);
|
|
exit(1)
|
|
}
|
|
};
|
|
|
|
login(homeserver_url, &username, &password).await
|
|
}
|