如何在Node.js与Discord.js v14中获取分类下的所有频道ID?
在Discord.js v14中获取指定分类下所有频道ID的正确方法
问题分析
你代码报错的核心原因有两个:
guild.channels.cache.get是同步缓存查询,不需要加await- 分类频道的子频道集合属性是
children,不是你写的channel
另外,直接依赖缓存可能出现分类频道未被缓存的情况,更可靠的方式是用channels.fetch主动获取频道数据。
修正后的代码
// 从交互对象中获取服务器实例 const guild = interaction.guild; // 主动获取指定ID的分类频道(避免缓存缺失问题) const category = await guild.channels.fetch(config.ticketkategori); // 遍历分类下的所有子频道并输出ID category.children.forEach(channel => { console.log(channel.id); });
可选扩展:过滤指定类型的频道
如果只需要获取分类下的特定类型频道(比如文本频道),可以用filter筛选:
// 导入ChannelType枚举(v14推荐用法) const { ChannelType } = require('discord.js'); // 仅筛选文本频道 const textChannels = category.children.filter(channel => channel.type === ChannelType.GuildText); textChannels.forEach(channel => console.log(channel.id));
注意事项
- 确保机器人已启用
Guilds和GuildChannels权限意图,否则无法正常获取频道数据 - 如果你的
config.ticketkategori不是有效的分类频道ID,需要先确认ID的正确性
内容的提问来源于stack exchange,提问作者NoobFly
相关产品推荐
相关产品推荐

