zetabot 1.0.3 → 1.0.4

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: 2dd3327d9406e8bace63344c59915b050f1d299c020158b37002b3ab1173ec2e
4
- data.tar.gz: ee405d6b921baeff3a733b4ef4099ac9008fd813886bdd5fa5542d0b82151bf7
3
+ metadata.gz: 0e83b24e7bb11ff64bf361e2c02c1e0a02bdc566f749510ed466460605e3cc12
4
+ data.tar.gz: 4b6a88945cfda34e4802b032ee70d06bacb6a96cdd1b57951b0449b28d92442a
5
5
  SHA512:
6
- metadata.gz: e273343279ae3027037db881aa019d62d44c235b13789797fa9bcb12537bbefd8505b74d11e60ea6a55c004e44ec70ed94068477ca4fa282ff01b82e29b0f283
7
- data.tar.gz: cad11ac72c558ad148d0c15704f5bae925adcd76a80d5db2372a1658e4beaadd12d127afd0caa9b247adeabdf473b48062846d3e16a7ea1ff9e7c1f4953355df
6
+ metadata.gz: 70bf0af0cf2e4f1c54ea986bcdb29b9ea3f9e7ecabd4c2c25eb009d5e87f09a23c8a03e2aff03729d50c4653c46a72481c5153115851a0d6be8db0e82b319bc3
7
+ data.tar.gz: f6f666313c39d5591a0748557c2947e9d9307e028b0af4de3e4d1d3e2557c3c8371d7552afb2de2eaa4c25500906f4819473c94f1ef0853770ec4e338becce9b
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.0.4)
5
5
  actionview
6
6
  chronic
7
7
  chronic_duration
@@ -41,23 +41,23 @@ PATH
41
41
  GEM
42
42
  remote: https://rubygems.org/
43
43
  specs:
44
- Ascii85 (1.0.2)
45
- actionview (5.1.4)
46
- activesupport (= 5.1.4)
44
+ Ascii85 (1.0.3)
45
+ actionview (5.2.0)
46
+ activesupport (= 5.2.0)
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.1.4)
51
+ activesupport (5.2.0)
52
52
  concurrent-ruby (~> 1.0, >= 1.0.2)
53
- i18n (~> 0.7)
53
+ i18n (>= 0.7, < 2)
54
54
  minitest (~> 5.1)
55
55
  tzinfo (~> 1.1)
56
56
  addressable (2.5.2)
57
57
  public_suffix (>= 2.0.2, < 4.0)
58
58
  afm (0.2.2)
59
59
  ansi (1.5.0)
60
- ast (2.3.0)
60
+ ast (2.4.0)
61
61
  binding.repl (3.0.0)
62
62
  builder (3.2.3)
63
63
  cd (1.0.1)
@@ -80,7 +80,7 @@ GEM
80
80
  concurrent-ruby (1.0.5)
81
81
  crack (0.4.3)
82
82
  safe_yaml (~> 1.0.0)
83
- crass (1.0.3)
83
+ crass (1.0.4)
84
84
  daemons (1.2.6)
85
85
  debugging (1.1.1)
86
86
  binding.repl (~> 3.0)
@@ -89,17 +89,17 @@ GEM
89
89
  thread_safe (~> 0.3, >= 0.3.1)
90
90
  destructor (0.1.0)
91
91
  diff-lcs (1.3)
92
- discourse_api (0.20.0)
92
+ discourse_api (0.20.1)
93
93
  faraday (~> 0.9)
94
94
  faraday_middleware (~> 0.10)
95
95
  rack (>= 1.6)
96
96
  dnsbl-client (1.0.4)
97
- domain_name (0.5.20170404)
97
+ domain_name (0.5.20180417)
98
98
  unf (>= 0.0.5, < 1.0.0)
99
99
  dronebl.rb (0.1.0.0)
100
100
  httparty (~> 0.13)
101
101
  nokogiri (~> 1.6)
102
- erubi (1.7.0)
102
+ erubi (1.7.1)
103
103
  every_day_irb (2.0.0)
104
104
  cd (~> 1.0)
105
105
  fancy_irb (1.1.0)
@@ -109,8 +109,8 @@ GEM
109
109
  multipart-post (>= 1.2, < 3)
110
110
  faraday_middleware (0.12.2)
111
111
  faraday (>= 0.7.4, < 1.0)
