facebook-messenger 1.3.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbeade2fa81a2b697fa7635b0fbe0e4bead497dadce5191405efa0b1eab4ad3c
4
- data.tar.gz: efadea4a20f49814f28148993b2e87b5ccd310c2d513f8feea4a1f62526118ce
3
+ metadata.gz: 8b91271ca1dfd46644af4c45a6e64670c36cf2c8de5efa288ec2bf04e43bef44
4
+ data.tar.gz: 57611671a09c7784c4cfe92e461a9b9444e6d18e3f1ee02784291f5af2effaa1
5
5
  SHA512:
6
- metadata.gz: 2222ed8d1a46dab7dd554017ffb7a7a3619476cc688f81ce7acd303d50cec9f7d0da3bbe642bd548502ec62ffafde5516d5fde6cc04f840d22c4123c6b99d2e1
7
- data.tar.gz: 014b6a913f77baf595d2672a97d9c13e8804c63862e7d7fb84ff50f51e5b34ee1fc31da1bf1446ddbe3330cb3d206b88b3871c119556902b63ffc5496b492b1e
6
+ metadata.gz: c91d9b3fc8bf84c8acf14034f2f916477e67418b8baf7df1c6f87fb35f0e4a5f3d207a1386e33a70ed18b8ad1466023e93d50eb248a7c110b05c460f0154450f
7
+ data.tar.gz: aa8656efd52e1cb39980c11a86596739e1045848bb78edd13c6a568febaa1ed60f8b2ede932baa8f3f27917506f64ade3cbe2690be5892be555a7c83aaa61d4a
data/README.md CHANGED
@@ -4,9 +4,10 @@
4
4
 
5
5
 
