如何修复“TypeError:无法读取未定义的属性 'toString'” |不和谐.js
Posted
技术标签:
【中文标题】如何修复“TypeError:无法读取未定义的属性 \'toString\'” |不和谐.js【英文标题】:How to fix "TypeError: Cannot read property 'toString' of undefined" | discord.js如何修复“TypeError:无法读取未定义的属性 'toString'” |不和谐.js 【发布时间】:2020-07-31 04:33:24 【问题描述】:我正在尝试为我的不和谐机器人创建赠品命令。
一切都很完美,除了最后部分显示谁赢得了赠品。我正在尝试将 winners
数组转换为字符串,以便我可以发送一条显示获胜者的消息。我花了一整天的时间试图解决这个问题(说实话,我不太擅长编程)但无济于事。 请帮忙!
message.channel.send("???? **GIVEAWAY** ????").then(() =>
message.channel.send(Embed).then((gMessage) =>
gMessage.react("????");
setTimeout(function()
var peopleReacted = gMessage.reactions.cache.get("????").users;
var winners = [];
// Checks if fewer people reacted than the the winner count allows users to win
if (peopleReacted.length <= args[2])
winners = peopleReacted;
else
// Gets as many random users from the peopleReacted as the winner count allows users to win
for (var i = 0; i < args[2]; i++)
var index = Math.floor(
Math.random() * peopleReacted.length
);
winners.push(peopleReacted[index]);
// After adding a user to winners, remove that item from the array to prevent them from winning multiple times
peopleReacted.cache.array().splice(index, 1);
var winnerMsg = "User(s) ";
for (var i = 0; i < winners.length; i++)
// Add each winner to the winnerMsg
winnerMsg += winners[i].toString() + ", ";
var haveHas;
if (winners.length === 1)
haveHas = "has";
else
haveHas = "have";
message.channel.send(`$winnerMsg $haveHas won $msgArgs`);
, time * (60 * 1000));
);
);
如果有帮助,我的所有机器人代码都可以在 here 找到。
【问题讨论】:
尝试调试。显然,winners[i]
在某些时候为空,因此null.toString()
将抛出异常
在尝试将其转换为字符串之前添加 console.log(winners[i])
和 console.log(winners)
并告诉我们它返回的内容。
@Aci 我照你说的做了。对于console.log(winners[i])
,我得到了undefined
,对于console.log(winners)
,我得到了[ undefined ]
。登录时我没有对赠品做出反应,并说只能有一个赢家。 (机器人是唯一做出反应的。)
我呃...在这方面仍然需要帮助。
【参考方案1】:
gMessage.reactions.cache.get("?").users
可能是问题所在,因为gMessage.reactions.cache.get("?")
返回一个集合,它没有用户属性(= 它是undefined
)。
如果您想将反应作为一个数组,只需使用gMessage.reactions.cache.get("?").array()
,这将返回一个包含用户对象的数组(注意:这些不是“普通”用户对象,而是ReactionUserManager
,您可以在文档中找到更多关于这些的信息https://discord.js.org/#/docs/main/stable/class/ReactionUserManager)
【讨论】:
遇到错误TypeError: gMessage.reactions.cache.get(...).array is not a function
:\
@LiamTheSnowLeopard 您使用的是哪个版本的 Discord.js?这些文档适用于 v12,与 v11 相比发生了很大变化,在我的旧机器人(使用 v11.5.1 左右)中,我不得不做 msg.reactions.first().users.array()
例如。您可以在 package.json 文件中查看您的版本
我正在为我的机器人使用 discord.js v12.1.1。如果我的版本有问题,你会碰巧知道.array()
的替代品吗?
Nvm,我发现了一个和.array()
非常相似的函数,就是.toArray()
。我将在今天晚些时候对其进行测试。
我收到一条错误消息,说.toArray()
不是一个函数……嗯,值得一试,哈哈以上是关于如何修复“TypeError:无法读取未定义的属性 'toString'” |不和谐.js的主要内容,如果未能解决你的问题,请参考以下文章
构建新的 Vue CLI 3 项目时,如何修复 terser-webpack-plugin 中的“TypeError:无法读取未定义的属性“缩小”?
TypeError:无法读取未定义的属性“获取”(修复冲突导入不起作用)
不和谐赠品| TypeError:无法读取未定义的属性“开始”
ReactJS TypeError:无法读取未定义的属性“推送”