8less
8less

Reputation: 81

Discord.js: The bot doesn't see message

I have been working on the Quick Math command, it works like this: I execute it, it sends a problem in chat, and whoever sends the correct answer wins. Preview of the problem

But as you can see, it doesn't see my 46 message, ignores it, and after 30 seconds sends "No one answered!"

My code is:

const { MessageEmbed } = require('discord.js');
const Discord = require("discord.js")

module.exports = {
  name: "game",
  description: "smth",
  aliases: ["gamestart", "startgame"],
  permissions: ["MANAGE_MESSAGES"],
  timeout: 10000,
execute: async (client, message, args) => {
    var a = Math.floor(Math.random() * 50) + 1
    var b = Math.floor(Math.random() * 50) + 1
    var ab = await a + b
    console.log(ab)
    let embed = new MessageEmbed()
    .setTitle(":chart_with_downwards_trend: Quick Math")
    .setDescription(`Solve the problem below and get XP.\n\n\`${a}\` + \`${b}\` = **???**`)
    .setFooter("123")

    const msg = await message.channel.send(embed)

    try {
      let filter = (m) => {
        if (m.author.bot) return;
        if (m.channel.id == msg.channel.id && m.content === ab) return true;
        else {
          return false;
        }
      };
      let res = await msg.channel.awaitMessages(filter, {
        time: 30000,
        errors: ["time"],
      });
      if (res) {
        let embed = new MessageEmbed()
        .setTitle(":chart_with_downwards_trend: Quick Math")
        .setDescription(`The correct answer was \`${ab}\`\n\nThe winner is **you**!`)
        .setFooter("123")
        msg.channel.send(embed)
      }
    } catch (err) {
      console.log(err)
      msg.channel.send(
        "No one answered!"
      );
    }
}
}

The console gives no error and looks like this: 46

This is really weird and I ask for your help. Thanks in advance.

Update: (after changing === to ==)

Console logs:

49
Collection [Map] {
  '903319414777188413' => ExtendedMessage {
    channel: ExtendedTextChannel {
      type: 'text',
      deleted: false,
      id: '859482526364336160',
      name: 'rice-bot-testing',
      rawPosition: 37,
      parentID: '836281677994786846',
      permissionOverwrites: [Collection [Map]],
      topic: null,
      nsfw: false,
      lastMessageID: '903319414777188413',
      rateLimitPerUser: 5,
      lastPinTimestamp: 1624987887000,
      guild: [Guild],
      messages: [MessageManager],
      _typing: Map {}
    },
    deleted: false,
    id: '903319414777188413',
    type: 'DEFAULT',
    system: false,
    content: '49',
    author: User {
      id: '713008151661772812',
      system: null,
      locale: null,
      flags: [UserFlags],
      username: '8less',
      bot: false,
      discriminator: '8719',
      avatar: 'fb2c5843579f14c38b542349cfa5a256',
      lastMessageID: '903319414777188413',
      lastMessageChannelID: '859482526364336160'
    },
    pinned: false,
    tts: false,
    nonce: '903319413787197440',
    embeds: [],
    attachments: Collection [Map] {},
    createdTimestamp: 1635438531346,
    editedTimestamp: 0,
    reactions: ReactionManager {
      cacheType: [class Collection extends Collection],
      cache: Collection [Map] {},
      message: [Circular]
    },
    mentions: MessageMentions {
      everyone: false,
      users: Collection [Map] {},
      roles: Collection [Map] {},
      _members: Collection [Map] {},
      _channels: Collection [Map] {},
      crosspostedChannels: Collection [Map] {}
    },
    webhookID: null,
    application: null,
    activity: null,
    _edits: [],
    flags: MessageFlags { bitfield: 0 },
    reference: null,
    components: []
  }
}

Make sure that Collection [Map] {} part is logged after 30000 ms is out.

Problem Preview after Update

Upvotes: 1

Views: 595

Answers (1)

eroironico
eroironico

Reputation: 1372

Guess the problem is that at this line:

if (m.channel.id == msg.channel.id && m.content === ab) return true;

you're searching for a message that has it's content (a string of course) strict equals to the result you calculated before (a number) and the === doesn't check only the content of a variable, it checks also the type of the variable so: '46' === 46 will return false. What you can do is:

  • Use the double equals operator (not recommended) => '46' == 46 returns true
  • Parse the incoming message in Number => Number('46') === 46 returns true

Additionally i would prefer using the cleanContent property of the message, just to make sure to retrieve only the effective content of the message and not alterate it. Hope it was helpful :D

EDIT: Just saw you're importing two times the discord.js library, instead of doing that you can just simply extract the MessageEmbed from the Discord module:

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

Upvotes: 3

Related Questions