Quem pode usar o quê
Lista de permitidos, administradores de grupo e o gancho que barra antes do tratador.
Um bot é público: qualquer pessoa que achar o nome dele pode mandar /apagar_tudo. A pergunta "quem pode?" precisa de resposta em todo comando que muda algo — e a forma de não esquecê-la em nenhum é respondê-la num lugar só.
dataforge
adopt Arcane.Telegram as Tg
app := Tg.app("123456:TESTE-exemplo")
steady ADMINS := [42]
mark @app.antes_de_cada()
action barrar(ctx):
publicos := ["/start", "/ajuda"]
given (ctx.texto ?? "") in publicos or ctx.id_do_usuario() in ADMINS:
yield yes
ctx.responder("Este bot é de uso interno.")
yield no // 'no' interrompe o update
mark @app.comando("apagar_tudo")
action apagar_tudo(ctx):
ctx.responder("Apagado.")
admin := Tg.testar(app)
admin.comando("apagar_tudo")
assert admin.ultima() is "Apagado."
estranho := Tg.testar(app, 2002, {"id": 7, "first_name": "Zé"})
estranho.comando("apagar_tudo")
assert estranho.ultima() is "Este bot é de uso interno."Em grupo: quem administra#
Num grupo, a pergunta costuma ser "quem fala é administrador deste grupo?". ctx.e_admin() pergunta ao Telegram — e em conversa privada é sempre yes, porque ali a pessoa administra a própria conversa:
dataforge
adopt Arcane.Telegram as Tg
app := Tg.app("123456:TESTE-exemplo")
mark @app.comando("fixar")
action fixar(ctx):
given not ctx.e_admin():
ctx.responder("Só administradores fixam mensagens.")
yield void
ctx.responder("Fixada.")
t := Tg.testar(app, -100123) // id negativo: um grupo
t.comando("fixar")
assert t.ultima() is "Só administradores fixam mensagens."