Re-add message_log example

This commit is contained in:
Jonas Platte 2019-07-20 20:34:52 +02:00
parent b21b1cec8f
commit 489be83a57

59
examples/message_log.rs Normal file
View File

@ -0,0 +1,59 @@
#![feature(async_await)]
use std::{env, process::exit};
use futures::stream::{StreamExt as _, TryStreamExt as _};
use ruma_events::collections::all::RoomEvent;
use ruma_events::room::message::{MessageEvent, MessageEventContent, TextMessageEventContent};
use url::Url;
async fn log_messages(
homeserver_url: Url,
username: String,
password: String,
) -> Result<(), ruma_client::Error> {
let client = ruma_client::Client::new(homeserver_url, None);
client.log_in(username, password, None).await?;
// vvvvvvvv Skip initial sync reponse
let mut sync_stream = Box::pin(client.sync(None, None, false).skip(1));
while let Some(res) = sync_stream.try_next().await? {
// Only look at rooms the user hasn't left yet
for (room_id, room) in res.rooms.join {
for event in room.timeline.events {
// Filter out the text messages
if let RoomEvent::RoomMessage(MessageEvent {
content:
MessageEventContent::Text(TextMessageEventContent { body: msg_body, .. }),
sender,
..
}) = event
{
println!("{:?} in {:?}: {}", sender, room_id, msg_body);
}
}
}
}
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), ruma_client::Error> {
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)
}
};
let server = Url::parse(&homeserver_url).unwrap();
log_messages(server, username, password).await
}