Botpack / index.js
Jonell01's picture
Update index.js
7d117bc verified
const { spawn } = require("child_process");
const express = require("express");
const fs = require("fs");
const path = require("path");
const WebSocket = require("ws");
const app = express();
const port = 7860;
const appstatePath = "appstate.json";
const passcodePath = "pass.json";
let childProcess;
const clients = new Set();
const automaticRestart = true;
app.use(express.static("public"));
app.use(express.json());
app.get("/dashboard", (req, res) => {
res.sendFile(path.join(__dirname, "public", "dashboard.html"));
});
app.post("/update-appstate", (req, res) => {
const { passcode, jsonData } = req.body;
if (!isValidPasscode(passcode)) {
return res.status(401).send("Wrong passcode");
}
fs.writeFile(appstatePath, JSON.stringify(jsonData, null, 2), (err) => {
if (err) {
return res.status(500).send("Failed to update appstate.json");
}
restartBot();
res.send("Successfully restarted.");
});
});
app.get("/restart", (req, res) => {
const passcode = req.query.passcode;
if (!isValidPasscode(passcode)) {
return res.status(401).send("Wrong passcode");
}
restartBot();
res.send("Successfully restarted.");
});
app.post("/execute-command", (req, res) => {
const { passcode, command } = req.body;
if (!isValidPasscode(passcode)) {
return res.status(401).send("Wrong passcode");
}
if (!command) {
return res.status(400).send("Command is required.");
}
const execProcess = spawn(command, { shell: true, stdio: 'pipe' });
let output = '';
execProcess.stdout.on('data', (data) => {
output += data.toString();
});
execProcess.stderr.on('data', (data) => {
output += data.toString();
});
execProcess.on('close', (code) => {
if (code === 0) {
res.send(`Command executed successfully: ${output}`);
} else {
res.status(500).send(`Command execution failed with exit code ${code}: ${output}`);
}
});
});
app.get("/ping", (req, res) => {
res.json({ ping: Math.floor(Math.random() * 100) + 10 });
});
function restartBot() {
if (childProcess) {
childProcess.kill();
}
childProcess = spawn("node", ["--trace-warnings", "--async-stack-traces", "main.js"], {
cwd: __dirname,
stdio: "inherit",
shell: true
});
childProcess.on("close", (codeExit) => {
console.log(`Bot process exited with code: ${codeExit}`);
if (automaticRestart && (codeExit === 0 || codeExit === 1)) {
console.log("Restarting bot...");
restartBot();
}
});
}
function isValidPasscode(inputPasscode) {
try {
const passData = JSON.parse(fs.readFileSync(passcodePath, "utf8"));
return inputPasscode === passData.passcode;
} catch {
return false;
}
}
const server = app.listen(port, () => {
console.log(`API running at http://localhost:${port}`);
restartBot();
});
const wss = new WebSocket.Server({ server });
wss.on("connection", (ws) => {
clients.add(ws);
ws.on("close", () => {
clients.delete(ws);
});
});