Mídia, arquivos e grupos
Enviar foto e documento, baixar o que chega, e administrar um grupo.
Enviar#
dataforge
ctx.responder_foto("relatorio.png", "O gráfico de setembro")
ctx.responder_documento("fechamento.pdf", "Fechamento do mês")
// ou pelo bot, para outro chat:
app.bot.video(outro_chat, "clipe.mp4")
app.bot.enquete(ctx.chat, "Qual prefere?", ["A", "B"], anonima := no)Um `file_id` ou uma URL vão como texto; só o que está em disco (ou em memória) sobe por multipart. Mandar tudo por multipart funcionaria — e reenviaria um arquivo que o Telegram já tem.
"Digitando…"#
dataforge
mark @app.comando("relatorio")
action relatorio(ctx):
ctx.digitando() // some em 5s, ou quando a mensagem chega
dados := consulta_demorada()
ctx.responder(resumo(dados))Chamar antes de um trabalho demorado é a diferença entre um bot que parece travado e um que parece pensando.
Baixar#
dataforge
mark @app.midia("documento")
action recebeu(ctx):
arquivo := ctx.mensagem["document"]
caminho := app.bot.baixar(arquivo["file_id"], $"/tmp/{arquivo['file_name']}")
ctx.responder($"Salvei em {caminho}")São duas chamadas por baixo: getFile devolve um caminho temporário, e o download é num endereço diferente. Arquivos acima de 20 MB não podem ser baixados pela Bot API, e a mensagem diz isso.
Grupos#
bot.e_admin(chat, usuario) | a pergunta mais comum, já pronta |
bot.banir · bot.desbanir · bot.silenciar | moderação |
bot.fixar · bot.desafixar | mensagem fixada |
bot.chat(id) · bot.membro(chat, id) | o que o Telegram sabe |
O que o módulo não embrulha#
dataforge
Tg.chamar(token, "setChatTitle",
{"chat_id": -100123, "title": "Novo nome"})
// ou, com o bot aberto:
app.bot.chamar("setChatPhoto", {"chat_id": ctx.chat}, arquivos := {"photo": "logo.png"})A Bot API cresce, e um módulo que só oferece o que ele conhece envelhece no dia seguinte. chamar é a porta para qualquer método, com o mesmo tratamento de erro e de limite de taxa.