Как отключить кнопку для определенного пользователя

#node.js #discord.js

#node.js #discord.js

Вопрос:

Есть ли способ, которым я могу сделать так, чтобы пользователь не мог использовать кнопку, если у него нет определенного разрешения, например, АДМИНИСТРАТОРА?

Приведенный ниже код предназначен для моей системы тикетов, и я просто искал решение для того, чтобы, когда пользователь создаст тикет, он не смог бы закрыть его с 🗑️ close помощью кнопки, если у него не было на это разрешений.

Было бы очень признателен, если бы я мог получить помощь в этом, потому что было бы неприятно, если бы пользователь открыл тикет и сразу же закрыл тикет с помощью спама.

 const { MessageEmbed, MessageActionRow, MessageButton } = require("discord.js");
const botconfig = require("../../botconfig");

module.exports = {
  name: "ticket",
  aliases: ["new"],
  run: async (client, message, args) => {
    let channel = message.guild.channels.cache.find(channel => channel.name === `ticket-${message.author.id}`)
    if (message.guild.channels.cache.find(channel => channel.name === `ticket-${message.author.id}`)) {
      return message.reply({ content: `You currently have an open ticket.n<:CL_Reply:909436090413363252> <#${channel.id}>` });
    }

    const ticketEmbed = new MessageEmbed()
        .setTitle("__Support will be will you shortly__")
        .setDescription("> While you wait, please let us know how we can helpnClick on the 🗑️ to close this ticket")
        .setColor("GREEN")
        .setFooter(`User ID: ${message.author.id}`, message.author.displayAvatarURL())
      
      const deleteTicket = new MessageActionRow().addComponents(
        new MessageButton()
          .setCustomId("delete")
          .setLabel("🗑️ Close")
          .setStyle("DANGER")
      );
      //support ping for later references - <@amp;705344500578648119>      
    
    message.guild.channels.create(`ticket-${message.author.id}`, {
        permissionOverwrites: [
          {
            id: message.author.id,
            allow: ["SEND_MESSAGES", "VIEW_CHANNEL"]
          },
          {
            id: message.guild.roles.everyone,
            deny: ["SEND_MESSAGES", "VIEW_CHANNEL"]
          }
        ],
        type: "GUILD_TEXT"
      })
      .then(async channel => {
        message.reply({ content: `<:CL_Support:912055272275599380> Your ticket has been created!n<:CL_Reply:909436090413363252> ${channel}` });
        channel.send({ content: `@here <@${message.author.id}>`, embeds: [ticketEmbed], components: [deleteTicket] });

        const logchannel = message.guild.channels.cache.find(channel => channel.name === "ticket-logs");
        if (logchannel) {
          const ticketLogs = new MessageEmbed()
            .setTitle("__New Ticket__")
            .setDescription(`A new ticket was createdn<:CL_Reply:909436090413363252> ${channel.name}nnCreated <t:${Math.floor(Date.now()/1000)}:R>`)
            .setColor("GREEN")
          logchannel.send({ embeds: [ticketLogs] });
        }
      });
  }
};
 

Ответ №1:

Вы можете проверить флаги с помощью метода has для разрешений участника, а после вам просто нужно отключить, если у него их нет

 const { Permissions } = require('discord.js');

if(!message.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR) {
  deleteTicket.components[0].setDisabled(true);
}
 

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

1. Хорошо, это не позволяет пользователю нажимать на нее (чего я и хотел), но теперь я не могу закрыть ее с помощью кнопки, она отключила ее для пользователя без завивки и отключила для меня, у которого есть права администратора.

2. Теперь это должно сработать

3. Возможно, потребуется удалить оператор not (!) из инструкции if, чтобы он работал, когда у вас есть права администратора. Прямо сейчас там написано: «Если у них нет прав администратора, отключите кнопку».

4. Да, и это то, что он хочет, отключить кнопку для пользователей, за исключением случаев, когда у них есть разрешение администратора!