Discord.js v14 Bot Missing Member Data: A Diagnostic Guide for Intents and Permissions
Discord.js v14 bots often fail silently when privileged intents are misconfigured. This diagnostic guide walks through member data absence, message events, and slash command registration issues.
21 Jun 2026, 12:38 UTC

Recognizable Condition
Your Discord.js v14 bot appears to run without errors, but member data is absent from events like messageCreate, guildMemberAdd, or interactionCreate. The message.author is undefined, guild.members.cache is empty, or slash commands fail to resolve user information. No explicit error messages appear in the console.
Short Cause/Diagnostic Table
| Symptom | Most Likely Cause |
|---|---|
| Member events silent or cache empty | Missing GuildMembers intent |
| Message events don't fire | Missing GuildMessages intent |
| Presence data unavailable | Missing GuildPresences intent |
| Slash commands not registering | Missing applications.commands scope or incorrect endpoint |
| Bot crashes on startup | CommonJS module system with ESM-only discord.js |
Ordered Diagnostic Checks
- Verify discord.js version and Node.js compatibility
Run in your project root:
npm list discord.js node --versionExpected: discord.js 14.x.x and Node.js 16.9.0 or higher. If using CommonJS, ensure
package.jsonincludes"type": "module". - Check client constructor intents configuration
Examine your client instantiation:
const client = new Client({ intents: [ /* your intents here */ ] });Verify the array includes
GatewayIntentBits.GuildMembers,GatewayIntentBits.GuildMessages, and any other required intents. Missing any will result in silent data absence. - Confirm Discord Developer Portal settings
Navigate to your bot in the Discord Developer Portal > Bot > Privileged Gateway Intents. Enable:
- Server Members Intent (required for member data)
- Message Content Intent (required for message content)
- Presence Intent (required for presence data)
These must match exactly what you've configured in your client constructor.
- Test slash command registration
For guild commands (faster rate limit), run:
await guild.commands.set([...]);For application commands, verify your token has
applications.commandsscope and POST to:https://discord.com/api/v10/applications/{app_id}/commands - Monitor gateway connection sequence
Add event listeners to verify connection:
client.on('shard_connect', shardId => console.log('Connected:', shardId)); client.on('shard_disconnect', (reason, shardId) => console.log('Disconnected:', reason, shardId)); client.on('shard_resume', (shardId, sessions) => console.log('Resumed:', shardId));A successful bot should log
RESUMEDorCONNECTEDwithout interruption.
Fixes Tied to Findings
If GuildMembers intent is missing:
import { Client, GatewayIntentBits } from 'discord.js';
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent
]
});
If using CommonJS with discord.js v14:
Your project must be ESM-only. Update package.json:
{ "type": "module" }
Then convert any require() statements to import statements.
If slash commands fail to register:
Ensure your bot token includes the applications.commands scope in the OAuth2 URL. Use this URL format:
https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&scope=bot%20applications.commands&permissions=0
Escalation Criteria
- If all intents are correctly configured in both code and Developer Portal but member data still doesn't appear after 30 seconds, the bot may need Discord verification for privileged intents in a public server.
- If gateway connection logs show repeated disconnections with
RESUMINGfailures, check your network stability or consider increasing the gateway timeout. - If slash commands register successfully but interactions fail to resolve users, verify that snowflake IDs are handled as strings or BigInt values, not regular numbers.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.