Skip to content
Advertisement

My discord counting bot is Not doing server by server but every single server combined

I need help with a discord counting bot. Whatever server it is in, it has the same counter number. what I mean is that they are all paired and do the same count instead of it being server by server.

Here is the main part (not all of it), I just need to learn to have the servers separate from one another:

const Discord = require('discord.js');

const client = new Discord.Client();

var counter = [{
name: "bot",
nummer: 0  
}];
client.on("message", message => {
if (message.channel.name === "counting") {
    if (!isNaN(message.content)){
        var counterlast = counter[counter.length - 1];
        var countercheck = counterlast["nummer"] + 1;
        var pinger = parseInt(message.content);
        var lastuser = counterlast["name"];
        if(countercheck === pinger && lastuser !== message.author.id){
            counter.push({name: message.author.id, nummer: countercheck});
            message.react('✅');
        }
        else{
            if(lastuser === message.author.id){
                message.react('❌');
                message.reply(`Wrong Number. The new number is **1**.`);
                counter.length = 0;
                counter.push({name: "bot", nummer: 0}); Number
            }
            else{
                message.react('❌');
                message.reply(` ruined it at ${countercheck}. the new 
                number is **1**.`);
                counter.length = 0;
                counter.push({name: "bot", nummer: 0});
             }
         }
     }
  }
 });

  client.login('N/A');

Advertisement

Answer

I’m not sure what this counting bot is or how you store your data. However, you can get the server id from the message by accessing message.guild.id. It means that you can check this id before you do anything to the server’s “count”.

You can use an object with the server ids as its keys like this:

const counter = {
  `630930214659670528`: 304,
  `630136153655430054`: 941,
  `685932343451250658`: 34123,
};

The following code increases the counter of the server it’s accessed from by one:

const counter = {};

client.on('message', (message) => {
  if (!message.channel.name === 'counting' || isNaN(message.content)) return;

  // get the server id
  const { id } = message.guild;
  counter[id] = counter[id] ? counter[id] + 1 : 1;

  message.channel.send(`The counter is at ${counter[id]}`);
});

Edit: As you’ve updated your question with your code, here’s how I’d add different counters for different servers:

const { Client } = require('discord.js');

const client = new Client();
const counters = {};

client.on('message', (message) => {
  if (
    message.author.bot ||
    message.channel.name !== 'counting' ||
    isNaN(message.content)
  )
    return;

  const { id } = message.guild;

  // if this is the first counter from this server set it up
  if (!counters[id]) {
    counters[id] = [
      {
        name: 'bot',
        value: 0,
      },
    ];
  }

  const counter = counters[id];
  const last = counter[counter.length - 1];
  const increasedValue = last.value + 1;
  const pingerCount = parseInt(message.content);

  if (increasedValue === pingerCount && last.name !== message.author.id) {
    counter.push({ name: message.author.id, value: increasedValue });
    message.react('✅');
  } else {
    if (last.name === message.author.id) {
      message.react('❌');
      message.reply(
        'Wrong, the last user was also you. The new number is **1**.',
      );
      counter.length = 0;
      counter.push({ name: 'bot', value: 0 });
    } else {
      message.react('❌');
      message.reply(`Ruined it at ${increasedValue}, the new number is **1**.`);
      counter.length = 0;
      counter.push({ name: 'bot', value: 0 });
    }
  }
});
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement