aslain.dev
0%
← Tüm makaleler

Créer un bot Discord avec Node.js : pas à pas (discord.js)

L'un des meilleurs moyens de maintenir une communauté Discord active est un bot Discord qui automatise les tâches répétitives. Créer un bot Discord est plus simple qu'il n'y paraît : avec Node.js et la bibliothèque discord.js, votre première commande tourne en quelques minutes. Dans ce guide, nous construisons un bot de zéro et, comme mon propre Runa2 Bot, terminons par une vraie commande connectée à une base de données de jeu.

Prérequis

  • Node.js 18+ et npm.
  • Créez une application + un bot dans le Discord Developer Portal et récupérez le token.
  • Invitez le bot sur votre serveur (OAuth2 → scopes : bot, applications.commands).
  • Dans le projet : npm install discord.js mysql2.

Votre premier bot : un /ping fonctionnel

Le cœur d'un bot est un Client. Les intents déterminent quels événements le bot reçoit :

// index.js
const { Client, GatewayIntentBits, Events } = require('discord.js');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, (c) => {
  console.log(`Giris yapildi: ${c.user.tag}`);
});

client.on(Events.InteractionCreate, async (interaction) => {
  if (!interaction.isChatInputCommand()) return;
  if (interaction.commandName === 'ping') {
    await interaction.reply('Pong! 🏓');
  }
});

client.login(process.env.TOKEN);

Ne codez jamais le token en dur ; stockez-le comme TOKEN dans un fichier .env.

Enregistrer les commandes slash

Les bots modernes utilisent des commandes slash (/ping). Elles doivent être enregistrées auprès de Discord via l'API REST avant de pouvoir être appelées :

// deploy-commands.js
const { REST, Routes, SlashCommandBuilder } = require('discord.js');

const commands = [
  new SlashCommandBuilder().setName('ping').setDescription('Pong ile yanitlar'),
].map((c) => c.toJSON());

const rest = new REST().setToken(process.env.TOKEN);

await rest.put(
  Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID),
  { body: commands },
);

Astuce : En développement, utilisez applicationGuildCommands (un seul serveur) — la mise à jour est instantanée. Les commandes globales peuvent mettre jusqu'à une heure à se propager.

Cas réel : se connecter à une base de données de jeu

Ce qui rend Runa2 Bot spécial, c'est qu'il peut lire la base MySQL du jeu et écrire des données via des commandes. Avec mysql2, une commande qui interroge le niveau d'un joueur ressemble à ceci :

const mysql = require('mysql2/promise');
const db = await mysql.createConnection({
  host: 'localhost', user: 'bot', password: '***', database: 'player',
});

// /seviye komutu icinde:
const [rows] = await db.execute(
  'SELECT level FROM player WHERE name = ?', [name]
);
await interaction.reply(`${name} seviye ${rows[0].level}`);

Attention : utilisez toujours des paramètres (?) dans les requêtes — injecter l'entrée utilisateur directement dans le SQL ouvre la porte aux injections SQL.

Faire tourner le bot 24/7

Quand vous éteignez votre ordinateur, le bot s'arrête. Pour qu'il tourne en continu, lancez-le sur un VPS avec un gestionnaire de processus comme pm2 : pm2 start index.js. pm2 redémarre le bot en cas de crash et conserve les journaux.

Questions fréquentes

Node.js ou Python ?

Les deux sont excellents. Node.js (discord.js) est très à l'aise pour le temps réel et l'événementiel ; Python (discord.py) reste lisible pour les tâches orientées données/automatisation. J'utilise les deux.

Que faire si le token fuite ?

Quiconque possède le token peut contrôler votre bot. En cas de fuite, régénérez-le immédiatement dans le Developer Portal et ne le mettez jamais dans le code ni sur GitHub.

Puis-je héberger le bot gratuitement ?

Il existe des offres gratuites pour les petits bots, mais pour un bot sérieux connecté à une base de jeu, un petit VPS est le choix le plus sûr.

Vous voulez un bot sur mesure pour votre communauté ? Je crée des bots connectés aux bases de jeu, de modération ou de gestion d'événements — contactez-moi.

Devamı için