zetabot 1.1.0 → 2.0.0

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: 9a9cad4211323234ab96a59ba56d31982295e7592613da47f5859e89bb0d022a
4
- data.tar.gz: ddf5ed10a9812098fa3af3113a81d6ba6eabbafca13b582dd0556ca04fb7ea36
3
+ metadata.gz: dc2429ddf380f1ac41654c012e259c544c9a0ff0e590f17f913e075942601d18
4
+ data.tar.gz: 648688cd373041736a394c91639f68ad01440befabbbbf4a74d268bb374021a4
5
5
  SHA512:
6
- metadata.gz: 26f5d9265910bdebf81fa1951555293eac0fb993a03578e1c8abf77e1c48ba716d4c5b47bbdd1f71b1646b2db7856f7b60acc78568c1ac016361c8b306f20b24
7
- data.tar.gz: 91eb85dfdba2027300c335d7a8e718aaf4b44ee33d2bb63a9843fe0822c0abe4d601f1ec52e0b76c442289d250bebd69c77962cfc5fa6796756bffec90815032
6
+ metadata.gz: 0f7c7e290f02c30d77c662418ee589d2f5269bcdd1c3bbcda80a7416b1c96e014bf7b24c815d0db4bddf4c0ebc9289e6173f653603857925c5ba5c05d98b37c6
7
+ data.tar.gz: ec190062500dca097dc17477edd7323e5b5ab33fa33de30492c15a92a420e3c2d58275d05f6899f63f1bfcf433391ffe77b37d04bc37de793c6fa8025049195f
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
-
3
2
  # Specify your gem's dependencies in Zeta.gemspec
4
3
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zetabot (1.0.2)
4
+ zetabot (1.1.0)
5
5
  actionview
6
6
  chronic
7
7
  chronic_duration
@@ -42,18 +42,18 @@ GEM
42
42
  remote: https://rubygems.org/
43
43
  specs:
44
44
  Ascii85 (1.0.3)
45
- actionview (5.2.1)
46
- activesupport (= 5.2.1)
45
+ actionview (5.2.2)
46
+ activesupport (= 5.2.2)
47
47
  builder (~> 3.1)
48
48
  erubi (~> 1.4)
49
49
  rails-dom-testing (~> 2.0)
50
50
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
51
- activesupport (5.2.1)
51
+ activesupport (5.2.2)
52
52
  concurrent-ruby (~> 1.0, >= 1.0.2)
53
53
  i18n (>= 0.7, < 2)
54
54
  minitest (~> 5.1)
55
55
  tzinfo (~> 1.1)
56
- addressable (2.5.2)
56
+ addressable (2.6.0)
57
57
  public_suffix (>= 2.0.2, < 4.0)
58
58
  afm (0.2.2)
59
59
  ansi (1.5.0)
@@ -72,17 +72,17 @@ GEM
72
72
  cinch (~> 2.0)
73
73
  cinch-toolbox (1.1.6)
74
74
  nokogiri (~> 1.6)
75
- clipboard (1.1.2)
75
+ clipboard (1.3.3)
76
76
  code (0.9.2)
77
77
  coderay (~> 1.1)
78
78
  method_source (~> 0.9)
79
79
  coderay (1.1.2)
80
- concurrent-ruby (1.0.5)
80
+ concurrent-ruby (1.1.4)
81
81
  connection_pool (2.2.2)
82
82
  crack (0.4.3)
83
83
  safe_yaml (~> 1.0.0)
84
84
  crass (1.0.4)
85
- daemons (1.2.6)
85
+ daemons (1.3.1)
86
86
  debugging (1.1.1)
87
87
  binding.repl (~> 3.0)
88
88
  paint (>= 0.9, < 3.0)
@@ -90,7 +90,7 @@ GEM
90
90
  thread_safe (~> 0.3, >= 0.3.1)
91
91
  destructor (0.1.0)
92
92
  diff-lcs (1.3)
93
- discourse_api (0.27.0)
93
+ discourse_api (0.33.0)
94
94
  faraday (~> 0.9)
95
95
  faraday_middleware (~> 0.10)
96
96
  rack (>= 1.6)
