如何从 NodeJS 中的用户名中获取 Minecraft 玩家的 UUID?

Posted

技术标签:

【中文标题】如何从 NodeJS 中的用户名中获取 Minecraft 玩家的 UUID?【英文标题】:How can I get a Minecraft player's UUID from their username in NodeJS? 【发布时间】:2020-09-17 05:00:38 【问题描述】:

我知道还有很多其他帖子都在问同样的问题,但其他帖子都没有解决我的问题。我正在使用 NodeJS 和 DiscordJS 创建一个 discord 机器人,我需要从 Minecraft 玩家的用户名中获取 UUID,该用户名将作为命令中的参数提供。

这是我为此创建的函数,但它似乎不起作用。

  function getId(playername) 
    const  data  = fetch(`https://api.mojang.com/users/profiles/minecraft/$args[2]`)
    .then(data => data.json())
    .then(( player ) => 
      return player.id;
    );
  

args[2] 是命令的第三个参数,格式如下:<prefix> id <playername>fetch 是我安装的“node-fetch”npm 模块的一部分。我在发送命令时调用该函数,它从 Mojang 的 API 获取数据,但无法获取 UUID。这是错误:

(node:39416) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined
    at C:\Users\archi\OneDrive\Documents\Programming\Discord Bots\Hypixel Discord Bot\index.js:161:21
    at processTicksAndRejections (internal/process/task_queues.js:94:5)
(node:39416) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:39416) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

它是说它无法读取'id'的属性,如果你使用Mojang API,它是玩家UUID的关键。有什么想法吗?

【问题讨论】:

mojang api 表示它返回一个包含对象的数组。您假设它只返回一个对象。 return player[0].id 或许。 该页面还显示了应如何格式化有效负载我不确定您是否完全正确。检查您的浏览器开发工具网络选项卡,找到 api 调用并检查参数是否正确。 @James 不幸的是这不起作用,尽管我知道你来自哪里。在 wiki 上,有两种从名称中获取 UUID 的不同方式,一种是 POST,一种是 GET,这在 JS 中的实现方式有区别吗? 供参考,using fetch 【参考方案1】:

尝试在请求 URL 中使用 playername 而不是 args[2],并使其返回一个承诺。也没有必要使用 player ,因为 API 返回的对象没有玩家专有。只需使用player 作为箭头函数的参数即可。

function getId(playername) 
  return fetch(`https://api.mojang.com/users/profiles/minecraft/$playername`)
    .then(data => data.json())
    .then(player => player.id);

然后在你的代码中这样调用它:

// Using .then (anywhere)
getId(args[2]).then(id => 
  console.log(`ID is $id`)
)
// Using await (inside of an async function)
const id = await getId(args[2])
console.log(`ID is $id`)

【讨论】:

仍然出现同样的错误,该函数没有返回任何内容 @ArchieMargretts 我已经更新了答案,请再次检查:) 我再次更新了它。我忽略了一件产生巨大影响的小事。

以上是关于如何从 NodeJS 中的用户名中获取 Minecraft 玩家的 UUID?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Node Js 服务器中的查询字符串中获取 id 或任何变量数据?

如何从firebase中的电子邮件中获取用户信息

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

从nodejs中的CSV文件获取数据

如何从 NodeJS 中的 JSONObject 获取值?

NodeJS / Express:从请求中获取用户名和密码