简体   繁体   中英

Is client.guilds.cache.size broken?

I'm trying to make it so that my discord bot displays how many servers it's on as its status, but when i do client.guilds.cache.size it just says 0. This was happening with my friend aswell.

Here's my code if it's of any use...

const fs = require('fs');
const Discord = require('discord.js');
const { prefix, token } = require('./myconfig10.json');
const client = new Discord.Client();
const cheerio = require('cheerio');
const request = require('request');
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
const embedAuthor = ('This bot was made by <my discord name>')
const servers = client.guilds.cache.size


//Telling the bot where to look for the commands
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.name, command);
}

//Once the bot is up and running, display 'Ready' in the console
client.once('ready', () => {
    console.log('Ready!');
    client.user.setActivity(`on ${servers}`);
});

//Seeing if the message starts with the prefix
client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

//Telling the bot what arguments are
    const args = message.content.slice(prefix.length).trim().split(/ +/)
    const commandName = args.shift().toLowerCase();

//Checking to see if the command you sent is one of the commands in the commands folder 
    if (!client.commands.has(commandName)) return;
    console.log(`Collected 1 Item, ${message}`)

    const command = client.commands.get(commandName);

//Try to execute the command.
    try {
        command.execute(message, args);
    
//If there's an error, don't crash the bot. 
    } catch (error) {
        console.error(error);
        
//Sends a message on discord telling you there was an error
        message.reply('there was an error trying to execute that command!');

and it says:

Its says 'Playing on 0' on my bot's status

The problem is that you are trying to grab the guilds collection before the client is ready. You need to move the code that gets client.guilds.cache.size into your ready event handler.

client.once('ready', () => {
    console.log('Ready!');
    client.user.setActivity(`on ${client.guilds.cache.size}`);
});

Relevant resources:
Why does client.guilds.cache.size only say "0" in my playing status even if it's in 2 servers?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM