首页 > 解决方案 > 反应角色命令有问题... Node.js、Discord.js、Javascript

问题描述

您好,我在 Discord.js 中创建反应角色命令时遇到问题,我不明白为什么它是类型错误,任何帮助将不胜感激。我不知道如何解决这个问题,我已经尝试了很多年,请解释我不知道出了什么问题......

谢谢

const { MessageEmbed } = require('discord.js');

module.exports = {
    name: 'reactionrole',
    description: 'Creates a reaction role for games',
    async execute(prefix, message, args, client) {
        await message.delete().catch(O_o => { });

        const minecraft = message.guild.roles.get('823987141239504929'); // Minecraft Role
        const Fortnite = message.guild.roles.get('823987679078121543'); // Fortnite
        const Hitman = message.guild.roles.get('824007858953388032'); // Hitman
        const AmongUs = message.guild.roles.get('823987894569664522'); // Among Us
        const RocketLeague = message.guild.roles.get('823988431402434580'); // Rocket League
        const FNAF = message.guild.roles.get('823988527673901126'); // FNAF
        const NightGaurdSimulator = message.guild.roles.get('823988658440765460'); // Night Gaurd Simulator 

        const filter = (reaction, user) => ['️', '', '️', '️', '⚽', '', ''].includes(reaction.emoji.name) && user.id === message.author.id;

        const embed = new RichEmbed()
            .setTitle('Avaiilable Roles')
            .setDescription(`
                
            ️ ${minecraft.toString()}
             ${Fortnite.toString()}
            ️ ${Hitman.toString()}
            ️ ${AmongUs.toString()}
            ⚽ ${RocketLeague.toString()}
             ${FNAF.toString()}
             ${NightGaurdSimulator.toString()}
                `)
            .setColor(0xdd9323)
            .setFooter(`ID: ${message.author.id}`);

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

            await message.react('️');
            await message.react('');
            await message.react('️');
            await message.react('️');
            await message.react('⚽');
            await message.react('');
            await message.react('');

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

                const reaction = collected.first();

                switch (reaction.emoji.name) {
                    case '️':
                        if (message.member.roles.has(a.id)) {
                            msg.delete(2000);
                            return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                        }
                        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 **${minecraft.name}** role!`).then(m => m.delete(3000));
                        msg.delete();
                        break;
                    case '':
                        if (message.member.roles.has(b.id)) {
                            msg.delete(2000);
                            return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                        }
                        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 **${Fortnite.name}** role!`).then(m => m.delete(3000));
                        msg.delete();
                        break;
                    case '️':
                        if (message.member.roles.has(c.id)) {
                            msg.delete(2000);
                            return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                        }
                        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 **${Hitman.name}** role!`).then(m => m.delete(3000));
                        msg.delete();
                        break;
                        case '️':
                            if (message.member.roles.has(c.id)) {
                                msg.delete(2000);
                                return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                            }
                            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 **${AmongUs.name}** role!`).then(m => m.delete(3000));
                            msg.delete();
                            break;
                            case '⚽':
                                if (message.member.roles.has(c.id)) {
                                    msg.delete(2000);
                                    return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                                }
                                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 **${RocketLeague.name}** role!`).then(m => m.delete(3000));
                                msg.delete();
                                break;
                                case '':
                                    if (message.member.roles.has(c.id)) {
                                        msg.delete(2000);
                                        return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                                    }
                                    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 **${FNAF.name}** role!`).then(m => m.delete(3000));
                                    msg.delete();
                                    break;
                                    case '':
                                        if (message.member.roles.has(c.id)) {
                                            msg.delete(2000);
                                            return message.channel.send('You are already in this role!').then(m => m.delete(3000));
                                        }
                                        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 **${NightGaurdSimulator.name}** role!`).then(m => m.delete(3000));
                                        msg.delete();
                                        break;
                }
            }).catch(collected => {
                return message.channel.send(`I couldn't add you to this role!`);
            });

        });

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

    }
}

Console error:

(node:38165) UnhandledPromiseRejectionWarning: TypeError: message.guild.roles.get is not a function

标签: node.jsdiscorddiscord.js

解决方案


好吧,这有一些问题,您正在使用message.awaitReactions它会导致花费时间,因此它不会是永久性的。如果有任何事情,我建议你这样做Client#messageReactionAdd。另外我注意到你有member.roles.has(),在 v12 中,你需要在任何收集方法(例如 has)之前缓存,并添加一个角色member.roles.add()。如果您需要更多 v11 -> v12,请查看 discord.js 指南: https ://discordjs.guide/additional-info/changes-in-v12.html#before-you-start


推荐阅读