Skip to content

Commit

Permalink
slack bridge: Add logic to prevent looping messages.
Browse files Browse the repository at this point in the history
When using Slack Webhook integration to get messages from Slack to
Zulip, we don't want to send back messages from the Slack integration
bot.

This prevents that by filtering out any messages from the Slack Webhook
bots when sending messages from Zulip to Slack..

Fixes #825.
  • Loading branch information
PieterCK committed Dec 13, 2024
1 parent 35055f1 commit ff12189
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"email": "[email protected]",
"api_key": "put api key here",
"site": "https://chat.zulip.org",
"integration_bot_email": "[email protected]",
},
"slack": {
"username": "slack_username",
Expand Down
8 changes: 7 additions & 1 deletion zulip/integrations/bridge_with_slack/run-slack-bridge
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,18 @@ class SlackBridge:
if w.startswith("@"):
zulip_msg["content"] = zulip_msg["content"].replace(w, "<" + w + ">")

def is_message_from_slack(self, msg: Dict[str, Any]) -> bool:
# Check whether or not this message is from Slack to prevent
# them from being tossed back to Zulip.
return msg["sender_email"] == self.zulip_config.get("integration_bot_email")

def zulip_to_slack(self) -> Callable[[Dict[str, Any]], None]:
def _zulip_to_slack(msg: Dict[str, Any]) -> None:
slack_channel = get_slack_channel_for_zulip_message(
msg, self.zulip_to_slack_map, self.zulip_config["email"]
)
if slack_channel is not None:

if slack_channel is not None and not self.is_message_from_slack(msg):
self.wrap_slack_mention_with_bracket(msg)
slack_text = SLACK_MESSAGE_TEMPLATE.format(
username=msg["sender_full_name"], message=msg["content"]
Expand Down

0 comments on commit ff12189

Please sign in to comment.