#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. Да, и это то, что он хочет, отключить кнопку для пользователей, за исключением случаев, когда у них есть разрешение администратора!