{"id":2982,"date":"2020-09-23T19:09:00","date_gmt":"2020-09-23T22:09:00","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=2982"},"modified":"2025-09-02T14:09:49","modified_gmt":"2025-09-02T17:09:49","slug":"bots-para-iniciantes","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2020\/09\/23\/bots-para-iniciantes","title":{"rendered":"Bots para iniciantes"},"content":{"rendered":"\n<p><span style=\"font-size: inherit\">Fala pessoal, no PET Reda\u00e7\u00e3o desta semana iremos entender mais sobre o que s\u00e3o Bots e como s\u00e3o feitos. Vamos desenvolver um exemplo utilizando um dos aplicativos de voz mais famosos atualmente: o Discord. Mas primeiro vamos entender um pouco da teoria.<\/span><\/p>\n<p><strong>O que s\u00e3o Bots?<\/strong><\/p>\n<p><span style=\"font-weight: 400\">Basicamente, Bots \u2212 abrevia\u00e7\u00e3o de robots \u2212 s\u00e3o programas desenvolvidos para realizar alguma tarefa de maneira padronizada e repetitiva. Essa tarefa pode ser\u00a0 feita de forma autom\u00e1tica ou com base em algum comando gatilho feito por um humano ou outro programa.\u00a0<\/span><\/p>\n<p><strong>Para que eles s\u00e3o utilizados?<\/strong><\/p>\n<p><span style=\"font-weight: 400\">Os bots est\u00e3o por toda internet exercendo tanto tarefas simples quanto algumas extremamente\u00a0 complexas. Grandes empresas usufruem dos bots para automatizar tarefas ou como servi\u00e7o atendimento (os chamados chatbots). O Google, por exemplo, utiliza Bots para rastrear e classificar as p\u00e1ginas na internet, melhorando assim a pesquisa dentro da web. Al\u00e9m disso, programadores comuns tamb\u00e9m recorrem a essa tecnologia para automatizar tarefas, como no Discord que existem bots que servem para pesquisar m\u00fasicas ou gerenciar o servidor, baseando-se em comandos.\u00a0<\/span><\/p>\n<p><strong>Como s\u00e3o feitos?<\/strong><\/p>\n<p><span style=\"font-weight: 400\">A programa\u00e7\u00e3o de um bot n\u00e3o tem uma linguagem espec\u00edfica, mas muitas linguagens possuem mais conte\u00fado sobre o assunto que outras.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Olhando bots prontos e funcionando imagina-se ser um trabalho extremamente complexo para um programador, mas n\u00e3o \u00e9 bem assim. \u00c9 claro que existem bots com uma complexidade inimagin\u00e1vel, utilizando at\u00e9 mesmo machine learning que interagem com o meio, aprendem e tentam reagir da melhor maneira poss\u00edvel, por\u00e9m os bots que vemos diariamente, como no Discord e Twitter, operam com o aux\u00edlio de bibliotecas e APIs.\u00a0<\/span><\/p>\n<p><strong>Implementa\u00e7\u00e3o<\/strong><\/p>\n<p><span style=\"font-weight: 400\">Depois de um pouco de teoria, agora partiremos para a implementa\u00e7\u00e3o. Para essa reda\u00e7\u00e3o desenvolveremos, como exemplo, um bot para o Discord utilizando o conhecido NodeJS. Para a implementa\u00e7\u00e3o usaremos a <\/span><a href=\"https:\/\/code.visualstudio.com\/\"><span style=\"font-weight: 400\">IDE Visual Studio Code<\/span><\/a><span style=\"font-weight: 400\">, ela facilita o desenvolvimento por ter um terminal\/cmd integrado. Al\u00e9m disso, iremos instalar o <\/span><a href=\"https:\/\/nodejs.org\/en\/\"><span style=\"font-weight: 400\">NodeJS<\/span><\/a><span style=\"font-weight: 400\">, que pode ser instalado tanto para Windows quanto para Linux (baixe a vers\u00e3o LTS). Ap\u00f3s realizar os downloads e instala\u00e7\u00f5es, vamos criar uma pasta em qualquer diret\u00f3rio do seu computador (\u00c1rea de trabalho ou alguma pasta de projetos caso voc\u00ea possua). Agora podemos abrir o VS Code e abrir a pasta criada a partir dele. Siga o caminho abaixo e procure a sua pasta criada:\u00a0<\/span><\/p>\n<p>\u00a0<\/p>\n<p><i><span style=\"font-weight: 400\">File \u2192 Open Folder<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Agora iremos abrir o terminal do VS Code. Siga o caminho novamente:<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">Terminal \u2192 New Terminal<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Seguindo essas instru\u00e7\u00f5es teremos o terminal aberto na nossa pasta selecionada, ficando dessa forma no meu caso:\u00a0<\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-2963 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/1.png\" alt=\"\" width=\"576\" height=\"97\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/1.png 576w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/1-300x51.png 300w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Para iniciarmos nosso projeto devemos utilizar o gerenciador de pacotes do NodeJS: o npm. Ele que ir\u00e1 lidar com todas as depend\u00eancias do nosso projeto (caso queira saber mais sobre npm, clique aqui). Dessa forma, podemos rodar o seguinte comando:<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2964 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/2.png\" alt=\"\" width=\"611\" height=\"95\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/2.png 611w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/2-300x47.png 300w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Ao executar o comando vai ser criado um arquivo chamado <\/span><i><span style=\"font-weight: 400\">package.json<\/span><\/i><span style=\"font-weight: 400\">, que \u00e9 um arquivo de configura\u00e7\u00e3o que guarda algumas informa\u00e7\u00f5es e quais as depend\u00eancias necess\u00e1rias para a execu\u00e7\u00e3o do programa.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Nossa \u00fanica depend\u00eancia vai ser a biblioteca <\/span><i><span style=\"font-weight: 400\">Discord.js<\/span><\/i><span style=\"font-weight: 400\">, que dar\u00e1 recursos para conseguirmos interagir com a API do Discord. Para instalar usaremos o npm novamente:<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2965 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/3.png\" alt=\"\" width=\"646\" height=\"92\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/3.png 646w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/3-300x43.png 300w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Vamos ent\u00e3o criar o arquivo que iremos escrever c\u00f3digo em breve. Seguindo este comando podemos criar o arquivo rapidamente:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2966 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/4.png\" alt=\"\" width=\"576\" height=\"90\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/4.png 576w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/4-300x47.png 300w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Antes de iniciar o desenvolvimento precisamos configurar algumas coisas no Discord. Primeiramente, caso voc\u00ea n\u00e3o tenha uma conta no Discord, clique aqui. Ap\u00f3s isso, criaremos um servidor onde o bot ir\u00e1 ficar, como na imagem a seguir:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2967 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/5.png\" alt=\"\" width=\"1299\" height=\"741\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/5.png 1299w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/5-300x171.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/5-1024x584.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/5-768x438.png 768w\" sizes=\"(max-width: 1299px) 100vw, 1299px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Agora basta selecionar a op\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">Create My Own<\/span><\/i><span style=\"font-weight: 400\"> e nome\u00e1-lo. Feito isso, agora vamos criar uma aplica\u00e7\u00e3o no discord e depois defini-la como um bot. Para isso, precisamos acessar a \u00e1rea de desenvolvimento do Discord, <\/span><a href=\"https:\/\/discord.com\/developers\/applications\"><span style=\"font-weight: 400\">clique aqui<\/span><\/a><span style=\"font-weight: 400\">. Clicando no link abrir\u00e1 a p\u00e1gina onde iremos criar e configurar nosso bot, para depois program\u00e1-lo. Basta clicar em <\/span><i><span style=\"font-weight: 400\">New Application<\/span><\/i><span style=\"font-weight: 400\"> e nome\u00e1-la, no meu caso: Meu Bot. Por\u00e9m, nossa aplica\u00e7\u00e3o ainda n\u00e3o \u00e9 um bot. Para resolvermos isso, podemos acessar a parte chamada <\/span><i><span style=\"font-weight: 400\">Bot<\/span><\/i><span style=\"font-weight: 400\">, como na imagem a seguir:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2968 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/6.png\" alt=\"\" width=\"1250\" height=\"409\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/6.png 1250w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/6-300x98.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/6-1024x335.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/6-768x251.png 768w\" sizes=\"(max-width: 1250px) 100vw, 1250px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Clicando em <\/span><i><span style=\"font-weight: 400\">Add Bot<\/span><\/i><span style=\"font-weight: 400\"> e confirmando, vai aparecer uma p\u00e1gina com as informa\u00e7\u00f5es do nosso Bot. Uma das mais importantes \u00e9 o Token, logo abaixo do Username, pois ele \u00e9 como uma senha para acessar o Bot e precisaremos dele futuramente. Mas agora vamos rolar um pouco para baixo e selecionar as permiss\u00f5es do nosso Bot. Como isso \u00e9 um teste daremos permiss\u00e3o de administrador. Dessa forma:\u00a0<\/span><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2969 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/7.png\" alt=\"\" width=\"826\" height=\"412\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/7.png 826w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/7-300x150.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/7-768x383.png 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Depois de configurarmos nosso Bot podemos prosseguir adicionando ele ao servidor. Para isso, devemos acessar o General Information, no lado esquerdo da tela. Chegando l\u00e1, copie o <\/span><i><span style=\"font-weight: 400\">Client ID<\/span><\/i><span style=\"font-weight: 400\">, logo abaixo no <\/span><i><span style=\"font-weight: 400\">Name, <\/span><\/i><span style=\"font-weight: 400\">e acesse o seguinte <\/span><a href=\"https:\/\/discordapi.com\/permissions.html\"><span style=\"font-weight: 400\">link<\/span><\/a><span style=\"font-weight: 400\">. Feito isso, defina a permiss\u00e3o de administrador novamente e cole o <\/span><i><span style=\"font-weight: 400\">Client ID<\/span><\/i><span style=\"font-weight: 400\"> no local adequado. Por \u00faltimo, logo abaixo ter\u00e1 um link que foi gerado com base no seu <\/span><i><span style=\"font-weight: 400\">ID<\/span><\/i><span style=\"font-weight: 400\">. Clicando nele, seremos redirecionados para uma p\u00e1gina onde podemos escolher o servidor de prefer\u00eancia para o Bot. Olhando o servidor criado podemos visualizar nosso Bot, por\u00e9m ele est\u00e1 offline por enquanto.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Finalmente iremos programar nosso Bot. Para come\u00e7ar, no arquivo <\/span><i><span style=\"font-weight: 400\">bot.js<\/span><\/i><span style=\"font-weight: 400\">, iremos criar uma constante para ter acesso aos recursos que a biblioteca discord.js fornece e outra para instanciar o Bot. Desse jeito:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2970 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/8.png\" alt=\"\" width=\"489\" height=\"61\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/8.png 489w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/8-300x37.png 300w\" sizes=\"(max-width: 489px) 100vw, 489px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Feito isso, o bot ainda estar\u00e1 offline, por isso, antes de executarmos nosso programa pela primeira vez, iremos adicionar apenas mais duas linhas de c\u00f3digo. Lembra quando foi falado que o Token seria importante para o desenvolvimento? Ent\u00e3o, agora iremos precisar dele para fazer o login do Bot e deix\u00e1-lo online. Acesse aquela mesma parte e copie o Token do Bot. Bem como a imagem abaixo:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2971 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/9.png\" alt=\"\" width=\"756\" height=\"309\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/9.png 756w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/9-300x123.png 300w\" sizes=\"(max-width: 756px) 100vw, 756px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Copiado o Token, continuaremos o desenvolvimento criando uma constante para armazenar o Token e usaremos a fun\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">login()<\/span><\/i><span style=\"font-weight: 400\">, a partir da constante bot criada anteriormente. Dessa forma:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2972 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/10.png\" alt=\"\" width=\"551\" height=\"120\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/10.png 551w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/10-300x65.png 300w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Ap\u00f3s isso, voltaremos para os comandos e executaremos o seguinte:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2973 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/11.png\" alt=\"\" width=\"578\" height=\"88\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/11.png 578w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/11-300x46.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Executando esse comando estamos rodando nosso Bot pela primeira vez e ele estar\u00e1 online no servidor criado. Mas agora vamos fazer algumas automatiza\u00e7\u00f5es nesse Bot. Para come\u00e7ar, criaremos uma fun\u00e7\u00e3o que de boas-vindas sempre que tivermos novos membros no servidor. Como na imagem a seguir:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2974 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/12.png\" alt=\"\" width=\"580\" height=\"279\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/12.png 580w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/12-300x144.png 300w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Basicamente, ele cria um evento toda vez que um novo membro \u00e9 adicionado ao servidor e executa a chamada Arrow Function em caso positivo. Essa fun\u00e7\u00e3o possui uma constante chamada <\/span><i><span style=\"font-weight: 400\">channel<\/span><\/i><span style=\"font-weight: 400\">, que procura o canal de texto para escrever a mensagem de boas-vindas (nesse caso o nome do canal de texto \u00e9 o padr\u00e3o de todos servidores: geral). Caso ela n\u00e3o ache o canal de texto, a fun\u00e7\u00e3o retorna sem nenhuma execu\u00e7\u00e3o, por\u00e9m, em caso afirmativo, \u00e9 executado a fun\u00e7\u00e3o <\/span><i><span style=\"font-weight: 400\">send()<\/span><\/i><span style=\"font-weight: 400\">, a partir da constante <\/span><i><span style=\"font-weight: 400\">channel<\/span><\/i><span style=\"font-weight: 400\">, para enviar uma mensagem de recep\u00e7\u00e3o, seguido do nome de usu\u00e1rio do novo membro. Executando novamente o programa e adicionando um novo membro ao servidor temos este resultado:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2975 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/13.png\" alt=\"\" width=\"732\" height=\"216\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/13.png 732w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/13-300x89.png 300w\" sizes=\"(max-width: 732px) 100vw, 732px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Por \u00faltimo, vamos desenvolver algumas fun\u00e7\u00f5es que s\u00e3o chamadas de acordo com alguns comandos pr\u00e9 definidos. podemos fazer dessa forma:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2976 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/14.png\" alt=\"\" width=\"762\" height=\"209\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/14.png 762w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/14-300x82.png 300w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Muito parecido com a fun\u00e7\u00e3o passada, por\u00e9m com o par\u00e2metro <\/span><i><span style=\"font-weight: 400\">message <\/span><\/i><span style=\"font-weight: 400\">sendo passado, esse evento analisa se as mensagens enviadas no canal de texto s\u00e3o aquelas dentro do <\/span><i><span style=\"font-weight: 400\">if <\/span><\/i><span style=\"font-weight: 400\">(!logo e !redacoes), utilizando o <\/span><i><span style=\"font-weight: 400\">content<\/span><\/i><span style=\"font-weight: 400\">, pois trata-se do conte\u00fado da mensagem. Caso seja escrito !logo, define-se uma constante attachment (como um acess\u00f3rio da mensagem, podendo ser uma imagem, um v\u00eddeo, etc), que recebe um link de uma imagem e \u00e9 enviado uma mensagem, seguido da imagem definida anteriormente. Mas caso for escrito !redacoes ser\u00e1 retornado um link para o site do PET Reda\u00e7\u00e3o. Salvando e executando novamente nosso Bot encontramos o seguinte resultado:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2977 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/15.png\" alt=\"\" width=\"734\" height=\"521\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/15.png 734w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/15-300x213.png 300w\" sizes=\"(max-width: 734px) 100vw, 734px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Com isso, agora voc\u00ea entende um pouco mais sobre o funcionamento de um Bot e como eles s\u00e3o desenvolvidos. Caso tenha alguma d\u00favida ou queira um minicurso sobre o assunto futuramente, entre em contato com os petianos. O c\u00f3digo desenvolvido nesta reda\u00e7\u00e3o est\u00e1 neste <\/span><a href=\"https:\/\/github.com\/chico123456\/BotDiscord\"><span style=\"font-weight: 400\">reposit\u00f3rio<\/span><\/a><span style=\"font-weight: 400\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Obrigado por acompanhar mais uma edi\u00e7\u00e3o do PET Reda\u00e7\u00e3o!<\/span><\/p>\n<p>\u00a0<\/p>\n<p><strong>Refer\u00eancias:<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.cloudflare.com\/learning\/bots\/what-is-a-bot\/\"><span style=\"font-weight: 400\">Bots<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/discord.js.org\/#\/\"><span style=\"font-weight: 400\">Discord.js<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/discordjs.guide\/\"><span style=\"font-weight: 400\">Discord.js Guide<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.sitepoint.com\/discord-bot-node-js\/\"><span style=\"font-weight: 400\">How to build your Discord Bot<\/span><\/a><\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p style=\"text-align: right\"><span style=\"font-weight: 400\">Francisco Moreira Palermo.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala pessoal, no PET Reda\u00e7\u00e3o desta semana iremos entender mais sobre o que s\u00e3o Bots e como s\u00e3o feitos. Vamos desenvolver um exemplo utilizando um dos aplicativos de voz mais famosos atualmente: o Discord. Mas primeiro vamos entender um pouco da teoria. O que s\u00e3o Bots? Basicamente, Bots \u2212 abrevia\u00e7\u00e3o de robots \u2212 s\u00e3o programas [&hellip;]<\/p>\n","protected":false},"author":2948,"featured_media":2981,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[74,149],"class_list":["post-2982","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-linguagem-de-programacao","tag-redacao"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/2948"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=2982"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/2981"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=2982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=2982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=2982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}