Discord.js报guildes属性未定义错误,如何实现机器人每10秒切换状态
Discord.js 自动切换状态报错修复方案
错误点说明
this指向错误:ready事件回调中不需要通过this.client访问实例,你已经在全局声明了client变量,直接使用即可,原代码中this为undefined导致触发属性读取报错- 多处拼写错误:
- 服务器集合属性名应为
guilds,原代码误写为guildes - 状态数组定义时命名为
activitives,调用时误写为activities - 设置状态的方法应为
setActivity,原代码误写为serActivity
- 服务器集合属性名应为
- 时间设置错误:
setInterval第二个参数单位为毫秒,原代码写20代表20毫秒切换一次,10秒需要设置为10000 - 缺失登录逻辑:原代码没有调用
client.login(mySecret),机器人无法上线触发ready事件 - (适配Discord.js v13及以上版本)新版本SDK要求在初始化Client时声明
GUILDS权限,否则无法正常读取服务器、频道缓存
修复后完整代码
const mySecret = process.env['token'] const Discord = require('discord.js') // Discord.js v12及更低版本可以直接写 new Discord.Client() 即可 const client = new Discord.Client({ intents: [Discord.Intents.FLAGS.GUILDS] }); client.on('ready', () => { console.log(`Discord.js: Ready on: ${client.user.tag} ✅`) const activities = [ `${client.guilds.cache.size} servers!`, `${client.channels.cache.size} channels!`, `${client.guilds.cache.reduce((a,b) => a + b.memberCount, 0)} users!`, ]; let i = 0 // 每10秒切换一次状态 setInterval(() => client.user.setActivity(`?bhelp | ${activities[i++ % activities.length]}`, { type : 'LISTENING'}), 10000); }) client.login(mySecret)
内容的提问来源于stack exchange,提问作者NotSwordOP
相关产品推荐
相关产品推荐

