]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - config.py
Meteo : bot mort et enterré depuis longtemps
[bots/basile.git] / config.py
index 319f9bf4a1e7d76d02d7bb10b0a5d5058ba62d15..b4e4280d35b9cb79e8090eee069f25dbc81a31a9 100644 (file)
--- a/config.py
+++ b/config.py
@@ -1,52 +1,75 @@
 #!/usr/bin/python
 # -*- coding:utf8 -*-
 
-# Configuration de Basile
+""" Configuration de Basile """
 
-debug_stdout=True
+#: Faut-il débuguer sur la sortie standard par défaut ?
+debug_stdout = True
 
-# la config irc-related
-irc_password="NK2015BasileB0t"
-irc_pseudo="Basile"
-chanlist=["#bot", "#flood"]
-stay_channels=["#bot", "#flood"]
-quiet_channels=[]
+## La config irc-related
+#: Mot de passe NickServ. TODO : le mettre dans un secrets.py
+irc_password = "NK2015BasileB0t"
+#: Pseudo IRC
+irc_pseudo = "Basile"
+#: Liste des channels à rejoindre
+chanlist = ["#bot", "#flood"]
+#: Liste des channels à ne pas quitter
+stay_channels = ["#bot", "#flood"]
+#: Liste des channels où se taire
+quiet_channels = []
 
-# la config note-related
-note_pseudo="Basile"
-note_password="NK2015BasileB0tr4nd0omp4assword]6_+{#]78{"
+## La config note-related
+#: Pseudo note
+note_pseudo = "Basile"
+#: Mot de passe note TODO : secrets
+note_password = "NK2015BasileB0tr4nd0omp4assword]6_+{#]78{"
+#: Serveur NK2015
+nk_server = "note.crans.org"
+#: Port NK2015
+nk_port = 4242
 
-# les logs
-logfile_template="basile.%s.log"
+#: Là où sont stockées les correspondances pseudo IRC → note
+users_file = "users.json"
 
-# les ops
-overops=["[20-100]","[20-100]_", "PEB"]
+#: Le template des noms de fichier de log
+logfile_template = "basile.%s.log"
+
+#: Les OVEROPs, tous les droits sur le bot
+overops=["[20-100]", "PEB"]
+#: Les OPs, moins de droits que les OVEROPs
 ops=["Nit"]
+#: À qui s'adresser (par IRC) quand le bot rencontre une erreur
 report_bugs_to=["[20-100]"]
 
-# config "ce bot a été codé par 20-100, tu te rappelles ?"
+#: Le temps qu'on attend (en secondes) après avoir lancé un whois pour considérer
+#: que le pseudo n'est pas enregistré si on n'a rien reçu
+whois_timeout = 5
+
+#: config "ce bot a été codé par 20-100, tu te rappelles ?"
 manzana = ["[20-100]", "Petite-Peste"] 
-# config "mais PEB aussi est passé par là"
+#: config "mais PEB aussi est passé par là"
 manzana_bis = ["PEB"]
 
-# config UTF8-fail
+#: config UTF8-fail
 utf8_fail_answers = [u"Si je n'avais pas été créé avec la plus grande attention, votre encodage aurait eu raison de moi…"]