112
- ffi (1.9.18)
113
- geocoder (1.4.5)
112
+ ffi (1.9.23)
113
+ geocoder (1.4.7)
114
114
  gist (4.6.2)
115
115
  github_api (0.18.2)
116
116
  addressable (~> 2.4)
@@ -126,10 +126,10 @@ GEM
126
126
  hirb (0.7.3)
127
127
  http-cookie (1.0.3)
128
128
  domain_name (~> 0.5)
129
- httparty (0.15.6)
129
+ httparty (0.16.2)
130
130
  multi_xml (>= 0.5.2)
131
131
  humanize-bytes (2.2.0)
132
- i18n (0.9.3)
132
+ i18n (1.0.1)
133
133
  concurrent-ruby (~> 1.0)
134
134
  instance (0.2.0)
135
135
  interactive_editor (0.0.11)
@@ -158,7 +158,7 @@ GEM
158
158
  iso8601 (0.9.1)
159
159
  jwt (1.5.6)
160
160
  liner (0.2.4)
161
- loofah (2.1.1)
161
+ loofah (2.2.2)
162
162
  crass (~> 1.0.2)
163
163
  nokogiri (>= 1.5.9)
164
164
  mechanize (2.7.5)
@@ -179,7 +179,7 @@ GEM
179
179
  mime-types-data (~> 3.2015)
180
180
  mime-types-data (3.2016.0521)
181
181
  mini_portile2 (2.3.0)
182
- minitest (5.11.1)
182
+ minitest (5.11.3)
183
183
  mkfifo (0.1.1)
184
184
  multi_json (1.13.1)
185
185
  multi_xml (0.6.0)
@@ -188,7 +188,7 @@ GEM
188
188
  net-http-persistent (2.9.4)
189
189
  net_http_timeout_errors (0.3.0)
190
190
  netrc (0.11.0)
191
- nokogiri (1.8.1)
191
+ nokogiri (1.8.2)
192
192
  mini_portile2 (~> 2.3.0)
193
193
  ntlm-http (0.1.1)
194
194
  numerizer (0.1.1)
@@ -198,29 +198,29 @@ GEM
198
198
  multi_json (~> 1.3)
199
199
  multi_xml (~> 0.5)
200
200
  rack (>= 1.2, < 3)
201
- oga (2.13)
201
+ oga (2.15)
202
202
  ast
203
203
  ruby-ll (~> 2.1)
204
204
  ori (0.1.0)
205
205
  os (1.0.0)
206
206
  paint (2.0.1)
207
- parslet (1.8.1)
208
- pdf-reader (2.0.0)
207
+ parslet (1.8.2)
208
+ pdf-reader (2.1.0)
209
209
  Ascii85 (~> 1.0.0)
210
210
  afm (~> 0.2.1)
211
211
  hashery (~> 2.0)
212
212
  ruby-rc4
213
213
  ttfunk
214
214
  persist (1.0.0)
215
- public_suffix (3.0.1)
216
- rack (2.0.3)
215
+ public_suffix (3.0.2)
216
+ rack (2.0.5)
217
217
  rails-dom-testing (2.0.3)
218
218
  activesupport (>= 4.2.0)
219
219
  nokogiri (>= 1.6)
220
- rails-html-sanitizer (1.0.3)
221
- loofah (~> 2.0)
220
+ rails-html-sanitizer (1.0.4)
221
+ loofah (~> 2.2, >= 2.2.2)
222
222
  rake (10.5.0)
223
- recursive-open-struct (1.0.5)
223
+ recursive-open-struct (1.1.0)
224
224
  rest-client (2.0.2)
225
225
  http-cookie (>= 1.0.2, < 2.0)
226
226
  mime-types (>= 1.16, < 4.0)
@@ -237,7 +237,7 @@ GEM
237
237
  rspec-mocks (3.7.0)
238
238
  diff-lcs (>= 1.2.0, < 2.0)
239
239
  rspec-support (~> 3.7.0)
240
- rspec-support (3.7.0)
240
+ rspec-support (3.7.1)
241
241
  ruby-ll (2.1.2)
242
242
  ansi
243
243
  ast
@@ -255,12 +255,12 @@ GEM
255
255
  tilt (2.0.8)
256
256
  time-lord (1.0.1)
257
257
  ttfunk (1.5.1)