@@ -100,18 +100,18 @@ GEM
100
100
  dronebl.rb (0.1.0.0)
101
101
  httparty (~> 0.13)
102
102
  nokogiri (~> 1.6)
103
- erubi (1.7.1)
103
+ erubi (1.8.0)
104
104
  every_day_irb (2.0.0)
105
105
  cd (~> 1.0)
106
106
  fancy_irb (1.1.0)
107
107
  paint (>= 0.9, < 3.0)
108
108
  unicode-display_width (~> 1.1)
109
- faraday (0.12.2)
109
+ faraday (0.15.4)
110
110
  multipart-post (>= 1.2, < 3)
111
- faraday_middleware (0.12.2)
111
+ faraday_middleware (0.13.1)
112
112
  faraday (>= 0.7.4, < 1.0)
113
- ffi (1.9.25)
114
- geocoder (1.5.0)
113
+ ffi (1.10.0)
114
+ geocoder (1.5.1)
115
115
  gist (5.0.0)
116
116
  github_api (0.18.2)
117
117
  addressable (~> 2.4)
@@ -127,10 +127,11 @@ GEM
127
127
  hirb (0.7.3)
128
128
  http-cookie (1.0.3)
129
129
  domain_name (~> 0.5)
130
- httparty (0.16.2)
130
+ httparty (0.16.4)
131
+ mime-types (~> 3.0)
131
132
  multi_xml (>= 0.5.2)
132
133
  humanize-bytes (2.2.0)
133
- i18n (1.1.0)
134
+ i18n (1.6.0)
134
135
  concurrent-ruby (~> 1.0)
135
136
  instance (0.2.0)
136
137
  interactive_editor (0.0.11)
@@ -157,9 +158,9 @@ GEM
157
158
  ruby_version (~> 1.0)
158
159
  wirb (~> 2.0)
159
160
  iso8601 (0.9.1)
160
- jwt (1.5.6)
161
+ jwt (2.1.0)
161
162
  liner (0.2.4)
162
- loofah (2.2.2)
163
+ loofah (2.2.3)
163
164
  crass (~> 1.0.2)
164
165
  nokogiri (>= 1.5.9)
165
166
  mechanize (2.7.6)
@@ -174,12 +175,12 @@ GEM
174
175
  memoizable (0.4.2)
175
176
  thread_safe (~> 0.3, >= 0.3.1)
176
177
  method_locator (0.0.4)
177
- method_source (0.9.0)
178
+ method_source (0.9.2)
178
179
  methodfinder (2.2.1)
179
180
  mime-types (3.2.2)
180
181
  mime-types-data (~> 3.2015)
181
182
  mime-types-data (3.2018.0812)
182
- mini_portile2 (2.3.0)
183
+ mini_portile2 (2.4.0)
183
184
  minitest (5.11.3)
184
185
  mkfifo (0.1.1)
185
186
  multi_json (1.13.1)
@@ -190,13 +191,13 @@ GEM
190
191
  connection_pool (~> 2.2)
191
192
  net_http_timeout_errors (0.3.3)
192
193
  netrc (0.11.0)
193
- nokogiri (1.8.4)
194
- mini_portile2 (~> 2.3.0)
194
+ nokogiri (1.10.1)
195
+ mini_portile2 (~> 2.4.0)
195
196
  ntlm-http (0.1.1)
196
197
  numerizer (0.1.1)
197
- oauth2 (1.4.0)
198
- faraday (>= 0.8, < 0.13)
199
- jwt (~> 1.0)
198
+ oauth2 (1.4.1)
199
+ faraday (>= 0.8, < 0.16.0)
200
+ jwt (>= 1.0, < 3.0)
200
201
  multi_json (~> 1.3)
201
202
  multi_xml (~> 0.5)
202
203
  rack (>= 1.2, < 3)
@@ -205,9 +206,9 @@ GEM
205
206
  ruby-ll (~> 2.1)
206
207
  ori (0.1.0)
207
208
  os (1.0.0)
208
- paint (2.0.1)
209
+ paint (2.1.0)
209
210
  parslet (1.8.2)
