NOWOŚĆ 📢 Ograniczona oferta na start: do 70% zniżki na pierwszy miesiąc, na każdą grę!Zobacz plany

Jak zrobić bota ticketowego dla Discorda (discord.js)

Hosting botów DiscordUpdated Oct 23, 20263 min read

Bot ticketowy daje członkom przycisk. Jego naciśnięcie otwiera prywatny kanał, który widzi tylko ten członek i twoja obsługa. Ten poradnik buduje jego rdzeń. Najpierw potrzebujesz tokena bota: Jak stworzyć bota Discord i zdobyć jego token.

Czego potrzebujesz

  • Tylko intenta Guilds. Żaden uprzywilejowany intent nie jest wymagany.
  • Uprawnienia dla bota: Manage Channels, View Channels, Send Messages.
  • ID roli twojej obsługi. Włącz Developer Mode w Discordzie, kliknij rolę prawym przyciskiem i wybierz Copy Role ID.

Kod

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

Dodaj "discord.js": "^14.16.0" do package.json. ID roli obsługi jest czytane z STAFF_ROLE_ID: umieść je w pliku .env i dodaj pakiet dotenv albo wpisz ID w kodzie na czas testów.

Uruchom go

Wgraj pliki na serwer swojego bota i uruchom go: Jak hostować bota Discord w Node.js. Na swoim serwerze wpisz /ticketpanel na kanale, na którym członkowie mają otwierać tickety.

Następne kroki

  • Przycisk Close ticket, który usuwa kanał po zapisaniu transkrypcji.
  • Ogranicz każdego członka do jednego otwartego ticketu, sprawdzając, czy istnieje już kanał o tej nazwie.
  • Przechowuj tickety w bazie danych: Jak używać bazy danych z botem Discord.

Masz już serwer gdzie indziej? Przenieś go do nas

STWÓRZ SWÓJ SERWER GIER
GOTOWY, ABY ZACZĄĆ?

Oszczędź nawet 30% na swoim nowym serwerze gier.
Wydajność premium, natychmiastowa aktywacja i niezawodność bez kompromisów. Wszystko w lepszej cenie.

NASZE OSTATNIE WPISY