Dusting modules

This commit is contained in:
nemunaire 2015-07-10 23:09:54 +02:00
parent 4bc8bc3c12
commit 4d51bc1fda
20 changed files with 147 additions and 147 deletions

View File

@ -30,11 +30,11 @@ def help_full():
def findName(msg): def findName(msg):
if (len(msg.cmds) < 2 or msg.cmds[1].lower() == "moi" or if (not len(msg.args) or msg.args[0].lower() == "moi" or
msg.cmds[1].lower() == "me"): msg.args[0].lower() == "me"):
name = msg.nick.lower() name = msg.nick.lower()
else: else:
name = msg.cmds[1].lower() name = msg.args[0].lower()
matches = [] matches = []

View File

@ -39,13 +39,13 @@ def help_full():
@hook("cmd_hook", "conjugaison") @hook("cmd_hook", "conjugaison")
def cmd_conjug(msg): def cmd_conjug(msg):
if len(msg.cmds) < 3: if len(msg.args) < 2:
raise IRCException("donne moi un temps et un verbe, et je te donnerai " raise IRCException("donne moi un temps et un verbe, et je te donnerai "
"sa conjugaison!") "sa conjugaison!")
tens = ' '.join(msg.cmds[1:-1]) tens = ' '.join(msg.args[:-1])
verb = msg.cmds[-1] verb = msg.args[-1]
conjug = get_conjug(verb, tens) conjug = get_conjug(verb, tens)

View File

