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

Discord.js V13使用正则提取用户ID发送DM时报404错误如何解决?

错误原因

  • USERS_PATTERN自带全局匹配g标志,直接调用String.match()只会返回所有完整匹配结果的数组,不会返回捕获组内的用户ID,导致你拿到的id为undefined,client.users.fetch(undefined)自然会请求不存在的接口返回404
  • 直接将args数组强转为字符串的逻辑不可靠,当命令后有多个参数时会自动插入逗号,可能导致正则匹配失效
  • 没有添加错误捕获逻辑,就算ID正确,目标用户关闭了陌生人DM、或者机器人被用户拉黑也会抛出未捕获的异常

修复后代码(推荐方案,无需手动正则匹配)

const { MessageMentions: { USERS_PATTERN } } = require('discord.js');
const Discord = require("discord.js");
const Command = require("../Structures/Command.js");

module.exports = new Command({
    name: "DM",
    description: "Will DM given author",
    async run(message, args, client) {
        // 直接从消息的提及集合里取第一个被@的用户,无需手动正则解析
        const targetUser = message.mentions.users.first();
        if (!targetUser) return message.reply("请@你要发送DM的用户");

        try {
            await targetUser.send("Hello");
            message.reply("DM已发送成功");
        } catch (err) {
            // 捕获所有异常场景,避免程序崩溃
            message.reply("无法向该用户发送DM,可能是用户关闭了陌生人私信或已拉黑机器人");
            console.error("发送DM失败:", err);
        }
    }
})

需坚持使用正则匹配的修复方案

const { MessageMentions: { USERS_PATTERN } } = require('discord.js');
const Discord = require("discord.js");
const Command = require("../Structures/Command.js");

module.exports = new Command({
    name: "DM",
    description: "Will DM given author",
    async run(message, args, client) {
        // 取第一个参数做匹配,不要转换整个args数组
        const match = USERS_PATTERN.exec(args[0]);
        if (!match) return message.reply("请@你要发送DM的用户");

        const id = match[1];
        try {
            const targetUser = await client.users.fetch(id);
            await targetUser.send("Hello");
            message.reply("DM已发送成功");
        } catch (err) {
            message.reply("无法向该用户发送DM,可能是用户ID无效、用户关闭了陌生人私信或已拉黑机器人");
            console.error("操作失败:", err);
        }
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:04