Brian S. Stephan
b971b72af8
the long location string means this is often bleeding into two lines at the very end anyway, so this just looks nicer
64 lines
2.9 KiB
Python
64 lines
2.9 KiB
Python
import logging
|
||
|
||
from ircbot.lib import Plugin
|
||
|
||
from weather.lib import weather_summary
|
||
|
||
|
||
log = logging.getLogger('weather.ircplugin')
|
||
|
||
|
||
class Weather(Plugin):
|
||
|
||
"""Have IRC commands to do IRC things (join channels, quit, etc.)."""
|
||
|
||
def start(self):
|
||
"""Set up the handlers."""
|
||
|
||
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], r'^!weather\s+(.*)$',
|
||
self.handle_weather, -20)
|
||
|
||
super(Weather, self).start()
|
||
|
||
def stop(self):
|
||
"""Tear down handlers."""
|
||
|
||
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_weather)
|
||
|
||
super(Weather, self).stop()
|
||
|
||
def handle_weather(self, connection, event, match):
|
||
query = match.group(1)
|
||
queryitems = query.split(" ")
|
||
if len(queryitems) <= 0:
|
||
return
|
||
|
||
weather = weather_summary(query)
|
||
weather_output = (f"Weather in {weather['location']}: {weather['current']['description']}. "
|
||
f"{weather['current']['temp_F']}/{weather['current']['temp_C']}, "
|
||
f"feels like {weather['current']['feels_like_temp_F']}/"
|
||
f"{weather['current']['feels_like_temp_C']}. "
|
||
f"Wind {weather['current']['wind_speed']} "
|
||
f"from the {weather['current']['wind_direction']}. "
|
||
f"Visibility {weather['current']['visibility']}. "
|
||
f"Precipitation {weather['current']['precipitation']}. "
|
||
f"Pressure {weather['current']['pressure']}. "
|
||
f"Cloud cover {weather['current']['cloud_cover']}. "
|
||
f"UV index {weather['current']['uv_index']}.\n"
|
||
f"Today: {weather['today_forecast']['noteworthy']}, "
|
||
f"High {weather['today_forecast']['high_F']}/{weather['today_forecast']['high_C']}, "
|
||
f"Low {weather['today_forecast']['low_F']}/{weather['today_forecast']['low_C']}. "
|
||
f"Tomorrow: {weather['tomorrow_forecast']['noteworthy']}, "
|
||
f"High {weather['tomorrow_forecast']['high_F']}/{weather['tomorrow_forecast']['high_C']}, "
|
||
f"Low {weather['tomorrow_forecast']['low_F']}/{weather['tomorrow_forecast']['low_C']}. "
|
||
f"Day after tomorrow: {weather['day_after_tomorrow_forecast']['noteworthy']}, "
|
||
f"High {weather['day_after_tomorrow_forecast']['high_F']}/"
|
||
f"{weather['day_after_tomorrow_forecast']['high_C']}, "
|
||
f"Low {weather['day_after_tomorrow_forecast']['low_F']}/"
|
||
f"{weather['day_after_tomorrow_forecast']['low_C']}.")
|
||
|
||
return self.bot.reply(event, weather_output)
|
||
|
||
|
||
plugin = Weather
|