Skip to content

Commit

Permalink
Implement render-file command
Browse files Browse the repository at this point in the history
  • Loading branch information
haecker-felix committed Jun 26, 2021
1 parent 86d1699 commit 254d2c4
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 0 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ pretty_env_logger = "0.4"
chrono = "0.4"
regex = "1.5"
rand = "0.8"
mime = "0.3"
48 changes: 48 additions & 0 deletions src/bot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ use matrix_sdk::RoomMember;
use matrix_sdk::SyncSettings;
use matrix_sdk_common::uuid::Uuid;
use ruma::events::reaction::ReactionEventContent;
use ruma::events::room::message::FileMessageEventContent;
use ruma::events::room::message::MessageType;
use ruma::events::room::redaction::SyncRedactionEvent;
use ruma::events::SyncMessageEvent;
use ruma::EventId;
use ruma::MxcUri;
use ruma::RoomId;
use ruma::UserId;

Expand Down Expand Up @@ -115,6 +118,26 @@ impl Bot {
.await
.expect("Unable to send message");
}

/// Simplified method for sending a file
async fn send_file(&self, url: MxcUri, filename: String, admin_room: bool) {
debug!("Send file (url: {:?}, admin-room: {:?})", url, admin_room);

let file_content = FileMessageEventContent::plain(filename, url, None);
let msgtype = MessageType::File(file_content);
let content = AnyMessageEventContent::RoomMessage(MessageEventContent::new(msgtype));
let txn_id = Uuid::new_v4();

let room = if admin_room {
&self.admin_room
} else {
&self.reporting_room
};

room.send(content, Some(txn_id))
.await
.expect("Unable to send file");
}
}

// Setup EventHandler to handle incoming matrix events
Expand Down Expand Up @@ -419,6 +442,7 @@ impl EventCallback {

match command {
"!render-message" => self.render_message_command(member).await,
"!render-file" => self.render_file_command(member).await,
"!status" => self.status_command().await,
"!show-config" => self.show_config_command().await,
"!clear" => self.clear_command().await,
Expand Down Expand Up @@ -491,6 +515,30 @@ impl EventCallback {
self.0.send_message(&rendered, true, true).await;
}

async fn render_file_command(&self, editor: &RoomMember) {
let rendered = {
let bot = self.0.client.user_id().await.unwrap();

let news_store = self.0.news_store.lock().unwrap();
let news = news_store.get_news();
let config = self.0.config.clone();

render::render(news, config, editor, &bot)
};
let mut bytes = rendered.as_bytes();

let response = self
.0
.client
.upload(&mime::TEXT_PLAIN_UTF_8, &mut bytes)
.await
.expect("Can't upload rendered file.");

self.0
.send_file(response.content_uri, "rendered.md".to_string(), true)
.await;
}

async fn clear_command(&self) {
let msg = {
let mut news_store = self.0.news_store.lock().unwrap();
Expand Down

0 comments on commit 254d2c4

Please sign in to comment.