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