diff --git a/.env b/.env index 1d0265f..6707af6 100755 --- a/.env +++ b/.env @@ -4,8 +4,27 @@ INTERVALO_MAXIMO_CLIQUE=20 INTERVALO_PRIMEIRO_CLIQUE=10 MAXIMO_CLIQUES_POR_SESSAO=20 INTERVALO_ENTRE_SESSOES=3300 -INTERVALO_CLIQUE_ESPERA=900 +INTERVALO_CLIQUE_GLOBAL=900 MAXIMO_FALHAS=10 -HORA_INICIO=09:00 -HORA_FIM=18:00 +# Períodos de sessão (até 10). Deixe vazio para desativar um período. +PERIODO_1_INICIO=09:00 +PERIODO_1_FIM=12:00 +PERIODO_2_INICIO=14:00 +PERIODO_2_FIM=18:00 +PERIODO_3_INICIO= +PERIODO_3_FIM= +PERIODO_4_INICIO= +PERIODO_4_FIM= +PERIODO_5_INICIO= +PERIODO_5_FIM= +PERIODO_6_INICIO= +PERIODO_6_FIM= +PERIODO_7_INICIO= +PERIODO_7_FIM= +PERIODO_8_INICIO= +PERIODO_8_FIM= +PERIODO_9_INICIO= +PERIODO_9_FIM= +PERIODO_10_INICIO= +PERIODO_10_FIM= CONFIANCA=0.9 diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc old mode 100755 new mode 100644 index 64aac6a..aa20bc7 Binary files a/__pycache__/main.cpython-311.pyc and b/__pycache__/main.cpython-311.pyc differ diff --git a/main.py b/main.py index 74bf2ab..4221c72 100755 --- a/main.py +++ b/main.py @@ -24,13 +24,32 @@ INTERVALO_MAXIMO_CLIQUE = int(os.getenv("INTERVALO_MAXIMO_CLIQUE", "30")) INTERVALO_PRIMEIRO_CLIQUE = int(os.getenv("INTERVALO_PRIMEIRO_CLIQUE", "10")) MAXIMO_CLIQUES_POR_SESSAO = int(os.getenv("MAXIMO_CLIQUES_POR_SESSAO", "20")) INTERVALO_ENTRE_SESSOES = int(os.getenv("INTERVALO_ENTRE_SESSOES", "60")) -INTERVALO_CLIQUE_ESPERA = int(os.getenv("INTERVALO_CLIQUE_ESPERA", "900")) +INTERVALO_CLIQUE_GLOBAL = int(os.getenv("INTERVALO_CLIQUE_GLOBAL", "900")) MAXIMO_FALHAS = int(os.getenv("MAXIMO_FALHAS", "5")) -HORA_INICIO = os.getenv("HORA_INICIO", "09:00") -HORA_FIM = os.getenv("HORA_FIM", "18:00") CONFIANCA = float(os.getenv("CONFIANCA", "0.8")) IMAGEM_BOTAO = os.path.join(os.path.dirname(os.path.abspath(__file__)), "botaoparaclicar.png") LOG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "log.txt") +PERIODOS_SESSAO = [] + +def _carregar_periodos(): + periodos = [] + for i in range(1, 11): + ini = os.getenv(f"PERIODO_{i}_INICIO", "").strip() + fim = os.getenv(f"PERIODO_{i}_FIM", "").strip() + if ini and fim: + periodos.append((ini, fim)) + return periodos + +PERIODOS_SESSAO = _carregar_periodos() + +def dentro_horario(periodos: list) -> bool: + agora = datetime.now().time() + for ini, fim in periodos: + hi = datetime.strptime(ini, "%H:%M").time() + hf = datetime.strptime(fim, "%H:%M").time() + if hi <= agora <= hf: + return True + return False pyautogui.FAILSAFE = True @@ -88,9 +107,8 @@ def painel_config() -> None: (C_CYAN, "Espera antes do 1º clique", f"{INTERVALO_PRIMEIRO_CLIQUE}s"), (C_YELLOW, "Máximo de cliques por sessão", str(MAXIMO_CLIQUES_POR_SESSAO)), (C_YELLOW, "Intervalo entre sessões", f"{INTERVALO_ENTRE_SESSOES}s"), - (C_CYAN, "Clique de espera entre sessões", f"{INTERVALO_CLIQUE_ESPERA}s"), + (C_CYAN, "Clique global de espera", f"{INTERVALO_CLIQUE_GLOBAL}s"), (C_MAG, "Máximo de falhas", str(MAXIMO_FALHAS)), - (C_WHITE, "Horário de funcionamento", f"{HORA_INICIO} às {HORA_FIM}"), (C_GRAY, "Confiança mínima", str(CONFIANCA)), ] @@ -116,6 +134,15 @@ def painel_config() -> None: ) print() + if PERIODOS_SESSAO: + print(C_WHITE + BOLD + center(" 📅 Períodos de sessão", C_TITLE) + RST) + print() + for idx, (ini, fim) in enumerate(PERIODOS_SESSAO, 1): + print(C_WHITE + f" {idx}. " + C_CYAN + f"{ini} → {fim}" + RST) + else: + print(C_RED + center(" ⚠ Nenhum período configurado!", C_RED) + RST) + print() + def cabecalho_sessao(num: int) -> None: print() print(C_MAG + BOLD + f" 🔄 SESSÃO {num} 🔄" + RST) @@ -149,12 +176,6 @@ def log(mensagem: str, cor: str = C_WHITE) -> None: except Exception: pass -def dentro_horario(hora_inicio: str, hora_fim: str) -> bool: - agora = datetime.now().time() - hi = datetime.strptime(hora_inicio, "%H:%M").time() - hf = datetime.strptime(hora_fim, "%H:%M").time() - return hi <= agora <= hf - def encontrar_botao(imagem_path: str, confianca: float = 0.8): if not os.path.isfile(imagem_path): log(f"ERRO: Imagem '{imagem_path}' não encontrada.", C_RED) @@ -219,15 +240,25 @@ def main() -> None: while True: agora = datetime.now() - if not dentro_horario(HORA_INICIO, HORA_FIM): + if not dentro_horario(PERIODOS_SESSAO): log( - f"[Sessão {numero_sessao}] Fora do horário permitido ({agora.strftime('%H:%M:%S')}).", + f"[Sessão {numero_sessao}] Fora de todos os períodos configurados ({agora.strftime('%H:%M:%S')}).", C_YELLOW, ) - log(f"Pausando até {HORA_INICIO}...", C_GRAY) + log(f"[Espera] Dormindo {INTERVALO_CLIQUE_GLOBAL}s até o próximo clique global...", C_GRAY) + time.sleep(INTERVALO_CLIQUE_GLOBAL) + pos_global = encontrar_botao(IMAGEM_BOTAO, CONFIANCA) + if pos_global: + gx, gy = pos_global + log( + f"[Espera] Clicando globalmente em ({gx}, {gy})...", + C_GREEN, + ) + pyautogui.click(gx, gy) + else: + log("[Espera] Botão não encontrado no clique global.", C_RED) falhas_consecutivas = 0 cliques_na_sessao = 0 - time.sleep(30) continue if primeiro_clique: @@ -283,7 +314,7 @@ def main() -> None: ) tempo_restante = INTERVALO_ENTRE_SESSOES while tempo_restante > 0: - tempo_ate_clique = min(tempo_restante, INTERVALO_CLIQUE_ESPERA) + tempo_ate_clique = min(tempo_restante, INTERVALO_CLIQUE_GLOBAL) log( f"[Espera] Dormindo {tempo_ate_clique}s (restam {tempo_restante}s)...", C_GRAY,