diff --git a/modules/conjugaison.py b/modules/conjugaison.py index d4e778b..ab30b7e 100644 --- a/modules/conjugaison.py +++ b/modules/conjugaison.py @@ -40,63 +40,42 @@ def load(context): def cmd_conjug(msg): if len(msg.cmds) < 3: - return Response(msg.sender, - "Demande incorrecte.\n %s" % help_full(), - msg.channel) - - tens = msg.cmds[1] - - for i in range(2, len(msg.cmds) - 1): - tens += " " + msg.cmds[i] + raise IRCException("donne moi un temps et un verbe, et je te donnerai sa conjugaison!") + tens = ' '.join(msg.cmds[1:-1]) print_debug(tens) - verb = msg.cmds[len(msg.cmds) - 1] + verb = msg.cmds[-1] - try: - conjug = get_conjug(verb, tens) - except: - conjug = None - exc_type, exc_value, exc_traceback = sys.exc_info() - traceback.print_exception(exc_type, exc_value, - exc_traceback) + conjug = get_conjug(verb, tens) - if conjug is None: - return Response(msg.sender, - "Une erreur s'est produite durant la recherche" - " du verbe %s" % verb, msg.channel) - elif len(conjug) > 0: - return Response(msg.sender, conjug, msg.channel, + if len(conjug) > 0: + return Response(msg.sender, conjug, channel=msg.channel, title="Conjugaison de %s" % verb) else: - return Response(msg.sender, - "Aucune conjugaison de %s n'a été trouvé" % verb, - msg.channel) - return False + raise IRCException("aucune conjugaison de '%s' n'a été trouvé" % verb) def get_conjug(verb, stringTens): - url = "http://leconjugueur.lefigaro.fr/conjugaison/verbe/" + quote(verb.encode("ISO-8859-1")) + ".html" + url = ("http://leconjugueur.lefigaro.fr/conjugaison/verbe/%s.html" % + quote(verb.encode("ISO-8859-1"))) print_debug (url) page = web.getURLContent(url) + if page is not None: for line in page.split("\n"): if re.search('
', line) is not None: return compute_line(line, stringTens) - else: - return None + return list() def compute_line(line, stringTens): - res = list() try: - idTemps = d[stringTens] + idTemps = d[stringTens] except: - res.append("Le temps demandé n'existe pas") - return res + raise IRCException("le temps demandé n'existe pas") if len(idTemps) == 0: - res.append("Le temps demandé n'existe pas") - return res + raise IRCException("le temps demandé n'existe pas") index = line.index('
([^/]*/b>)", newLine): - res.append(striphtml(elt.group(1))) - + res.append(striphtml(elt.group(1).replace("", "\x02").replace("", "\x0F"))) return res - diff --git a/modules/imdb.py b/modules/imdb.py index 68b46f0..8ddfd27 100644 --- a/modules/imdb.py +++ b/modules/imdb.py @@ -6,10 +6,10 @@ import json nemubotversion = 3.3 def help_tiny (): - return "Find info about a movie" + return "Show many information about a movie or serie" def help_full (): - return "!imdb " + return "Search a movie title with: !imdbs ; View movie details with !imdb " def load(context): from hooks import Hook @@ -18,59 +18,51 @@ def load(context): def cmd_imdb(msg): - if (len(msg.cmds) < 2): - return Response(msg.sender, - "Demande incorrecte.\n %s" % help_full(), - msg.channel) + if len(msg.cmds) < 2: + raise IRCException("precise a movie/serie title!") - movie_name = msg.cmds[1] - - for x in range(2, len(msg.cmds)): - movie_name += urllib.parse.quote(' ') + urllib.parse.quote(msg.cmds[x]) - - url = "http://www.omdbapi.com/?t=" + movie_name + url = "http://www.omdbapi.com/?t=%s" % urllib.parse.quote(' '.join(msg.cmds[1:])) print_debug(url) + response = urllib.request.urlopen(url) - data = json.loads(response.read().decode()) - string = "\x02IMDB Rating\x0F: " + data['imdbRating'] + "\n\x02Plot\x0F: " + data['Plot'] - res = Response(msg.sender, - string, - msg.channel) - res.append_message("\x02Released\x0F: " + data['Released'] - + " \x02Type\x0F: " + data['Type'] - + " \x02Genre\x0F: " + data['Genre'] - + " \x02Director\x0F: " + data['Director'] - + " \x02Writer\x0F: " + data['Writer'] - + " \x02Actors\x0F: " + data['Actors'] - + " \x02Country\x0F: " + data['Country']) + if "Error" in data: + raise IRCException(data["Error"]) + + elif "Response" in data and data["Response"] == "True": + res = Response(msg.sender, channel=msg.channel, + title="%s (%s)" % (data['Title'], data['Year']), + nomore="No more information, more at http://www.imdb.com/title/%s" % data['imdbID']) + + res.append_message("\x02rating\x0F: %s (%s votes); \x02plot\x0F: %s" % + (data['imdbRating'], data['imdbVotes'], data['Plot'])) + + res.append_message("%s \x02from\x0F %s \x02released on\x0F %s; \x02genre:\x0F %s; \x02directed by:\x0F %s; \x02writed by:\x0F %s; \x02main actors:\x0F %s" + % (data['Type'], data['Country'], data['Released'], data['Genre'], data['Director'], data['Writer'], data['Actors'])) + return res + + else: + raise IRCException("An error occurs during movie search") + - return res - def cmd_search(msg): + url = "http://www.omdbapi.com/?s=%s" % urllib.parse.quote(' '.join(msg.cmds[1:])) + print_debug(url) - movie_name = msg.cmds[1] + raw = urllib.request.urlopen(url) + data = json.loads(raw.read().decode()) - for x in range(2, len(msg.cmds)): - movie_name += urllib.parse.quote(' ') + urllib.parse.quote(msg.cmds[x]) + if "Error" in data: + raise IRCException(data["Error"]) - url = "http://www.omdbapi.com/?s=" + movie_name - print_debug(url) + elif "Search" in data: + movies = list() - raw = urllib.request.urlopen(url) - data = json.loads(raw.read().decode()) + for m in data['Search']: + movies.append("\x02%s\x0F (%s of %s)" % (m['Title'], m['Type'], m['Year'])) - search = data['Search'] - - movie_list = "" - - for i in range(0, len(search)): - movie_list += "\x02Title\x0F: " + search[i]['Title'] - movie_list += " \x02Year\x0F: " + search[i]['Year'] - movie_list += " \x02Type\x0F:" + search[i]['Type'] - movie_list += " |--| " - - res = Response(msg.sender, movie_list, msg.channel) - return res + return Response(msg.sender, movies, title="Titles found", channel=msg.channel) + else: + raise IRCException("An error occurs during movie search") diff --git a/modules/sap.py b/modules/sap.py index efbc556..410c9e2 100644 --- a/modules/sap.py +++ b/modules/sap.py @@ -20,23 +20,20 @@ def load(context): def cmd_tcode(msg): - if (len(msg.cmds) < 2): - return Response(msg.sender, - "Demande incorrecte.\n %s" % help_full(), - msg.channel) + if len(msg.cmds) != 2: + raise IRCException("indicate a transaction code or a keyword to search!") - res = Response(msg.sender, None, msg.channel) - - request = urllib.parse.quote(msg.cmds[1]) - url = "http://www.tcodesearch.com/tcodes/search?q=" + request + url = "http://www.tcodesearch.com/tcodes/search?q=%s" % urllib.parse.quote(msg.cmds[1]) page = web.getURLContent(url) + res = Response(msg.sender, channel=msg.channel, + nomore="No more transaction code", count=" (%d more tcodes)") + if page is not None: index = page.index('<div id="searchresults">') + len('<div id="searchresults">') end = page[index:].index('</div>')+index strscope = page[index:end] for tcode in re.finditer('<strong> ([a-zA-Z0-9_]*)</strong> - ([^\n]*)\n', strscope): - res.append_message("\x02" + tcode.group(1)+"\x0F - "+striphtml(tcode.group(2))) - return res - else: - return None + res.append_message("\x02%s\x0F - %s" % (tcode.group(1), striphtml(tcode.group(2)))) + + return res