4 """ Configuration de Basile """
6 #: Faut-il débuguer sur la sortie standard par défaut ?
9 ## La config irc-related
10 #: Mot de passe NickServ. TODO : le mettre dans un secrets.py
11 irc_password
= "NK2015BasileB0t"
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
21 ## La config note-related
23 note_pseudo
= "Basile"
24 #: Mot de passe note TODO : secrets
25 note_password
= "NK2015BasileB0tr4nd0omp4assword]6_+{#]78{"
27 nk_server
= "bde2.crans.org"
31 #: Là où sont stockées les correspondances pseudo IRC → note
32 identities_file
= "identities.json"
34 #: Le template des noms de fichier de log
35 logfile_template
= "basile.%s.log"
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
41 #: À qui s'adresser (par IRC) quand le bot rencontre une erreur
42 report_bugs_to
=["[20-100]"]
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à"
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
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
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…"]
80 #: Regexp pour amplification
81 amplifier_regexp
= u
"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)"
83 #: config "pour quelque Ko de trop"
84 gros
= [u
"gros", u
"énorme", u
"lourd"]
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?"]
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)",
104 u
"(gagn|trouv)" + premier_groupe_terminaisons
, u
"gagnant(|s|e|es)", u
"gain(|s)",
106 u
"trouvant", u
"trouvaille(|s)",
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
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"]
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é."]
130 tesla_triggers
= [u
"t('|u )es là \?", u
"\?", u
"plop \?", u
"plouf \?"]
134 u
"En quoi puis-je me rendre utile ?",
135 u
"On a besoin de moi ?"
137 tesla_actions
= [u
"est là", u
"attend des instructions", u
"est toujours disponible"]
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."
150 merci_triggers
= [u
"merci", u
"remercie", u
"thx", u
"thank(|s)"]
153 u
"À votre service. ;)",
154 u
"Quand vous voulez. :)",
155 u
"Tout le plaisir est pour moi."]
158 tamere_triggers
= [u
"ta mère"]
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" ?"""]
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",
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…"
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à ?"]
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"]
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, {} ?"]
196 pan_triggers
= [u
"pan", u
"bim", u
"bang"]
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 !"]
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."]
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
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 !"]
214 #: Aide sur les commandes
216 "help" : [u
"""HELP <commande>
217 Affiche de l'aide sur la commande""", None, None],
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],
223 "drop" : [u
"""DROP <password>
224 Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
227 Affiche votre solde, si je connais votre pseudo note kfet.""",
229 Affiche le solde de la personne désignée (par son pseudo note).""", None],
231 "join" : [None, u
"""JOIN <channel>
232 Me fait rejoindre le channel""", None],
234 "leave" : [None, u
"""LEAVE <channel>
235 Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
237 "quiet" : [None, u
"""QUIET <channel>
238 Me rend silencieux sur le channel.""", None],
240 "noquiet" : [None, u
"""NOQUIET <channel>
241 Me rend la parole sur le channel.""", None],
243 "lost" : [None, u
"""LOST <channel>
244 Me fait perdre sur le channel.""", None],
246 "reconnect" : [None, u
"""RECONNECT
247 Établit à nouveau la connexion avec le serveur NK2015""", None],
249 "reload" : [None, u
"""RELOAD
250 Recharge la configuration.""", None],
252 "say" : [None, None, u
"""SAY <channel> <message>
253 Me fait parler sur le channel."""],
255 "do" : [None, None, u
"""DO <channel> <action>
256 Me fait faitre une action (/me) sur le channel."""],
258 "stay" : [None, None, u
"""STAY <channel>
259 Ajoute le channel à ma stay_list."""],
261 "nostay" : [None, None, u
"""NOSTAY <channel>
262 Retire le channel de ma stay_list."""],
264 "ops" : [None, None, u
"""OPS
265 Affiche la liste des ops."""],
267 "overops" : [None, None, u
"""OVEROPS
268 Affiche la liste des overops."""],
270 "kick" : [None, None, u
"""KICK <channel> <pseudo> [<raison>]
271 Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
273 "die" : [None, None, u
"""DIE
274 Me déconnecte du serveur IRC."""],
276 "crash" : [None, None, u
"""CRASH
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"
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!*@*", [])]