use std::fs; use tokio_xmpp::SimpleClient; use xmpp_parsers::message::{Body, Message, MessageType}; use xmpp_parsers::{Element, Jid}; const CREDS: &str = "creds"; #[tokio::main] async fn main() { let creds = fs::read_to_string(CREDS) .expect("Should have been able to read the file"); let mut creds = creds.lines(); let (jid, password) = (creds.next().expect("No JID"), creds.next().expect("No Pass")); let recipients = vec!["suguivy@fai.st", "bizcochito@fai.st", "bizcochito@cronut.cafe"]; xmp(jid, password, "Hi from the main", recipients).await; } async fn xmp(jid: &str, password: &str, data: &str, recipients: Vec<&str>) { let data = data.trim(); if data.is_empty() {/* don't send empty stanzas*/ return;} let mut client = SimpleClient::new(jid, password).await.expect("could not connect to xmpp server"); for recipient in recipients{ let recipient = recipient.parse::().unwrap(); let reply = make_reply(recipient.clone(), &data, false); client.send_stanza(reply).await.expect("sending message failed"); } // Close SimpleClient connection client.end().await.ok(); // ignore errors here, I guess } fn make_reply(to: Jid, body: &str, groupchat: bool) -> Element { let mut message = Message::new(Some(to)); if groupchat { message.type_ = MessageType::Groupchat; } message.bodies.insert(String::new(), Body(body.to_owned())); message.into() }