labadoor-matrix: Initial commit
This commit is contained in:
parent
6b575b1807
commit
ebeed8dcee
3 changed files with 63 additions and 0 deletions
4
Cargo.toml
Normal file
4
Cargo.toml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"labadoor-matrix",
|
||||||
|
]
|
12
labadoor-matrix/Cargo.toml
Normal file
12
labadoor-matrix/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[package]
|
||||||
|
name = "labadoor-matrix"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
license = "AGPL-3.0-or-later"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
matrix-sdk = { version = "0.4.1", features = ["encryption"] }
|
||||||
|
tokio = { version = "1.12.0", features = ["rt-multi-thread", "macros"] }
|
||||||
|
|
||||||
|
[target.armv7-unknown-linux-musleabihf.dependencies]
|
||||||
|
openssl-sys = { version = "0.9.67", features = ["vendored"] }
|
47
labadoor-matrix/src/main.rs
Normal file
47
labadoor-matrix/src/main.rs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
use matrix_sdk::{
|
||||||
|
Client, SyncSettings, Result,
|
||||||
|
ruma::{UserId, events::{SyncMessageEvent, room::message::{MessageEventContent, MessageType, TextMessageEventContent,}}},
|
||||||
|
room::Room,
|
||||||
|
};
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn on_room_message(event: SyncMessageEvent<MessageEventContent>, room: Room) {
|
||||||
|
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());
|
||||||
|
let content = MessageEventContent::text_plain("Open sesame!");
|
||||||
|
room.send(content, None).await.unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<()> {
|
||||||
|
let username = std::env::var("LABADOOR_MATRIX_USERNAME").expect("LABADOOR_MATRIX_USERNAME not set");
|
||||||
|
let password = std::env::var("LABADOOR_MATRIX_PASSWORD").expect("LABADOOR_MATRIX_PASSWORD not set");
|
||||||
|
|
||||||
|
let user = UserId::try_from(username)?;
|
||||||
|
let client = Client::new_from_user_id(user.clone()).await?;
|
||||||
|
|
||||||
|
client.login(user.localpart(), &password, None, None).await?;
|
||||||
|
client.sync_once(SyncSettings::default()).await.unwrap();
|
||||||
|
client.register_event_handler(on_room_message).await;
|
||||||
|
let settings = SyncSettings::default().token(client.sync_token().await.unwrap());
|
||||||
|
client.sync(settings).await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue