Spaces:
Paused
Paused
Update main.py
Browse files
main.py
CHANGED
|
@@ -22,7 +22,7 @@ def log(acao, status="INFO"):
|
|
| 22 |
class ServidorFalso(BaseHTTPRequestHandler):
|
| 23 |
def do_GET(self):
|
| 24 |
self.send_response(200); self.end_headers()
|
| 25 |
-
self.wfile.write(b"Bot Tribal Wars v5.
|
| 26 |
def log_message(self, format, *args): pass
|
| 27 |
|
| 28 |
def manter_dock_viva():
|
|
@@ -32,64 +32,54 @@ def manter_dock_viva():
|
|
| 32 |
def force_click(driver, element):
|
| 33 |
driver.execute_script("arguments[0].click();", element)
|
| 34 |
|
| 35 |
-
# --- LOGIN
|
| 36 |
def realizar_login(driver):
|
| 37 |
-
log("Acedendo ao
|
| 38 |
driver.get("https://www.tribalwars.com.br/")
|
| 39 |
try:
|
| 40 |
-
WebDriverWait(driver,
|
| 41 |
driver.type('input#user', USER_TW)
|
| 42 |
driver.type('input#password', PASS_TW)
|
| 43 |
driver.execute_script("document.querySelector('.btn-login').click();")
|
| 44 |
|
| 45 |
-
time.sleep(
|
| 46 |
-
#
|
| 47 |
links = driver.find_elements(By.TAG_NAME, "a")
|
| 48 |
for link in links:
|
| 49 |
if MUNDO_ID in (link.get_attribute("href") or ""):
|
| 50 |
force_click(driver, link)
|
| 51 |
-
log(
|
| 52 |
-
time.sleep(5)
|
| 53 |
return True
|
| 54 |
return False
|
| 55 |
-
except
|
| 56 |
-
log(f"Falha no Login: {str(e)[:50]}", "ALERTA")
|
| 57 |
-
return False
|
| 58 |
|
| 59 |
-
# --- MOTOR
|
| 60 |
def auditoria_e_obras(driver):
|
| 61 |
-
#
|
| 62 |
-
# O parâmetro &village=0 serve para contas novas que ainda não têm ID de aldeia fixo
|
| 63 |
-
log("Forçando entrada na Aldeia Principal...", "SISTEMA")
|
| 64 |
driver.get(f"https://{MUNDO_ID}.tribalwars.com.br/game.php?screen=main")
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
# 🧹 LIMPEZA DE TUTORIAL (Remove tudo que bloqueia o Selenium)
|
| 68 |
driver.execute_script("""
|
| 69 |
-
jQuery(".popup_box_close").
|
| 70 |
-
jQuery("
|
| 71 |
-
jQuery(".tutorial-arrow").remove();
|
| 72 |
-
jQuery("#mask").remove();
|
| 73 |
-
jQuery(".modal-overlay").remove();
|
| 74 |
""")
|
| 75 |
|
| 76 |
try:
|
| 77 |
-
# Espera
|
| 78 |
-
WebDriverWait(driver,
|
| 79 |
|
| 80 |
mad = driver.find_element(By.ID, "wood").text
|
| 81 |
arg = driver.find_element(By.ID, "stone").text
|
| 82 |
fer = driver.find_element(By.ID, "iron").text
|
| 83 |
-
log(f"
|
| 84 |
|
| 85 |
-
# Verifica fila
|
| 86 |
fila = driver.find_elements(By.CLASS_NAME, "buildorder")
|
| 87 |
if len(fila) >= 2:
|
| 88 |
-
log("Fila
|
| 89 |
return
|
| 90 |
|
| 91 |
-
#
|
| 92 |
-
# Main primeiro (acelera tudo), depois Minas, depois Armazém
|
| 93 |
prioridades = ["main", "wood", "stone", "iron", "storage", "farm"]
|
| 94 |
|
| 95 |
for ed in prioridades:
|
|
@@ -98,13 +88,13 @@ def auditoria_e_obras(driver):
|
|
| 98 |
btn = driver.find_element(By.CSS_SELECTOR, btn_css)
|
| 99 |
if "btn-disabled" not in btn.get_attribute("class"):
|
| 100 |
force_click(driver, btn)
|
| 101 |
-
log(f"
|
| 102 |
return
|
| 103 |
|
| 104 |
-
log("
|
| 105 |
|
| 106 |
except Exception as e:
|
| 107 |
-
log(
|
| 108 |
|
| 109 |
def iniciar():
|
| 110 |
display = Display(visible=0, size=(1920, 1080)); display.start()
|
|
@@ -114,17 +104,16 @@ def iniciar():
|
|
| 114 |
if realizar_login(driver):
|
| 115 |
while True:
|
| 116 |
auditoria_e_obras(driver)
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
time.sleep(pausa)
|
| 120 |
|
| 121 |
-
#
|
| 122 |
if "screen=index" in driver.current_url:
|
| 123 |
realizar_login(driver)
|
| 124 |
else:
|
| 125 |
-
time.sleep(
|
| 126 |
|
| 127 |
-
except Exception as e: log(f"
|
| 128 |
finally:
|
| 129 |
driver.quit(); display.stop()
|
| 130 |
|
|
|
|
| 22 |
class ServidorFalso(BaseHTTPRequestHandler):
|
| 23 |
def do_GET(self):
|
| 24 |
self.send_response(200); self.end_headers()
|
| 25 |
+
self.wfile.write(b"Bot Tribal Wars v5.4 - Turbo Mode")
|
| 26 |
def log_message(self, format, *args): pass
|
| 27 |
|
| 28 |
def manter_dock_viva():
|
|
|
|
| 32 |
def force_click(driver, element):
|
| 33 |
driver.execute_script("arguments[0].click();", element)
|
| 34 |
|
| 35 |
+
# --- LOGIN DIRETO ---
|
| 36 |
def realizar_login(driver):
|
| 37 |
+
log("Acedendo ao servidor (Modo Turbo)...", "SISTEMA")
|
| 38 |
driver.get("https://www.tribalwars.com.br/")
|
| 39 |
try:
|
| 40 |
+
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "user")))
|
| 41 |
driver.type('input#user', USER_TW)
|
| 42 |
driver.type('input#password', PASS_TW)
|
| 43 |
driver.execute_script("document.querySelector('.btn-login').click();")
|
| 44 |
|
| 45 |
+
time.sleep(4)
|
| 46 |
+
# Clique imediato no mundo
|
| 47 |
links = driver.find_elements(By.TAG_NAME, "a")
|
| 48 |
for link in links:
|
| 49 |
if MUNDO_ID in (link.get_attribute("href") or ""):
|
| 50 |
force_click(driver, link)
|
| 51 |
+
log("Dentro do Mundo!", "SUCESSO")
|
|
|
|
| 52 |
return True
|
| 53 |
return False
|
| 54 |
+
except: return False
|
|
|
|
|
|
|
| 55 |
|
| 56 |
+
# --- MOTOR SEM ESPERA ---
|
| 57 |
def auditoria_e_obras(driver):
|
| 58 |
+
# Forçar URL para garantir que os seletores existam
|
|
|
|
|
|
|
| 59 |
driver.get(f"https://{MUNDO_ID}.tribalwars.com.br/game.php?screen=main")
|
| 60 |
+
|
| 61 |
+
# Limpeza instantânea via JS (sem esperar o Selenium)
|
|
|
|
| 62 |
driver.execute_script("""
|
| 63 |
+
jQuery(".popup_box_close, .quest-reward-collect, #mask, .modal-overlay").remove();
|
| 64 |
+
jQuery("body").removeClass("modal-open");
|
|
|
|
|
|
|
|
|
|
| 65 |
""")
|
| 66 |
|
| 67 |
try:
|
| 68 |
+
# Espera curta (máximo 5s) para os IDs aparecerem
|
| 69 |
+
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, "wood")))
|
| 70 |
|
| 71 |
mad = driver.find_element(By.ID, "wood").text
|
| 72 |
arg = driver.find_element(By.ID, "stone").text
|
| 73 |
fer = driver.find_element(By.ID, "iron").text
|
| 74 |
+
log(f"RECURSOS -> M:{mad} | A:{arg} | F:{fer}", "AUDIT")
|
| 75 |
|
| 76 |
+
# Verifica fila
|
| 77 |
fila = driver.find_elements(By.CLASS_NAME, "buildorder")
|
| 78 |
if len(fila) >= 2:
|
| 79 |
+
log("Fila 2/2. A aguardar libertação...", "INFO")
|
| 80 |
return
|
| 81 |
|
| 82 |
+
# Prioridade rápida
|
|
|
|
| 83 |
prioridades = ["main", "wood", "stone", "iron", "storage", "farm"]
|
| 84 |
|
| 85 |
for ed in prioridades:
|
|
|
|
| 88 |
btn = driver.find_element(By.CSS_SELECTOR, btn_css)
|
| 89 |
if "btn-disabled" not in btn.get_attribute("class"):
|
| 90 |
force_click(driver, btn)
|
| 91 |
+
log(f"CONSTRUÇÃO DISPARADA: {ed.upper()}", "SUCESSO")
|
| 92 |
return
|
| 93 |
|
| 94 |
+
log("Sem recursos suficientes no momento.", "INFO")
|
| 95 |
|
| 96 |
except Exception as e:
|
| 97 |
+
log("A sincronizar interface...", "SISTEMA")
|
| 98 |
|
| 99 |
def iniciar():
|
| 100 |
display = Display(visible=0, size=(1920, 1080)); display.start()
|
|
|
|
| 104 |
if realizar_login(driver):
|
| 105 |
while True:
|
| 106 |
auditoria_e_obras(driver)
|
| 107 |
+
# REMOVIDO O TEMPO LONGO - Agora espera apenas 2 segundos entre ciclos
|
| 108 |
+
time.sleep(2)
|
|
|
|
| 109 |
|
| 110 |
+
# Se deslogar, entra de novo sem esperar
|
| 111 |
if "screen=index" in driver.current_url:
|
| 112 |
realizar_login(driver)
|
| 113 |
else:
|
| 114 |
+
time.sleep(5)
|
| 115 |
|
| 116 |
+
except Exception as e: log(f"Erro: {e}", "ALERTA")
|
| 117 |
finally:
|
| 118 |
driver.quit(); display.stop()
|
| 119 |
|