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 +4 -4
- data/README.md +59 -30
- data/lib/facebook/messenger/bot.rb +16 -10
- data/lib/facebook/messenger/configuration/providers/base.rb +0 -6
- data/lib/facebook/messenger/configuration/providers/environment.rb +0 -4
- data/lib/facebook/messenger/incoming.rb +5 -1
- data/lib/facebook/messenger/incoming/common.rb +6 -27
- data/lib/facebook/messenger/incoming/game_play.rb +39 -0
- data/lib/facebook/messenger/incoming/message_reaction.rb +23 -0
- data/lib/facebook/messenger/profile.rb +1 -1
- data/lib/facebook/messenger/subscriptions.rb +6 -4
- data/lib/facebook/messenger/version.rb +1 -1
- metadata +13 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b91271ca1dfd46644af4c45a6e64670c36cf2c8de5efa288ec2bf04e43bef44
|
4
|
+
data.tar.gz: 57611671a09c7784c4cfe92e461a9b9444e6d18e3f1ee02784291f5af2effaa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
[![
|
8
|
-
[![
|
9
|
-
[![
|
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:
|
47
|
+
id: YOUR_RECIPIENT_ID
|
46
48
|
},
|
47
49
|
message: {
|
48
50
|
text: 'Human?'
|
49
51
|
},
|
50
|
-
|
51
|
-
},
|
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
|
-
},
|
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
|
-
},
|
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
|
-
},
|
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
|
-
|
361
|
-
},
|
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
|
-
|
401
|
+
messaging_type: Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG
|
378
402
|
tag: Facebook::Messenger::Bot::Tag::NON_PROMOTIONAL_SUBSCRIPTION
|
379
|
-
},
|
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[
|
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['
|
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
|
42
|
-
# @param [String]
|
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,
|
51
|
-
|
52
|
-
|
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
|
@@ -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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
@@ -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',
|
32
|
-
|
33
|
-
|
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
|
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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
|
-
|
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
|