feat: add Cytrus to bot usernames and implement dynamic startup delay
This commit is contained in:
parent
d28a55cfcd
commit
ad7ee541c5
@ -3,7 +3,7 @@ const fs = require("fs");
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|
||||||
// Add all bot usernames here.
|
// Add all bot usernames here.
|
||||||
const USERNAMES = ["ZareMate", "Tomek"];
|
const USERNAMES = ["ZareMate", "Tomek", "Cytrus"];
|
||||||
|
|
||||||
const AFK_SCRIPT = path.join(__dirname, "afk.js");
|
const AFK_SCRIPT = path.join(__dirname, "afk.js");
|
||||||
const OUTPUT_MODE = (
|
const OUTPUT_MODE = (
|
||||||
@ -12,6 +12,8 @@ const OUTPUT_MODE = (
|
|||||||
const SPLIT_LOGS_ENABLED = process.env.PARENT_SPLIT_LOGS === "1";
|
const SPLIT_LOGS_ENABLED = process.env.PARENT_SPLIT_LOGS === "1";
|
||||||
const RESTART_MIN_MS = 2 * 60 * 1000;
|
const RESTART_MIN_MS = 2 * 60 * 1000;
|
||||||
const RESTART_MAX_MS = 5 * 60 * 1000;
|
const RESTART_MAX_MS = 5 * 60 * 1000;
|
||||||
|
const STARTUP_GAP_MIN_MS = 30 * 1000;
|
||||||
|
const STARTUP_GAP_MAX_MS = 60 * 1000;
|
||||||
|
|
||||||
const ALREADY_ONLINE_TEXT = "You are already online, try restarting your game.";
|
const ALREADY_ONLINE_TEXT = "You are already online, try restarting your game.";
|
||||||
const TIMEOUT_REGEX = /timeout|timed out|ETIMEDOUT|ECONNRESET|socket hang up/i;
|
const TIMEOUT_REGEX = /timeout|timed out|ETIMEDOUT|ECONNRESET|socket hang up/i;
|
||||||
@ -41,6 +43,13 @@ function randomRestartDelayMs() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function randomStartupGapMs() {
|
||||||
|
return (
|
||||||
|
STARTUP_GAP_MIN_MS +
|
||||||
|
Math.floor(Math.random() * (STARTUP_GAP_MAX_MS - STARTUP_GAP_MIN_MS + 1))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function shouldRestartFromState(state) {
|
function shouldRestartFromState(state) {
|
||||||
if (state.sawKick) return true;
|
if (state.sawKick) return true;
|
||||||
if (state.sawTimeout) return true;
|
if (state.sawTimeout) return true;
|
||||||
@ -157,19 +166,37 @@ const botStates = USERNAMES.map((username) => ({
|
|||||||
username,
|
username,
|
||||||
child: null,
|
child: null,
|
||||||
restartTimer: null,
|
restartTimer: null,
|
||||||
|
startupTimer: null,
|
||||||
sawKick: false,
|
sawKick: false,
|
||||||
sawTimeout: false,
|
sawTimeout: false,
|
||||||
sawAlreadyOnline: false,
|
sawAlreadyOnline: false,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
let startupOffset = 0;
|
||||||
for (const state of botStates) {
|
for (const state of botStates) {
|
||||||
|
const delay = startupOffset;
|
||||||
|
state.startupTimer = setTimeout(() => {
|
||||||
|
state.startupTimer = null;
|
||||||
|
if (isShuttingDown) return;
|
||||||
startBot(state);
|
startBot(state);
|
||||||
|
}, delay);
|
||||||
|
|
||||||
|
if (delay > 0) {
|
||||||
|
const seconds = Math.round(delay / 1000);
|
||||||
|
console.log(`[parent] startup delay for ${state.username}: ${seconds}s`);
|
||||||
|
}
|
||||||
|
|
||||||
|
startupOffset += randomStartupGapMs();
|
||||||
}
|
}
|
||||||
|
|
||||||
function shutdownAll() {
|
function shutdownAll() {
|
||||||
isShuttingDown = true;
|
isShuttingDown = true;
|
||||||
console.log("[parent] shutdown requested");
|
console.log("[parent] shutdown requested");
|
||||||
for (const state of botStates) {
|
for (const state of botStates) {
|
||||||
|
if (state.startupTimer) {
|
||||||
|
clearTimeout(state.startupTimer);
|
||||||
|
state.startupTimer = null;
|
||||||
|
}
|
||||||
if (state.restartTimer) {
|
if (state.restartTimer) {
|
||||||
clearTimeout(state.restartTimer);
|
clearTimeout(state.restartTimer);
|
||||||
state.restartTimer = null;
|
state.restartTimer = null;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user