Module: SlackBot::GrapeHelpers::Interactions

Included in:
SlackBot::GrapeHelpers
Defined in:
lib/slack_bot/grape_helpers/interactions.rb

Instance Method Summary collapse

Instance Method Details

#handle_block_actions_message(payload:, user:, params:) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/slack_bot/grape_helpers/interactions.rb', line 19

def handle_block_actions_message(payload:, user:, params:)
  action_id = payload.dig("actions", 0, "action_id")
  return false if action_id.blank?

  interaction_klass = config.find_block_action(action_id)
  raise SlackBot::Errors::BlockActionNotImplemented.new if interaction_klass.blank?

  interaction_klass.new(current_user: user, params: params, config: config).call
end

#handle_block_actions_view(view:, user:, params:) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/slack_bot/grape_helpers/interactions.rb', line 35

def handle_block_actions_view(view:, user:, params:)
  callback = find_callback!(view: view, user: user)
  log_callback_check(callback, user)
  validate_callback_user!(callback, user)

  interaction_klass = callback_interaction_klass(callback)
  return false if interaction_klass.blank?

  interaction_klass.new(current_user: user, params: params, callback: callback, config: config).call
end

#route_interaction(payload:, user:, params:) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/slack_bot/grape_helpers/interactions.rb', line 4

def route_interaction(payload:, user:, params:)
  case payload["type"]
  when "view_submission"
    handle_block_actions_view(view: payload["view"], user: user, params: params)
  when "block_actions"
    if payload["view"].present?
      handle_block_actions_view(view: payload["view"], user: user, params: params)
    else
      handle_block_actions_message(payload: payload, user: user, params: params)
    end
  else
    raise SlackBot::Errors::UnknownActionTypeError.new(payload["type"])
  end
end

#validate_callback_user!(callback, user) ⇒ Object



29
30
31
32
33
# File 'lib/slack_bot/grape_helpers/interactions.rb', line 29

def validate_callback_user!(callback, user)
  if callback.user_id != user.id
    raise SlackBot::Errors::CallbackUserMismatchError.new("Callback user is not equal to action user")
  end
end