Search code examples
javascriptnode.jsdiscorddiscord.js

Setting up SetInterval to update server stats in discord.js


I couldn't manage to setInterval on this function to add it working in any way, was trying diffrent functions,bools etc.. didn't make it working even once. My code:

Index.js

// Require the necessary discord.js classes
const { Client, Intents } = require('discord.js');
const { token } = require('./config.json');

const client = new Client({
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MESSAGES,
        Intents.FLAGS.GUILD_MEMBERS, //also enable in discord developer portal
        Intents.FLAGS.GUILD_MESSAGES,
        Intents.FLAGS.GUILD_PRESENCES,
        Intents.FLAGS.DIRECT_MESSAGES
    ]
})
// BOT Credits
const display = require('./display')
// Welcome message
const welcome = require('./welcome')
// MemberCount
const ServerStats = require('./ServerStats')

client.once('ready', () => {
    console.log("Ready!")
    welcome(client)
    ServerStats(client)
    // display(client)
});

client.login(token);

ServerStats.js

console.log(`ServerStats loaded successfully.`)

module.exports = (client) => {

    const MemberID = 'ID'      
    const OnlineID = 'ID'      
    const DateID = 'ID'        
    const TimeID = 'ID'        
    const LegendsID = 'ID'     
    const LegendsRoleID = 'ID' 
    const today = new Date();                 
    const monthNames = ["January", "February", "March", "April", "May", "June", // Months to set in date
        "July", "August", "September", "October", "November", "December"
    ];
    const ServerStats = guild => {
        const MemberChannel = guild.channels.cache.get(MemberID)    // Channels Assigmenet        
        const OnlineChannel = guild.channels.cache.get(OnlineID)    // Channels Assigmenet    
        const DateChannel = guild.channels.cache.get(DateID)        // Channels Assigmenet
        const TimeChannel = guild.channels.cache.get(TimeID)        // Channels Assigmenet
        const LegendsChannel = guild.channels.cache.get(LegendsID)  // Channels Assigmenet            
        const LegendsCount = guild.roles.cache.get(LegendsRoleID).members.size; // Specified Role Count
        const OnlineUsers = guild.members.cache.filter(members => members.presence?.status == 'online').size
        const IdleUsers = guild.members.cache.filter(members => members.presence?.status == 'idle').size
        const dndUsers = guild.members.cache.filter(members => members.presence?.status == 'dnd').size
        console.log(OnlineUsers, IdleUsers, dndUsers)
        OnlineChannel.setName(`🟢${OnlineUsers}  ⛔${dndUsers}  🌙${IdleUsers} `)
        DateChannel.setName(`📅 | ${today.getDate()} / ${monthNames[today.getMonth()]} - ${today.getFullYear()}`)
        TimeChannel.setName(`⏲| ${today.getUTCHours()}:${today.getUTCMinutes()} (UTC)`)
        LegendsChannel.setName(`👤  | Legends: ${LegendsCount} `)
        MemberChannel.setName(`👤   | Members: ${guild.memberCount}`)    
        console.log('Setted')
    }

    client.on(`guildMemberAdd`, SetInterval(() => { (member) => ServerStats(member.guild) }, 120000))

}

Error:

    client.on(`guildMemberAdd`, SetInterval(() => { (member) => ServerStats(member.guild) }, 120000))
           ^

ReferenceError: SetInterval is not defined

It works once on the guildMemberAdd, just can't set it in Interval. Ill appericate your help Cheers!


Solution

  • The setInterval function is camelcase, not pascalcase; i.e. the s is not capitalized.

    Change

    client.on(`guildMemberAdd`, SetInterval(() => { (member) => ServerStats(member.guild) }, 120000))
    

    To

    client.on(`guildMemberAdd`, setInterval(() => { (member) => ServerStats(member.guild) }, 120000))