]> gitweb.pimeys.fr Git - bots/basile.git/blob - isit.py
vouvoiement
[bots/basile.git] / isit.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """ Des fonctions utilitaire pour savoir si on est dans tel ou tel cas. """
5
6 import re
7 import time
8
9 import config
10
11 def regex_join(liste, avant=u".*(?:^| )", apres=u"(?:$|\.| |,|;).*"):
12 """Fabrique une regexp à partir d'une liste d'éléments à matcher."""
13 return avant + u"(" + u"|".join(liste) + u")" + apres
14
15 def is_something(chain, regexp=None, matches=[], avant=u".*(?:^| )", apres=u"(?:$|\.| |,|;).*",
16 case_sensitive=False):
17 """Vérifie si chain contient un des éléments de ``matches``.
18 Si ``regexp`` est fournie, c'est simplement elle qui est testée"""
19 if not case_sensitive:
20 chain = chain.lower()
21 apres = apres.lower()
22 avant = avant.lower()
23 if regexp == None:
24 regexp = regex_join(matches, avant, apres)
25 regexp = re.compile(regexp)
26 o = regexp.match(chain)
27 return o
28
29 def regexp_compile():
30 """Compilation des regexp à partir de la conf.
31 Place les résultats dans le namespace de ``config``"""
32 config.insult_regexp = regex_join(config.insultes, avant=u".*(?:^| |')")
33 config.insult_regexp_compiled = re.compile(config.insult_regexp)
34
35 config.not_insult_regexp = u".*pas %s%s" % (config.amplifier_regexp, config.insult_regexp)
36 config.not_insult_regexp_compiled = re.compile(config.not_insult_regexp)
37
38 config.compliment_regexp = regex_join(config.compliment_triggers, avant=u".*(?:^| |')")
39 config.compliment_regexp_compiled = re.compile(config.compliment_regexp)
40
41 config.perdu_regexp = regex_join(config.perdu)
42 config.perdu_regexp_compiled = re.compile(config.perdu_regexp)
43
44 config.tag_regexp = regex_join(config.tag_triggers)
45 config.tag_regexp_compiled = re.compile(config.tag_regexp)
46
47 config.gros_regexp = regex_join(config.gros)
48 config.gros_regexp_compiled = re.compile(config.gros_regexp)
49
50 config.tesla_regexp = regex_join(config.tesla_triggers, avant=u"^", apres="$")
51 config.tesla_regexp_compiled = re.compile(config.tesla_regexp)
52
53 config.merci_regexp = regex_join(config.merci_triggers)
54 config.merci_regexp_compiled = re.compile(config.merci_regexp)
55
56 config.tamere_regexp = regex_join(config.tamere_triggers)
57 config.tamere_regexp_compiled = re.compile(config.tamere_regexp)
58
59 config.bonjour_regexp = regex_join(config.bonjour_triggers, avant=u"^")
60 config.bonjour_regexp_compiled = re.compile(config.bonjour_regexp)
61
62 config.bonne_nuit_regexp = regex_join(config.bonne_nuit_triggers, avant=u"^")
63 config.bonne_nuit_regexp_compiled = re.compile(config.bonne_nuit_regexp)
64
65 config.pan_regexp = regex_join(config.pan_triggers, avant=".*", apres=".*")
66 config.pan_regexp_compiled = re.compile(config.pan_regexp)
67
68
69 regexp_compile()
70 def is_insult(chain, debug=True):
71 """Vérifie si ``chain`` contient une insulte."""
72 return is_something(chain, config.insult_regexp_compiled)
73 def is_not_insult(chain):
74 """Vérifie si ``chain`` contient une insulte à la forme négative."""
75 return is_something(chain, config.not_insult_regexp_compiled)
76 def is_compliment(chain, debug=True):
77 """Vérifie si ``chain`` contient un compliment."""
78 return is_something(chain, config.compliment_regexp_compiled)
79 def is_perdu(chain):
80 """Vérifie si ``chain`` contient une raison de perdre."""
81 return is_something(chain, config.perdu_regexp_compiled)
82 def is_tag(chain):
83 """Vérifie si ``chain`` demande de fermer sa gueule."""
84 return is_something(chain, config.tag_regexp_compiled)
85 def is_gros(chain):
86 """Vérifie si ``chain`` traite de gros."""
87 return is_something(chain, config.gros_regexp_compiled)
88 def is_tesla(chain):
89 """Vérifie si ``chain`` est un ping."""
90 return is_something(chain, config.tesla_regexp_compiled)
91 def is_merci(chain):
92 """Vérifie si ``chain`` contient un remerciement."""
93 return is_something(chain, config.merci_regexp_compiled)
94 def is_tamere(chain):
95 """Vérifie si ``chain`` traite ma mère."""
96 return is_something(chain, config.tamere_regexp_compiled)
97 def is_bad_action_trigger(chain,pseudo):
98 """Vérifie si ``chain`` est une action méchante.
99 On a besoin d'une regexp dynamique à cause du pseudo qui peut changer."""
100 return is_something(chain, matches=config.bad_action_triggers, avant=u"^",
101 apres="(?: [a-z]*ment)? %s($|\.| |,|;).*" % (pseudo))
102 def is_good_action_trigger(chain,pseudo):
103 """Vérifie si ``chain`` est une action gentille.
104 On a besoin d'une regexp dynamique à cause du pseudo qui peut changer."""
105 return is_something(chain, matches=config.good_action_triggers, avant=u"^",
106 apres="(?: [a-z]*ment)? %s($|\.| |,|;).*" % (pseudo))
107 def is_bonjour(chain):
108 """Vérifie si ``chain`` contient un bonjour."""
109 return is_something(chain, config.bonjour_regexp_compiled)
110 def is_bonne_nuit(chain):
111 """Vérifie si ``chain`` contient un bonne nuit."""
112 return is_something(chain, config.bonne_nuit_regexp_compiled)
113 def is_pan(chain):
114 """Vérifie si ``chain`` contient un pan."""
115 return is_something(chain, config.pan_regexp_compiled)
116
117 def is_time(conf):
118 """Vérifie si l'heure actuelle est entre les deux heures ``conf[0]`` et ``conf[1]``"""
119 _, _, _, h, m, s, _, _, _ = time.localtime()
120 return (conf[0], 0, 0) < (h, m, s) < (conf[1], 0, 0)
121 def is_day():
122 """Vérifie si on est le jour."""
123 return is_time(config.daytime)
124 def is_night():
125 """Vérifie si on est la nuit."""
126 return is_time(config.nighttime)