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