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

Discord.js中MessageCollector如何获取非回复消息的内容?

解决Discord机器人工单系统中获取用户非回复式消息的问题

你当前的消息收集器会捕获频道内所有消息,无法精准获取目标用户针对机器人消息发送的单条非回复内容。可以通过以下方式优化:

核心思路

在按钮触发后,记录机器人发送的引导消息,然后创建带过滤条件的消息收集器,只捕获触发按钮的用户发送的第一条有效消息。

代码示例

// 按钮交互的处理逻辑
button.on('click', async (interaction) => {
  // 发送工单引导消息并保存该消息对象
  const botGuideMessage = await interaction.channel.send('请描述你的问题:');
  
  // 创建消息收集器,设置过滤规则
  const messageCollector = interaction.channel.createMessageCollector({
    // 过滤条件:仅接收当前触发按钮的用户发送的消息,且在引导消息之后发送
    filter: m => m.author.id === interaction.user.id && m.createdTimestamp > botGuideMessage.createdTimestamp,
    max: 1, // 只收集1条消息后停止
    time: 60000 // 可选:设置60秒超时,超时后自动结束收集
  });

  messageCollector.on('collect', m => {
    console.log('用户提交的内容:', m.content);
    answered = true;
    // 这里可以添加工单内容的处理逻辑,比如存入数据库
  });

  // 处理超时或收集结束的情况
  messageCollector.on('end', collected => {
    if (collected.size === 0) {
      interaction.channel.send('超时未提交内容,工单已终止。');
      answered = false;
    }
  });
});

关键参数说明

  • filter:精准筛选目标用户的消息,同时通过时间戳确保只收集引导消息之后的内容,避免捕获历史消息
  • max:限制收集数量为1,确保只获取用户的单条回复
  • time:设置超时时间,防止收集器长期占用资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:15:01