feat: add message handler routing text to active Claude session

This commit is contained in:
neken
2026-04-10 15:13:39 +05:00
parent 4b67fdf885
commit 6ba1dd7080
+45
View File
@@ -0,0 +1,45 @@
import { type Context } from "grammy";
import { SessionManager } from "../services/session-manager.js";
import { ClaudeService } from "../services/claude.js";
import { splitMessage } from "../utils/telegram.js";
export function createMessageHandler(
manager: SessionManager,
claude: ClaudeService,
) {
return async (ctx: Context) => {
const text = ctx.message?.text;
if (!text) return;
const activeName = manager.activeSession;
if (!activeName) {
await ctx.reply("No active session. Use /start <path or name> to create one.");
return;
}
const session = manager.activeSessionInfo;
if (!session) return;
if (session.status === "busy") {
await ctx.reply("Session is busy, wait for the current request to finish.");
return;
}
manager.setStatus(activeName, "busy");
await ctx.replyWithChatAction("typing");
try {
const result = await claude.sendMessage(text, session.sessionId);
const response = result || "(empty response)";
const chunks = splitMessage(response);
for (const chunk of chunks) {
await ctx.reply(chunk);
}
} catch (err) {
await ctx.reply(`Error: ${err}`);
} finally {
manager.setStatus(activeName, "idle");
}
};
}