zetabot 2.1.1 → 2.2.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.
@@ -3,6 +3,9 @@
3
3
  # Great gem
4
4
  require 'cinch'
5
5
  require 'cinch/toolbox'
6
+ require 'nokogiri'
7
+ require 'open-uri'
8
+ require 'cgi/escape'
6
9
  # require 'cinch/cooldown'
7
10
  # require 'cinch-cooldown'
8
11
 
@@ -33,22 +36,31 @@ module Plugins
33
36
 
34
37
  def wiki(term)
35
38
  # URI Encode
36
- term = URI.escape(term, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
37
- url = "http://en.wikipedia.org/w/index.php?search=#{term}"
39
+ query = URI.encode_www_form_component(term).gsub("+", "%20")
40
+ url = "https://en.wikipedia.org/w/index.php?search=#{query}"
38
41
 
39
42
  # Truncate text and url if they are too long
40
43
  text = Cinch::Toolbox.truncate(get_def(term, url), @max_length)
41
- url = Cinch::Toolbox.shorten(url)
44
+ url = shorten(url)
42
45
 
43
46
  "Wiki ∴ #{text} [#{url}]"
44
47
  end
45
48
 
49
+ # Cinch::Toolbox.shorten calls is.gd over http, which now only answers with a redirect
50
+ def shorten(url)
51
+ return url if url.length < 45
52
+ short = URI.open("https://is.gd/create.php?format=simple&url=#{CGI.escape(url)}").read.strip
53
+ short.match?(%r{\Ahttps?://is\.gd/\w+\z}) ? short : url
54
+ rescue SocketError, OpenURI::HTTPError, Net::OpenTimeout, Net::ReadTimeout, SystemCallError
55
+ url
56
+ end
57
+
46
58
  def get_def(term, url)
47
- cats = Cinch::Toolbox.get_html_element(url, '#mw-normal-catlinks')
59
+ cats = html_element(url, '#mw-normal-catlinks')
48
60
  if cats && cats.include?('Disambiguation')
49
61
  wiki_text = "'#{term} is too vague and lead to a disambiguation page."
50
62
  else
51
- wiki_text = Cinch::Toolbox.get_html_element(url, '#mw-content-text p')
63
+ wiki_text = html_element(url, '#mw-content-text p')
52
64
  if wiki_text.nil? || wiki_text.include?('Help:Searching')
53
65
  return not_found(wiki_text, url)
54
66
  end
@@ -57,8 +69,8 @@ module Plugins
57
69
  end
58
70
 
59
71
  def not_found(wiki_text, url)
60
- msg = "I couldn't find anything for that search, "
61
- alt_term_text = Cinch::Toolbox.get_html_element(url, '.searchdidyoumean')
72
+ msg = +"I couldn't find anything for that search, "
73
+ alt_term_text = html_element(url, '.searchdidyoumean')
62
74
  if alt_term_text
63
75
  alt_term = alt_term_text[/\ADid you mean: (\w+)\z/, 1]
64
76
  msg << "did you mean '#{alt_term}'?"
@@ -67,6 +79,15 @@ module Plugins
67
79
  end
68
80
  msg
69
81
  end
82
+
83
+ # Cinch::Toolbox.get_html_element relies on Kernel#open(url), removed in Ruby 3
84
+ def html_element(url, selector)
85
+ doc = Nokogiri::HTML(URI.open(url, 'User-Agent' => "Zeta/#{Zeta::VERSION}").read)
86
+ # Wikipedia pads articles with empty placeholder paragraphs; skip blank matches
87
+ doc.css(selector).map(&:content).find { |text| !text.strip.empty? }
88
+ rescue SocketError, OpenURI::HTTPError, Net::OpenTimeout, Net::ReadTimeout, SystemCallError
89
+ nil
90
+ end
70
91
  end
71
92
  end
72
93
 
@@ -1,5 +1,5 @@
1
1
  require 'crack'
2
- require 'cgi'
2
+ require 'cgi/escape'
3
3
 
4
4
  module Plugins
5
5
  class Wolfram
@@ -17,28 +17,36 @@ module Plugins
17
17
  match /calc (.+)/, method: :calculate
18
18
 
19
19
  def calculate(m, query)
20
- # Rescue in case something goes wrong
21
- begin
22
- url = "http://api.wolframalpha.com/v2/query?input=#{CGI.escape(query)}&appid=#{Config.secrets[:wolfram]}&primary=true&format=plaintext"
23
- request = RestClient.get(url).body
24
-
25
- data = Crack::XML.parse(request)
26
-
27
- pod0 = data['queryresult']['pod'][0]['subpod']['plaintext'].strip
28
- pod1 = data['queryresult']['pod'][1]['subpod']['plaintext'].strip
29
-
30
- return 'Unable to get a results' if pod0.nil?
31
-
32
- if pod1.lines.count > 2
33
- m.user.send "# Wolfram Results #\n #{pod0}\n #{pod1}", true
34
- elsif pod0.length > 400
35
- m.user.send("#{pod0} #{pod1}", true)
36
- else
37
- m.reply "#{pod0} = #{pod1}"
38
- end
39
- rescue
40
- m.reply 'Unable to get a results'
20
+ url = "https://api.wolframalpha.com/v2/query?input=#{CGI.escape(query)}&appid=#{CGI.escape(Config.secrets[:wolfram].to_s)}&primary=true&format=plaintext"
21
+ data = Crack::XML.parse(RestClient.get(url).body)
22
+
23
+ pod0, pod1 = pod_texts(data['queryresult'])
24
+ return m.reply('Unable to get a results') if pod0.nil? || pod0.empty?
25
+
26
+ if pod1.lines.count > 2
27
+ m.user.send "# Wolfram Results #\n #{pod0}\n #{pod1}", true
28
+ elsif pod0.length > 400
29
+ m.user.send("#{pod0} #{pod1}", true)
30
+ elsif pod1.empty?
31
+ m.reply pod0
32
+ else
33
+ m.reply "#{pod0} = #{pod1}"
41
34
  end
35
+ rescue RestClient::Unauthorized, RestClient::Forbidden
36
+ error 'Wolfram Alpha rejected the configured appid (Config.secrets[:wolfram])'
37
+ m.action_reply "isn't currently authorized to do that"
38
+ rescue StandardError => e
39
+ error "Wolfram Alpha query failed: #{e.class.name}: #{e.message}"
40
+ m.reply 'Unable to get a results'
41
+ end
42
+
43
+ private
44
+
45
+ # Crack returns a Hash for a single pod/subpod and an Array when there are several
46
+ def pod_texts(result)
47
+ Array.wrap(result && result['pod']).map do |pod|
48
+ Array.wrap(pod['subpod']).map { |sub| sub && sub['plaintext'].to_s.strip }.compact.reject(&:empty?).join("\n")
49
+ end + ['', ''] # always at least an input and result slot
42
50
  end
43
51
  end
44
52
  end
data/lib/Zeta/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zeta
2
- VERSION = '2.1.1'
2
+ VERSION = '2.2.0'
3
3
  end
metadata CHANGED
@@ -1,43 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zetabot
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liothen
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-04-30 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '2.3'
18
+ version: '2.4'
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '2.3'
25
+ version: '2.4'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: rake
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '10.0'
32
+ version: '13.0'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '10.0'
39
+ version: '13.0'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: rspec
43
42
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +51,20 @@ dependencies:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
53
  version: '3.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: webmock
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.0'
55
68
  - !ruby/object:Gem::Dependency
56
69
  name: irbtools
57
70
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +80,7 @@ dependencies:
67
80
  - !ruby/object:Gem::Version
68
81
  version: '0'
69
82
  - !ruby/object:Gem::Dependency
70
- name: daemons
83
+ name: logger
71
84
  requirement: !ruby/object:Gem::Requirement
72
85
  requirements:
73
86
  - - ">="
@@ -81,7 +94,7 @@ dependencies:
81
94
  - !ruby/object:Gem::Version
82
95
  version: '0'
83
96
  - !ruby/object:Gem::Dependency
84
- name: destructor
97
+ name: ostruct
85
98
  requirement: !ruby/object:Gem::Requirement
86
99
  requirements:
87
100
  - - ">="
@@ -95,7 +108,7 @@ dependencies:
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  - !ruby/object:Gem::Dependency
98
- name: tzinfo
111
+ name: base64
99
112
  requirement: !ruby/object:Gem::Requirement
100
113
  requirements:
101
114
  - - ">="
@@ -109,7 +122,7 @@ dependencies:
109
122
  - !ruby/object:Gem::Version
110
123
  version: '0'
111
124
  - !ruby/object:Gem::Dependency
112
- name: unitwise
125
+ name: bigdecimal
113
126
  requirement: !ruby/object:Gem::Requirement
114
127
  requirements:
115
128
  - - ">="
@@ -123,7 +136,7 @@ dependencies:
123
136
  - !ruby/object:Gem::Version
124
137
  version: '0'
125
138
  - !ruby/object:Gem::Dependency
126
- name: cinch
139
+ name: csv
127
140
  requirement: !ruby/object:Gem::Requirement
128
141
  requirements:
129
142
  - - ">="
@@ -137,7 +150,7 @@ dependencies:
137
150
  - !ruby/object:Gem::Version
138
151
  version: '0'
139
152
  - !ruby/object:Gem::Dependency
140
- name: cinch-cooldown
153
+ name: pstore
141
154
  requirement: !ruby/object:Gem::Requirement
142
155
  requirements:
143
156
  - - ">="
@@ -151,7 +164,7 @@ dependencies:
151
164
  - !ruby/object:Gem::Version
152
165
  version: '0'
153
166
  - !ruby/object:Gem::Dependency
154
- name: cinch-toolbox
167
+ name: cgi
155
168
  requirement: !ruby/object:Gem::Requirement
156
169
  requirements:
157
170
  - - ">="
@@ -165,7 +178,7 @@ dependencies:
165
178
  - !ruby/object:Gem::Version
166
179
  version: '0'
167
180
  - !ruby/object:Gem::Dependency
168
- name: cinch-quotes
181
+ name: daemons
169
182
  requirement: !ruby/object:Gem::Requirement
170
183
  requirements:
171
184
  - - ">="
@@ -179,7 +192,7 @@ dependencies:
179
192
  - !ruby/object:Gem::Version
180
193
  version: '0'
181
194
  - !ruby/object:Gem::Dependency
182
- name: mkfifo
195
+ name: destructor
183
196
  requirement: !ruby/object:Gem::Requirement
184
197
  requirements:
185
198
  - - ">="
@@ -193,7 +206,35 @@ dependencies:
193
206
  - !ruby/object:Gem::Version
194
207
  version: '0'
195
208
  - !ruby/object:Gem::Dependency
196
- name: nokogiri
209
+ name: tzinfo
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ type: :runtime
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: unitwise
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ type: :runtime
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ - !ruby/object:Gem::Dependency
237
+ name: ircinch
197
238
  requirement: !ruby/object:Gem::Requirement
198
239
  requirements:
199
240
  - - ">="
@@ -206,6 +247,48 @@ dependencies:
206
247
  - - ">="
207
248
  - !ruby/object:Gem::Version
208
249
  version: '0'
250
+ - !ruby/object:Gem::Dependency
251
+ name: cinch-toolbox
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
257
+ type: :runtime
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ - !ruby/object:Gem::Dependency
265
+ name: mkfifo
266
+ requirement: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ type: :runtime
272
+ prerelease: false
273
+ version_requirements: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ - !ruby/object:Gem::Dependency
279
+ name: nokogiri
280
+ requirement: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: 1.13.6
285
+ type: :runtime
286
+ prerelease: false
287
+ version_requirements: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - ">="
290
+ - !ruby/object:Gem::Version
291
+ version: 1.13.6
209
292
  - !ruby/object:Gem::Dependency
210
293
  name: dronebl.rb
211
294
  requirement: !ruby/object:Gem::Requirement
@@ -500,20 +583,6 @@ dependencies:
500
583
  - - ">="
501
584
  - !ruby/object:Gem::Version
502
585
  version: '0'
503
- - !ruby/object:Gem::Dependency
504
- name: github_api
505
- requirement: !ruby/object:Gem::Requirement
506
- requirements:
507
- - - ">="
508
- - !ruby/object:Gem::Version
509
- version: '0'
510
- type: :runtime
511
- prerelease: false
512
- version_requirements: !ruby/object:Gem::Requirement
513
- requirements:
514
- - - ">="
515
- - !ruby/object:Gem::Version
516
- version: '0'
517
586
  - !ruby/object:Gem::Dependency
518
587
  name: gist
519
588
  requirement: !ruby/object:Gem::Requirement
@@ -556,7 +625,6 @@ dependencies:
556
625
  - - ">="
557
626
  - !ruby/object:Gem::Version
558
627
  version: '0'
559
- description:
560
628
  email:
561
629
  - liothen@flagrun.net
562
630
  executables:
@@ -566,7 +634,9 @@ extra_rdoc_files: []
566
634
  files:
567
635
  - ".bundle/config"
568
636
  - ".gitignore"
569
- - ".tool-versions"
637
+ - ".mise.toml"
638
+ - ".projectile"
639
+ - ".rspec"
570
640
  - Gemfile
571
641
  - Gemfile.lock
572
642
  - LICENSE.txt
@@ -591,6 +661,7 @@ files:
591
661
  - lib/Zeta/admin/plugins.rb
592
662
  - lib/Zeta/admin/users.rb
593
663
  - lib/Zeta/blacklist.rb
664
+ - lib/Zeta/botinfo.txt
594
665
  - lib/Zeta/cache.rb
595
666
  - lib/Zeta/cinch.rb
596
667
  - lib/Zeta/config.rb
@@ -643,7 +714,6 @@ licenses:
643
714
  - MIT
644
715
  metadata:
645
716
  allowed_push_host: https://rubygems.org
646
- post_install_message:
647
717
  rdoc_options: []
648
718
  require_paths:
649
719
  - lib
@@ -651,15 +721,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
651
721
  requirements:
652
722
  - - ">="
653
723
  - !ruby/object:Gem::Version
654
- version: '0'
724
+ version: '3.2'
655
725
  required_rubygems_version: !ruby/object:Gem::Requirement
656
726
  requirements:
657
727
  - - ">="
658
728
  - !ruby/object:Gem::Version
659
729
  version: '0'
660
730
  requirements: []
661
- rubygems_version: 3.3.7
662
- signing_key:
731
+ rubygems_version: 4.0.20
663
732
  specification_version: 4
664
733
  summary: Zeta is a IRC bot written in ruby using the Cinch Framework
665
734
  test_files: []
data/.tool-versions DELETED
@@ -1 +0,0 @@
1
- ruby 2.7.6