258
- tzinfo (1.2.4)
258
+ tzinfo (1.2.5)
259
259
  thread_safe (~> 0.1)
260
260
  unf (0.1.4)
261
261
  unf_ext
262
- unf_ext (0.0.7.4)
263
- unicode-display_width (1.3.0)
262
+ unf_ext (0.0.7.5)
263
+ unicode-display_width (1.3.2)
264
264
  unitwise (2.2.0)
265
265
  liner (~> 0.2)
266
266
  memoizable (~> 0.4)
@@ -42,18 +42,20 @@ module Plugins
42
42
  return msg.reply("PDF → Unable to parse. file too big #{humanize_size}kb")
43
43
  end
44
44
 
45
-
46
- # Get file and parse metadata
47
- open(url, "rb") do |io|
48
- reader = PDF::Reader.new(io)
49
- creator = reader.info[:Creator] || 'Anon'
50
- producer = reader.info[:Producer] || 'Anon'
51
- creation = reader.info[:CreationDate] || 'now'
52
- modification = reader.info[:ModDate] || 'now'
53
- title = reader.info[:Title] || nil
54
- display = title ? title : "Title: None <> Creator: #{creator} <> Producer: #{producer} <> Creation: #{creation}"
55
- msg.reply "PDF (#{humanize_size}kb) #{display}"
56
- end
45
+ # Parse the HTML
46
+ Timeout::timeout(12) {
47
+ # Get file and parse metadata
48
+ open(url, "rb") do |io|
49
+ reader = PDF::Reader.new(io)
50
+ creator = reader.info[:Creator] || 'Anon'
51
+ producer = reader.info[:Producer] || 'Anon'
52
+ creation = reader.info[:CreationDate] || 'now'
53
+ modification = reader.info[:ModDate] || 'now'
54
+ title = reader.info[:Title] || nil
55
+ display = title ? title : "Title: None <> Creator: #{creator} <> Producer: #{producer} <> Creation: #{creation}"
56
+ msg.reply "PDF (#{humanize_size}kb) → #{display}"
57
+ end
58
+ }
57
59
 
58
60
 
59
61
  rescue => e
@@ -21,79 +21,101 @@ module Plugins
21
21
  match /w (.+)/, method: :weather
22
22
  match 'w', method: :weather
23
23
  match /setw (.+)/, method: :set_location
24
+ match /setws (.+)/, method: :set_source
24
25
  match /wx (.+)/, method: :weather
25
26
  match /weather (.+)/, method: :weather
26
27
 
27
28
  #####
28
29
  def initialize(*args)
29
- @api_src = %w{wu noaa darksky owm}
30
- @store = Persist.new(File.join(Dir.home, '.zeta', 'cache', 'weather.pstore'))
30
+ @api_src = %w{wu noaa ds owm}
31
+ @src_translated = {wu: 'Wunderground', noaa: 'NOAA', ds: 'DarkSky', owm: 'Open Weather Map'}
32
+ @store = Persist.new(File.join(Dir.home, '.zeta', 'cache', 'weather.pstore'))
33
+ @source = Persist.new(File.join(Dir.home, '.zeta', 'cache', 'weather_source.pstore'))
31
34
  super
32
35
  end
33
36
 
34
37
  # ?w <location>
35
38
  def weather(msg, query=nil)
36
- # Pull data source and scrub query
37
- # Lookup user from pstore
39
+ if !@source[msg.user.to_s].nil?
40
+ stored_source = @source[msg.user.to_s]
41
+ else
42
+ stored_source = 'wu'
43
+ end
44
+
38
45
  if !@store[msg.user.to_s].nil? && query.nil?
39
- stored_location, stored_source = @store[msg.user.to_s].split('::')
40
- stored_source = @api_src.include?(stored_source) ? stored_source : 'wu'
41
- data = send("#{stored_source}_src", stored_location)
42
- # location = geolookup(@store[msg.user.to_s])
43
- # data = wunderground_src(stored_location, false)
46
+ data = send("#{stored_source}_src", msg, @store[msg.user.to_s], true)
44
47
  elsif query.nil?
45
- return msg.reply 'No location set. ?setw <location> :(wu|darkscy|noaa|apixu|owm)'
48
+ return msg.reply 'No location set. ?setw <location> and ?setws <source> for where you get the weather from'
46
49
  else
47
50
  # data = wu_src(query, true)
