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