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)