48
- src = query[/:\w+/].gsub(/:/, '') if query[/:\w+/]
49
51
  query = query.gsub(/:\w+/, '').strip if query
50
- true_src = @api_src.include?(src) ? src : 'wu'
51
- data = send("#{true_src}_src", query)
52
+ data = send("#{stored_source}_src", msg, query)
52
53
  end
53
- return msg.reply "No results found for #{query} with #{true_src} source." if data.nil?
54
- # return msg.reply 'Problem getting data. Try again later.' if data.nil?
54
+
55
+ return msg.reply "No results found for #{query} with #{@src_translated[stored_source.to_sym]} source." if data.nil?
55
56
  msg.reply(data.reply)
56
57
  end
57
58
 
58
59
  # ?setw <location>
59
60
  def set_location(msg, query)
60
61
  # Establish source
61
- src = query[/:\w+/].gsub(/:/, '') if query[/:\w+/]
62
62
  query = query.gsub(/:\w+/, '').strip if query
63
63
 
64
64
  # Sanity Check
65
- true_src = @api_src.include?(src) ? src : 'wu'
66
- data = send("#{true_src}_src", query)
65
+ if !@source[msg.user.to_s].nil?
66
+ stored_source = @source[msg.user.to_s]
67
+ else
68
+ stored_source = 'wu'
69
+ end
70
+ data = send("#{stored_source}_src", msg,query)
67
71
 
68
72
  # Error
69
73
  return msg.reply "No results found for #{query}." if data.nil?
70
74
 
71
75
  # Store and display general location
72
- serial_location = "#{query}::#{src}"
76
+
77
+ serial_location = "#{data.lat},#{data.lon}"
73
78
  @store[msg.user.to_s] = serial_location unless data.nil?
74
- msg.reply "Your location is now set to #{data.ac.name}, #{data.ac.c}!"
79
+ msg.reply "Your location is now set to #{data.ac.formatted_address}!"
80
+ end
81
+
82
+ # ?setws <source>
83
+ def set_source(msg,src)
84
+ return msg.reply("You can set your weather source using ?setws <omw|ds|wu|noaa>") if src.nil?
85
+ true_src = @api_src.include?(src) ? src : 'wu'
86
+ @source[msg.user.to_s] = true_src
87
+ msg.reply "Your weather source is set to #{@src_translated[true_src.to_sym]}!"
75
88
  end
76
89
 
77
90
  private
78
91
  #### Weather Sources
79
92
  # Weather Underground - https://wunderground.com
80
- def wu_src(location)
93
+ def wu_src(msg, location, stored=false)
81
94
  # Fuzzy location lookup
82
95
  # ac = JSON.parse(
83
96
  # open(URI.encode("https://autocomplete.wunderground.com/aq?query=#{location}")).read,
84
97
  # object_class: OpenStruct
85
98
  # )
86
99
  # return nil if ac.RESULTS.empty?
87
- ac = JSON.parse(
88
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
89
- object_class: OpenStruct
90
- )
91
- return nil if ac.results.nil? ## Unable to locate
92
-
93
- ac = ac.results[0]
94
- lat = ac.geometry.location.lat
95
- lon = ac.geometry.location.lng
100
+ if stored
101
+ lat, lon = @store[msg.user.to_s].split(',')
102
+ else
96
103
 
104
+ ac = JSON.parse(
105
+ open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
106
+ object_class: OpenStruct
107
+ )
108
+ return nil if ac.results.nil?
109
+ if ac.status = "OVER_QUERY_LIMIT"
110
+ return msg.reply("Google API - Over query Limit")
111
+ return nil
112
+ end
113
+
114
+ ac = ac.results[0]
115
+ lat = ac.geometry.location.lat
116
+ lon = ac.geometry.location.lng
117
+ localname = ac.formatted_address
118
+ end
97
119
  # ac = ac.RESULTS[0]
98
120
  geolookup = JSON.parse(
99
121
  # open(URI.encode("https://api.wunderground.com/api/#{Config.secrets[:wunderground]}/geolookup/#{ac.l}.json")).read,
@@ -108,11 +130,14 @@ module Plugins
108
130
  )
109
131
 
110
132
  data.ac = ac
133
+ data.lat = lat
134
+ data.lon = lon
135
+ localname = data.current_observation.display_location.full if localname.nil?
111
136
  current = data.current_observation
