使用discord.js 14.7.1开发Discord机器人:游戏状态检测遇阻
解决Discord.js 14.7.1中presenceUpdate事件检测特定游戏的问题
先确认机器人权限配置
要获取用户状态,必须完成两项关键配置:- 在Discord开发者门户的Bot页面,开启
Privileged Gateway Intents下的Presence Intent和Server Members Intent - 代码初始化客户端时声明对应的Intents:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildPresences, GatewayIntentBits.GuildMembers ] });- 在Discord开发者门户的Bot页面,开启
正确监听presenceUpdate并检测游戏
事件接收oldPresence和newPresence两个参数,从newPresence的活动列表中筛选「正在玩」的游戏,再匹配目标名称:client.on('presenceUpdate', (oldPresence, newPresence) => { // 找到类型为"PLAYING"的活动(类型值为0) const playingActivity = newPresence.activities.find(act => act.type === 0); if (!playingActivity) return; // 替换成你要检测的游戏名称,注意大小写和特殊字符 const targetGame = "目标游戏名称"; if (playingActivity.name === targetGame) { // 这里添加你的业务逻辑,比如记录日志、发送频道提醒 console.log(`${newPresence.user.tag} 正在游玩 ${targetGame}`); } });常见问题排查
- 用户设置隐身状态时,机器人无法获取其Presence数据
- 游戏名称必须完全匹配,部分游戏会显示英文原名而非中文,需确认实际显示名称
- 确保机器人在目标服务器内可见(无需特殊权限,但需加入服务器)
内容的提问来源于stack exchange,提问作者Anwar Bounagui
相关产品推荐
相关产品推荐

