Получить аватар пользователя из идентификатора пользователя

В настоящее время я разрабатываю бота, объявляющего день рождения, используя discord.js. Я хотел показать аватар пользователя, используя его идентификатор пользователя Discord, чтобы затем использовать его во встраивании.

Использование client.fetchUser('[userID]').avatarURL в настоящее время не работает.

const exampleEmbed = new Discord.RichEmbed()
    .setColor('#0099ff')
    .setAuthor('? Birthday Announcement:')
    .setThumbnail(cleint.fetchUser('[userID]').avatarURL)
    .setDescription('? Happy day of birth [user ID]! ?')
    .setFooter('May 25');

client.on('message', message => {
    if (message.content.toLowerCase().startsWith('f.test')) {
        message.channel.send(exampleEmbed);
    }
});

Он отправит вставку без изображения, но после этого каждые несколько секунд будет давать throw er.

Что за исключение?

jspcal 17.06.2019 20:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
2 863
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Client.fetchUser() возвращает Обещать. По сути, вам нужно дождаться, пока он вернет значение. Вы можете сделать это, используя ключевое слово await или присоединив к обещанию метод then(). Однако вы также должны перехватывать любые ошибки в случае отклоненного обещания с помощью метода catch() или инструкции try...catch.

Я бы посоветовал прочитать документацию это MDN, чтобы узнать больше об асинхронном программировании в JavaScript.

Пример 1:

// This needs to be inside of an async function to use 'await'
const { displayAvatarURL } = await client.fetchUser('id')
  .catch(console.error);

embed.setThumbnail(displayAvatarURL);

Пример 2:

client.fetchUser('id')
  .then(user => {
    const embed = new Discord.RichEmbed()
      .setThumbnail(user.displayAvatarURL);
  })
  .catch(console.error);

В этих примерах я использую displayAvatarURL, потому что он вернет URL-адрес аватара по умолчанию, если пользователь не установил свой собственный.

Перепробовав множество решений, мне удалось сделать этот код для собственного использования.

const client = new Discord.Client();
let thanos = client.users.fetch('IDHERE');
thanos.then(function(result1) {
    //put your code that uses the result1 (the user object) here
    //for example, you could do var imgURL = result1.displayAvatarURL();
});

Другие вопросы по теме