Discord.js报错TypeError: Cannot read property 'setPresence' of null如何解决?
错误产生原因
client.login()是异步网络请求方法,调用后需要等待Discord服务端返回登录鉴权成功的响应,才会完成client对象的初始化,赋值client.user属性。- 你将
client.user.setPresence()代码放在client.login()之后同步执行,此时登录流程还未完成,client.user为null,调用方法自然抛出空值读取错误。 - 额外说明:若你使用的discord.js为v13及以上版本,未配置网关意图也可能触发登录异常、
client.user初始化失败的问题。
对应解决方法
- 调整
setPresence代码的执行时机,将其移动到ready事件的回调函数内部,确保登录完成后再执行状态设置:
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); // 新增状态设置代码 client.user.setPresence({ activities: [{ name: 'Test' }], status: 'online' }); });
同时删除原来在client.login()之后写的setPresence代码。
- 若使用discord.js v13及以上版本,需要补充以下配置:
- 初始化Client时声明必要的网关意图:
const Discord = require('discord.js'); const client = new Discord.Client({ intents: [ Discord.IntentsBitField.Flags.Guilds, Discord.IntentsBitField.Flags.GuildMessages, Discord.IntentsBitField.Flags.MessageContent ] });
- 原来的
message事件已废弃,替换为messageCreate事件:
client.on('messageCreate', msg => { // 原有逻辑保持不变 })
内容的提问来源于stack exchange,提问作者Devarite
相关产品推荐
相关产品推荐

