48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use std::{fs, thread};
|
|
use tokio_xmpp::SimpleClient;
|
|
use xmpp_parsers::message::{Body, Message};
|
|
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"];
|
|
|
|
xmp(
|
|
jid,
|
|
password,
|
|
format!("Hi from the {}", thread::current().name().unwrap()).as_str(),
|
|
recipients,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
async fn xmp(jid: &str, password: &str, data: &str, recipients: Vec<&str>) {
|
|
let data = data.trim();
|
|
if data.is_empty() {return;} // don't send empty stanzas
|
|
let mut client = SimpleClient::new(jid, password)
|
|
.await
|
|
.expect("could not connect to xmpp server");
|
|
for recipient in recipients {
|
|
let recipient = recipient.parse::<Jid>().unwrap();
|
|
let reply = make_reply(recipient.clone(), &data);
|
|
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) -> Element {
|
|
let mut message = Message::new(Some(to));
|
|
message.bodies.insert(String::new(), Body(body.to_owned()));
|
|
message.into()
|
|
} |