首页 > 解决方案 > 如何获取用户活动 discord.js

问题描述

问题:我一直在尝试将“活动”字段添加到我的信息命令中,但它不起作用。

预期结果:响应其他内容以及 Activity 字段,显示用户正在做什么。

实际响应:undefined正确显示其他所有内容,但显示/的 Activity 字段除外null

代码:

if (command == "info") {
  const embed = new Discord.MessageEmbed()
  let member = message.mentions.members.first() || message.guild.members.cache.get(args[1]) || message.guild.member(message.author)
    const Roles = new Array()
    message.guild.roles.cache.forEach(role => {
      if (member.roles.cache.find(r => r.id == role.id)) {
        Roles.push(role)
      }
        })
    console.log(member.presence)
  embed.setAuthor(user.tag, member.user.avatarURL())
  embed.setTitle(` Welcome to ${user.username}'s Profile!`)
  embed.addField('#️⃣ Tag:', member.user.tag)
  embed.addField(' Joined Guild at:', member.user.joinedAt)
  embed.addField(' Joined Discord at:', member.user.cretedAt
)
if (!member.presence.activities) {
  embed.addField('⚽️ Activity:', 'Not playing anything')
} else {
  embed.addField('⚽️ Activity:', `${member.presence.activities.type} ${member.presence.activities.name}\n${member.presence.activities.details}\n${member.presence.activities.state}`)
}
  embed.addField(' Platform:', member.presence.clientStatus)
  embed.addField(' Bot:', user.bot)
  embed.addField(' Roles:', Roles.join(' | '))
  embed.setFooter('Bot made with discord.js')
  message.channel.send(embed)
  }

标签: javascriptnode.jsdiscorddiscord.js

解决方案


Presence.activities是一个数组Activity

// Add check for empty activities array
if (!member.presence.activities || member.presence.activities.length == 0) {
    embed.addField('⚽️ Activity:', 'Not playing anything')
} else {
    const activity = member.presence.activities[0];
    embed.addField('⚽️ Activity:', `${activity.type} ${activity.name}\n${activity.details}\n${activity.state}`);
}

大多数时候,您只需要数组的第一项。因为您很少看到有多项活动的用户。


推荐阅读