Как добавить идентификатор пользователя к взаимодействию с кнопкой?

Я работаю над ботом 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!"})

    
  }
}

Есть ли способ добавить идентификатор пользователя к имени кнопки?

Где ваш файл, в котором вы создали кнопку?

Neenhila 17.05.2022 13:15

Кнопка находится в тестовом командном файле. Вот код: 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 ] }) }

Murus 17.05.2022 13:27
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
0
2
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно помочь вам здесь. Каждый раз, когда используется команда приложения, в этом сообщении есть элемент, определяющий, кто его отправил 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;
            }
        }
    },
};

Другие вопросы по теме