Как я могу получить UUID игрока Minecraft из его имени пользователя в NodeJS? - PullRequest
0 голосов
/ 29 мая 2020

Я знаю, что есть много других сообщений, в которых задаются те же вопросы, но ни у одного из них не было решения моей проблемы. Я использую NodeJS и Discord JS для создания бота Discord, и мне нужно получить UUID игрока Minecraft только из его имени пользователя, которое будет предоставлено в качестве аргумента в команде.

Это функция, которую я создал для этого, но она, похоже, не работает.

  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, который я установил. Я вызываю функцию, когда команда отправлена, и она получает данные из API Mojang, но не может получить 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 игрока. Есть идеи?

1 Ответ

1 голос
/ 29 мая 2020

Попробуйте использовать playername вместо args[2] в URL-адресе запроса и заставить его возвращать обещание. Также нет необходимости использовать { 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}`)
...