diff --git a/bun.lockb b/bun.lockb index 3bbb7e0..4ece5c0 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index d0b6738..a4a00dd 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,26 @@ { - "name": "fishing-api", - "module": "src/api/index.ts", - "type": "module", - "scripts": { - "start": "bun .", - "start-bot": "bun src/mpp/index.ts" - }, - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "@prisma/client": "^5.9.1", - "@trpc/client": "next", - "@trpc/server": "next", - "mpp-client-net": "^1.1.3", - "prisma": "^5.9.1", - "trpc-bun-adapter": "^1.1.0", - "yaml": "^2.3.4", - "zod": "^3.22.4" - } + "name": "fishing-api", + "module": "src/api/index.ts", + "type": "module", + "scripts": { + "start": "bun .", + "start-bot": "bun src/mpp/index.ts" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@prisma/client": "^5.9.1", + "@trpc/client": "next", + "@trpc/server": "next", + "cli-markdown": "^3.2.2", + "mpp-client-net": "^1.1.3", + "prisma": "^5.9.1", + "trpc-bun-adapter": "^1.1.0", + "yaml": "^2.3.4", + "zod": "^3.22.4" + } } diff --git a/src/cli/index.ts b/src/cli/index.ts new file mode 100644 index 0000000..8019018 --- /dev/null +++ b/src/cli/index.ts @@ -0,0 +1,67 @@ +import { Logger } from "@util/Logger"; +import { createInterface, type ReadLine } from "readline"; +import { EventEmitter } from "events"; +import trpc from "@util/api/trpc"; + +// no typedefs :/ +const cliMd = require("cli-markdown").default; + +const logger = new Logger("CLI"); +const b = new EventEmitter(); + +const rl = createInterface({ + input: process.stdin, + output: process.stdout +}); + +(globalThis as unknown as any).rl = rl; +rl.setPrompt("> "); +rl.prompt(); + +rl.on("line", async line => { + if (line == "stop" || line == "exit") process.exit(); + rl.prompt(); + + const msg = { + a: line, + p: { + _id: "stdin", + name: "CLI", + color: "#abe3d6" + } + }; + + let prefixes: string[]; + + try { + prefixes = await trpc.prefixes.query(); + } catch (err) { + logger.error(err); + logger.warn("Unable to contact server"); + return; + } + + let usedPrefix: string | undefined = prefixes.find(pr => + msg.a.startsWith(pr) + ); + + if (!usedPrefix) return; + + const args = msg.a.split(" "); + + const command = await trpc.command.query({ + args: args.slice(1, args.length), + command: args[0].substring(usedPrefix.length), + prefix: usedPrefix, + user: { + id: msg.p._id, + name: msg.p.name, + color: msg.p.color + } + }); + + if (!command) return; + if (command.response) { + logger.info(cliMd(command.response)); + } +}); diff --git a/src/mpp/bot/Bot.ts b/src/mpp/bot/Bot.ts index 9092921..f86f9f8 100644 --- a/src/mpp/bot/Bot.ts +++ b/src/mpp/bot/Bot.ts @@ -1,6 +1,6 @@ import Client from "mpp-client-net"; import { Logger } from "@util/Logger"; -import trpc from "@client/api/trpc"; +import trpc from "@util/api/trpc"; import { EventEmitter } from "events"; export interface MPPNetBotConfig { diff --git a/src/mpp/api/trpc.ts b/src/util/api/trpc.ts similarity index 100% rename from src/mpp/api/trpc.ts rename to src/util/api/trpc.ts