Advertisement
ThePizzaDu62

MathBot

Feb 22nd, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Discord = require("discord.js");
  2. const client = new Discord.Client();
  3. const prefix = "$";
  4. const pi = 3.14159265358979323846;
  5.  
  6. function add (a = 0, b = 0) {
  7.     return a + b;
  8. }
  9.  
  10. function subtract(a = 0, b = 0) {
  11.     return a - b;
  12. }
  13.  
  14. function multiply(a = 0, b = 0) {
  15.     return a * b;
  16. }
  17.  
  18. function divide(a = 0, b = 0) {
  19.     return a / b;
  20. }
  21.  
  22. function modulo(a = 0, b = 0) {
  23.     return a % b;
  24. }
  25.  
  26. function squarePerimeter(side = 0) {
  27.     return side * 4;
  28. }
  29.  
  30. function rectanglePerimeter(length = 0, width = 0) {
  31.     return (length * 2) + (width * 2);
  32. }
  33.  
  34. function circlePerimeter(diameter = 0) {
  35.     return pi * diameter;
  36. }
  37.  
  38. function parallelogramPerimeter(length = 0, width = 0) {
  39.     return (length * 2) + (width * 2);
  40. }
  41.  
  42. function trianglePerimeter(base = 0, firstSide = 0, secondSide = 0) {
  43.     return base + firstSide + secondSide;
  44. }
  45.  
  46. function trapezePerimeter(firstBase = 0, secondBase = 0, firstSide = 0, secondSide = 0) {
  47.     return firstBase + secondBase + firstSide + secondSide;
  48. }
  49.  
  50. function diamondPerimeter(side = 0) {
  51.     return side * 4;
  52. }
  53.  
  54. function embedNumberOfParametersError(paramNumber) {
  55.     let embed = new Discord.RichEmbed();
  56.     embed.setTitle("Erreur : nombre de paramètres");
  57.     embed.setDescription(`:x: Veuillez entrer **` + paramNumber + `** paramètres.`);
  58.     embed.setColor("FF0000");
  59.     return embed;
  60. }
  61.  
  62. function embedNumberTypeError(expectedType) {
  63.     let embed = new Discord.RichEmbed();
  64.     embed.setTitle("Erreur : type de paramètres");
  65.     embed.setDescription(`:x: Veuillez n'utiliser que des **` + expectedType + '**.');
  66.    embed.setColor("FF0000");
  67.    return embed;
  68. }
  69.  
  70. function helpEmbed() {
  71.     embed = new Discord.RichEmbed();
  72.     embed.setTitle("Liste de toutes les commandes");
  73.     embed.setColor("39E450");
  74.     embed.addField(`RAPPEL : `, `$help <commande> donne de l'aide sur une commande spécifique.`);
  75.     embed.addField(`RAPPEL 2 : `, `Le préfixe du bot est "$"`);
  76.     embed.addField(`calc : `, `Effectue les opérations les plus basiques.`);
  77.     embed.addField(`p : `, `Effectue les calculs de périmètre les plus courants.`);
  78.     return embed;
  79. }
  80.  
  81. function calcHelp() {
  82.     embed = new Discord.RichEmbed();
  83.     embed.setTitle("Aide de la commande : calc");
  84.     embed.setColor("39E450");
  85.     embed.addField("RAPPEL : ", "Les [paramètres] sont obligatoires, les <paramètres> non.");
  86.     embed.addField("Description : ", "Permet d'effectuer les calculs suivants : addition, soustraction, multiplication, division et modulo.");
  87.     embed.addField("Utilisation :", "$calc [nombre 1] [opérateur] [nombre 2]");
  88.     embed.addField("Exemple :", "$calc 5 + 5\n $calc 10 - 5\n $calc 5 * 5\n $calc 10 / 5\n $calc 10 % 3");
  89.     return embed;
  90. }
  91.  
  92. function embedResult(result, calculation, explanation) {
  93.     embed = new Discord.RichEmbed();
  94.     embed.setTitle("Résultat :");
  95.     embed.setColor("4DE0FD");
  96.     embed.setDescription(calculation + ` : ` + explanation + ` = **` + result + `**`);
  97.     embed.setFooter("Calcul : " + calculation);
  98.     return embed;
  99. }
  100.  
  101. client.on("ready", () => {
  102.     console.log("I'm ready !");
  103. });
  104.  
  105. client.on("message", message => {
  106.     if(message.author.bot) return;
  107.    
  108.     if(message.content.startsWith(prefix)) {
  109.         const args = message.content.slice(prefix.length).trim().split(/ +/g);
  110.         const command = args.shift().toLowerCase();
  111.        
  112.         if(message.content.startsWith(prefix + command)) {
  113.             if(command === "calc") {
  114.                 const calculationChoice = args[1];
  115.  
  116.                 if(calculationChoice === "+") {
  117.                     let a = parseFloat(args[0]);
  118.                     let b = parseFloat(args[2]);
  119.  
  120.                     if(!Number.isNaN(a) && !Number.isNaN(b) && args.length === 3) {
  121.                         message.channel.send(embedResult(add(a, b), "Addition", a + ` + ` + b));
  122.                     }
  123.  
  124.                     else if(args.length !== 3){
  125.                         message.channel.send(embedNumberOfParametersError(2));
  126.                     }
  127.  
  128.                     else {
  129.                         message.channel.send(embedNumberTypeError("nombres"));
  130.                     }
  131.                 }
  132.        
  133.                 else if(calculationChoice === "-") {
  134.                     let a = parseFloat(args[0]);
  135.                     let b = parseFloat(args[2]);
  136.  
  137.                     if(!Number.isNaN(a) && !Number.isNaN(b) && args.length === 3) {
  138.                         message.channel.send(embedResult(subtract(a, b), "Soustraction", a + ` - ` + b));
  139.                     }
  140.  
  141.                     else if(args.length !== 3) {
  142.                         message.channel.send(embedNumberOfParametersError(2));
  143.                     }
  144.  
  145.                     else {
  146.                         message.channel.send(embedNumberTypeError("nombres"));
  147.                     }
  148.  
  149.                 }
  150.    
  151.                 else if(calculationChoice === "*") {
  152.                     let a = parseFloat(args[0]);
  153.                     let b = parseFloat(args[2]);
  154.  
  155.                     if(!Number.isNaN(a) && !Number.isNaN(b) && args.length === 3) {
  156.                         message.channel.send(embedResult(multiply(a, b), "Multiplication", a + ` * ` + b));
  157.                     }
  158.  
  159.                     else if(args.length !== 3) {
  160.                         message.channel.send(embedNumberOfParametersError(2));
  161.                     }
  162.  
  163.                     else {
  164.                         message.channel.send(embedNumberTypeError("nombres"));
  165.                     }
  166.                 }
  167.    
  168.                 else if(calculationChoice === "/") {
  169.                     let a = parseFloat(args[0]);
  170.                     let b = parseFloat(args[2]);
  171.  
  172.                     if(!Number.isNaN(a) && !Number.isNaN(b) && args.length === 3) {
  173.                         message.channel.send(embedResult(divide(a, b), "Division", a + ` / ` + b));
  174.                     }
  175.  
  176.                     else if(args.length !== 3) {
  177.                         message.channel.send(embedNumberOfParametersError(2));
  178.                     }
  179.  
  180.                     else {
  181.                         message.channel.send(embedNumberTypeError("nombres"));
  182.                     }
  183.                 }
  184.  
  185.                 else if(calculationChoice === "%") {
  186.                     let a = parseFloat(args[0]);
  187.                     let b = parseFloat(args[2]);
  188.  
  189.                     if(!Number.isNaN(a) && !Number.isNaN(b) && args.length === 3 && a > b) {
  190.                         message.channel.send(embedResult(modulo(a, b), "Modulo", a + " % " + b));
  191.                     }
  192.                     else if(args.length !== 3) {
  193.                         message.channel.send(embedNumberOfParametersError(2));
  194.                     }
  195.                     else if(a < b) {
  196.                         embed = new Discord.RichEmbed();
  197.                         embed.setTitle("Erreur : incompatibilité des paramètres");
  198.                         embed.setColor("FF0000");
  199.                         embed.setDescription(`:x: Veuillez utiliser des paramètres compatibles à l'opérateur "%" : **le premier paramètre doit être supérieur au deuxième**`);
  200.                         message.channel.send(embed);
  201.                     }
  202.                     else {
  203.                         message.channel.send(embedNumberTypeError("nombres"));
  204.                     }
  205.                 }
  206.             }
  207.  
  208.             else if(command === "p") {
  209.                 const shapeChoice = args[0];
  210.  
  211.                 if(shapeChoice === "square") {
  212.                     let side = parseFloat(args[1]);
  213.  
  214.                     if(!Number.isNaN(side) && args.length === 2) {
  215.                         message.channel.send(embedResult(squarePerimeter(side), `Périmètre`, side + " * 4"));
  216.                     }
  217.                     else if(args.length !== 2) {
  218.                         message.channel.send(embedNumberOfParametersError(1));
  219.                     }
  220.                     else {
  221.                         message.channel.send(embedNumberTypeError("nombres"));
  222.                     }
  223.                 }
  224.  
  225.                 else if(shapeChoice === "rectangle") {
  226.                     let length = parseFloat(args[1]);
  227.                     let width = parseFloat(args[2]);
  228.  
  229.                     if(!Number.isNaN(length) && !Number.isNaN(width) && args.length === 3) {
  230.                         message.channel.send(embedResult(rectanglePerimeter(length, width), "Périmètre", length + " * 2 + " + width + " * 2"));
  231.                     }
  232.                     else if(args.length !== 3) {
  233.                         message.channel.send(embedNumberOfParametersError(2));
  234.                     }
  235.                     else {
  236.                         message.channel.send(embedNumberTypeError("nombres"));
  237.                     }
  238.                 }
  239.  
  240.                 else if(shapeChoice === "circle") {
  241.                     let diameter = parseFloat(args[1]);
  242.  
  243.                     if(!Number.isNaN(diameter) && args.length === 2) {
  244.                         message.channel.send(embedResult(circlePerimeter(diameter), "Périmètre", "pi * " + diameter));
  245.                     }
  246.                     else if(args.length !== 2) {
  247.                         message.channel.send(embedNumberOfParametersError(1));
  248.                     }
  249.                     else {
  250.                         message.channel.send(embedNumberTypeError("nombres"));
  251.                     }
  252.                 }
  253.  
  254.                 else if(shapeChoice === "parallelogram") {
  255.                     let length = parseFloat(args[1]);
  256.                     let width = parseFloat(args[2]);
  257.  
  258.                     if(!Number.isNaN(length) && !Number.isNaN(width) && args.length === 3) {
  259.                         message.channel.send(embedResult(parallelogramPerimeter(length, width), "Périmètre", length + " * 2 + " + width + " * 2"));
  260.                     }
  261.                     else if(args.length !== 3) {
  262.                         message.channel.send(embedNumberOfParametersError(2));
  263.                     }
  264.                     else {
  265.                         message.channel.send(embedNumberTypeError("nombres"));
  266.                     }
  267.                 }
  268.  
  269.                 else if(shapeChoice === "triangle") {
  270.                     let base = parseFloat(args[1]);
  271.                     let firstSide = parseFloat(args[2]);
  272.                     let secondSide = parseFloat(args[3]);
  273.  
  274.                     if(!Number.isNaN(base) && !Number.isNaN(firstSide) && !Number.isNaN(secondSide) && args.length === 4) {
  275.                         message.channel.send(embedResult(trianglePerimeter(base, firstSide, secondSide), "Périmètre", firstBase + " + " + firstSide + " + " + secondSide));
  276.                     }
  277.                     else if(args.length !== 4) {
  278.                         message.channel.send(embedNumberOfParametersError(3));
  279.                     }
  280.                     else {
  281.                         message.channel.send(embedNumberTypeError("nombres"));
  282.                     }
  283.                 }
  284.  
  285.                 else if(shapeChoice === "trapeze") {
  286.                     let firstBase = parseFloat(args[1]);
  287.                     let secondBase = parseFloat(args[2]);
  288.                     let firstSide = parseFloat(args[3]);
  289.                     let secondSide = parseFloat(args[4]);
  290.  
  291.                     if(!Number.isNaN(firstBase) && !Number.isNaN(secondBase) && !Number.isNaN(firstSide) && !Number.isNaN(secondSide) && args.length === 5) {
  292.                         message.channel.send(embedResult(trapezePerimeter(firstBase, secondBase, firstSide, secondSide), "Périmètre", firstBase + " + " + secondBase + " + " + firstSide + " + " + secondSide));
  293.                     }
  294.                     else if(args.length !== 5) {
  295.                         message.channel.send(embedNumberOfParametersError(4));
  296.                     }
  297.                     else {
  298.                         message.channel.send(embedNumberTypeError("nombres"));
  299.                     }
  300.                 }
  301.  
  302.                 else if(shapeChoice === "diamond") {
  303.                     let side = parseFloat(args[1]);
  304.  
  305.                     if(!Number.isNaN(side) && args.length === 2) {
  306.                         message.channel.send(embedResult(diamondPerimeter(side), "Périmètre", side + " * 4"));
  307.                     }
  308.                     else if(args.length !== 2) {
  309.                         message.channel.send(embedNumberOfParametersError(1));
  310.                     }
  311.                     else {
  312.                         message.channel.send(embedNumberTypeError("nombres"));
  313.                     }
  314.                 }
  315.             }
  316.  
  317.             else if(command === "help") {
  318.                 if()
  319.             }
  320.        }  
  321.    }
  322. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement