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
Guildsuniquement. 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





