From: Conny Sjöblom Date: Tue, 4 Feb 2014 20:17:49 +0000 (+0200) Subject: Twitch module added X-Git-Url: https://jfr.im/git/erebus.git/commitdiff_plain/b262db1c5fe0a2f44f56b28795267f466300f017 Twitch module added --- diff --git a/modules/twitch.py b/modules/twitch.py new file mode 100644 index 0000000..68e6586 --- /dev/null +++ b/modules/twitch.py @@ -0,0 +1,72 @@ +# Erebus IRC bot - Author: Conny Sjoblom +# Spotify URL Checker +# This file is released into the public domain; see http://unlicense.org/ + +# module info +modinfo = { + 'author': 'Conny Sjoblom', + 'license': 'public domain', + 'compatible': [1], # compatible module API versions + 'depends': [], # other modules required to work properly? +} + +# preamble +import modlib +lib = modlib.modlib(__name__) +modstart = lib.modstart +modstop = lib.modstop + +# module code +import re +import urllib2 +import json +from BeautifulSoup import BeautifulSoup + +checkfor = "twitch" +hostmask_regex = re.compile('^(.*)!(.*)@(.*)$') +url_regex = re.compile('(http|ftp|https):\/\/([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?') +def parser_hostmask(hostmask): + if isinstance(hostmask, dict): + return hostmask + + nick = None + user = None + host = None + + if hostmask is not None: + match = hostmask_regex.match(hostmask) + + if not match: + nick = hostmask + else: + nick = match.group(1) + user = match.group(2) + host = match.group(3) + + return { + 'nick': nick, + 'user': user, + 'host': host + } + +@lib.hooknum("PRIVMSG") +def privmsg_hook(bot, line): + sender = parser_hostmask(line[1:line.find(' ')]) + + try: + linetx = line.split(None, 3)[3][1:] + except IndexError: + linetx = '' + + if checkfor not in line: + return # doesn't concern us + + for p, h, c in url_regex.findall(linetx): + if checkfor in h: + url = 'http://api.justin.tv/api/stream/list.json?channel=%s' % c[1:] + respdata = urllib2.urlopen(url).read() + twitch = json.loads(respdata) + try: + bot.msg(line.split()[2], 'Twitch: %s (%s)' % (twitch[0]['channel']['status'], twitch[0]['channel']['meta_game'])) + except: + bot.msg(line.split()[2], 'Twitch: Channel offline.')