Pular para o conteúdo

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.silenciarmoderação
bot.fixar · bot.desafixarmensagem 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.