210
- pdf-reader (2.1.0)
211
+ pdf-reader (2.2.0)
211
212
  Ascii85 (~> 1.0.0)
212
213
  afm (~> 0.2.1)
213
214
  hashery (~> 2.0)
@@ -215,7 +216,7 @@ GEM
215
216
  ttfunk
216
217
  persist (1.0.0)
217
218
  public_suffix (3.0.3)
218
- rack (2.0.5)
219
+ rack (2.0.6)
219
220
  rails-dom-testing (2.0.3)
220
221
  activesupport (>= 4.2.0)
221
222
  nokogiri (>= 1.6)
@@ -233,7 +234,7 @@ GEM
233
234
  rspec-mocks (~> 3.8.0)
234
235
  rspec-core (3.8.0)
235
236
  rspec-support (~> 3.8.0)
236
- rspec-expectations (3.8.1)
237
+ rspec-expectations (3.8.2)
237
238
  diff-lcs (>= 1.2.0, < 2.0)
238
239
  rspec-support (~> 3.8.0)
239
240
  rspec-mocks (3.8.0)
@@ -247,14 +248,14 @@ GEM
247
248
  ruby_engine (1.0.1)
248
249
  ruby_info (1.0.1)
249
250
  ruby_version (1.0.1)
250
- safe_yaml (1.0.4)
251
+ safe_yaml (1.0.5)
251
252
  signed_multiset (0.2.1)
252
253
  spoon (0.0.6)
253
254
  ffi
254
255
  tag_formatter (0.0.3)
255
- temple (0.8.0)
256
+ temple (0.8.1)
256
257
  thread_safe (0.3.6)
257
- tilt (2.0.8)
258
+ tilt (2.0.9)
258
259
  time-lord (1.0.1)
259
260
  ttfunk (1.5.1)
260
261
  tzinfo (1.2.5)
@@ -262,7 +263,7 @@ GEM
262
263
  unf (0.1.4)
263
264
  unf_ext
264
265
  unf_ext (0.0.7.5)
265
- unicode-display_width (1.4.0)
266
+ unicode-display_width (1.5.0)
266
267
  unitwise (2.2.0)
267
268
  liner (~> 0.2)
268
269
  memoizable (~> 0.4)
@@ -291,4 +292,4 @@ DEPENDENCIES
291
292
  zetabot!
292
293
 
293
294
  BUNDLED WITH
294
- 1.16.1
295
+ 1.17.2
@@ -6,7 +6,6 @@ module Plugins
6
6
  def to_s
7
7
  # "[#{time.asctime}] #{who} was seen in #{where} last saying #{what}"
8
8
  time_ago = time_ago_in_words(Time.at(time))
9
- # "[ \x1F#{where.to_s.upcase}\x0F ] \x0304#{who}\x0F: \"\x0303#{what[0..300]}\x0F\" \x02#{time_ago}\x0F ago"
10
9
  if where.to_s.upcase == 'STAFF' || where.to_s.upcase == 'SERVICES'
11
10
  return ''
12
11
  end
@@ -39,17 +39,17 @@ module Plugins
39
39
  # Lookup user from pstore
40
40
  if !@store[msg.user.to_s].nil? && query.nil?
41
41
  stored_location, stored_source = @store[msg.user.to_s].split('::')
42
- stored_source = @api_src.include?(stored_source) ? stored_source : 'wu'
42
+ stored_source = @api_src.include?(stored_source) ? stored_source : 'darksky'
43
43
  data = send("#{stored_source}_src", stored_location)
44
44
  # location = geolookup(@store[msg.user.to_s])
45
45
  # data = wunderground_src(stored_location, false)
46
46
  elsif query.nil?
47
- return msg.reply 'No location set. ?setw <location> :(wu|darkscy|noaa|apixu|owm)'
47
+ return msg.reply 'No location set. ?setw <location> :(darksky|noaa|apixu|owm)'
48
48
  else
49
49
  # data = wu_src(query, true)
50
50
  src = query[/:\w+/].gsub(/:/, '') if query[/:\w+/]
51
51
  query = query.gsub(/:\w+/, '').strip if query
