]> gitweb.pimeys.fr Git - bots/basile.git/blob - config.py
on place la buffer_fail_regexp dans la config
[bots/basile.git] / config.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """ Configuration de Basile """
5
6 #: Faut-il débuguer sur la sortie standard par défaut ?
7 debug_stdout = True
8
9 ## La config irc-related
10 #: Mot de passe NickServ. TODO : le mettre dans un secrets.py
11 irc_password = "NK2015BasileB0t"
12 #: Pseudo IRC
13 irc_pseudo = "Basile"
14 #: Liste des channels à rejoindre
15 chanlist = ["#bot", "#flood"]
16 #: Liste des channels à ne pas quitter
17 stay_channels = ["#bot", "#flood"]
18 #: Liste des channels où se taire
19 quiet_channels = []
20
21 ## La config note-related
22 #: Pseudo note
23 note_pseudo = "Basile"
24 #: Mot de passe note TODO : secrets
25 note_password = "NK2015BasileB0tr4nd0omp4assword]6_+{#]78{"
26 #: Serveur NK2015
27 nk_server = "bde2.crans.org"
28 #: Port NK2015
29 nk_port = 4242
30
31 #: Là où sont stockées les correspondances pseudo IRC → note
32 identities_file = "identities.json"
33
34 #: Le template des noms de fichier de log
35 logfile_template = "basile.%s.log"
36
37 #: Les OVEROPs, tous les droits sur le bot
38 overops=["[20-100]","[20-100]_", "PEB"]
39 #: Les OPs, moins de droits que les OVEROPs
40 ops=["Nit"]
41 #: À qui s'adresser (par IRC) quand le bot rencontre une erreur
42 report_bugs_to=["[20-100]"]
43
44 #: config "ce bot a été codé par 20-100, tu te rappelles ?"
45 manzana = ["[20-100]", "Petite-Peste"]
46 #: config "mais PEB aussi est passé par là"
47 manzana_bis = ["PEB"]
48
49 #: config UTF8-fail
50 utf8_fail_answers = [u"Si je n'avais pas été créé avec la plus grande attention, votre encodage aurait eu raison de moi…"]
51 #: Doit-on râler en cas de fial d'UTF-8
52 utf8_trigger = True
53 #: config "tu m'traites ?"
54 insultes = [u"conna(rd|sse)", u"pute", u"con(|ne)", u"enf(oiré|lure)",
55 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",
56 u"pétasse", u"enculé", u"chagasse", u"cagole", u"abruti", u"ahuri", u"analphabète", u"andouille",
57 u"atardé", u"avorton", u"bachibouzouk", u"(balais|brosse) (de|à) chiotte(|s)",
58 u"batard", u"blaireau", u"bouffon", u"branque", u"bouseux", u"branleur", u"catin", u"chacal",
59 u"charogne", u"chiant(|e)", u"chieur", u"cochon", u"coprophage", u"couillon", u"crapule", u"crevard",
60 u"cruche", u"cuistre", u"ducon", u"décérébré",
61 u"emmerdeur", u"feignasse", u"fainéant", u"fourbe", u"freluquet", u"frigide",
62 u"garce", u"glandu", u"gogol", u"goujat", u"gourdasse", u"gredin", u"gringalet", u"grognasse",
63 u"naze", u"truie", u"iconoclaste",
64 u"peigne(-|)cul", u"ignare", u"illétré", u"lèche(|-)cul", u"malotru", u"motherfucker", u"nabot", u"nigaud",
65 u"nul", u"escroc", u"pouffiasse", u"pourriture", u"raclure", u"relou", u"sagouin", u"putain",
66 u"péripatéticienne", u"bitch", u"whore"]
67 #: Réponses aux insultes
68 insultes_answers = [
69 u"Oh non ! Quelle insulte ! Je crois que je ne m'en relèverai jamais…\nEnfin presque.",
70 u"J'entends comme un vague murmure, vous disiez ?",
71 u"Je vais prendre ça pour un compliment.",
72 u"Vous savez, pour vous c'est peut-être une insulte, mais pour moi ce n'est qu'une suite de 0 et de 1…",
73 u"Permettez-moi de vous retourner le compliment.",
74 u"Votre indélicatesse vous sied à ravir.",
75 u"Parfois, je me demande pourquoi je fais encore ce métier…",
76 u"Le saviez-vous : l'invective ne déshonore que son auteur.",
77 u"Le saviez-vous : vous perdez plus de temps à m'insulter qu'à vous taire.",
78 u"Mais je ne vous permets pas ! Enfin, pas comme ça…"]
79
80 #: Regexp pour amplification
81 amplifier_regexp = u"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)"
82
83 #: config "pour quelque Ko de trop"
84 gros = [u"gros", u"énorme", u"lourd"]
85
86 #: config spéciale-iota
87 buffer_fail_regexp = u'^\s*(.|§|!|/|/|:|)(w|b|win|window|buffer) [0-9]+$'
88 buffer_fail_answers = [u"Pas de chance !", u"Révisez vos classiques !",
89 u"Encore un effort, je sais que vous pouvez le faire. ;)",
90 u"Where did you learn to type?"]
91
92 #: config "jeu", d'ailleurs, j'ai perdu.
93 premier_groupe_terminaisons = u"(e|es|ons|ez|ent|er(|ai|as|a|ons|ez|ont)|(|er)(ais|ait|ions|iez|aient)|(a(i|s|)|â(mes|tes|t)|èrent)|ass(e(|s|nt)|i(ons|ez))|é(|s|e|es))"
94 regexp_etre = u"(être|suis|e(s|t)|so(mmes|nt)|êtes|(ét|ser)(ai(s|t|ent)|i(ons|ent)|)|ser(ai|as|a|ons|ez|ont)|so(i(s|t|ent)|y(ons|ez))|f(u(s|t|rent)|û(mes|tes|t))|fuss(e(|s|nt)|i(ons|ez))|étant)"
95 regexp_etre_avec_c = u"c'(e(s|st)|étai(t|ent))"
96 regexp_faire = u"fais"
97 perdu = [u"perd(|s|ons|ez|ent|r(e|ai|as|a|ons|ez|ont)|(|r)(ais|ait|ions|iez|aient))"
98 u"perd(i(s|t|rent)|î(mes|tes|t))", # oui, j'ai inclus qu'il perdît
99 u"perdiss(e(|s|nt)|i(ons|ez))",
100 u"perdu(|s|e|es)", u"perdant(|s|e|es)", u"perte(|s)",
101
102 u"(gagn|trouv)" + premier_groupe_terminaisons, u"gagnant(|s|e|es)", u"gain(|s)",
103
104 u"trouvant", u"trouvaille(|s)",
105
106 u"victoire(|s)", u"vaincu(|s|e|es)",
107 u"loose", u"lost", u"looser(|s)", u"win(|ner)(|s)",
108 u"jeu(|x)", u"game(|s)"]
109 #: Temps moyen pour perdre en l'absence de trigger
110 time_between_perdu_trigger = 3600*3
111 #: Marge autorisée autour de ``time_between_perdu_trigger``
112 time_between_perdu_trigger_delta = 30*60
113 #: Temps pendant lequel on ne peut pas perdre
114 time_between_perdu=30*60
115
116 #: config "tais-toi"
117 tag_triggers = [u"t(|a)g", u"ta gueule", u"la ferme", u"ferme( |-)la", u"tais-toi", u"chut", u"tu fais trop de bruit", u"tu parles trop"]
118 tag_actions = [u"se tait", u"se tient coi"]
119 tag_answers = [
120 u"Ç'aurait été avec plaisir, mais je ne crois pas que vous puissiez vous passer de mes services.",
121 u"Dès que cela sera utile.",
122 u"Une autre fois, peut-être.",
123 u"Si je me tais, qui vous rappellera combien vous me devez ?",
124 u"J'aurais aimé accéder à votre requête, mais après mûre réflexion, j'en ai perdu l'envie.",
125 u"Je ne ressens pas de besoin irrésistible de me taire, navré."]
126
127 #: config ping
128 tesla_triggers = [u"t('|u )es là \?", u"\?", u"plop \?", u"plouf \?"]
129 tesla_answers = [
130 u"Oui, je suis là.",
131 u"J'écoute.",
132 u"En quoi puis-je me rendre utile ?",
133 u"On a besoin de moi ?"
134 ]
135 tesla_actions = [u"est là", u"attend des instructions", u"est toujours disponible"]
136
137 #: config en cas de non-insulte
138 compliment_triggers = [u"gentil", u"cool", u"sympa", u"efficace", u"bravo"]
139 compliment_answers = [
140 u"Merci, c'est gentil de votre part. :)",
141 u"Permettez-moi de vous retourner le compliment, sans ironie cette fois.",
142 u"Je vous remercie.",
143 u"C'est trop d'honneur.",
144 u"Vous êtes bien aimable."
145 ]
146
147 #: config merci
148 merci_triggers = [u"merci", u"remercie", u"thx", u"thank(|s)"]
149 merci_answers = [
150 u"Mais de rien.",
151 u"À votre service. ;)",
152 u"Quand vous voulez. :)",
153 u"Tout le plaisir est pour moi."]
154
155 #: config "ta mère"
156 tamere_triggers = [u"ta mère"]
157 tamere_answers = [
158 u"Laissez donc ma mère en dehors de ça !",
159 u"Puis-je préciser que je n'ai pas de mère ? Seulement deux pères…",
160 u"""Un certain Max chantait "♩ J'ai vu ta mère sur chat rouleeeeeeette ♫", vous êtes de sa famille ?""",
161 u"""N'avait-on pas dit "pas les mamans" ?"""]
162
163 #: config pour les actions désagréables à Basile
164 bad_action_triggers = [
165 u"(frappe|cogne|tape)(| sur)",
166 u"(démolit|dégomme|fouette|agresse|tabasse)",
167 u"(vomit|pisse|chie|crache) sur",
168 u"slap(|s)"]
169 bad_action_answers=[
170 u"Je ne peux pas dire que j'apprécie, mais je l'ai sans doute bien mérité.",
171 u"{}: Pourquoi tant de violence en ce monde si doux ?",
172 u"""Si je n'étais pas aussi prude, je dirais "Mais euh…", cependant, je me contenterai de hausser un sourcil.""",
173 u"{}: J'aurais préféré que vous ne fassiez pas cela en public.",
174 u"{}: Entre nous, cela vous gratifie-t-il ?",
175 u"{}: Une telle relation entre nous deux n'est pas saine, revenons à quelque chose de plus conventionnel. :D",
176 u"J'ai la désagréable impression que {} cherche comment tuer le temps en ce moment…"
177 ]
178 bad_action_actions = [u"prend de la distance, par précaution…", u"esquive", u"est bon pour prendre une semaine de repos… virtuel !", u"n'aime pas servir de souffre douleur, mais n'a malheureusement pas le choix", u"s'en souviendra sans doute longtemps… de quoi parlait-on déjà ?"]
179
180 #: config pour les actions agréables à Basile
181 good_action_triggers = [u"fait (:?des bisous|un bisou|un c(?:â|a)lin|des c(?:â|a)lins|des gratouilles) à", u"embrasse", u"c(?:â|a)line", u"caresse", u"patpats?", u"gratouille"]
182 good_action_answers = [u":D", u"{}: Moi aussi je vous aime. ♡", u"Tant de délicatesse ne saurait être ignorée !", u"Pour une fois que quelqu'un me considère à ma juste valeur…"]
183 good_action_actions = [u"ronronne", u"aimerait exprimer avec des mots simples le bonheur que {} lui procure !", u"éprouve une joie indescriptible", u"apprécie que des personnes comme {} soient sur IRC, sans quoi il n'y aurait sans doute jamais personne pour tenir compte de lui"]
184
185 #: config bonjour/bonsoir/que fais-tu encore debout à cette heure, gros sale !
186 bonjour_triggers = [u"(s|)(a|'|)lu(t|)", u"hello", u"pl(o|i)p", u"pr(ou|ü)t", u"bonjour", u"bonsoir", u"coucou"]
187 bonjour_answers = [u"Bien le bonjour, {}.", u"Bonjour {}.", u"{}: bonjour.", u"{}: Quel beau temps aujourd'hui (arrêtez-moi si je me trompe) !", u"Meteo: Cachan"]
188 bonsoir_answers = [u"Bonsoir {} !", u"{}: bonsoir.", u"Quel beau te… euh… bonsoir !", u"{}: Je cherche désespérément une formule pour vous dire bonsoir, mais j'avoue que mon lexique est un peu… limité."]
189 night_answers = [u"{}: vous m'avez fait peur, je m'étais assoupi !", u"Debout à une heure pareille, {} ? Que vous arrive-t-il ?", u"Vous venez prendre la relève, {} ?"]
190 daytime = [7,18]
191 nighttime = [3, 6]
192
193 #: pan
194 pan_triggers = [u"pan", u"bim", u"bang"]
195
196 #: config dodo
197 bonne_nuit_triggers = [u"bonne nuit", u"'?nite", u"'?nuit", u"'?night", u"good night", u"'?nenuit"]
198 bonne_nuit_answers = [u"{}: thanks, make sweet dreams tonight ! ;)", u"Bonne nuit {}.", u"À demain {}. :)", u"{}: si seulement j'avais le droit de dormir… enfin, bonne nuit !", u"{}: à vous aussi !"]
199
200 #: config PEB est encore en train d'abuser de ses droits.
201 kick_answers = [u"Suis-je de trop ici ?", u"{}: je m'excuse pour ce bruit indu qui a stimulé votre colère", u"{} a le /kick facile, sans doute la fatigue.", u"{}: j'ai l'impression que vous n'allez pas bien aujourd'hui, vous vous en prenez à un robot !"]
202 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."]
203
204 #: config on m'a demandé de mourir/partir
205 quit_messages = [u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."]
206 leave_messages = quit_messages
207
208 quit_fail_messages = [u"Navré, mais je me vois contraint de refuser, je ne peux pas céder aux exigences du premier venu."]
209 leave_fail_messages = quit_fail_messages
210 pas_programme_pour_tobeir = [u"Encore eût-il fallu que je fusse programmé pour vous obéir !"]
211
212 #: Aide sur les commandes
213 helpdico = {
214 "help" : [u"""HELP <commande>
215 Affiche de l'aide sur la commande""", None, None],
216
217 "identify" : [u"""IDENTIFY <username> <password>
218 Vérifie le mot de passe et me permet de savoir à l'avenir quel est votre pseudo note kfet.
219 Sans paramètre, je vous précise sous quel pseudo je vous connais.""", None, None],
220
221 "drop" : [u"""DROP <password>
222 Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
223
224 "solde" : [u"""SOLDE
225 Affiche votre solde, si je connais votre pseudo note kfet.""",
226 u"""SOLDE <pseudo>
227 Affiche le solde de la personne désignée (par son pseudo note).""", None],
228
229 "join" : [None, u"""JOIN <channel>
230 Me fait rejoindre le channel""", None],
231
232 "leave" : [None, u"""LEAVE <channel>
233 Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
234
235 "quiet" : [None, u"""QUIET <channel>
236 Me rend silencieux sur le channel.""", None],
237
238 "noquiet" : [None, u"""NOQUIET <channel>
239 Me rend la parole sur le channel.""", None],
240
241 "lost" : [None, u"""LOST <channel>
242 Me fait perdre sur le channel.""", None],
243
244 "reconnect" : [None, u"""RECONNECT
245 Établit à nouveau la connexion avec le serveur NK2015""", None],
246
247 "reload" : [None, u"""RELOAD
248 Recharge la configuration.""", None],
249
250 "say" : [None, None, u"""SAY <channel> <message>
251 Me fait parler sur le channel."""],
252
253 "do" : [None, None, u"""DO <channel> <action>
254 Me fait faitre une action (/me) sur le channel."""],
255
256 "stay" : [None, None, u"""STAY <channel>
257 Ajoute le channel à ma stay_list."""],
258
259 "nostay" : [None, None, u"""NOSTAY <channel>
260 Retire le channel de ma stay_list."""],
261
262 "ops" : [None, None, u"""OPS
263 Affiche la liste des ops."""],
264
265 "overops" : [None, None, u"""OVEROPS
266 Affiche la liste des overops."""],
267
268 "kick" : [None, None, u"""KICK <channel> <pseudo> [<raison>]
269 Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
270
271 "die" : [None, None, u"""DIE
272 Me déconnecte du serveur IRC."""],
273
274 "crash" : [None, None, u"""CRASH
275 Me fait crasher"""]
276 }
277
278 #: Message d'aide par défaut
279 helpmsg_default = u"Liste des commandes disponibles :\nHELP IDENTIFY DROP SOLDE"
280 #: Message d'aide par défaut à ajouter pour les OPs
281 helpmsg_ops = u" JOIN LEAVE QUIET NOQUIET LOST RECONNECT RELOAD"
282 #: Message d'aide par défaut à ajouter pour les OVEROPs
283 helpmsg_overops = u" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE CRASH"
284
285 #: Liste de paires de masques ``[black, exceptlist]`` : on blacklistera ce qui match ``black``
286 #: et aucun élément de ``exceptlist``
287 blacklisted_masks = [("Flo!*@*", [])]