【问题标题】:Cannot read property 'activities' of undefined无法读取未定义的属性“活动”
【发布时间】:2020-08-25 21:19:51
【问题描述】:

我的问题是,当用户上线并在不和谐中具有实时状态时,在控制台中我收到错误“
TypeError:无法读取未定义的属性“活动”并且机器人正在崩溃。我希望机器人发送一条带有流链接的消息。 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;
}});

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    oldMembernewMemberPresence 类型,因此您无需访问.presence 属性即可获取成员的活动,只需使用oldMember.activities 即可。对于newMember.presence.activities.urlnewMember.presence.activities.name,请执行以下操作:

    newMember.activities.find(activity => activity.type === 'STREAMING').name
    newMember.activities.find(activity => activity.type === 'STREAMING').url
    

    但是,无论哪种方式,您的代码都不起作用,因为 activities 返回一个 Activity 数组,因此您可以通过 2 种方式进行此操作。

    (推荐)寻找Activity类型的STREAMING

    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
    

    【讨论】:

    • 你能告诉我为什么在 bot 消息 url 和流名称中未定义吗? ` channel.send(` ${newMember.user}, 是实时 URL:${newMember.activities.url} ${newMember.activities.name}`);即使我将活动更改为活动,我也会收到错误无法读取未定义的属性“url”。
    • 没问题,但如果我还有一个问题 - 所以我只想在用户具有特定角色时通过机器人发送消息,所以我制作: const roleid = '706528765009985576'; if(newMember.roles.has(roleid)) ... ;我得到错误无法读取未定义的属性“有”;我该如何解决?
    • 因为我们已经建立了newMember 返回Presence 而不是UserGuildMember,所以您需要执行以下操作:newMember.member.roles.cache.some(role => role.id === roleid)
    【解决方案2】:

    问题是,oldMember 和 newMember 已经存在,所以删除.presence

    【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2020-04-06
    • 2020-10-30
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多