52
- true_src = @api_src.include?(src) ? src : 'wu'
52
+ true_src = @api_src.include?(src) ? src : 'darksky'
53
53
  data = send("#{true_src}_src", query)
54
54
  end
55
55
  return msg.reply "No results found for #{query} with #{true_src} source." if data.nil?
@@ -64,7 +64,7 @@ module Plugins
64
64
  query = query.gsub(/:\w+/, '').strip if query
65
65
 
66
66
  # Sanity Check
67
- true_src = @api_src.include?(src) ? src : 'wu'
67
+ true_src = @api_src.include?(src) ? src : 'darksky'
68
68
  data = send("#{true_src}_src", query)
69
69
 
70
70
  # Error
@@ -76,106 +76,13 @@ module Plugins
76
76
  msg.reply "Your location is now set to #{data.ac.name}, #{data.ac.c}!"
77
77
  end
78
78
 
79
- # ?hurricane
80
- def hurricane(msg)
81
- url = URI.encode "http://api.wunderground.com/api/#{Zsec.wunderground}/currenthurricane/view.json"
82
- location = JSON.parse(
83
- # RestClient.get(url)
84
- open(url).read
85
- )
86
- return msg.reply "No results found for #{query}." if location.nil?
87
- reply_msg = "∴ #{location['currenthurricane'][0]['stormInfo']['stormName_Nice']} " \
88
- "(#{location['currenthurricane'][0]['stormInfo']['stormNumber']}) "\
89
- "≈ Category #{location['currenthurricane'][0]['Current']['SaffirSimpsonCategory']} " \
90
- "≈ Wind #{location['currenthurricane'][0]['Current']['WindSpeed']['Mph']} mph " \
91
- "(#{location['currenthurricane'][0]['Current']['WindSpeed']['Kph']} kph) " \
92
- "≈ Wind Gust #{location['currenthurricane'][0]['Current']['WindGust']['Mph']} mph " \
93
- "(#{location['currenthurricane'][0]['Current']['WindGust']['Kph']} kph) " \
94
- "≈ #{location['currenthurricane'][0]['Current']['Time']['pretty']} ∴"
95
- msg.reply(reply_msg)
96
- end
97
-
98
- # ?almanac <location>
99
- def almanac(msg, locale)
100
- autocomplete = JSON.parse(open(URI.encode("http://autocomplete.wunderground.com/aq?query=#{locale}")).read)
101
- url = URI.encode("http://api.wunderground.com/api/#{Config.secrets[:wunderground]}/almanac/#{autocomplete['RESULTS'][0]['l']}.json")
102
- location = JSON.parse(
103
- # RestClient.get(url)
104
- open(url).read
105
- )
106
- return msg.reply "No results found for #{query}." if location.nil?
107
-
108
- time = Time.now()
109
-
110
- data = OpenStruct.new(
111
- date: time.strftime('%B, %d %Y (%A) '),
112
- airport: location['almanac']['airport_code'],
113
- high_norm_f: location['almanac']['temp_high']['normal']['F'],
114
- high_norm_c: location['almanac']['temp_high']['normal']['C'],
115
- high_record_y: location['almanac']['temp_high']['recordyear'],
116
- high_record_f: location['almanac']['temp_high']['record']['F'],
117
- high_record_c: location['almanac']['temp_high']['normal']['C'],
118
- low_norm_f: location['almanac']['temp_low']['normal']['F'],
119
- low_norm_c: location['almanac']['temp_low']['normal']['C'],
120
- low_record_y: location['almanac']['temp_low']['recordyear'],
121
- low_record_f: location['almanac']['temp_low']['record']['F'],
122
- low_record_c: location['almanac']['temp_low']['normal']['C'],
123
- )
124
-
125
- reply_msg = "∴ Almanac #{data.date} ≈ Airport #{data.airport} " \
126
- "≈ Normal #{data.high_norm_f} F (#{data.high_norm_c} C) | #{data.low_norm_f} F (#{data.low_norm_c} C) " \
127
- "≈ High #{data.high_record_f} F (#{data.high_record_c} C) [#{data.high_record_y}] " \
128
- "≈ Low #{data.low_record_f} F (#{data.low_record_c} C) [#{data.low_record_y}] ∴"
129
-
130
- msg.reply(reply_msg)
131
- end
132
-
133
-
134
79
  # -private
