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
= "note.crans.org"
31 #: Là où sont stockées les correspondances pseudo IRC → note
32 users_file
= "users.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]", "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 #: 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
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à"
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
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
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…"]
84 #: Regexp pour amplification
85 amplifier_regexp
= u
"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)"
87 #: config "pour quelque Ko de trop"
88 gros
= [u
"gros", u
"énorme", u
"lourd"]
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?"]
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)",
108 u
"(gagn|trouv)" + premier_groupe_terminaisons
, u
"gagnant(|s|e|es)", u
"gain(|s)",
110 u
"trouvant", u
"trouvaille(|s)",
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
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"]
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é."]
134 tesla_triggers
= [u
"t('|u )es là \?", u
"\?", u
"plop \?", u
"plouf \?"]
138 u
"En quoi puis-je me rendre utile ?",
139 u
"On a besoin de moi ?"
141 tesla_actions
= [u
"est là", u
"attend des instructions", u
"est toujours disponible"]
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."
154 merci_triggers
= [u
"merci", u
"remercie", u
"thx", u
"thank(|s)"]
157 u
"À votre service. ;)",
158 u
"Quand vous voulez. :)",
159 u
"Tout le plaisir est pour moi."]
162 tamere_triggers
= [u
"ta mère"]
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" ?"""]
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",
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…"
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à ?"]
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"]
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, {} ?"]
200 pan_triggers
= [u
"pan", u
"bim", u
"bang"]
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 !"]
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."]
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
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 !"]
218 #: Aide sur les commandes
220 "help" : [u
"""HELP <commande>
221 Affiche de l'aide sur la commande""", None, None],
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],
227 "drop" : [u
"""DROP <password>
228 Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
231 Affiche votre solde, si je connais votre pseudo note kfet.""",
233 Affiche le solde de la personne désignée (par son pseudo note).""", None],
235 "join" : [None, u
"""JOIN <channel>
236 Me fait rejoindre le channel""", None],
238 "leave" : [None, u
"""LEAVE <channel>
239 Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
241 "quiet" : [None, u
"""QUIET <channel>
242 Me rend silencieux sur le channel.""", None],
244 "noquiet" : [None, u
"""NOQUIET <channel>
245 Me rend la parole sur le channel.""", None],
247 "lost" : [None, u
"""LOST <channel>
248 Me fait perdre sur le channel.""", None],
250 "reconnect" : [None, u
"""RECONNECT
251 Établit à nouveau la connexion avec le serveur NK2015""", None],
253 "reload" : [None, u
"""RELOAD
254 Recharge la configuration.""", None],
256 "say" : [None, None, u
"""SAY <channel> <message>
257 Me fait parler sur le channel."""],
259 "do" : [None, None, u
"""DO <channel> <action>
260 Me fait faitre une action (/me) sur le channel."""],
262 "stay" : [None, None, u
"""STAY <channel>
263 Ajoute le channel à ma stay_list."""],
265 "nostay" : [None, None, u
"""NOSTAY <channel>
266 Retire le channel de ma stay_list."""],
268 "ops" : [None, None, u
"""OPS
269 Affiche la liste des ops."""],
271 "overops" : [None, None, u
"""OVEROPS
272 Affiche la liste des overops."""],
274 "kick" : [None, None, u
"""KICK <channel> <pseudo> [<raison>]
275 Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
277 "die" : [None, None, u
"""DIE
278 Me déconnecte du serveur IRC."""],
280 "crash" : [None, None, u
"""CRASH
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"
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!*@*", [])]