Erinaldordso commited on
Commit
5292b22
·
verified ·
1 Parent(s): 7d73ef0

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +126 -141
main.py CHANGED
@@ -6,170 +6,155 @@ from http.server import BaseHTTPRequestHandler, HTTPServer
6
  from seleniumbase import Driver
7
  from selenium.webdriver.common.by import By
8
  from pyvirtualdisplay import Display
 
 
 
 
 
9
 
10
- # --- CONFIGURAÇÕES DE SESSÃO ---
11
  MEUS_COOKIES = [
12
  {"name": "pac_ocean", "value": "A55233B0"},
13
  {"name": "HighwindFRPG", "value": "FVQCTfUiHPqufIN4zJcMPQ%3D%3D%3Cstrip%3E%24argon2id%24v%3D19%24m%3D7168%2Ct%3D4%2Cp%3D1%24bm1Ob0lmUWdSZEtHeklNVw%24L1Y8X1pEyJ5zX13VIK8oqNQcdHtwrdhvhHeseXSEhNA"},
14
  {"name": "farmrpg_token", "value": "6tgeudskm32f0rlq6oputj0j1kd5f59nkdvolsdv"}
15
  ]
16
 
 
 
 
 
 
 
 
17
  class ServidorFalso(BaseHTTPRequestHandler):
18
  def do_GET(self):
19
  self.send_response(200)
20
  self.end_headers()
21
- self.wfile.write(b"Bot Farm RPG Profissional OOP Ativo!")
22
  def log_message(self, format, *args): pass
23
 
24
  def manter_dock_viva():
25
  HTTPServer(('0.0.0.0', 7860), ServidorFalso).serve_forever()
26
 
27
- # --- ARQUITETURA PROFISSIONAL DO BOT (OOP) ---
28
- class FarmRPGBotProfissional:
29
- def __init__(self, cookies):
30
- self.cookies = cookies
31
- self.driver = None
32
- self.display = None
33
-
34
- # Máquina de Estados Finitos (FSM - Memória Central)
35
- self.estado = {
36
- "stamina_esgotada": False,
37
- "inventario_cheio": False,
38
- "proxima_colheita": 0,
39
- "ciclo_atual": 0
40
- }
41
 
