You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js如何并行监听两名用户回复并实现共同超时与结果汇总

实现代码
module.exports = {
  name: 'd',
  description: 'test',
  async execute(client, message, args) {
    const Discord = require("discord.js");
    const PLAYER_1_ID = 'HERE_ID_PLAYER_1';
    const PLAYER_2_ID = 'HERE_ID_PLAYER_2';
    const TIMEOUT = 10000;

    await message.channel.send("Yes or no?");

    // 通用玩家选择监听函数
    function getPlayerChoice(playerId, playerName) {
      return new Promise(resolve => {
        const collector = new Discord.MessageCollector(
          message.channel,
          m => m.author.id === playerId,
          { time: TIMEOUT }
        );

        // 处理收集到的有效消息
        collector.on('collect', msg => {
          const content = msg.content.toLowerCase();
          if (content === 'yes' || content === 'no') {
            collector.stop('done');
            message.channel.send(`${playerName} chose ${content.toUpperCase()}`);
            resolve(content);
          }
        });

        // 处理收集器结束事件(含超时场景)
        collector.on('end', (_, reason) => {
          if (reason !== 'done') {
            message.channel.send(`${playerName}超时`);
            resolve('超时');
          }
        });
      })
    }

    // 并行启动两个监听,等待全部返回结果后再往下执行
    const [player1Choice, player2Choice] = await Promise.all([
      getPlayerChoice(PLAYER_1_ID, '玩家1'),
      getPlayerChoice(PLAYER_2_ID, '玩家2')
    ]);

    // 发送最终汇总结果
    await message.channel.send(`玩家1选择了${player1Choice},玩家2选择了${player2Choice}`);
  }
}
问题解答

1. 如何在用户做出选择后从每个监听函数中获取返回结果

  • 将监听逻辑包装为Promise对象,在用户提交有效回复、或者触发结束条件时调用resolve()抛出结果,用await调用函数时就能直接拿到返回值,不需要额外声明外部全局变量存储选择结果。
  • 收集到符合要求的回复后主动调用collector.stop()终止当前收集器,避免重复收集消息。

2. 如何等待两个监听函数都执行完毕后再发送结果汇总消息

  • 使用JS内置的Promise.all()方法,把两个玩家的监听Promise作为数组传入即可。它会并行执行两个监听逻辑,完全不受玩家回复先后顺序影响,直到所有Promise都返回结果后才会继续向下执行。

3. 如何捕获超时事件,分别发送超时提示

  • MessageCollector实例自带end事件,事件触发时的第二个参数reason值为time时就代表是超时触发的结束,你可以在这个回调里返回对应的超时标识即可。
  • 两个收集器同时初始化、设置相同的超时时间,即可实现共用10秒计时的需求。

内容的提问来源于stack exchange,提问作者Dimooon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:48:01