Iuri Guilherme / Livecoding da(o)(e) MateBot, Robô Social (4)
Created 2020-10-07 Modified 2020-10-07

866 Words

Objetivos de hoje:


Bibliografia (linkania):


Transmissão ao vivo

Começou aproximadamente às 18:00 BRT (UTC -3) do dia 07 de outubro de 2020 (quarta-feira já).

Ao vivo no Youtube no canal do Matehackers: https://www.youtube.com/c/Exmachinae/live
Ao vivo também no Discord: https://discord.gg/yDwncrE

Gravação no Youtube


Aiogram Webhooks

O problema de usar long polling ao invés de Webhooks é que long polling é o que se chama na programação assíncrona de “blocking”. Eu não consigo ter outros loops ou outras funções assíncronas e portanto não consigo escutar e mandar mensagens para o Telegram e pro Discord ao mesmo tempo, por exemplo. Na Terça Sem Fim de hoje o desafio é usar Webhooks com a API do Telegram e com a API do Discord, possibilitando que o Bot faça uma ponte entre estas duas ferramentas de comunicação.

Isto também possibilitará retomar o uso de Quart/Flask no desenvolvimento, o que (re)abre novas possibilidades.

Começando com a implementação de webhooks no Aiogram: https://docs.aiogram.dev/en/latest/examples/webhook_example.html

Lendo a documentação de gerar certificados do Telegram e o guia de webhooks também do Telegram, concluí novamente que pra usar webhooks tem que ter uma VPS com o firewall configurado e certificados SSL válidos.

Aprendi a diferença entre o setWebhook e o startWebhook do Telegram. O primeiro envia para o servidor do Telegram qual é o endereço externo (público) pra onde o servidor do Telegram vai enviar as atualizações (updates). No caso do servidor da denise é por exemplo https://denise.matehackers.org/webhook. O segundo método cria um servidor aiohttp em uma porta e um endereço. As duas configurações podem ser a mesma se e somente se o python puder usar um endereço público e uma porta pública, com um contexto SSL devidamente configurado.

No entanto, nada na documentação dos bots do telegram explicava corretamente como fazer isto, ou não está bem implementado. Após muita conversa nos grupos do telegram com os outros desenvolvedores, cheguei à conclusão de que todo mundo usa o artifício mais óbvio: usar um proxy reverso (por exemplo nginx) pra configurar facilmente o contexto SSL e iniciar um webhook que só escute no endereço localhost (127.0.0.1).

Eu fiz isto como teste e funcionou. No entanto, várias outras práticas de segurança devem ser observadas, pois estou usando um servidor de produção com outros serviços críticos funcionando.

Além disto, este não é o cenário ideal para a maioria das pessoas desenvolvedoras de bot e usuária(o)s do MateBot. O ideal seria que o MateBot gerasse certificados auto assinados e criasse um contexto SSL para a(o) usuária(o).

Transmissão encerrada aproximadamente às 04:45.