112
137
  alerts = data.alerts.empty? ? 'none' : data.alerts.map {|l| l['type']}.join(',')
113
138
  pressure_si = Unitwise((current.pressure_in.to_f)+14.7, '[psi]').convert_to('kPa').to_f.round(2)
114
139
 
115
- data.reply = "WU ∴ #{ac.formatted_address} " \
140
+ data.reply = "WU ∴ #{localname} " \
116
141
  "≈ #{current.weather} #{current.temperature_string} " \
117
142
  "≈ Feels like #{current.feelslike_string} " \
118
143
  "≈ Humidity: #{current.relative_humidity} " \
@@ -124,17 +149,27 @@ module Plugins
124
149
  end
125
150
 
126
151
  # Open Weather map - https://openweathermap.org/api
127
- def owm_src(location)
128
- ac = JSON.parse(
129
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
130
- object_class: OpenStruct
131
- )
132
-
133
- return nil if ac.results.nil? ## Unable to locate
152
+ def owm_src(msg, location, stored=false)
153
+ if stored
154
+ lat, lon = @store[msg.user.to_s].split(',')
155
+ else
134
156
 
135
- ac = ac.results[0]
136
- lat = ac.geometry.location.lat
137
- lon = ac.geometry.location.lng
157
+ ac = JSON.parse(
158
+ open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
159
+ object_class: OpenStruct
160
+ )
161
+ return nil if ac.results.nil? ## Unable to locate
162
+
163
+ if ac.status = "OVER_QUERY_LIMIT"
164
+ return msg.reply("Google API - Over query Limit")
165
+ return nil
166
+ end
167
+
168
+ ac = ac.results[0]
169
+ lat = ac.geometry.location.lat
170
+ lon = ac.geometry.location.lng
171
+ localname = ac.formatted_address
172
+ end
138
173
 
139
174
  # Get Data
