无法读取未定义 discord.js 的属性“名称”尝试读取 json 中的数组

Posted

技术标签:

【中文标题】无法读取未定义 discord.js 的属性“名称”尝试读取 json 中的数组【英文标题】:Cannot read property 'name' of undefined discord.js Trying to read array inside json 【发布时间】:2021-11-08 18:26:44 【问题描述】:

我无法从我的reactions.json 中检索到与role.name 匹配的表情符号名称。不知道我错过了什么,我已经盯着它看了好几个小时。 '

对于我在这里缺少的东西有点困惑。

reactions.json


"channel": "test",
"channelID": "",
"roles": 
  "melee": "???? Melee DPS",
  "ranged": "???? Ranged DPS",
  "caster": "???????? Caster DPS",
  "healer": "???? Healer",
  "tank": "???? Tank"
,
"vote": 
    "melee": "????",
    "ranged": "????",
    "caster": "????????",
    "healer": "????",
    "beginner": "????"
  ,
 

Javascript

client.on('messageReactionAdd', addRole);

async function addRole(message, emojis, user) 

if (message.partial) 
  try 
    await message.fetch();
    
   catch (err) 
    console.error('Error fetching message', err);
    return;
  


const  guild  = message;

const member = guild.members.cache.get(user.id);


const reactionsJSON = JSON.parse(fs.readFileSync('reactions.json', 'utf8'));
const  guild  = message;
const role = guild.roles.cache.find((role) => role.name === reactionsJSON[emojis.name]);

if (!role) 
  console.error(`Role not found for '$reactionsJSON[emojis]'`);
  return;


try 
  member.roles.add(role.id);
 catch (err) 
  console.error('Error adding role', err);
  return;


【问题讨论】:

什么被标记为未定义? roleemojis? @TheOtterlord 表情符号 哦,等一下。在这段代码中,没有定义表情符号? @TheOtterlord 我正在更新以包含异步功能。对此感到抱歉 好的,所以任何调用 addRole 的东西都会通过一个包含消息的对象,但不包括表情符号(因此它是未定义的)。所以我认为问题在于堆栈的更高层? 【参考方案1】:

好的,我认为问题在于对事件的MessageReaction 属性的解构。该对象包含消息,但不包含emojis,但它包含一个值emoji,其中包含您要查找的内容。

.emoji(只读)

此反应的表情符号。已知自定义表情符号的 GuildEmoji 对象,或具有较少属性的 ReactionEmoji 对象。无论表情符号的原型是什么,它仍然具有名称、id、标识符和 toString()
client.on('messageReactionAdd', addRole);

async function addRole(message, emoji, user) 

if (message.partial) 
  try 
    await message.fetch();
    
   catch (err) 
    console.error('Error fetching message', err);
    return;
  


const  guild  = message;

const member = guild.members.cache.get(user.id);


const reactionsJSON = JSON.parse(fs.readFileSync('reactions.json', 'utf8'));
const  guild  = message;
const role = guild.roles.cache.find((role) => role.name === reactionsJSON[emoji.name]);

if (!role) 
  console.error(`Role not found for '$reactionsJSON[emoji]'`);
  return;


try 
  member.roles.add(role.id);
 catch (err) 
  console.error('Error adding role', err);
  return;


Documentation

【讨论】:

以上是关于无法读取未定义 discord.js 的属性“名称”尝试读取 json 中的数组的主要内容,如果未能解决你的问题,请参考以下文章

无法读取 discord.js 中未定义的属性“发送”

Discord.js 无法读取未定义的属性“获取”

Discord.js 的欢迎消息 - “无法读取未定义的属性 'get'”

discord.js 成员计数 - 无法读取未定义的属性“通道”

无法读取未定义的属性“发送”(Discord.js)

Discord.js 无法读取未定义的属性“发送”