Discord.js I';我编写了一个不和谐的机器人并制作了一个验证系统,但奇怪的事情正在发生

Discord.js I';我编写了一个不和谐的机器人并制作了一个验证系统,但奇怪的事情正在发生,discord.js,Discord.js,这是我需要帮助的代码,它的作用是通过让你回答问题来确保你是人类,例如:“天空是什么颜色的”,但是如果你回答蓝色,它会说“太好了!你现在被验证了!”然后说“看起来你没有得到正确的答案,正确的答案是蓝色的”即使你写了正确的答案,它也没有给你验证过的角色 您需要在代码中修正以下几点: 首先,您声明了一个变量myRole,但实际上从未使用它在代码中分配角色 其次,是如何添加角色 user.member.addRole(myRole); 从Discord.jsv12开始,GuildMember似乎没有a

这是我需要帮助的代码,它的作用是通过让你回答问题来确保你是人类,例如:“天空是什么颜色的”,但是如果你回答蓝色,它会说“太好了!你现在被验证了!”然后说“看起来你没有得到正确的答案,正确的答案是蓝色的”即使你写了正确的答案,它也没有给你验证过的角色

您需要在代码中修正以下几点:

首先,您声明了一个变量
myRole
,但实际上从未使用它在代码中分配角色

其次,是如何添加角色

user.member.addRole(myRole);
Discord.js
v12开始,
GuildMember
似乎没有
addRole
方法。我建议改为这样做:

member.roles.add(myRole.catch)(console.error);
第三,您必须检查
响应
消息是否来自
消息。作者
也是如此,否则其他人可能会回答,机器人会识别它是正确的

const filter=response=>{
返回item.answer.toLowerCase()==response.content.toLowerCase()&&response.author==message.author;
};
最后,也是最简单的一点,您添加了一个会导致语法错误的花括号。你只需要删除一个花括号,一切都会好起来的


旁注:我认为
if(!item)
部分是无关的,所以我只是删除了它


代码:

const测验=[
{
“问题”:“天空是什么颜色的?”,
回答:“蓝色”
},
{
“问题”:“字母表中有多少个字母?”,
“答复”:“26”
}
];
const item=quick[Math.floor(Math.random()*quick.length)];
const user=message.author;
const member=message.guild.member(用户);
让myRole=message.guild.roles.cache.find(role=>role.name==“已验证”);
const embed=new Discord.MessageEmbed()
.setTitle('Mrrocketman10s官方验证系统')
.setDescription('确保您是人类')
.addField('Username:',user.Username)
.addField('在以下位置创建的帐户,user.createdAt.toLocaleDateString())
.addField(“验证以下问题的答案。”,item.question)
.set缩略图()
//如果(!项)检查,则删除
常量过滤器=响应=>{
//添加了一个额外的参数来检查响应的用户是否是原始作者
返回item.answer.toLowerCase()==response.content.toLowerCase()&&response.author==message.author;
};
message.channel.send(嵌入)。然后(()=>{
message.channel.awaitMessages(筛选器,{max:1,时间:30000,错误:['time']})
。然后(收集=>{
//这里是修改的部分
message.reply(“太好了!您现在已被验证!”)。然后是(member.roles.add(myRole.catch(console.error));
})
.catch(已收集=>{
message.reply(“看起来你没有得到正确的答案,正确的答案是”+item.reply)
});
});

资源:


  • 检查传递给
    catch
    回调的错误(作为
    collected
    参数),它应该指出消息未发送的原因。可能错误来自bot无法添加角色?可能未定义user.member?好的,我知道您在哪里定义了
    user
    ,以及由message.author返回的
    Discord.user
    ,它没有成员属性。这样做的方式是:
    const user=message.member
    而不是
    message.author
    。不要将此作为消息执行
    user.member
    。member已返回guildMember!另外,当您将角色添加到成员时,我看不到在哪里定义了
    角色
    ?也许你的意思是
    myRole
    无论我是否使用message.member,它总是说如果我用正确的答案回答,它会说它是对的和错的,例如:“太好了!你现在被验证了”“看起来你没有得到答案,正确的答案是蓝色的”啊哈!我得到了错误,它说“无法读取未定义的属性'addRole'”
        const quiz = [
            {
                "question": "What color is the sky?",
                "answer": "blue"
            },
            {
                "question": "How many letters are there in the alphabet?",
                "answer": "26"
            }
        ];
        const item = quiz[Math.floor(Math.random() * quiz.length)];
        const user = message.author
        let myRole = message.guild.roles.cache.find(role => role.name === "Verified");
        const embed = new Discord.MessageEmbed()
            .setTitle('Mrrocketman10s Official Verification System')
            .setDescription('Makes sure that you are a human')
            .addField('Username: ', user.username)
            .addField('Account created at: ', user.createdAt.toLocaleDateString())
            .addField("To verify answer the following question.", item.question)
            .setThumbnail()
        if(!item){
            console.log("Question and answer doesn't exist")
            return false
        }
    
        const filter = response => {
            return item.answer.toLowerCase() === response.content.toLowerCase();
        };
            message.channel.send(embed).then(() => {
                message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })
                    .then(collected => { 
                        message.reply("Great! You are now verified!").then(user.member.addRole(role)); 
                    }) 
                    .catch(collected => { 
                        message.reply("Looks like you didn't get the correct answer, the correct answer is " + item.answer)
                    });
            });
            
        }