140
175
  data = JSON.parse(
@@ -148,7 +183,11 @@ module Plugins
148
183
  pressure = Unitwise((data.main.pressure.to_f/10)+101, 'kPa')
149
184
  wind = Unitwise(data.wind.speed, 'kilometer')
150
185
 
151
- data.reply = "OWM #{ac.formatted_address} " \
186
+ localname = data.name if localname.nil?
187
+
188
+ data.lat = lat
189
+ data.lon = lon
190
+ data.reply = "OWM ∴ #{localname} " \
152
191
  "≈ #{data.weather[0].description}, #{temp.convert_to('[degF]').to_i.round(2)} F (#{temp.convert_to('Cel').to_i.round(2)} C) " \
153
192
  "≈ Humidity: #{data.main.humidity}% " \
154
193
  "≈ Pressure: #{pressure.convert_to('[psi]').to_f.round(2)} psi (#{pressure.convert_to('kPa').to_f} kPa) " \
@@ -159,16 +198,28 @@ module Plugins
159
198
  end
160
199
 
161
200
  # DarkSky - https://darksky.net/dev
162
- def darksky_src(location)
201
+ def darksky_src(msg,location,stored=false)
202
+
163
203
  ac = JSON.parse(
164
204
  open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
165
205
  object_class: OpenStruct
166
206
  )
167
207
  return nil if ac.results.nil? ## Unable to locate
168
208
 
209
+ if ac.status = "OVER_QUERY_LIMIT"
210
+ return msg.reply("Google API - Over query Limit")
211
+ return nil
212
+ end
213
+
169
214
  ac = ac.results[0]
170
- lat = ac.geometry.location.lat
171
- lon = ac.geometry.location.lng
215
+ if stored
216
+ lat, lon = @store[msg.user.to_s].split(',')
217
+ else
218
+ lat = ac.geometry.location.lat
219
+ lon = ac.geometry.location.lng
220
+ end
221
+
222
+ localname = ac.formatted_address
172
223
 
173
224
  data = JSON.parse(
174
225
  open(
@@ -176,7 +227,12 @@ module Plugins
176
227
  ).read,
177
228
  object_class: OpenStruct
178
229
  )
230
+
179
231
  data.ac = ac
232
+ data.lat = lat
233
+ data.lon = lon
234
+
235
+
180
236
  current = data.currently
181
237
  alerts = data.alerts.count rescue 0
182
238
  c = Unitwise(current.temperature, '[degF]').convert_to('Cel').to_i
@@ -187,7 +243,7 @@ module Plugins
187
243
  tempstring = "#{current.temperature.to_i} F (#{c} C)"
188
244
  feelslike = "#{current.apparentTemperature.to_i} F (#{c_feels} C)"
189
245
 
190
- data.reply = "DS ∴ #{ac.formatted_address} " \
246
+ data.reply = "DS ∴ #{localname} " \
191
247
  "≈ #{current.summary} #{tempstring} " \
192
248
  "≈ Feels like #{feelslike} " \
193
249
  "≈ Humidity: #{current.relative_humidity} " \
@@ -200,38 +256,57 @@ module Plugins
200
256
  end
201
257
 
202
258
  # NOAA - https://graphical.weather.gov/xml/
203
- def noaa_src(location)
204
- ac = JSON.parse(
205
- open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
206
- object_class: OpenStruct
207
- )
208
- return nil if ac.results.nil? ## Unable to locate
259
+ def noaa_src(msg, location, stored=false)
260
+ if stored
261
+ lat, lon = @store[msg.user.to_s].split(',')
262
+ else
209
263
 
210
- ac = ac.results[0]
211
- lat = ac.geometry.location.lat
212
- lon = ac.geometry.location.lng
264
+ ac = JSON.parse(
265
+ open(URI.encode("http://maps.googleapis.com/maps/api/geocode/json?address=#{location}")).read,
266
+ object_class: OpenStruct
267
+ )
268
+ return nil if ac.results.nil? ## Unable to locate
269
+
270
+ if ac.status = "OVER_QUERY_LIMIT"
271
+ return msg.reply("Google API - Over query Limit")
272
+ return nil
273
+ end
274
+
275
+ ac = ac.results[0]
276
+ lat = ac.geometry.location.lat
277
+ lon = ac.geometry.location.lng
278
+ localname = ac.formatted_address
279
+ end
213
280
 
214
- stations = JSON.parse(
281
+ station_list = JSON.parse(
215
282
  open(URI.encode("https://api.weather.gov/points/#{lat},#{lon}/stations/")).read
216
283
  ) rescue nil
217
284
 
218
- return nil if stations.nil? ## Unable to find station. probably not in the USA
285
+ return nil if station_list.nil? ## Unable to find station. probably not in the USA
286
+
287
+ station = JSON.parse(
288
+ open(URI.encode("#{station_list['observationStations'][0]}")).read,
289
+ object_class: OpenStruct
290
+ )
219
291
 
220
292
  parsed = JSON.parse(
221
- open(URI.encode("#{stations['observationStations'][0]}/observations/current")).read,
293
+ open(URI.encode("#{station_list['observationStations'][0]}/observations/current")).read,
222
294
  object_class: OpenStruct
223
295
  )
224
296
 
297
+ localname = station.properties.name if localname.nil?
225
298
 
226
299
  data = parsed.properties
227
300
  data.ac = ac
301
+ data.lat = lat
302
+ data.lon = lon
228
303
  f = data.temperature.value * 9/5
229
304
  temp = "#{f.round(2)} F (#{data.temperature.value.to_i.round(2)} C) "
230
305
  wind = "Gusts: #{data.windGust.value} avg: #{data.windSpeed.value.to_i.round(2)}"
231
306
  feelslike = "#{data.windChill.value.to_i.round(2)} C"
232
307
  pressure = Unitwise(data.barometricPressure.value.to_f+101325, 'Pa')
233
308
 
234
- data.reply = "NOAA ∴ #{ac.formatted_address} " \
309
+ data.reply = "NOAA ∴ #{localname} " \
235
310
  "≈ #{data.textDescription} #{temp} " \
236
311
  "≈ Feels like #{feelslike} " \
237
312
  "≈ Humidity: #{data.relativeHumidity.value.round(2)} " \
data/lib/Zeta/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zeta
2
- VERSION = '1.0.3'
2
+ VERSION = '1.0.4'
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.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liothen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-24 00:00:00.000000000 Z
11
+ date: 2018-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -657,7 +657,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
657
657
  version: '0'
658
658
  requirements: []
659
659
  rubyforge_project:
660
- rubygems_version: 2.7.4
660
+ rubygems_version: 2.7.3
661
661
  signing_key:
662
662
  specification_version: 4
663
663
  summary: Zeta is a IRC bot written in ruby using the Cinch Framework