]> gitweb.pimeys.fr Git - bots/basile.git/blob - config.py
a3dc293e25e5dd891b6efc21f03abab8eda61ddc
[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 users_file = "users.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 _prebuffer = u"(\.|\\|§|!|/|\||:|)"
88 _buffer = u"(w|b|win|window|buffer)"
89 buffer_fail_regexp = u'((^\s*%s%s [0-9]+$)|(^%s%s [A-Za-z-]+$))' % (_prebuffer, _buffer, _prebuffer, _buffer)
90 buffer_fail_answers = [u"Pas de chance !", u"Révisez vos classiques !",
91 u"Encore un effort, je sais que vous pouvez le faire. ;)",
92 u"Where did you learn to type?"]
93
94 #: config "jeu", d'ailleurs, j'ai perdu.
95 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))"
96 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)"
97 regexp_etre_avec_c = u"c'(e(s|st)|étai(t|ent))"
98 regexp_faire = u"fais"
99 perdu = [u"perd(|s|ons|ez|ent|r(e|ai|as|a|ons|ez|ont)|(|r)(ais|ait|ions|iez|aient))"
100 u"perd(i(s|t|rent)|î(mes|tes|t))", # oui, j'ai inclus qu'il perdît
101 u"perdiss(e(|s|nt)|i(ons|ez))",
102 u"perdu(|s|e|es)", u"perdant(|s|e|es)", u"perte(|s)",
103
104 u"(gagn|trouv)" + premier_groupe_terminaisons, u"gagnant(|s|e|es)", u"gain(|s)",
105
106 u"trouvant", u"trouvaille(|s)",
107
108 u"victoire(|s)", u"vaincu(|s|e|es)",
109 u"loose", u"lost", u"looser(|s)", u"win(|ner)(|s)",
110 u"jeu(|x)", u"game(|s)"]
111 #: Temps moyen pour perdre en l'absence de trigger
112 time_between_perdu_trigger = 3600*3
113 #: Marge autorisée autour de ``time_between_perdu_trigger``
114 time_between_perdu_trigger_delta = 30*60
115 #: Temps pendant lequel on ne peut pas perdre
116 time_between_perdu=30*60
117
118 #: config "tais-toi"
119 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"]
120 tag_actions = [u"se tait", u"se tient coi"]
121 tag_answers = [
122 u"Ç'aurait été avec plaisir, mais je ne crois pas que vous puissiez vous passer de mes services.",
123 u"Dès que cela sera utile.",
124 u"Une autre fois, peut-être.",
125 u"Si je me tais, qui vous rappellera combien vous me devez ?",
126 u"J'aurais aimé accéder à votre requête, mais après mûre réflexion, j'en ai perdu l'envie.",
127 u"Je ne ressens pas de besoin irrésistible de me taire, navré."]
128
129 #: config ping
130 tesla_triggers = [u"t('|u )es là \?", u"\?", u"plop \?", u"plouf \?"]
131 tesla_answers = [
132 u"Oui, je suis là.",
133 u"J'écoute.",
134 u"En quoi puis-je me rendre utile ?",
135 u"On a besoin de moi ?"
136 ]
137 tesla_actions = [u"est là", u"attend des instructions", u"est toujours disponible"]
138
139 #: config en cas de non-insulte
140 compliment_triggers = [u"gentil", u"cool", u"sympa", u"efficace", u"bravo"]
141 compliment_answers = [
142 u"Merci, c'est gentil de votre part. :)",
143 u"Permettez-moi de vous retourner le compliment, sans ironie cette fois.",
144 u"Je vous remercie.",
145 u"C'est trop d'honneur.",
146 u"Vous êtes bien aimable."
147 ]
148
149 #: config merci
150 merci_triggers = [u"merci", u"remercie", u"thx", u"thank(|s)"]
151 merci_answers = [
152 u"Mais de rien.",
153 u"À votre service. ;)",
154 u"Quand vous voulez. :)",
155 u"Tout le plaisir est pour moi."]
156
157 #: config "ta mère"
158 tamere_triggers = [u"ta mère"]
159 tamere_answers = [
160 u"Laissez donc ma mère en dehors de ça !",
161 u"Puis-je préciser que je n'ai pas de mère ? Seulement deux pères…",
162 u"""Un certain Max chantait "♩ J'ai vu ta mère sur chat rouleeeeeeette ♫", vous êtes de sa famille ?""",
163 u"""N'avait-on pas dit "pas les mamans" ?"""]
164
165 #: config pour les actions désagréables à Basile
166 bad_action_triggers = [
167 u"(frappe|cogne|tape)(| sur)",
168 u"(démolit|dégomme|fouette|agresse|tabasse)",
169 u"(vomit|pisse|chie|crache) sur",
170 u"slap(|s)"]
171 bad_action_answers=[
172 u"Je ne peux pas dire que j'apprécie, mais je l'ai sans doute bien mérité.",
173 u"{}: Pourquoi tant de violence en ce monde si doux ?",
174 u"""Si je n'étais pas aussi prude, je dirais "Mais euh…", cependant, je me contenterai de hausser un sourcil.""",
175 u"{}: J'aurais préféré que vous ne fassiez pas cela en public.",
176 u"{}: Entre nous, cela vous gratifie-t-il ?",
177 u"{}: Une telle relation entre nous deux n'est pas saine, revenons à quelque chose de plus conventionnel. :D",
178 u"J'ai la désagréable impression que {} cherche comment tuer le temps en ce moment…"
179 ]
180 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à ?"]
181
182 #: config pour les actions agréables à Basile
183 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"]
184 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…"]
185 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"]
186
187 #: config bonjour/bonsoir/que fais-tu encore debout à cette heure, gros sale !
188 bonjour_triggers = [u"(s|)(a|'|)lu(t|)", u"hello", u"pl(o|i)p", u"pr(ou|ü)t", u"bonjour", u"bonsoir", u"coucou"]
189 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"]
190 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é."]
191 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, {} ?"]
192 daytime = [7,18]
193 nighttime = [3, 6]
194
195 #: pan
196 pan_triggers = [u"pan", u"bim", u"bang"]
197
198 #: config dodo
199 bonne_nuit_triggers = [u"bonne nuit", u"'?nite", u"'?nuit", u"'?night", u"good night", u"'?nenuit"]
200 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 !"]
201
202 #: config PEB est encore en train d'abuser de ses droits.
203 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 !"]
204 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."]
205
206 #: config on m'a demandé de mourir/partir
207 quit_messages = [u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."]
208 leave_messages = quit_messages
209
210 quit_fail_messages = [u"Navré, mais je me vois contraint de refuser, je ne peux pas céder aux exigences du premier venu."]
211 leave_fail_messages = quit_fail_messages
212 pas_programme_pour_tobeir = [u"Encore eût-il fallu que je fusse programmé pour vous obéir !"]
213
214 #: Aide sur les commandes
215 helpdico = {
216 "help" : [u"""HELP <commande>
217 Affiche de l'aide sur la commande""", None, None],
218
219 "identify" : [u"""IDENTIFY <username> <password>
220 Vérifie le mot de passe et me permet de savoir à l'avenir quel est votre pseudo note kfet.
221 Sans paramètre, je vous précise sous quel pseudo je vous connais.""", None, None],
222
223 "drop" : [u"""DROP <password>
224 Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
225
226 "solde" : [u"""SOLDE
227 Affiche votre solde, si je connais votre pseudo note kfet.""",
228 u"""SOLDE <pseudo>
229 Affiche le solde de la personne désignée (par son pseudo note).""", None],
230
231 "join" : [None, u"""JOIN <channel>
232 Me fait rejoindre le channel""", None],
233
234 "leave" : [None, u"""LEAVE <channel>
235 Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
236
237 "quiet" : [None, u"""QUIET <channel>
238 Me rend silencieux sur le channel.""", None],
239
240 "noquiet" : [None, u"""NOQUIET <channel>
241 Me rend la parole sur le channel.""", None],
242
243 "lost" : [None, u"""LOST <channel>
244 Me fait perdre sur le channel.""", None],
245
246 "reconnect" : [None, u"""RECONNECT
247 Établit à nouveau la connexion avec le serveur NK2015""", None],
248
249 "reload" : [None, u"""RELOAD
250 Recharge la configuration.""", None],
251
252 "say" : [None, None, u"""SAY <channel> <message>
253 Me fait parler sur le channel."""],
254
255 "do" : [None, None, u"""DO <channel> <action>
256 Me fait faitre une action (/me) sur le channel."""],
257
258 "stay" : [None, None, u"""STAY <channel>
259 Ajoute le channel à ma stay_list."""],
260
261 "nostay" : [None, None, u"""NOSTAY <channel>
262 Retire le channel de ma stay_list."""],
263
264 "ops" : [None, None, u"""OPS
265 Affiche la liste des ops."""],
266
267 "overops" : [None, None, u"""OVEROPS
268 Affiche la liste des overops."""],
269
270 "kick" : [None, None, u"""KICK <channel> <pseudo> [<raison>]
271 Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
272
273 "die" : [None, None, u"""DIE
274 Me déconnecte du serveur IRC."""],
275
276 "crash" : [None, None, u"""CRASH
277 Me fait crasher"""]
278 }
279
280 #: Message d'aide par défaut
281 helpmsg_default = u"Liste des commandes disponibles :\nHELP IDENTIFY DROP SOLDE"
282 #: Message d'aide par défaut à ajouter pour les OPs
283 helpmsg_ops = u" JOIN LEAVE QUIET NOQUIET LOST RECONNECT RELOAD"
284 #: Message d'aide par défaut à ajouter pour les OVEROPs
285 helpmsg_overops = u" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE CRASH"
286
287 #: Liste de paires de masques ``[black, exceptlist]`` : on blacklistera ce qui match ``black``
288 #: et aucun élément de ``exceptlist``
289 blacklisted_masks = [("Flo!*@*", [])]