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

Discord.js v14消息收集器报错:无法读取undefined的'id'属性

问题分析与解决

错误原因

  1. 消息属性误用:Discord.js v14中,Message对象的发送者属性是author而非user,user属于交互类对象(如ChatInputCommandInteraction),所以m.user会返回undefined,读取id时自然抛出错误。
  2. 权限判断未终止流程:用户无权限时,代码仅回复提示但未停止后续逻辑,仍会创建消息收集器,可能引发额外异常。
  3. 未处理异常场景:收集器可能捕获到系统消息或机器人自身的回复,且未监听收集器的error事件,导致未捕获的错误直接抛出。

修复后的代码

const { Message, Client, EmbedBuilder } = require('discord.js')

module.exports = {
    name: 'dm',
    description: 'DMs someone with a role or a user.',
    run: async (client, message, args) => {
        // 权限校验:无权限则回复并终止流程
        if(!message.member?.roles.cache.has('insertroleid')) {
            const embed = new EmbedBuilder()
                .setColor('DarkRed')
                .setDescription('You cannot use this command yet as you aren\'t a Presidential Team member yet!')
            await message.reply({ embeds: [ embed ] })
            return
        }

        // 正确的过滤器:使用author属性,过滤机器人消息,兼容异常消息
        const filter = m => {
            if (m.author.bot) return false;
            return m.author?.id === message.author.id;
        }

        const mcollector = message.channel.createMessageCollector({
            filter,
            time: 120000,
            max: 1,
            maxProcessed: 1,
            errors: ['time']
        })

        const startEmbed = new EmbedBuilder()
            .setColor(process.env.embed_color)
            .setDescription('Hello, please start proceeding pinging the role you want to send.')

        await message.reply({ embeds: [ startEmbed ] })

        mcollector.on('collect', async mc1 => {
            const content = mc1.content
            console.log(content)
        })

        // 监听收集器错误,避免程序崩溃
        mcollector.on('error', error => {
            console.error('消息收集器异常:', error)
        })
    }
}

关键修复点

  • 权限校验优化:添加return终止无权限用户的后续流程,用可选链?.避免message.member为undefined时(如DM场景)的报错。
  • 过滤器修正:改用m.author.id,添加机器人消息过滤逻辑,并用可选链?.确保m.author存在时再读取id,规避异常消息导致的错误。
  • 错误事件处理:监听收集器的error事件,捕获并处理异常,防止程序因未捕获错误崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:30:47