NSMP-Server / src /bot /bot.ts
Franek-Le's picture
Initial commit
d6986d3
Raw
History Blame Contribute Delete
2.01 kB
import mineflayer, { BotOptions, Bot as MineflayerBot } from "mineflayer";
import { Config } from "../config/config";
import { Logger } from "../logger/logger";
export class Bot {
private bot: MineflayerBot | undefined = undefined;
private readonly botArgs: BotOptions;
private readonly config: Config;
private readonly logger: Logger;
constructor(config: Config, logger: Logger) {
this.config = config;
this.logger = logger;
this.botArgs = {
username: "AFKBot",
auth: "offline",
version: this.config.get<string>("minecraft_version"),
chatLengthLimit: 512,
host: this.config.get<string>("minecraft_host"),
port: this.config.get<number>("minecraft_port"),
}
}
public connect() {
this.initBot();
}
private initBot() {
this.bot = mineflayer.createBot(this.botArgs);
this.bot.on("login", () => {
this.logger.info(`[Minecraft Bot]: Connected to: ${this.botArgs.host}:${this.botArgs.port}`);
})
this.bot.on("end", () => {
this.logger.info("[Minecraft Bot]: Disconnected.")
this.logger.info("[Minecraft Bot]: Reconnecting...")
setTimeout(this.initBot, 5000);
})
this.bot.on("kicked", (reason: string, _loggedIn: boolean) => {
this.logger.warn(`[Minecraft Bot]: Kicked for ${reason}`);
this.logger.info("[Minecraft Bot]: Reconnecting...")
setTimeout(this.initBot, 5000);
})
this.bot.on("error", (error: unknown) => {
if (typeof error === "object" && error !== null && "code" in error && (error as { code: string }).code === "ECONNREFUSED") {
this.logger.error(`[Minecraft Bot]: Failed to connect to: ${this.botArgs.host}:${this.botArgs.port}`);
} else {
this.logger.error(`[Minecraft Bot]: Unhandled error: ${error}`);
}
})
}
}