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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:54:04