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

DiscordJS交互消息收集器无法收集消息问题求助

DiscordJS 交互消息/反应收集器无法收集内容的解决方案

问题分析

你的两段代码都存在逻辑错误,导致收集器无法捕获目标用户的操作:

第一段反应收集器的错误

filter 中判断 user.id === message.author.id,这里的 message 是机器人发送的回复消息,message.author 是机器人自身ID,永远匹配不上发起命令的用户。

第二段消息收集器的错误

  1. awaitMessages 在DiscordJS v14+中已被废弃,官方推荐使用 createMessageCollector
  2. 未添加过滤条件,即使不废弃也会收集频道内所有消息,且没有限定发起命令的用户

修正后的反应收集器代码

const { EmbedBuilder, MessageReaction } = require("discord.js");
const { registerFont, createCanvas, loadImage } = require('canvas');
const scale = 20;
const canvas = createCanvas(171*scale,138*scale);
const fs = require('fs');
const sql = require('./../self-modules/sql.js');

exports.run = async (client, interaction, dbcon) => {
    const replyMessage = await interaction.reply({ content: "请点击👍回应", fetchReply: true });
    // 过滤条件:只收集发起命令用户的👍反应
    const filter = (reaction, user) => {
        return reaction.emoji.name === '👍' && user.id === interaction.user.id;
    };
    
    const collector = replyMessage.createReactionCollector({ filter, time: 15000 });
    
    collector.on('collect', (reaction, user) => {
        console.log(`收集到${reaction.emoji.name},来自用户${user.tag}`);
    });
    
    collector.on('end', collected => {
        console.log(`共收集到${collected.size}个反应`);
        if (collected.size > 0) {
            interaction.followUp("已收到你的回应!");
        } else {
            interaction.followUp("超时未收到回应");
        }
    });
}

修正后的消息收集器代码

const { EmbedBuilder, MessageReaction } = require("discord.js");
const { registerFont, createCanvas, loadImage } = require('canvas');
const scale = 20;
const canvas = createCanvas(171*scale,138*scale);
const fs = require('fs');
const sql = require('./../self-modules/sql.js');

exports.run = async (client, interaction, dbcon) => {
    await interaction.reply({ content: "请发送包含「discord」的消息", fetchReply: true });
    // 过滤条件:只收集发起命令用户的消息,且内容包含discord
    const filter = (msg) => {
        return msg.author.id === interaction.user.id && msg.content.includes('discord');
    };
    
    const collector = interaction.channel.createMessageCollector({ filter, max: 1, time: 30000 });
    
    collector.on('collect', (msg) => {
        interaction.followUp(`${msg.author} 回答正确!`);
    });
    
    collector.on('end', collected => {
        console.log(`共收集到${collected.size}条消息`);
        if (collected.size === 0) {
            interaction.followUp("超时未收到正确回答");
        }
    });
}

额外注意事项

  • 确保机器人拥有读取消息历史和添加反应的频道权限
  • 如果使用DiscordJS v13及以下版本,部分API参数可能略有差异,请对应调整
  • 避免混用回调和async/await,统一用async/await代码更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:47