| | const cluster = require('cluster'); |
| | const { spawn } = require('child_process'); |
| | const path = require('path'); |
| | const fs = require('fs'); |
| | const os = require('os'); |
| | const express = require('express'); |
| | const app = express(); |
| |
|
| | |
| | const PORT = 7860; |
| |
|
| | app.get('/', (req, res) => { |
| | res.setHeader('Content-Type', 'application/json'); |
| | const data = { |
| | status: 'true', |
| | message: 'Bot Successfully Activated!', |
| | author: 'rizki' |
| | }; |
| | const result = { |
| | response: data |
| | }; |
| | res.send(JSON.stringify(result, null, 2)); |
| | }); |
| |
|
| | |
| | app.listen(PORT, () => { |
| | console.log('\x1b[33m%s\x1b[0m', `π Server berjalan di port ${PORT}`); |
| | }); |
| |
|
| | let isRunning = false; |
| |
|
| | function start(file) { |
| | if (isRunning) return; |
| | isRunning = true; |
| |
|
| | const args = [path.join(__dirname, file), ...process.argv.slice(2)]; |
| | const p = spawn(process.argv[0], args, { |
| | stdio: ["inherit", "inherit", "inherit", "ipc"], |
| | }); |
| |
|
| | p.on("message", (data) => { |
| | console.log('\x1b[36m%s\x1b[0m', `π’ RECEIVED ${data}`); |
| | switch (data) { |
| | case "reset": |
| | p.kill(); |
| | isRunning = false; |
| | start.apply(this, arguments); |
| | break; |
| | case "uptime": |
| | p.send(process.uptime()); |
| | break; |
| | } |
| | }); |
| |
|
| | p.on("exit", (code) => { |
| | isRunning = false; |
| | console.error('\x1b[31m%s\x1b[0m', `Exited with code: ${code}`); |
| | start('main.js'); |
| |
|
| | if (code === 0) return; |
| |
|
| | fs.watchFile(args[0], () => { |
| | fs.unwatchFile(args[0]); |
| | console.error('\x1b[31m%s\x1b[0m', `File ${args[0]} has been modified. Script will restart...`); |
| | start("main.js"); |
| | }); |
| | }); |
| |
|
| | p.on("error", (err) => { |
| | console.error('\x1b[31m%s\x1b[0m', `Error: ${err}`); |
| | p.kill(); |
| | isRunning = false; |
| | console.error('\x1b[31m%s\x1b[0m', `Error occurred. Script will restart...`); |
| | start("main.js"); |
| | }); |
| |
|
| | const pluginsFolder = path.join(__dirname, "plugins"); |
| |
|
| | fs.readdir(pluginsFolder, (err, files) => { |
| | if (err) { |
| | console.error('\x1b[31m%s\x1b[0m', `Error reading plugins folder: ${err}`); |
| | return; |
| | } |
| | console.log('\x1b[33m%s\x1b[0m', `π‘ Found ${files.length} plugins in folder ${pluginsFolder}`); |
| | try { |
| | require.resolve('@adiwajshing/baileys'); |
| | console.log('\x1b[33m%s\x1b[0m', `π‘ Baileys library version ${require('@adiwajshing/baileys/package.json').version} is installed`); |
| | } catch (e) { |
| | console.error('\x1b[31m%s\x1b[0m', `β Baileys library is not installed`); |
| | } |
| | }); |
| |
|
| | console.log(`π₯οΈ \x1b[33m${os.type()}\x1b[0m, \x1b[33m${os.release()}\x1b[0m - \x1b[33m${os.arch()}\x1b[0m`); |
| | const ramInGB = os.totalmem() / (1024 * 1024 * 1024); |
| | console.log(`πΎ \x1b[33mTotal RAM: ${ramInGB.toFixed(2)} GB\x1b[0m`); |
| | const freeRamInGB = os.freemem() / (1024 * 1024 * 1024); |
| | console.log(`π½ \x1b[33mFree RAM: ${freeRamInGB.toFixed(2)} GB\x1b[0m`); |
| | console.log('\x1b[33m%s\x1b[0m', `π Script by BOTCAHX`); |
| |
|
| | setInterval(() => {}, 1000); |
| | } |
| |
|
| | start("main.js"); |
| |
|
| | const tmpDir = './tmp'; |
| | if (!fs.existsSync(tmpDir)) { |
| | fs.mkdirSync(tmpDir); |
| | console.log('\x1b[33m%s\x1b[0m', `π Created directory ${tmpDir}`); |
| | } |
| |
|
| | process.on('unhandledRejection', (reason) => { |
| | console.error('\x1b[31m%s\x1b[0m', `Unhandled promise rejection: ${reason}`); |
| | console.error('\x1b[31m%s\x1b[0m', 'Unhandled promise rejection. Script will restart...'); |
| | start('main.js'); |
| | }); |
| |
|
| | process.on('exit', (code) => { |
| | console.error(`Exited with code: ${code}`); |
| | console.error('Script will restart...'); |
| | start('main.js'); |
| | }); |