@ -64,25 +64,25 @@ def cmd_we(msg):
@hook("cmd_hook", "start") @hook("cmd_hook", "start")
def start_countdown(msg): def start_countdown(msg):
"""!start /something/: launch a timer""" """!start /something/: launch a timer"""
if len(msg.cmds) < 2: if len(msg.args) < 1:
raise IRCException("indique le nom d'un événement à chronométrer") raise IRCException("indique le nom d'un événement à chronométrer")
if msg.cmds[1] in context.data.index: if msg.args[0] in context.data.index:
raise IRCException("%s existe déjà." % msg.cmds[1]) raise IRCException("%s existe déjà." % msg.args[0])
strnd = ModuleState("strend") strnd = ModuleState("strend")
strnd["server"] = msg.server strnd["server"] = msg.server
strnd["channel"] = msg.channel strnd["channel"] = msg.channel
strnd["proprio"] = msg.nick strnd["proprio"] = msg.nick
strnd["start"] = msg.date strnd["start"] = msg.date
strnd["name"] = msg.cmds[1] strnd["name"] = msg.args[0]
context.data.addChild(strnd) context.data.addChild(strnd)
evt = ModuleEvent(call=fini, call_data=dict(strend=strnd)) evt = ModuleEvent(call=fini, call_data=dict(strend=strnd))
if len(msg.cmds) > 2: if len(msg.args) > 1:
result1 = re.findall("([0-9]+)([smhdjwyaSMHDJWYA])?", msg.cmds[2]) result1 = re.findall("([0-9]+)([smhdjwyaSMHDJWYA])?", msg.args[1])
result2 = re.match("(.*[^0-9])?([0-3]?[0-9])/([0-1]?[0-9])/((19|20)?[01239][0-9])", msg.cmds[2]) result2 = re.match("(.*[^0-9])?([0-3]?[0-9])/([0-1]?[0-9])/((19|20)?[01239][0-9])", msg.args[1])
result3 = re.match("(.*[^0-9])?([0-2]?[0-9]):([0-5]?[0-9])(:([0-5]?[0-9]))?", msg.cmds[2]) result3 = re.match("(.*[^0-9])?([0-2]?[0-9]):([0-5]?[0-9])(:([0-5]?[0-9]))?", msg.args[1])
if result2 is not None or result3 is not None: if result2 is not None or result3 is not None:
try: try:
now = msg.date now = msg.date
@ -107,7 +107,7 @@ def start_countdown(msg):
strnd["_id"] = context.add_event(evt) strnd["_id"] = context.add_event(evt)
except: except:
context.data.delChild(strnd) context.data.delChild(strnd)
raise IRCException("Mauvais format de date pour l'événement %s. Il n'a pas été créé." % msg.cmds[1]) raise IRCException("Mauvais format de date pour l'événement %s. Il n'a pas été créé." % msg.args[0])
elif result1 is not None and len(result1) > 0: elif result1 is not None and len(result1) > 0:
strnd["end"] = msg.date strnd["end"] = msg.date
@ -132,39 +132,39 @@ def start_countdown(msg):
context.save() context.save()
if "end" in strnd: if "end" in strnd:
return Response("%s commencé le %s et se terminera le %s." % return Response("%s commencé le %s et se terminera le %s." %
(msg.cmds[1], msg.date.strftime("%A %d %B %Y à %H:%M:%S"), (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S"),
strnd.getDate("end").strftime("%A %d %B %Y à %H:%M:%S")), strnd.getDate("end").strftime("%A %d %B %Y à %H:%M:%S")),
nick=msg.frm) nick=msg.frm)
else: else:
return Response("%s commencé le %s"% (msg.cmds[1], return Response("%s commencé le %s"% (msg.args[0],
msg.date.strftime("%A %d %B %Y à %H:%M:%S")), msg.date.strftime("%A %d %B %Y à %H:%M:%S")),
nick=msg.frm) nick=msg.frm)
@hook("cmd_hook", "end") @hook("cmd_hook", "end")
@hook("cmd_hook", "forceend") @hook("cmd_hook", "forceend")
def end_countdown(msg): def end_countdown(msg):
if len(msg.cmds) < 2: if len(msg.args) < 1:
raise IRCException("quel événement terminer ?") raise IRCException("quel événement terminer ?")
if msg.cmds[1] in context.data.index: if msg.args[0] in context.data.index:
if context.data.index[msg.cmds[1]]["proprio"] == msg.nick or (msg.cmds[0] == "forceend" and msg.frm_owner): if context.data.index[msg.args[0]]["proprio"] == msg.nick or (msg.cmd == "forceend" and msg.frm_owner):
duration = countdown(msg.date - context.data.index[msg.cmds[1]].getDate("start")) duration = countdown(msg.date - context.data.index[msg.args[0]].getDate("start"))
context.del_event(context.data.index[msg.cmds[1]]["_id"]) context.del_event(context.data.index[msg.args[0]]["_id"])
context.data.delChild(context.data.index[msg.cmds[1]]) context.data.delChild(context.data.index[msg.args[0]])
context.save() context.save()
return Response("%s a duré %s." % (msg.cmds[1], duration), return Response("%s a duré %s." % (msg.args[0], duration),
channel=msg.channel, nick=msg.nick) channel=msg.channel, nick=msg.nick)
else: else:
raise IRCException("Vous ne pouvez pas terminer le compteur %s, créé par %s." % (msg.cmds[1], context.data.index[msg.cmds[1]]["proprio"])) raise IRCException("Vous ne pouvez pas terminer le compteur %s, créé par %s." % (msg.args[0], context.data.index[msg.args[0]]["proprio"]))
else: else:
return Response("%s n'est pas un compteur connu."% (msg.cmds[1]), channel=msg.channel, nick=msg.nick) return Response("%s n'est pas un compteur connu."% (msg.args[0]), channel=msg.channel, nick=msg.nick)
@hook("cmd_hook", "eventslist") @hook("cmd_hook", "eventslist")
def liste(msg): def liste(msg):
"""!eventslist: gets list of timer""" """!eventslist: gets list of timer"""
if len(msg.cmds) > 1: if len(msg.args):
res = list() res = list()
for user in msg.cmds[1:]: for user in msg.args:
cmptr = [x["name"] for x in context.data.index.values() if x["proprio"] == user] cmptr = [x["name"] for x in context.data.index.values() if x["proprio"] == user]
if len(cmptr) > 0: if len(cmptr) > 0:
res.append("Compteurs créés par %s : %s" % (user, ", ".join(cmptr))) res.append("Compteurs créés par %s : %s" % (user, ", ".join(cmptr)))
@ -176,20 +176,20 @@ def liste(msg):
@hook("cmd_default") @hook("cmd_default")
def parseanswer(msg): def parseanswer(msg):
if msg.cmds[0] in context.data.index: if msg.cmd in context.data.index:
res = Response(channel=msg.channel) res = Response(channel=msg.channel)
# Avoid message starting by ! which can be interpreted as command by other bots # Avoid message starting by ! which can be interpreted as command by other bots
if msg.cmds[0][0] == "!": if msg.cmd[0] == "!":
res.nick = msg.nick res.nick = msg.nick
if context.data.index[msg.cmds[0]].name == "strend": if context.data.index[msg.cmd].name == "strend":
if context.data.index[msg.cmds[0]].hasAttribute("end"): if context.data.index[msg.cmd].hasAttribute("end"):
res.append_message("%s commencé il y a %s et se terminera dans %s." % (msg.cmds[0], countdown(msg.date - context.data.index[msg.cmds[0]].getDate("start")), countdown(context.data.index[msg.cmds[0]].getDate("end") - msg.date))) res.append_message("%s commencé il y a %s et se terminera dans %s." % (msg.cmd, countdown(msg.date - context.data.index[msg.cmd].getDate("start")), countdown(context.data.index[msg.cmd].getDate("end") - msg.date)))
else: else:
res.append_message("%s commencé il y a %s." % (msg.cmds[0], countdown(msg.date - context.data.index[msg.cmds[0]].getDate("start")))) res.append_message("%s commencé il y a %s." % (msg.cmd, countdown(msg.date - context.data.index[msg.cmd].getDate("start"))))
else: else:
res.append_message(countdown_format(context.data.index[msg.cmds[0]].getDate("start"), context.data.index[msg.cmds[0]]["msg_before"], context.data.index[msg.cmds[0]]["msg_after"])) res.append_message(countdown_format(context.data.index[msg.cmd].getDate("start"), context.data.index[msg.cmd]["msg_before"], context.data.index[msg.cmd]["msg_after"]))
return res return res
RGXP_ask = re.compile(r"^.*((create|new)\s+(a|an|a\s*new|an\s*other)?\s*(events?|commande?)|(nouvel(le)?|ajoute|cr[ée]{1,3})\s+(un)?\s*([eé]v[ée]nements?|commande?)).*$", re.I) RGXP_ask = re.compile(r"^.*((create|new)\s+(a|an|a\s*new|an\s*other)?\s*(events?|commande?)|(nouvel(le)?|ajoute|cr[ée]{1,3})\s+(un)?\s*([eé]v[ée]nements?|commande?)).*$", re.I)

