Я работаю над ботом Discord и пытаюсь заставить кнопки работать только для пользователя, который использовал команду.
Извините, если я кажусь глупым, но я не знаю, как это правильно объяснить.
Что у меня есть до сих пор, так это команда контрольная работа, которая отправляет сообщение в канал с двумя прикрепленными к нему кнопками, и я хочу прикрепить идентификатор пользователя к кнопкам.
.setCustomId(button1-${message.author.id}
)
Это действительно работает, если весь код находится в одном файле. Но это не сработает, если я разделю код кнопок.
Я попытался добавить -${interaction.user.id} к имени кнопки, но это не сработало, так как выдает "взаимодействие не определено".
module.exports = {
data: {
name: `button1`
},
async execute (interaction, client) {
interaction.channel.send({ content: "This button works!"})
}
}
Есть ли способ добавить идентификатор пользователя к имени кнопки?
Кнопка находится в тестовом командном файле. Вот код: if(message.content.startsWith(PREFIX + "test")) { const row = new MessageActionRow().addComponents( new MessageButton() .setLabel("✔") .setStyle("PRIMARY") .setCustomId(`button1-${message.author.id}`), new MessageButton() .setLabel("✔") .setStyle("SECONDARY") .setCustomId(`button2-${message.author.id}`) ) message.reply({ content: "Hello", components: [ row ] }) }
Это должно помочь вам здесь. Каждый раз, когда используется команда приложения, в этом сообщении есть элемент, определяющий, кто его отправил interaction.message.interaction.user.id
, который является идентификатором пользователя, отправившего команду.
Однако при вашем использовании вы используете сообщение, и это нормально, и оно по-прежнему будет работать, поскольку в сообщении есть элемент, указывающий, кому отвечает interaction.message.mentions.users
, поэтому, чтобы использовать это для вас, попробуйте приведенный ниже код. Вам не нужно будет добавлять идентификатор пользователя в код кнопки.
if (message.content.startsWith(PREFIX + "test")) {
const row = new MessageActionRow().addComponents(
new MessageButton()
.setLabel("✔")
.setStyle("PRIMARY")
.setCustomId(`button1`),
new MessageButton()
.setLabel("✔")
.setStyle("SECONDARY")
.setCustomId(`button2`),
);
message.reply({
content: "Hello",
components: [row],
});
}
Раздел ниже является частью вашего кода interactionCreate
, если он является частью основного файла bot.js.
client.on('interactionCreate', async interaction => {
if (interaction.isButton()) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
}
});
Если у вас есть команда interactionCreate
в виде отдельного файла, код будет выглядеть так:
module.exports = {
data: {
name: `interactionCreate`,
},
async execute(interaction, client) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
},
};
Где ваш файл, в котором вы создали кнопку?