Spaces:
Sleeping
Sleeping
| 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}`); | |
| } | |
| }) | |
| } | |
| } |