Pesquisar aqui

sexta-feira, 6 de novembro de 2020

Discord Bot em Node.js - Parte 4

Passo 4 — Implementando o comando Sum

Agora,irás estender o programa implementando o comando "! sum". O comando irá tomar qualquer número de argumentos e adicioná-los juntos, antes de retornar a soma de todos os argumentos ao usuário.

Se o bot Discord ainda estiver em execução,  podes parar - lo  com CTRL + C.

Abra o arquivo index.js novamente:

  • nano index.js

Para começar a implementar o comando "! sum", usarás um bloco else-if. Depois de verificar o nome do comando ping, ele irá verificar se o nome do comando é igual a "sum". Usamos um bloco else-if já que apenas um comando irá processar de cada vez, então se o programa corresponder ao nome de comando "ping", ele não precisa verificar o comando "sum". Adiciona as seguintes linhas destacadas ao  arquivo:

index.js
...
  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
                               
  }                            
});
...

 Podes começar a implementar o código para o comando "sum". O código para o comando "sum" irá entrar dentro do bloco else-if que  acabaste de criar. Agora, adiciona o código a seguir:

index.js
...
  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
...

 Usas o método map na lista argumentos para criar uma nova lista usando a função parseFloat em cada item no array args. Isso cria um novo array (atribuído à constante numArgs) no qual todos os itens são números em vez de strings. Isso significa que mais tarde  podes encontrar com sucesso a soma dos números adicionando-os.

A segunda linha usa o método reduce na constante numArgs, fornecendo uma função que totaliza todos os elementos na lista. Atribuis a soma de todos os elementos em numArgs à constante. sum.

Em seguida, usas o método reply no objeto message para responder ao comando do usuário com modelo literal, que contém a soma de todos os argumentos que o usuário envia para o bot.

Isso conclui a implementação do comando "sum". Agora, execute o bot usando o comando a seguir (na mesma pasta que index.js):

  • node index.js

Agora, podes usar o comando "! sum"” em qualquer canal em que o bot possa visualizar e enviar mensagem.

Image of bot replying "The sum of all the arguments you provided is 6!" to "! sum 1 2 3", then replying "The sum of all the arguments you provided is 13! to "! sum 1.5 1.5 10"

A seguir está uma versão finalizada do script index.js do bot:

index.js
const Discord = require("discord.js");
const config = require("./config.json");

const client = new Discord.Client();

const prefix = "!";

client.on("message", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;

  const commandBody = message.content.slice(prefix.length);
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();

  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
});

client.login(config.BOT_TOKEN);

Neste passo,  melhoraste ainda mais o bot Discord implementando o comando sum.

1 comentário:

  1. Parece uma ótima função para o bot, quando fazes uma atualização em que resolva equações? =D

    ResponderEliminar

Comente de forma construtiva...

Nota: só um membro deste blogue pode publicar um comentário.