beeline-rb 0.0.1 → 0.0.2
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 +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
|