我的问题是,当用户进入live并在discord上具有live状态时,在控制台中我得到错误“
TypeError:无法读取未定义的属性'activities'”,并且bot正在崩溃。我希望bot发送带有链接到流消息。discord.js-v12代码:
client.on('presenceUpdate', (oldMember, newMember) => {
const channel = newMember.guild.channels.cache.find(x => x.name === "test");
if (!channel) return;
let oldStreamingStatus = oldMember.presence.activities.type ? oldMember.presence.activities.streaming : false;
let newStreamingStatus = newMember.presence.activities.type ? newMember.presence.activities.streaming : false;
if(oldStreamingStatus == newStreamingStatus){
return;
}
if(newStreamingStatus){
if(message.member.roles.cache.find(r => r.name === "test")) {
channel.send(`${newMember.user}, is live URL: ${newMember.presence.activities.url} ${newMember.presence.activities.name}`);
return;
}else
return;
}});
OldMember
和NewMember
的类型为Presence
,因此您不需要访问.Presence
属性来获取成员的活动,只需使用OldMember.activities
即可。对于newmember.presence.activities.url
&NewMember.Presence.Activities.Name
执行以下操作:
newMember.activities.find(activity => activity.type === 'STREAMING').name
newMember.activities.find(activity => activity.type === 'STREAMING').url
但是,无论采用哪种方式,您的代码都无法工作,因为活动
返回一个activity
数组,因此您可以通过两种方式来完成此操作。
(推荐)正在查找流
类型的activity
:
let oldStreamingStatus = oldMember.activities.find(activity => activity.type === 'STREAMING') ? true : false;
let newStreamingStatus = newMember.activities.find(activity => activity.type === 'STREAMING') ? true : false;
获取第一个activity
:
let oldStreamingStatus = oldMember.activities[0].type === 'STREAMING' ? true : false
let newStreamingStatus = newMember.activities[0].type === 'STREAMING' ? true : false
问题是,oldMember和newMember已经存在,因此删除.presence
。