You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用discord.js开发Discord Bot如何获取用户当前游玩游戏的缩略图

Discord.js 游戏时长统计Bot游戏缩略图获取方案

你不需要自行维护游戏图标数据库,Discord官方CDN已提供所有平台登记过的游戏、应用的图标资源,直接通过Activity对象的applicationId和assets属性拼接即可获取。

图标拼接规则

  • 优先取activity.assets.largeImage字段:该字段为Discord为对应游戏预匹配的高清缩略图标识
    • 若标识前缀为mp:,裁剪掉前缀后拼接:https://cdn.discordapp.com/app-assets/${activity.applicationId}/${裁剪后的标识}.png
    • 无前缀直接拼接:https://cdn.discordapp.com/app-assets/${activity.applicationId}/${activity.assets.largeImage}.png
  • 无largeImage时用应用官方图标兜底:https://cdn.discordapp.com/app-icons/${activity.applicationId}/${activity.application?.icon || '0'}.png
  • 若上述资源都不存在,可自行设置通用游戏占位图兜底

修正后代码示例

const { EmbedBuilder } = require('discord.js');

const user = newPresence.user;
// 修正原代码拼写错误 oldPresnece -> oldPresence
const activities = activityDiff(oldPresence, newPresence);

activities.forEach(activity => {
    // 仅处理游戏类活动,过滤直播、听歌等其他状态
    if (activity.type !== 0) return;
    const playTime = getPlayTime(activity);
    let gameIcon = null;

    if (activity.applicationId) {
        if (activity.assets?.largeImage) {
            let imgKey = activity.assets.largeImage;
            if (imgKey.startsWith('mp:')) imgKey = imgKey.slice(3);
            gameIcon = `https://cdn.discordapp.com/app-assets/${activity.applicationId}/${imgKey}.png`;
        } else {
            gameIcon = `https://cdn.discordapp.com/app-icons/${activity.applicationId}/${activity.application?.icon || '0'}.png`;
        }
    }

    // 构建嵌入式消息
    const playTimeEmbed = new EmbedBuilder()
        .setTitle(`${user.username} 已结束游戏`)
        .setDescription(`游戏名称:${activity.name}\n本次游玩时长:${playTime}`)
        .setColor('#5865F2')
        .setThumbnail(gameIcon || '你的自定义兜底占位图地址')
        .setTimestamp();

    // 发送消息加错误捕获,避免无频道发消息权限时崩溃
    newPresence.guild.channels.cache.filter(c => c.isText()).each(channel => {
        channel.send({ embeds: [playTimeEmbed] }).catch(err => console.log('频道无发送权限,已跳过', err));
    })
})

注意事项

  • 部分小众未登记的独立游戏可能无法获取到官方图标,会自动使用兜底占位图,不影响功能运行
  • 建议仅向指定的统计频道发送消息,避免在全服所有文本频道刷屏触发用户反感

内容的提问来源于stack exchange,提问作者clzola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:09:03