From ea3524b29562d66c86769f0584a82483689683e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Br=C3=B6nnimann?= Date: Sun, 26 Mar 2017 22:04:09 +0200 Subject: [PATCH] Ignore messages from the bot user in the admin room --- .../handlers/events/command_handler.rs | 2 -- .../handlers/events/forwarder.rs | 5 ----- .../handlers/events/message_handler.rs | 5 +++++ tests/admin_room.rs | 20 +++++++++++++++++++ tests/forward_matrix_to_rocketchat.rs | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/matrix-rocketchat/handlers/events/command_handler.rs b/src/matrix-rocketchat/handlers/events/command_handler.rs index e607964..df84f2a 100644 --- a/src/matrix-rocketchat/handlers/events/command_handler.rs +++ b/src/matrix-rocketchat/handlers/events/command_handler.rs @@ -74,8 +74,6 @@ impl<'a> CommandHandler<'a> { let rocketchat_server = self.get_rocketchat_server(room, &message)?; self.unbridge(event, &rocketchat_server, &message)?; - } else if event.user_id == self.config.matrix_bot_user_id()? { - debug!(self.logger, "Skipping event from bot user"); } else { let msg = format!("Skipping event, don't know how to handle command `{}`", message); debug!(self.logger, msg); diff --git a/src/matrix-rocketchat/handlers/events/forwarder.rs b/src/matrix-rocketchat/handlers/events/forwarder.rs index 74e26d4..a599997 100644 --- a/src/matrix-rocketchat/handlers/events/forwarder.rs +++ b/src/matrix-rocketchat/handlers/events/forwarder.rs @@ -26,11 +26,6 @@ impl<'a> Forwarder<'a> { /// Forwards messages to Rocket.Chat pub fn process(&self, event: &MessageEvent, room: &Room) -> Result<()> { - if event.user_id == self.config.matrix_bot_user_id()? { - debug!(self.logger, "Skipping event, because it was sent by the bot user"); - return Ok(()); - } - match room.rocketchat_server(self.connection)? { Some(rocketchat_server) => { let user_on_rocketchat_server = diff --git a/src/matrix-rocketchat/handlers/events/message_handler.rs b/src/matrix-rocketchat/handlers/events/message_handler.rs index fdd278e..49e05bc 100644 --- a/src/matrix-rocketchat/handlers/events/message_handler.rs +++ b/src/matrix-rocketchat/handlers/events/message_handler.rs @@ -33,6 +33,11 @@ impl<'a> MessageHandler<'a> { /// Handles messages that are sent in a room pub fn process(&self, event: &MessageEvent) -> Result<()> { + if event.user_id == self.config.matrix_bot_user_id()? { + debug!(self.logger, "Skipping event, because it was sent by the bot user"); + return Ok(()); + } + match Room::find_by_matrix_room_id(self.connection, &event.room_id)? { Some(ref room) if room.is_admin_room => { CommandHandler::new(self.config, self.connection, &self.logger, &self.matrix_api).process(event, room)?; diff --git a/tests/admin_room.rs b/tests/admin_room.rs index b04a5c1..cbc0526 100644 --- a/tests/admin_room.rs +++ b/tests/admin_room.rs @@ -435,3 +435,23 @@ fn unkown_membership_states_are_skipped() { // so the receiver never gets a message and times out receiver.recv_timeout(default_timeout()).is_err(); } + +#[test] +fn ignore_messages_from_the_bot_user() { + let (message_forwarder, receiver) = MessageForwarder::new(); + let mut matrix_router = Router::new(); + matrix_router.put(SendMessageEventEndpoint::router_path(), message_forwarder, "send_message_event"); + + let test = Test::new().with_admin_room().with_matrix_routes(matrix_router).run(); + + helpers::send_room_message_from_matrix(&test.config.as_url, + RoomId::try_from("!admin:localhost").unwrap(), + UserId::try_from("@rocketchat:localhost").unwrap(), + "help".to_string()); + + // discard welcome message + receiver.recv_timeout(default_timeout()).unwrap(); + + // no command is executed, so we get a timeout + assert!(receiver.recv_timeout(default_timeout()).is_err()); +} diff --git a/tests/forward_matrix_to_rocketchat.rs b/tests/forward_matrix_to_rocketchat.rs index 9a6eb33..e572944 100644 --- a/tests/forward_matrix_to_rocketchat.rs +++ b/tests/forward_matrix_to_rocketchat.rs @@ -61,7 +61,7 @@ fn do_not_forward_messages_from_the_bot_user_to_avoid_loops() { UserId::try_from("@rocketchat:localhost").unwrap(), "spec message".to_string()); - receiver.recv_timeout(default_timeout()).is_err(); + assert!(receiver.recv_timeout(default_timeout()).is_err()); } #[test]