-utf8_trigger = False
-# config "tu m'traites ?"
-insultes=[u"conna(rd|sse)",u"pute",u"con(|ne)",u"enf(oiré|lure)",
-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",
-u"pétasse",u"enculé",u"chagasse",u"cagole",u"abruti",u"ahuri",u"analphabète",u"andouille",
-u"atardé",u"avorton",u"bachibouzouk",u"(balais|brosse) (de|à) chiotte(|s)",
-u"batard",u"blaireau",u"bouffon",u"branque",u"bouseux",u"branleur",u"catin",u"chacal",
-u"charogne",u"chiant(|e)",u"chieur",u"cochon",u"coprophage",u"couillon",u"crapule",u"crevard",
-u"cruche",u"cuistre",u"ducon",u"décérébré",
-u"emmerdeur",u"feignasse",u"fainéant",u"fourbe",u"freluquet",u"frigide",
-u"garce",u"glandu",u"gogol",u"goujat",u"gourdasse",u"gredin",u"gringalet",u"grognasse",
-u"naze",u"truie",u"iconoclaste",
-u"peigne(-|)cul",u"ignare",u"illétré",u"lèche(|-)cul",u"malotru",u"motherfucker",u"nabot",u"nigaud",
-u"nul",u"escroc",u"pouffiasse",u"pourriture",u"raclure",u"relou",u"sagouin",u"putain",
-u"péripatéticienne"]
-insultes_answers=[
+#: Doit-on râler en cas de fial d'UTF-8
+utf8_trigger = True
+#: config "tu m'traites ?"
+insultes = [u"conna(rd|sse)", u"pute", u"con(|ne)", u"enf(oiré|lure)",
+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",
+u"pétasse", u"enculé", u"chagasse", u"cagole", u"abruti", u"ahuri", u"analphabète", u"andouille",
+u"atardé", u"avorton", u"bachibouzouk", u"(balais|brosse) (de|à) chiotte(|s)",
+u"batard", u"blaireau", u"bouffon", u"branque", u"bouseux", u"branleur", u"catin", u"chacal",
+u"charogne", u"chiant(|e)", u"chieur", u"cochon", u"coprophage", u"couillon", u"crapule", u"crevard",
+u"cruche", u"cuistre", u"ducon", u"décérébré",
+u"emmerdeur", u"feignasse", u"fainéant", u"fourbe", u"freluquet", u"frigide",
+u"garce", u"glandu", u"gogol", u"goujat", u"gourdasse", u"gredin", u"gringalet", u"grognasse",
+u"naze", u"truie", u"iconoclaste",
+u"peigne(-|)cul", u"ignare", u"illétré", u"lèche(|-)cul", u"malotru", u"motherfucker", u"nabot", u"nigaud",
+u"nul", u"escroc", u"pouffiasse", u"pourriture", u"raclure", u"relou", u"sagouin", u"putain",
+u"péripatéticienne", u"bitch", u"whore"]
+#: Réponses aux insultes
+insultes_answers = [
 u"Oh non ! Quelle insulte ! Je crois que je ne m'en relèverai jamais…\nEnfin presque.",
 u"J'entends comme un vague murmure, vous disiez ?",
 u"Je vais prendre ça pour un compliment.",
@@ -58,39 +81,48 @@ u"Le saviez-vous : l'invective ne déshonore que son auteur.",
 u"Le saviez-vous : vous perdez plus de temps à m'insulter qu'à vous taire.",
 u"Mais je ne vous permets pas ! Enfin, pas comme ça…"]
 
-# config "à peine quelques kilos octets"
-gros=[u"gros",u"énorme",u"lourd"]
+#: Regexp pour amplification
+amplifier_regexp = u"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)"
 
-# config spéciale-iota
-buffer_fail_answers=[u"Pas de chance !",u"Révisez vos classiques !",
+#: config "pour quelque Ko de trop"
+gros = [u"gros", u"énorme", u"lourd"]
+
+#: config spéciale-iota
+_prebuffer = u"(\.|\\|§|!|/|\||:|)"
+_buffer = u"(w|b|win|window|buffer)"
+buffer_fail_regexp = u'((^\s*%s%s [0-9]+$)|(^%s%s [A-Za-z-]+$))' % (_prebuffer, _buffer, _prebuffer, _buffer)
+buffer_fail_answers = [u"Pas de chance !", u"Révisez vos classiques !",
 u"Encore un effort, je sais que vous pouvez le faire. ;)",
 u"Where did you learn to type?"]
 
-# config "jeu", d'ailleurs, j'ai perdu.
-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))"
-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)"
-regexp_etre_avec_c=u"c'(e(s|st)|étai(t|ent))"
-regexp_faire=u"fais"
-perdu=[u"perd(|s|ons|ez|ent|r(e|ai|as|a|ons|ez|ont)|(|r)(ais|ait|ions|iez|aient))"
+#: config "jeu", d'ailleurs, j'ai perdu.
+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))"
+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)"
+regexp_etre_avec_c = u"c'(e(s|st)|étai(t|ent))"
+regexp_faire = u"fais"
+perdu = [u"perd(|s|ons|ez|ent|r(e|ai|as|a|ons|ez|ont)|(|r)(ais|ait|ions|iez|aient))"
 u"perd(i(s|t|rent)|î(mes|tes|t))", # oui, j'ai inclus qu'il perdît
 u"perdiss(e(|s|nt)|i(ons|ez))",
-u"perdu(|s|e|es)",u"perdant(|s|e|es)",u"perte(|s)",
+u"perdu(|s|e|es)", u"perdant(|s|e|es)", u"perte(|s)",
 
-u"(gagn|trouv)"+premier_groupe_terminaisons,u"gagnant(|s|e|es)",u"gain(|s)",
+u"(gagn|trouv)" + premier_groupe_terminaisons, u"gagnant(|s|e|es)", u"gain(|s)",
 
-u"trouvant",u"trouvaille(|s)",
+u"trouvant", u"trouvaille(|s)",
 
-u"victoire(|s)",u"vaincu(|s|e|es)",
-u"loose",u"lost",u"looser(|s)",u"win(|ner)(|s)",
-u"jeu(|x)",u"game(|s)"]
-time_between_perdu_trigger=3600*3 #temps moyen pour perdre en l'absence de trigger
-time_between_perdu_trigger_delta = 30*60 #marge autorisée autour de ^^^
-time_between_perdu=30*60 #temps pendant lequel on ne peut pas perdre
+u"victoire(|s)", u"vaincu(|s|e|es)",
+u"loose", u"lost", u"looser(|s)", u"win(|ner)(|s)",
+u"jeu(|x)", u"game(|s)"]
+#: Temps moyen pour perdre en l'absence de trigger
+time_between_perdu_trigger = 3600*3
+#: Marge autorisée autour de ``time_between_perdu_trigger``
+time_between_perdu_trigger_delta = 30*60
+#: Temps pendant lequel on ne peut pas perdre
+time_between_perdu=30*60
 
-# config "tais-toi"
-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"]
-tag_actions=[u"se tait",u"se tient coi"]
-tag_answers=[
+#: config "tais-toi"
+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"]
+tag_actions = [u"se tait", u"se tient coi"]
+tag_answers = [
 u"Ç'aurait été avec plaisir, mais je ne crois pas que vous puissiez vous passer de mes services.",
 u"Dès que cela sera utile.",
 u"Une autre fois, peut-être.",
@@ -98,19 +130,19 @@ u"Si je me tais, qui vous rappellera combien vous me devez ?",
 u"J'aurais aimé accéder à votre requête, mais après mûre réflexion, j'en ai perdu l'envie.",
 u"Je ne ressens pas de besoin irrésistible de me taire, navré."]
 
-# config ping
-tesla_triggers=[u"t('|u )es là \?",u"\?",u"plop \?",u"plouf \?"]
-tesla_answers=[
+#: config ping
+tesla_triggers = [u"t('|u )es là \?", u"\?", u"plop \?", u"plouf \?"]
+tesla_answers = [
 u"Oui, je suis là.",
 u"J'écoute.",
 u"En quoi puis-je me rendre utile ?",
 u"On a besoin de moi ?"
 ]
-tesla_actions=[u"est là",u"attend des instructions",u"est toujours disponible"]
+tesla_actions = [u"est là", u"attend des instructions", u"est toujours disponible"]
 
-# config en cas de non-insulte
-compliment_triggers=[u"gentil",u"cool",u"sympa",u"efficace"]
-compliment_answers=[
+#: config en cas de non-insulte
+compliment_triggers = [u"gentil", u"cool", u"sympa", u"efficace", u"bravo"]
+compliment_answers = [
 u"Merci, c'est gentil de votre part. :)",
 u"Permettez-moi de vous retourner le compliment, sans ironie cette fois.",
 u"Je vous remercie.",
@@ -118,21 +150,28 @@ u"C'est trop d'honneur.",
 u"Vous êtes bien aimable."
 ]
 
-# config merci
-merci_triggers=[u"merci",u"remercie",u"thx",u"thank(|s)"]
-merci_answers=[u"Mais de rien.",u"À votre service. ;)",u"Quand vous voulez. :)",
+#: config merci
+merci_triggers = [u"merci", u"remercie", u"thx", u"thank(|s)"]
+merci_answers = [
+u"Mais de rien.",
+u"À votre service. ;)",
+u"Quand vous voulez. :)",
 u"Tout le plaisir est pour moi."]
 
-# config "ta mère" 
-tamere_triggers=[u"ta mère"]
-tamere_answers=[u"Laissez donc ma mère en dehors de ça !",
+#: config "ta mère" 
+tamere_triggers = [u"ta mère"]
+tamere_answers = [
+u"Laissez donc ma mère en dehors de ça !",
 u"Puis-je préciser que je n'ai pas de mère ? Seulement deux pères…",
 u"""Un certain Max chantait "♩ J'ai vu ta mère sur chat rouleeeeeeette ♫", vous êtes de sa famille ?""",
 u"""N'avait-on pas dit "pas les mamans" ?"""]
 
-# config pour les actions désagréables à Basile
-bad_action_triggers=[u"(frappe|cogne|tape)(| sur)",u"(démolit|dégomme|fouette|agresse|tabasse)",
-u"(vomit|pisse|chie|crache) sur",u"slap(|s)"]
+#: config pour les actions désagréables à Basile
+bad_action_triggers = [
+u"(frappe|cogne|tape)(| sur)",
+u"(démolit|dégomme|fouette|agresse|tabasse)",
+u"(vomit|pisse|chie|crache) sur",
+u"slap(|s)"]
 bad_action_answers=[
 u"Je ne peux pas dire que j'apprécie, mais je l'ai sans doute bien mérité.",
 u"{}: Pourquoi tant de violence en ce monde si doux ?",
@@ -142,33 +181,113 @@ u"{}: Entre nous, cela vous gratifie-t-il ?",
 u"{}: Une telle relation entre nous deux n'est pas saine, revenons à quelque chose de plus conventionnel. :D",
 u"J'ai la désagréable impression que {} cherche comment tuer le temps en ce moment…"
 ]
-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à ?"]
-
-# config pour les actions agréables à Basile
-good_action_triggers=[u"fait (:?des bisous|un c(?:â|a)lin|des c(?:â|a)lins) à",u"embrasse",u"c(?:â|a)line",u"caresse"]
-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…"]
-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"]
-
-# config bonjour/bonsoir/que fais-tu encore debout à cette heure, gros sale !
-bonjour_triggers=[u"(s|)(a|'|)lu(t|)",u"hello",u"pl(o|i)p",u"pr(ou|ü)t",u"bonjour",u"bonsoir",u"coucou"]
-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"]
-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é."]
-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, {} ?"]
+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à ?"]
+
+#: config pour les actions agréables à Basile
+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"]
+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…"]
+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"]
+
+#: config bonjour/bonsoir/que fais-tu encore debout à cette heure, gros sale !
+bonjour_triggers = [u"(s|)(a|'|)lu(t|)", u"hello", u"pl(o|i)p", u"pr(ou|ü)t", u"bonjour", u"bonsoir", u"coucou"]
+bonjour_answers = [u"Bien le bonjour, {}.", u"Bonjour {}.", u"{}: bonjour.", u"{}: Quel beau temps aujourd'hui (arrêtez-moi si je me trompe) !"]
+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é."]
+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, {} ?"]
 daytime = [7,18]
 nighttime = [3, 6]
 
-# config dodo
-bonne_nuit_triggers=[u"bonne nuit",u"'?nite",u"'?nuit",u"'?night",u"good night",u"'?nenuit"]
-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 !"]
+#: pan
+pan_triggers = [u"pan", u"bim", u"bang"]
+
+#: config dodo
+bonne_nuit_triggers = [u"bonne nuit", u"'?nite", u"'?nuit", u"'?night", u"good night", u"'?nenuit"]
+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 !"]
 
-# config PEB est encore en train d'abuser de ses droits.
-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 !"]
-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."]
+#: config PEB est encore en train d'abuser de ses droits.
+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 !"]
+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."]
 
-# config on m'a demandé de mourir/partir
-quit_messages=[u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."]
-leave_messages=quit_messages
+#: config on m'a demandé de mourir/partir
+quit_messages = [u"Bien que cela me désole, je me vois dans l'obligation de vous abandonner."]
+leave_messages = quit_messages
 
 quit_fail_messages = [u"Navré, mais je me vois contraint de refuser, je ne peux pas céder aux exigences du premier venu."]
 leave_fail_messages = quit_fail_messages
 pas_programme_pour_tobeir = [u"Encore eût-il fallu que je fusse programmé pour vous obéir !"]
+
+#: Aide sur les commandes
+helpdico = {
+"help" : [u"""HELP <commande>
+ Affiche de l'aide sur la commande""", None, None],
+
+"identify" : [u"""IDENTIFY <username> <password>
+ Vérifie le mot de passe et me permet de savoir à l'avenir quel est votre pseudo note kfet.
+ Sans paramètre, je vous précise sous quel pseudo je vous connais.""", None, None],
+
+"drop" : [u"""DROP <password>
+ Vérifie le mot de passe et me fait d'oublier votre pseudo note kfet.""", None, None],
+
+"solde" : [u"""SOLDE
+ Affiche votre solde, si je connais votre pseudo note kfet.""",
+ u"""SOLDE <pseudo>
+ Affiche le solde de la personne désignée (par son pseudo note).""", None],
+
+"join" : [None, u"""JOIN <channel>
+ Me fait rejoindre le channel""", None],
+
+"leave" : [None, u"""LEAVE <channel>
+ Me fait quitter le channel (sauf s'il est dans ma stay_list).""", None],
+
+"quiet" : [None, u"""QUIET <channel>
+ Me rend silencieux sur le channel.""", None],
+
+"noquiet" : [None, u"""NOQUIET <channel>
+ Me rend la parole sur le channel.""", None],
+
+"lost" : [None, u"""LOST <channel>
+ Me fait perdre sur le channel.""", None],
+
+"reconnect" : [None, u"""RECONNECT
+ Établit à nouveau la connexion avec le serveur NK2015""", None],
+
+"reload" : [None, u"""RELOAD
+ Recharge la configuration.""", None],
+
+"say" : [None, None, u"""SAY <channel> <message>
+ Me fait parler sur le channel."""],
+
+"do" : [None, None, u"""DO <channel> <action>
+ Me fait faitre une action (/me) sur le channel."""],
+
+"stay" : [None, None, u"""STAY <channel>
+ Ajoute le channel à ma stay_list."""],
+
+"nostay" : [None, None, u"""NOSTAY <channel>
+ Retire le channel de ma stay_list."""],
+
+"ops" :  [None, None, u"""OPS
+ Affiche la liste des ops."""],
+
+"overops" : [None, None, u"""OVEROPS
+ Affiche la liste des overops."""],
+
+"kick" : [None, None, u"""KICK <channel> <pseudo> [<raison>]
+ Kicke <pseudo> du channel (Il faut bien entendu que j'y sois op)."""],
+
+"die" : [None, None, u"""DIE
+ Me déconnecte du serveur IRC."""],
+
+"crash" : [None, None, u"""CRASH
+ Me fait crasher"""]
+ }
+
+#: Message d'aide par défaut
+helpmsg_default = u"Liste des commandes disponibles :\nHELP IDENTIFY DROP SOLDE"
+#: Message d'aide par défaut à ajouter pour les OPs
+helpmsg_ops = u" JOIN LEAVE QUIET NOQUIET LOST RECONNECT RELOAD"
+#: Message d'aide par défaut à ajouter pour les OVEROPs
+helpmsg_overops = u" SAY DO STAY NOSTAY OPS OVEROPS KICK DIE CRASH"
+
+#: Liste de paires de masques ``[black, exceptlist]`` : on blacklistera ce qui match ``black``
+#: et aucun élément de ``exceptlist``
+blacklisted_masks = [("Flo!*@*", [])]