Discord Rich Presence 时间戳和名称

Posted

技术标签:

【中文标题】Discord Rich Presence 时间戳和名称【英文标题】:Discord Rich Prescence timestamp & name 【发布时间】:2022-01-08 13:40:08 【问题描述】:

我正在 JS 中制作一个不和谐的机器人,当调用命令时会显示“用户已经玩了几个小时的 GameName”。如果提到的用户正在玩一个缺乏丰富的存在支持的游戏,我的代码目前可以工作,但是如果像英雄联盟这样的游戏与用户一起被调用,我会收到错误TypeError: Cannot read property 'presence' of undefined。虽然我知道这意味着什么,但这是我引用以下代码中提到的用户存在的方式。

const  Client, Intents  = require('discord.js');

module.exports = 
    name: 'test',
    aliases: [],
    category: 'test',
    utilisation: '',

    execute(client, message, presence, guild) 
        let msgMention = message.mentions.members.first()

        let mp = msgMention.presence.activities[0]

        if (msgMention.presence.activities[0].name == "Spotify")
            var imgvar = mp.assets.largeImage
            var imgvar = imgvar.replace('spotify:','')
            message.channel.send(
                embed: 
                    color: '1DB954',
                    title: `$msgMention.displayName is listening to $mp.assets.largeText for some reason`,
                    image: 
                        url: `https://i.scdn.co/image/$imgvar`
                    ,
                ,
            );
         else if (mp.name == "League of Legends") 
            const n = new Date();
            console.log(n)
            const g = mp.timestamps.start;
            if (g <= 0) 
                return;
            
            const hours = Math.abs(n - g) / 36e5;
            const minutes = hours.toFixed(2)
            message.channel.send(`$msgMention.displayName has been wasting his life playing $mp.name for $minutes hours`);
         else 
            const n = new Date();
            console.log(n)
            const g = mp.timestamps.start;
            if (g <= 0) 
                return;
            
            const hours = Math.abs(n - g) / 36e5;
            const minutes = hours.toFixed(2)
            message.channel.send(`$msgMention.displayName has been playing $mp.name for $minutes hours`);
        
    ,
;

数学可以计算时间,单独的 spotify 命令也可以工作,但是英雄联盟由于它具有丰富的存在支持而根本无法工作,我该如何修复此错误以将其用于正常的非丰富存在游戏而丰富的前世游戏仍然抢夺活动的名称

【问题讨论】:

你在消息中提到过任何成员吗? 是的,该命令完全适用于任何不丰富的存在 这个错误似乎是由于msgMention未定义的原因,指出消息中没有提到任何人,你能登录msgMention吗? 我有并且它做同样的事情,就像我说丰富的存在是一个独特的场景,我 100% 提到某人并且它与非丰富的存在游戏或 Spotify 一起工作。 Finbar,存在也会在 guildCreate 上发送,所以没有存在的问题 【参考方案1】:

用户活动

  let member = message.mentions.members.first() || message.guild.members.cache.get(args[1]) || message.guild.member(message.author)
  const embed = new Discord.MessageEmbed()

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`);

【讨论】:

以上是关于Discord Rich Presence 时间戳和名称的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 discord.js 中的 user.presence.activities

试图获取 guildMember.presence.status 的 discord.js 导致“无法读取未定义的属性(读取 'status')”

Discord.js 存在用户

discord.py 嵌入带有时间戳的页脚

discord.js V12,我的命令[重复]

Discord Python Bot:改变状态