NOUVEAU 📢 Offre de lancement limitée : jusqu'à 70 % de remise sur votre premier mois, pour tous les jeux !Voir les offres

Comment créer un bot de tickets pour Discord (discord.js)

Hébergement de bots DiscordUpdated Oct 23, 20264 min read

Un bot de tickets donne aux membres un bouton. Un appui ouvre un salon privé que seuls ce membre et votre équipe peuvent voir. Ce guide construit le cœur d’un tel bot. Il vous faut d’abord un token de bot : Comment créer un bot Discord et obtenir son token.

Ce qu’il vous faut

  • L’intent Guilds uniquement. Aucun intent privilégié n’est requis.
  • Les permissions du bot : Gérer les salons, Voir les salons, Envoyer des messages.
  • L’ID de votre rôle d’équipe. Activez le Mode développeur dans Discord, faites un clic droit sur le rôle et choisissez Copier l’identifiant du rôle.

Le code

index.js

const {
  Client, GatewayIntentBits, ChannelType, PermissionFlagsBits,
  ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder, REST, Routes,
} = require('discord.js');

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

client.once('ready', async () => {
  const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
  const cmd = new SlashCommandBuilder().setName('ticketpanel').setDescription('Post the ticket button')
    .setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild);
  await rest.put(Routes.applicationCommands(client.user.id), { body: [cmd.toJSON()] });
  console.log(`Logged in as ${client.user.tag}`);
});

client.on('interactionCreate', async (i) => {
  if (i.isChatInputCommand() && i.commandName === 'ticketpanel') {
    const row = new ActionRowBuilder().addComponents(
      new ButtonBuilder().setCustomId('open_ticket').setLabel('Open a ticket').setStyle(ButtonStyle.Primary));
    await i.channel.send({ content: 'Need help? Press the button to open a private ticket.', components: [row] });
    return i.reply({ content: 'Posted.', ephemeral: true });
  }

  if (i.isButton() && i.customId === 'open_ticket') {
    const channel = await i.guild.channels.create({
      name: `ticket-${i.user.username}`,
      type: ChannelType.GuildText,
      permissionOverwrites: [
        { id: i.guild.roles.everyone.id, deny: [PermissionFlagsBits.ViewChannel] },
        { id: i.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages] },
        { id: STAFF_ROLE_ID, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages] },
        { id: client.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.ManageChannels] },
      ],
    });
    await channel.send(`Hello ${i.user}, a member of staff will be with you soon.`);
    return i.reply({ content: `Your ticket: ${channel}`, ephemeral: true });
  }
});

client.login(process.env.DISCORD_TOKEN);

Ajoutez "discord.js": "^14.16.0" à package.json. L’ID du rôle d’équipe est lu depuis STAFF_ROLE_ID : mettez-le dans un fichier .env et ajoutez le paquet dotenv, ou saisissez l’ID dans le code pendant vos tests.

Le lancer

Téléversez les fichiers sur votre serveur de bot et démarrez-le : Comment héberger un bot Discord Node.js. Sur votre serveur, saisissez /ticketpanel dans le salon où les membres doivent ouvrir des tickets.

Étapes suivantes

  • Un bouton Fermer le ticket qui supprime le salon après avoir enregistré une transcription.
  • Limitez chaque membre à un seul ticket ouvert en vérifiant s’il existe déjà un salon à son nom.
  • Stockez les tickets dans une base de données : Comment utiliser une base de données avec votre bot Discord.

Votre serveur est hébergé ailleurs ? Transférez-le chez nous

CRÉEZ VOTRE SERVEUR DE JEU
PRÊT À COMMENCER ?

Économisez jusqu’à 30% sur votre nouveau serveur de jeu.
Des performances premium, une activation instantanée et une fiabilité inégalée à un meilleur prix.

NOS DERNIERS ARTICLES