]> jfr.im git - erebus.git/commitdiff
Youtube module added
authorConny Sjöblom <redacted>
Tue, 4 Feb 2014 21:47:36 +0000 (23:47 +0200)
committerConny Sjöblom <redacted>
Tue, 4 Feb 2014 21:47:36 +0000 (23:47 +0200)
modules/youtube.py [new file with mode: 0644]

diff --git a/modules/youtube.py b/modules/youtube.py
new file mode 100644 (file)
index 0000000..a0c9c9d
--- /dev/null
@@ -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 HTMLParser
+from BeautifulSoup import BeautifulSoup
+
+checkfor = "youtube"
+hostmask_regex = re.compile('^(.*)!(.*)@(.*)$')
+url_regex = re.compile('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
+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 url in url_regex.findall(linetx):
+               if checkfor in url:
+                       html_parser = HTMLParser.HTMLParser()
+                       respdata = urllib2.urlopen(url).read()
+                       soup = BeautifulSoup(respdata)
+                       try:
+                               bot.msg(line.split()[2], BeautifulSoup(soup.title.string, convertEntities=BeautifulSoup.HTML_ENTITIES))
+                       except:
+                               pass