lgrez.LGBot (classe principale)

class lgrez.LGBot(command_prefix='!', case_insensitive=True, description=None, intents=None, member_cache_flags=None, **kwargs)[source]

Bot Discord pour parties de Loup-Garou à la PCéenne.

Classe fille de discord.ext.commands.Bot, implémentant les commandes et fonctionnalités du Loup-Garou de la Rez.

Paramètres

Avertissement

LG-Bot n’est pas thread-safe : seule une instance du bot peut tourner en parallèle dans un interpréteur.

(Ceci est du aux objets de config, contenant directement le bot, le serveur Discord, la session de connexion BDD… ; cette limitation résulte d’une orientation volontaire du module depuis sa version 2.0 pour simplifier et optimiser la manipulation des objects et fonctions).

GUILD_ID

L’ID du serveur sur lequel tourne le bot (normalement toujours config.guild .id). Vaut None avant l’appel à run(), puis la valeur de la variable d’environnement LGREZ_SERVER_ID.

Type

int

in_command

IDs des salons dans lequels une commande est en cours d’exécution.

Type

list[int]

in_stfu

IDs des salons en mode STFU.

Type

list[int]

in_fals

IDs des salons en mode Foire à la saucisse.

Type

list[int]

tasks

Tâches planifiées actuellement en attente. Privilégier plutôt l’emploi de bdd.Tache.handler.

Type

dict[int (bdd.Tache.id), asyncio.TimerHandle]

async on_guild_channel_delete(channel)[source]
async on_guild_channel_update(before, after)[source]
async on_guild_channel_create(channel)[source]
async on_guild_role_delete(role)[source]
async on_guild_role_update(before, after)[source]
async on_guild_role_create(role)[source]
async on_guild_emojis_update(guild, before, after)[source]
async on_webhooks_update(channel)[source]

Méthodes appelées par Discord aux différents évènements correspondants.

LG-Bot n’utilise ces méthodes que pour vérifier qu’aucun objet indispensable au fonctionnement du bot n’a été altéré (voir check_and_prepare_objects()).

async on_ready()[source]

Méthode appellée par Discord au démarrage du bot.

Vérifie le serveur (appelle check_and_prepare_objects()), log et affiche publiquement que le bot est fonctionnel (activité) ; restaure les tâches planifiées éventuelles et exécute celles manquées.

Si config.output_liveness vaut True, lance bot.i_am_alive (écriture chaque minute sur un fichier disque)

Voir discord.on_ready() pour plus d’informations.

async on_member_join(member)[source]

Méthode appellée par l’API à l’arrivée d’un nouveau membre.

Log et lance le processus d’inscription.

Ne fait rien si l’arrivée n’est pas sur le serveur config.guild.

Paramètres

member (discord.Member) – Le membre qui vient d’arriver.

Voir discord.on_member_join() pour plus d’informations.

async on_member_remove(member)[source]

Méthode appellée par l’API au départ d’un membre du serveur.

Log en mentionnant les MJs.

Ne fait rien si le départ n’est pas du serveur config.guild.

Paramètres

member (discord.Member) – Le joueur qui vient de partir.

Voir discord.on_member_remove() pour plus d’informations.

async on_message(message)[source]

Méthode appellée par l’API à la réception d’un message.

Invoque l’ensemble des commandes, ou les règles d’IA si
  • Le message n’est pas une commande

  • Le message est posté dans un channel privé (dont le nom commence par config.private_chan_prefix)

  • Il n’y a pas déjà de commande en cours dans ce channel

  • Le channel n’est pas en mode STFU

Ne fait rien si le message n’est pas sur le serveur config.guild, si il est envoyé par le bot lui-même ou par un membre sans aucun rôle affecté.

Paramètres

member (discord.Member) – Le joueur qui vient d’arriver.

Voir discord.on_message() pour plus d’informations.

async on_raw_reaction_add(payload)[source]

Méthode appellée par l’API à l’ajout d’une réaction.

Appelle la fonction adéquate si le membre est un joueur inscrit, est sur un chan de conversation bot et a cliqué sur config.Emoji.bucher, maire, lune ou action.

Ne fait rien si la réaction n’est pas sur le serveur config.guild.

Paramètres

payload (discord.RawReactionActionEvent) – Paramètre limité (car le message n’est pas forcément dans le cache du bot, par exemple si il a été reboot depuis).

Quelques attributs utiles :

Voir discord.on_raw_reaction_add() pour plus d’informations.

async on_command_error(ctx, exc)[source]

Méthode appellée par l’API à un exception dans une commande.

Analyse l’erreur survenue et informe le joueur de manière adéquate en fonction, en mentionnant les MJs si besoin.

Ne fait rien si l’exception n’a pas eu lieu sur le serveur config.guild.

Paramètres

Voir discord.on_command_error() pour plus d’informations.

async on_error(event, *args, **kwargs)[source]

Méthode appellée par l’API à une exception hors commande.

Log en mentionnant les MJs. Cette méthode permet de gérer les exceptions sans briser la loop du bot (i.e. il reste en ligne).

Paramètres
  • event (str) – Nom de l’évènement ayant généré une erreur ("member_join", "message"…)

  • *args – Arguments passés à la fonction traitant l’évènement : member, message

  • **kwargs – Arguments passés à la fonction traitant l’évènement : member, message

Voir discord.on_error() pour plus d’informations.

async check_and_prepare_objects()[source]

Vérifie et prépare les objets Discord nécessaires au bot.

Remplit config.Role, config.Channel, config.Emoji, config.private_chan_category_name, config.boudoirs_category_name et config.webhook avec les objets Discord correspondants, et avertit les MJs en cas d’éléments manquants.

i_am_alive(filename='alive.log')[source]

Témoigne que le bot est en vie et non bloqué.

Exporte le temps actuel (UTC) et planifie un nouvel appel dans 60s. Ce processus n’est lancé que si config.output_liveness est mis à True (opt-in).

Paramètres

filename (str) – fichier où exporter le temps actuel (écrase le contenu).

run(**kwargs)[source]

Prépare puis lance le bot (bloquant).

Récupère les informations de connexion, établit la connexion à la base de données puis lance le bot.

Paramètres

**kwargs – Passés à discord.ext.commands.Bot.run().