Files
mc-bot-town-2/nodejs/controller/mc-bot.js
T
2026-02-22 20:27:09 -05:00

78 lines
2.4 KiB
JavaScript

'use strict';
// Require log-web early to capture all console output from other modules
const LogWeb = require('./log-web');
const {sleep} = require('../utils');
const conf = require('../conf');
const {CJbot} = require('../model/minecraft');
const commands = require('./commands');
CJbot.pluginAdd(require('./swing'));
CJbot.pluginAdd(require('./craft'));
CJbot.pluginAdd(require('./tp'));
CJbot.pluginAdd(require('./ai'));
CJbot.pluginAdd(require('./guardianFarm'));
CJbot.pluginAdd(require('./goldFarm'));
CJbot.pluginAdd(require('./storage'));
CJbot.pluginAdd(require('./auto-eat'));
for(let name in conf.mc.bots){
if(CJbot.bots[name]) continue;
let bot = new CJbot({name, host: conf.mc.host, ...conf.mc.bots[name]});
CJbot.bots[name] = bot;
for(let command of conf.mc.bots[name].commands || ['default']){
for(let [name, toAdd] of Object.entries(commands[command])){
bot.addCommand(name, toAdd)
}
}
}
// Initialize storage database early so web read-only routes work even with bots offline
const Database = require('./storage/database');
if (!Database.db) {
Database.initialize(conf.storage.dbPath || './storage/storage.db')
.then(async () => {
console.log('Early DB initialization complete');
// Seed invite sites from config after DB is ready
if (conf.invite && conf.invite.seedSites) {
await Database.seedInviteSites(conf.invite.seedSites);
console.log('Invite sites seeded');
}
})
.catch(err => console.error('Failed to initialize storage DB:', err));
}
// Start app-level web server (always available, even before bots connect)
const webServer = require('./web-server');
const ActivityWeb = require('./activity-web');
const ChatWeb = require('./chat-web');
const InvitePlugin = require('./invite');
webServer.queuePlugin(ChatWeb);
webServer.queuePlugin(ActivityWeb);
webServer.queuePlugin(LogWeb);
webServer.queuePlugin(InvitePlugin);
webServer.start().catch(err => console.error('Failed to start web server:', err));
(async ()=>{try{
for(let name in CJbot.bots){
let bot = CJbot.bots[name];
if(bot.autoConnect){
console.log('Trying to connect', name)
console.log('Status for', name, await bot.connect());
// bot.bot.setControlState('jump', true);
// await sleep(5000);
// bot.bot.setControlState('jump', false);
await sleep(30000);
}
}
}catch(e){
console.log('!!!!!!!! error:', e)
}})()
// module.exports = {bot: ez, henry, owen, linda, jimin, nova, ez};