forked from zuckerberg/dailybot
89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
# coding=utf-8
|
|
|
|
# Location module for drastikbot.
|
|
#
|
|
# It uses the geonames.org API to get time information about a
|
|
# country/city/etc.
|
|
#
|
|
# Issues: geonames.org is slow and not very reliable, consider
|
|
# rewriting it to use another API or an offline method.
|
|
#
|
|
# You may need to provide your own geonames.org username if the one
|
|
# provided doesn't work.
|
|
|
|
'''
|
|
Copyright (C) 2018 drastik (https://github.com/olagood)
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
'''
|
|
|
|
import urllib.parse
|
|
|
|
import requests
|
|
|
|
|
|
class Module():
|
|
def __init__(self):
|
|
self.commands = ["time"]
|
|
self.manual = {
|
|
"desc": "Get time information about a country, a city, or a state",
|
|
"bot_commands": {
|
|
"time": {"usage": lambda x: f"{x}time <country/city/state>"}
|
|
}
|
|
}
|
|
|
|
|
|
username = "bugmenotuser"
|
|
|
|
|
|
def location_info_from_name(query):
|
|
api_url = ("http://api.geonames.org/searchJSON?"
|
|
f"q={query}&maxRows=1&username={username}")
|
|
r = requests.get(api_url, timeout=30)
|
|
try:
|
|
return r.json()["geonames"][0]
|
|
except IndexError:
|
|
return False
|
|
|
|
|
|
def get_timezone_from_name(query):
|
|
j = location_info_from_name(query)
|
|
if not j:
|
|
return f'Time: "{query}" is not a valid location'
|
|
|
|
lng = j['lng']
|
|
lat = j['lat']
|
|
name = j['name']
|
|
|
|
api_url = ("http://api.geonames.org/timezoneJSON?"
|
|
f"lat={lat}&lng={lng}&username={username}")
|
|
r = requests.get(api_url, timeout=30)
|
|
j = r.json()
|
|
|
|
try:
|
|
gmtOffset = j['gmtOffset']
|
|
countryName = j['countryName']
|
|
time = j['time']
|
|
except KeyError:
|
|
return f'Time: "{query}" is not a valid location'
|
|
|
|
ret = f"Time in {name}, {countryName}: {time} GMT {gmtOffset}"
|
|
return ret
|
|
|
|
|
|
def main(i, irc):
|
|
query = urllib.parse.quote_plus(i.msg_nocmd)
|
|
irc.privmsg(i.channel, get_timezone_from_name(query))
|