42
- def log(self, acao, status="INFO"):
43
- agora = datetime.now().strftime("%H:%M:%S")
44
- icone = "⚙️" if status == "SISTEMA" else "🎯" if status == "DECISÃO" else "⚔️" if status == "EXPLORAR" else "💰" if status == "MERCADO" else "🚜" if status == "FAZENDA" else "⚠️"
45
- print(f"[{agora}] {icone} [{status}] {acao}", flush=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
- def iniciar_navegador(self):
48
- self.display = Display(visible=0, size=(1920, 1080))
49
- self.display.start()
50
- self.driver = Driver(uc=True, headless=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
- # Injeção Limpa de Sessão VIP
53
- self.driver.get("https://farmrpg.com/robots.txt")
54
- time.sleep(2)
55
- for cookie in self.cookies:
56
- try: self.driver.add_cookie({'name': cookie['name'], 'value': cookie['value'], 'domain': 'farmrpg.com'})
57
- except: pass
58
- self.log("Navegador inicializado e cookies injetados.", "SISTEMA")
59
-
60
- def desligar_navegador(self):
61
- if self.driver:
62
- try: self.driver.quit()
63
- except: pass
64
- if self.display:
65
- self.display.stop()
66
- self.log("Navegador purgado da memória RAM.", "SISTEMA")
67
-
68
- # --- MÓDULOS DE AÇÃO (Lógica Fechada) ---
69
- def modulo_exploracao(self):
70
- if self.estado["stamina_esgotada"]:
71
- self.log("Estado: Stamina Esgotada. Ignorando a Floresta.", "DECISÃO")
72
- return
73
-
74
- self.log("Iniciando Exploração Agressiva...", "EXPLORAR")
75
- self.driver.get("https://farmrpg.com/index.php#!/area.php?id=1")
76
- time.sleep(3)
77
 
78
- sucessos = 0
79
- for _ in range(20):
80
- try:
81
- # O Cérebro deteta o texto vermelho do jogo se o inventário encher
82
- texto = self.driver.page_source.lower()
83
- if "inventory full" in texto or "you are full" in texto:
84
- self.estado["inventario_cheio"] = True
85
- self.log("Estado Alterado: Inventário Cheio detetado!", "DECISÃO")
86
- break
87
-
88
- self.driver.find_element(By.ID, "explorebtn").click()
89
- sucessos += 1
90
- time.sleep(0.4) # Velocidade humanizada
91
- except:
92
- self.estado["stamina_esgotada"] = True
93
- self.log("Estado Alterado: Sem energia disponível.", "DECISÃO")
94
- break
 
 
 
 
 
 
95
 
96
- self.log(f"Fim do módulo de exploração. Cliques efetuados: {sucessos}", "EXPLORAR")
97
-
98
- def modulo_mercado(self):
99
- if not self.estado["inventario_cheio"]:
100
- return
101
-
102
- self.log("A executar despejo de inventário no mercado...", "MERCADO")
103
- self.driver.get("https://farmrpg.com/index.php#!/sellall.php")
104
- time.sleep(3)
105
-
106
- self.estado["inventario_cheio"] = False # Reset do Estado
107
- self.log("Estado Alterado: Inventário limpo com sucesso. Mais prata acumulada.", "MERCADO")
108
-
109
- def modulo_fazenda(self):
110
- agora = time.time()
111
-
112
- # Verificação Temporal FSM
113
- if agora < self.estado["proxima_colheita"]:
114
- faltam = int((self.estado["proxima_colheita"] - agora) / 60)
115
- self.log(f"As plantas continuam em estado de crescimento (~{faltam} min restantes).", "FAZENDA")
116
- return
117
 
118
- self.log("Inspecionando os terrenos da Fazenda...", "FAZENDA")
119
- self.driver.get("https://farmrpg.com/index.php#!/farm.php")
120
- time.sleep(3)
 
 
121
 
122
- texto = self.driver.page_source.lower()
123
- if "growing" in texto or "ready in" in texto:
124
- self.log("Plantas imaturas detetadas pelo scan da página. A recalibrar temporizador...", "FAZENDA")
125
- self.estado["proxima_colheita"] = time.time() + 300
126
- return
127
 
128
- try:
129
- self.driver.find_element(By.XPATH, "//*[contains(text(), 'Harvest All')]").click()
130
- time.sleep(2)
131
- self.log("Colheita máxima (Harvest All) efetuada.", "FAZENDA")
132
- except: pass
133
-
134
- try:
135
- self.driver.find_element(By.XPATH, "//*[contains(text(), 'Plant All')]").click()
136
- self.estado["proxima_colheita"] = time.time() + 300
137
- self.log("Plantação máxima (Plant All) efetuada. Temporizador alocado para 5 min.", "FAZENDA")
138
- except:
139
- self.log("Erro ao tentar usar 'Plant All' (Conta sem a habilidade ou sem sementes).", "FAZENDA")
140
-
141
- def rodar_ciclo_inteligente(self):
142
- self.estado["ciclo_atual"] += 1
143
- print("\n" + "="*50)
144
- self.log(f"INICIANDO CICLO GLOBAL DE AUTOMAÇÃO #{self.estado['ciclo_atual']}", "SISTEMA")
145
- print("="*50)
146
-
147
- try:
148
- self.iniciar_navegador()
149
-
150
- # ORDEM ESTRATÉGICA DE PRIORIDADES
151
- self.modulo_mercado() # Prioridade 1: Esvazia lixo se estiver trancado
152
- self.modulo_exploracao() # Prioridade 2: Queima a energia
153
- self.modulo_mercado() # Prioridade 3: Vende o novo lixo ganho
154
- self.modulo_fazenda() # Prioridade 4: Gere as sementes que dão XP passivo
155
-
156
- except Exception as e:
157
- self.log(f"Falha na rede ou na execução: {str(e)[:60]}", "ERRO")
158
- finally:
159
- self.desligar_navegador()
160
-
161
- # --- INICIALIZADOR DO MOTOR ---
162
  if __name__ == "__main__":
163
  threading.Thread(target=manter_dock_viva, daemon=True).start()
164
-
165
- # Criamos o Cérebro
166
- bot_farm_rpg = FarmRPGBotProfissional(MEUS_COOKIES)
167
-
168
- time.sleep(3)
169
- while True:
170
- bot_farm_rpg.rodar_ciclo_inteligente()
171
-
172
- # Recuperação de Stamina (O bot dorme e não é detetado como abusador)
173
- espera = random.randint(45, 75)
174
- bot_farm_rpg.log(f"Modo Repouso Ativado. Aguardando {espera} segundos para recuperar energia.", "DECISÃO")
175
- time.sleep(espera)
 
6
  from seleniumbase import Driver
7
  from selenium.webdriver.common.by import By
8
  from pyvirtualdisplay import Display
9
+ from groq import Groq
10
+
11
+ # --- CONFIGURAÇÕES DE IA E SESSÃO ---
12
+ CHAVE_GROQ = "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"
13
+ cliente_ia = Groq(api_key=CHAVE_GROQ)
14
 
 
15
  MEUS_COOKIES = [
16
  {"name": "pac_ocean", "value": "A55233B0"},
17
  {"name": "HighwindFRPG", "value": "FVQCTfUiHPqufIN4zJcMPQ%3D%3D%3Cstrip%3E%24argon2id%24v%3D19%24m%3D7168%2Ct%3D4%2Cp%3D1%24bm1Ob0lmUWdSZEtHeklNVw%24L1Y8X1pEyJ5zX13VIK8oqNQcdHtwrdhvhHeseXSEhNA"},
18
  {"name": "farmrpg_token", "value": "6tgeudskm32f0rlq6oputj0j1kd5f59nkdvolsdv"}
19
  ]
20
 
21
+ # --- SISTEMA DE LOGS ---
22
+ def log(acao, status="INFO"):
23
+ agora = datetime.now().strftime("%H:%M:%S")
24
+ icone = "🧠" if status == "GROQ" else "✅" if status == "SUCESSO" else "❌" if status == "ERRO" else "👁️" if status == "VISAO" else "🚜"
25
+ print(f"[{agora}] {icone} [{status}] {acao}", flush=True)
26
+
27
+ # --- SERVIDOR WEB (Manter Hugging Face Vivo) ---
28
  class ServidorFalso(BaseHTTPRequestHandler):
29
  def do_GET(self):
30
  self.send_response(200)
31
  self.end_headers()
32
+ self.wfile.write(b"Bot Farm RPG + IA GROQ Online!")
33
  def log_message(self, format, *args): pass
34
 
35
  def manter_dock_viva():
36
  HTTPServer(('0.0.0.0', 7860), ServidorFalso).serve_forever()
37
 
38
+ # --- INFILTRAÇÃO ---
39
+ def injetar_cookies(driver):
40
+ driver.get("https://farmrpg.com/robots.txt")
41
+ time.sleep(2)
42
+ for cookie in MEUS_COOKIES:
43
+ try: driver.add_cookie({'name': cookie['name'], 'value': cookie['value'], 'domain': 'farmrpg.com'})
44
+ except: pass
 
 
 
 
 
 
 
45
 
46
+ # --- O CÉREBRO DA IA (GROQ) ---
47
+ def o_groq_decide_a_proxima_acao(texto_do_ecra):
48
+ """Envia o texto do jogo para o Llama-3 tomar a decisão"""
49
+ prompt_sistema = """
50
+ És uma IA a jogar Farm RPG. O teu objetivo é automatizar tarefas.
51
+ Analisa o texto do ecrã atual e decide a MELHOR ação.
52
+
53
+ Regras estritas:
54
+ 1. Se leres 'Inventory Full', 'You are full' ou similar, responde OBRIGATORIAMENTE: VENDER
55
+ 2. Se tiveres opções de explorar a floresta e inventário livre, responde: EXPLORAR
56
+ 3. Se houver botões de colher/plantar visíveis, responde: FAZENDA
57
+ 4. Se o servidor estiver com erro, em manutenção, ou não houver nada para fazer, responde: REPOUSO
58
+
59
+ Responde APENAS com UMA das palavras: VENDER, EXPLORAR, FAZENDA, REPOUSO.
60
+ """
61
+
62
+ try:
63
+ resposta = cliente_ia.chat.completions.create(
64
+ messages=[
65
+ {"role": "system", "content": prompt_sistema},
66
+ {"role": "user", "content": f"Texto visível no jogo: {texto_do_ecra}"}
67
+ ],
68
+ model="llama3-8b-8192",
69
+ temperature=0.1,
70
+ max_tokens=10
71
+ )
72
+ return resposta.choices[0].message.content.strip().upper()
73
+ except Exception as e:
74
+ log(f"Falha de comunicação com o Cérebro Groq: {e}", "ERRO")
75
+ return "REPOUSO"
76
+
77
+ # --- MÓDULOS DE AÇÃO (Os Músculos) ---
78
+ def modulo_mercado(driver):
79
+ log("IA ordenou: Vender tudo. Indo ao mercado...", "INFO")
80
+ driver.get("https://farmrpg.com/index.php#!/sellall.php")
81
+ time.sleep(3)
82
+ log("Inventário esvaziado. Prata guardada!", "SUCESSO")
83
 
84
+ def modulo_exploracao(driver):
85
+ log("IA ordenou: Explorar. Indo para a Floresta...", "INFO")
86
+ driver.get("https://farmrpg.com/index.php#!/area.php?id=1")
87
+ time.sleep(3)
88
+ sucessos = 0
89
+ for _ in range(12):
90
+ try:
91
+ driver.find_element(By.ID, "explorebtn").click()
92
+ sucessos += 1
93
+ time.sleep(0.5)
94
+ except: break
95
+ log(f"Stamina gasta. {sucessos} explorações efetuadas.", "SUCESSO")
96
+
97
+ def modulo_fazenda(driver):
98
+ log("IA ordenou: Cuidar da Fazenda. Verificando as terras...", "INFO")
99
+ driver.get("https://farmrpg.com/index.php#!/farm.php")
100
+ time.sleep(4)
101
+ try:
102
+ harvest = driver.find_elements(By.XPATH, "//*[contains(text(), 'Harvest All')]")
103
+ if harvest: harvest[0].click(); time.sleep(2); log("Colheu!", "SUCESSO")
104
 
105
+ plant = driver.find_elements(By.XPATH, "//*[contains(text(), 'Plant All')]")
106
+ if plant: plant[0].click(); log("Plantou!", "SUCESSO")
107
+ except:
108
+ log("Nada a fazer na fazenda no momento.", "INFO")
109
+
110
+ # --- MOTOR DO AGENTE AUTÓNOMO ---
111
+ def motor_agente_autonomo():
112
+ display = Display(visible=0, size=(1920, 1080))
113
+ display.start()
114
+ driver = None
115
+ try:
116
+ driver = Driver(uc=True, headless=False)
117
+ injetar_cookies(driver)
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
+ while True:
120
+ # 1. OBSERVAR
121
+ driver.get("https://farmrpg.com/index.php#!/index.php")
122
+ time.sleep(4)
123
+ # Extrai apenas os primeiros 1500 caracteres do corpo para não sobrecarregar a API
124
+ texto_visivel = driver.find_element(By.TAG_NAME, "body").text[:1500]
125
+ log("Leitura do ecrã concluída. A consultar IA...", "VISAO")
126
+
127
+ # 2. PENSAR
128
+ comando = o_groq_decide_a_proxima_acao(texto_visivel)
129
+ log(f"A DECISÃO DA IA FOI: {comando}", "GROQ")
130
+
131
+ # 3. AGIR
132
+ if "VENDER" in comando:
133
+ modulo_mercado(driver)
134
+ elif "EXPLORAR" in comando:
135
+ modulo_exploracao(driver)
136
+ elif "FAZENDA" in comando:
137
+ modulo_fazenda(driver)
138
+ else:
139
+ espera = random.randint(30, 45)
140
+ log(f"Comando de Repouso. A aguardar {espera} segundos...", "INFO")
141
+ time.sleep(espera)
142
 
143
+ # Pequena pausa entre ciclos para evitar sobrecarregar o jogo e a API
144
+ time.sleep(5)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
+ except Exception as e:
147
+ log(f"Erro no motor principal: {str(e)[:60]}", "ERRO")
148
+ finally:
149
+ if driver: driver.quit()
150
+ display.stop()
151
 
152
+ def iniciar_bot():
153
+ print("\n" + "="*50)
154
+ log("🚀 AGENTE IA FARM RPG (Llama-3 Groq) ONLINE!", "SUCESSO")
155
+ print("="*50 + "\n")
156
+ motor_agente_autonomo()
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  if __name__ == "__main__":
159
  threading.Thread(target=manter_dock_viva, daemon=True).start()
160
+ iniciar_bot()