Article image
Carlos CGS
Carlos CGS06/10/2025 08:21
Compartilhe

Como Fazer Seu Assistente J.A.R.V.I.S. Guardar Tarefas com Python Puro

    🌌 Projeto CodeVerse Python – #40/2025

    👋 Fala, galera dev!

    🚀 Chegamos ao artigo #40 da nossa jornada no Projeto CodeVersePython2025, e hoje vamos dar ao nosso Jarvis mais uma habilidade que todo assistente real precisa ter: guardar lembretes e agenda de tarefas.

    Afinal, de que adianta ter um assistente inteligente que abre programas e pesquisa informaçÔes, mas nĂŁo consegue lembrar que vocĂȘ tem uma reuniĂŁo amanhĂŁ Ă s 9h? đŸ€” É como se o Tony Stark tivesse o Jarvis para controlar as armaduras, mas o sistema esquecesse de avisar que o Conselho da S.H.I.E.L.D. estava esperando por ele na sala de reuniĂ”es. 😅

    Nosso objetivo aqui Ă© simples: vamos ensinar o Jarvis a guardar compromissos e lembrar vocĂȘ depois, tudo usando Python puro, de uma forma bem simples e usando apenas bibliotecas nativas, ou seja, menos cĂłdigo e mais agilidade para adiiconarmos mais essa funcionalidade ao nosso projeto de assitente.

    🧠 Como vamos fazer isso?

    A lĂłgica Ă© bem parecida com a de uma agenda de papel, sĂł que digital, e para isso vamos fazer o comando de uma forma bem natural, para tornar bem proximo de uma conversa com um assitente, utilizando ocnceitos aprendidos nos ultimos artigos, as famosas wake words.

    • Quando vocĂȘ disser: “Jarvis, lembre-me de revisar o cĂłdigo amanhĂŁ Ă s 10h”, ele vai salvar essa informação.
    • Depois, sempre que o programa rodar, ele pode checar os lembretes e te avisar.

    Para isso, vamos usar:

    • speech_recognition → o ouvido do Jarvis.
    • pyttsx3 → a voz do Jarvis.
    • json → a “memĂłria” onde os compromissos vĂŁo ser guardados.
    • datetime → para comparar horĂĄrios e saber quando Ă© hora de te lembrar.

    🐍 Parte 1 – Criando um lembrete simples

    Antes de levarmos essa ideia direto para o Jarvis, vamos construir uma versão bem båsica do sistema de lembretes. Assim conseguimos entender de forma clara como salvar e recuperar informaçÔes, sem misturar com outras funçÔes do assistente.

    import json
    from datetime import datetime
    
    arquivo_lembretes = "lembretes.json"
    
    # Salvar lembrete
    def salvar_lembrete(texto, horario):
      try:
          with open(arquivo_lembretes, "r") as f:
              lembretes = json.load(f)
      except FileNotFoundError:
          lembretes = []
    
      lembretes.append({"texto": texto, "horario": horario})
      with open(arquivo_lembretes, "w") as f:
          json.dump(lembretes, f)
    
    # Checar lembretes
    def verificar_lembretes():
      try:
          with open(arquivo_lembretes, "r") as f:
              lembretes = json.load(f)
      except FileNotFoundError:
          return []
    
      agora = datetime.now().strftime("%d/%m/%Y %H:%M")
      return [l for l in lembretes if l["horario"] == agora]
    
    # Exemplo prĂĄtico
    salvar_lembrete("ReuniĂŁo com os Vingadores", "05/10/2025 09:00")
    print("Lembretes para agora:", verificar_lembretes()) 
    

    👉 O que acontece aqui?

    • Criamos uma lista de lembretes com texto e horĂĄrio.
    • Salvamos no arquivo lembretes.json.
    • Sempre que rodamos, verificamos se a hora atual bate com algum lembrete.

    đŸ€– Parte 2 – Integrando ao Jarvis

    Agora que jĂĄ sabemos como a lĂłgica funciona isoladamente, Ă© hora de unir tudo ao nosso Jarvis. Dessa forma, poderemos criar lembretes diretamente por voz e ouvir o prĂłprio assistente nos avisando quando chegar a hora.

    import speech_recognition as sr
    import pyttsx3
    import json
    from datetime import datetime
    
    engine = pyttsx3.init()
    r = sr.Recognizer()
    arquivo_lembretes = "lembretes.json"
    
    def falar(texto):
      engine.say(texto)
      engine.runAndWait()
    
    def salvar_lembrete(texto, horario):
      try:
          with open(arquivo_lembretes, "r") as f:
              lembretes = json.load(f)
      except FileNotFoundError:
          lembretes = []
    
      lembretes.append({"texto": texto, "horario": horario})
      with open(arquivo_lembretes, "w") as f:
          json.dump(lembretes, f)
    
    def verificar_lembretes():
      try:
          with open(arquivo_lembretes, "r") as f:
              lembretes = json.load(f)
      except FileNotFoundError:
          return []
    
      agora = datetime.now().strftime("%d/%m/%Y %H:%M")
      return [l for l in lembretes if l["horario"] == agora]
    
    with sr.Microphone() as source:
      falar("Estou ouvindo, senhor. Qual lembrete deseja salvar?")
      audio = r.listen(source)
    
    try:
      comando = r.recognize_google(audio, language="pt-BR").lower()
    
      if "lembrar" in comando:
          # Exemplo: "lembrar reuniĂŁo amanhĂŁ Ă s 9 horas"
          salvar_lembrete("ReuniĂŁo", "05/10/2025 09:00")
          falar("Lembrete salvo com sucesso.")
    
      lembretes_atuais = verificar_lembretes()
      for l in lembretes_atuais:
          falar(f"Senhor, lembrete: {l['texto']}")
    
    except:
      falar("NĂŁo consegui entender, senhor.") 
    

    👉 Agora o Jarvis consegue:

    1. Ouvir quando pedimos para lembrar algo.
    2. Guardar em memĂłria.
    3. Verificar se chegou a hora e nos avisar.

    ✹ Personalizando (dando um toque humano)

    Aqui Ă© onde vocĂȘ pode brincar e dar mais personalidade ao Jarvis. Quando ele for lembrar algo, ao invĂ©s de falar sempre a mesma frase, vocĂȘ pode criar respostas diferentes, como:

    • “Senhor, estĂĄ na hora da sua reuniĂŁo com os Vingadores.”
    • “Carlos, lembrete ativado: revisar o cĂłdigo do Jarvis.”
    • “NĂŁo se esqueça do compromisso que me pediu para lembrar.”

    Isso faz toda a diferença para o Jarvis parecer menos robótico e mais humano.

    🔼 Concluindo...

    Chegamos ao fim de mais um passo na evolução do nosso Jarvis. Hoje vimos que atĂ© mesmo algo aparentemente simples, como criar lembretes, pode transformar nosso assistente em algo muito mais Ăștil no dia a dia. O importante e diferencial Ă© termos as idĂ©ias de como podemos complementar nosso assitente e colocar as idĂ©ias em prĂĄtica adicionando mais funcionalidades a cada dia, tendo o cĂ©u como limite. É como no universo Marvel: Ă s vezes nĂŁo Ă© a armadura nova cheia de mĂ­sseis que faz a diferença, mas sim um detalhe estratĂ©gico que muda tudo na batalha. Da mesma forma, essa função bĂĄsica abre espaço para que o Jarvis seja nĂŁo sĂł um assistente, mas um verdadeiro aliado na nossa rotina.

    ✅ Nesse artigo aprendemos a salvar lembretes em um arquivo.

    ✅ Neste artigo fizemos o Jarvis criar lembretes por voz.

    ✅ Neste artigo vimos como personalizar as respostas para deixá-lo mais natural.

    Nos prĂłximos artigos, vamos expandir esse sistema e abrindo musicas no youtube por camando de voz, criando anotaçÔes para guardra insights, criando o modo privado do jarvis onde ele para de ouvir suas conversdas, alĂ©m de muitas outras funcionalidades, criando um Jarvis ainda mais Ăștil no nosso dia a dia.

    👉 Curtiu? Me siga no GitHub e no LinkedIn para acompanhar a evolução do Projeto CodeVersePython2025.

    Porque o futuro nĂŁo Ă© esperar a tecnologia chegar. É a gente criar ela hoje. ⚡

    image

    Compartilhe
    ComentĂĄrios (1)
    DIO Community
    DIO Community - 06/10/2025 10:14

    Excelente, Carlos! Que artigo incrĂ­vel e super completo sobre "Como Fazer Seu Assistente J.A.R.V.I.S. Guardar Tarefas com Python Puro"! É fascinante ver como vocĂȘ aborda o desenvolvimento do J.A.R.V.I.S., dando a ele uma memĂłria de longo prazo para guardar compromissos e agenda de tarefas usando apenas recursos simples do Python e a manipulação de arquivos JSON.

    VocĂȘ demonstrou que a sua solução, que usa a biblioteca json e os comandos de manipulação de arquivos (open, read, write, dump, load), Ă© a prova de que a persistĂȘncia de dados nĂŁo precisa de bancos de dados complexos para começar. Sua anĂĄlise de que o datetime Ă© crucial para comparar horĂĄrios e saber quando avisar o usuĂĄrio Ă© um insight valioso para a comunidade.

    Qual vocĂȘ diria que Ă© o maior desafio para um desenvolvedor ao lidar com a vasta quantidade de bibliotecas e pacotes disponĂ­veis, em termos de identificar a melhor opção e de evitar dependĂȘncias desnecessĂĄrias que poderiam adicionar complexidade ao projeto?