#!/usr/bin/python
# -*- coding:utf8 -*-
-
# Codé par 20-100 (commencé le 21/06/12)
# Un bot IRC pour kicker à tour de bras de #déprime
config_report_bugs_to=["[20-100]"]
# config UTF8-fail
-config_utf8_fail = [u"Si je n'avais pas été créé avec la plus grande attention, votre encodage aurait eu raison de moi…"]
-config_utf8_trigger = False
+config_utf8_fail = [u"Ton encodage me déprime…"]
+config_utf8_trigger = True
# config "tu m'traites ?"
config_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",
config_tesla_triggers=[u"t('|u )es là \?",u"\?",u"plop \?",u"plouf \?"]
config_tesla_answers=[
u"Oui, je suis là.",
-u"J'écoute.",
-u"En quoi puis-je me rendre utile ?",
-u"On a besoin de moi ?"
]
-config_tesla_actions=[u"est là",u"attend des instructions",u"est toujours disponible"]
+config_tesla_actions=[u"déprime",u"est prêt à kicker les gens heureux"]
# config en cas de non-insulte
config_compliment_triggers=[u"gentil",u"cool",u"sympa",u"efficace"]
config_kick_actions=[u"sera désormais exemplaire",u"prépare une lettre d'excuses à {}",u"essaiera de ne plus s'attirer les foudres de {}",u"croyait avoir tout bien fait… cruelle déception."]
# config on m'a demandé de mourir/partir
-config_quit_messages=[u"Bye."]
+config_quit_messages=[u"J'ai enfin trouvé une corde et un tabouret"]
config_leave_messages=config_quit_messages
config_quit_fail_messages=[u"Tu rêves là."]
config_leave_fail_messages=config_quit_fail_messages
+
+# config de kick
+config_kick_channels=config_chanlist
+
+config_smileys = [ur':(-|o)?\)', u'\^(_|\.)?\^', u':-?(p|P)', u'=(\)|D|p|P)', ur'\\o/', ur':-?D', ur'x(\)|D)', u'krkr', ur':-?(\]|>)', ur'(<|d|q|\(|\[)(:|=)', u'mdr']
+config_anglicismes = [u"wtf", u"ftfy", u"it works?", u"fyi", u"kill[^ ]*", u"kick[^ ]*", u"chan(nel)?", u"join",
+u"btw", u"lmgtfy", u"rtfm", u"asap", u"afaik", u"shit", u"damn", u"fuck", u"bitch", u"updat(e|ed|ing)", u"lol", u"buffer[^ ]*", u"rofl"]
+
def log(serveur,channel,auteur=None,message=None):
f=open(get_config_logfile(serveur),"a")
if auteur==message==None:
print chain
f.close()
+reg_is_smiley = re.compile(u".*("+u"|".join(config_smileys)+u")")
+def is_smiley(chain):
+ chain=unicode(chain,"utf8")
+ o=re.match(reg_is_smiley,chain)
+ return o
+
+reg_is_anglicisme = re.compile(u".*(?:^| )(" + u"|".join(config_anglicismes) + u")(?:$|\.| |,|;)")
+def is_anglicisme(chain):
+ chain = unicode(chain, "utf8").lower()
+ o = re.match(reg_is_anglicisme, chain)
+ return o
+
+# Cette liste contient la liste des raisons pour lesquelles on peut se faire kicker
+# chaque élément contient :
+# - la fonction de détection du kick (qui matchera une regexp et renverra l'objet de match)
+# - la raison donnée au moment du kick ({0} étant remplacé par ce qui a matché)
+config_kicking_list = [
+[is_smiley, u'"{0}" ? Ici on déprime.'],
+[is_anglicisme, u'"{0}" ? Get out, you and your fucking anglicism !']
+]
def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case_sensitive=False,debug=False):
if case_sensitive:
self.ops=self.overops+config_ops
self.report_bugs_to=config_report_bugs_to
self.chanlist=config_chanlist
+ self.kick_channels=config_kick_channels
self.stay_channels=config_stay_channels
self.quiet_channels=config_quiet_channels
self.last_perdu=0
serv.privmsg("NickServ","RELEASE %s %s"%(config_irc_pseudo,config_irc_password))
time.sleep(0.3)
serv.nick(config_irc_pseudo)
-
+
+ def give_me_my_op_status(self,serv,chan):
+ serv.privmsg("ChanServ","OP %s"%(chan))
+
def on_welcome(self, serv, ev):
self.serv=serv # ça serv ira
self.give_me_my_pseudo(serv)
log(self.serveur,"Connected")
if self.debug:
self.chanlist=["#bot"]
+ self.kick_channels=["#bot"]
for c in self.chanlist:
log(self.serveur,"JOIN %s"%(c))
serv.join(c)
+ self.give_me_my_op_status(serv,c)
+
def lost(self,serv,channel,forced=False):
if self.last_perdu+config_time_between_perdu<time.time() or forced:
serv.privmsg(canal, "%s: %s"%(auteur,config_utf8_fail))
return
pour_moi,message=self.pourmoi(serv,message)
+ for (detect, reason) in config_kicking_list:
+ matching = detect(message)
+ if matching:
+ if canal in self.kick_channels:
+ serv.kick(canal,auteur,(reason.format(matching.groups()[0])).encode("utf8"))
+ return
if pour_moi and message.split()!=[]:
cmd=message.split()[0].lower()
try:
args=" ".join(message.split()[1:])
except:
args=""
- if cmd in ["meurs","die","crève"]:
+ if cmd in ["meurs","die","crève","pends-toi"]:
if auteur in self.overops:
log(self.serveur,canal,auteur,message+"[successful]")
self.mourir()
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"))
- else:
- serv.privmsg(channel,l1[i].format(auteur).encode("utf8"))
+ username = nm_to_u(ev.source()).lower()
+ if channel == "#déprime" and "peb" in username or "becue" in username:
+ time.sleep(5)
+ serv.kick(auteur, "Va abuser de tes droits ailleurs !")
+ def kicker(self, chan, pseudo, raison=None):
+ if raison==None:
+ raison = config_kick_default_reason
+ self.serv.kick(chan,pseudo,raison)
+
def quitter(self,chan,leave_message=None):
if leave_message==None:
leave_message=random.choice(config_leave_messages)