无法读取未定义 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;
【问题讨论】:
什么被标记为未定义?role
或 emojis
?
@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 的欢迎消息 - “无法读取未定义的属性 'get'”