我试图动态检查对回复的消息的反应,当我粘贴文字消息id时,它可以正常工作,但是当我将其分配给变量时,它给出了TypeError:无法读取null属性(读取'users').
我使用msg.fetchReference()
获取参考消息,并将其分配给repliedTo
。我已经确认repliedTo.id
给出了当我粘贴它时工作的id,并且该变量返回一个字符串。
cacheChannel.messages.fetch(repliedTo.id).then(reactionMessage => {
reactionMessage.reactions.resolve('📌').users.fetch().then(userList => {
userList.map((user) => {
if (user.id === 'testID') {
console.log('already reacted');
}
});
});
});
旁注:我最初尝试这没有试图获取消息,因为它是现在,只是使用repliedTo
代替reactionMessage
,但我有同样的问题。
在你的代码中,你正在使用===
,它也检查x1
和x2
是否具有相同的数据类型!正如您所说,当user.id
是Number
时,变量返回String
,因此我建议尝试将===
更改为==
,这只检查值!这里还有一个解释它是如何工作的!
所以问题是,当ID与字母混合它给出了一个错误?您可以使用isNaN function
返回它,如果Id没有任何数字或Id与字母混合。
cacheChannel.messages.fetch(repliedTo.id).then(reactionMessage => {
reactionMessage.reactions.resolve('📌').users.fetch().then(userList => {
userList.map((user) => {
if(isNaN(user.id)) {
return message.reply("Your_Message")
} else if (user.id === 'testID') {
console.log('already reacted');
}
});
});
});
也可以使用try {} catch {}
函数
cacheChannel.messages.fetch(repliedTo.id).then(reactionMessage => {
reactionMessage.reactions.resolve('📌').users.fetch().then(userList => {
userList.map((user) => {
try {
if (user.id === 'testID') {
console.log('already reacted');
}
} catch {
return message.reply("Your_Message")
}
});
});
});