Я пытаюсь использовать API-интерфейс Discord, чтобы заставить бота создать роль и добавить к ней человека. Я не уверен, почему мой код не работает.

async function role(message){
    try {
        let guild = client.guild.get(236824834066219009);
        guild.roles.create({
            data:{
            name:"asd",
            color:"grey",
        },
        reason:"asd",
    })
        let role = message.guild.roles.find(r => r.name === "asd");
        let user = 236824834066219009;
        await user.addrole(role).catch(console.error);
    } catch (error) {
        console.log(error);
    }
}
0
jebapid677 15 Апр 2020 в 20:45

1 ответ

Лучший ответ

Причина, по которой ваш код не работает, заключается в том, что с discord.js v12 было внесено много изменений.

Вы больше не можете использовать .find() на roles, вам нужно сначала получить доступ к их cache, поэтому вам нужно заменить let role = message.guild.roles.find(r => r.name === "asd"); на let role = message.guild.roles.cache.find(r => r.name === "asd");

Вы также не можете добавлять роли с помощью addrole(), вам нужно использовать roles.add(), поэтому вам нужно заменить user.addrole(role) на user.roles.add(role)

Вы также можете сделать свой код более эффективным, избавившись от необходимости искать role, вы можете просто использовать .then(), чтобы добавить роль в user, которую вы также можете передать как параметр в вашей функции вместе с guild, например:

async function role(message, user, guild){
    try {
        guild.roles.create({
            data:{
            name:"asd",
            color:"grey",
        },
        reason:"asd",
    }).then((role) => user.roles.add(role)).catch(console.error);
    } catch (error) {
        console.log(error);
    }
}
0
Syntle 15 Апр 2020 в 20:50