Pular para o conteúdo

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."