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

Node.js Discord bot正则提取Mojang接口ID报空消息错误如何解决

问题根因

报错DiscordAPIError: Cannot send an empty message的核心原因是你调用message.channel.send(match)时,match的值为null/undefined,discord.js v13及以上版本不允许发送空内容的消息,因此抛出错误码为50006的异常。

具体错误点

  1. 正则表达式编写错误
    你当前写的正则"(?<=id\":\"(.*)(?=\")"存在两个问题:
  • 语法结构错误,后向断言缺少闭合括号,整体规则不合法,无法正常匹配内容
  • 使用字符串格式定义正则,转义规则会出现偏差,且匹配成功后match返回的是数组,你没有取捕获组的内容就直接发送,也会导致内容不符合预期
  1. 完全不需要用正则解析JSON
    Mojang接口返回的body是标准JSON格式,用正则解析属于舍近求远,很容易出现匹配异常,直接转成JS对象取值更稳定。

修复后的代码

const username = message.content.trim();
const request = require('request');
// 用户名转义避免特殊字符导致请求错误
request(`https://api.mojang.com/users/profiles/minecraft/${encodeURIComponent(username)}`, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body)
        message.channel.send(body);
        try {
            // 直接解析JSON取id字段
            const userInfo = JSON.parse(body);
            const userId = userInfo.id;
            // 兜底判断,避免空内容发送
            message.channel.send(userId ? userId : '未查询到对应用户ID');
        } catch (err) {
            message.channel.send('用户数据解析失败');
        }
    } else {
        message.channel.send('Mojang接口请求失败,请检查输入的用户名是否有效');
    }
})

额外注意事项

  • 发送消息前必须判断内容是否为空,添加兜底提示可以完全避免空消息报错
  • 接口请求建议加异常捕获逻辑,避免接口返回异常内容导致整段代码崩溃
  • 第三方接口请求的入参一定要做转义处理,避免注入或者请求路径异常问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:06