Discord.js:可以通过ID获取消息,但当我用变量替换ID时中断



我试图动态检查对回复的消息的反应,当我粘贴文字消息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,但我有同样的问题。

在你的代码中,你正在使用===,它也检查x1x2是否具有相同的数据类型!正如您所说,当user.idNumber时,变量返回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")
} 
});
});
});

最新更新