cosgrove 0.0.2 → 0.0.3rc1
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/Gemfile +3 -0
- data/Gemfile.lock +57 -40
- data/README.md +1 -1
- data/cosgrove.gemspec +3 -3
- data/lib/cosgrove.rb +6 -1
- data/lib/cosgrove/account.rb +11 -6
- data/lib/cosgrove/bot.rb +15 -26
- data/lib/cosgrove/comment_job.rb +11 -14
- data/lib/cosgrove/config.rb +1 -1
- data/lib/cosgrove/market.rb +76 -64
- data/lib/cosgrove/support.rb +70 -21
- data/lib/cosgrove/upvote_job.rb +67 -29
- data/lib/cosgrove/utils.rb +132 -24
- data/lib/cosgrove/version.rb +1 -1
- metadata +12 -32
data/lib/cosgrove/utils.rb
CHANGED
@@ -2,6 +2,10 @@ module Cosgrove
|
|
2
2
|
module Utils
|
3
3
|
include Config
|
4
4
|
|
5
|
+
def cycle_api_at
|
6
|
+
@cycle_api_at if defined? @cycle_api_at
|
7
|
+
end
|
8
|
+
|
5
9
|
def reset_api
|
6
10
|
@steem_api = @golos_api = @test_api = nil
|
7
11
|
@steem_folow_api = @golos_follow_api = @test_folow_api = nil
|
@@ -9,12 +13,9 @@ module Cosgrove
|
|
9
13
|
end
|
10
14
|
|
11
15
|
def ping_api(chain)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
result = response.result
|
17
|
-
reset_api unless result.keys.any?
|
16
|
+
api(chain).get_config do |config, errors|
|
17
|
+
reset_api if !!errors || config.keys.none?
|
18
|
+
end
|
18
19
|
|
19
20
|
true
|
20
21
|
end
|
@@ -43,7 +44,7 @@ module Cosgrove
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def api(chain)
|
46
|
-
reset_api if
|
47
|
+
reset_api if cycle_api_at.nil? || cycle_api_at < 15.minutes.ago
|
47
48
|
|
48
49
|
@cycle_api_at ||= Time.now
|
49
50
|
|
@@ -55,7 +56,7 @@ module Cosgrove
|
|
55
56
|
end
|
56
57
|
|
57
58
|
def follow_api(chain)
|
58
|
-
reset_api if
|
59
|
+
reset_api if cycle_api_at.nil? || cycle_api_at < 15.minutes.ago
|
59
60
|
|
60
61
|
@cycle_api_at ||= Time.now
|
61
62
|
|
@@ -66,6 +67,10 @@ module Cosgrove
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
70
|
+
def cycle_stream_at
|
71
|
+
@cycle_stream_at if defined? @cycle_stream_at
|
72
|
+
end
|
73
|
+
|
69
74
|
def reset_stream
|
70
75
|
@steem_stream = @golos_stream = @test_stream = nil
|
71
76
|
@steem_folow_stream = @golos_follow_stream = @test_folow_stream = nil
|
@@ -73,7 +78,7 @@ module Cosgrove
|
|
73
78
|
end
|
74
79
|
|
75
80
|
def stream(chain)
|
76
|
-
reset_stream if
|
81
|
+
reset_stream if cycle_stream_at.nil? || cycle_stream_at < 15.minutes.ago
|
77
82
|
|
78
83
|
@cycle_stream_at ||= Time.now
|
79
84
|
|
@@ -85,7 +90,11 @@ module Cosgrove
|
|
85
90
|
end
|
86
91
|
|
87
92
|
def steem_data_head_block_number
|
88
|
-
|
93
|
+
begin
|
94
|
+
SteemData::Setting.last.last_block
|
95
|
+
rescue
|
96
|
+
-1
|
97
|
+
end
|
89
98
|
end
|
90
99
|
|
91
100
|
def properties(chain)
|
@@ -154,29 +163,128 @@ module Cosgrove
|
|
154
163
|
[]
|
155
164
|
end
|
156
165
|
|
157
|
-
def
|
166
|
+
def find_comment_by_slug(slug)
|
158
167
|
author_name, permlink = parse_slug slug
|
159
|
-
|
168
|
+
find_comment(chain: :steem, author_name: author_name, permlink: permlink)
|
169
|
+
end
|
170
|
+
|
171
|
+
def find_comment(options)
|
172
|
+
chain = options[:chain]
|
173
|
+
author_name = options[:author_name]
|
174
|
+
permlink = options[:permlink]
|
175
|
+
parent_permlink = options[:parent_permlink]
|
160
176
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
177
|
+
post = if chain == :steem
|
178
|
+
posts = SteemData::Post.root_posts.where(author: author_name)
|
179
|
+
posts = posts.where(permlink: permlink) if !!permlink
|
180
|
+
posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
|
181
|
+
|
182
|
+
posts.first
|
183
|
+
end
|
184
|
+
|
185
|
+
if post.nil?
|
186
|
+
post = case chain
|
187
|
+
when :steem
|
188
|
+
posts = SteemApi::Comment.where(author: author_name)
|
189
|
+
posts = posts.where(permlink: permlink) if !!permlink
|
190
|
+
posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
|
191
|
+
|
192
|
+
posts.first
|
193
|
+
when :golos
|
194
|
+
posts = GolosCloud::Comment.where(author: author_name)
|
195
|
+
posts = posts.where(permlink: permlink) if !!permlink
|
196
|
+
posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
|
197
|
+
|
198
|
+
posts.first
|
199
|
+
end
|
165
200
|
end
|
166
201
|
|
167
|
-
if
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
comment = response.result
|
202
|
+
if post.nil? && !!author_name && !!permlink
|
203
|
+
# Fall back to RPC
|
204
|
+
api(chain).get_content(author_name, permlink) do |content, errors|
|
205
|
+
unless content.author.empty?
|
206
|
+
post = content
|
173
207
|
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
post
|
212
|
+
end
|
213
|
+
|
214
|
+
def find_author(options)
|
215
|
+
chain = options[:chain]
|
216
|
+
author_name = options[:author_name]
|
217
|
+
|
218
|
+
author = SteemData::Account.where(name: author_name).last
|
219
|
+
|
220
|
+
if author.nil?
|
221
|
+
author = begin
|
222
|
+
SteemApi::Account.where(name: author_name).last
|
174
223
|
rescue => e
|
175
|
-
|
224
|
+
puts e
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
if author.nil?
|
229
|
+
author = api(chain).get_accounts([author_name]) do |accounts, errors|
|
230
|
+
accounts.last
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
author
|
235
|
+
end
|
236
|
+
|
237
|
+
def find_transfer(options)
|
238
|
+
chain = options[:chain]
|
239
|
+
from = options[:from]
|
240
|
+
to = options[:to]
|
241
|
+
memo_key = options[:memo].to_s.strip
|
242
|
+
|
243
|
+
op = case chain
|
244
|
+
when :steem
|
245
|
+
transfers = SteemData::AccountOperation.type('transfer').
|
246
|
+
where(account: steem_account, from: from, to: steem_account, memo: {'$regex' => ".*#{memo_key}.*"})
|
247
|
+
|
248
|
+
if transfers.any?
|
249
|
+
transfers.last
|
250
|
+
else
|
251
|
+
SteemApi::Tx::Transfer.
|
252
|
+
where(from: from).
|
253
|
+
where(to: to).
|
254
|
+
where("memo LIKE ?", "%#{memo_key}%").last
|
176
255
|
end
|
256
|
+
when :golos
|
257
|
+
GolosCloud::Tx::Transfer.
|
258
|
+
where(from: from).
|
259
|
+
where(to: to).
|
260
|
+
where("memo LIKE ?", "%#{memo_key}%").last
|
177
261
|
end
|
178
262
|
|
179
|
-
|
263
|
+
if op.nil?
|
264
|
+
# Fall back to RPC. The transaction is so new, SteemData hasn't seen it
|
265
|
+
# yet, SteemData is behind, or there is no such transfer.
|
266
|
+
|
267
|
+
api(chain).get_account_history(steem_account, -1, 10000) do |history, error|
|
268
|
+
if !!error
|
269
|
+
ap error
|
270
|
+
return "Try again later."
|
271
|
+
end
|
272
|
+
|
273
|
+
op = history.map do |trx|
|
274
|
+
e = trx.last.op
|
275
|
+
type = e.first
|
276
|
+
next unless type == 'transfer'
|
277
|
+
o = e.last
|
278
|
+
next unless o.from == from
|
279
|
+
next unless o.to == steem_account
|
280
|
+
next unless o.memo =~ /.*#{memo_key}.*/
|
281
|
+
|
282
|
+
o
|
283
|
+
end.compact.last
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
op
|
180
288
|
end
|
181
289
|
|
182
290
|
def core_asset(chain = :steem)
|
data/lib/cosgrove/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cosgrove
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -190,26 +190,6 @@ dependencies:
|
|
190
190
|
- - ">="
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: 0.8.7.6
|
193
|
-
- !ruby/object:Gem::Dependency
|
194
|
-
name: pry
|
195
|
-
requirement: !ruby/object:Gem::Requirement
|
196
|
-
requirements:
|
197
|
-
- - "~>"
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
version: '0.10'
|
200
|
-
- - ">="
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
version: 0.10.3
|
203
|
-
type: :development
|
204
|
-
prerelease: false
|
205
|
-
version_requirements: !ruby/object:Gem::Requirement
|
206
|
-
requirements:
|
207
|
-
- - "~>"
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
version: '0.10'
|
210
|
-
- - ">="
|
211
|
-
- !ruby/object:Gem::Version
|
212
|
-
version: 0.10.3
|
213
193
|
- !ruby/object:Gem::Dependency
|
214
194
|
name: radiator
|
215
195
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,7 +199,7 @@ dependencies:
|
|
219
199
|
version: '0.3'
|
220
200
|
- - ">="
|
221
201
|
- !ruby/object:Gem::Version
|
222
|
-
version: 0.3.
|
202
|
+
version: 0.3.15
|
223
203
|
type: :runtime
|
224
204
|
prerelease: false
|
225
205
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -229,7 +209,7 @@ dependencies:
|
|
229
209
|
version: '0.3'
|
230
210
|
- - ">="
|
231
211
|
- !ruby/object:Gem::Version
|
232
|
-
version: 0.3.
|
212
|
+
version: 0.3.15
|
233
213
|
- !ruby/object:Gem::Dependency
|
234
214
|
name: steem_data
|
235
215
|
requirement: !ruby/object:Gem::Requirement
|
@@ -251,25 +231,25 @@ dependencies:
|
|
251
231
|
- !ruby/object:Gem::Version
|
252
232
|
version: 0.0.3
|
253
233
|
- !ruby/object:Gem::Dependency
|
254
|
-
name:
|
234
|
+
name: golos_cloud
|
255
235
|
requirement: !ruby/object:Gem::Requirement
|
256
236
|
requirements:
|
257
237
|
- - "~>"
|
258
238
|
- !ruby/object:Gem::Version
|
259
|
-
version: '1.
|
239
|
+
version: '1.0'
|
260
240
|
- - ">="
|
261
241
|
- !ruby/object:Gem::Version
|
262
|
-
version: 1.
|
242
|
+
version: 1.0.0
|
263
243
|
type: :runtime
|
264
244
|
prerelease: false
|
265
245
|
version_requirements: !ruby/object:Gem::Requirement
|
266
246
|
requirements:
|
267
247
|
- - "~>"
|
268
248
|
- !ruby/object:Gem::Version
|
269
|
-
version: '1.
|
249
|
+
version: '1.0'
|
270
250
|
- - ">="
|
271
251
|
- !ruby/object:Gem::Version
|
272
|
-
version: 1.
|
252
|
+
version: 1.0.0
|
273
253
|
- !ruby/object:Gem::Dependency
|
274
254
|
name: discordrb
|
275
255
|
requirement: !ruby/object:Gem::Requirement
|
@@ -554,12 +534,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
554
534
|
version: '0'
|
555
535
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
556
536
|
requirements:
|
557
|
-
- - "
|
537
|
+
- - ">"
|
558
538
|
- !ruby/object:Gem::Version
|
559
|
-
version:
|
539
|
+
version: 1.3.1
|
560
540
|
requirements: []
|
561
541
|
rubyforge_project:
|
562
|
-
rubygems_version: 2.6.
|
542
|
+
rubygems_version: 2.6.14
|
563
543
|
signing_key:
|
564
544
|
specification_version: 4
|
565
545
|
summary: Cosgrove Discord Bo t
|