Discord.js v13频道过滤功能失效 统计文本/语音频道返回0
问题原因
Discord.js v13 对频道类型的标识规则做了破坏性更新,和v12版本不兼容:
- v12版本中,普通服务器文本频道、语音频道的
type属性返回值为字符串'text'、'voice' - v13版本中,对应频道的
type属性返回值调整为'GUILD_TEXT'、'GUILD_VOICE'
你沿用了v12版本的过滤条件,没有匹配到任何符合要求的频道,因此返回结果为0。
修复方案
直接修改两处频道统计的过滤判断值即可:
// 文本频道统计修改为 { name: 'Text Channels', value: `${guild.channels.cache.filter(channels => channels.type === 'GUILD_TEXT').size}`, inline: true }, // 语音频道统计修改为 { name: 'Voice Channels', value: `${guild.channels.cache.filter(c => c.type === 'GUILD_VOICE').size}`, inline: true },
更规范的写法
你也可以引入官方提供的ChannelType枚举做判断,避免手动拼写字符串出错:
首先在代码顶部导入枚举:
const { SlashCommandBuilder } = require('@discordjs/builders'); const { MessageEmbed, ChannelType } = require('discord.js');
再调整判断逻辑:
{ name: 'Text Channels', value: `${guild.channels.cache.filter(channels => channels.type === ChannelType.GuildText).size}`, inline: true }, { name: 'Voice Channels', value: `${guild.channels.cache.filter(c => c.type === ChannelType.GuildVoice).size}`, inline: true },
内容的提问来源于stack exchange,提问作者Tommie
相关产品推荐
相关产品推荐

