Discord js проверка реакции роли пользователя - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь закрыть тикет, реагируя на кнопку. Но реакцию должна дать роль «поддержки». Я не мог этого сделать. response.message.member.roles.has не помогает мне в этом пункте. Вот мой код:

client.on("messageReactionAdd", (reaction, user) => {
  if(reaction.message.member.roles.has('ROLE')) {
  let id = user.id.toString().substr(0, 4) + user.discriminator;
  let chan = `ticket-${id}`;

  const supchan = reaction.message.guild.channels.find(
    (channel) => channel.name === chan
  );
  const chan_id = supchan ? supchan.id : null;

  if (
    reaction.emoji.name === "?" &&
    !user.bot &&
    user.id != "ID"
  ) {
    reaction.removeAll();

    const channel = client.channels.find("name", chan);
    const delMsg = new Discord.RichEmbed()
      .setColor("#E74C3C")
      .setDescription(`:boom: Ticket will be deleted in 5 seconds.`);

    channel.send(delMsg).then(() => {
      var counter = 0;

      const intervalObj = setInterval(() => {
        counter++;
        if (counter == 5) {
          const message = reaction.message;
          message.delete();

Спасибо за помощь!

1 Ответ

0 голосов
/ 23 апреля 2020

Все это заключено в событие messageReactionAdd

// Replace "message_id" with the proper message id
// Checks if it's the correct message
if (reaction.message.id == "message_id") {

     // Check if author of ticket message is from the same user who reacted
     if (reaction.message.author == user) {

          // Check correct emoji
          if (reaction.emoji.name == "?") {
               // Code to close ticket
          }

     }

}

РЕДАКТИРОВАТЬ: Опять же, это будет заключено в событие messageReactionAdd:

// Try to get the ticket message
// If there's none then the user was never opened a ticket so we simply return the code
const ticketMessage = client.tickets.get(user);
if (!ticketMessage) return;

// Checks if it's the correct message
if (reaction.message.id == ticketMessage.id) {

     // Check correct emoji
     if (reaction.emoji.name == "?") {
         // Code to close ticket
     }

}

Я удалил код, который проверяет автора сообщения о реакции, потому что получение ticketMessage уже обрабатывает это. Обратите внимание, что это означает, что вы можете убедиться, что пользователь может открыть только один билет.

...