Oi, Samuel! Como vai?
Agradeço por compartilhar.
A sua ideia tá bem alinhada com a atividade: você valida o nivel (vip/normal/desativado), guarda tudo em uma lista e separa as notificações por tipo. Um ponto que chamou atenção é que lista_remetentes() usa input(), que é bloqueante; então, mesmo com asyncio.gather, o preenchimento da lista pode segurar o fluxo e as outras tarefas acabam não ficando tão “concorrentes” quanto parece.
Uma dica interessante para o futuro é usar asyncio.to_thread() para rodar leituras bloqueantes em uma thread, mantendo o loop assíncrono mais fluido. Veja este exemplo:
import asyncio
async def ler_nome():
nome = await asyncio.to_thread(input, "Digite o nome: ")
return nome.strip().capitalize()
async def main():
nome = await ler_nome()
print(f"Nome recebido: {nome}")
asyncio.run(main())
Esse código usa asyncio.to_thread pra executar o input fora do loop de eventos, evitando travar outras tarefas assíncronas enquanto o usuário digita.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!