6
6
  [![Gem Version](https://img.shields.io/gem/v/facebook-messenger.svg?style=flat)](https://rubygems.org/gems/facebook-messenger)
7
- [![Build Status](https://img.shields.io/travis/hyperoslo/facebook-messenger.svg?style=flat)](https://travis-ci.org/jgorset/facebook-messenger)
8
- [![Code Climate](https://img.shields.io/codeclimate/github/hyperoslo/facebook-messenger.svg?style=flat)](https://codeclimate.com/github/jgorset/facebook-messenger)
9
- [![Coverage Status](https://img.shields.io/coveralls/hyperoslo/facebook-messenger.svg?style=flat)](https://coveralls.io/r/jgorset/facebook-messenger)
7
+ [![Gem Downloads](https://img.shields.io/gem/dt/facebook-messenger.svg)](https://rubygems.org/gems/facebook-messenger)
8
+ [![Build Status](https://img.shields.io/travis/jgorset/facebook-messenger.svg?style=flat)](https://travis-ci.org/jgorset/facebook-messenger)
9
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/jgorset/facebook-messenger.svg)](https://codeclimate.com/github/jgorset/facebook-messenger)
10
+ [![Coverage Status](https://coveralls.io/repos/github/jgorset/facebook-messenger/badge.svg?branch=master)](https://coveralls.io/github/jgorset/facebook-messenger?branch=master)
10
11
  [![Documentation Coverage](http://inch-ci.org/github/jgorset/facebook-messenger.svg?branch=master)](http://inch-ci.org/github/jgorset/facebook-messenger)
11
12
 
12
13
  ## Installation
@@ -28,6 +29,7 @@ include Facebook::Messenger
28
29
  Bot.on :message do |message|
29
30
  message.id # => 'mid.1457764197618:41d102a3e1ae206a38'
30
31
  message.sender # => { 'id' => '1008372609250235' }
32
+ message.recipient # => { 'id' => '2015573629214912' }
31
33
  message.seq # => 73
32
34
  message.sent_at # => 2016-04-22 21:30:36 +0200
33
35
  message.text # => 'Hello, bot!'
@@ -42,27 +44,15 @@ end
42
44
  ```ruby
43
45
  Bot.deliver({
44
46
  recipient: {
45
- id: '45123'
47
+ id: YOUR_RECIPIENT_ID
46
48
  },
47
49
  message: {
48
50
  text: 'Human?'
49
51
  },
50
- message_type: Facebook::Messenger::Bot::MessagingType::UPDATE
51
- }, access_token: ENV['ACCESS_TOKEN'], app_secret_proof: app_secret_proof
52
- )
53
- ```
54
-
55
- NOTE: `app_secret_proof` is an optional parameter to [secure your requests](https://developers.facebook.com/docs/graph-api/securing-requests/),
56
- and you can generate it from your configuration provider like so:
57
-
58
- ```ruby
59
- configuration_provider = Facebook::Messenger::Configuration::Providers.Environment.new
60
- app_secret_proof = configuration_provider.app_secret_proof_for(page_id)
52
+ messaging_type: Facebook::Messenger::Bot::MessagingType::UPDATE
53
+ }, page_id: YOUR_PAGE_ID)
61
54
  ```
62
55
 
63
- For the methods you'll usually use (like `reply` and `typing_on`), the app secret proof will be set and sent
64
- automatically if you set the environment variable `APP_SECRET_PROOF_ENABLED` to `true`.
65
-
66
56
  ##### Messages with images
67
57
 
68
58
  The human may require visual aid to understand:
@@ -132,6 +122,20 @@ end
132
122
 
133
123
  *See Facebook's [documentation][message-documentation] for all message options.*
134
124
 
125
+ ##### Reactions
126
+
127
+ Humans have feelings, and they can react to your messages. You can pretend to understand:
128
+
129
+ ```ruby
130
+ Bot.on :reaction do |message|
131
+ message.emoji # => "👍"
132
+ message.action # => "react"
133
+ message.reaction # => "like"
134
+
135
+ message.reply(text: 'Your feelings have been registered')
136
+ end
137
+ ```
138
+
135
139
  ##### Typing indicator
136
140
 
137
141
  Show the human you are preparing a message for them:
@@ -199,6 +203,23 @@ Bot.on :message_request do |message_request|
199
203
  end
200
204
  ```
201
205
 
206
+ ##### Record instant game progress
207
+
208
+ You can keep track of instant game progress:
209
+
210
+ ```ruby
211
+ Bot.on :game_play do |game_play|
212
+ game_play.sender # => { 'id' => '1008372609250235' }
213
+ game_play.recipient # => { 'id' => '2015573629214912' }
214
+ game_play.sent_at # => 2016-04-22 21:30:36 +0200
215
+ game_play.game # => "<GAME-APP-ID>"
216
+ game_play.player # => "<PLAYER-ID>"
217
+ game_play.context # => { 'context_type' => "<CONTEXT-TYPE:SOLO|THREAD>", 'context_id' => "<CONTEXT-ID>" }
218
+ game_play.score # => 100
219
+ game_play.payload # => "<PAYLOAD>"
220
+ end
221
+ ```
222
+
202
223
  #### Send to Facebook
203
224
 
204
225
  When the human clicks the [Send to Messenger button][send-to-messenger-plugin]
@@ -272,7 +293,7 @@ Facebook::Messenger::Profile.set({
272
293
  text: 'Bienvenue dans le bot du Wagon !'
273
294
  }
274
295
  ]
275
- }, access_token: ENV['ACCESS_TOKEN'])
296
+ }, page_id: YOUR_PAGE_ID)
276
297
  ```
277
298
 
278
299
  You can define the action to trigger when new humans click on the Get
@@ -283,7 +304,7 @@ Facebook::Messenger::Profile.set({
283
304
  get_started: {
284
305
  payload: 'GET_STARTED_PAYLOAD'
285
306
  }
286
- }, access_token: ENV['ACCESS_TOKEN'])
307
+ }, page_id: YOUR_PAGE_ID)
287
308
  ```
288
309
 
289
310
  You can show a persistent menu to humans.
@@ -329,10 +350,9 @@ Facebook::Messenger::Profile.set({
329
350
  composer_input_disabled: false
330
351
  }
331
352
  ]
332
- }, access_token: ENV['ACCESS_TOKEN'])
353
+ }, page_id: YOUR_PAGE_ID)
333
354
  ```
334
355
 
335
-
336
356
  #### Handle a Facebook Policy Violation
337
357
 
338
358
  See Facebook's documentation on [Messaging Policy Enforcement](https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/messaging_policy_enforcement)
@@ -343,8 +363,11 @@ Bot.on :'policy_enforcement' do |referral|
343
363
  referral.reason # => "The bot violated our Platform Policies (https://developers.facebook.com/policy/#messengerplatform). Common violations include sending out excessive spammy messages or being non-functional."
344
364
  end
345
365
  ```
366
+
346
367
  #### messaging_type
368
+
347
369
  ##### Sending Messages
370
+
348
371
  See Facebook's documentation on [Sending Messages](https://developers.facebook.com/docs/messenger-platform/send-messages#standard_messaging)
349
372
 
350
373
  As of May 7th 2018 all messages are required to include a messaging_type
@@ -357,11 +380,12 @@ Bot.deliver({
357
380
  message: {
358
381
  text: 'Human?'
359
382
  },
360
- message_type: Facebook::Messenger::Bot::MessagingType::UPDATE
361
- }, access_token: ENV['ACCESS_TOKEN'])
383
+ messaging_type: Facebook::Messenger::Bot::MessagingType::UPDATE
384
+ }, page_id: YOUR_PAGE_ID)
362
385
  ```
363
386
 
364
387
  ##### MESSAGE_TAG
388
+
365
389
  See Facebook's documentation on [Message Tags](https://developers.facebook.com/docs/messenger-platform/send-messages/message-tags)
366
390
 
367
391
  When sending a message with messaging_type: MESSAGE_TAG (Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG) you must ensure you add a tag: parameter
@@ -374,9 +398,9 @@ Bot.deliver({
374
398
  message: {
375
399
  text: 'Human?'
376
400
  },
377
- message_type: Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG
401
+ messaging_type: Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG
378
402
  tag: Facebook::Messenger::Bot::Tag::NON_PROMOTIONAL_SUBSCRIPTION
379
- }, access_token: ENV['ACCESS_TOKEN'])
403
+ }, page_id: YOUR_PAGE_ID)
380
404
  ```
381
405
 
382
406
  ## Configuration
@@ -449,6 +473,8 @@ Facebook::Messenger.configure do |config|
449
473
  end
450
474
  ```
451
475
 
476
+ You can get the current configuration provider with `Facebook::Messenger.config.provider`.
477
+
452
478
  ### Subscribe your Application to a Page
453
479
 
454
480
  Once you've configured your bot, subscribe it to the Page to get messages
@@ -547,6 +573,7 @@ config.autoload_paths += Dir[Rails.root.join('app', 'bot', '*')]
547
573
  ### Test it...
548
574
 
549
575
  ##### ...locally
576
+
550
577
  To test your locally running bot, you can use [ngrok]. This will create a secure
551
578
  tunnel to localhost so that Facebook can reach the webhook.
552
579
 
@@ -554,7 +581,8 @@ tunnel to localhost so that Facebook can reach the webhook.
554
581
 
555
582
  In order to test that behaviour when a new event from Facebook is registered, you can use the gem's `trigger` method. This method accepts as its first argument the type of event that it will receive, and can then be followed by other arguments that mock objects received from Messenger. Using Ruby's [Struct](https://ruby-doc.org/core-2.5.0/Struct.html) class can be very useful for creating these mock objects.
556
583
 
557
- In this case, subscribing to Messenger events has been extracted into a `Listener` class.
584
+ In this case, subscribing to Messenger events has been extracted into a `Listener` class.
585
+
558
586
  ```ruby
559
587
  # app/bot/listener.rb
560
588
  require 'facebook/messenger'
@@ -563,7 +591,7 @@ include Facebook::Messenger
563
591
 
564
592
  class Listener
565
593
  Facebook::Messenger::Subscriptions.subscribe(
566
- access_token: ENV["FB_ACCESS_TOKEN"],
594
+ access_token: ENV['ACCESS_TOKEN'],
567
595
  subscribed_fields: %w[feed mention name]
568
596
  )
569
597
 
@@ -573,11 +601,13 @@ class Listener
573
601
  message: {
574
602
  text: 'Uploading your message to skynet.'
575
603
  }
576
- }, access_token: ENV['FB_ACCESS_TOKEN'])
604
+ }, access_token: ENV['ACCESS_TOKEN'])
577
605
  end
578
606
  end
579
607
  ```
608
+
580
609
  Its respective test file then ensures that the `Bot` object receives a call to `deliver`. This is just a basic test, but check out the [RSpec docs](http://rspec.info/) for more information on testing with RSpec.
610
+
581
611
  ```ruby
582
612
  require 'rails_helper'
583
613
 
@@ -603,7 +633,6 @@ RSpec.describe Listener do
603
633
  end
604
634
  ```
605
635
 
606
-
607
636
  ## Development
608
637
 
609
638
  After checking out the repo, run `bin/setup` to install dependencies. You can also run
@@ -29,6 +29,8 @@ module Facebook
29
29
  payment
30
30
  policy_enforcement
31
31
  pass_thread_control
32
+ game_play
33
+ reaction
32
34
  ].freeze
33
35
 
34
36
  class << self
@@ -38,20 +40,18 @@ module Facebook
38
40
  # @raise [Facebook::Messenger::Bot::SendError] if there is any error
39
41
  # in response while sending message.
40
42
  #
41
- # @param [Hash] message A Hash describing the recipient and the message.
42
- # @param [String] access_token Access token.
43
- # @param [String] app_secret_proof proof of the app_secret
44
- # https://developers.facebook.com/docs/graph-api/securing-requests/
45
- # Note: we provide a helper function available at
46
- # Messenger::Configuration::Providers::Base#calculate_app_secret_proof
43
+ # @param [Hash] message The message payload
44
+ # @param [String] page_id The page to send the message from
47
45
  #
48
46
  # Returns a String describing the message ID if the message was sent,
49
47
  # or raises an exception if it was not.
50
- def deliver(message, access_token:, app_secret_proof: nil)
51
- query = {
52
- access_token: access_token
53
- }
48
+ def deliver(message, page_id:)
49
+ access_token = config.provider.access_token_for(page_id)
50
+ app_secret_proof = config.provider.app_secret_proof_for(page_id)
51
+
52
+ query = { access_token: access_token }
54
53
  query[:appsecret_proof] = app_secret_proof if app_secret_proof
54
+
55
55
  response = post '/messages',
56
56
  body: JSON.dump(message),
57
57
  format: :json,
@@ -138,6 +138,12 @@ module Facebook
138
138
  }
139
139
  )
140
140
  end
141
+
142
+ private
143
+
144
+ def config
145
+ Facebook::Messenger.config
146
+ end
141
147
  end
142
148
  end
143
149
  end
@@ -12,8 +12,6 @@ module Facebook
12
12
  # A default caching implentation of generating the app_secret_proof
13
13
  # for a given page_id
14
14
  def app_secret_proof_for(page_id = nil)
15
- return unless fetch_app_secret_proof_enabled?
16
-
17
15
  memo_key = [app_secret_for(page_id), access_token_for(page_id)]
18
16
  memoized_app_secret_proofs[memo_key] ||=
19
17
  calculate_app_secret_proof(*memo_key)
@@ -43,10 +41,6 @@ module Facebook
43
41
  def memoized_app_secret_proofs
44
42
  @memoized_app_secret_proofs ||= {}
45
43
  end
46
-
47
- def fetch_app_secret_proof_enabled?
48
- false
49
- end
50
44
  end
51
45
  end
52
46
  end
@@ -22,10 +22,6 @@ module Facebook
22
22
  def access_token_for(*)
23
23
  ENV['ACCESS_TOKEN']
24
24
  end
25
-
26
- def fetch_app_secret_proof_enabled?
27
- ENV['APP_SECRET_PROOF_ENABLED'] == 'true'.freeze
28
- end
29
25
  end
30
26
  end
31
27
  end
@@ -11,6 +11,8 @@ require 'facebook/messenger/incoming/referral'
11
11
  require 'facebook/messenger/incoming/payment'
12
12
  require 'facebook/messenger/incoming/policy_enforcement'
13
13
  require 'facebook/messenger/incoming/pass_thread_control'
14
+ require 'facebook/messenger/incoming/game_play'
15
+ require 'facebook/messenger/incoming/message_reaction'
14
16
 
15
17
  module Facebook
16
18
  module Messenger
@@ -33,7 +35,9 @@ module Facebook
33
35
  'message_request' => MessageRequest,
34
36
  'payment' => Payment,
35
37
  'policy_enforcement' => PolicyEnforcement,
36
- 'pass_thread_control' => PassThreadControl
38
+ 'pass_thread_control' => PassThreadControl,
39
+ 'game_play' => GamePlay,
40
+ 'reaction' => MessageReaction
37
41
  }.freeze
38
42
 
39
43
  # Parse the given payload and create new object of class related
@@ -18,6 +18,7 @@ module Facebook
18
18
 
19
19
  #
20
20
  # Function return PSID of sender.
21
+ #
21
22
  # @see https://developers.facebook.com/docs/messenger-platform/identity
22
23
  # Info about PSID.
23
24
  # @see https://developers.facebook.com/docs/messenger-platform/webhook#format
@@ -30,7 +31,7 @@ module Facebook
30
31
  end
31
32
 
32
33
  #
33
- # Function return the page of id from which the message is arrived.
34
+ # Function return id of the page from which the message has arrived.
34
35
  #
35
36
  # @return [String] Facebook page id.
36
37
  #
@@ -54,7 +55,6 @@ module Facebook
54
55
  #
55
56
  # Function return timestamp when message is sent.
56
57
  #
57
- #
58
58
  # @return [Object] Message time sent.
59
59
  #
60
60
  def sent_at
@@ -74,7 +74,7 @@ module Facebook
74
74
  sender_action: 'typing_on'
75
75
  }
76
76
 
77
- deliver_payload(payload)
77
+ Facebook::Messenger::Bot.deliver(payload, page_id: recipient['id'])
78
78
  end
79
79
 
80
80
  #
@@ -90,7 +90,7 @@ module Facebook
90
90
  sender_action: 'typing_off'
91
91
  }
92
92
 
93
- deliver_payload(payload)
93
+ Facebook::Messenger::Bot.deliver(payload, page_id: recipient['id'])
94
94
  end
95
95
 
96
96
  #
@@ -106,7 +106,7 @@ module Facebook
106
106
  sender_action: 'mark_seen'
107
107
  }
108
108
 
109
- deliver_payload(payload)
109
+ Facebook::Messenger::Bot.deliver(payload, page_id: recipient['id'])
110
110
  end
111
111
 
112
112
  #
@@ -123,28 +123,7 @@ module Facebook
123
123
  message_type: Facebook::Messenger::Bot::MessageType::RESPONSE
124
124
  }
125
125
 
126
- deliver_payload(payload)
127
- end
128
-
129
- #
130
- # Function returns the configured access token.
131
- #
132
- # @return [String] Access token.
133
- #
134
- def access_token
135
- Facebook::Messenger.config.provider.access_token_for(recipient)
136
- end
137
-
138
- def app_secret_proof
139
- Facebook::Messenger.config.provider.app_secret_proof_for(recipient)
140
- end
141
-
142
- private
143
-
144
- def deliver_payload(payload)
145
- Facebook::Messenger::Bot.deliver(payload,
146
- access_token: access_token,
147
- app_secret_proof: app_secret_proof)
126
+ Facebook::Messenger::Bot.deliver(payload, page_id: recipient['id'])
148
127
  end
149
128
  end
150
129
  end
@@ -0,0 +1,39 @@
1
+ module Facebook
2
+ module Messenger
3
+ module Incoming
4
+ # The GamePlay class represents an incoming Facebook Messenger
5
+ # game_play events.
6
+ # @see https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/messaging_game_plays
7
+ class GamePlay
8
+ include Facebook::Messenger::Incoming::Common
9
+
10
+ def game_play
11
+ @messaging['game_play']
12
+ end
13
+
14
+ def payload
15
+ game_play['payload']
16
+ end
17
+
18
+ def score
19
+ game_play['score']
20
+ end
21
+
22
+ def game
23
+ game_play['game_id']
24
+ end
25
+
26
+ def player
27
+ game_play['player_id']
28
+ end
29
+
30
+ def context
31
+ {
32
+ context_id: game_play['context_id'],
33
+ context_type: game_play['context_type']
34
+ }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,23 @@
1
+ module Facebook
2
+ module Messenger
3
+ module Incoming
4
+ # The Message echo class represents an incoming Facebook Messenger message
5
+ # @see https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/message-reactions
6
+ class MessageReaction
7
+ include Facebook::Messenger::Incoming::Common
8
+
9
+ def action
10
+ @messaging['reaction']['action']
11
+ end
12
+
13
+ def emoji
14
+ @messaging['reaction']['emoji']
15
+ end
16
+
17
+ def reaction
18
+ @messaging['reaction']['reaction']
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -10,7 +10,7 @@ module Facebook
10
10
  include HTTParty
11
11
 
12
12
  # Define base_uri for HTTParty.
13
- base_uri 'https://graph.facebook.com/v2.9/me'
13
+ base_uri 'https://graph.facebook.com/v3.2/me'
14
14
 
15
15
  format :json
16
16
 
@@ -28,10 +28,12 @@ module Facebook
28
28
  # @return [Boolean] TRUE
29
29
  #
30
30
  def subscribe(access_token:, subscribed_fields: [])
31
- response = post '/subscribed_apps', query: {
32
- access_token: access_token,
33
- subscribed_fields: subscribed_fields
34
- }
31
+ response = post '/subscribed_apps',
32
+ headers: { 'Content-Type' => 'application/json' },
33
+ body: {
34
+ access_token: access_token,
35
+ subscribed_fields: subscribed_fields
36
+ }.to_json
35
37
 
36
38
  raise_errors(response)
37
39
 
@@ -2,6 +2,6 @@ module Facebook
2
2
  module Messenger
3
3
  #
4
4
  # @return [String] Define the version of gem.
5
- VERSION = '1.3.0'.freeze
5
+ VERSION = '2.0.1'.freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facebook-messenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Gorset
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-16 00:00:00.000000000 Z
11
+ date: 2020-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.11'
53
+ version: 2.1.4
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.11'
60
+ version: 2.1.4
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: coveralls
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -106,28 +106,28 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '11.0'
109
+ version: 13.0.1
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '11.0'
116
+ version: 13.0.1
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rspec
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '3.4'
123
+ version: '3.9'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '3.4'
130
+ version: '3.9'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rubocop
133
133
  requirement: !ruby/object:Gem::Requirement
@@ -148,14 +148,14 @@ dependencies:
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '1.24'
151
+ version: 3.8.1
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '1.24'
158
+ version: 3.8.1
159
159
  description: Facebook Messenger client
160
160
  email:
161
161
  - jgorset@gmail.com
@@ -183,8 +183,10 @@ files:
183
183
  - lib/facebook/messenger/incoming/account_linking.rb
184
184
  - lib/facebook/messenger/incoming/common.rb
185
185
  - lib/facebook/messenger/incoming/delivery.rb
186
+ - lib/facebook/messenger/incoming/game_play.rb
186
187
  - lib/facebook/messenger/incoming/message.rb
187
188
  - lib/facebook/messenger/incoming/message_echo.rb
189
+ - lib/facebook/messenger/incoming/message_reaction.rb
188
190
  - lib/facebook/messenger/incoming/message_request.rb
189
191
  - lib/facebook/messenger/incoming/optin.rb
190
192
  - lib/facebook/messenger/incoming/pass_thread_control.rb
@@ -217,8 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
219
  - !ruby/object:Gem::Version
218
220
  version: '0'
219
221
  requirements: []
220
- rubyforge_project:
221
- rubygems_version: 2.7.6
222
+ rubygems_version: 3.0.6
222
223
  signing_key:
223
224
  specification_version: 4
224
225
  summary: Facebook Messenger client