add i18n system and improved plugin API with state management
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
import os from "os";
|
||||
|
||||
/**
|
||||
* Detecta se o processo está rodando dentro do Termux.
|
||||
* Detect if running inside Termux.
|
||||
*/
|
||||
export const isTermux =
|
||||
(os.platform() === "linux" || os.platform() === "android") &&
|
||||
process.env.PREFIX?.startsWith("/data/data/com.termux");
|
||||
|
||||
/**
|
||||
* Retorna a config de Puppeteer adequada ao ambiente.
|
||||
* Return Puppeteer config suitable for the environment.
|
||||
* @returns {import("puppeteer").LaunchOptions}
|
||||
*/
|
||||
export function resolvePuppeteerConfig() {
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
import qrcode from "qrcode-terminal";
|
||||
import path from "path";
|
||||
import { logger } from "../logger/logger.js";
|
||||
import { t } from "../i18n/index.js";
|
||||
import { isTermux } from "./environment.js";
|
||||
|
||||
const QR_PATH = path.resolve("qr.png");
|
||||
|
||||
/**
|
||||
* Exibe ou salva o QR Code conforme o ambiente.
|
||||
* @param {string} qr — string bruta do evento "qr"
|
||||
* Display or save QR Code based on environment.
|
||||
* @param {string} qr — raw string from "qr" event
|
||||
*/
|
||||
export async function handleQR(qr) {
|
||||
if (isTermux) {
|
||||
try {
|
||||
await QRCode.toFile(QR_PATH, qr, { width: 400 });
|
||||
logger.info(`QR Code salvo em: ${QR_PATH}`);
|
||||
logger.info(`Abra com: termux-open qr.png`);
|
||||
logger.info(t("system.qrSaved", { path: QR_PATH }));
|
||||
logger.info(t("system.qrOpen"));
|
||||
} catch (err) {
|
||||
logger.error("Falha ao salvar QR Code:", err.message);
|
||||
logger.error(t("system.qrSaveFailed"), err.message);
|
||||
}
|
||||
} else {
|
||||
logger.info("Escaneie o QR Code abaixo:");
|
||||
logger.info(t("system.qrScan"));
|
||||
qrcode.generate(qr, { small: true });
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,20 @@
|
||||
import pkg from "whatsapp-web.js";
|
||||
import { CLIENT_ID } from "../config.js";
|
||||
import { logger } from "../logger/logger.js";
|
||||
import { t } from "../i18n/index.js";
|
||||
import { isTermux, resolvePuppeteerConfig } from "./environment.js";
|
||||
import { handleQR } from "./qrHandler.js";
|
||||
import { printBanner } from "./banner.js";
|
||||
|
||||
export const { Client, LocalAuth, MessageMedia } = pkg;
|
||||
|
||||
// ── Ambiente ─────────────────────────────────────────────────
|
||||
// ── Environment ───────────────────────────────────────────────
|
||||
logger.info(isTermux
|
||||
? "Ambiente: Termux — usando Chromium do sistema"
|
||||
: `Ambiente: ${process.platform} — usando Puppeteer padrão`
|
||||
? t("system.environmentTermux")
|
||||
: t("system.environment", { platform: process.platform, puppeteer: "system Puppeteer" })
|
||||
);
|
||||
|
||||
// ── Instância ─────────────────────────────────────────────────
|
||||
// ── Instance ──────────────────────────────────────────────────
|
||||
export const client = new Client({
|
||||
authStrategy: new LocalAuth({ clientId: CLIENT_ID }),
|
||||
puppeteer: {
|
||||
@@ -27,20 +28,20 @@ export const client = new Client({
|
||||
},
|
||||
});
|
||||
|
||||
// ── Eventos ───────────────────────────────────────────────────
|
||||
// ── Events ────────────────────────────────────────────────────
|
||||
client.on("qr", handleQR);
|
||||
|
||||
client.on("ready", () => {
|
||||
printBanner();
|
||||
logger.success("WhatsApp conectado e pronto!");
|
||||
logger.info(`Client ID: ${CLIENT_ID}`);
|
||||
logger.success(t("system.connected"));
|
||||
logger.info(t("system.clientId", { id: CLIENT_ID }));
|
||||
});
|
||||
|
||||
client.on("disconnected", (reason) => {
|
||||
logger.warn(`Desconectado — motivo: ${reason}`);
|
||||
logger.info("Reconectando em 5s...");
|
||||
logger.warn(t("system.disconnected", { reason }));
|
||||
logger.info(t("system.reconnecting", { seconds: 5 }));
|
||||
setTimeout(() => {
|
||||
logger.info("Reinicializando cliente...");
|
||||
logger.info(t("system.reinitializing"));
|
||||
client.initialize();
|
||||
}, 5000);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user