beeline-rb 0.0.2 → 0.0.3

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: e249c6436484ce2d8c39b13459e8b9de1efb88328e2855f52e0f9abc34462e8f
4
- data.tar.gz: ef04c49732843fa6dc5edb4abb4e6300ded0472a5e935e92e5106de39694a88f
3
+ metadata.gz: 3c8246a0606de7f3d8c8e1096d6460493652304ebc5b751d43b120b8e319e3d6
4
+ data.tar.gz: 600690db2274d7a6013e5c7b59fe31d184f7b407a90838d9bba2dbc90cb7fb5e
5
5
  SHA512:
6
- metadata.gz: a63a7990d697520bb59ced2c8d71caf813bc0f1a805cebbbaa3cb22cebaf1d6fbf0f623c3b2d4aa770c3347c211860f35652aebd4388aaaa34a3bb08fc763985
7
- data.tar.gz: ee3966e55f683cf1667447de4a343cfe42abae522d9ed0344d7e8c997c29a21cbb7a98cd06d807ed8e917060c0fa1a30e6340c31e7f692882bee7cf43d53bb6a
6
+ metadata.gz: 5dc559c796937ae9247a467f8dc5974231481b67a48024f827cfcfd8e46438f06ed4dccef3caee2fc1edc26ad780fc04277005c0ed3b153d3a781d2b8cd030b2
7
+ data.tar.gz: 72590503e8c7d7b45c7fd654141d3e9360c2dcbaa00c833dbb20fbbe15da5ca49e2dfb3017396ffbebd49f3dac3386ac3401fd457a99e3cde9f4427fc858eab4
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [beeline](https://github.com/inertia186/beeline-rb)
2
2
  =======
3
3
 
4
- BeeLine is a [BeeChat](https://beechat.hive-engine.com/) Client Framework for Ruby.
4
+ BeeLine is a [BeeChat](https://beechat.hive-engine.com/) Client Framework for Ruby. BeeChat has been designed by [@reazuliqbal](https://hive.blog/@reazuliqbal). BeeLine provides abstraction to for ruby developers to interact through the BeeChat [API](https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md).
5
5
 
6
6
  #### Installation
7
7
 
@@ -33,6 +33,6 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'rb-readline', '~> 0.5', '= 0.5.5'
34
34
 
35
35
  spec.add_dependency 'hive-ruby', '~> 1.0', '= 1.0.0'
36
- spec.add_dependency 'faye-websocket', '~> 0.11', '= 0.11.0'
36
+ spec.add_dependency 'faye-websocket', '~> 0.10'
37
37
  spec.add_dependency 'permessage_deflate', '~> 0.1', '= 0.1.4'
38
38
  end
@@ -20,22 +20,24 @@ module Beeline
20
20
 
21
21
  def process_chat_message(payload)
22
22
  from = payload['from']
23
+
24
+ cooldown(from)
25
+
26
+ conversation_id = payload['conversation_id']
23
27
  content = payload['content'].to_s
24
28
  command_key = content.split(' ').first.split(prefix).last.to_sym
25
29
  reply = if commands.keys.include? command_key
26
30
  args = (content.split(' ') - ["#{prefix}#{command_key}"]).join(' ')
27
31
  args = args.empty? ? nil : args
28
32
 
29
- commands[command_key][:block].call(args, from)
33
+ commands[command_key][:block].call(args, from, conversation_id)
30
34
  elsif (matching_messages = messages.select{|k| Regexp.new(k).match?(content)}).any?
31
35
  message = matching_messages.values.first # match in order of declaration
32
36
 
33
- message[:block].call(content, from)
37
+ message[:block].call(content, from, conversation_id)
34
38
  end
35
39
 
36
40
  if !!reply
37
- conversation_id = payload['conversation_id']
38
-
39
41
  chat_message(conversation_id, from, reply)
40
42
  end
41
43
  end
@@ -45,5 +47,27 @@ module Beeline
45
47
 
46
48
  accept_pending_friend_requests
47
49
  end
50
+ private
51
+ MIN_COOLDOWN = 0.25
52
+ BASE_COOLDOWN = 0.1
53
+ MAX_COOLDOWN = 90.0
54
+
55
+ # Exponential backoff for key. This will apply a rate-limit for each key
56
+ # that depends on how often the key is used.
57
+ #
58
+ # @private
59
+ def cooldown(key)
60
+ @cooldown ||= {}
61
+ @cooldown[key] ||= Time.now
62
+ elapsed = Time.now - @cooldown[key]
63
+
64
+ if elapsed > MAX_COOLDOWN
65
+ @cooldown[key] = nil
66
+ else
67
+ interval = [BASE_COOLDOWN * elapsed, MIN_COOLDOWN].max
68
+
69
+ sleep interval
70
+ end
71
+ end
48
72
  end
49
73
  end
@@ -5,6 +5,9 @@ require 'net/http'
5
5
  require 'digest/sha2'
6
6
 
7
7
  module Beeline
8
+
9
+ # Manages the http and websockets session for the bot. Also interacts with
10
+ # the http API.
8
11
  class Session
9
12
  include Config
10
13
  include Hive::Utils
@@ -40,6 +43,9 @@ module Beeline
40
43
  end
41
44
  end
42
45
 
46
+ # Logs in the bot.
47
+ #
48
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-userslogin GET /users/login}
43
49
  def login
44
50
  return @beeline_session if !!@beeline_session
45
51
 
@@ -61,6 +67,9 @@ module Beeline
61
67
  end
62
68
  end
63
69
 
70
+ # Verifies if the current access token is valid.
71
+ #
72
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-usersverify GET /users/verify}
64
73
  def verify
65
74
  raise "Unable to verify before logging in" unless !!@beeline_session
66
75
 
@@ -76,6 +85,9 @@ module Beeline
76
85
  end
77
86
  end
78
87
 
88
+ # Requests a new access token.
89
+ #
90
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-usersrefresh-token GET /users/refresh-token}
79
91
  def refresh_token
