如何在条件语句中结束 emmiter.on

How do I end a emmiter.on within a conditional statement

现在我正在尝试创建一个忽略特定频道中特定命令的 Discord 机器人命令。为了取消忽略频道,用户必须输入命令,然后他们会收到提示,告诉他们输入 "Yes/No",然后回答是、否,或者如果他们没有输入 Yes/No,则告诉他们这样做,然后重复。这是我的代码:

if (msg.content === prefix + 'ignore') {
    const guildMember = msg.member;
    const author = msg.author.id;
    if (guildMember.roles.has('309165526427369473')) {
      if (ignoredChannels.has(msg.channel.id)) {
        msg.reply('Would you like to stop ignoring this channel? (Yes/No)');
        client.on('message', msg => {
       /* if (author === msg.author.id) {
            if (msg.content === 'Yes') {
              ignoredChannels.delete(msg.channel.id);
              msg.reply('Channel is now not ignored.');
            }
            else if (msg.content === 'No') {
              msg.reply('Channel is still ignored.');
            }
            else {
              msg.reply('You did not type in the correct arguments. Please type "Yes" or "No".');
            }
          } */
          else {}
        });
      }
      else {
      ignoredChannels.set(msg.channel.id, msg.channel.name);
      msg.reply('Channel is now ignored.');
      }
    }
    else {
      msg.reply('You do not have the permissions to do this.');
    }
  }

在注释代码中,这是每个条件语句所在的位置。我基本上想在每个语句中放入 }); 以结束 client.on 但当然,这将是不正确的语法。现在我已经尝试在每个条件的末尾使用 client.removeAllListeners 删除所有侦听器,但这将禁用我放置在接收所有其他命令的代码中其他地方的另一个 "message" 侦听器。我也试过放置 removeLisener,但这需要特定的侦听器函数,并且 "msg" 侦听器内置于 discord.js。我也不能使用 client.once 因为它在每个条件下都有多个侦听器函数。为什么我需要结束 client.on 是为了阻止机器人多次响应用户所需的输入(只需要一次),永远不会结束发射器。

您不应该添加新事件client.on('message')只是为了收到一条确认消息。
您应该改用 .awaitMessages()。示例:

// Await !vote messages
const filter = m => m.content.startsWith('!vote');
// Errors: ['time'] treats ending because of the time limit as an error
channel.awaitMessages(filter, { max: 4, time: 60000, errors: ['time'] })
  .then(collected => console.log(collected.size))
  .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));

从文档中复制

您可以过滤谁是 "allowed",通过将其添加到过滤器来确认响应。