feat: 🎉 init new repo
Dump of current working bot. Warning: somewhat messy code! Lints haven't been run, no tests, etc.
This commit is contained in:
+123
@@ -0,0 +1,123 @@
|
||||
// TODO reload
|
||||
const fs = require('fs');
|
||||
let cfg = {
|
||||
admin: "Applezaus",
|
||||
mods: ["Applezaus", "tanner6", "Angram42", "[WEB] Angram42", "[WEB] Applezaus"],
|
||||
stateMachines: {}
|
||||
}
|
||||
|
||||
const mineflayer = require("mineflayer");
|
||||
// const { createGetAccessor } = require('typescript');
|
||||
|
||||
const bot =
|
||||
!isNaN(parseInt(process.argv[3])) && parseInt(process.argv[3]) > 1e2 ?
|
||||
mineflayer.createBot({
|
||||
host: process.argv[2] || process.env.MINECRAFT_HOST || 'localhost', // Change this to the ip you want.
|
||||
port: parseInt(process.argv[3]) || process.env.MINECRAFT_PORT // || 58471,
|
||||
})
|
||||
:
|
||||
mineflayer.createBot({
|
||||
host: process.argv[2] || process.env.MINECRAFT_HOST || 'localhost', // Change this to the ip you want.
|
||||
username: process.argv[3] || process.env.MINECRAFT_USER,
|
||||
password: process.argv[4] || process.env.MINECRAFT_PASS,
|
||||
// port: process.argv[5] || process.env.MINECRAFT_PORT || 58471,
|
||||
})
|
||||
|
||||
|
||||
let plugins = {}
|
||||
|
||||
function loadplugin(pluginname, pluginpath) {
|
||||
try {
|
||||
plugins[pluginname] = require(pluginpath)
|
||||
plugins[pluginname]?.load(cfg)
|
||||
} catch (error) {
|
||||
if (error.code == 'MODULE_NOT_FOUND') {
|
||||
console.warn('plugin not used:', pluginpath)
|
||||
} else {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function unloadplugin(pluginname, pluginpath) {
|
||||
pluginpath = pluginpath ? pluginpath : './plugins/' + pluginname
|
||||
const plugin = require.resolve(pluginpath)
|
||||
try {
|
||||
if (plugin && require.cache[plugin]) {
|
||||
require.cache[plugin].exports?.unload()
|
||||
delete plugins[pluginname]
|
||||
delete require.cache[plugin]
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
|
||||
reloadplugin = (event, filename, pluginpath) => {
|
||||
if (!/\.js$/.test(filename)) { return }
|
||||
if (!cfg.fsTimeout) {
|
||||
console.info(event, filename)
|
||||
pluginpath = (pluginpath ? pluginpath : './plugins/') + filename
|
||||
const check = Object.keys(cfg.plugins)
|
||||
console.info(`reload file:`, pluginpath)
|
||||
const plugin = require.resolve(pluginpath)
|
||||
if (plugin && require.cache[plugin]) {
|
||||
// console.debug(Object.keys(cfg.plugins))
|
||||
unloadplugin(filename.split(".js")[0], pluginpath)
|
||||
console.assert(Object.keys(cfg.plugins).length == check.length - 1, "plugin not removed, potential memory leak")
|
||||
}
|
||||
loadplugin(filename.split(".js")[0], pluginpath)
|
||||
if (Object.keys(cfg.plugins).length != check.length) {
|
||||
// If left < right :
|
||||
// - new plugin that's not registered in cfg.plugins, so added
|
||||
// - rename, so old wasn't removed
|
||||
// If left > right :
|
||||
// - error in file (syntax, missing load()), so was not reloaded
|
||||
console.warn("plugin count mismatch", check.length, Object.keys(cfg.plugins).length, Object.keys(cfg.plugins))
|
||||
}
|
||||
cfg.fsTimeout = setTimeout(function () { cfg.fsTimeout = null }, 2000) // give 2 seconds for multiple events
|
||||
}
|
||||
// console.log('file.js %s event', event)
|
||||
}
|
||||
|
||||
fs.watch('./lib/plugins', reloadplugin)
|
||||
|
||||
cfg.bot = bot
|
||||
cfg.botAddress = new RegExp(`^${bot.username} (!.+)`)
|
||||
cfg.quiet = true
|
||||
|
||||
|
||||
// == actually do stuff
|
||||
|
||||
bot.once("spawn", () => {
|
||||
plugins = {
|
||||
command: require('./plugins/command'),
|
||||
sleeper: require('./plugins/sleeper'),
|
||||
armor: require('./plugins/armor'),
|
||||
// mover: require('./plugins/mover'),
|
||||
guard: require('./plugins/guard'),
|
||||
inventory: require('./plugins/inventory'),
|
||||
// eater: require('./plugins/eater'),
|
||||
finder: require('./plugins/finder'),
|
||||
miner: require('./plugins/miner'),
|
||||
// statemachine: require('./plugins/statemachine'),
|
||||
}
|
||||
|
||||
cfg.plugins = plugins
|
||||
|
||||
for (const plugin of Object.values(plugins)) {
|
||||
try {
|
||||
plugin.load(cfg)
|
||||
} catch (error) {
|
||||
console.warn(error)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
bot.on("death", () => {
|
||||
bot.pathfinder && bot.pathfinder.setGoal(null)
|
||||
// plugins.guard.unload()
|
||||
})
|
||||
// bot.on("respawn", () => {
|
||||
// // setTimeout(plugins.guard.load, 2000)
|
||||
// })
|
||||
Reference in New Issue
Block a user