50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
|
import traceback
|
||
|
from bot import IRCLine
|
||
|
BOT = None
|
||
|
|
||
|
# json utility function
|
||
|
import requests
|
||
|
|
||
|
def get_json(url):
|
||
|
r = requests.get(url)
|
||
|
r.raise_for_status()
|
||
|
return r.json()
|
||
|
# end json utility function
|
||
|
|
||
|
URL = "https://xkcd.com/"
|
||
|
|
||
|
def get(number=""):
|
||
|
try:
|
||
|
ret = get_json(URL+number+"/info.0.json")
|
||
|
return ret
|
||
|
except:
|
||
|
return dict(title="Connection Error",num=0,year="1970",month="1",day="1")
|
||
|
|
||
|
# event response utility
|
||
|
def respond(event,msg):
|
||
|
if not BOT: return
|
||
|
target = event.target if event.target.startswith("#") else event.hostmask.nick
|
||
|
BOT.socket.send(IRCLine("PRIVMSG",target,":"+(event.hostmask.nick+": " if event.target.startswith("#") else "")+msg).line)
|
||
|
# end event response utility
|
||
|
|
||
|
def on_cmd_xkcd(event):
|
||
|
if not BOT: return
|
||
|
num = ""
|
||
|
if len(event.parts)>=1: num=event.parts[0].lower()
|
||
|
if num and not num.isdigit():
|
||
|
respond(event,"Invalid comic number! Please use a comic number (or omit for the latest comic), like so: !xkcd 1")
|
||
|
return
|
||
|
resp = get(num)
|
||
|
resp["month"]=resp["month"].zfill(2)
|
||
|
resp["day"]=resp["day"].zfill(2)
|
||
|
try:
|
||
|
respond(event,f"{resp['title']} ({resp['year']}-{resp['month']}-{resp['day']}) - https://xkcd.com/{resp['num']!s}")
|
||
|
except:
|
||
|
traceback.print_exc()
|
||
|
respond(event,str(resp))
|
||
|
|
||
|
def register(bot):
|
||
|
global BOT
|
||
|
BOT=bot
|
||
|
bot.event_manager.on("command_xkcd",on_cmd_xkcd)
|