diff --git a/modules/ddg/UrbanDictionnary.py b/modules/ddg/UrbanDictionnary.py new file mode 100644 index 0000000..e3fd13f --- /dev/null +++ b/modules/ddg/UrbanDictionnary.py @@ -0,0 +1,27 @@ +# coding=utf-8 + +import json +from urllib.parse import quote +from urllib.request import urlopen + +class UrbanDictionnary: + def __init__(self, terms): + self.terms = terms + + raw = urlopen("http://api.urbandictionary.com/v0/define?term=%s" % quote(terms), timeout=10) + self.udres = json.loads(raw.read().decode()) + + @property + def result_type(self): + if self.udres and "result_type" in self.udres: + return self.udres["result_type"] + else: + return "" + + @property + def definitions(self): + if self.udres and "list" in self.udres: + for d in self.udres["list"]: + yield d["definition"] + else: + yield "Sorry, no definition found for %s" % self.terms diff --git a/modules/ddg/__init__.py b/modules/ddg/__init__.py index ff50274..46aac3e 100644 --- a/modules/ddg/__init__.py +++ b/modules/ddg/__init__.py @@ -5,6 +5,7 @@ import imp nemubotversion = 3.3 from . import DDGSearch +from . import UrbanDictionnary from . import WFASearch from . import Wikipedia @@ -21,9 +22,11 @@ def load(context): add_hook("cmd_hook", Hook(calculate, "calc")) add_hook("cmd_hook", Hook(wiki, "dico")) add_hook("cmd_hook", Hook(wiki, "wiki")) + add_hook("cmd_hook", Hook(udsearch, "urbandictionnary")) def reload(): imp.reload(DDGSearch) + imp.reload(UrbanDictionnary) imp.reload(WFASearch) imp.reload(Wikipedia) @@ -65,6 +68,23 @@ def search(msg): return res +def udsearch(msg): + if len(msg.cmds) <= 1: + return Response(msg.sender, + "Indicate a term to search", + msg.channel, nick=msg.nick) + + s = UrbanDictionnary.UrbanDictionnary(' '.join(msg.cmds[1:])) + + res = Response(msg.sender, channel=msg.channel, nomore="No more results", + count=" (%d more definitions)") + + for d in s.definitions: + res.append_message(d) + + return res + + def calculate(msg): if len(msg.cmds) <= 1: return Response(msg.sender,