Как сделать так, чтобы каждому билету присваивался уникальный номер?, Discord.js

#javascript #discord.js

#язык JavaScript #discord.js

Вопрос:

Как это работает:

Я пытаюсь сделать так, чтобы, если кто-то реагирует на сообщение, отправленное сотрудником, он открывал билет.

Проблема:

Я хотел использовать идентификатор участника, но он слишком большой. Я попытался использовать имя плеера, он почему-то не находит его в качестве канала, может быть, лучше использовать уникальный номер?

Я использую систему обработки команд, поэтому вы не увидите ничего из основных вещей (например client.login ).

Вот мой код:

 const { Discord } = require('discord.js'); const axios = require("axios")  module.exports = {  name: 'thing',  category: 'Owner',  aliases: ["t"],  description: 'thing command.',  usage: 'thing',  userperms: [],  botperms: [],  run: async (client, message, args) =gt; { message.channel.send('Click "⚔" to open a ticket!').then(function(message) { message.react('⚔'); const filter = (reaction, user) =gt; {  return ['⚔'].includes(reaction.emoji.name) amp;amp; user.id === message.author.id; }});  client.on('messageReactionAdd', (reaction, ruser) =gt; { if (!ruser.bot) { if (reaction.emoji.name == '⚔') {  if(message.guild.channels.cache.find(channel =gt; channel.name == (`t-${ruser.id}`))) {  return message.channel.send('lt;@'   ruser.id   'gt; you already have a ticket, please close your existing ticket first before opening a new one!')  .then(m =gt; m.delete({timeout: 3000}));  }   message.guild.channels.create(`t-${ruser.id}`, {  permissionOverwrites: [  {  id: message.author.id,  allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],  },  {  id: message.guild.roles.everyone,  deny: ['VIEW_CHANNEL'],  },  ],  type: 'text',  }).then(async channel =gt; {  message.channel.send(`lt;@`   ruser.id   `gt;, you have successfully created a ticket! Please click on ${channel} to view your ticket.`)  .then(m =gt; m.delete({timeout: 3000}));  channel.send(`Hi lt;@`   ruser.id   `gt;, welcome to your ticket! Please be patient, we will be with you shortly.`);  const logchannel = message.guild.channels.cache.find(channel =gt; channel.name === 'server-logs');  if(logchannel) {  logchannel.send(`Ticket-${ruser.username} created. Click the following to veiw lt;#${channel.id}gt;`);  }  });  }  }});  }}  

Ответ №1:

Есть несколько способов сделать это. Я бы создал lt;Mapgt; объект, ключи которого должны представлять идентификатор пользователя и значения идентификатора билета, принадлежащего этому пользователю. Я бы также объявил переменную ticketID , которая будет увеличиваться на 1 каждый раз при создании нового билета. При каждой реакции бот должен проверять, является ли идентификатор пользователя существующим ключом карты, и если нет, в нем должна быть создана новая запись:

 (...) let ticketCounter = 0; const userTickets = new Map();  client.on('messageReactionAdd', (reaction, ruser) =gt; {  if(!ruser.bot) {  if(reaction.emoji.name == '⚔') {  if(userTickets.has(ruser.id)) {  return message.channel.send('lt;@'   ruser.id   'gt; you already have a ticket, please close your existing ticket first before opening a new one!').then(m =gt; m.delete({timeout: 3000}));  }    message.guild.channels.create(`t-${ticketCounter}`, {  permissionOverwrites: [  {  id: message.author.id,  allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],  },  {  id: message.guild.roles.everyone,  deny: ['VIEW_CHANNEL'],  },  ],  type: 'text',  }).then(async channel =gt; {  userTickets.set(ruser.id, ticketCounter  ); // This will create the map entry whose value is the previous ticketCounter value, the    increments afterwards.    message.channel.send(`lt;@`   ruser.id   `gt;, you have successfully created a ticket! Please click on ${channel} to view your ticket.`).then(m =gt; m.delete({timeout: 3000}));  channel.send(`Hi lt;@`   ruser.id   `gt;, welcome to your ticket! Please be patient, we will be with you shortly.`);  const logchannel = message.guild.channels.cache.find(channel =gt; channel.name === 'server-logs');    if(logchannel) {  logchannel.send(`Ticket-${ruser.username} created. Click the following to veiw lt;#${channel.id}gt;`);  }  });  }  } });  

Комментарии:

1. Спасибо, это так помогает!