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 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[/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