@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)
    }
})
  • Вопрос задан
  • 94 просмотра
Решения вопроса 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() используйте в случае, если нужно найти роль по её названию или другим параметрам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 янв. 2023, в 04:49
1500 руб./за проект
30 янв. 2023, в 04:49
1500 руб./за проект
30 янв. 2023, в 03:43
10000 руб./за проект