Discord. js - дать роль, реагируя - проблема с возвращаемым значением - PullRequest
0 голосов
/ 09 апреля 2020

Итак, я хотел командного бота, который может назначать роли сервера, если вы реагируете на сообщение. По Google / YouTube я сделал это. Моя проблема в том, что если я отреагирую на сообщение, мой алгоритм не перейдет в мой коммутатор, и если я отреагирую на costum emoji, он даже не обнаружит, что я отреагировал на него. Возможно, где-то возвращаемое значение отличается, но я пока не смог его найти. Сы мог проверить это?

const { MessageEmbed } = require('discord.js');
const { config: { prefix } } = require('../app');

exports.run = async (client, message, args) => {

    await message.delete().catch(O_o=>{});

    const a = message.guild.roles.cache.get('697214498565652540'); //CSGO
    const b = message.guild.roles.cache.get('697124716636405800'); //R6
    const c = message.guild.roles.cache.get('697385382265749585'); //PUBG
    const d = message.guild.roles.cache.get('697214438402687009'); //TFT

    const filter = (reaction, user) => ['?' , '?' , '?' , '<:tft:697426435161194586>' ].includes(reaction.emoji.name) && user.id === message.author.id;

    const embed = new MessageEmbed()
        .setTitle('Available Roles')
        .setDescription(`

        ? ${a.toString()}
        ? ${b.toString()}
        ? ${c.toString()}
        <:tft:697426435161194586> ${d.toString()}

        `)
        .setColor(0xdd9323)
        .setFooter(`ID: ${message.author.id}`);

    message.channel.send(embed).then(async msg => {

        await msg.react('?');
        await msg.react('?');
        await msg.react('?');
        await msg.react('697426435161194586');

        msg.awaitReactions(filter, {
            max: 1,
            time: 15000,
            errors: ['time']
        }).then(collected => {

            const reaction = collected.cache.first();

            switch (reaction.emoji.name) {
                case '?':
                    message.member.addRole(a).catch(err => {
                        console.log(err);
                        return message.channel.send(`Error adding you to this role **${err.message}.**`);
                    });
                    message.channel.send(`You have been added to the  **${a.name}** role!`).then(m => m.delete(30000));
                    msg.delete();
                    break;
                case '?':
                    message.member.addRole(b).catch(err => {
                        console.log(err);
                        return message.channel.send(`Error adding you to this role **${err.message}.**`);
                    });
                    message.channel.send(`You have been added to the  **${b.name}** role!`).then(m => m.delete(30000));
                    msg.delete();
                    break;
                case '?':
                    message.member.addRole(c).catch(err => {
                        console.log(err);
                        return message.channel.send(`Error adding you to this role **${err.message}.**`);
                    });
                    message.channel.send(`You have been added to the  **${c.name}** role!`).then(m => m.delete(30000));
                    msg.delete();
                    break;
                case '<:tft:697426435161194586>':
                    message.member.addRole(d).catch(err => {
                        console.log(err);
                        return message.channel.send(`Error adding you to this role **${err.message}.**`);
                    });
                    message.channel.send(`You have been added to the  **${d.name}** role!`).then(m => m.delete(30000));
                    msg.delete();
                    break;
            }
        }).catch(collected => {
            return message.channel.send(`I couldn't add you to this role!`);
        });
    });
};

exports.help = {
    name: 'roles'
};

Ответы [ 3 ]

2 голосов
/ 09 апреля 2020

Начиная с разногласий. js v12, новый способ добавления роли - message.member.roles.add(role), а не message.member.addRole. Обратитесь к документации для получения дополнительной информации.

1 голос
/ 09 апреля 2020

Вам нужно использовать roles.add() вместо addRole()

0 голосов
/ 11 апреля 2020

Mate, Вы не можете использовать идентификатор Emoji в кодах (кроме случаев, когда вы отправляете сообщение). Итак, пользовательские смайлики должны быть заменены настоящими смайликами, которые показывают поле в вашем редакторе и отлично работают в разногласиях. Если вы можете найти его, то это может быть завершено, поскольку API Discord не может найти emoji <: tft: 697426435161194586>. Вы можете получить смайлики, используя их в разногласиях и открывая разногласия в браузере, и с помощью элемента inspect получить смайлики.

Иначе вам придется использовать разные эмодзи.

...