Tutorial

Neste pequeno tutorial, vamos criar um echo bot. Ele basicamente vai reenviar as mensagens que são recebidas como resposta.

O código está disponível em GitHub: Echo Bot.

Estrutura básica

Para este projeto, nós vamos receber o token do bot na chamada do binário, ficando assim:

./bot TOKEN

Para isso vamos criar nossa estrutura em c da seguinte forma:

#include <stdio.h>
#include <framebot/framebot.h>

int main (int argc, char **argv) {
   if (argc < 2) {
      printf("Usage: ./echo BOT_TOKEN\n");
      exit(-1);
   }

   Bot *echo;
   echo = framebot_init(); // Inicializamos

   return 0;
}

Aqui nós criamos uma condição caso o token não seja fornecido, e inicializamos a biblioteca com a função framebot_init().

Variaveis

Agora precisaremos de algumas variáveis para manipular a biblioteca. Serão elas:

long int last_offset = 0;
Bot *echo;
Framebot *frame_update;
Update *message, *temp;
Onde:

last_offset vai ser utilizado para podermos resetar a lista de updates mais tarde

echo é o nosso objeto do tipo Bot, essencial para manipular a biblioteca

frame_update que vai ser inicializado pela função get_updates() com as ultimas mensagens

message que vai conter nosso array de mensagens

Agora vamos inicializar nosso objeto Bot para podermos usar a API do Telegram. Para isso utilizamos a função framebot_init(), caso aconteça algum erro, ela retornará NULL. Vamos passar para a função nosso token que está localizado em argv[1].

echo = framebot(argv[1]);

Pegando atualizações

Agora já podemos pegar as atualizações direto da API.

frame_update = get_updates(echo, NULL, last_offset, 100, 0, NULL);
message = frame_update->update_message;
temp = message;

Na primeira linha é retornado um objeto do tipo Framebot, que contem referencias para as atualizações de diferentes tipos. Na segunda linha nós armazenamos na variavel message os updates do tipo Message. Na ultima linhas nós passamos a referencia do primeiro Update pra variavel temp, que nós vamos utilizar para iterar os Updates.

Respondendo as mensagens

Com as atualizações da API em mãos, agora vamos responder as mensagens recebidas pelo bot. Primeiro vamos iterar nossos Updates, e responder com a mesma mensagem recebida.

while (temp) {
   if (temp->message) {
      if (send_message_chat (echo, temp->message->from->id, temp->message->text, NULL, 0, 0, temp->message->message_id, NULL)) {
         printf("Sended: \"%s\" to %s!\n", temp->message->text, temp->message->from->username);
      }
   }

   last_offset = temp->update_id + 1; // Aqui armazenamos o offset do ultimo update, para podermos resetar depois
   temp = temp->next;
}

Aqui temos um while para iterar nossos Updates. Primeiro verificamos se recebemos de fato alguma mensagem, depois tentamos enviar nossa resposta, caso consigamos é escrito na tela uma mensagem informando o que foi enviado e para quem. Depois atualizamos nosso last_offset para podermos resetar a lista de updates.

Resetando updates

Resetar a lista de updates é importante para que não recebamos novamente as mesmas atualizações, dessa forma só respondemos uma única vez. Para resetar, nós fazemos mais uma chamada à get_updates() e passamos o nosso last_offset. Dessa forma, na próxima chamada à get_updates() não iremos receber os mesmos Updates.

get_updates(echo, frame_update, last_offset, 100, 0, NULL);

Limpando estruturas

No final nós liberamos a memória alocada com a função framebot_free().

framebot_free(frame_update);

Aqui finalizamos nosso tutorial.

Código final disponível em GitHub: Echo Bot.