labadoor/labadoor-matrix/src/lib.rs

57 lines
1.8 KiB
Rust
Raw Normal View History

2021-11-27 23:24:09 +02:00
use matrix_sdk::{
2023-11-16 19:26:22 +02:00
config::SyncSettings,
2021-11-27 23:24:09 +02:00
room::Room,
2023-11-16 19:26:22 +02:00
ruma::{
events::room::message::{
MessageType, OriginalSyncRoomMessageEvent, RoomMessageEventContent,
TextMessageEventContent,
},
UserId,
},
Client,
2021-11-27 23:24:09 +02:00
};
fn open(param: String) {
use std::process::Command;
use std::io::{self, Write};
let mut cmd = Command::new("/usr/local/bin/doorlock");
cmd.arg("matrix").arg(param);
let out = cmd.output().expect("Could not run command");
io::stdout().write_all(&out.stdout).unwrap();
}
2023-11-16 19:26:22 +02:00
async fn on_room_message(event: OriginalSyncRoomMessageEvent, room: Room) {
2021-11-27 23:24:09 +02:00
if let Room::Joined(room) = room {
let msg_body = match event.content.msgtype {
MessageType::Text(TextMessageEventContent { body, .. }) => body,
_ => return,
};
if msg_body == "1" {
open(event.sender.to_string());
2023-11-16 19:26:22 +02:00
let content = RoomMessageEventContent::text_plain("Open sesame!");
2021-11-27 23:24:09 +02:00
room.send(content, None).await.unwrap();
}
2023-11-15 20:52:19 +02:00
if msg_body == "ping" {
2023-11-16 19:26:22 +02:00
let content = RoomMessageEventContent::text_plain("Pong!");
2023-11-15 20:52:19 +02:00
room.send(content, None).await.unwrap();
}
2021-11-27 23:24:09 +02:00
}
}
#[tokio::main]
pub async fn matrix(username: String, password: String) {
2023-11-16 19:26:22 +02:00
let user = <&UserId>::try_from(username.as_str()).unwrap();
let client = Client::builder()
.server_name(user.server_name())
.build()
.await
.unwrap();
client.login_username(user, &password).send().await.unwrap();
2021-11-27 23:24:09 +02:00
client.sync_once(SyncSettings::default()).await.unwrap();
2023-11-16 19:26:22 +02:00
client.add_event_handler(on_room_message);
2021-11-27 23:24:09 +02:00
let settings = SyncSettings::default().token(client.sync_token().await.unwrap());
client.sync(settings).await;
}