messageReactionAdd не может добавлять роли

1

Я делаю бонуса частного разлада для сервера. Я видел несколько ботов, таких как SweeperBot, а некоторые другие используют сборщик реакций для назначения ролей. Большинство из них не discord.js, поэтому я закодировал свой собственный.

У меня есть настройка messageReactionAdd, и весь блок кода работает, я тестировал каждую строку. Одна строка, в частности, ошибки каждый раз.

exports.run = (bot, reaction, user) => {
  const rmsg = reaction.message;
  if (rmsg.channel === rmsg.guild.channels.find('name', 'rules') && rmsg.id === '457681660708651010' && reaction.emoji.name === '') {
    const member = rmsg.guild.fetchMember(user)
    const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
    member.addRole(MemberRole).catch(console.error);
  }
};

Последняя строка, member.addRole(MemberRole).catch(console.error); , это строка с ошибкой, отправляющая TypeError: member.addRole is not a function каждом добавлении реакции.

Все остальное работает, так как я проверял его до этого.

Я попытался проверить различные подходы к этой переменной- member, так как я знаю, что user не является объектом GuildMember.

Я пытаюсь преобразовать его в один, используя const member = rmsg.guild.fetchMember(user) и он работает, возвращая объект GuildMember, но когда он помещается в строку addRole, это ошибки. Я использовал addRole во многих других командах, таким же образом, но, возможно, события просто не могут это использовать? Я просто пропустил что-то очевидное? Я проверял документы много раз и спрашивал на многих серверах раздора, но безуспешно.

Теги:
discord.js

1 ответ

1

guild.fetchMember() не возвращает GuildMember. Вместо этого он возвращает обещание. Вам нужно подождать, пока вы не ответите на это обещание (это будет гильдия), а затем выполните роль.
Пара способов сделать это:
Использование .then():

const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
rmsg.guild.fetchMember(user).then(member => {
    member.addRole(MemberRole).catch(console.error);
})

Или переключите весь метод на async:

exports.run = async (bot, reaction, user) => {

И затем подождите, пока вы не получите ответ от fetchMember:

const member = await rmsg.guild.fetchMember(user);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню