diff --git a/README.md b/README.md index 6496a96..c252614 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,10 @@ For the spell.py plugin to work you need *python-enchant*. This can be installed ```sudo apt-get install python-enchant ``` +The whois.py plugin will work by default, but *not very well*. To make it work properly you will need to install the native *whois* package. This can be installed with: +```sudo apt-get install whois +``` + If you use another OS or distro you can find source packages on the module(s) web site, or you can try to find suitable packages in your package manager. Once installing these packages run the bot once with ```python bot.py``` to generate the config file. Stop the bot, edit the config, and run the bot again with ```python bot.py``` to start it up :) diff --git a/plugins/weather.py b/plugins/weather.py index 41b3f63..139af70 100644 --- a/plugins/weather.py +++ b/plugins/weather.py @@ -2,11 +2,9 @@ from util import hook, http - @hook.command(autohelp=False) -def weather(inp, nick='', server='', reply=None, db=None, notice=None): - ".weather [dontsave] -- gets weather data from Google" - +def forecast(inp, nick='', server='', reply=None, db=None, notice=None, say=None): + ".forecast [dontsave] -- gets a weather forecast from Google" loc = inp dontsave = loc.endswith(" dontsave") @@ -16,6 +14,46 @@ def weather(inp, nick='', server='', reply=None, db=None, notice=None): db.execute("create table if not exists weather(nick primary key, loc)") if not loc: # blank line + loc = db.execute("select loc from weather where nick=lower(?)", + (nick,)).fetchone() + if not loc: + notice(forecast.__doc__) + return + loc = loc[0] + + w = http.get_xml('http://www.google.com/ig/api', weather=loc) + w = w.find('weather') + + if w.find('problem_cause') is not None: + notice("Couldn't fetch weather data for '%s', try using a zip or " \ + "postal code." % inp) + return + city = w.find('forecast_information/city').get('data') + + out = "%s: " % city + + for elem in w.findall('forecast_conditions'): + info = dict((e.tag, e.get('data')) for e in elem) + info['high'] = elem.find('high').get('data') + info['low'] = elem.find('low').get('data') + + out += '[%(day_of_week)s]: %(condition)s (H:%(high)sF'\ + ', L:%(low)sF) ' % info + + return out + +@hook.command(autohelp=False) +def weather(inp, nick='', server='', reply=None, db=None, notice=None): + ".weather [dontsave] -- gets weather data from Google" + loc = inp + + dontsave = loc.endswith(" dontsave") + if dontsave: + loc = loc[:-9].strip().lower() + + db.execute("create table if not exists weather(nick primary key, loc)") + + if not loc: loc = db.execute("select loc from weather where nick=lower(?)", (nick,)).fetchone() if not loc: