Class: SlackBot::Interaction
- Inherits:
-
Object
- Object
- SlackBot::Interaction
- Includes:
- Concerns::ViewKlass
- Defined in:
- lib/slack_bot/interaction.rb,
sig/slack_bot.rbs
Defined Under Namespace
Classes: SlackViewsReply
Instance Attribute Summary collapse
-
#callback ⇒ Callback?
readonly
Returns the value of attribute callback.
-
#config ⇒ Config
readonly
Returns the value of attribute config.
-
#current_user ⇒ Object?
readonly
Returns the value of attribute current_user.
-
#params ⇒ Hash[String, untyped]?
readonly
Returns the value of attribute params.
Class Method Summary collapse
- .api_client ⇒ Object
- .api_client=(client) ⇒ Object
- .build_view_reply(response:, callback:, payload:, error_class:) ⇒ Object
- .modal_payload(callback, view) ⇒ Object
- .open_modal(callback:, trigger_id:, view:) ⇒ SlackViewsReply
- .persist_view_id(callback, view_id) ⇒ Object
- .publish_payload(callback, metadata, view) ⇒ Object
- .publish_view(user_id:, view:, callback: nil, metadata: nil) ⇒ SlackViewsReply
- .update_modal(callback:, view_id:, view:) ⇒ SlackViewsReply
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(current_user: nil, params: nil, callback: nil, config: nil) ⇒ Interaction
constructor
A new instance of Interaction.
Methods included from Concerns::ViewKlass
Constructor Details
#initialize(current_user: nil, params: nil, callback: nil, config: nil) ⇒ Interaction
Returns a new instance of Interaction.
38 39 40 41 42 43 |
# File 'lib/slack_bot/interaction.rb', line 38 def initialize(current_user: nil, params: nil, callback: nil, config: nil) @current_user = current_user @params = params @callback = callback @config = config || SlackBot::Config.current_instance end |
Instance Attribute Details
#callback ⇒ Callback? (readonly)
Returns the value of attribute callback.
37 38 39 |
# File 'lib/slack_bot/interaction.rb', line 37 def callback @callback end |
#config ⇒ Config (readonly)
Returns the value of attribute config.
37 38 39 |
# File 'lib/slack_bot/interaction.rb', line 37 def config @config end |
#current_user ⇒ Object? (readonly)
Returns the value of attribute current_user.
37 38 39 |
# File 'lib/slack_bot/interaction.rb', line 37 def current_user @current_user end |
#params ⇒ Hash[String, untyped]? (readonly)
Returns the value of attribute params.
37 38 39 |
# File 'lib/slack_bot/interaction.rb', line 37 def params @params end |
Class Method Details
.api_client ⇒ Object
12 13 14 |
# File 'lib/slack_bot/interaction.rb', line 12 def self.api_client @api_client ||= SlackBot::ApiClient.new end |
.api_client=(client) ⇒ Object
16 17 18 |
# File 'lib/slack_bot/interaction.rb', line 16 def self.api_client=(client) @api_client = client end |
.build_view_reply(response:, callback:, payload:, error_class:) ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/slack_bot/interaction.rb', line 59 def self.build_view_reply(response:, callback:, payload:, error_class:) raise error_class.new(response.error, data: response.data, payload: payload) unless response.ok? view_id = response.data.dig("view", "id") persist_view_id(callback, view_id) SlackViewsReply.new(callback&.id, view_id) end |
.modal_payload(callback, view) ⇒ Object
49 50 51 |
# File 'lib/slack_bot/interaction.rb', line 49 def self.modal_payload(callback, view) view.merge(type: "modal", callback_id: callback&.id) end |
.open_modal(callback:, trigger_id:, view:) ⇒ SlackViewsReply
20 21 22 23 24 |
# File 'lib/slack_bot/interaction.rb', line 20 def self.open_modal(callback:, trigger_id:, view:) view = modal_payload(callback, view) response = api_client.views_open(trigger_id: trigger_id, view: view) build_view_reply(response: response, callback: callback, payload: view, error_class: SlackBot::Errors::OpenModalError) end |
.persist_view_id(callback, view_id) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/slack_bot/interaction.rb', line 67 def self.persist_view_id(callback, view_id) return unless callback.present? && view_id.present? callback.view_id = view_id callback.save end |
.publish_payload(callback, metadata, view) ⇒ Object
53 54 55 56 57 |
# File 'lib/slack_bot/interaction.rb', line 53 def self.publish_payload(callback, , view) view = view.merge(callback_id: callback.id) if callback.present? view = view.merge(private_metadata: ) if .present? view end |
.publish_view(user_id:, view:, callback: nil, metadata: nil) ⇒ SlackViewsReply
32 33 34 35 |
# File 'lib/slack_bot/interaction.rb', line 32 def self.publish_view(user_id:, view:, callback: nil, metadata: nil) response = api_client.views_publish(user_id: user_id, view: publish_payload(callback, , view)) build_view_reply(response: response, callback: callback, payload: view, error_class: SlackBot::Errors::PublishViewError) end |
.update_modal(callback:, view_id:, view:) ⇒ SlackViewsReply
26 27 28 29 30 |
# File 'lib/slack_bot/interaction.rb', line 26 def self.update_modal(callback:, view_id:, view:) view = modal_payload(callback, view) response = api_client.views_update(view_id: view_id, view: view) build_view_reply(response: response, callback: callback, payload: view, error_class: SlackBot::Errors::UpdateModalError) end |
Instance Method Details
#call ⇒ Object
45 46 47 |
# File 'lib/slack_bot/interaction.rb', line 45 def call nil end |