【问题标题】:How to disable button for a specific user如何禁用特定用户的按钮
【发布时间】:2022-01-15 09:20:51
【问题描述】:

有没有一种方法可以使用户无法使用按钮,除非他们具有特定权限,例如 ADMINISTRATOR?

以下代码用于我的票证系统,我只是在寻找解决方案,当用户创建票证时,除非他们有权这样做,否则他们将无法使用????️ 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 help\nClick 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 - <@&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 created\n<:CL_Reply:909436090413363252> ${channel.name}\n\nCreated <t:${Math.floor(Date.now()/1000)}:R>`)
            .setColor("GREEN")
          logchannel.send({ embeds: [ticketLogs] });
        }
      });
  }
};

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    您可以使用has 方法检查成员权限的标志,如果他没有,您只需禁用它

    const { Permissions } = require('discord.js');
    
    if(!message.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR) {
      deleteTicket.components[0].setDisabled(true);
    }
    

    【讨论】:

    • 好的,这样可以防止用户点击它(这是我想要的),但现在我无法用按钮关闭它,它为没有权限的用户禁用它,并为我禁用它具有管理员权限。
    • 现在应该可以了
    • 可能需要从 if 语句中删除 not 运算符 (!),以便在您 确实 拥有管理员权限时使用。现在它说“如果他们没有管理员权限,请禁用该按钮。”
    • 是的,这就是他想要的,禁用用户按钮,除非他们有管理员权限!
    猜你喜欢
    • 2015-09-08
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多