135
80
  private
136
- #### Weather Sources
137
- # Weather Underground - https://wunderground.com
138
- def wu_src(location)
139
- # Fuzzy location lookup
140
- ac = JSON.parse(
141
- open(URI.encode("https://autocomplete.wunderground.com/aq?query=#{location}")).read,
142
- object_class: OpenStruct
143
- )
144
- return nil if ac.RESULTS.empty?
145
-
146
- ac = ac.RESULTS[0]
147
- geolookup = JSON.parse(
148
- open(URI.encode("https://api.wunderground.com/api/#{Config.secrets[:wunderground]}/geolookup/#{ac.l}.json")).read,
149
- object_class: OpenStruct
150
- ).location.l rescue nil
151
-
152
- # Get Data
153
- data = JSON.parse(
154
- open("https://api.wunderground.com/api/#{Config.secrets[:wunderground]}/alerts/conditions#{geolookup}.json").read,
155
- object_class: OpenStruct
156
- )
157
-
158
- debug "DATA: #{data}"
159
- data.ac = ac
160
- current = data.current_observation
161
- alerts = data.alerts.empty? ? 'none' : data.alerts.map {|l| l['type']}.join(',')
162
- # pressure_si = Unitwise((current.pressure_in.to_f)+14.7, '[psi]').convert_to('kPa').to_f.round(2)
163
-
164
- data.reply = "WU ∴ #{ac.name}, #{ac.c} " \
165
- "≈ #{current.weather} #{current.temperature_string} " \
166
- "≈ Feels like #{current.feelslike_string} " \
167
- "≈ Humidity: #{current.relative_humidity} " \
168
- "≈ Pressure: #{current.pressure_in} in/Hg (#{current.pressure_mb} mbar) " \
169
- "≈ Wind: #{current.wind_string} ≈ Alerts: #{alerts} ∴"
170
- return data
171
- # rescue
172
- # return nil
173
- end
174
81
 
175
82
  # Open Weather map - https://openweathermap.org/api
176
83
  def owm_src(location)
177
84
  ac = JSON.parse(
178
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
85
+ open(URI.encode("https://maps.googleapis.com/maps/api/geocode/json?address=#{location}&key=#{Config.secrets[:google]}")).read,
179
86
  object_class: OpenStruct
180
87
  )
181
88
 
@@ -194,13 +101,14 @@ module Plugins
194
101
  )
195
102
 
196
103
  temp = Unitwise(data.main.temp, 'K') # Data is given in kelvin
197
- pressure = Unitwise((data.main.pressure.to_f/10)+101, 'kPa')
104
+ pressure = Unitwise(data.main.pressure.to_f, 'mbar')
198
105
  wind = Unitwise(data.wind.speed, 'kilometer')
199
106
 
200
107
  data.reply = "OWM ∴ #{ac.formatted_address} " \
201
108
  "≈ #{data.weather[0].description}, #{temp.convert_to('[degF]').to_i.round(2)} F (#{temp.convert_to('Cel').to_i.round(2)} C) " \
202
109
  "≈ Humidity: #{data.main.humidity}% " \
203
- "≈ Pressure: #{pressure.convert_to('[psi]').to_f.round(2)} in/Hg (#{data.main.pressure} mbar) " \
110
+ "≈ Pressure: #{pressure.convert_to('[in_i\'Hg]').to_f.round(2)} in/Hg " \
111
+ "(#{pressure.convert_to("kPa").to_f.round(2)} kPa) " \
204
112
  "≈ Wind: #{wind.convert_to('mile').to_i.round(2)} mph (#{wind.to_i.round(2)} km/h) ∴"
205
113
 
206
114
  return data
@@ -210,7 +118,7 @@ module Plugins
210
118
  # DarkSky - https://darksky.net/dev
211
119
  def darksky_src(location)
