Como fazer um bot para o Telegram em Java

3 minutos de leitura

Atualizado em:

Como fazer um bot para o Telegram em Java

Este é um exemplo básico de como fazer um bot do Telegram em Java. Bots do Telegram são robôs que se comportam como uma conversa no Telegram, porém respondem a comando definidos pelo programador, neste exemplo nosso programa ficará fazendo um pooling de requisições e processará cada requisição, invertendo a frase que é enviado para ele.

Este exemplo criei a partir de um artigo do Nicola Malizia, que pode ser conferido aqui. Confira também toda a documentação no site do Telegram.

Temos que tratar requisições HTTP, para isso usei a biblioteca unirest para facilitar a implementação. Todo o exemplo a seguir foi feito no netbeans, mas pode ser facilmente realizado em outras IDEs.

Solicitando uma chave de acesso ao Telegram

Como todas as requisições serão feitas por uma conexão HTTP, é necessário ter uma chave de acesso privada para o seu bot, para isso, inicie uma conversa com o BotFather e digite /newbot ele irá te perguntar o nome do seu bot e gerar uma chave de acesso no final, guarde ela, usaremos mais adiante.

[caption id="attachment_1520" align="aligncenter" width="575"]Criando um bot no BotFather Criando um bot no BotFather[/caption]

Criando o projeto e tratando as dependências

Vamos criar um projeto Maven no Netbeans para resolver as dependências da biblioteca unirest. Em novo projeto, Maven, Aplicação Java, defina as suas configurações, e salve. Edite o arquivo Pom.xml em Arquivos do Projeto, e adicione as dependências do unirest:

 
        
            com.mashape.unirest
            unirest-java
            1.4.9
        
        
            org.apache.httpcomponents
            httpclient
            4.3.6
        
        
            org.apache.httpcomponents
            httpasyncclient
            4.0.2
        
        
            org.apache.httpcomponents
            httpmime
            4.3.6
        
        
            org.json
            json
            20140107
        
    

Clique com o botão direito em Dependências e depois em Fazer download de dependências declaradas, isso fará com que o Maven baixe as dependências informadas do Pom.xml.

Uma vez que já temos todas as dependências, vamos ao código, precisaremos de apenas duas classes, TelegramBot.java (será a classe que tratara as requisições do bot) e Main.java (apenas uma classe principal para iniciar a aplicação).

TelegramBot.java

package br.com.paulocollares.telegrambot;

import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.json.JSONArray;
import org.json.JSONObject;

public final class TelegramBot {

    private final String endpoint = "https://api.telegram.org/";
    private final String token;

    public TelegramBot(String token) {
        this.token = token;
    }

    public HttpResponse sendMessage(Integer chatId, String text) throws UnirestException {
        return Unirest.post(endpoint + "bot" + token + "/sendMessage")
                .field("chat_id", chatId)
                .field("text", text)
                .asJson();
    }

    public HttpResponse getUpdates(Integer offset) throws UnirestException {
        return Unirest.post(endpoint + "bot" + token + "/getUpdates")
                .field("offset", offset)
                .asJson();
    }

    public void run() throws UnirestException {
        int last_update_id = 0; // controle das mensagens processadas
        HttpResponse response;
        while (true) {
            response = getUpdates(last_update_id++);
            if (response.getStatus() == 200) {
                JSONArray responses = response.getBody().getObject().getJSONArray("result");
                if (responses.isNull(0)) {
                    continue;
                } else {
                    last_update_id = responses
                            .getJSONObject(responses.length() - 1)
                            .getInt("update_id") + 1;
                }

                for (int i = 0; i < responses.length(); i++) {
                    JSONObject message = responses
                            .getJSONObject(i)
                            .getJSONObject("message");
                    int chat_id = message
                            .getJSONObject("chat")
                            .getInt("id");
                    String usuario = message
                            .getJSONObject("chat")
                            .getString("username");
                    String texto = message
                            .getString("text");
                    String textoInvertido = "";

                    for (int j = texto.length() - 1; j >= 0; j--) {
                        textoInvertido += texto.charAt(j);
                    }

                    sendMessage(chat_id, textoInvertido);
                }
            }
        }
    }
}

Main.java

package br.com.paulocollares.telegrambot;

import com.mashape.unirest.http.exceptions.UnirestException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {
        TelegramBot tb = new TelegramBot("cole aqui a chave gerada pelo BotFather");
        try {
            tb.run();
        } catch (UnirestException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

O método run(), depois de ser iniciado, ficará requisitando constantemente ao Telegram as requisições do seu bot, que serão obtidas por um JSON, será tratada e enviada de volta.

[caption id="attachment_1524" align="aligncenter" width="558"]Exemplo de uso do bot Exemplo de uso do bot[/caption]

Vale ressaltar que este bot só irá funcionar se a aplicação java estiver rodando, uma vez que é que responsabilidade do programa obter as requisições e enviar de volta. É um exemplo simples que apenas demonstra o uso do recurso de bots do Telegram. Postei também um exemplo em PHP, confira aqui.

Um abraço, e fiquem na Paz.

Deixe um comentário