diff --git a/pkgs/mx-sanebot/src/main.rs b/pkgs/mx-sanebot/src/main.rs index e7ae9d2d..5afffdf8 100644 --- a/pkgs/mx-sanebot/src/main.rs +++ b/pkgs/mx-sanebot/src/main.rs @@ -49,7 +49,7 @@ enum Event { #[derive(Debug)] enum Action { AcceptInvite(OwnedRoomId), - SendMessage(OwnedRoomId, String), + SendMessage(OwnedRoomId, String /* text */, Option /* html */), } impl Runner { @@ -184,7 +184,7 @@ impl Runner { Event::Invitation(room_id) => Action::AcceptInvite(room_id), Event::Message(room_id, _sender_id, body) => { let resp = MessageHandler.on_msg(&body); - Action::SendMessage(room_id, resp) + Action::SendMessage(room_id, resp.to_string(), resp.html()) } } } @@ -221,10 +221,13 @@ impl Runner { println!("Successfully joined room {}", room.room_id()); }); } - Action::SendMessage(room_id, msg) => { + Action::SendMessage(room_id, text, html) => { let room = self.client.get_joined_room(&room_id).unwrap(); - let resp_content = RoomMessageEventContent::text_plain(&msg); + let resp_content = match html { + None => RoomMessageEventContent::text_plain(&text), + Some(html) => RoomMessageEventContent::text_html(&text, &html), + }; room.send(resp_content, None).await.unwrap(); } } diff --git a/pkgs/mx-sanebot/src/msg_handler.rs b/pkgs/mx-sanebot/src/msg_handler.rs index c2a3b124..22cb93f2 100644 --- a/pkgs/mx-sanebot/src/msg_handler.rs +++ b/pkgs/mx-sanebot/src/msg_handler.rs @@ -151,10 +151,9 @@ impl MessageHandler { /// parse any message directed to me, and return text to present to the user who messaged me. /// the message passed here may or may not be a "valid" request. /// if invalid, expect an error message or help message, still meant for the user. - pub fn on_msg(&self, msg: &str) -> String { + pub fn on_msg(&self, msg: &str) -> Response { let req = self.parse_msg(msg).unwrap_or(Request::Help); - let resp = req.evaluate(); - resp.to_string() + req.evaluate() } fn parse_msg(&self, msg: &str) -> Result { @@ -214,12 +213,31 @@ impl Request { } } -enum Response { +pub enum Response { Help, Bt(String), BtSearch(String), } +impl Response { + pub fn html(&self) -> Option { + match self { + Response::Help => Some( + r#" + commands: +
    +
  • !help => show this message
  • +
  • !bt => show torrent statuses
  • +
  • !bt search <phrase> => search for torrents
  • +
+ "#.to_owned() + ), + // not yet implemented + _ => None, + } + } +} + impl fmt::Display for Response { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { @@ -235,3 +253,4 @@ impl fmt::Display for Response { Ok(()) } } +