@ka4ergaa

Как выдать роль по кнопке?

Хочу сделать выдачу роли по кнопке, но button.guild.member.get is not a function
if (button.id == "click_to_function_role") {

    const removerole = new Discord.MessageEmbed()
      .setColor('#2f3136')
      .setTitle(`${client.emotes.success} Вы отозвали роль "Подписка на патчи"`)
      .setFooter(`${button.clicker.user.tag}`, button.clicker.user.displayAvatarURL({ dynamic: true }))
    
    if (button.clicker.member.roles.cache.find(role => role.id == "946759705664057344")) {
        return button.reply.send(removerole, { ephemeral: true }) & button.guild.member.get(button.clicker.user.id).removeRole('946759705664057344');
    } else {
        button.guild.member.get(button.clicker.user.id).addRole('946759705664057344')
    };

    const giverole = new Discord.MessageEmbed()
      .setColor('#2f3136')
      .setTitle(`${client.emotes.success} Вам выдана роль "Подписка на патчи"`)
      .setFooter(`${button.clicker.user.tag}`, button.clicker.user.displayAvatarURL({ dynamic: true }))

    button.reply.send(embed, { ephemeral: true });
    
  }
  • Вопрос задан
  • 619 просмотров
Решения вопроса 1
shizzzzzik
@shizzzzzik
Учусь программированию
Нет такого понятия как button.guild.. Эта тема относится к интеракциям interaction.guild
Тут вообще интересно сделан код, непонятным образом.
Что находиться в button?
Если ты используешь билдер, то лучше забыть вовсе про эту идею и использовать только библиотеку "discord.js"
Просто сделай так как я.
const { MessageButton, MessageActionRow, MessageEmbed, Collector } = require('discord.js')
var button = new MessageButton({customId: 'addRole', label: '<название кнопки>', style: '<стиль кнопки>'})
interaction.followUp({embeds: [embed], components: [new MessageActionRow({components: [button]})]})
const msg = await interaction.fetchReply() // если это слэш-команда.
const collector = msg.createMessageComponentCollector()
collector.on('collect', async i => {
if(i.customId === 'addRole') {
if(i.member.roles.cache.has('id')) {
const removerole = new MessageEmbed()
      .setColor('#2f3136')
      .setTitle(`${client.emotes.success} Вы отозвали роль "Подписка на патчи"`)
      .setFooter(`${i.member.user.tag}`, i.member.user.displayAvatarURL({ dynamic: true }))
}
i.member.roles.remove('id')
return i.reply({embeds: [removerole], ephemeral: true})
} else {
const giverole = new MessageEmbed()
      .setColor('#2f3136')
      .setTitle(`${client.emotes.success} Вам выдана роль "Подписка на патчи"`)
      .setFooter(`${i.member.user.tag}`, i.member.user.displayAvatarURL({ dynamic: true }))
i.member.roles.add('id')
return i.reply({embeds: [giverole], ephemeral: true})
}
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@getaxe
JS developer
Если хочешь оставить все так, как у тебя есть, используй interaction.(и т.д.) вместо button. При этом не особо понимаю, что значит clicker (получить пользователя interaction.member или interaction.author, если тебе нужен именно аккаунт discord человека, а не его присутствие на сервере). изменив это - код будет работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы