Como fazer um bot para o Telegram em Java
Atualizado em:
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[/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 HttpResponsesendMessage(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[/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