From: Vincent Le Gallic Date: Sun, 5 Apr 2015 16:45:52 +0000 (+0200) Subject: PEP8 X-Git-Url: http://gitweb.pimeys.fr/?p=bots%2Fbbc.git;a=commitdiff_plain;h=34675159017bff7412036386d4ee216a429f56c8 PEP8 --- diff --git a/config.py b/config.py index dccc427..8c6061e 100644 --- a/config.py +++ b/config.py @@ -1,104 +1,125 @@ #!/usr/bin/python # -*- coding:utf8 -*- -# Configuration d'un bot IRC (squelette de base vide) - -debug_stdout=True - -# la config irc-related -irc_password="Mot de passe à envoyer à NickServ pour s'authentifier" -irc_pseudo="Pseudo" -chanlist=["#bot"] # liste des chans à rejoindre -stay_channels=["#bot"] # liste des chans que le bot ne quitte pas, même sur demande d'un leave de la part d'un OP -quiet_channels=[] # liste des chans sur lesquels le bot ne parle pas - -# les logs -logfile_template="skeleton.%s.log" # fichier de log (%s est remplacé par le nom du serveur) - -# les ops -overops=["[20-100]"] # liste des OVEROPs (meilleurs que les OP ^^) -ops=[] # liste des OPs +"""Configuration d'un bot IRC (squelette de base vide)""" + +debug_stdout = True + +### La config irc-related +irc_password = "Mot de passe à envoyer à NickServ pour s'authentifier" +irc_pseudo = "Pseudo" +#: Liste des chans à rejoindre +chanlist = ["#bot"] +#: Liste des chans que le bot ne quitte pas, même sur demande d'un leave de la part d'un OP +stay_channels = ["#bot"] +#: Liste des chans sur lesquels le bot ne parle pas +quiet_channels = [] + +### Les logs +#: fichier de log (``%s`` est remplacé par le nom du serveur) +logfile_template = "skeleton.%s.log" + +### Les ops +#: Liste des OVEROPs (meilleurs que les OP ^^) +overops = ["[20-100]"] +#: Liste des OPs (la liste des :py:data:`overops` y est ajoutée) +ops = [] # config UTF8-fail utf8_fail_answers = [u"Ceci est une réponse en cas de "] -utf8_trigger = True # râlé-je en cas de non-utf8 ? - -# config "tu m'traites ?" -insultes=[u"conna(rd|sse)",u"pute",u"con(|ne)",u"enf(oiré|lure)", -u"sal(op(|e(|rie)|ard)|aud)",u"p(e|')tite bite",u"imbécile",u"idiot",u"stupid(|e)",u"débile",u"crétin", -u"pétasse",u"enculé",u"chagasse",u"cagole",u"abruti",u"ahuri",u"analphabète",u"andouille", -u"atardé",u"avorton",u"bachibouzouk",u"(balais|brosse) (de|à) chiotte(|s)", -u"batard",u"blaireau",u"bouffon",u"branque",u"bouseux",u"branleur",u"catin",u"chacal", -u"charogne",u"chiant(|e)",u"chieur",u"cochon",u"coprophage",u"couillon",u"crapule",u"crevard", -u"cruche",u"cuistre",u"ducon",u"décérébré", -u"emmerdeur",u"feignasse",u"fainéant",u"fourbe",u"freluquet",u"frigide", -u"garce",u"glandu",u"gogol",u"goujat",u"gourdasse",u"gredin",u"gringalet",u"grognasse", -u"naze",u"truie",u"iconoclaste", -u"peigne(-|)cul",u"ignare",u"illétré",u"lèche(|-)cul",u"malotru",u"motherfucker",u"nabot",u"nigaud", -u"nul",u"escroc",u"pouffiasse",u"pourriture",u"raclure",u"relou",u"sagouin",u"putain", +#: Le bot râle-t-il en cas de non-utf8 ? +utf8_trigger = True + +### config "tu m'traites ?" +#: Liste des insultes reconnues par le bot +insultes = [u"conna(rd|sse)", u"pute", u"con(|ne)", u"enf(oiré|lure)", +u"sal(op(|e(|rie)|ard)|aud)", u"p(e|')tite bite", u"imbécile", u"idiot", u"stupid(|e)", u"débile", u"crétin", +u"pétasse", u"enculé", u"chagasse", u"cagole", u"abruti", u"ahuri", u"analphabète", u"andouille", +u"atardé", u"avorton", u"bachibouzouk", u"(balais|brosse) (de|à) chiotte(|s)", +u"batard", u"blaireau", u"bouffon", u"branque", u"bouseux", u"branleur", u"catin", u"chacal", +u"charogne", u"chiant(|e)", u"chieur", u"cochon", u"coprophage", u"couillon", u"crapule", u"crevard", +u"cruche", u"cuistre", u"ducon", u"décérébré", +u"emmerdeur", u"feignasse", u"fainéant", u"fourbe", u"freluquet", u"frigide", +u"garce", u"glandu", u"gogol", u"goujat", u"gourdasse", u"gredin", u"gringalet", u"grognasse", +u"naze", u"truie", u"iconoclaste", +u"peigne(-|)cul", u"ignare", u"illétré", u"lèche(|-)cul", u"malotru", u"motherfucker", u"nabot", u"nigaud", +u"nul", u"escroc", u"pouffiasse", u"pourriture", u"raclure", u"relou", u"sagouin", u"putain", u"péripatéticienne"] -insultes_answers=[ +#: Liste des réponses possibles à une insulte +insultes_answers = [ u"Ceci est une réponse à une insulte."] -# config "tais-toi" -tag_triggers=[u"t(|a)g",u"ta gueule",u"la ferme",u"ferme( |-)la",u"tais-toi",u"chut",u"tu fais trop de bruit",u"tu parles trop"] -tag_actions=[u"effectue une action en réponse à un \"tais-toi\"."] -tag_answers=[ +### config "tais-toi" +#: Liste des pattern qui vont faire taire le bot +tag_triggers = [u"t(|a)g", u"ta gueule", u"la ferme", u"ferme( |-)la", u"tais-toi", u"chut", u"tu fais trop de bruit", u"tu parles trop"] +#: Liste des actions effectuées en réponses à un :py:data:`tag_triggers` si +#: l'utilisateur n'est pas OP +tag_actions = [u"effectue une action en réponse à un \"tais-toi\"."] +#: Liste des réponses adressée à un utilisateur non-OP +#: suite à un :py:data:`tag_triggers` +tag_answers = [ u"Ceci est une réponse à un 'tais-toi' à quelqu'un qui n'en a pas le droit."] -# config ping -tesla_triggers=[u"t('|u )es là \?",u"\?",u"plop \?",u"plouf \?"] -tesla_answers=[ +### config ping +#: Liste des pings +tesla_triggers = [u"t('|u )es là \?", u"\?", u"plop \?", u"plouf \?"] +#: Liste des pongs +tesla_answers = [ u"Ceci est une réponse à 't'es là ?'." ] -tesla_actions=[u"effectue une action en réponse à un \"t'es là ?\"."] - -# config en cas de non-insulte -compliment_triggers=[u"gentil",u"cool",u"sympa",u"efficace"] -compliment_answers=[ +#: Liste des actions pong +tesla_actions = [u"effectue une action en réponse à un \"t'es là ?\"."] + +### config en cas de non-insulte +#: Liste des compliments +compliment_triggers = [u"gentil", u"cool", u"sympa", u"efficace"] +#: Liste des réponses à un compliment +compliment_answers = [ u"Ceci est une réponse à une non-insulte." ] -# config merci -merci_triggers=[u"merci",u"remercie",u"thx",u"thank(|s)"] -merci_answers=[u"Ceci est une réponse à un remerciement."] +### config merci +#: Liste des mercis +merci_triggers = [u"merci", u"remercie", u"thx", u"thank(|s)"] +#: Liste des réponses à un remerciement +merci_answers = [u"Ceci est une réponse à un remerciement."] # config "ta mère" -tamere_triggers=[u"ta mère"] -tamere_answers=[u"Ceci est une réponse à un \"ta mère\"."] +tamere_triggers = [u"ta mère"] +tamere_answers = [u"Ceci est une réponse à un \"ta mère\"."] # config pour les actions désagréables -bad_action_triggers=[u"(frappe|cogne|tape)(| sur)",u"(démolit|dégomme|fouette|agresse|tabasse)", -u"(vomit|pisse|chie|crache) sur",u"slap(|s)"] -bad_action_answers=[ +bad_action_triggers = [u"(frappe|cogne|tape)(| sur)", u"(démolit|dégomme|fouette|agresse|tabasse)", +u"(vomit|pisse|chie|crache) sur", u"slap(|s)"] +bad_action_answers = [ u"Ceci est une réponse en cas d'action désagréable. (Elle a été perpetrée par {})" ] -bad_action_actions=[u"effectue une action en réponse à une action désagréable."] +bad_action_actions = [u"effectue une action en réponse à une action désagréable."] # config pour les actions agréables -good_action_triggers=[u"fait (:?des bisous|un c(?:â|a)lin|des c(?:â|a)lins) à",u"embrasse",u"c(?:â|a)line",u"caresse"] -good_action_answers=[u"Ceci est une réponse à une action agréable. (Prodiguée par {})"] -good_action_actions=[u"effectue une action en réponse à une action agréable."] +good_action_triggers = [u"fait (:?des bisous|un c(?:â|a)lin|des c(?:â|a)lins) à", u"embrasse", u"c(?:â|a)line", u"caresse"] +good_action_answers = [u"Ceci est une réponse à une action agréable. (Prodiguée par {})"] +good_action_actions = [u"effectue une action en réponse à une action agréable."] # config bonjour/bonsoir/que fais-tu encore debout à cette heure, gros sale ! -bonjour_triggers=[u"(s|)(a|'|)lu(t|)",u"hello",u"pl(o|i)p",u"pr(ou|ü)t",u"bonjour",u"bonsoir",u"coucou"] -bonjour_answers=[u"Ceci est un message bonjour. (En réponse à {})"] -bonsoir_answers=[u"Ceci est un message bonsoir. (En réponse à {})"] -night_answers=[u"Ceci est un message envoyé à {} si il dit bonjour en pleine nuit."] -daytime = [7,18] # c'est quoi le "jour" ? +bonjour_triggers = [u"(s|)(a|'|)lu(t|)", u"hello", u"pl(o|i)p", u"pr(ou|ü)t", u"bonjour", u"bonsoir", u"coucou"] +bonjour_answers = [u"Ceci est un message bonjour. (En réponse à {})"] +bonsoir_answers = [u"Ceci est un message bonsoir. (En réponse à {})"] +night_answers = [u"Ceci est un message envoyé à {} si il dit bonjour en pleine nuit."] +daytime = [7, 18] # c'est quoi le "jour" ? nighttime = [3, 6] # c'est quoi la "nuit" ? # config dodo -bonne_nuit_triggers=[u"bonne nuit",u"'?nite",u"'?nuit",u"'?night",u"good night",u"'?nenuit"] -bonne_nuit_answers=[u"Ceci est un message de souhait de bonne nuit. (En réponse à {})"] +bonne_nuit_triggers = [u"bonne nuit", u"'?nite", u"'?nuit", u"'?night", u"good night", u"'?nenuit"] +bonne_nuit_answers = [u"Ceci est un message de souhait de bonne nuit. (En réponse à {})"] # config quelqu'un s'est défoulé sur le bot -kick_answers=[u"Ceci est un message suite à /kick (Perpetré par {})"] -kick_actions=[u"effectue une action suite à un /kick."] +kick_answers = [u"Ceci est un message suite à /kick (Perpetré par {})"] +kick_actions = [u"effectue une action suite à un /kick."] # config on m'a demandé de mourir/partir -quit_messages=[u"Ceci est un message de quit"] -leave_messages=[u"Ceci est un message de leave"] +quit_messages = [u"Ceci est un message de quit"] +leave_messages = [u"Ceci est un message de leave"] quit_fail_messages = [u"Ceci est un message adressé à quelqu'un qui m'a demandé de quit alors qu'il n'en a pas le droit."] leave_fail_messages = [u"Ceci est un message adressé à quelqu'un qui m'a demandé de leave alors qu'il n'en a pas le droit."] diff --git a/skeleton.py b/skeleton.py index e04be5d..8511c93 100755 --- a/skeleton.py +++ b/skeleton.py @@ -1,92 +1,90 @@ #!/usr/bin/python # -*- encoding: utf-8 -*- -# Codé par 20-100 +""" Codé par 20-100 -# Un bot IRC qui ne fait rien. Base pour en coder un autre. +Un bot IRC qui ne fait rien. Base pour en coder un vrai. +""" import irclib import ircbot -import threading import random import time -import socket, ssl, json -import pickle import re -import os from commands import getstatusoutput as ex # on récupère la config import config - def get_config_logfile(serveur): - serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"} - return config.logfile_template%(serveurs[serveur]) + """Renvoie le nom du fichier de log en fonction du serveur.""" + serveurs = {"acoeur.crans.org" : "acoeur", "irc.crans.org" : "crans"} + return config.logfile_template % (serveurs[serveur]) def get_filesize(): - return ex("ls -s %s"%(config.thisfile))[1].split()[0] + """Récupère la taille de ce fichier.""" + return ex("ls -s %s" % (config.thisfile))[1].split()[0] -def log(serveur,channel,auteur=None,message=None): - f=open(get_config_logfile(serveur),"a") - if auteur==message==None: +def log(serveur, channel, auteur=None, message=None): + f = open(get_config_logfile(serveur), "a") + if auteur == message == None: # alors c'est que c'est pas un channel mais juste une ligne de log - chain="%s %s"%(time.strftime("%F %T"),channel) + chain = "%s %s" % (time.strftime("%F %T"), channel) else: - chain="%s [%s:%s] %s"%(time.strftime("%F %T"),channel,auteur,message) + chain = "%s [%s:%s] %s" % (time.strftime("%F %T"), channel, auteur, message) f.write(chain+"\n") if config.debug_stdout: print chain f.close() -def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case_sensitive=False,debug=False): +def is_something(chain, matches, avant=u".*(?:^| )", apres=u"(?:$|\.| |,|;).*", case_sensitive=False, debug=False): if case_sensitive: - chain=unicode(chain,"utf8") + chain = unicode(chain, "utf8") else: - chain=unicode(chain,"utf8").lower() - allmatches="("+"|".join(matches)+")" - reg=(avant+allmatches+apres).lower() - o=re.match(reg,chain) + chain = unicode(chain, "utf8").lower() + allmatches = "("+"|".join(matches)+")" + reg = (avant+allmatches+apres).lower() + o = re.match(reg, chain) return o -def is_insult(chain,debug=True): - return is_something(chain,config.insultes,avant=".*(?:^| |')") +def is_insult(chain, debug=True): + return is_something(chain, config.insultes, avant=".*(?:^| |')") def is_not_insult(chain): - chain=unicode(chain,"utf8") - insult_regexp=u"("+u"|".join(config.insultes)+u")" - middle_regexp=u"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)" - reg=".*pas %s%s.*"%(middle_regexp,insult_regexp) - if re.match(reg,chain): + chain = unicode(chain, "utf8") + insult_regexp = u"("+u"|".join(config.insultes)+u")" + middle_regexp = u"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)" + reg = ".*pas %s%s.*" % (middle_regexp, insult_regexp) + if re.match(reg, chain): return True else: return False -def is_compliment(chain,debug=True): - return is_something(chain,config.compliment_triggers,avant=".*(?:^| |')") +def is_compliment(chain, debug=True): + return is_something(chain, config.compliment_triggers, avant=".*(?:^| |')") def is_tag(chain): - return is_something(chain,config.tag_triggers) + return is_something(chain, config.tag_triggers) def is_tesla(chain): - return is_something(chain,config.tesla_triggers,avant=u"^",apres=u"$",debug=True) + return is_something(chain, config.tesla_triggers, avant=u"^", apres=u"$", debug=True) def is_merci(chain): - return is_something(chain,config.merci_triggers) + return is_something(chain, config.merci_triggers) def is_tamere(chain): - return is_something(chain,config.tamere_triggers) -def is_bad_action_trigger(chain,pseudo): - return is_something(chain,config.bad_action_triggers,avant=u"^", - apres="(?: [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo)) -def is_good_action_trigger(chain,pseudo): - return is_something(chain,config.good_action_triggers,avant=u"^", - apres="(?: [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo)) + return is_something(chain, config.tamere_triggers) +def is_bad_action_trigger(chain, pseudo): + return is_something(chain, config.bad_action_triggers, avant=u"^", + apres="(?: [a-z]*ment)? %s($|\.| |,|;).*" % (pseudo)) +def is_good_action_trigger(chain, pseudo): + return is_something(chain, config.good_action_triggers, avant=u"^", + apres="(?: [a-z]*ment)? %s($|\.| |,|;).*" % (pseudo)) def is_bonjour(chain): - return is_something(chain,config.bonjour_triggers,avant=u"^") + return is_something(chain, config.bonjour_triggers, avant=u"^") def is_bonne_nuit(chain): - return is_something(chain,config.bonne_nuit_triggers,avant=u"^") + return is_something(chain, config.bonne_nuit_triggers, avant=u"^") def is_pan(chain): - return re.match(u"^(pan|bim|bang)( .*)?$",unicode(chain,"utf8").lower().strip()) + return re.match(u"^(pan|bim|bang)( .*)?$", unicode(chain, "utf8").lower().strip()) def is_time(conf): - _,_,_,h,m,s,_,_,_=time.localtime() - return (conf[0],0,0)<(h,m,s)<(conf[1],0,0) + _, _, _, h, m, s, _, _, _ = time.localtime() + return (conf[0], 0, 0)<(h, m, s)<(conf[1], 0, 0) def is_day(): return is_time(config.daytime) def is_night(): @@ -97,425 +95,425 @@ class UnicodeBotError(Exception): pass def bot_unicode(chain): try: - unicode(chain,"utf8") + unicode(chain, "utf8") except UnicodeDecodeError as exc: raise UnicodeBotError class Skeleton(ircbot.SingleServerIRCBot): - def __init__(self,serveur,debug=False): - temporary_pseudo=config.irc_pseudo+str(random.randrange(10000,100000)) + def __init__(self, serveur, debug=False): + temporary_pseudo = config.irc_pseudo+str(random.randrange(10000, 100000)) ircbot.SingleServerIRCBot.__init__(self, [(serveur, 6667)], - temporary_pseudo,"Ceci est l'ircname du bot", 10) - self.debug=debug - self.serveur=serveur - self.overops=config.overops - self.ops=self.overops+config.ops - self.chanlist=config.chanlist - self.stay_channels=config.stay_channels - self.quiet_channels=config.quiet_channels - self.last_perdu=0 + temporary_pseudo, "Ceci est l'ircname du bot", 10) + self.debug = debug + self.serveur = serveur + self.overops = config.overops + self.ops = self.overops+config.ops + self.chanlist = config.chanlist + self.stay_channels = config.stay_channels + self.quiet_channels = config.quiet_channels + self.last_perdu = 0 - def give_me_my_pseudo(self,serv): - serv.privmsg("NickServ","RECOVER %s %s"%(config.irc_pseudo,config.irc_password)) - serv.privmsg("NickServ","RELEASE %s %s"%(config.irc_pseudo,config.irc_password)) + def give_me_my_pseudo(self, serv): + serv.privmsg("NickServ", "RECOVER %s %s" % (config.irc_pseudo, config.irc_password)) + serv.privmsg("NickServ", "RELEASE %s %s" % (config.irc_pseudo, config.irc_password)) time.sleep(0.3) serv.nick(config.irc_pseudo) def on_welcome(self, serv, ev): - self.serv=serv # ça serv ira :) + self.serv = serv # ça serv ira :) self.give_me_my_pseudo(serv) - serv.privmsg("NickServ","identify %s"%(config.irc_password)) - log(self.serveur,"Connected") + serv.privmsg("NickServ", "identify %s" % (config.irc_password)) + log(self.serveur, "Connected") if self.debug: - self.chanlist=["#bot"] + self.chanlist = ["#bot"] for c in self.chanlist: - log(self.serveur,"JOIN %s"%(c)) + log(self.serveur, "JOIN %s" % (c)) serv.join(c) def pourmoi(self, serv, message): - """renvoie (False,lemessage) ou (True, le message amputé de "pseudo: ")""" - pseudo=self.nick - size=len(pseudo) - if message[:size]==pseudo and len(message)>size and message[size]==":": - return (True,message[size+1:].lstrip(" ")) + """renvoie (False, lemessage) ou (True, le message amputé de "pseudo: ")""" + pseudo = self.nick + size = len(pseudo) + if message[:size] == pseudo and len(message)>size and message[size] == ":": + return (True, message[size+1:].lstrip(" ")) else: - return (False,message) + return (False, message) def on_privmsg(self, serv, ev): - message=ev.arguments()[0] + message = ev.arguments()[0] auteur = irclib.nm_to_n(ev.source()) try: - test=bot_unicode(message) + bot_unicode(message) except UnicodeBotError: if config.utf8_trigger: serv.privmsg(auteur, random.choice(config.utf8_fail_answers).encode("utf8")) return - message=message.split() - cmd=message[0].lower() - notunderstood=False - if cmd=="help": - helpdico={"help":["""HELP - Affiche de l'aide sur la commande""",None,None], + message = message.split() + cmd = message[0].lower() + notunderstood = False + if cmd == "help": + helpdico = {"help":["""HELP + Affiche de l'aide sur la commande""", None, None], "join": [None, """JOIN - Me fait rejoindre le channel""",None], - "leave": [None,"""LEAVE - Me fait quitter le channel (sauf s'il est dans ma stay_list).""",None], - "quiet": [None,"""QUIET - Me rend silencieux sur le channel.""",None], - "noquiet": [None,"""NOQUIET - Me rend la parole sur le channel.""",None], - "lost": [None,"""LOST - Me fait perdre sur le channel.""",None], - "say": [None,None,"""SAY + Me fait rejoindre le channel""", None], + "leave": [None, """LEAVE + Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None], + "quiet": [None, """QUIET + Me rend silencieux sur le channel.""", None], + "noquiet": [None, """NOQUIET + Me rend la parole sur le channel.""", None], + "lost": [None, """LOST + Me fait perdre sur le channel.""", None], + "say": [None, None, """SAY Me fait parler sur le channel."""], - "do": [None,None,"""DO + "do": [None, None, """DO Me fait faitre une action (/me) sur le channel."""], - "stay": [None,None,"""STAY + "stay": [None, None, """STAY Ajoute le channel à ma stay_list."""], - "nostay": [None,None,"""NOSTAY + "nostay": [None, None, """NOSTAY Retire le channel de ma stay_list."""], - "ops": [None,None,"""OPS + "ops": [None, None, """OPS Affiche la liste des ops."""], - "overops": [None,None,"""OVEROPS + "overops": [None, None, """OVEROPS Affiche la liste des overops."""], - "kick": [None,None,"""KICK [] + "kick": [None, None, """KICK [] Kicke du channel (Il faut bien entendu que j'y sois op)."""], - "die": [None,None,"""DIE + "die": [None, None, """DIE Me déconnecte du serveur IRC."""] } - helpmsg_default="Liste des commandes disponibles :\nHELP" - helpmsg_ops=" JOIN LEAVE QUIET NOQUIET LOST RECONNECT" - helpmsg_overops=" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE" - op,overop=auteur in self.ops, auteur in self.overops - if len(message)==1: - helpmsg=helpmsg_default + helpmsg_default = "Liste des commandes disponibles :\nHELP" + helpmsg_ops = " JOIN LEAVE QUIET NOQUIET LOST RECONNECT" + helpmsg_overops = " SAY DO STAY NOSTAY OPS OVEROPS KICK DIE" + op, overop = auteur in self.ops, auteur in self.overops + if len(message) == 1: + helpmsg = helpmsg_default if op: - helpmsg+=helpmsg_ops + helpmsg += helpmsg_ops if overop: - helpmsg+=helpmsg_overops + helpmsg += helpmsg_overops else: - helpmsgs=helpdico.get(message[1].lower(),["Commande inconnue.",None,None]) - helpmsg=helpmsgs[0] + helpmsgs = helpdico.get(message[1].lower(), ["Commande inconnue.", None, None]) + helpmsg = helpmsgs[0] if op and helpmsgs[1]: if helpmsg: - helpmsg+="\n"+helpmsgs[1] + helpmsg += "\n"+helpmsgs[1] else: - helpmsg=helpmsgs[1] + helpmsg = helpmsgs[1] if overop and helpmsgs[2]: if helpmsg: - helpmsg+="\n"+helpmsgs[2] + helpmsg += "\n"+helpmsgs[2] else: - helpmsg=helpmsgs[2] + helpmsg = helpmsgs[2] for ligne in helpmsg.split("\n"): - serv.privmsg(auteur,ligne) - elif cmd=="join": + serv.privmsg(auteur, ligne) + elif cmd == "join": if auteur in self.ops: if len(message)>1: if message[1] in self.chanlist: - serv.privmsg(auteur,"Je suis déjà sur %s"%(message[1])) + serv.privmsg(auteur, "Je suis déjà sur %s" % (message[1])) else: serv.join(message[1]) self.chanlist.append(message[1]) - serv.privmsg(auteur,"Channels : "+" ".join(self.chanlist)) - log(self.serveur,"priv",auteur," ".join(message)) + serv.privmsg(auteur, "Channels : "+" ".join(self.chanlist)) + log(self.serveur, "priv", auteur, " ".join(message)) else: - serv.privmsg(auteur,"Channels : "+" ".join(self.chanlist)) + serv.privmsg(auteur, "Channels : "+" ".join(self.chanlist)) else: - notunderstood=True - elif cmd=="leave": + notunderstood = True + elif cmd == "leave": if auteur in self.ops and len(message)>1: if message[1] in self.chanlist: if not (message[1] in self.stay_channels) or auteur in self.overops: - self.quitter(message[1]," ".join(message[2:])) + self.quitter(message[1], " ".join(message[2:])) self.chanlist.remove(message[1]) - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") else: - serv.privmsg(auteur,"Non, je reste !") - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") + serv.privmsg(auteur, "Non, je reste !") + log(self.serveur, "priv", auteur, " ".join(message)+"[failed]") else: - serv.privmsg(auteur,"Je ne suis pas sur %s"%(message[1])) + serv.privmsg(auteur, "Je ne suis pas sur %s" % (message[1])) else: - notunderstood=True - elif cmd=="stay": + notunderstood = True + elif cmd == "stay": if auteur in self.overops: if len(message)>1: if message[1] in self.stay_channels: - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") - serv.privmsg(auteur,"Je stay déjà sur %s."%(message[1])) + log(self.serveur, "priv", auteur, " ".join(message)+"[failed]") + serv.privmsg(auteur, "Je stay déjà sur %s." % (message[1])) else: - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") self.stay_channels.append(message[1]) - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) + serv.privmsg(auteur, "Stay channels : "+" ".join(self.stay_channels)) else: - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) + serv.privmsg(auteur, "Stay channels : "+" ".join(self.stay_channels)) else: - notunderstood=True - elif cmd=="nostay": + notunderstood = True + elif cmd == "nostay": if auteur in self.overops: if len(message)>1: if message[1] in self.stay_channels: - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") self.stay_channels.remove(message[1]) - serv.privmsg(auteur,"Stay channels : "+" ".join(self.stay_channels)) + serv.privmsg(auteur, "Stay channels : "+" ".join(self.stay_channels)) else: - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") - serv.privmsg(auteur,"Je ne stay pas sur %s."%(message[1])) + log(self.serveur, "priv", auteur, " ".join(message)+"[failed]") + serv.privmsg(auteur, "Je ne stay pas sur %s." % (message[1])) else: - notunderstood=True - elif cmd=="die": + notunderstood = True + elif cmd == "die": if auteur in self.overops: - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") self.mourir() else: - notunderstood=True - elif cmd=="quiet": + notunderstood = True + elif cmd == "quiet": if auteur in self.ops: if len(message)>1: if message[1] in self.quiet_channels: - serv.privmsg(auteur,"Je me la ferme déjà sur %s"%(message[1])) - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") + serv.privmsg(auteur, "Je me la ferme déjà sur %s" % (message[1])) + log(self.serveur, "priv", auteur, " ".join(message)+"[failed]") else: self.quiet_channels.append(message[1]) - serv.privmsg(auteur,"Quiet channels : "+" ".join(self.quiet_channels)) - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + serv.privmsg(auteur, "Quiet channels : "+" ".join(self.quiet_channels)) + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") else: - serv.privmsg(auteur,"Quiet channels : "+" ".join(self.quiet_channels)) + serv.privmsg(auteur, "Quiet channels : "+" ".join(self.quiet_channels)) else: - notunderstood=True - elif cmd=="noquiet": + notunderstood = True + elif cmd == "noquiet": if auteur in self.ops: if len(message)>1: if message[1] in self.quiet_channels: self.quiet_channels.remove(message[1]) - serv.privmsg(auteur,"Quiet channels : "+" ".join(self.quiet_channels)) - log(self.serveur,"priv",auteur," ".join(message)+"[successful]") + serv.privmsg(auteur, "Quiet channels : "+" ".join(self.quiet_channels)) + log(self.serveur, "priv", auteur, " ".join(message)+"[successful]") else: - serv.privmsg(auteur,"Je ne me la ferme pas sur %s."%(message[1])) - log(self.serveur,"priv",auteur," ".join(message)+"[failed]") + serv.privmsg(auteur, "Je ne me la ferme pas sur %s." % (message[1])) + log(self.serveur, "priv", auteur, " ".join(message)+"[failed]") else: - notunderstood=True - elif cmd=="say": + notunderstood = True + elif cmd == "say": if auteur in self.overops and len(message)>2: - serv.privmsg(message[1]," ".join(message[2:])) - log(self.serveur,"priv",auteur," ".join(message)) - elif len(message)<=2: - serv.privmsg(auteur,"Syntaxe : SAY ") + serv.privmsg(message[1], " ".join(message[2:])) + log(self.serveur, "priv", auteur, " ".join(message)) + elif len(message) <= 2: + serv.privmsg(auteur, "Syntaxe : SAY ") else: - notunderstood=True - elif cmd=="do": + notunderstood = True + elif cmd == "do": if auteur in self.overops and len(message)>2: - serv.action(message[1]," ".join(message[2:])) - log(self.serveur,"priv",auteur," ".join(message)) - elif len(message)<=2: - serv.privmsg(auteur,"Syntaxe : DO ") + serv.action(message[1], " ".join(message[2:])) + log(self.serveur, "priv", auteur, " ".join(message)) + elif len(message) <= 2: + serv.privmsg(auteur, "Syntaxe : DO ") else: - notunderstood=True - elif cmd=="kick": + notunderstood = True + elif cmd == "kick": if auteur in self.overops and len(message)>2: - serv.kick(message[1],message[2]," ".join(message[3:])) - log(self.serveur,"priv",auteur," ".join(message)) - elif len(message)<=2: - serv.privmsg(auteur,"Syntaxe : KICK []") + serv.kick(message[1], message[2], " ".join(message[3:])) + log(self.serveur, "priv", auteur, " ".join(message)) + elif len(message) <= 2: + serv.privmsg(auteur, "Syntaxe : KICK []") else: - notunderstood=True - elif cmd=="ops": + notunderstood = True + elif cmd == "ops": if auteur in self.overops: - serv.privmsg(auteur," ".join(self.ops)) + serv.privmsg(auteur, " ".join(self.ops)) else: - notunderstood=True - elif cmd=="overops": + notunderstood = True + elif cmd == "overops": if auteur in self.overops: - serv.privmsg(auteur," ".join(self.overops)) + serv.privmsg(auteur, " ".join(self.overops)) else: - notunderstood=True + notunderstood = True else: - notunderstood=True + notunderstood = True if notunderstood: - serv.privmsg(auteur,"Je n'ai pas compris. Essayez HELP…") + serv.privmsg(auteur, "Je n'ai pas compris. Essayez HELP…") def on_pubmsg(self, serv, ev): auteur = irclib.nm_to_n(ev.source()) canal = ev.target() message = ev.arguments()[0] try: - test=bot_unicode(message) + bot_unicode(message) except UnicodeBotError: if config.utf8_trigger and not canal in self.quiet_channels: - serv.privmsg(canal, (u"%s: %s"%(auteur,random.choice(config.utf8_fail_answers))).encode("utf8")) + serv.privmsg(canal, (u"%s: %s" % (auteur, random.choice(config.utf8_fail_answers))).encode("utf8")) return - pour_moi,message=self.pourmoi(serv,message) - if pour_moi and message.split()!=[]: - cmd=message.split()[0].lower() + pour_moi, message = self.pourmoi(serv, message) + if pour_moi and message.split() != []: + cmd = message.split()[0].lower() try: - args=" ".join(message.split()[1:]) + args = " ".join(message.split()[1:]) except: - args="" - if cmd in ["meurs","die","crève"]: + args = "" + if cmd in ["meurs", "die", "crève"]: if auteur in self.overops: - log(self.serveur,canal,auteur,message+"[successful]") + log(self.serveur, canal, auteur, message+"[successful]") self.mourir() else: - serv.privmsg(canal,("%s: %s"%(auteur,random.choice(config.quit_fail_messages))).encode("utf8")) - log(self.serveur,canal,auteur,message+"[failed]") + serv.privmsg(canal, ("%s: %s" % (auteur, random.choice(config.quit_fail_messages))).encode("utf8")) + log(self.serveur, canal, auteur, message+"[failed]") - elif cmd in ["part","leave","dégage","va-t-en","tut'tiresailleurs,c'estmesgalets"]: + elif cmd in ["part", "leave", "dégage", "va-t-en", "tut'tiresailleurs, c'estmesgalets"]: if auteur in self.ops and (not (canal in self.stay_channels) or auteur in self.overops): self.quitter(canal) - log(self.serveur,canal,auteur,message+"[successful]") + log(self.serveur, canal, auteur, message+"[successful]") if canal in self.chanlist: self.chanlist.remove(canal) else: - serv.privmsg(canal,("%s: %s"%(auteur,random.choice(config.leave_fail_messages))).encode("utf8")) - log(self.serveur,canal,auteur,message+"[failed]") + serv.privmsg(canal, ("%s: %s" % (auteur, random.choice(config.leave_fail_messages))).encode("utf8")) + log(self.serveur, canal, auteur, message+"[failed]") - elif cmd in ["deviens","pseudo"]: + elif cmd in ["deviens", "pseudo"]: if auteur in self.ops: - become=args + become = args serv.nick(become) - log(self.serveur,canal,auteur,message+"[successful]") + log(self.serveur, canal, auteur, message+"[successful]") - if cmd in ["meur", "meurt","meurre","meurres"] and not canal in self.quiet_channels: - serv.privmsg(canal,'%s: Mourir, impératif, 2ème personne du singulier : "meurs" (de rien)'%(auteur)) + if cmd in ["meur", "meurt", "meurre", "meurres"] and not canal in self.quiet_channels: + serv.privmsg(canal, '%s: Mourir, impératif, 2ème personne du singulier : "meurs" (de rien)' % (auteur)) elif cmd in ["ping"] and not canal in self.quiet_channels: - serv.privmsg(canal,"%s: pong"%(auteur)) + serv.privmsg(canal, "%s: pong" % (auteur)) if is_insult(message) and not canal in self.quiet_channels: if is_not_insult(message): - answer=random.choice(config.compliment_answers) + answer = random.choice(config.compliment_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) else: - answer=random.choice(config.insultes_answers) + answer = random.choice(config.insultes_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) elif is_compliment(message) and not canal in self.quiet_channels: - answer=random.choice(config.compliment_answers) + answer = random.choice(config.compliment_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) if is_tesla(message) and not canal in self.quiet_channels: - l1,l2=config.tesla_answers,config.tesla_actions - n1,n2=len(l1),len(l2) - i=random.randrange(n1+n2) - if i>=n1: - serv.action(canal,l2[i-n1].encode("utf8")) + l1, l2 = config.tesla_answers, config.tesla_actions + n1, n2 = len(l1), len(l2) + i = random.randrange(n1+n2) + if i >= n1: + serv.action(canal, l2[i-n1].encode("utf8")) else: - serv.privmsg(canal,"%s: %s"%(auteur,l1[i].encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, l1[i].encode("utf8"))) if is_tamere(message) and not canal in self.quiet_channels: - answer=random.choice(config.tamere_answers) + answer = random.choice(config.tamere_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) if is_tag(message) and not canal in self.quiet_channels: if auteur in self.ops: - action=random.choice(config.tag_actions) - serv.action(canal,action.encode("utf8")) + action = random.choice(config.tag_actions) + serv.action(canal, action.encode("utf8")) self.quiet_channels.append(canal) else: - answer=random.choice(config.tag_answers) + answer = random.choice(config.tag_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) if is_merci(message): - answer=random.choice(config.merci_answers) + answer = random.choice(config.merci_answers) for ligne in answer.split("\n"): - serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8"))) + serv.privmsg(canal, "%s: %s" % (auteur, ligne.encode("utf8"))) if is_bonjour(message) and not canal in self.quiet_channels: if is_night(): - answer=random.choice(config.night_answers) + answer = random.choice(config.night_answers) elif is_day(): - answer=random.choice(config.bonjour_answers) + answer = random.choice(config.bonjour_answers) else: - answer=random.choice(config.bonsoir_answers) - serv.privmsg(canal,answer.format(auteur).encode("utf8")) + answer = random.choice(config.bonsoir_answers) + serv.privmsg(canal, answer.format(auteur).encode("utf8")) if is_bonne_nuit(message) and not canal in self.quiet_channels: - answer=random.choice(config.bonne_nuit_answers) - serv.privmsg(canal,answer.format(auteur).encode("utf8")) + answer = random.choice(config.bonne_nuit_answers) + serv.privmsg(canal, answer.format(auteur).encode("utf8")) else: if not canal in self.quiet_channels: - mypseudo=self.nick + mypseudo = self.nick if re.match((u"^("+u"|".join(config.bonjour_triggers) +ur")( {}| all| tout le monde| (à )?tous)(\.| ?!)?$" ).format(mypseudo).lower(), message.decode("utf8").strip().lower()): answer = random.choice(config.bonjour_answers) - serv.privmsg(canal,answer.format(auteur).encode("utf8")) + serv.privmsg(canal, answer.format(auteur).encode("utf8")) def on_action(self, serv, ev): action = ev.arguments()[0] auteur = irclib.nm_to_n(ev.source()) channel = ev.target() try: - test=bot_unicode(action) + bot_unicode(action) except UnicodeBotError: if config.utf8_trigger and not channel in self.quiet_channels: - serv.privmsg(channel, (u"%s: %s"%(auteur,random.choice(config.utf8_fail_answers))).encode("utf8")) + serv.privmsg(channel, (u"%s: %s" % (auteur, random.choice(config.utf8_fail_answers))).encode("utf8")) return - mypseudo=self.nick + mypseudo = self.nick - if is_bad_action_trigger(action,mypseudo) and not channel in self.quiet_channels: - l1,l2=config.bad_action_answers,config.bad_action_actions - n1,n2=len(l1),len(l2) - i=random.randrange(n1+n2) - if i>=n1: - serv.action(channel,l2[i-n1].format(auteur).encode("utf8")) + if is_bad_action_trigger(action, mypseudo) and not channel in self.quiet_channels: + l1, l2 = config.bad_action_answers, config.bad_action_actions + n1, n2 = len(l1), len(l2) + i = random.randrange(n1+n2) + if i >= n1: + serv.action(channel, l2[i-n1].format(auteur).encode("utf8")) else: - serv.privmsg(channel,l1[i].format(auteur).format(auteur).encode("utf8")) - if is_good_action_trigger(action,mypseudo) and not channel in self.quiet_channels: - l1,l2=config.good_action_answers,config.good_action_actions - n1,n2=len(l1),len(l2) - i=random.randrange(n1+n2) - if i>=n1: - serv.action(channel,l2[i-n1].format(auteur).format(auteur).encode("utf8")) + serv.privmsg(channel, l1[i].format(auteur).format(auteur).encode("utf8")) + if is_good_action_trigger(action, mypseudo) and not channel in self.quiet_channels: + l1, l2 = config.good_action_answers, config.good_action_actions + n1, n2 = len(l1), len(l2) + i = random.randrange(n1+n2) + if i >= n1: + serv.action(channel, l2[i-n1].format(auteur).format(auteur).encode("utf8")) else: - serv.privmsg(channel,l1[i].format(auteur).format(auteur).encode("utf8")) + serv.privmsg(channel, l1[i].format(auteur).format(auteur).encode("utf8")) - def on_kick(self,serv,ev): + def on_kick(self, serv, ev): auteur = irclib.nm_to_n(ev.source()) channel = ev.target() victime = ev.arguments()[0] raison = ev.arguments()[1] - if victime==self.nick: - log(self.serveur,"%s kické de %s par %s (raison : %s)" %(victime,channel,auteur,raison)) + if victime == self.nick: + log(self.serveur, "%s kické de %s par %s (raison : %s)" % (victime, channel, auteur, raison)) time.sleep(2) serv.join(channel) - l1,l2=config.kick_answers,config.kick_actions - n1,n2=len(l1),len(l2) - i=random.randrange(n1+n2) - if i>=n1: - serv.action(channel,l2[i-n1].format(auteur).encode("utf8")) + l1, l2 = config.kick_answers, config.kick_actions + n1, n2 = len(l1), len(l2) + i = random.randrange(n1+n2) + if i >= n1: + serv.action(channel, l2[i-n1].format(auteur).encode("utf8")) else: - serv.privmsg(channel,l1[i].format(auteur).encode("utf8")) + serv.privmsg(channel, l1[i].format(auteur).encode("utf8")) - def quitter(self,chan,leave_message=None): - if leave_message==None: - leave_message=random.choice(config.leave_messages) - self.serv.part(chan,message=leave_message.encode("utf8")) + def quitter(self, chan, leave_message=None): + if leave_message == None: + leave_message = random.choice(config.leave_messages) + self.serv.part(chan, message=leave_message.encode("utf8")) def mourir(self): - quit_message=random.choice(config.quit_messages) + quit_message = random.choice(config.quit_messages) self.die(msg=quit_message.encode("utf8")) def _getnick(self): return self.serv.get_nickname() - nick=property(_getnick) + nick = property(_getnick) -if __name__=="__main__": +if __name__ == "__main__": import sys - if len(sys.argv)==1: + if len(sys.argv) == 1: print "Usage : skeleton.py [--debug]" exit(1) - serveur=sys.argv[1] + serveur = sys.argv[1] if "debug" in sys.argv or "--debug" in sys.argv: - debug=True + debug = True else: - debug=False + debug = False if "--quiet" in sys.argv: - config.debug_stdout=False - serveurs={"a♡":"acoeur.crans.org","acoeur":"acoeur.crans.org","acoeur.crans.org":"acoeur.crans.org", - "irc":"irc.crans.org","crans":"irc.crans.org","irc.crans.org":"irc.crans.org"} + config.debug_stdout = False + serveurs = {"a♡":"acoeur.crans.org", "acoeur":"acoeur.crans.org", "acoeur.crans.org":"acoeur.crans.org", + "irc":"irc.crans.org", "crans":"irc.crans.org", "irc.crans.org":"irc.crans.org"} try: - serveur=serveurs[serveur] + serveur = serveurs[serveur] except KeyError: - print "Server Unknown : %s"%(serveur) + print "Server Unknown : %s" % (serveur) exit(404) - bot=Skeleton(serveur,debug) + bot = Skeleton(serveur, debug) bot.start()