line-bot-api 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/line/bot/api/errors.rb +0 -1
- data/lib/line/bot/api/version.rb +1 -1
- data/lib/line/bot/client.rb +64 -13
- data/lib/line/bot/request.rb +26 -13
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 191b846d917a61448e7e38976390aeb56846229ccdc2a69c404d0ca04a3bcb89
|
4
|
+
data.tar.gz: 595b93123023a3c9060190969657ca06d2bc7472281bcfe43ee1ef7b4c95324a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '094bbf24cc58e2b444a410b02052d15bcd545ad77e62a4cf8765d5a6d8e5e4011ff735196bffd3d95d2ab77e6cdb70a17240dfe524f71380d2633b5efea5455b'
|
7
|
+
data.tar.gz: f54a7e01bd1b28f28eac6e299e739a8d59d390056acac28fb7d5a957f56e2f28fa71a26a3e07a7bed212c605af735486e2213465aa417025e18aafe6d95c05d7
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ gem 'line-bot-api'
|
|
23
23
|
|
24
24
|
And then execute:
|
25
25
|
|
26
|
-
```
|
26
|
+
```sh
|
27
27
|
bundle
|
28
28
|
```
|
29
29
|
|
@@ -44,6 +44,7 @@ require 'line/bot'
|
|
44
44
|
|
45
45
|
def client
|
46
46
|
@client ||= Line::Bot::Client.new { |config|
|
47
|
+
config.channel_id = ENV["LINE_CHANNEL_ID"]
|
47
48
|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
|
48
49
|
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
|
49
50
|
}
|
data/lib/line/bot/api/errors.rb
CHANGED
data/lib/line/bot/api/version.rb
CHANGED
data/lib/line/bot/client.rb
CHANGED
@@ -13,16 +13,16 @@
|
|
13
13
|
# under the License.
|
14
14
|
|
15
15
|
require 'line/bot/request'
|
16
|
-
require 'line/bot/api/errors'
|
17
16
|
require 'base64'
|
18
17
|
require 'net/http'
|
19
18
|
require 'openssl'
|
19
|
+
require 'uri'
|
20
20
|
|
21
21
|
module Line
|
22
22
|
module Bot
|
23
23
|
class Client
|
24
24
|
# @return [String]
|
25
|
-
attr_accessor :channel_token, :channel_secret, :endpoint
|
25
|
+
attr_accessor :channel_token, :channel_id, :channel_secret, :endpoint
|
26
26
|
|
27
27
|
# @return [Object]
|
28
28
|
attr_accessor :httpclient
|
@@ -57,8 +57,47 @@ module Line
|
|
57
57
|
}
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
# Issue channel access token
|
61
|
+
#
|
62
|
+
# @param grant_type [String] Grant type
|
63
|
+
#
|
64
|
+
# @return [Net::HTTPResponse]
|
65
|
+
def issue_channel_token(grant_type = 'client_credentials')
|
66
|
+
channel_id_required
|
67
|
+
channel_secret_required
|
68
|
+
|
69
|
+
payload = URI.encode_www_form(
|
70
|
+
grant_type: grant_type,
|
71
|
+
client_id: channel_id,
|
72
|
+
client_secret: channel_secret
|
73
|
+
)
|
74
|
+
|
75
|
+
request = Request.new do |config|
|
76
|
+
config.httpclient = httpclient
|
77
|
+
config.endpoint = endpoint
|
78
|
+
config.endpoint_path = '/oauth/accessToken'
|
79
|
+
config.content_type = 'application/x-www-form-urlencoded'
|
80
|
+
config.payload = payload
|
81
|
+
end
|
82
|
+
|
83
|
+
request.post
|
84
|
+
end
|
85
|
+
|
86
|
+
# Revoke channel access token
|
87
|
+
#
|
88
|
+
# @return [Net::HTTPResponse]
|
89
|
+
def revoke_channel_token(access_token)
|
90
|
+
payload = URI.encode_www_form(access_token: access_token)
|
91
|
+
|
92
|
+
request = Request.new do |config|
|
93
|
+
config.httpclient = httpclient
|
94
|
+
config.endpoint = endpoint
|
95
|
+
config.endpoint_path = '/oauth/revoke'
|
96
|
+
config.content_type = 'application/x-www-form-urlencoded'
|
97
|
+
config.payload = payload
|
98
|
+
end
|
99
|
+
|
100
|
+
request.post
|
62
101
|
end
|
63
102
|
|
64
103
|
# Push messages to line server and to user.
|
@@ -68,7 +107,7 @@ module Line
|
|
68
107
|
#
|
69
108
|
# @return [Net::HTTPResponse]
|
70
109
|
def push_message(user_id, messages)
|
71
|
-
|
110
|
+
channel_token_required
|
72
111
|
|
73
112
|
messages = [messages] if messages.is_a?(Hash)
|
74
113
|
|
@@ -91,7 +130,7 @@ module Line
|
|
91
130
|
#
|
92
131
|
# @return [Net::HTTPResponse]
|
93
132
|
def reply_message(token, messages)
|
94
|
-
|
133
|
+
channel_token_required
|
95
134
|
|
96
135
|
messages = [messages] if messages.is_a?(Hash)
|
97
136
|
|
@@ -114,7 +153,7 @@ module Line
|
|
114
153
|
#
|
115
154
|
# @return [Net::HTTPResponse]
|
116
155
|
def multicast(to, messages)
|
117
|
-
|
156
|
+
channel_token_required
|
118
157
|
|
119
158
|
to = [to] if to.is_a?(String)
|
120
159
|
messages = [messages] if messages.is_a?(Hash)
|
@@ -137,7 +176,7 @@ module Line
|
|
137
176
|
#
|
138
177
|
# @return [Net::HTTPResponse]
|
139
178
|
def broadcast(messages)
|
140
|
-
|
179
|
+
channel_token_required
|
141
180
|
|
142
181
|
messages = [messages] if messages.is_a?(Hash)
|
143
182
|
|
@@ -153,7 +192,7 @@ module Line
|
|
153
192
|
end
|
154
193
|
|
155
194
|
def leave_group(group_id)
|
156
|
-
|
195
|
+
channel_token_required
|
157
196
|
|
158
197
|
request = Request.new do |config|
|
159
198
|
config.httpclient = httpclient
|
@@ -166,7 +205,7 @@ module Line
|
|
166
205
|
end
|
167
206
|
|
168
207
|
def leave_room(room_id)
|
169
|
-
|
208
|
+
channel_token_required
|
170
209
|
|
171
210
|
request = Request.new do |config|
|
172
211
|
config.httpclient = httpclient
|
@@ -473,7 +512,7 @@ module Line
|
|
473
512
|
#
|
474
513
|
# @return [Net::HTTPResponse]
|
475
514
|
def get(endpoint_path)
|
476
|
-
|
515
|
+
channel_token_required
|
477
516
|
|
478
517
|
request = Request.new do |config|
|
479
518
|
config.httpclient = httpclient
|
@@ -491,7 +530,7 @@ module Line
|
|
491
530
|
#
|
492
531
|
# @return [Net::HTTPResponse]
|
493
532
|
def post(endpoint_path, payload = nil)
|
494
|
-
|
533
|
+
channel_token_required
|
495
534
|
|
496
535
|
request = Request.new do |config|
|
497
536
|
config.httpclient = httpclient
|
@@ -510,7 +549,7 @@ module Line
|
|
510
549
|
#
|
511
550
|
# @return [Net::HTTPResponse]
|
512
551
|
def delete(endpoint_path)
|
513
|
-
|
552
|
+
channel_token_required
|
514
553
|
|
515
554
|
request = Request.new do |config|
|
516
555
|
config.httpclient = httpclient
|
@@ -576,6 +615,18 @@ module Line
|
|
576
615
|
b.each_byte { |byte| res |= byte ^ l.shift }
|
577
616
|
res == 0
|
578
617
|
end
|
618
|
+
|
619
|
+
def channel_token_required
|
620
|
+
raise ArgumentError, '`channel_token` is not configured' unless channel_token
|
621
|
+
end
|
622
|
+
|
623
|
+
def channel_id_required
|
624
|
+
raise ArgumentError, '`channel_id` is not configured' unless channel_id
|
625
|
+
end
|
626
|
+
|
627
|
+
def channel_secret_required
|
628
|
+
raise ArgumentError, '`channel_secret` is not configured' unless channel_secret
|
629
|
+
end
|
579
630
|
end
|
580
631
|
end
|
581
632
|
end
|
data/lib/line/bot/request.rb
CHANGED
@@ -22,6 +22,8 @@ module Line
|
|
22
22
|
class Request
|
23
23
|
attr_accessor :endpoint, :endpoint_path, :credentials, :to, :reply_token, :messages, :httpclient, :payload, :file
|
24
24
|
|
25
|
+
attr_writer :content_type
|
26
|
+
|
25
27
|
# Initializes a new Request
|
26
28
|
#
|
27
29
|
# @return [Line::Bot::Request]
|
@@ -44,27 +46,22 @@ module Line
|
|
44
46
|
|
45
47
|
# @return [Hash]
|
46
48
|
def header
|
47
|
-
content_type =
|
48
|
-
if file.is_a? File
|
49
|
-
case file.path
|
50
|
-
when /\.png\z/i then 'image/png'
|
51
|
-
when /\.jpe?g\z/i then 'image/jpeg'
|
52
|
-
else
|
53
|
-
raise ArgumentError.new("invalid file extension: #{file.path}")
|
54
|
-
end
|
55
|
-
else
|
56
|
-
'application/json; charset=UTF-8'
|
57
|
-
end
|
58
|
-
|
59
49
|
header = {
|
60
50
|
'Content-Type' => content_type,
|
61
51
|
'User-Agent' => "LINE-BotSDK-Ruby/#{Line::Bot::API::VERSION}",
|
62
52
|
}
|
63
|
-
hash = credentials.inject({}) { |h, (k, v)| h[k] = v.to_s; h }
|
53
|
+
hash = (credentials || {}).inject({}) { |h, (k, v)| h[k] = v.to_s; h }
|
64
54
|
|
65
55
|
header.merge(hash)
|
66
56
|
end
|
67
57
|
|
58
|
+
# @return [String]
|
59
|
+
def content_type
|
60
|
+
return @content_type if @content_type
|
61
|
+
|
62
|
+
guess_content_type
|
63
|
+
end
|
64
|
+
|
68
65
|
# Get content of specified URL.
|
69
66
|
#
|
70
67
|
# @return [Net::HTTPResponse]
|
@@ -99,6 +96,22 @@ module Line
|
|
99
96
|
def assert_for_deleting_message
|
100
97
|
raise ArgumentError, 'Wrong argument type `endpoint_path`' unless endpoint_path.is_a?(String)
|
101
98
|
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
# @return [String]
|
103
|
+
def guess_content_type
|
104
|
+
if file.is_a? File
|
105
|
+
case file.path
|
106
|
+
when /\.png\z/i then 'image/png'
|
107
|
+
when /\.jpe?g\z/i then 'image/jpeg'
|
108
|
+
else
|
109
|
+
raise ArgumentError.new("invalid file extension: #{file.path}")
|
110
|
+
end
|
111
|
+
else
|
112
|
+
'application/json; charset=UTF-8'
|
113
|
+
end
|
114
|
+
end
|
102
115
|
end
|
103
116
|
end
|
104
117
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-bot-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LINE Corporation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -120,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
|
124
|
-
rubygems_version: 2.7.6
|
123
|
+
rubygems_version: 3.0.3
|
125
124
|
signing_key:
|
126
125
|
specification_version: 4
|
127
126
|
summary: SDK of the LINE Messaging API
|