import express from "express"; import { createServer } from "http"; import { ModuleRpcServer } from "rpc_ts/lib/server"; import { ModuleRpcProtocolServer } from "rpc_ts/lib/protocol/server"; import { NoctBotService } from "@shared/rpc/backend"; import { logger } from "./logging"; import { client } from "./client"; import { tryDo } from "@shared/common/async_utils"; const PORT = +(process.env.RPC_PORT ?? "8181"); const app = express(); const handler: ModuleRpcServer.ServiceHandlerFor = { async getPing({ ping }): Promise<{ text: string }> { return { text: `pong: ${ping}` }; }, async userInServer({ userId }): Promise<{ exists: boolean }> { for (const g of client.bot.guilds.cache.values()) { const res = await tryDo(g.members.fetch(userId)); if (res.ok) { return { exists: true }; } } return { exists: false }; } }; app.use(ModuleRpcProtocolServer.registerRpcRoutes(NoctBotService, handler)); export function startRpcServer(): void { logger.info(`Starting RPC at *:${PORT}`); createServer(app).listen(PORT); }