Que fait architecte-bot-discord ?
Compétence spécialisée pour construire des bots Discord prêts pour la production. Couvre Discord.js (JavaScript) et Pycord (Python), les intentions de passerelle, les commandes slash, les composants interactifs, la limitation de débit et le partitionnement.
Aperçu
Cette compétence fournit des directives et des modèles pour développer des bots Discord robustes et évolutifs. Elle prend en charge à la fois l'écosystème Discord.js (JavaScript/TypeScript) et Pycord (Python).
Plateformes prises en charge
- Discord.js (v14+) – JavaScript/TypeScript
- Pycord (v2.4+) – Python
Concepts clés
Intentions de passerelle (Gateway Intents)
Configurez les intentions de passerelle nécessaires pour recevoir des événements spécifiques de l'API Discord :
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent
]
});
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Bot(intents=intents)
Commandes Slash
Définissez des commandes slash interactives avec validation des arguments :
client.on('ready', async () => {
const data = [
{
name: 'ping',
description: 'Vérifie la latence du bot'
}
];
await client.application.commands.set(data);
});
@client.slash_command(name="ping", description="Vérifie la latence du bot")
async def ping(ctx):
await ctx.respond(f"Pong! Ping : {client.latency * 1000:.0f}ms")
Composants interactifs
Implémentez des boutons et des menus de sélection avec des ID personnalisés :
const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('primary')
.setLabel('Cliquez-moi')
.setStyle(ButtonStyle.Primary)
);
row = discord.ui.View()
button = discord.ui.Button(label="Cliquez-moi", style=discord.ButtonStyle.primary)
row.add_item(button)
Limitations et bonnes pratiques
- Limitation de débit : Implémentez une logique de nouvelle tentative avec backoff exponentiel. L'API Discord a des limites strictes (50 requêtes par seconde pour les endpoints majeurs).
- Partitionnement : Pour les bots dans plus de 2 500 serveurs, utilisez le partitionnement automatique (
ShardingManager) ou le partitionnement de la passerelle. - Gestion des erreurs : Utilisez des blocs try/catch et les gestionnaires d'événements d'erreur du client (
client.on('error', ...)). - Sécurité : Ne commit jamais le jeton du bot (utilisation de variables d'environnement
.env).
Ressources
Auteur
Compétence créée par sickn33.