This repository was archived by the owner on Sep 22, 2025. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 182
This repository was archived by the owner on Sep 22, 2025. It is now read-only.
Loops with ephemeral messages #226
Copy link
Copy link
Open
Labels
Description
I noticed that my Bot had problems with ephemeral messages, in particular with unfolding URLs.
How it can be reproduced
- bot posts an URL to a channel
- slackbot unfolds it
- bot posts the same URL to the channel
- slackbot sends message:
"Pssst! I didn\u2019t unfurl <https:\/\/example.com> because it was already shared in this channel quite recently (within the last hour) and I didn\u2019t want to clutter things up." - my bot responds with a
Sorry @slackbot, I don't understand that command! - now slackbot responds that he didn't understand
- ...there is a pingpong
Possible solution
The message hook should filter out those ephemeral messages. I think it will be something like:
lib/slack-ruby-bot/hooks/message.rb:
module SlackRubyBot
module Hooks
class Message
def call(client, data)
return if message_to_self_not_allowed? && message_to_self?(client, data)
return if ephemeral_message?(data) # this would be new
data.text = data.text.strip if data.text
result = child_command_classes.detect { |d| d.invoke(client, data) }
result ||= built_in_command_classes.detect { |d| d.invoke(client, data) }
result ||= SlackRubyBot::Commands::Unknown.tap { |d| d.invoke(client, data) }
result
end
...
private
def ephemeral_message?(data)
data.is_ephemeral
# and you could also check for the data.subtype == 'bot_message'
endI would be willing to contribute this fix if you like the solution.