module Qiita::Team::Services::Hooks::Concerns::Slack
Send richly-formatted messages to Slack
. Override {HttpClient#url} to implement HttpClient
.
Constants
- DEFAULT_ICON_URL
- ICON_EMOJI_FORMAT
- TEXT_BYTESIZE_MAX
Public Instance Methods
@param event [Qiita::Team::Services::Events::ItemBecameCoediting] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 76 def item_became_coediting(event) send_message( text: "#{user_link(event.user)} changed #{item_link(event.item)} to coedit mode", ) end
@param event [Qiita::Team::Services::Events::ItemCommentCreated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 94 def item_comment_created(event) fallback = if event.item.coediting? "New #{comment_link(event.comment)} on #{item_link(event.item)}" else "New #{comment_link(event.comment)} on #{user_link(event.item.user)}'s " \ "#{item_link(event.item)}" end send_message( attachments: [ fallback: fallback, pretext: fallback, author_name: "@#{event.user.url_name}", author_link: event.user.url, author_icon: event.user.profile_image_url, text: truncate(Slacken.translate(event.comment.rendered_body), event.comment.url), mrkdwn_in: ["text"], ], ) end
@param event [Qiita::Team::Services::Events::ItemCommentDestroyed] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 127 def item_comment_destroyed(event) send_message( text: "#{user_link(event.user)} deleted a comment on #{item_link(event.item)}", ) end
@param event [Qiita::Team::Services::Events::ItemCommentUpdated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 118 def item_comment_updated(event) text = "#{user_link(event.user)} updated a #{comment_link(event.comment)}" text << " on #{item_link(event.item)}" send_message(text: text) end
@param event [Qiita::Team::Services::Events::ItemCreated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 47 def item_created(event) fallback = "#{user_link(event.user)} created a new post" send_message( attachments: [ fallback: fallback, pretext: fallback, author_name: "@#{event.user.url_name}", author_link: event.user.url, author_icon: event.user.profile_image_url, title: event.item.title, title_link: event.item.url, text: truncate(Slacken.translate(event.item.rendered_body), event.item.url), mrkdwn_in: ["text"], ], ) end
@param event [Qiita::Team::Services::Events::ItemDestroyed] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 85 def item_destroyed(event) send_message( text: "#{user_link(event.user)} deleted #{event.item.title}", ) end
@param event [Qiita::Team::Services::Events::ItemUpdated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 67 def item_updated(event) send_message( text: "#{user_link(event.user)} updated #{item_link(event.item)}", ) end
@return [void]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 38 def ping send_message(text: "Test message sent from Qiita:Team") rescue DeliveryError nil end
@param event [Qiita::Team::Services::Events::ProjectActivated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 226 def project_activated(event) send_message( text: "#{user_link(event.user)} activated #{project_link(event.project)} project", ) end
@param event [Qiita::Team::Services::Events::ProjectArchived] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 217 def project_archived(event) send_message( text: "#{user_link(event.user)} archived #{project_link(event.project)} project", ) end
@param event [Qiita::Team::Services::Events::ProjectCommentCreated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 136 def project_comment_created(event) fallback = "New #{comment_link(event.comment)} on #{project_link(event.project)}" send_message( attachments: [ fallback: fallback, pretext: fallback, author_name: "@#{event.user.url_name}", author_link: event.user.url, author_icon: event.user.profile_image_url, text: truncate(Slacken.translate(event.comment.rendered_body), event.comment.url), mrkdwn_in: ["text"], ], ) end
@param event [Qiita::Team::Services::Events::ProjectCommentDestroyed] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 163 def project_comment_destroyed(event) send_message( text: "#{user_link(event.user)} deleted a comemnt on #{project_link(event.project)}", ) end
@param event [Qiita::Team::Services::Events::ProjectCommentUpdated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 154 def project_comment_updated(event) text = "#{user_link(event.user)} updated a #{comment_link(event.comment)}" text << " on #{project_link(event.project)}" send_message(text: text) end
@param event [Qiita::Team::Services::Events::ProjectCreated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 190 def project_created(event) send_message( text: "#{user_link(event.user)} created #{project_link(event.project)} project", ) end
@param event [Qiita::Team::Services::Events::ProjectDestroyed] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 208 def project_destroyed(event) send_message( text: "#{user_link(event.user)} deleted #{project_link(event.project)} project", ) end
@param event [Qiita::Team::Services::Events::ProjectUpdated] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 199 def project_updated(event) send_message( text: "#{user_link(event.user)} updated #{project_link(event.project)} project", ) end
@note Override {Services::Base.service_name}.
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 32 def service_name "Slack" end
@param event [Qiita::Team::Services::Events::MemberAdded] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 172 def team_member_added(event) send_message( text: "#{user_link(event.member)} was added to the #{team_link(event.team)} team", ) end
@param event [Qiita::Team::Services::Events::MemberRemoved] @return [void] @raise [Qiita::Team::Services::DeliveryError]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 181 def team_member_removed(event) send_message( text: "#{event.member.name} was removed from the #{team_link(event.team)} team", ) end
Private Instance Methods
@param comment [Qiita::Team::Services::Resources::Comment] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 263 def comment_link(comment) "<#{comment.url}|comment>" end
@param item [Qiita::Team::Services::Resources::Item] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 257 def item_link(item) "<#{item.url}|#{markup_escape(item.title)}>" end
Escape special characters for Slack
markup.
@see api.slack.com/docs/formatting @param text [String] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 284 def markup_escape(text) table_for_escape = { "&" => "&", "<" => "<", ">" => ">", } text.gsub(/[&<>]/, table_for_escape) end
@param project [Qiita::Team::Services::Resources::Project] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 269 def project_link(project) "<#{project.url}|#{markup_escape(project.name)}>" end
@param request_body [Hash] @return [void]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 236 def send_message(request_body) http_post(user_hash.merge(request_body)) end
@param team [Qiita::Team::Services::Resources::Team] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 275 def team_link(team) "<#{team.url}|#{markup_escape(team.name)}>" end
Truncate the text to 7500 bytes. Now, Slack
has a bug that we cannot send text larger than 8000 bytes.
@param text [String] @param url [String] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 299 def truncate(text, url) return text if text.bytesize <= TEXT_BYTESIZE_MAX tail = "...\n<#{url}|Read more at Qiita:Team...>" text.byteslice(0, TEXT_BYTESIZE_MAX - tail.bytesize).scrub("") + tail end
@return [Hash]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 241 def user_hash if icon_emoji.blank? { username: username, icon_url: DEFAULT_ICON_URL } else { username: username, icon_emoji: icon_emoji } end end
@param user [Qiita::Team::Services::Resources::User] @return [String]
# File lib/qiita/team/services/hooks/concerns/slack.rb, line 251 def user_link(user) "<#{user.url}|#{markup_escape(user.name)}>" end