Boty Discord

Quatre bots de production qui gèrent les serveurs de nos marques. Ticketing avec ping de l'équipe, accueil des nouveaux membres, vérification des e-mails et rangement des rôles - le tout adapté à chaque serveur. Ils déchargent le support et maintiennent l'hygiène de la communauté sans travail manuel.

Boty Discord
TL;DR

Quatre bots de production, chacun adapté à un serveur précis : gestion des tickets avec un ping à la bonne équipe, accueils et onboarding, vérification e-mail à l'arrivée, entretien des rôles. Tous reposent sur un noyau unique et une architecture de cogs, de sorte que chaque serveur ne prend que les fonctions dont il a vraiment besoin. Une nouvelle fonction est un nouveau cog, pas un if de plus dans un monolithe.

Introduction

Les communautés de nos marques vivent sur Discord, pas sur un site. C'est là qu'arrive un nouveau client, là qu'il ouvre un ticket, là qu'il attend le rôle qui donne accès aux bons canaux. À quelques centaines de membres, gérer à la main les tickets, les accueils et les rôles cesse simplement de tenir - il faut que quelqu'un soit là, regarde et clique, et cela ne passe pas à l'échelle avec le nombre de gens.

Au lieu d'écrire un bot universel pour tout faire, nous avons construit un noyau et un jeu de modules à partir desquels chaque bot est assemblé séparément. Quatre serveurs, quatre rôles, quatre configurations - mais un seul endroit où vit la logique. Cette étude de cas explique pourquoi cette séparation a rapporté plus qu'un monolithe qui aurait été commode au départ.

Pourquoi pas un seul bot pour tout

Il est tentant d'écrire un bot qui fait tout le travail sur chaque serveur. Le problème, c'est que chaque serveur a des besoins un peu différents : une équipe différente à pinguer sur un ticket, un parcours d'arrivée différent pour un nouveau membre, des rôles différents et un seuil de vérification différent. Un bot universel censé les gérer tous devient avec le temps un sapin de Noël de drapeaux auquel personne ne veut toucher, parce qu'on ne sait pas ce qui en dépend encore.

Le second piège, c'est l'état partagé. Un processus qui sert quatre serveurs à la fois est un point de défaillance unique - un bug dans la logique des tickets peut faire tomber les accueils sur un serveur tout à fait différent. Et plus un serveur transporte de code inutilisé, plus il est difficile d'y changer quoi que ce soit en toute sécurité.

Un noyau, de nombreux cogs

Nous avons pris l'autre voie : un noyau avec des modules, qu'on appelle cogs dans l'écosystème Discord, et chaque bot est un jeu de cogs activés. Le serveur de tickets prend le cog tickets ; un serveur qui n'en a pas besoin ne l'active tout simplement pas.

Monolithe contre un noyau avec cogs

AspectUn bot pour toutNoyau avec cogs
Nouvelle fonctionun if de plus à l'intérieurun cog nouveau et isolé
Serveur sans une fonctiontransporte quand même son codene l'active tout simplement pas
Panne d'un modulerisque pour l'ensemblelimitée au cog
Correction de logiquerecherche dans le monolitheun seul endroit, partout où le cog est actif

Quatre bots, quatre rôles

En pratique, l'écosystème, ce sont quatre bots distincts, chacun faisant une chose bien. Le bot de tickets ouvre des fils de tickets et pingue la bonne équipe pour qu'un signalement ne reste pas dans le vide. Le bot d'accueil guide un nouveau membre à travers ses premiers pas. Le bot de vérification confirme une adresse e-mail à l'arrivée. Le bot de rôles maintient l'hygiène des rôles et les attribue automatiquement.

Cette séparation n'est pas cosmétique. Chaque bot a son propre périmètre de permissions et son propre état, de sorte que la panne de l'un n'entraîne pas les autres, et qu'un changement dans l'un n'oblige pas à penser aux trois autres. Seul le noyau est partagé - comment un cog s'accroche au bot, comment il lit la configuration et comment il parle à l'API.

Quatre bots, quatre rôles

BotCe qu'il faitCog clé
Ticketsouvre des fils de tickets et pingue la bonne équipetickets
Accueilonboarding et premiers pas d'un nouveau membrewelcome
Vérificationconfirmation de l'adresse e-mail à l'arrivéemailcheck
Rôlesattribution automatique et hygiène des rôlesroles

À quoi ressemble un cog

Un cog est une unité autonome : ses propres commandes, ses propres écouteurs, son propre état. Vous l'accrochez au bot en une ligne et vous le détachez de même. Il n'y a aucun enchevêtrement global - le cog tickets ne sait rien du cog rôles et n'en a pas besoin. Ci-dessous un extrait de la vérification : un nouveau membre reçoit un rôle d'attente et une invitation à confirmer son adresse avant de voir le reste du serveur.

verify.py · python
class VerifyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_member_join(self, member):
        pendingRole = member.guild.get_role(self.pendingRoleId)
        await member.add_roles(pendingRole)
        await self.sendVerifyPrompt(member)

Des noms comme on_member_join ou add_roles sont imposés par l'API Discord et restent tels quels - le reste des identifiants suit notre propre convention. C'est la frontière où l'on suit la bibliothèque, pas son propre style, et le seul endroit où deux conventions de nommage se mélangent.

i
À noter

La vérification e-mail à l'arrivée n'est pas un ornement. La défense la moins coûteuse contre une vague de faux comptes est un seuil que les bots qui s'inscrivent en masse doivent franchir - confirmer une vraie adresse en élimine la plupart avant même qu'ils voient les canaux. Le rôle d'attente maintient un nouveau membre à la porte jusqu'à la confirmation.

Ce qui reste du côté de la maintenance

Le plus grand gain n'est pas visible sur le serveur mais dans la façon dont ces bots sont maintenus. Une correction dans la logique des tickets atterrit à un seul endroit et atteint partout où ce cog est activé - vous ne la réécrivez pas quatre fois et vous n'oubliez pas un serveur. Aucun serveur ne transporte de code qu'il n'utilise pas, donc sa configuration est exactement aussi complexe que ses besoins réels.

4
bots de production
1
noyau commun au lieu de quatre séparés
n
cogs activés par serveur

Ajouter un cinquième serveur ne signifie pas écrire un cinquième bot de zéro. On l'assemble à partir de ce qui existe déjà : on prend les cogs qui conviennent, on règle la configuration, et voilà. C'est la différence entre quatre projets séparés et un écosystème qui grandit en ajoutant des modules, pas en multipliant du code.

Plus de projets

D'autres réalisations de la même catégorie - découvrez comment nous abordons des défis similaires.

Vous avez un projet similaire ?

Contactez-nous - le devis est gratuit et arrive sous une heure.