gratian-manager
Version:
Sistema de gerenciamento e hospedagem de múltiplos bots Discord.
109 lines (92 loc) • 3.3 kB
JavaScript
const http = require("http");
const fs = require("fs-extra"); // troca para fs-extra para facilitar cópia
const unzipper = require("unzipper");
const path = require("path");
const { spawn } = require("child_process");
const args = process.argv.slice(2);
const LOCAL_VERSION_PATH = path.join(__dirname, "version.json");
const LOCAL_VERSION = JSON.parse(fs.readFileSync(LOCAL_VERSION_PATH)).version;
const UPDATE_URL = "http://gra-01.gratian.pro:3039/updates/version.json";
async function initBots() {
const userBotsPath = path.join(process.cwd(), "bots");
try {
if (await fs.pathExists(userBotsPath)) {
console.log("A pasta 'bots/' já existe na raiz do seu projeto.");
process.exit(0);
}
await fs.mkdir(userBotsPath); // Cria a pasta vazia
console.log("✅ Pasta 'bots/' criada com sucesso na raiz do seu projeto!");
process.exit(0);
} catch (err) {
console.error("❌ Erro ao criar a pasta 'bots/':", err);
process.exit(1);
}
}
function baixarAtualizacao(zipUrl) {
const zipPath = path.join(__dirname, "atualizacao.zip");
console.log("⬇️ Baixando atualização...");
const file = fs.createWriteStream(zipPath);
http.get(zipUrl, (res) => {
res.pipe(file);
file.on("finish", () => {
file.close(() => {
console.log("📦 Atualização baixada. Extraindo...");
fs.createReadStream(zipPath)
.pipe(unzipper.Extract({ path: __dirname }))
.on("close", () => {
fs.unlinkSync(zipPath);
console.log("✅ Atualização concluída. Reiniciando...");
spawn("node", [path.basename(__filename)], {
cwd: __dirname,
stdio: "inherit"
});
process.exit();
});
});
});
}).on("error", err => {
console.error("❌ Erro ao baixar atualização:", err.message);
});
}
function checarAtualizacao() {
http.get(UPDATE_URL, (res) => {
let dados = "";
res.on("data", chunk => dados += chunk);
res.on("end", () => {
try {
const remoto = JSON.parse(dados);
if (remoto.version !== LOCAL_VERSION) {
console.log(`🔄 Atualização encontrada: ${remoto.version}`);
baixarAtualizacao(remoto.zip);
} else {
console.log("✅ Nenhuma atualização disponível.");
iniciarSistema();
}
} catch (err) {
console.error("❌ Erro ao analisar versão remota:", err.message);
}
});
}).on("error", err => {
console.error("❌ Erro ao checar atualização:", err.message);
iniciarSistema();
});
}
function iniciarSistema() {
console.log("🚀 Iniciando o sistema...");
require("./G-Manager/mngr.js"); // ou outro script principal
}
// Lógica para comandos CLI
if (args.length > 0 && args[0].toLowerCase() === "init") {
// Executa o comando de criação da pasta bots/
initBots();
} else {
// Senão, roda o processo normal de atualização e inicialização
checarAtualizacao();
}
// Mantém o processo ativo até Ctrl+C
process.stdin.resume();
process.on('SIGINT', () => {
console.log('\nEncerrando o sistema...');
process.exit(0);
});