beeline-rb 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/example-config.yml +3 -0
- data/lib/beeline/bot.rb +6 -0
- data/lib/beeline/client.rb +20 -4
- data/lib/beeline/config.rb +9 -1
- data/lib/beeline/session.rb +24 -37
- data/lib/beeline/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e249c6436484ce2d8c39b13459e8b9de1efb88328e2855f52e0f9abc34462e8f
|
4
|
+
data.tar.gz: ef04c49732843fa6dc5edb4abb4e6300ded0472a5e935e92e5106de39694a88f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a63a7990d697520bb59ced2c8d71caf813bc0f1a805cebbbaa3cb22cebaf1d6fbf0f623c3b2d4aa770c3347c211860f35652aebd4388aaaa34a3bb08fc763985
|
7
|
+
data.tar.gz: ee3966e55f683cf1667447de4a343cfe42abae522d9ed0344d7e8c997c29a21cbb7a98cd06d807ed8e917060c0fa1a30e6340c31e7f692882bee7cf43d53bb6a
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
beeline
|
1
|
+
[beeline](https://github.com/inertia186/beeline-rb)
|
2
2
|
=======
|
3
3
|
|
4
|
-
BeeLine is a BeeChat Client Framework for Ruby.
|
4
|
+
BeeLine is a [BeeChat](https://beechat.hive-engine.com/) Client Framework for Ruby.
|
5
5
|
|
6
6
|
#### Installation
|
7
7
|
|
@@ -90,4 +90,4 @@ If you're using Tender, I'd love to hear from you. Drop me a line and tell me w
|
|
90
90
|
|
91
91
|
## License
|
92
92
|
|
93
|
-
I don't believe in intellectual "property". If you do, consider BeeLine as licensed under a Creative Commons
|
93
|
+
I don't believe in intellectual "property". If you do, consider BeeLine as licensed under a Creative Commons <a href="http://creativecommons.org/publicdomain/zero/1.0/"><img src="http://i.creativecommons.org/p/zero/1.0/80x15.png" alt="CC0" /></a> License.
|
data/example-config.yml
CHANGED
data/lib/beeline/bot.rb
CHANGED
data/lib/beeline/client.rb
CHANGED
@@ -6,7 +6,7 @@ module Beeline
|
|
6
6
|
class Client
|
7
7
|
include Beeline::Config
|
8
8
|
|
9
|
-
attr_reader :commands, :messages
|
9
|
+
attr_reader :commands, :messages, :session
|
10
10
|
|
11
11
|
INITIAL_LATCH = 0.01
|
12
12
|
MAX_LATCH = 3.0
|
@@ -60,24 +60,40 @@ module Beeline
|
|
60
60
|
extensions: [PermessageDeflate],
|
61
61
|
headers: {
|
62
62
|
'User-Agent' => AGENT_ID,
|
63
|
-
'
|
63
|
+
'Authorization' => "Bearer #{session.token}"
|
64
64
|
},
|
65
65
|
ping: WS_KEEPALIVE_TIME
|
66
66
|
)
|
67
67
|
end
|
68
68
|
|
69
69
|
def authenticate
|
70
|
-
if result = socket.send({type: 'authenticate', payload: {username: hive_account, token: session.
|
70
|
+
if result = socket.send({type: 'authenticate', payload: {username: hive_account, token: session.token}}.to_json)
|
71
71
|
puts "Authentication sent: #{session.inspect}"
|
72
72
|
|
73
73
|
ping
|
74
|
+
|
75
|
+
accept_pending_friend_requests
|
74
76
|
else
|
75
77
|
puts "Could not authenticate."
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
79
81
|
def chat_message(conversation_id, to, message)
|
80
|
-
socket.send({type: 'chat-message', payload: {conversation_id: conversation_id, to: to, message: message}}.to_json)
|
82
|
+
if socket.send({type: 'chat-message', payload: {conversation_id: conversation_id, to: to, message: message}}.to_json)
|
83
|
+
puts "Reply sent to #{to}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def accept_pending_friend_requests
|
88
|
+
return unless friendships[:accept] == 'auto'
|
89
|
+
|
90
|
+
session.friend_requests.each do |friend_request|
|
91
|
+
if socket.send({type: 'accept-friendship', payload: {id: friend_request['id']}}.to_json)
|
92
|
+
puts "Accept friendship sent for #{friend_request['username']}"
|
93
|
+
else
|
94
|
+
puts "Could not accept friendship request: #{friend_request}"
|
95
|
+
end
|
96
|
+
end
|
81
97
|
end
|
82
98
|
|
83
99
|
# @private
|
data/lib/beeline/config.rb
CHANGED
@@ -2,6 +2,10 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Beeline
|
4
4
|
module Config
|
5
|
+
def friendships
|
6
|
+
beechat[:friendships] || {}
|
7
|
+
end
|
8
|
+
|
5
9
|
def hive_account
|
6
10
|
chain[:hive_account]
|
7
11
|
end
|
@@ -14,8 +18,12 @@ module Beeline
|
|
14
18
|
chain[:hive_public_key]
|
15
19
|
end
|
16
20
|
private
|
21
|
+
def beechat
|
22
|
+
@beechat_hash ||= yml[:beechat] || {}
|
23
|
+
end
|
24
|
+
|
17
25
|
def chain
|
18
|
-
@chain_hash ||= yml[:chain]
|
26
|
+
@chain_hash ||= yml[:chain] || {}
|
19
27
|
end
|
20
28
|
|
21
29
|
def yml
|
data/lib/beeline/session.rb
CHANGED
@@ -9,13 +9,12 @@ module Beeline
|
|
9
9
|
include Config
|
10
10
|
include Hive::Utils
|
11
11
|
|
12
|
-
attr_reader :ws_session
|
12
|
+
attr_reader :ws_session
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
@base_uri = nil
|
16
16
|
@ws_uri = nil
|
17
|
-
@
|
18
|
-
@ws_session = nil
|
17
|
+
@beeline_session = nil
|
19
18
|
@http = nil
|
20
19
|
end
|
21
20
|
|
@@ -27,23 +26,12 @@ module Beeline
|
|
27
26
|
@ws_uri ||= URI.parse(BEE_WS_URL)
|
28
27
|
end
|
29
28
|
|
30
|
-
def
|
31
|
-
login if @
|
29
|
+
def token
|
30
|
+
login if @beeline_session.nil?
|
32
31
|
|
33
|
-
return if @
|
32
|
+
return if @beeline_session.nil?
|
34
33
|
|
35
|
-
[
|
36
|
-
@cookies.split('; ').select{|t| t.start_with? 'token='}.first,
|
37
|
-
@cookies.split('; ').select{|t| t.start_with? 'refresh_token='}.first
|
38
|
-
].join('; ')
|
39
|
-
end
|
40
|
-
|
41
|
-
def ws_token
|
42
|
-
login if @ws_session.nil?
|
43
|
-
|
44
|
-
return if @ws_session.nil?
|
45
|
-
|
46
|
-
@ws_session['ws_token']
|
34
|
+
@beeline_session['token']
|
47
35
|
end
|
48
36
|
|
49
37
|
def http(&block)
|
@@ -53,7 +41,7 @@ module Beeline
|
|
53
41
|
end
|
54
42
|
|
55
43
|
def login
|
56
|
-
return @
|
44
|
+
return @beeline_session if !!@beeline_session
|
57
45
|
|
58
46
|
timestamp = (Time.now.to_f * 1000).to_i
|
59
47
|
message = "#{hive_account}#{timestamp}"
|
@@ -66,8 +54,7 @@ module Beeline
|
|
66
54
|
response = http.request request
|
67
55
|
|
68
56
|
if response.code == '200'
|
69
|
-
@
|
70
|
-
@ws_session = JSON[response.body]
|
57
|
+
@beeline_session = JSON[response.body]
|
71
58
|
else
|
72
59
|
JSON[response.body]
|
73
60
|
end
|
@@ -75,14 +62,14 @@ module Beeline
|
|
75
62
|
end
|
76
63
|
|
77
64
|
def verify
|
78
|
-
raise "Unable to verify before logging in" unless !!@
|
65
|
+
raise "Unable to verify before logging in" unless !!@beeline_session
|
79
66
|
|
80
67
|
resource = "#{base_uri.path}/users/verify"
|
81
68
|
|
82
69
|
http do |http|
|
83
70
|
request = Net::HTTP::Get.new resource
|
84
71
|
request['User-Agent'] = AGENT_ID
|
85
|
-
request['
|
72
|
+
request['Authorization'] = "Bearer #{token}"
|
86
73
|
response = http.request request
|
87
74
|
|
88
75
|
JSON[response.body]
|
@@ -90,19 +77,18 @@ module Beeline
|
|
90
77
|
end
|
91
78
|
|
92
79
|
def refresh_token
|
93
|
-
raise "Unable to refresh token before logging in" unless !!@
|
80
|
+
raise "Unable to refresh token before logging in" unless !!@beeline_session
|
94
81
|
|
95
82
|
resource = "#{base_uri.path}/refresh-token"
|
96
83
|
|
97
84
|
http do |http|
|
98
85
|
request = Net::HTTP::Get.new resource
|
99
86
|
request['User-Agent'] = AGENT_ID
|
100
|
-
request['
|
87
|
+
request['Authorization'] = "Bearer #{@beeline_session['refresh_token']}"
|
101
88
|
response = http.request request
|
102
89
|
|
103
90
|
if response.code == '200'
|
104
|
-
@
|
105
|
-
@ws_session = JSON[response.body]
|
91
|
+
@beeline_session['token'] = JSON[response.body]['token']
|
106
92
|
else
|
107
93
|
JSON[response.body]
|
108
94
|
end
|
@@ -110,14 +96,14 @@ module Beeline
|
|
110
96
|
end
|
111
97
|
|
112
98
|
def get(resource)
|
113
|
-
raise "Unable to request #{resource} before logging in" unless !!@
|
99
|
+
raise "Unable to request #{resource} before logging in" unless !!@beeline_session
|
114
100
|
|
115
101
|
resource = "#{base_uri.path}#{resource}"
|
116
102
|
|
117
103
|
http do |http|
|
118
104
|
request = Net::HTTP::Get.new resource
|
119
105
|
request['User-Agent'] = AGENT_ID
|
120
|
-
request['
|
106
|
+
request['Authorization'] = "Bearer #{token}"
|
121
107
|
response = http.request request
|
122
108
|
|
123
109
|
JSON[response.body]
|
@@ -125,10 +111,11 @@ module Beeline
|
|
125
111
|
end
|
126
112
|
|
127
113
|
def friends; get('/users/friends'); end
|
114
|
+
def friend_requests; get('/users/friend-requests'); end
|
128
115
|
def settings; get('/users/settings'); end
|
129
116
|
|
130
117
|
def settings=(new_settings)
|
131
|
-
raise "Unable to post settings before logging in" unless !!@
|
118
|
+
raise "Unable to post settings before logging in" unless !!@beeline_session
|
132
119
|
|
133
120
|
resource = "#{base_uri.path}/users/settings"
|
134
121
|
|
@@ -137,7 +124,7 @@ module Beeline
|
|
137
124
|
request.body = new_settings.to_json
|
138
125
|
request['Content-Type'] = 'application/json; charset=UTF-8'
|
139
126
|
request['User-Agent'] = AGENT_ID
|
140
|
-
request['
|
127
|
+
request['Authorization'] = "Bearer #{token}"
|
141
128
|
response = http.request request
|
142
129
|
|
143
130
|
JSON[response.body]
|
@@ -147,7 +134,7 @@ module Beeline
|
|
147
134
|
def channels; get('/users/channels'); end
|
148
135
|
|
149
136
|
def channels=(new_channels)
|
150
|
-
raise "Unable to post channels before logging in" unless !!@
|
137
|
+
raise "Unable to post channels before logging in" unless !!@beeline_session
|
151
138
|
|
152
139
|
resource = "#{base_uri.path}/users/channels"
|
153
140
|
|
@@ -156,7 +143,7 @@ module Beeline
|
|
156
143
|
request.body = new_channels.to_json
|
157
144
|
request['Content-Type'] = 'application/json; charset=UTF-8'
|
158
145
|
request['User-Agent'] = AGENT_ID
|
159
|
-
request['
|
146
|
+
request['Authorization'] = "Bearer #{token}"
|
160
147
|
response = http.request request
|
161
148
|
|
162
149
|
JSON[response.body]
|
@@ -167,7 +154,7 @@ module Beeline
|
|
167
154
|
def conversations; get('/messages/conversations'); end
|
168
155
|
|
169
156
|
def conversation(*id)
|
170
|
-
raise "Unable to get conversation before logging in" unless !!@
|
157
|
+
raise "Unable to get conversation before logging in" unless !!@beeline_session
|
171
158
|
|
172
159
|
id = [id].flatten
|
173
160
|
resource = "#{base_uri.path}/messages/conversation?ids=#{id.join(',')}"
|
@@ -175,7 +162,7 @@ module Beeline
|
|
175
162
|
http do |http|
|
176
163
|
request = Net::HTTP::Get.new resource
|
177
164
|
request['User-Agent'] = AGENT_ID
|
178
|
-
request['
|
165
|
+
request['Authorization'] = "Bearer #{token}"
|
179
166
|
response = http.request request
|
180
167
|
|
181
168
|
JSON[response.body]
|
@@ -185,7 +172,7 @@ module Beeline
|
|
185
172
|
def new_conversations; get('/messages/new'); end
|
186
173
|
|
187
174
|
def chats(id, before = nil, limit = nil)
|
188
|
-
raise "Unable to get conversation before logging in" unless !!@
|
175
|
+
raise "Unable to get conversation before logging in" unless !!@beeline_session
|
189
176
|
|
190
177
|
resource = "#{base_uri.path}/messages/chats?conversation_id=#{id}"
|
191
178
|
resource += "&before=#{before.utc.iso8601}" if !!before
|
@@ -194,7 +181,7 @@ module Beeline
|
|
194
181
|
http do |http|
|
195
182
|
request = Net::HTTP::Get.new resource
|
196
183
|
request['User-Agent'] = AGENT_ID
|
197
|
-
request['
|
184
|
+
request['Authorization'] = "Bearer #{token}"
|
198
185
|
response = http.request request
|
199
186
|
|
200
187
|
JSON[response.body]
|
data/lib/beeline/version.rb
CHANGED
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.
|
4
|
+
version: 0.0.2
|
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-
|
11
|
+
date: 2020-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|