guild.channels.filter 不是函数 discord.js

guild.channels.filter is not a function discord.js

我试图让用户在场,但出现错误:

guild.channels.filter is not a function

我的代码:

const Discord = require('discord.js');
const guild = client.guilds.cache.get('847071265100791849');

const categoryChannels = guild.channels.filter(
  (channel) => channel.type === '886241068855734273'
);

categoryChannels.forEach((channel) => {
  const statuss = channel.children.size - 2;
  client.user.setPresence({
    status: 'online',
    activities: [{ name: `${statuss} Open Tickets ✉️`, type: 'WATCHING' }],
  });
});

guild.channels returns 一个 GuildChannelManager 所以它没有 filter 方法。您可以 fetch 所有频道 returns 一个集合,然后您可以在 filter 上使用:

const guild = client.guilds.cache.get('847071265100791849');
const channels = await guild.channels.fetch();
const categoryChannel = channels.filter(
  channel => channel.type === '886241068855734273'
);

channel.type 不会起作用,因为那个雪花不是 ChannelType 之一。您需要使用有效的 ChannelType 或使用 channel.id.

Guild#channels 是一个 GuildChannelManager。我还看到您正在循环设置您的状态,这是一个糟糕的主意,因为它是一个 API 请求。在它之外使用它并使用 .cache 来获取通道

Collection
const categoryChannels = guild.channels.cache.filter(
  (channel) => channel.type === 'GUILD_CATEGORY' // You put an ID, not type, I fixed it for you
);

const statuss = categoryChannels.reduce((acc, channel) => channel.children.size - 2, 0)
client.user.setPresence({
    status: 'online',
    activities: [{ name: `${statuss} Open Tickets ✉️`, type: 'WATCHING' }],
  });