You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord服务器角色计数频道命名报错问题求助

解决Discord机器人角色计数频道名称更新问题

嘿,我看到你在尝试实现Discord服务器角色计数并更新指定频道名称时遇到了两个问题,让我帮你梳理一下问题根源和解决方案~

问题核心:属性大小写错误

你遇到的两个问题本质上是同一个原因:Discord.js的属性名称是区分大小写的,你代码里用的Roles是大写开头,但实际上Guild对象的角色集合属性是小写的roles

第一个错误分析

你第一次的代码:

const RolesChannel = client.channels.get("649537269988065280")
RolesChannel.setName(RolesChannel.guild.Roles + ' Roles!')
console.log('updated ' + RolesChannel.guild.name+ '\'s Roles channel!')

因为RolesChannel.guild.Roles是undefined(Discord.js里没有这个大写的属性),所以频道名称被设置成了undefined Roles!

第二个错误分析

你添加.size后的代码:

const RolesChannel = client.channels.get("649537269988065280")
RolesChannel.setName(RolesChannel.guild.Roles.size + ' Roles!')
console.log('updated ' + RolesChannel.guild.name+ '\'s Roles channel!')

这里RolesChannel.guild.Roles依然是undefined,当你尝试读取它的.size属性时,就会抛出TypeError: Cannot read property 'size' of undefined的错误,导致程序崩溃。

修正后的代码

把大写的Roles改成小写的roles,同时建议你处理异步操作(因为setName是异步方法),并添加基本的错误捕获:

// 建议用async函数包裹,或者使用.then()处理异步
async function updateRoleCountChannel() {
  const rolesChannel = client.channels.get("649537269988065280");
  
  // 先检查频道是否存在
  if (!rolesChannel) {
    console.log("指定的角色计数频道不存在!");
    return;
  }

  try {
    // 获取服务器角色数量(注意是guild.roles.size)
    const roleCount = rolesChannel.guild.roles.size;
    // 更新频道名称
    await rolesChannel.setName(`${roleCount} Roles!`);
    console.log(`更新了 ${rolesChannel.guild.name} 的角色计数频道!`);
  } catch (error) {
    console.error("更新频道名称时出错:", error);
  }
}

// 调用函数
updateRoleCountChannel();

额外注意事项

  • 权限检查:确保你的机器人拥有管理频道(Manage Channels)的权限,否则无法修改频道名称。
  • Discord.js版本适配:如果你使用的是v12及以上版本,client.channels.get()已经被弃用,建议改用异步的client.channels.fetch("频道ID"),示例:
    const rolesChannel = await client.channels.fetch("649537269988065280");
    
  • 角色计数精准性guild.roles.size会包含服务器的所有角色(包括@everyone),如果想排除系统默认的@everyone角色,可以用guild.roles.filter(role => role.name !== '@everyone').size(v11及之前版本),v12+版本则需要加上.cacheguild.roles.cache.filter(role => role.name !== '@everyone').size

内容的提问来源于stack exchange,提问作者user12441617

火山引擎 最新活动