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