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 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?"]
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)",
101 u
"(gagn|trouv)" + premier_groupe_terminaisons
, u
"gagnant(|s|e|es)", u
"gain(|s)",
103 u
"trouvant", u
"trouvaille(|s)",
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
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"]
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é."]
127 tesla_triggers
= [u
"t('|u )es là \?", u
"\?", u
"plop \?", u
"plouf \?"]
131 u
"En quoi puis-je me rendre utile ?",
132 u
"On a besoin de moi ?"
134 tesla_actions
= [u
"est là", u
"attend des instructions", u
"est toujours disponible"]
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."
147 merci_triggers
= [u
"merci", u
"remercie", u
"thx", u
"thank(|s)"]
150 u
"À votre service. ;)",
151 u
"Quand vous voulez. :)",
152 u
"Tout le plaisir est pour moi."]
155 tamere_triggers
= [u
"ta mère"]
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" ?"""]
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",
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…"
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à ?"]
179 #: config pour les actions agréables à Basile
180 good_action_triggers
= [u
"fait (:?des bisous|un bisou|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"]
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, {} ?"]
193 pan_triggers
= [u
"pan", u
"bim", u
"bang"]
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 !"]
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."]
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
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 !"]
211 #: Aide sur les commandes
213 "help" : [u
"""HELP <commande>
214 Affiche de l'aide sur la commande""", None, None],
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],
220 "drop" : [u
"""DROP <password>
221 Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
224 Affiche votre solde, si je connais votre pseudo note kfet.""",
226 Affiche le solde de la personne désignée (par son pseudo note).""", None],
228 "join" : [None, u
"""JOIN <channel>
229 Me fait rejoindre le channel""", None],
231 "leave" : [None, u
"""LEAVE <channel>
232 Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
234 "quiet" : [None, u
"""QUIET <channel>
235 Me rend silencieux sur le channel.""", None],
237 "noquiet" : [None, u
"""NOQUIET <channel>
238 Me rend la parole sur le channel.""", None],
240 "lost" : [None, u
"""LOST <channel>
241 Me fait perdre sur le channel.""", None],
243 "reconnect" : [None, u
"""RECONNECT
244 Établit à nouveau la connexion avec le serveur NK2015""", None],
246 "reload" : [None, u
"""RELOAD
247 Recharge la configuration.""", None],
249 "say" : [None, None, u
"""SAY <channel> <message>
250 Me fait parler sur le channel."""],
252 "do" : [None, None, u
"""DO <channel> <action>
253 Me fait faitre une action (/me) sur le channel."""],
255 "stay" : [None, None, u
"""STAY <channel>
256 Ajoute le channel à ma stay_list."""],
258 "nostay" : [None, None, u
"""NOSTAY <channel>
259 Retire le channel de ma stay_list."""],
261 "ops" : [None, None, u
"""OPS
262 Affiche la liste des ops."""],
264 "overops" : [None, None, u
"""OVEROPS
265 Affiche la liste des overops."""],
267 "kick" : [None, None, u
"""KICK <channel> <pseudo> [<raison>]
268 Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
270 "die" : [None, None, u
"""DIE
271 Me déconnecte du serveur IRC."""],
273 "crash" : [None, None, u
"""CRASH
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"
284 #: Liste de paires de masques ``[black, exceptlist]`` : on blacklistera ce qui match ``black``
285 #: et aucun élément de ``exceptlist``
286 blacklisted_masks
= [("Flo!*@*", [])]