File size: 2,006 Bytes
d6986d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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}`);
            }
        })
    }
}