4 """ Des fonctions utilitaire pour savoir si on est dans tel ou tel cas. """
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
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
:
24 regexp
= regex_join(matches
, avant
, apres
)
25 regexp
= re
.compile(regexp
)
26 o
= regexp
.match(chain
)
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
)
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
)
38 config
.compliment_regexp
= regex_join(config
.compliment_triggers
, avant
=u
".*(?:^| |')")
39 config
.compliment_regexp_compiled
= re
.compile(config
.compliment_regexp
)
41 config
.perdu_regexp
= regex_join(config
.perdu
)
42 config
.perdu_regexp_compiled
= re
.compile(config
.perdu_regexp
)
44 config
.tag_regexp
= regex_join(config
.tag_triggers
)
45 config
.tag_regexp_compiled
= re
.compile(config
.tag_regexp
)
47 config
.gros_regexp
= regex_join(config
.gros
)
48 config
.gros_regexp_compiled
= re
.compile(config
.gros_regexp
)
50 config
.tesla_regexp
= regex_join(config
.tesla_triggers
, avant
=u
"^", apres
="$")
51 config
.tesla_regexp_compiled
= re
.compile(config
.tesla_regexp
)
53 config
.merci_regexp
= regex_join(config
.merci_triggers
)
54 config
.merci_regexp_compiled
= re
.compile(config
.merci_regexp
)
56 config
.tamere_regexp
= regex_join(config
.tamere_triggers
)
57 config
.tamere_regexp_compiled
= re
.compile(config
.tamere_regexp
)
59 config
.bonjour_regexp
= regex_join(config
.bonjour_triggers
, avant
=u
"^")
60 config
.bonjour_regexp_compiled
= re
.compile(config
.bonjour_regexp
)
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
)
65 config
.pan_regexp
= regex_join(config
.pan_triggers
, avant
=".*", apres
=".*")
66 config
.pan_regexp_compiled
= re
.compile(config
.pan_regexp
)
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
)
80 """Vérifie si ``chain`` contient une raison de perdre."""
81 return is_something(chain
, config
.perdu_regexp_compiled
)
83 """Vérifie si ``chain`` demande de fermer sa gueule."""
84 return is_something(chain
, config
.tag_regexp_compiled
)
86 """Vérifie si ``chain`` traite de gros."""
87 return is_something(chain
, config
.gros_regexp_compiled
)
89 """Vérifie si ``chain`` est un ping."""
90 return is_something(chain
, config
.tesla_regexp_compiled
)
92 """Vérifie si ``chain`` contient un remerciement."""
93 return is_something(chain
, config
.merci_regexp_compiled
)
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
)
114 """Vérifie si ``chain`` contient un pan."""
115 return is_something(chain
, config
.pan_regexp_compiled
)
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)
122 """Vérifie si on est le jour."""
123 return is_time(config
.daytime
)
125 """Vérifie si on est la nuit."""
126 return is_time(config
.nighttime
)