首页 > 解决方案 > discord.js 的新手,机器人在加入我的服务器时读取错误的文本来验证特定用户

问题描述

所以我试着做一个小机器人来验证特定的用户组访问保留的频道。机器人应该询问密码,当答案与问题相符时,机器人会回复自己并显示错误消息。我该如何修复此代码?

我试过使用

if(message.author.bot){return;}

但由于某种原因它不起作用

这是我的代码:

client.on('guildMemberAdd', member => {
    const channel = member.guild.channels.find(ch => ch.name === 'vaayil');

    channel.send("type in the secret code");
    client.on('message', message =>{
        if(message.author.bot){return;}
        if(message.content === `secret`){
            channel.send("verified");
        }
        if(message.content !== `secret`){
            channel.send("not verified");
        }
    });
});

标签: node.jsdiscorddiscord.js

解决方案


像这样嵌套事件通常是不好的做法。

但是,您可以避免这样做,并让您在编写这个机器人时更轻松。在 Discord.js 中,您可以使用TextChannel.awaitMessages()等待通过特定过滤器的消息,然后对这些消息执行某些操作。

例子:

const secretCode = 'sloths';

client.on('guildMemberAdd', async member => {
  const channel = member.guild.channels.find(c => c.name === 'vaayil');
  if (!channel) return console.log('Can\'t find channel.');

  try {
    await channel.send(`What\'s the secret code, ${member}?`);

    const filter = m => m.author.id === member.id;
    const messages = await channel.awaitMessages(filter, { max: 1 });
    const message = messages.first(); // (The only message in the Collection)

    if (message.content === secretCode) {
      await channel.send('That\'s right!');
      // Do something...
    } else {
      await channel.send('Nice try, but wrong.');
      // Do something...
  } catch(err) {
    console.error(err);
  }
});

推荐阅读