212
120
  ac = JSON.parse(
213
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
121
+ open(URI.encode("https://maps.googleapis.com/maps/api/geocode/json?address=#{location}&key=#{Config.secrets[:google]}")).read,
214
122
  object_class: OpenStruct
215
123
  )
216
124
  return nil if ac.results.nil? ## Unable to locate
@@ -230,7 +138,7 @@ module Plugins
230
138
  alerts = data.alerts.count rescue 0
231
139
  c = Unitwise(current.temperature, '[degF]').convert_to('Cel').to_i
232
140
  c_feels = Unitwise(current.apparentTemperature, '[degF]').convert_to('Cel').to_i
233
- p = Unitwise((current.pressure.to_f/10)+101, 'kPa')
141
+ p = Unitwise(current.pressure.to_f, 'mbar')
234
142
  gusts = Unitwise(current.windGust, 'mile').convert_to('kilometer').to_i
235
143
 
236
144
  tempstring = "#{current.temperature.to_i} F (#{c} C)"
@@ -240,7 +148,8 @@ module Plugins
240
148
  "≈ #{current.summary} #{tempstring} " \
241
149
  "≈ Feels like #{feelslike} " \
242
150
  "≈ Humidity: #{current.relative_humidity} " \
243
- "≈ Pressure: #{p.convert_to('[psi]').to_f.round(2)} in/Hg (#{current.pressure} mbar) " \
151
+ "≈ Pressure: #{p.convert_to('[in_i\'Hg]').to_f.round(2)} in/Hg " \
152
+ "(#{p.convert_to("kPa").to_f.round(2)} kPa) " \
244
153
  "≈ Wind: gusts upto #{current.windGust} mph (#{gusts} km/h) ≈ Alerts: #{alerts} ∴"
245
154
 
246
155
  return data
@@ -251,7 +160,7 @@ module Plugins
251
160
  # NOAA - https://graphical.weather.gov/xml/
252
161
  def noaa_src(location)
253
162
  ac = JSON.parse(
254
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
163
+ open(URI.encode("https://maps.googleapis.com/maps/api/geocode/json?address=#{location}&key=#{Config.secrets[:google]}")).read,
255
164
  object_class: OpenStruct
256
165
  )
257
166
  return nil if ac.results.nil? ## Unable to locate
@@ -278,13 +187,14 @@ module Plugins
278
187
  temp = "#{f.round(2)} F (#{data.temperature.value.to_i.round(2)} C) "
279
188
  wind = "Gusts: #{data.windGust.value} avg: #{data.windSpeed.value.to_i.round(2)}"
280
189
  feelslike = "#{data.windChill.value.to_i.round(2)} C"
281
- pressure = Unitwise(data.barometricPressure.value.to_f+101325, 'Pa')
190
+ pressure = Unitwise(data.barometricPressure.value.to_f, 'Pa')
282
191
 
283
192
  data.reply = "NOAA ∴ #{ac.formatted_address} " \
284
193
  "≈ #{data.textDescription} #{temp} " \
285
194
  "≈ Feels like #{feelslike} " \
286
195
  "≈ Humidity: #{data.relativeHumidity.value.round(2)} " \
287
- "≈ Pressure: #{pressure.convert_to('[psi]').to_f.round(2)} in/Hg (#{pressure.convert_to('kPa').to_f} mbar) " \
196
+ "≈ Pressure: #{pressure.convert_to('[in_i\'Hg]').to_f.round(2)} in/Hg " \
197
+ "(#{pressure.convert_to("kPa").to_f.round(2)} kPa) " \
288
198
  "≈ Wind: #{wind} ≈ Alerts: ∴"
289
199
  return data
290
200
  # rescue
data/lib/Zeta/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zeta
2
- VERSION = '1.1.0'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zetabot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liothen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-02 00:00:00.000000000 Z
11
+ date: 2019-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -654,8 +654,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
654
654
  - !ruby/object:Gem::Version
655
655
  version: '0'
656
656
  requirements: []
657
- rubyforge_project:
658
- rubygems_version: 2.7.6
657
+ rubygems_version: 3.0.1
659
658
  signing_key:
660
659
  specification_version: 4
661
660
  summary: Zeta is a IRC bot written in ruby using the Cinch Framework