NOVO 📢 Oferta de lançamento limitada: até 70% de desconto no seu primeiro mês, em todos os jogos!Ver planos

Como criar um bot de tickets para o Discord (discord.js)

Hospedagem de bot do DiscordUpdated Oct 22, 20264 min read

Um bot de tickets dá aos membros um botão. Ao apertá-lo, abre-se um canal privado que só aquele membro e a sua equipe conseguem ver. Este guia cria o núcleo de um deles. Antes, você precisa de um token de bot: Como criar um bot do Discord e obter o token.

O que você precisa

  • Só a intent Guilds. Nenhuma intent privilegiada é necessária.
  • Permissões para o bot: Manage Channels, View Channels, Send Messages.
  • O ID do cargo da sua equipe. Ative o Developer Mode (modo desenvolvedor) no Discord, clique com o botão direito no cargo e escolha Copy Role ID (copiar ID do cargo).

O código

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);

Adicione "discord.js": "^14.16.0" ao package.json. O ID do cargo da equipe é lido de STAFF_ROLE_ID: coloque-o em um arquivo .env e adicione o pacote dotenv, ou digite o ID no código enquanto testa.

Rode

Envie os arquivos para o seu servidor de bot e inicie-o: Como hospedar um bot do Discord em Node.js. No seu servidor, digite /ticketpanel no canal em que os membros devem abrir tickets.

Próximos passos

  • Um botão Close ticket (fechar ticket) que apaga o canal depois de salvar uma transcrição.
  • Limite cada membro a um ticket aberto, conferindo se já existe um canal com aquele nome.
  • Guarde os tickets em um banco de dados: Como usar um banco de dados com seu bot do Discord.

Já tem um em outro lugar? Traga seu servidor para nós

CRIE SEU SERVIDOR DE JOGOS
PRONTO PARA COMEÇAR?

Economize até 30% no seu novo servidor de jogos.
Desempenho premium, ativação instantânea e confiabilidade imbatível por um preço melhor.

NOSSOS ÚLTIMOS ARTIGOS