Home > database >  guild.channels.filter is not a function discord.js
guild.channels.filter is not a function discord.js

Time:04-20

I was trying to make a user presence but I am getting an error:

guild.channels.filter is not a function

My code:

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' }],
  });
});

CodePudding user response:

guild.channels returns a GuildChannelManager so it doesn't have a filter method. You can fetch all channels that returns a collection, and then you can use filter on that:

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

That channel.type won't work though as that snowflake is not one of the ChannelTypes. You'll either need to use a valid ChannelType or use channel.id.

CodePudding user response:

Guild#channels is a GuildChannelManager. I also see you are setting your status in a loop, which is a terrible idea, due to it being an API request. Use it outside of it and use .cache to get the Collection of channels

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' }],
  });
  • Related