91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.chrome.service import Service
|
|
from selenium.webdriver.chrome.options import Options
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
from selenium.webdriver.common.keys import Keys
|
|
from webdriver_manager.chrome import ChromeDriverManager
|
|
import time
|
|
import pyperclip
|
|
|
|
GRUPO = "notes"
|
|
BOT_PREFIX = "🤖 *BOT:* "
|
|
PROFILE_DIR = "/home/syntax/whatsapp-profile"
|
|
CHECK_INTERVAL = 0.5
|
|
|
|
def iniciar_driver():
|
|
print("[DRIVER] Iniciando Chrome...")
|
|
opts = Options()
|
|
opts.add_argument(f"--user-data-dir={PROFILE_DIR}")
|
|
opts.add_argument("--profile-directory=Default")
|
|
opts.add_argument("--no-sandbox")
|
|
opts.add_argument("--disable-dev-shm-usage")
|
|
opts.add_argument("--disable-extensions")
|
|
opts.add_argument("--disable-gpu")
|
|
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)
|
|
driver.get("https://web.whatsapp.com")
|
|
wait = WebDriverWait(driver, 120)
|
|
print("[DRIVER] Aguardando QR Code ou login...")
|
|
wait.until(EC.presence_of_element_located((By.ID, "pane-side")))
|
|
print("[DRIVER] WhatsApp Web carregado.")
|
|
return driver, wait
|
|
|
|
def abrir_grupo(driver, wait):
|
|
print(f"[GRUPO] Procurando '{GRUPO}'...")
|
|
grupo_box = wait.until(EC.presence_of_element_located((By.XPATH, f'//span[@title="{GRUPO}"]')))
|
|
grupo_box.click()
|
|
print(f"[GRUPO] Aberto.")
|
|
|
|
def pegar_ultima_mensagem(driver):
|
|
msgs = driver.find_elements(By.CSS_SELECTOR, "[data-testid='selectable-text'] span")
|
|
if not msgs:
|
|
return None
|
|
return msgs[-1].text
|
|
|
|
def enviar_mensagem(driver, wait, texto):
|
|
print(f"[ENVIO] Enviando: '{texto}'")
|
|
caixa = wait.until(EC.element_to_be_clickable((
|
|
By.CSS_SELECTOR, "footer div[contenteditable='true'][role='textbox']"
|
|
)))
|
|
caixa.click()
|
|
|
|
pyperclip.copy(texto)
|
|
caixa.send_keys(Keys.CONTROL, 'v')
|
|
|
|
time.sleep(0.3)
|
|
caixa.send_keys(Keys.ENTER)
|
|
print("[ENVIO] Mensagem enviada.")
|
|
|
|
def bot_msg(texto):
|
|
return f"{BOT_PREFIX}{texto}"
|
|
|
|
def processar_comando(texto):
|
|
if texto == "!bot ping":
|
|
return bot_msg("pong 🏓")
|
|
return None
|
|
|
|
# -----------------------------
|
|
driver, wait = iniciar_driver()
|
|
abrir_grupo(driver, wait)
|
|
ultima_mensagem = None
|
|
|
|
|
|
while True:
|
|
try:
|
|
texto = pegar_ultima_mensagem(driver)
|
|
if not texto or texto == ultima_mensagem:
|
|
time.sleep(CHECK_INTERVAL)
|
|
continue
|
|
|
|
print(f"[MSG] Nova mensagem: '{texto}'")
|
|
ultima_mensagem = texto
|
|
time.sleep(CHECK_INTERVAL)
|
|
|
|
resposta = processar_comando(texto)
|
|
if resposta:
|
|
enviar_mensagem(driver, wait, resposta)
|
|
|
|
except Exception as e:
|
|
print(f"[ERRO] {type(e).__name__}: {e}")
|
|
time.sleep(1) |