]> gitweb.pimeys.fr Git - bots/themis.git/blobdiff - themis.py
Anglicismes 1.1
[bots/themis.git] / themis.py
index 4a5f7601140a788c41d4f168ebe6e9b8ad1fd037..5c94b4eb2ec4cc40273879505fe495727309de08 100755 (executable)
--- a/themis.py
+++ b/themis.py
@@ -1,6 +1,5 @@
 #!/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
@@ -34,8 +33,8 @@ config_ops=[]
 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",
@@ -98,11 +97,8 @@ u"Je ne ressens pas de besoin irrésistible de me taire, navré."]
 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"]
@@ -162,11 +158,19 @@ config_kick_answers=[u"Suis-je de trop ici ?",u"{}: je m'excuse pour ce bruit in
 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|\(|\[)(:|=)']
+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)"]
+
 def log(serveur,channel,auteur=None,message=None):
     f=open(get_config_logfile(serveur),"a")
     if auteur==message==None:
@@ -179,6 +183,26 @@ def log(serveur,channel,auteur=None,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:
@@ -254,6 +278,7 @@ class Themis(ircbot.SingleServerIRCBot):
         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
@@ -264,7 +289,10 @@ class Themis(ircbot.SingleServerIRCBot):
         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)
@@ -272,9 +300,12 @@ class Themis(ircbot.SingleServerIRCBot):
         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:
@@ -496,13 +527,19 @@ class Themis(ircbot.SingleServerIRCBot):
                 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()
@@ -619,14 +656,12 @@ class Themis(ircbot.SingleServerIRCBot):
             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"))
     
+    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)