mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 21:12:49 +08:00
feat: add web backend — Express REST API, WebSocket, full wiring in entry point
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
e5d5185f14
commit
0b54809113
7 files changed
+633
No files matched your search
@@ -3,6 +3,12 @@ import { fileURLToPath } from "node:url";
|
||||
import { loadConfig, saveConfig } from "./data/config.js";
|
||||
import { createDatabase } from "./data/database.js";
|
||||
import { createLogger } from "./logger.js";
|
||||
import { createApiServerManager } from "./music/api-server.js";
|
||||
import { NeteaseProvider } from "./music/netease.js";
|
||||
import { QQMusicProvider } from "./music/qq.js";
|
||||
import { createCookieStore } from "./music/auth.js";
|
||||
import { BotManager } from "./bot/manager.js";
|
||||
import { createWebServer } from "./web/server.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT_DIR = path.resolve(__dirname, "..");
|
||||
@@ -10,6 +16,8 @@ const DATA_DIR = path.join(ROOT_DIR, "data");
|
||||
const CONFIG_PATH = path.join(ROOT_DIR, "config.json");
|
||||
const DB_PATH = path.join(DATA_DIR, "tsmusicbot.db");
|
||||
const LOG_DIR = path.join(DATA_DIR, "logs");
|
||||
const COOKIE_DIR = path.join(DATA_DIR, "cookies");
|
||||
const STATIC_DIR = path.join(ROOT_DIR, "web", "dist");
|
||||
|
||||
async function main() {
|
||||
const config = loadConfig(CONFIG_PATH);
|
||||
@@ -18,10 +26,50 @@ async function main() {
|
||||
const logger = createLogger(LOG_DIR);
|
||||
const db = createDatabase(DB_PATH);
|
||||
|
||||
const apiServer = createApiServerManager(
|
||||
{ neteasePort: config.neteaseApiPort, qqMusicPort: config.qqMusicApiPort },
|
||||
logger
|
||||
);
|
||||
await apiServer.start();
|
||||
|
||||
const neteaseProvider = new NeteaseProvider(apiServer.getNeteaseBaseUrl());
|
||||
const qqProvider = new QQMusicProvider(apiServer.getQQMusicBaseUrl());
|
||||
|
||||
const cookieStore = createCookieStore(COOKIE_DIR);
|
||||
const neteaseCookie = cookieStore.load("netease");
|
||||
if (neteaseCookie) neteaseProvider.setCookie(neteaseCookie);
|
||||
const qqCookie = cookieStore.load("qq");
|
||||
if (qqCookie) qqProvider.setCookie(qqCookie);
|
||||
|
||||
const botManager = new BotManager(
|
||||
neteaseProvider,
|
||||
qqProvider,
|
||||
db,
|
||||
config,
|
||||
logger
|
||||
);
|
||||
await botManager.loadSavedBots();
|
||||
|
||||
const webServer = createWebServer({
|
||||
port: config.webPort,
|
||||
botManager,
|
||||
neteaseProvider,
|
||||
qqProvider,
|
||||
database: db,
|
||||
config,
|
||||
logger,
|
||||
staticDir: STATIC_DIR,
|
||||
});
|
||||
await webServer.start();
|
||||
|
||||
logger.info({ webPort: config.webPort }, "TSMusicBot started");
|
||||
logger.info(`WebUI: http://localhost:${config.webPort}`);
|
||||
|
||||
const shutdown = () => {
|
||||
logger.info("Shutting down...");
|
||||
botManager.shutdown();
|
||||
webServer.stop();
|
||||
apiServer.stop();
|
||||
db.close();
|
||||
process.exit(0);
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user