collector.on('collect', async(m) => { function repeat() { The whole command } //Tried these but didn't work if(m.content.toLowerCase() === "yes" || m.content.toLowerCase() === "y") { async function fights() { const embed = new MessageEmbed() .setDescription("Your turn, What do you wanted to do?") .addField("Action List:", "Attack\nBlock\nDodge") .setColor('RANDOM') .setTimestamp() message.channel.send({embeds: [embed]}) const msg_filter =(m) => m.author.id === message.author.id; const collector = await message.channel.createMessageCollector({filter: msg_filter, max: 1, timer: 15000}) const exist = await economy.findOne({ guildID: message.guild.id, memberID: message.author.id }) const enemy_cat = await enemy.findOne({ guildID: message.guild.id, userID: message.author.id }) let min_damage_player = exist.min_damage; let max_damage_player = exist.max_damage; let final_damage_player = Math.floor(Math.random() * (max_damage_player - min_damage_player) + min_damage_player); collector.on('collect', async(m) => { if(m.content.toLowerCase() === "attack" || m.content.toLowerCase() === "attk" || m.content.toLowerCase() === "a") { let percent = Math.floor(Math.random() * 100); if(percent > 20) { const final_health_player = exist.health - cat_random_damage; const final_health_enemy = enemy_cat.enemy_health - final_damage_player; const embed = new MessageEmbed() .setDescription(`You attacked the cat and dealth ${final_damage_player} damage!\nThen the cat attacked you and dealth ${cat_random_damage} damage!`) .addField("Your Status:", `Health: ${final_health_player}/${exist.max_health}`, true) .addField("Enemy Status:", `Health: ${final_health_enemy}/${enemy_cat.enemy_max_health}`, true) .setColor('RANDOM') .setTimestamp() message.channel.send({embeds: [embed]}) economy.findOneAndUpdate({ guildID: message.guild.id, memeberID: message.author.id }, {$set: {health: final_health_player}} ,async(err, data) => { if(data) { data.health = final_health_player; data.save(); } }) enemy.findOneAndUpdate({ guildID: message.guild.id, userID: message.author.id }, {$set: {enemy_health: final_health_enemy}} , async(err, data) => { if(data) { data.enemy_health = final_health_enemy; data.save(); } }) } else { const final_health_player = exist.health - cat_random_damage; const embed = new MessageEmbed() .setDescription(`You attacked the cat but unfortunately the cat dodge your attack!\nThen the cat attacked you and dealth ${cat_random_damage} damage!`) .addField("Your Status:", `Health: ${final_health_player}/${exist.max_health}`, true) .addField("Enemy Status:", `Health: ${enemy_cat.enemy_health}/${enemy_cat.enemy_max_health}`, true) .setColor('RANDOM') .setTimestamp() await message.channel.send({embeds: [embed]}) economy.findOneAndUpdate({ guildID: message.guild.id, memeberID: message.author.id }, {$inc: {health: - cat_random_damage}}, async(err, data) => { if(data) { data.health -= cat_random_damage; data.save(); } }) } } else if(m.content.toLowerCase() === "block") { //some code here for block command } else if(m.content.toLowerCase() === "dodge") { //some code here for dodge command } }) collector.on('end', collected => { if(exist.health <= 0) { setTimeout(() => { died() }, 1500) } else if(enemy_cat.enemy_health >= 0) { setTimeout(() => { fights() }, 1500) } else if(enemy_cat.enemy_health <= 0) { setTimeout(() => { ended() }, 1500) } }) } fights(); async function died() { economy.findOneAndUpdate({ guildID: message.guild.id, memberID: message.author.id }, {$set: {health: 0, cash: 0}}, async(err, data) => { if(data) { data.health = 0; data.cash = 0; data.save(); const embed = new MessageEmbed() .setTimestamp() .setColor('RANDOM') .setDescription("You have been died! and lost your cash!") message.channel.send({embeds: [embed]}) } }) await enemy.findOneAndDelete({ guildID: message.guild.id, userID: message.author.id }); } async function ended() { const exist = await economy.findOne({ guildID: message.guild.id, memberID: message.author.id }) await enemy.findOneAndDelete({ guildID: message.guild.id, userID: message.author.id }); let min_exp = 1; let max_exp = 15; let final_exp = Math.floor(Math.random() * (max_exp - min_exp) + min_exp) let min_cash = 1; let max_cash = 20; let final_cash = Math.floor(Math.random() * (max_cash - min_cash) + min_cash); economy.findOneAndUpdate({ guildID: message.guild.id, memberID: message.author.id }, {$inc: {$exp: final_exp}}, {$inc: {$cash: final_cash}}, async(err, data) => { if(data) { data.exp += final_exp; data.cash += final_cash; data.save() const embed = new MessageEmbed() .setDescription("Congratulations! You won againts a cat, Here's your reward") .addFields( {name: "EXP:", value: `\`\`\`${final_exp}\`\`\``, inline: true}, {name: "CASH:", value: `\`\`\`${final_cash}\`\`\``, inline: true} ) .addField("\u200b", "\u200b") .addFields( {name: "TOTAL EXP:", value: `\`\`\`${final_exp + exist.exp}/${exist.limit_exp}\`\`\``, inline: true}, {name: "TOTAL CASH:", value: `\`\`\`${final_cash + exist.cash}\`\`\``, inline: true} ) .setColor('RANDOM') .setTimestamp() message.channel.send({embeds: [embed]}) } }) } } else if(m.content.toLowerCase() === "No" || m.content.toLowerCase() === "n") { console.log("false") } else { setTimeout(() => { //Something to go back on the first collection }, 1500) //I tried so far like this collection.on('end', collected => { repeat(); }) } })