80
92
  raise "Unable to refresh token before logging in" unless !!@beeline_session
81
93
 
@@ -95,6 +107,9 @@ module Beeline
95
107
  end
96
108
  end
97
109
 
110
+ # Generalized get method.
111
+ #
112
+ # @param resource [String] Resource to get, including query parameters.
98
113
  def get(resource)
99
114
  raise "Unable to request #{resource} before logging in" unless !!@beeline_session
100
115
 
@@ -110,10 +125,28 @@ module Beeline
110
125
  end
111
126
  end
112
127
 
128
+ # Returns bot's friends and blocked list.
129
+ #
130
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-usersfriends GET /users/friends}
113
131
  def friends; get('/users/friends'); end
132
+
133
+ # Returns an array of bot's pending friend requests.
134
+ #
135
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-usersfriend-requests GET /users/friend-requests}
114
136
  def friend_requests; get('/users/friend-requests'); end
137
+
138
+ # Returns bot's settings.
139
+ #
140
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-userssettings GET /users/settings}
115
141
  def settings; get('/users/settings'); end
116
142
 
143
+ # Updates the bot's settings.
144
+ #
145
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#post-userssettings POST /users/settings}
146
+ #
147
+ # @param new_settings [Hash]
148
+ # @option new_settings [Hash] :dm
149
+ # * :only_from_friends (Boolean) Only allow direct messages from friends.
117
150
  def settings=(new_settings)
118
151
  raise "Unable to post settings before logging in" unless !!@beeline_session
119
152
 
@@ -131,16 +164,24 @@ module Beeline
131
164
  end
132
165
  end
133
166
 
167
+ # Returns an array of bot-created channels.
168
+ #
169
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-userschannels GET /users/channels}
134
170
  def channels; get('/users/channels'); end
135
171
 
136
- def channels=(new_channels)
172
+ # Creates a new channel.
173
+ #
174
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#post-userschannels POST /users/channels}
175
+ #
176
+ # @param name [String]
177
+ def channels=(name)
137
178
  raise "Unable to post channels before logging in" unless !!@beeline_session
138
179
 
139
180
  resource = "#{base_uri.path}/users/channels"
140
181
 
141
182
  http do |http|
142
183
  request = Net::HTTP::Post.new resource
143
- request.body = new_channels.to_json
184
+ request.body = name
144
185
  request['Content-Type'] = 'application/json; charset=UTF-8'
145
186
  request['User-Agent'] = AGENT_ID
146
187
  request['Authorization'] = "Bearer #{token}"
@@ -149,10 +190,22 @@ module Beeline
149
190
  JSON[response.body]
150
191
  end
151
192
  end
152
-
193
+
194
+ # Logs out the bot.
195
+ #
196
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-userslogout GET /users/logout}
153
197
  def logout; get('/users/logout'); end
198
+
199
+ # Returns details of a conversation.
200
+ #
201
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-messagesconversation GET /messages/conversation}
154
202
  def conversations; get('/messages/conversations'); end
155
203
 
204
+ # Returns details of a conversation.
205
+ #
206
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-messagesconversation GET /messages/conversation}
207
+ #
208
+ # @param id [String] (or Array<String>) Conversation id or array of ids.
156
209
  def conversation(*id)
157
210
  raise "Unable to get conversation before logging in" unless !!@beeline_session
158
211
 
@@ -169,8 +222,14 @@ module Beeline
169
222
  end
170
223
  end
171
224
 
225
+ # Return an array of unread messages.
226
+ #
227
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-messagesnew GET /messages/new}
172
228
  def new_conversations; get('/messages/new'); end
173
229
 
230
+ # Query chat messages by id, \
231
+ #
232
+ # See: {https://github.com/hive-engine/beechat-frontend/blob/master/DOCUMENTATION.md#get-messageschats GET /messages/chats}
174
233
  def chats(id, before = nil, limit = nil)
175
234
  raise "Unable to get conversation before logging in" unless !!@beeline_session
176
235
 
@@ -188,6 +247,8 @@ module Beeline
188
247
  end
189
248
  end
190
249
 
250
+ # Calls #new_conversations and dumps all messages.
251
+ #
191
252
  def dump_conversations
192
253
  new_conversations.map{|c| "#{c['timestamp']} :: #{c['conversation_id']} :: #{c['from']}: #{c['content']}"}
193
254
  end
@@ -1,4 +1,4 @@
1
1
  module Beeline
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  AGENT_ID = "beeline/#{VERSION}"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beeline-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-09 00:00:00.000000000 Z
11
+ date: 2020-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -314,22 +314,16 @@ dependencies:
314
314
  name: faye-websocket
315
315
  requirement: !ruby/object:Gem::Requirement
316
316
  requirements:
317
- - - '='
318
- - !ruby/object:Gem::Version
319
- version: 0.11.0
320
317
  - - "~>"
321
318
  - !ruby/object:Gem::Version
322
- version: '0.11'
319
+ version: '0.10'
323
320
  type: :runtime
324
321
  prerelease: false
325
322
  version_requirements: !ruby/object:Gem::Requirement
326
323
  requirements:
327
- - - '='
328
- - !ruby/object:Gem::Version
329
- version: 0.11.0
330
324
  - - "~>"
331
325
  - !ruby/object:Gem::Version
332
- version: '0.11'
326
+ version: '0.10'
333
327
  - !ruby/object:Gem::Dependency
334
328
  name: permessage_deflate
335
329
  requirement: !ruby/object:Gem::Requirement