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

Discord.js v14无法获取服务器成员游戏活动问题求助

问题解决:Discord.js v14无法获取成员在线状态及游戏活动

核心问题分析

你的代码存在两个关键问题:缺失必要的网关权限(Intents),以及对Discord.js v14的Presence API使用错误。

具体修复步骤

1. 添加缺失的网关权限

要获取成员的在线状态和活动数据,必须启用GuildPresences Intent,同时还要确保在Discord开发者门户的Bot页面开启Presence Intent和Server Members Intent权限。

修改后的Client初始化代码:

const { Client, GatewayIntentBits, ActivityType } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildPresences, // 新增这个Intent
  ],
});

2. 修正Presence数据的访问逻辑

Discord.js v14中,成员的在线状态和活动数据的访问路径有变化:

  • 在线状态直接通过member.presence?.status获取(可选链操作符避免报错)
  • 游戏活动存储在member.presence?.activities数组中,需要筛选出type为ActivityType.Playing的项

修改后的成员遍历逻辑:

members.each((member) => {
    console.log(`  Mitglied: ${member.user.tag} (${member.id})`);

    // 判断在线状态:presence存在且状态不是offline
    const isOnline = member.presence?.status !== 'offline';
    if (isOnline) {
        // 筛选出正在玩的游戏活动
        const gameActivity = member.presence.activities.find(act => act.type === ActivityType.Playing);
        if (gameActivity) {
            console.log(`    Aktuell gespieltes Spiel: ${gameActivity.name}`);
        } else {
            console.log(`    Das Mitglied spielt derzeit kein Spiel.`);
        }
    } else {
        console.log(`    Das Mitglied ist offline.`);
    }
});

3. 注意事项

  • 必须在Discord开发者门户开启对应的权限,否则即使代码中添加了Intent,也无法获取数据
  • 使用可选链操作符?.可以避免因member.presence不存在而抛出的错误
  • 隐身状态的成员会被识别为offline,这是Discord的隐私机制

完整修复后的代码

const { Client, GatewayIntentBits, ActivityType } = require('discord.js');

// Erstelle einen neuen Discord-Client
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildPresences,
  ],
});

const token = 'token';

client.once('ready', async () => {
    console.log('Bot ist bereit!');

    client.guilds.cache.each(async (guild) => {
        console.log(`Gilde: ${guild.name} (${guild.id})`);

        const members = await guild.members.fetch();

        members.each((member) => {
            console.log(`  Mitglied: ${member.user.tag} (${member.id})`);

            const isOnline = member.presence?.status !== 'offline';
            if (isOnline) {
                const gameActivity = member.presence.activities.find(act => act.type === ActivityType.Playing);
                if (gameActivity) {
                    console.log(`    Aktuell gespieltes Spiel: ${gameActivity.name}`);
                } else {
                    console.log(`    Das Mitglied spielt derzeit kein Spiel.`);
                }
            } else {
                console.log(`    Das Mitglied ist offline.`);
            }
        });
    });
});

client.login(token);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:42