【问题标题】:Discord js v13 channel filter not workingDiscord js v13频道过滤器不起作用
【发布时间】:2021-10-31 12:15:49
【问题描述】:

我目前正在尝试让文本通道和语音通道的总数显示在我的嵌入中,当我尝试像在 discord.js v12 中那样过滤它们时,它给我的输出为 0 但如果我使用没有过滤器,做 guild.channels.cache.size,它打印 4 是正确的数量(2 个文本通道,1 个语音通道,1 个类别通道)。

如果有人能解释为什么它打印的是 0 而不是正确数量的文本/语音通道,那真是太棒了,我到处搜索,找不到它不起作用的原因。

const { SlashCommandBuilder } = require('@discordjs/builders');
const { MessageEmbed } = require('discord.js');

// EXPORT SERVERINFO COMMAND DATA TO NODE
module.exports = ({
    data: new SlashCommandBuilder()
        .setName('serverinfo')
        .setDescription('Basic Server Info.'),
    async execute(interaction) {
        // REFERENCE THE GUILD
        const guild = interaction.guild;
        // CREATE TEST EMBED
        const serverInfoEmbed = new MessageEmbed();
        serverInfoEmbed.setColor('#36393F');
        serverInfoEmbed.setAuthor('Fyce Bot - /serverinfo', interaction.user.avatarURL(), 'https://github.com/ttommie/fyce-bot/');
        serverInfoEmbed.setTitle('Server Information');
        serverInfoEmbed.setThumbnail(guild.iconURL());
        serverInfoEmbed.addFields(
            { name: 'Name', value: `${guild.name}`, inline: true },
            { name: '\u200B', value: '\u200B', inline: true },
            { name: 'Owner', value: `<@${guild.ownerId}>`, inline: true },
            { name: 'Total Members', value: `${guild.memberCount}`, inline: true },
            { name: 'Users Count', value: `${guild.members.cache.filter(member => !member.user.bot).size}`, inline: true },
            { name: 'Bots Count', value: `${guild.members.cache.filter(member => member.user.bot).size}`, inline: true },
            { name: 'Text Channels', value: `${guild.channels.cache.filter(channels => channels.type === 'text').size}`, inline: true }, // PROBLEM HERE 
            { name: 'Voice Channels', value: `${guild.channels.cache.filter(c => c.type === 'voice').size}`, inline: true }, // PROBLEM HERE 
            { name: 'Roles Count', value: `${guild.roles.cache.size}`, inline: true },
        );
        serverInfoEmbed.setFooter(`${guild.name} - Date Created`);
        serverInfoEmbed.setTimestamp(`${guild.createdAt.toUTCString().substr(0, 16)}`);

        await interaction.reply({ embeds: [serverInfoEmbed] });
    },
});

【问题讨论】:

  • 您不必在标题中写“[已解决]”。接受答案表示每个人都已成功回答您的问题。

标签: javascript node.js discord discord.js embed


【解决方案1】:

Discord.js v13 更改了Channel.type 的可能值。

这里是你如何改变它

//text channel filter
- guild.channels.cache.filter(c => c.type === 'text')
+ guild.channels.cache.filter(c => c.type === 'GUILD_TEXT')

//vc filter
- guild.channels.cache.filter(c => c.type === 'voice')
+ guild.channels.cache.filter(c => c.type === 'GUILD_VOICE')

//category filter
- guild.channels.cache.filter(c => c.type === 'category')
+ guild.channels.cache.filter(c => c.type === 'GUILD_CATEGORY')

- 前面的所有内容替换为下面以 + 开头的文本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2021-11-18
    • 2021-05-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多