| 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'); |
| }); |