// Copyright (c) 2019 Emmanuel Gil Peyrot // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. use std::env::args; use std::str::FromStr; use tokio_xmpp::jid::BareJid; use xmpp::muc::room::RoomMessageSettings; use xmpp::{ClientBuilder, ClientFeature, ClientType, Event}; #[tokio::main] async fn main() -> Result<(), Option<()>> { env_logger::init(); let args: Vec = args().collect(); if args.len() != 3 { println!("Usage: {} ", args[0]); return Err(None); } let jid = BareJid::from_str(&args[1]).expect(&format!("Invalid JID: {}", &args[1])); let password = &args[2]; // Client instance let mut client = ClientBuilder::new(jid, password) .set_client(ClientType::Bot, "xmpp-rs") .set_website("https://gitlab.com/xmpp-rs/xmpp-rs") .set_default_nick("bot") .enable_feature(ClientFeature::ContactList) .enable_feature(ClientFeature::JoinRooms) .build(); loop { for event in client.wait_for_events().await { match event { Event::Online => { log::info!("Online."); } Event::Disconnected(e) => { log::info!("Disconnected: {}.", e); } Event::ChatMessage(_id, jid, body, time_info) => { log::info!( "{} {}: {}", time_info.received.time().format("%H:%M"), jid, body.0 ); } Event::RoomJoined(jid) => { log::info!("Joined room {}.", jid); client .send_room_message(RoomMessageSettings::new(jid, "Hello world!")) .await; } Event::RoomMessage(_id, jid, nick, body, time_info) => { println!( "Message in room {} from {} at {}: {}", jid, nick, time_info.received, body.0 ); } _ => { log::debug!("Unimplemented event:\n{:#?}", event); } } } } }