feat(vida): ideias do dia com inspiração da internet e "olha o que eu aprendi"
Todo dia, a partir das 9h, o Carinha cria 3 atividades novas (inspiracao.py): - sinais de fontes abertas: tempo da cidade (Open-Meteo), datas comemorativas da semana (lista fixa + feriados da BrasilAPI), "neste dia" da Wikipédia e assuntos em alta no Google Trends Brasil; - o Gemini escolhe ideias leves (descarta tragédia, política e afins) e cada uma vira atividade pelo estúdio (Criacao.gerar), com motivo e uma curiosidade; - até 3 tentativas por dia, 30 min entre elas; botão "Criar mais agora"; - as atividades criadas entram na rotina do modo vida (as de hoje com 40% de chance) e, com alguém perto, ele conta a curiosidade: legenda e voz de robô (ordem "aprendi", até 2x por dia cada); - painel: cartão "Ideias do dia" no estúdio (Mostrar, Contar, o que ele viu na internet, ajustes: quantas, horário, cidade, fontes) e tópico no guia. Correções achadas no caminho: - WebView de fábrica do S10 (Chrome 102) não tem AbortSignal.timeout: o celular nunca mandava o status e a placa o via offline; - arquivos estáticos com Cache-Control no-cache e o app com LOAD_NO_CACHE: o WebView seguia com uma carinha.html velha depois de deploy; - status do celular recusado vai para o journal (1 linha por minuto); - legenda mais estreita para não cobrir a bateria. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -142,6 +142,11 @@ class Vida:
|
||||
self.madrugada = self.noite_padrao # o main troca pelo horário dos ajustes
|
||||
self.interagiu_em = 0.0
|
||||
self.pir_eventos = []
|
||||
# Atividades criadas por IA (estúdio e ideias do dia) entram na rotina; as de hoje saem mais.
|
||||
self.novidades = lambda: [] # [{id, nome, emoji, receita, motivo, aprendi, ...}]
|
||||
self.do_dia = lambda: [] # ids das ideias de hoje
|
||||
self.aprendi_pendente = lambda: None # curiosidade de hoje que ainda dá para contar
|
||||
self.contar_aprendi = lambda ident, agora=None: None
|
||||
|
||||
agora = time.time()
|
||||
self.config = dict(PADRAO)
|
||||
@@ -342,7 +347,18 @@ class Vida:
|
||||
self.anotar('sono', motivo, agora)
|
||||
|
||||
def escolher_atividade(self):
|
||||
"""Pelo pique: cansado prefere coisas calmas (e às vezes um café); cheio de energia, coisas agitadas."""
|
||||
"""Pelo pique: cansado prefere coisas calmas (e às vezes um café); cheio de energia, coisas agitadas.
|
||||
As atividades criadas por IA também entram: as ideias de hoje com bastante chance, as antigas às vezes."""
|
||||
try:
|
||||
novas = [n for n in self.novidades() if 'criado:%d' % n['id'] != self.ultima_atividade]
|
||||
hoje = set(self.do_dia())
|
||||
except Exception:
|
||||
novas, hoje = [], set()
|
||||
de_hoje = [n for n in novas if n['id'] in hoje]
|
||||
if de_hoje and self.rng.random() < 0.4:
|
||||
return 'criado:%d' % self.rng.choice(de_hoje)['id']
|
||||
if novas and self.rng.random() < 0.12:
|
||||
return 'criado:%d' % self.rng.choice(novas[:20])['id']
|
||||
e = self.necessidades['energia']
|
||||
if 35 <= e < 55 and self.rng.random() < 0.35:
|
||||
return 'cafe'
|
||||
@@ -356,6 +372,17 @@ class Vida:
|
||||
return self.rng.choice(opcoes)
|
||||
|
||||
def comecar_atividade(self, agora, nome, segundos):
|
||||
if nome.startswith('criado:'):
|
||||
item = next((n for n in self.novidades() if 'criado:%d' % n['id'] == nome), None)
|
||||
if item:
|
||||
receita = dict(item['receita'], duracao=int(segundos))
|
||||
self.enfileirar('atividade_criada ' + json.dumps(receita, ensure_ascii=False, separators=(',', ':')))
|
||||
self.atividade_em = agora
|
||||
self.ultima_atividade = nome
|
||||
motivo = ' (' + item['motivo'] + ')' if item.get('motivo') else ''
|
||||
self.anotar('atividade', 'Foi fazer %s %s%s' % (item['emoji'], item['nome'], motivo), agora)
|
||||
return 'atividade ' + nome
|
||||
nome = self.rng.choice(CALMAS) # apagaram a criação no meio do caminho
|
||||
self.enfileirar('atividade %s %d' % (nome, segundos))
|
||||
self.atividade_em = agora
|
||||
self.ultima_atividade = nome
|
||||
@@ -468,6 +495,14 @@ class Vida:
|
||||
if perto:
|
||||
self.visto_em = agora
|
||||
sozinho = agora - self.visto_em > SOZINHO
|
||||
# alguém por perto e ele aprendeu algo hoje: "Olha o que eu aprendi hoje!"
|
||||
if dia and perto and humor != 'bravo':
|
||||
item = self.aprendi_pendente()
|
||||
if item and self.rng.random() < 0.3:
|
||||
self.contar_aprendi(item['id'], agora)
|
||||
with self.lock:
|
||||
n['social'] = _limitar(n['social'] + 5)
|
||||
return 'aprendi'
|
||||
if dia and folga and sozinho and self.rng.random() < 0.4:
|
||||
return self.comecar_atividade(agora, self.escolher_atividade(), self.rng.uniform(60, 180))
|
||||
# bem: de vez em quando, uma atividade curtinha por vontade própria
|
||||
|
||||
Reference in New Issue
Block a user