Chatbot para twitch com Javascript
Tags: braziliandevs, javascript, chatbot, tmijs
Published: 2021-04-18 04:25:06

Olá nesse tutorial vamos criar um chatbot para a [twitch.tv](https://www.twitch.tv/) utilizando javascript com a biblioteca [tmi.js](https://tmijs.com/). Utilizar um chatbot no seu canal é uma das formas de você engajar os seus viewers, pois, você pode criar jogos e outras brincadeiras para divertir o seu público durante as lives. Um dos exemplos é criar um comando de duelo para que o seu chat fique duelando no chat. Outra coisa que você pode fazer é criar funcionalidade para que o seu bot ajude na moderação da sua live.

## Ferramentas

Para criar esse projeto iremos utilizar as seguintes tecnologias:

- [node.js](https://nodejs.org/pt-br/) - Que é um runtime javascript. Você pode baixar ele [aqui](https://nodejs.org/pt-br/download/).

- [nodemon](<(https://www.npmjs.com/package/nodemon)>) - Que é uma ferramenta que monitora o sistema de arquivos da sua aplicação e reinicia automaticamente após uma modificação.

- [npm](https://www.npmjs.com/get-npm) - Que é um gerenciador de pacote javascript. Por padrão ele já vem instalado junto com o node.js, mas caso você queira também pode utilizar o [yarn](https://yarnpkg.com/).

- [tmi.js](https://tmijs.com/) - Biblioteca para se conectar no chat da twitch utilizando o protocolo [IRC](https://pt.wikipedia.org/wiki/Internet_Relay_Chat).

- Editor de texto - Você pode utilizar um editor de texto da sua preferência, no meu caso irei utilizar o [Vscode](https://code.visualstudio.com/).

## Iniciando Projeto

Apos a instalação do node iremos iniciar o nosso projeto utilizando o seguinte comando:

`npm init -y`

Se você olhar na pasta do seu projeto é para ter criado um arquivo chamado 'package.json' é nele que fica as configurações do nosso projeto.

Caso você queira saber mais sobre o npm init você pode descobrir mais [aqui](https://docs.npmjs.com/cli/v7/commands/npm-init).

## Instalação de depedências

Agora vamos instalar as bibliotecas necessárias para o nosso projeto.

`npm install tmi.js`

`npm install --save-dev nodemon`

Após rodar esses comandos se você olhar no seu projeto você deve ter a pasta 'node_modules' e o arquivo 'package-lock.json' no seu projeto.

Agora iremos criar scripts para facilitar na hora de rodar o nosso bot. Dentro do arquivo `package.json` iremos modificar a propriedade `scripts` e adicionar o seguinte código.

```json
"scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
}
```

O `start` serve para rodar o nosso quando finalizado. Já o `dev` serve para rodar o nosso bot enquanto estivermos trabalhando nele, pois, ele vai executar usando o nodemon e facilitará nosso trabalho enquanto estivermos modificando ele reiniciando automaticamente o nosso bot.

## Criando arquivo de configuração

Agora precisando criar um arquivo chamado `.env` nele ficara guardado as variáveis de configurações nosso bot. Logo abaixo podemos ver como você devera deixar o arquivo depois de criado. Você devera substituir kastrinhobot pelo nome do seu nome, kastr0walker pelo nome do seu canal e TOKEN pelo token que você deve gerar [aqui](https://twitchapps.com/tmi/).

```
NOME_BOT=kastrinhobot
NOME_CANAL=kastr0walker
TOKEN_BOT=TOKEN
```

## Criando nosso primeiro comando

Agora está na hora de colocar a mão na massa e fazer o nosso primeiro comando no bot. A primeira coisa que precisamos fazer é importar as bibliotecas necessárias para o nosso projeto funcionar.

```javascript
const tmi = require("tmi.js");
const dotenv = require("dotenv").config();
```

Agora iremos salvar em variáveis as configurações que adicionamos no nosso arquivo `.env`.

```javascript
const NOME_BOT = process.env.NOME_BOT;
const NOME_CANAL = process.env.NOME_CANAL;
const TOKEN_BOT = process.env.TOKEN_BOT;
```

Devemos também criar um objeto para adicionar as informações do nosso bot.

```javascript
const opts = {
  identity: {
    username: NOME_BOT,
    password: TOKEN_BOT,
  },
  channels: [NOME_CANAL],
};
```

Devemos instanciar um novo objeto do tipo `tmi.client` passando como parâmetro o objeto que contem as configurações do nosso bot.

```javascript
const client = new tmi.client(opts);
```

Devemos criar uma função para ser executada toda vez que o bot detectar que uma mensagem foi enviada no chat. No nosso caso definimos essa função como `recivedMessage` nela recebemos quatro parâmetros.

- **target** - Esse parâmetro recebe o nome do canal no qual o bot recebeu a mensagem.
- **context** - Esse é um objeto na qual fica armazenado algumas informações do usuário que mandou mensagem no chat. Podemos achar nele o nome do usuário, se é sub ou mod de um canal dentre outras informações. Você pode conseguir mais informações colocando um `console.log(context)` dentro da função.
- **msg** - Esse é uma string contendo a mensagem que foi enviada no chat.
- **bot** - Esse é um booleano que retorna verdadeiro caso a mensagem recebida seja do nosso próprio bot.

O nosso primeiro comando que vamo criar é para o bot mandar uma mensagem de "Olá Mundo!" caso alguém digite `!ola` no chat. Para isso verificamos se a mensagem recebida é igual a `!ola` caso seja nós chamamos o método say do nosso client. Esse método é responsável por fazer com que o bot mande uma mensagem no chat. Ele recebe dois parâmetros o primeiro é o nome do canal na qual o bot vai mandar a mensagem. O segundo parâmetro é uma string contendo a mensagem na qual o bot vai enviar.

```javascript
function recivedMessage(target, context, msg, bot) {
  // Verifica se a mensagem recebido é do nosso bot
  if (bot) {
    return;
  }

  if (msg == "!ola") {
    client.say(target, "Olá Mundo!");
  }
}
```

Agora precisamos fazer com que o nosso bot se conecte no chat e comece a escutar as mensagens que são enviadas nele.
Para isso utilizamos as seguintes funções.

- **client.on("message", recivedMessage)** - Essa função vai fazer com que o bot fique escutando o nosso chat e execute a função `recivedMessage` toda vez que uma mensagem é recebida.
- **client.on("connected", () => {})** - Essa função vai fazer com que o nosso bot mande "O bot tá on!" no nosso chat ao se conectar.
- **client.connet()** - Essa função vai fazer com que o nosso bot se conecte com o chat do nosso canal.

```javascript
client.on("message", recivedMessage);
client.on("connected", () => {
  client.say(NOME_CANAL, "O bot tá on!");
});

client.connect();
```

Após isso salve o seu arquivo e execute no seu terminal o seguinte comando:

`npm start`

Pront agora o bot deve está conectado no seu canal e já sendo possível interagir com ele digitando `!ola`.

Agora que você entendeu a base de como criar o seu primeiro bot. Você pode utilizar a sua imaginação e desenvolver várias funcionalidades legais para o seu bot. Se você quiser se inspirar com ideias para o seu bot esse são alguns bots na qual já contribui no desenvolvimento.

- [pandadomalbot](https://github.com/levxyca/pandadomalbot)
- [acaverna](https://github.com/acaverna/acaverna-bot)
- [deninhobot](https://github.com/acaverna/deninho-bot)
- [pixelrbot](https://github.com/pxlrose/pixelrbot)
- [kastrinhobot](https://github.com/kastrowalker/kastrinhobot)

Para esse tutorial utilizei como base esse [repositório](https://github.com/jpbrab0/twitchtvbot-js-template). Obrigado por ler meu artigo e boa sorte com as suas criações.