X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fweather.rb;h=d8f7579c95c45cda0ce9d93480b164f4e260d116;hb=16336b4a240a4265d1f2df1e30d7b68d3a924287;hp=ff5f053757562e5c9db84f031c89860265b83b4b;hpb=03a565c6f6a11e950f66b7aa159de86c2119efee;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/weather.rb b/data/rbot/plugins/weather.rb index ff5f0537..d8f7579c 100644 --- a/data/rbot/plugins/weather.rb +++ b/data/rbot/plugins/weather.rb @@ -67,18 +67,22 @@ private end class WeatherPlugin < Plugin - + + Config.register Config::BooleanValue.new('weather.advisory', + :default => true, + :desc => "Should the bot report special weather advisories when any is present?") + def help(plugin, topic="") case topic when "nws" "weather nws => display the current conditions at the location specified by the NOAA National Weather Service station code ( lookup your station code at http://www.nws.noaa.gov/data/current_obs/ )" when "station", "wu" - "weather [] => display the current conditions at the location specified, looking it up on the Weather Underground site; you can use 'station ' to look up data by station code ( lookup your station code at http://www.weatherunderground.com/ ); you can optionally set to 'metric' or 'english' if you only want data with the units; use 'both' for units to go back to having both." + "weather [] => display the current conditions at the location specified, looking it up on the Weather Underground site; you can use 'station ' to look up data by station code ( lookup your station code at http://www.weatherunderground.com/ ); you can optionally set to 'metric' or 'english' if you only want data with the units; use 'both' for units to go back to having both." else "weather information lookup. Looks up weather information for the last location you specified. See topics 'nws' and 'wu' for more information" end end - + def initialize super @@ -87,7 +91,7 @@ class WeatherPlugin < Plugin @wu_url = "http://mobile.wunderground.com/cgi-bin/findweather/getForecast?brand=mobile%s&query=%s" @wu_station_url = "http://mobile.wunderground.com/auto/mobile%s/global/stations/%s.html" end - + def weather(m, params) if params[:where].empty? if @registry.has_key?(m.sourcenick) @@ -173,8 +177,9 @@ class WeatherPlugin < Plugin m.reply "no such station found (#{where})" return when /(.*?)<\/table>/m - data = $1 + data = $1.dup m.reply wu_weather_filter(data) + wu_out_special(m, xml) else debug xml m.reply "something went wrong with the data for #{where}..." @@ -202,6 +207,7 @@ class WeatherPlugin < Plugin else m.reply "couldn't parse weather data from #{where}" end + wu_out_special(m, xml) when /]*>([^<]+)}) do + special = { + :url => "http://mobile.wunderground.com"+$1, + :type => $2.dup, + :special => $3.dup + } + spec_rx = Regexp.new("(?:.+?)\\s+\\s+
\\s+(.+?)\\s+
", Regexp::MULTILINE) + spec_xml = @bot.httputil.get(special[:url]) + if spec_xml and spec_td = spec_xml.match(spec_rx) + special.merge!(:text => spec_td.captures.first.ircify_html) + end + specials << special + end + return specials + end + + def wu_out_special(m, xml) + return unless @bot.config['weather.advisory'] + specials = wu_check_special(xml) + debug specials + specials.each do |special| + special.merge!(:underline => Underline) + if special[:text] + m.reply("%{underline}%{special}%{underline}: %{text}" % special) + else + m.reply("%{underline}%{special}%{underline} @ %{url}" % special) + end + end + end + def wu_weather_filter(stuff) txt = wu_clean(stuff)