@ZERO_top

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

Создание кнопок

const Discord = require('discord.js')
client.on("messageCreate" , async message => {
    if(message.content == "nop"){
        const button = new Discord.MessageButton()
        .setCustomId('1')
        .setLabel('Мальчик')
        .setStyle('SUCCESS')
        const button2 = new Discord.MessageButton()
        .setCustomId('2')
        .setLabel('Девочка')
        .setStyle('SUCCESS')

        const buttons = new Discord.MessageActionRow();
        buttons.addComponents(button);
        buttons.addComponents(button2);
        message.channel.send({content: `После входа на сервер, вы автоматически соглашаетесь и принимаете <#1039680818156670996> сервера.` , components: [buttons]});
        
    }
})


Мои попытки выдать роль , но не получилось !

client.on("interactionCreate" , async (Integration) =>{
    if(Integration.isButton() && Integration.customId == "1"){
         guildMember.roles.set(['880828678278352937'])
    }

    if(Integration.isButton() && Integration.customId == "2"){
        var role = message.guild.roles.cache.find(role => role.id === "880828678278352937");
        user.roles.add(role)
    }
})
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Alexandre888
@Alexandre888 Куратор тега discord.js
Javascript-разработчик
вот здесь и отражается главный минус написания ботов не зная даже основ языка..
client.on("interactionCreate" , async (Integration) =>{
    if(Integration.isButton() && Integration.customId == "1"){
         guildMember.roles.set(['880828678278352937'])
    }

    if(Integration.isButton() && Integration.customId == "2"){
        var role = message.guild.roles.cache.find(role => role.id === "880828678278352937");
        user.roles.add(role)
    }
})

разбор вашего кода (почему он не рабочий)

0. вместоIntegrationлучше было бы использовать название interaction, т.к мы всё-таки работаем с взаимодействием, а не с интеграцией.
это не влияет на работоспособность кода, но, просто как факт.
0.1. чтобы не проверять в каждом if-блоке, было ли это взаимодействием с кнопкой, можно сделать следующим образом:
if (Integration.isButton()) {
  // проверки на .customId (можно использовать switch/case, если их много) //
}
1. guildMember.roles.set(['880828678278352937'])
переменная guildMemberне определена, будет ошибка.
если хотите обратиться к участнику сервера, который нажал на кнопку, тогда нужно использовать Integration.member, и в итоге будет
Integration.member.roles.set(["880828678278352937"])

2.
var role = message.guild.roles.cache.find(role => role.id === "880828678278352937");

переменная message не определена, тоже будет ошибка.
в этом случае нужно использовать interaction.guild.roles
2.1. для поиска роли по ID, лучше используйте .get().
.find() используйте в случае, если нужно найти роль по её названию или другим параметрам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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