lgrez.config (variables globales)

lg-rez / Variables globales

Personalisation de différents paramètres et accès global

lgrez.config.guild

Le serveur Discord sur lequel se déroule la partie.

Lève une NotReadyError avant l’appel de LGBot.on_ready().

Type

discord.Guild

lgrez.config.bot

Le bot en activité.

Lève une NotReadyError avant l’appel à LGBot.run().

Type

LGBot

lgrez.config.loop

La boucle asynchrone d’évènement utilisée par le bot et les tâches planifiées (raccourci pour pour config.bot.loop).

Lève une NotReadyError avant l’appel de LGBot.on_ready().

Type

asyncio.AbstractEventLoop

lgrez.config.engine

Le moteur de connexion à la base de données.

Lève une NotReadyError avant l’appel à bdd.connect() (inclus dans LGBot.run()).

Type

sqlalchemy.engine.Engine

lgrez.config.session

La session de transaction avec la base de données.

Lève une NotReadyError avant l’appel à bdd.connect() (inclus dans LGBot.run()).

Type

sqlalchemy.orm.session.Session

lgrez.config.webhook

Le webhook utilisé par les tâches planifiées. Poste dans config.Channel.logs.

Lève une NotReadyError avant l’appel de LGBot.on_ready().

Type

discord.Webhook