View File

@ -71,10 +71,10 @@ def find_movies(title):
@hook("cmd_hook", "imdb") @hook("cmd_hook", "imdb")
def cmd_imdb(msg): def cmd_imdb(msg):
"""View movie details with !imdb <title>""" """View movie details with !imdb <title>"""
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("precise a movie/serie title!") raise IRCException("precise a movie/serie title!")
title = ' '.join(msg.cmds[1:]) title = ' '.join(msg.args)
if re.match("^tt[0-9]{7}$", title) is not None: if re.match("^tt[0-9]{7}$", title) is not None:
data = get_movie(imdbid=title) data = get_movie(imdbid=title)
@ -100,8 +100,10 @@ def cmd_imdb(msg):
@hook("cmd_hook", "imdbs") @hook("cmd_hook", "imdbs")
def cmd_search(msg): def cmd_search(msg):
"""!imdbs <approximative title> to search a movie title""" """!imdbs <approximative title> to search a movie title"""
if not len(msg.args):
raise IRCException("precise a movie/serie title!")
data = find_movies(' '.join(msg.cmds[1:])) data = find_movies(' '.join(msg.args))
movies = list() movies = list()
for m in data['Search']: for m in data['Search']:

View File

@ -43,18 +43,18 @@ def getJsonKeys(data):
@hook("cmd_hook", "json") @hook("cmd_hook", "json")
def get_json_info(msg): def get_json_info(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Please specify a url and a list of JSON keys.") raise IRCException("Please specify a url and a list of JSON keys.")
request_data = web.getURLContent(msg.cmds[1].replace(' ', "%20")) request_data = web.getURLContent(msg.args[0].replace(' ', "%20"))
if not request_data: if not request_data:
raise IRCException("Please specify a valid url.") raise IRCException("Please specify a valid url.")
json_data = json.loads(request_data) json_data = json.loads(request_data)
if len(msg.cmds) == 2: if len(msg.args) == 1:
raise IRCException("Please specify the keys to return (%s)" % ", ".join(getJsonKeys(json_data))) raise IRCException("Please specify the keys to return (%s)" % ", ".join(getJsonKeys(json_data)))
tags = ','.join(msg.cmds[2:]).split(',') tags = ','.join(msg.args[1:]).split(',')
response = getRequestedTags(tags, json_data) response = getRequestedTags(tags, json_data)
return Response(response, channel=msg.channel, nomore="No more content", count=" (%d more lines)") return Response(response, channel=msg.channel, nomore="No more content", count=" (%d more lines)")

View File

@ -14,10 +14,10 @@ def help_full():
@hook("cmd_hook", "laposte") @hook("cmd_hook", "laposte")
def get_tracking_info(msg): def get_tracking_info(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Renseignez un identifiant d'envoi,") raise IRCException("Renseignez un identifiant d'envoi,")
data = urllib.parse.urlencode({'id': msg.cmds[1]}) data = urllib.parse.urlencode({'id': msg.args[0]})
laposte_baseurl = "http://www.part.csuivi.courrier.laposte.fr/suivi/index" laposte_baseurl = "http://www.part.csuivi.courrier.laposte.fr/suivi/index"
laposte_data = urllib.request.urlopen(laposte_baseurl, data.encode('utf-8')) laposte_data = urllib.request.urlopen(laposte_baseurl, data.encode('utf-8'))
@ -42,4 +42,3 @@ def get_tracking_info(msg):
return Response("Le courrier de type \x02%s\x0F : \x02%s\x0F est actuellement \x02%s\x0F dans la zone \x02%s\x0F (Mis à jour le \x02%s\x0F)." % (poste_type.lower(), poste_id.strip(), poste_status.lower(), poste_location, poste_date), msg.channel) return Response("Le courrier de type \x02%s\x0F : \x02%s\x0F est actuellement \x02%s\x0F dans la zone \x02%s\x0F (Mis à jour le \x02%s\x0F)." % (poste_type.lower(), poste_id.strip(), poste_status.lower(), poste_location, poste_date), msg.channel)
return Response("L'identifiant recherché semble incorrect, merci de vérifier son exactitude.", msg.channel) return Response("L'identifiant recherché semble incorrect, merci de vérifier son exactitude.", msg.channel)

View File

@ -23,15 +23,15 @@ RGXP_s = re.compile(b'\x1b\\[[0-9]+m')
def cmd_man(msg): def cmd_man(msg):
args = ["man"] args = ["man"]
num = None num = None
if len(msg.cmds) == 2: if len(msg.args) == 1:
args.append(msg.cmds[1]) args.append(msg.args[0])
elif len(msg.cmds) >= 3: elif len(msg.args) >= 2:
try: try:
num = int(msg.cmds[1]) num = int(msg.args[0])
args.append("%d" % num) args.append("%d" % num)
args.append(msg.cmds[2]) args.append(msg.args[1])
except ValueError: except ValueError:
args.append(msg.cmds[1]) args.append(msg.args[0])
os.unsetenv("LANG") os.unsetenv("LANG")
res = Response(channel=msg.channel) res = Response(channel=msg.channel)
@ -45,16 +45,16 @@ def cmd_man(msg):
if len(res.messages) <= 0: if len(res.messages) <= 0:
if num is not None: if num is not None:
res.append_message("There is no entry %s in section %d." % res.append_message("There is no entry %s in section %d." %
(msg.cmds[1], num)) (msg.args[0], num))
else: else:
res.append_message("There is no man page for %s." % msg.cmds[1]) res.append_message("There is no man page for %s." % msg.args[0])
return res return res
@hook("cmd_hook", "man") @hook("cmd_hook", "man")
def cmd_whatis(msg): def cmd_whatis(msg):
args = ["whatis", " ".join(msg.cmds[1:])] args = ["whatis", " ".join(msg.args)]
res = Response(channel=msg.channel) res = Response(channel=msg.channel)
with subprocess.Popen(args, with subprocess.Popen(args,
@ -67,8 +67,8 @@ def cmd_whatis(msg):
if len(res.messages) <= 0: if len(res.messages) <= 0:
if num is not None: if num is not None:
res.append_message("There is no entry %s in section %d." % res.append_message("There is no entry %s in section %d." %
(msg.cmds[1], num)) (msg.args[0], num))
else: else:
res.append_message("There is no man page for %s." % msg.cmds[1]) res.append_message("There is no man page for %s." % msg.args[0])
return res return res

View File

@ -139,27 +139,27 @@ def search(site, term, ssl=False):
@hook("cmd_hook", "mediawiki") @hook("cmd_hook", "mediawiki")
def cmd_mediawiki(msg): def cmd_mediawiki(msg):
"""Read an article on a MediaWiki""" """Read an article on a MediaWiki"""
if len(msg.cmds) < 3: if len(msg.args) < 2:
raise IRCException("indicate a domain and a term to search") raise IRCException("indicate a domain and a term to search")
site = msg.cmds[1] site = msg.args[0]
ns = get_namespaces(site) ns = get_namespaces(site)
return Response(get_page(site, " ".join(msg.cmds[2:])), return Response(get_page(site, " ".join(msg.args[1:])),
line_treat=lambda line: irc_format(parse_wikitext(msg.cmds[1], line, ns)), line_treat=lambda line: irc_format(parse_wikitext(msg.args[0], line, ns)),
channel=msg.receivers) channel=msg.receivers)
@hook("cmd_hook", "search_mediawiki") @hook("cmd_hook", "search_mediawiki")
def cmd_srchmediawiki(msg): def cmd_srchmediawiki(msg):
"""Search an article on a MediaWiki""" """Search an article on a MediaWiki"""
if len(msg.cmds) < 3: if len(msg.args) < 2:
raise IRCException("indicate a domain and a term to search") raise IRCException("indicate a domain and a term to search")
res = Response(channel=msg.receivers, nomore="No more results", count=" (%d more results)") res = Response(channel=msg.receivers, nomore="No more results", count=" (%d more results)")
for r in search(msg.cmds[1], " ".join(msg.cmds[2:])): for r in search(msg.args[0], " ".join(msg.args[1:])):
res.append_message("%s: %s" % r) res.append_message("%s: %s" % r)
return res return res
@ -167,13 +167,13 @@ def cmd_srchmediawiki(msg):
@hook("cmd_hook", "wikipedia") @hook("cmd_hook", "wikipedia")
def cmd_wikipedia(msg): def cmd_wikipedia(msg):
if len(msg.cmds) < 3: if len(msg.args) < 2:
raise IRCException("indicate a lang and a term to search") raise IRCException("indicate a lang and a term to search")
site = msg.cmds[1] + ".wikipedia.org" site = msg.args[0] + ".wikipedia.org"
ns = get_namespaces(site) ns = get_namespaces(site)
return Response(get_page(site, " ".join(msg.cmds[2:])), return Response(get_page(site, " ".join(msg.args[1:])),
line_treat=lambda line: irc_format(parse_wikitext(site, line, ns)), line_treat=lambda line: irc_format(parse_wikitext(site, line, ns)),
channel=msg.receivers) channel=msg.receivers)

View File

@ -39,10 +39,10 @@ def help_full():
@hook("cmd_hook", "curly") @hook("cmd_hook", "curly")
def cmd_curly(msg): def cmd_curly(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Indicate the URL to visit.") raise IRCException("Indicate the URL to visit.")
url = " ".join(msg.cmds[1:]) url = " ".join(msg.args)
version, status, reason, headers = page.headers(url) version, status, reason, headers = page.headers(url)
return Response("Entêtes de la page %s : HTTP/%s, statut : %d %s ; headers : %s" % (url, version, status, reason, ", ".join(["\x03\x02" + h + "\x03\x02: " + v for h, v in headers])), channel=msg.channel) return Response("Entêtes de la page %s : HTTP/%s, statut : %d %s ; headers : %s" % (url, version, status, reason, ", ".join(["\x03\x02" + h + "\x03\x02: " + v for h, v in headers])), channel=msg.channel)
@ -50,20 +50,20 @@ def cmd_curly(msg):
@hook("cmd_hook", "curl") @hook("cmd_hook", "curl")
def cmd_curl(msg): def cmd_curl(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Indicate the URL to visit.") raise IRCException("Indicate the URL to visit.")
res = Response(channel=msg.channel) res = Response(channel=msg.channel)
for m in page.fetch(" ".join(msg.cmds[1:])).split("\n"): for m in page.fetch(" ".join(msg.args)).split("\n"):
res.append_message(m) res.append_message(m)
return res return res
@hook("cmd_hook", "w3m") @hook("cmd_hook", "w3m")
def cmd_w3m(msg): def cmd_w3m(msg):
if len(msg.cmds) > 1: if len(msg.args):
res = Response(channel=msg.channel) res = Response(channel=msg.channel)
for line in page.render(" ".join(msg.cmds[1:])).split("\n"): for line in page.render(" ".join(msg.args)).split("\n"):
res.append_message(line) res.append_message(line)
return res return res
else: else:
@ -72,9 +72,9 @@ def cmd_w3m(msg):
@hook("cmd_hook", "traceurl") @hook("cmd_hook", "traceurl")
def cmd_traceurl(msg): def cmd_traceurl(msg):
if 1 < len(msg.cmds) < 6: if 1 < len(msg.args) < 5:
res = list() res = list()
for url in msg.cmds[1:]: for url in msg.args:
trace = page.traceURL(url) trace = page.traceURL(url)
res.append(Response(trace, channel=msg.channel, title="TraceURL")) res.append(Response(trace, channel=msg.channel, title="TraceURL"))
return res return res
@ -84,9 +84,9 @@ def cmd_traceurl(msg):
@hook("cmd_hook", "isup") @hook("cmd_hook", "isup")
def cmd_isup(msg): def cmd_isup(msg):
if 1 < len(msg.cmds) < 6: if 1 < len(msg.args) < 5:
res = list() res = list()
for url in msg.cmds[1:]: for url in msg.args:
rep = isup.isup(url) rep = isup.isup(url)
if rep: if rep:
res.append(Response("%s is up (response time: %ss)" % (url, rep), channel=msg.channel)) res.append(Response("%s is up (response time: %ss)" % (url, rep), channel=msg.channel))
@ -99,10 +99,10 @@ def cmd_isup(msg):
@hook("cmd_hook", "w3c") @hook("cmd_hook", "w3c")
def cmd_w3c(msg): def cmd_w3c(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Indicate an URL to validate!") raise IRCException("Indicate an URL to validate!")
headers, validator = w3c.validator(msg.cmds[1]) headers, validator = w3c.validator(msg.args[0])
res = Response(channel=msg.channel, nomore="No more error") res = Response(channel=msg.channel, nomore="No more error")
@ -121,15 +121,15 @@ def cmd_w3c(msg):
@hook("cmd_hook", "watch", data="diff") @hook("cmd_hook", "watch", data="diff")
@hook("cmd_hook", "updown", data="updown") @hook("cmd_hook", "updown", data="updown")
def cmd_watch(msg, diffType="diff"): def cmd_watch(msg, diffType="diff"):
if len(msg.cmds) <= 1: if not len(msg.args):
raise IRCException("indicate an URL to watch!") raise IRCException("indicate an URL to watch!")
return watchWebsite.add_site(msg.cmds[1], msg.frm, msg.channel, msg.server, diffType) return watchWebsite.add_site(msg.args[0], msg.frm, msg.channel, msg.server, diffType)
@hook("cmd_hook", "unwatch") @hook("cmd_hook", "unwatch")
def cmd_unwatch(msg): def cmd_unwatch(msg):
if len(msg.cmds) <= 1: if not len(msg.args):
raise IRCException("which URL should I stop watching?") raise IRCException("which URL should I stop watching?")
return watchWebsite.del_site(msg.cmds[1], msg.frm, msg.channel, msg.frm_owner) return watchWebsite.del_site(msg.args[0], msg.frm, msg.channel, msg.frm_owner)

View File

@ -77,10 +77,10 @@ def whois_entityformat(entity):
def cmd_whois(msg): def cmd_whois(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("Indiquer un domaine ou une IP à whois !") raise IRCException("Indiquer un domaine ou une IP à whois !")
dom = msg.cmds[1] dom = msg.args[0]
js = getJSON(URL_WHOIS % urllib.parse.quote(dom)) js = getJSON(URL_WHOIS % urllib.parse.quote(dom))

View File

@ -17,12 +17,12 @@ def help_full ():
@hook("cmd_hook", "ratp") @hook("cmd_hook", "ratp")
def ask_ratp(msg): def ask_ratp(msg):
"""Hook entry from !ratp""" """Hook entry from !ratp"""
if len(msg.cmds) >= 4: if len(msg.args) >= 3:
transport = msg.cmds[1] transport = msg.args[0]
line = msg.cmds[2] line = msg.args[1]
station = msg.cmds[3] station = msg.args[2]
if len(msg.cmds) == 5: if len(msg.args) == 4:
times = ratp.getNextStopsAtStation(transport, line, station, msg.cmds[4]) times = ratp.getNextStopsAtStation(transport, line, station, msg.args[3])
else: else:
times = ratp.getNextStopsAtStation(transport, line, station) times = ratp.getNextStopsAtStation(transport, line, station)
@ -34,8 +34,8 @@ def ask_ratp(msg):
title="Prochains passages du %s ligne %s à l'arrêt %s" % (transport, line, stationname), title="Prochains passages du %s ligne %s à l'arrêt %s" % (transport, line, stationname),
channel=msg.channel) channel=msg.channel)
elif len(msg.cmds) == 3: elif len(msg.args) == 2:
stations = ratp.getAllStations(msg.cmds[1], msg.cmds[2]) stations = ratp.getAllStations(msg.args[0], msg.args[1])
if len(stations) == 0: if len(stations) == 0:
raise IRCException("aucune station trouvée.") raise IRCException("aucune station trouvée.")
@ -46,9 +46,9 @@ def ask_ratp(msg):
@hook("cmd_hook", "ratp_alert") @hook("cmd_hook", "ratp_alert")
def ratp_alert(msg): def ratp_alert(msg):
if len(msg.cmds) == 3: if len(msg.args) == 2:
transport = msg.cmds[1] transport = msg.args[0]
cause = msg.cmds[2] cause = msg.args[1]
incidents = ratp.getDisturbance(cause, transport) incidents = ratp.getDisturbance(cause, transport)
return Response(incidents, channel=msg.channel, nomore="No more incidents", count=" (%d more incidents)") return Response(incidents, channel=msg.channel, nomore="No more incidents", count=" (%d more incidents)")
else: else:

View File

@ -22,14 +22,14 @@ LAST_SUBS = dict()
@hook("cmd_hook", "subreddit") @hook("cmd_hook", "subreddit")
def cmd_subreddit(msg): def cmd_subreddit(msg):
global LAST_SUBS global LAST_SUBS
if len(msg.cmds) <= 1: if not len(msg.args):
if msg.channel in LAST_SUBS and len(LAST_SUBS[msg.channel]) > 0: if msg.channel in LAST_SUBS and len(LAST_SUBS[msg.channel]) > 0:
subs = [LAST_SUBS[msg.channel].pop()] subs = [LAST_SUBS[msg.channel].pop()]
else: else:
raise IRCException("Which subreddit? Need inspiration? " raise IRCException("Which subreddit? Need inspiration? "
"type !horny or !bored") "type !horny or !bored")
else: else:
subs = msg.cmds[1:] subs = msg.args
all_res = list() all_res = list()
for osub in subs: for osub in subs:

View File

@ -14,9 +14,9 @@ from more import Response
@hook("cmd_hook", "choice") @hook("cmd_hook", "choice")
def cmd_choice(msg): def cmd_choice(msg):
if len(msg.cmds) > 1: if not len(msg.args):
return Response(random.choice(msg.cmds[1:]),
channel=msg.channel,
nick=msg.nick)
else:
raise IRCException("indicate some terms to pick!") raise IRCException("indicate some terms to pick!")
return Response(random.choice(msg.args),
channel=msg.channel,
nick=msg.nick)

View File

@ -21,10 +21,10 @@ def help_full():
@hook("cmd_hook", "sleepytime") @hook("cmd_hook", "sleepytime")
def cmd_sleep(msg): def cmd_sleep(msg):
if len(msg.cmds) > 1 and re.match("[0-9]{1,2}[h':.,-]([0-9]{1,2})?[m'\":.,-]?", if len(msg.args) and re.match("[0-9]{1,2}[h':.,-]([0-9]{1,2})?[m'\":.,-]?",
msg.cmds[1]) is not None: msg.args[0]) is not None:
# First, parse the hour # First, parse the hour
p = re.match("([0-9]{1,2})[h':.,-]([0-9]{1,2})?[m':.,-]?", msg.cmds[1]) p = re.match("([0-9]{1,2})[h':.,-]([0-9]{1,2})?[m':.,-]?", msg.args[0])
f = [datetime(datetime.now(timezone.utc).year, f = [datetime(datetime.now(timezone.utc).year,
datetime.now(timezone.utc).month, datetime.now(timezone.utc).month,
datetime.now(timezone.utc).day, datetime.now(timezone.utc).day,

View File

@ -49,12 +49,12 @@ def send_sms(frm, api_usr, api_key, content):
@hook("cmd_hook", "sms") @hook("cmd_hook", "sms")
def cmd_sms(msg): def cmd_sms(msg):
if len(msg.cmds) <= 2: if not len(msg.args):
raise IRCException("À qui veux-tu envoyer ce SMS ?") raise IRCException("À qui veux-tu envoyer ce SMS ?")
# Check dests # Check dests
cur_epoch = time.mktime(time.localtime()); cur_epoch = time.mktime(time.localtime());
for u in msg.cmds[1].split(","): for u in msg.args[0].split(","):
if u not in context.data.index: if u not in context.data.index:
raise IRCException("Désolé, je sais pas comment envoyer de SMS à %s." % u) raise IRCException("Désolé, je sais pas comment envoyer de SMS à %s." % u)
elif cur_epoch - float(context.data.index[u]["lastuse"]) < 42: elif cur_epoch - float(context.data.index[u]["lastuse"]) < 42:
@ -62,13 +62,13 @@ def cmd_sms(msg):
# Go! # Go!
fails = list() fails = list()
for u in msg.cmds[1].split(","): for u in msg.args[0].split(","):
context.data.index[u]["lastuse"] = cur_epoch context.data.index[u]["lastuse"] = cur_epoch
if msg.to_response[0] == msg.frm: if msg.to_response[0] == msg.frm:
frm = msg.frm frm = msg.frm
else: else:
frm = msg.frm + "@" + msg.to[0] frm = msg.frm + "@" + msg.to[0]
test = send_sms(frm, context.data.index[u]["user"], context.data.index[u]["key"], " ".join(msg.cmds[2:])) test = send_sms(frm, context.data.index[u]["user"], context.data.index[u]["key"], " ".join(msg.args[1:]))
if test is not None: if test is not None:
fails.append( "%s: %s" % (u, test) ) fails.append( "%s: %s" % (u, test) )

View File

@ -25,13 +25,13 @@ def load(context):
@hook("cmd_hook", "spell") @hook("cmd_hook", "spell")
def cmd_spell(msg): def cmd_spell(msg):
if len(msg.cmds) < 2: if not len(msg.args):
raise IRCException("indique une orthographe approximative du mot dont tu veux vérifier l'orthographe.") raise IRCException("indique une orthographe approximative du mot dont tu veux vérifier l'orthographe.")
lang = "fr" lang = "fr"
strRes = list() strRes = list()
for word in msg.cmds[1:]: for word in msg.args:
if len(word) <= 2 and len(msg.cmds) > 2: if len(word) <= 2 and len(msg.args) > 2:
lang = word lang = word
else: else:
try: try:
@ -65,14 +65,13 @@ def add_score(nick, t):
def cmd_score(msg): def cmd_score(msg):
res = list() res = list()
unknown = list() unknown = list()
if len(msg.cmds) > 1: if not len(msg.args):
for cmd in msg.cmds[1:]: raise IRCException("De qui veux-tu voir les scores ?")
if cmd in context.data.index: for cmd in msg.args:
res.append(Response("%s: %s" % (cmd, " ; ".join(["%s: %d" % (a, context.data.index[cmd].getInt(a)) for a in context.data.index[cmd].attributes.keys() if a != "name"])), channel=msg.channel)) if cmd in context.data.index:
else: res.append(Response("%s: %s" % (cmd, " ; ".join(["%s: %d" % (a, context.data.index[cmd].getInt(a)) for a in context.data.index[cmd].attributes.keys() if a != "name"])), channel=msg.channel))
unknown.append(cmd) else:
else: unknown.append(cmd)
return Response("De qui veux-tu voir les scores ?", channel=msg.channel, nick=msg.nick)
if len(unknown) > 0: if len(unknown) > 0:
res.append(Response("%s inconnus" % ", ".join(unknown), channel=msg.channel)) res.append(Response("%s inconnus" % ", ".join(unknown), channel=msg.channel))

View File

@ -78,11 +78,11 @@ def print_station_status(msg, station):
@hook("cmd_hook", "velib") @hook("cmd_hook", "velib")
def ask_stations(msg): def ask_stations(msg):
"""Hook entry from !velib""" """Hook entry from !velib"""
if len(msg.cmds) > 5: if len(msg.args) > 4:
raise IRCException("demande-moi moins de stations à la fois.") raise IRCException("demande-moi moins de stations à la fois.")
elif len(msg.cmds) > 1: elif len(msg.args):
for station in msg.cmds[1:]: for station in msg.args:
if re.match("^[0-9]{4,5}$", station): if re.match("^[0-9]{4,5}$", station):
return print_station_status(msg, station) return print_station_status(msg, station)
elif station in context.data.index: elif station in context.data.index:

View File

@ -48,12 +48,12 @@ def cmd_watch(msg):
node = n node = n
break break
if len(msg.cmds) >= 2: if len(msg.args):
if msg.cmds[1] == "stop" and node is not None: if msg.args[0] == "stop" and node is not None:
context.data.delChild(node) context.data.delChild(node)
context.save() context.save()
raise IRCException("This channel will not anymore receives world cup events.") raise IRCException("This channel will not anymore receives world cup events.")
elif msg.cmds[1] == "start" and node is None: elif msg.args[0] == "start" and node is None:
start_watch(msg) start_watch(msg)
else: else:
raise IRCException("Use only start or stop as first argument") raise IRCException("Use only start or stop as first argument")
@ -180,20 +180,19 @@ def get_matches(url):
@hook("cmd_hook", "worldcup") @hook("cmd_hook", "worldcup")
def cmd_worldcup(msg): def cmd_worldcup(msg):
res = Response(channel=msg.channel, nomore="No more match to display", count=" (%d more matches)") res = Response(channel=msg.channel, nomore="No more match to display", count=" (%d more matches)")
nb = len(msg.cmds)
url = None url = None
if nb == 2: if len(msg.args) == 1:
if msg.cmds[1] == "today" or msg.cmds[1] == "aujourd'hui": if msg.args[0] == "today" or msg.args[0] == "aujourd'hui":
url = "matches/today?by_date=ASC" url = "matches/today?by_date=ASC"
elif msg.cmds[1] == "tomorrow" or msg.cmds[1] == "demain": elif msg.args[0] == "tomorrow" or msg.args[0] == "demain":
url = "matches/tomorrow?by_date=ASC" url = "matches/tomorrow?by_date=ASC"
elif msg.cmds[1] == "all" or msg.cmds[1] == "tout" or msg.cmds[1] == "tous": elif msg.args[0] == "all" or msg.args[0] == "tout" or msg.args[0] == "tous":
url = "matches/" url = "matches/"
elif len(msg.cmds[1]) == 3: elif len(msg.args[0]) == 3:
url = "matches/country?fifa_code=%s&by_date=DESC" % msg.cmds[1] url = "matches/country?fifa_code=%s&by_date=DESC" % msg.args[0]
elif is_int(msg.cmds[1]): elif is_int(msg.args[0]):
url = int(msg.cmds[1]) url = int(msg.arg[0])
else: else:
raise IRCException("unrecognized request; choose between 'today', 'tomorrow', a FIFA country code or a match identifier") raise IRCException("unrecognized request; choose between 'today', 'tomorrow', a FIFA country code or a match identifier")

View File

@ -45,17 +45,17 @@ def gen_response(res, msg, srv):
def cmd_ycc(msg): def cmd_ycc(msg):
minify = list() minify = list()
if len(msg.cmds) == 1: if not len(msg.args):
global LAST_URLS global LAST_URLS
if msg.channel in LAST_URLS and len(LAST_URLS[msg.channel]) > 0: if msg.channel in LAST_URLS and len(LAST_URLS[msg.channel]) > 0:
minify.append(LAST_URLS[msg.channel].pop()) minify.append(LAST_URLS[msg.channel].pop())
else: else:
raise IRCException("je n'ai pas d'autre URL à réduire.") raise IRCException("je n'ai pas d'autre URL à réduire.")
if len(msg.cmds) > 5: if len(msg.args) > 4:
raise IRCException("je ne peux pas réduire autant d'URL d'un seul coup.") raise IRCException("je ne peux pas réduire autant d'URL d'un seul coup.")
else: else:
minify += msg.cmds[1:] minify += msg.args
res = list() res = list()
for url in minify: for url in minify:

View File

@ -11,7 +11,7 @@ from more import Response
nemubotversion = 3.4 nemubotversion = 3.4
def help_full(): def help_full():
return "!yt [<url>]: with an argument, get information about the given link; without arguments, use the latest youtube link seen on the current channel." return "!yt [<url>]: with an argument, get information about the given link; without arguments, use the latest link seen on the current channel."
def _get_ytdl(links): def _get_ytdl(links):
cmd = 'youtube-dl -j --'.split() cmd = 'youtube-dl -j --'.split()
@ -82,13 +82,14 @@ def parselisten(msg):
@hook("all_post") @hook("all_post")
def parseresponse(msg): def parseresponse(msg):
global LAST_URLS global LAST_URLS
urls = re.findall("([a-zA-Z0-9+.-]+:(?://)?[^ ]+)", msg.text) if hasattr(msg, "text"):
for url in urls: urls = re.findall("([a-zA-Z0-9+.-]+:(?://)?[^ ]+)", msg.text)
o = urlparse(url) for url in urls:
if o.scheme != "": o = urlparse(url)
if o.netloc == "" and len(o.path) < 10: if o.scheme != "":
continue if o.netloc == "" and len(o.path) < 10:
if msg.channel not in LAST_URLS: continue
LAST_URLS[msg.channel] = list() if msg.channel not in LAST_URLS:
LAST_URLS[msg.channel].append(url) LAST_URLS[msg.channel] = list()
LAST_URLS[msg.channel].append(url)
return msg return msg