const Discord = require('discord.js'); const math = require(`mathjs`); const { MessageActionRow, MessageButton } = require('discord.js'); module.exports = { name: "calculator", aliases: ["Calculator", "CALCULATOR"], dmOnly: false, //or false guildOnly: true, //or false args: false, //or false usage: '', cooldown: 60, //seconds(s) guarded: false, //or false clientpermissions: ["SEND_MESSAGES", "EMBED_LINKS", "MANAGE_MESSAGES"], async execute(client, message, args) { let button = new Array([], [], [], [], []); let row = []; let text = ["clear", "(", ")", "/", "7", "8", "9", "*", "4", "5", "6", "-", "1", "2", "3", "+", ".", "0", "00", "="]; let current = 0; for (let i = 0; i < text.length; i++) { if (button[current].length === 4) current++; button[current].push(createButton(text[i])); if (i === text.length - 1) { for(let btn of button) row.push(addRow(btn)); } } // embed message const embed = new Discord.MessageEmbed() .setAuthor(message.author.tag, message.author.displayAvatarURL()) .setDescription("```0```") message.channel.send({ embeds: [embed], components: [row] }).then((msg) => { let isWrong = false; let time = 60000; let value = ""; let embed1 = new Discord.MessageEmbed() .setAuthor(message.author.tag, message.author.displayAvatarURL()) function createCollector(val, result = false) { let filter = (buttons1) => buttons1.clicker.user.id === message.author.id && buttons1.id === "cal" + val; let collect = msg.createButtonCollector(filter, { time: time}); collect.on("collect", async x => { x.reply.defer(); if (result === "new") value = "0" else if (isWrong) { value = val isWrong = false; } else if (value === "0") value = val; else if (result) { isWrong = true; value = mathEval(value); } else value += val embed1.setDescription("```" + value + "```") msg.edit({ embed: embed1, components: row }) }) } for(let txt of text) { let result; if (txt === "clear") result = "new"; else if (txt === "=") result = true; else result = false createCollector(txt, result) } setTimeout(() => { embed1.setDescription("Your time for using calculator is running out") embed1.setColor("RED") msg.edit({ embed: [embed1] }) }, time) }) // function function addRow(btns) { let row1 = new MessageActionRow() for(let btn of btns) { row1.addComponents(btn); } return row1; } function createButton(label, style = "SECONDARY") { if (label === "clear") style = "DANGER" else if (label === ".") style = "SECONDARY" else if (label === "=") style = "SUCCESS" else if (isNaN(label)) style = "PRIMARY" const btn = new MessageButton() .setLabel(label) .setStyle(style) .setCustomId("cal" + label) return btn; } function mathEval(input) { try { let res = math.evaluate(input) return res } catch { return "Wrong input!"; } } } }