minerbot2/plugins/xkcd.py

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)