lgrez.config.server_structure = {'afk_channel': None, 'afk_timeout': 300, 'base_role': '@everyone', 'categories': {'boudoirs': {'channels': {'about': {'name': 'information-boudoirs', 'overwrites': {'@everyone': {'read_messages': False}, 'joueur_en_vie': {'read_messages': True, 'send_messages': False}, 'joueur_mort': {'read_messages': True}, 'observateur': {'read_messages': True}}, 'topic': "Oui c'est un nom à la con, non t'as pas le droit de le dire."}}, 'name': 'BOUDOIRS', 'overwrites': {'@everyone': {'read_messages': False}, 'observateur': {'read_messages': True}}, 'voice_channels': {}}, 'conversations_camps': {'channels': {'enfer': {'name': 'enfer', 'overwrites': {'@everyone': {'read_messages': False}, 'joueur_mort': {'read_messages': True, 'send_messages': True}, 'observateur': {'read_messages': True}}, 'topic': 'Oh bah non, vous êtes morts'}, 'exorcistes_1': {'name': 'prétoire-des-exorcistes', 'overwrites': {}, 'topic': None}, 'exorcistes_2': {'name': 'aréopage-des-exorcistes', 'overwrites': {}, 'topic': None}, 'loups': {'name': 'tanière-des-loups', 'overwrites': {}, 'topic': 'Aouuuuuuuuu'}}, 'name': 'CONVERSATIONS CAMPS', 'overwrites': {'@everyone': {'read_messages': False}, 'observateur': {'read_messages': True}}, 'voice_channels': {}}, 'informations': {'channels': {'bienvenue': {'name': 'bienvenue', 'overwrites': {'@everyone': {'read_messages': True, 'send_messages': False}}, 'topic': 'Bonjour à tous !'}, 'meta': {'name': 'meta', 'overwrites': {'@everyone': {'send_messages': None}}, 'topic': 'Salon pour parler de tout ce qui est extérieur au jeu : le serveur, le bot... (mais pas de spam)'}, 'regles': {'name': 'règles', 'overwrites': {}, 'topic': lire !'}, 'roles': {'name': 'rôles', 'overwrites': {}, 'topic': 'Liste des rôles (accessible en faisant !roles)'}}, 'name': 'INFORMATIONS', 'overwrites': {'@everyone': {'send_messages': False}}, 'voice_channels': {}}, 'mjs_home': {'channels': {'general': {'name': 'général', 'overwrites': {}, 'topic': 'Le QG des Moussaillons Joyeux'}, 'ideas': {'name': 'boîte-à-idées', 'overwrites': {}, 'topic': "Toutes les possibilités d'amélioration pour le futur"}, 'logs': {'name': 'logs', 'overwrites': {}, 'topic': 'Logs techniques du bot'}, 'lore': {'name': 'le-lore', 'overwrites': {}, 'topic': 'Ici on raconte des histoires'}, 'prices': {'name': 'prix', 'overwrites': {}, 'topic': 'Une remise des quoi ???'}, 'resolution': {'name': 'résolution', 'overwrites': {}, 'topic': 'Alors, qui va mourir ce soir ?'}, 'rules_details': {'name': 'titillage-de-règles', 'overwrites': {}, 'topic': 'OK, mais si un mage mage un mage qui mage un mage ?'}, 'spam_for_mjs': {'name': 'spam-mais-pour-les-mjs', 'overwrites': {}, 'topic': 'Tout est dans le titre'}, 'tech': {'name': 'technique', 'overwrites': {}, 'topic': 'Pour lancer toutes les commandes'}}, 'name': 'MANOIR DES MJS 🏰', 'overwrites': {'@everyone': {'read_messages': False}, 'observateur': {'read_messages': True}}, 'voice_channels': {'general': {'name': 'Général', 'overwrites': {}}, 'tech': {'name': 'Tech', 'overwrites': {}}}}, 'old_boudoirs': {'channels': {}, 'name': 'CIMETIÈRE DES BOUDOIRS', 'overwrites': {'@everyone': {'read_messages': False}, 'observateur': {'read_messages': True}}, 'voice_channels': {}}, 'private_chan': {'channels': {}, 'name': 'CONVERSATION BOT', 'overwrites': {'@everyone': {'read_messages': False}, 'observateur': {'read_messages': True}}, 'voice_channels': {}}, 'village_place': {'channels': {'annonces': {'name': 'annonces', 'overwrites': {'@everyone': {'send_messages': False}}, 'topic': 'Pour tout savoir sur les morts, les informations importantes et la partie en général !'}, 'debats': {'name': 'débats', 'overwrites': {}, 'topic': 'Salon principal, pour parler du jeu !'}, 'haros': {'name': 'haros', 'overwrites': {'@everyone': {'send_messages': False}}, 'topic': "Postez dans ce chan en utilisant !haro / !candid pendant les horaires d'ouvertures du vote ! Seuls les joueurs ayant été accusés peuvent être tués au vote."}, 'spam': {'name': 'spam', 'overwrites': {}, 'topic': 'SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPMA SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM'}}, 'name': 'PLACE DU VILLAGE', 'overwrites': {}, 'voice_channels': {}}}, 'default_notifications': 'only_mentions', 'emojis': {'drive': True, 'folder_path_or_id': '188HSkUVKdwmx6RjKdcnIX0GeAP-b-h7r', 'required': {'action': 'action', 'bucher': 'bucher', 'ha': 'ha', 'lune': 'lune', 'maire': 'maire', 'ro': 'ro', 'void': 'void'}, 'restrict_roles': {'action': ['bot'], 'bucher': ['bot'], 'lune': ['bot'], 'maire': ['bot']}}, 'everyone_permissions': ['embed_links', 'attach_files', 'add_reactions', 'use_external_emojis', 'read_message_history', 'send_tts_messages', 'use_slash_commands', 'connect', 'speak', 'stream', 'use_voice_activation'], 'explicit_content_filter': 'disabled', 'icon': {'drive': True, 'png_path_or_id': '13AmXXo_uF1prMAc6csJQ-pHGQ3A7Ux--'}, 'name': 'LG-Rez Server', 'preferred_locale': 'fr', 'roles': {'bot': {'color': '9b59b6', 'hoist': True, 'mentionable': False, 'name': 'Bot', 'permissions': 'all'}, 'joueur_en_vie': {'color': '70ad47', 'hoist': True, 'mentionable': False, 'name': 'Joueur en vie', 'permissions': ['read_messages', 'send_messages']}, 'joueur_mort': {'color': '992d22', 'hoist': True, 'mentionable': False, 'name': 'Joueur mort', 'permissions': ['read_messages']}, 'maire': {'color': 'f1c40f', 'hoist': True, 'mentionable': True, 'name': 'Maire', 'permissions': ['mention_everyone']}, 'mj': {'color': '64b9e9', 'hoist': True, 'mentionable': True, 'name': 'MJ', 'permissions': 'all'}, 'observateur': {'color': '648080', 'hoist': True, 'mentionable': False, 'name': 'Observateur', 'permissions': []}, 'redacteur': {'color': '607d8b', 'hoist': False, 'mentionable': False, 'name': 'Rédacteur', 'permissions': []}}, 'system_channel': 'logs', 'system_channel_flags': {'join_notifications': True, 'premium_subscriptions': True}, 'verification_level': 'none'}

Structure du serveur utilisée par !setup (serveur, rôles, salons, emojis). Voir le fichier `server_structure.json (valeur par défaut) pour les possibilités de personnalisation.

Type

dict[str, Any]

lgrez.config.private_chan_prefix = 'conv-bot-'

Préfixe des noms des salons de conversation bot.

Type

str

lgrez.config.private_chan_category_name = 'CONVERSATION BOT'

Nom de la catégorie des conversations bot, pour l’inscription (sera éventuellement suivi de 2, 3… si plus de 50 joueurs). Devrait correspondre à au nom de la catégorie correspondante dans server_structure ["categories"]

Type

str

lgrez.config.boudoirs_category_name = 'BOUDOIRS'

Nom de la catégorie des boudoirs (sera éventuellement suivi de 2, 3… si plus de 50 boudoirs). Devrait correspondre à au nom de la catégorie correspondante dans server_structure ["categories"]

Type

str

lgrez.config.old_boudoirs_category_name = 'CIMETIÈRE DES BOUDOIRS'

Nom de la catégorie des boudoirs devenus inutiles (sera éventuellement suivi de 2, 3… si plus de 50 boudoirs). Devrait correspondre à au nom de la catégorie correspondante dans server_structure ["categories"]

Type

str

lgrez.config.debut_saison = '32 plopembre'

Date de début de saison (pour information lors de l’inscription).

Type

str

lgrez.config.demande_chambre = True

Si False, le processus d’insciption ne demandera pas la chambre des joueurs, qui seront tous inscrits en chambre_mj (et la chambre ne sera pas indiquée dans !vivants).

Type

bool

lgrez.config.chambre_mj = '[chambre MJ]'

Nom par défaut de la chambre des joueurs.

Type

str

async lgrez.config.additional_inscription_step(member, chan)[source]

Coroutine permettant d’ajouter des étapes au processus d’inscription.

Cette coroutine est appelée par features.inscription.main() juste avant l’inscription en base. Si elle renvoie False, l’inscription est annulée ; si elle ne renvoie rien ou une autre valeur, elle continue selon le processus habituel.

Paramètres
Renvoie

Si False, annule l’inscription.

lgrez.config.output_liveness = False

Si True, le bot appellera LGBot.i_am_alive() toutes les 60 secondes. Ce n’est pas activé par défaut.

Type

bool

lgrez.config.default_role_slug = 'nonattr'

slug du rôle par défaut, attribué aux joueurs lors de l’inscription (renvoyé par bdd.Role.default()). Doit correspodre à un rôle existant (défini dans le GSheet Rôles et actions).

Type

str

lgrez.config.default_camp_slug = 'nonattr'

slug du camp par défaut, attribué aux joueurs lors de l’inscription (renvoyé par bdd.Camp.default()). Doit correspodre à un camp existant (défini dans le GSheet Rôles et actions).

Type

str

lgrez.config.tdb_main_sheet = 'Journée en cours'

Nom de la feuille du Tableau de bord contenant l’état actuel des joueurs, sur laquelle sont effectuées les modifications.

Type

str

lgrez.config.tdb_votes_sheet = 'Journée en cours'

Nom de la feuille du Tableau de bord contenant les résultats des votes (après corrections manuelles éventuelles).

Type

str

lgrez.config.tdb_header_row = 3

Numéro de la ligne de la feuille principale (tdb_main_sheet) du Tableau de bord contenant les noms des colonnes (commençant de 1).

Type

int

lgrez.config.tdb_id_column = 'A'

Nom de la colonne de la feuille principale (tdb_main_sheet) du Tableau de bord contenant les IDs Discord des joueurs.

Type

str

lgrez.config.tdb_main_columns = ('J', 'Q')

Noms de la première et de la dernière colonne de la zone de la feuille principale (tdb_main_sheet) du Tableau de bord contenant les informations (colonnes de la BDD) des joueurs.

Type

tuple[str]

lgrez.config.tdb_tampon_columns = ('B', 'I')

Noms de la première et de la dernière colonne de la zone de la feuille principale (tdb_main_sheet) du Tableau de bord contenant l’ancien état des informations des joueurs (avant !sync).

Type

tuple[str]

lgrez.config.max_ciblages_per_action = 3

Nombre maximal de modèles de ciblages (bdd.BaseCiblage) renseignés pour chaque modèle d’action (bdd.BaseAction), à droite de la feuille baseactions du GSheet Rôles et actions.

Type

int

lgrez.config.modif_vote_baseaction = 'modification-vote'

bdd.BaseAction.slug de l’action de base permettant de modifier un vote (rôle de l”Intigant dans le jeu PCéen). Cette baseaction doit avoir deux ciblages de slugs « cible » et « vote ».

Type

str

lgrez.config.ajout_vote_baseaction = 'ajout-vote'

bdd.BaseAction.slug de l’action de base permettant d’ajouter un/des vote(s) (rôle du Corbeau dans le jeu PCéen).

Type

str

lgrez.config.n_ajouts_votes = 2

Nombre de votes ajoutés par l’action ajout_vote_baseaction.

Type

int

lgrez.config.db_votecond_sheet = 'votecond_brut'

Nom de la feuille du GSheet Données brûtes où enregistrer les votes brutes pour le condamné du jour.

Type

str

lgrez.config.db_votemaire_sheet = 'votemaire_brut'

Nom de la feuille du GSheet Données brûtes où enregistrer les votes brutes pour le nouveau maire.

Type

str

lgrez.config.db_voteloups_sheet = 'voteloups_brut'

Nom de la feuille du GSheet Données brûtes où enregistrer les votes brutes pour le vote des loups.

Type

str

lgrez.config.db_actions_sheet = 'actions_brut'

Nom de la feuille du GSheet Données brûtes où enregistrer les actions effectuées.

Type

str

lgrez.config.stop_keywords = ['stop', '!stop']

Mots-clés (en minuscule) utilisables (quelque soit la casse) pour arrêter une commande en cours d’exécution.

Type

list[str]

lgrez.config.refills_full = ['weekends']

Mots-clés de rechargement (dans bdd.BaseAction.refill) permettant de recharger une action à son nombre de charges initial.

Type

list[str]

lgrez.config.refills_one = ['forgeron', 'rebouteux', 'divin']

Mots-clés de rechargement (dans bdd.BaseAction.refill) permettant de recharger une action de une charge.

Type

list[str]

lgrez.config.refills_divins = ['divin']

Mots-clés de rechargement (dans bdd.BaseAction.refill) à utiliser par le MJ pour ajouter une charge à une action.

Type

list[str]

lgrez.config.is_ready = False

Indique si le bot est prêt (LGBot.on_ready() appelé) N’est pas concu pour être changé manuellement.

Type

bool

lgrez.config.is_setup = True

Indique si le serveur est construit (!setup appelé) N’est pas conçu pour être changé manuellement.

Type

bool

class lgrez.config.Role(*args, **kwargs)[source]

Rôles Discord nécessaires au jeu

Cette classe dérive de ready_check.ReadyCheck : accéder aux attributs ci-dessous avant que le bot ne soit connecté au serveur lève une NotReadyError.

Plus précisément, LGBot.on_ready() remplace le nom du rôle par l’objet discord.Role correspondant : si les noms des rôles sur Discord ont été modifiés, indiquer leur nom ici (lgrez.config.Role.x = "nouveau nom") avant de lancer le bot, sans quoi LGBot.on_ready() lèvera une erreur.

Ne pas instancier cette classe.

Rôles utilisés (dans l’ordre hiérarchique conseillé) :

mj

Maître du Jeu. Nom par défaut : « MJ ».

joueur_en_vie

Joueur vivant, pouvant parler publiquement. Nom par défaut : « Joueur en vie ».

joueur_mort

Joueur mort, ne pouvant pas parler publiquement. Nom par défaut : « Joueur mort ».

maire

Joueur élu Maire, mis en avant et pouvant utiliser @everyone. Nom par défaut : « Maire ».

redacteur

Rôle permettant à un joueur d’utiliser les commandes de gestion d’IA (voir features.gestion_ia.GestionIA). Mettre le même nom que le rôle des MJs si vous voulez supprimer ce rôle. Nom par défaut : « Rédacteur ».

everyone

Rôle de base. Les joueurs dont le rôle le plus élevé est ce rôle (ou moins) seront ignorés par le bot. Nom par défaut: « @everyone » (rôle Discord de base)

class lgrez.config.Channel(*args, **kwargs)[source]

Salons Discord nécessaires au jeu

Cette classe dérive de ready_check.ReadyCheck : accéder aux attributs ci-dessous avant que le bot ne soit connecté au serveur lève une NotReadyError.

Plus précisément, LGBot.on_ready() remplace le nom du rôle par l’objet discord.TextChannel correspondant : si les noms des salons sur Discord ont été modifiés, indiquer leur nom ici (lgrez.config.Channel.x = "nouveau nom") avant de lancer le bot, sans quoi LGBot.on_ready() lèvera une erreur.

Ne pas instancier cette classe.

Salons utilisés (dans l’ordre d’affichage conseillé) :

roles

Salon listant les rôles (catégorie Informations). Nom par défaut : « roles ».

logs

Salon pour les messages techniques (catégorie réservée aux MJs). Nom par défaut : « logs ».

annonces

Salon d’annonces (catégorie Place du village). Nom par défaut : « annonces ».

haros

Salon des haros et candidatures (catégorie Place du village). Nom par défaut : « haros ».

debats

Salon de discussion principal (catégorie Place du village). Nom par défaut : « débats ».

class lgrez.config.Emoji(*args, **kwargs)[source]

Emojis Discord nécessaires au jeu

Cette classe dérive de ready_check.ReadyCheck : accéder aux attributs ci-dessous avant que le bot ne soit connecté au serveur lève une NotReadyError.

Plus précisément, LGBot.on_ready() remplace le nom du rôle par l’objet discord.Emoji correspondant : si les noms des emojis sur Discord ont été modifiés, indiquer leur nom ici (lgrez.config.Emoji.x = "nouveau nom") avant de lancer le bot, sans quoi LGBot.on_ready() lèvera une erreur.

Ne pas instancier cette classe.

Emojis utilisés (noms par défaut identiques aux noms des attributs) :

ha
ro

Accolés, forment le mot « haro »

bucher

Représente le vote pour le condamné du jour

maire

Représente le vote pour le nouveau maire

lune

Représente le vote des loups

action

Représente les actions de rôle

void

Image vide, pour séparations verticales et autres filouteries

lgrez.config.set_config_from_server_structure()[source]

Deduce some configuration values from server structure.

Call this function after customizing server_structure, but BEFORE launching the bot! Should never be called at runtime.