70 lines
2.4 KiB
Rust
70 lines
2.4 KiB
Rust
// Copyright (c) 2019 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
|
|
//
|
|
// 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<String> = args().collect();
|
|
if args.len() != 3 {
|
|
println!("Usage: {} <jid> <password>", 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|