提问者:小点点

无法读取未定义的属性“activities”


我的问题是,当用户进入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;
}});

共2个答案

匿名用户

OldMemberNewMember的类型为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