Pular para o conteúdo

Quando o tratador falha

ao_falhar, a mensagem que a pessoa vê, e o erro que vai para o log — nunca o contrário.

Um tratador que levanta, sem nada por cima, deixa a pessoa esperando uma resposta que não vem. app.ao_falhar é o tratador do erro: ele recebe o contexto e o erro, responde algo útil a quem estava falando, e anota o resto.

dataforge
adopt Arcane.Telegram as Tg

app := Tg.app("123456:TESTE-exemplo")

anotados := []

mark @app.comando("dividir")
action dividir(ctx):
    partes := ctx.texto.split(" ")
    ctx.responder($"{int(partes[1]) / int(partes[2])}")

mark @app.ao_falhar()
action falhou(ctx, erro):
    anotados.append(erro)
    ctx.responder("Não consegui fazer essa conta. Tente: /dividir 10 2")

t := Tg.testar(app)
t.comando("dividir", "10", "0")
assert t.ultima().starts_with("Não consegui")
assert len(anotados) is 1 and t.falhou()

t.comando("dividir", "10", "2")
assert t.ultima() is "5.0"
Vai para a pessoaVai para o log
o que ela pode fazer ("tente /dividir 10 2")o erro inteiro, com a linha
que algo falhou, sem culpá-lao id do chat e o texto que chegou
nunca: mensagem do banco, caminho de arquivo, tokeno token mascarado, se aparecer