Add Horus Chat to MC - connects to AI agent
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import fs from "fs";
|
||||
|
||||
const MESSAGE_FILE = "/tmp/horus-mc-messages.json";
|
||||
const TELEGRAM_CHAT_ID = "382315644"; // Haitham's Telegram ID
|
||||
|
||||
interface Message {
|
||||
id: string;
|
||||
role: "user" | "assistant";
|
||||
content: string;
|
||||
timestamp: number;
|
||||
processed: boolean;
|
||||
}
|
||||
|
||||
function getMessages(): Message[] {
|
||||
try {
|
||||
if (fs.existsSync(MESSAGE_FILE)) {
|
||||
return JSON.parse(fs.readFileSync(MESSAGE_FILE, "utf-8"));
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Error reading messages:", e);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
function saveMessages(messages: Message[]) {
|
||||
fs.writeFileSync(MESSAGE_FILE, JSON.stringify(messages, null, 2));
|
||||
}
|
||||
|
||||
async function sendToTelegram(text: string) {
|
||||
try {
|
||||
const token = process.env.TELEGRAM_BOT_TOKEN;
|
||||
if (!token) {
|
||||
console.log("No Telegram token, skipping");
|
||||
return;
|
||||
}
|
||||
|
||||
await fetch(`https://api.telegram.org/bot${token}/sendMessage`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
chat_id: TELEGRAM_CHAT_ID,
|
||||
text: `💬 MC Chat:\n${text}`,
|
||||
}),
|
||||
});
|
||||
} catch (e) {
|
||||
console.error("Telegram error:", e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
const body = await request.json();
|
||||
const { message, locale = "es" } = body;
|
||||
|
||||
if (!message) {
|
||||
return NextResponse.json({ error: "Message required" }, { status: 400 });
|
||||
}
|
||||
|
||||
const messages = getMessages();
|
||||
|
||||
// Add user message
|
||||
const userMessage: Message = {
|
||||
id: `msg_${Date.now()}`,
|
||||
role: "user",
|
||||
content: message,
|
||||
timestamp: Date.now(),
|
||||
processed: false,
|
||||
};
|
||||
messages.push(userMessage);
|
||||
saveMessages(messages);
|
||||
|
||||
// Forward to Telegram (where Horus is listening)
|
||||
await sendToTelegram(message);
|
||||
|
||||
return NextResponse.json({
|
||||
id: userMessage.id,
|
||||
status: "sent",
|
||||
message: "Message sent to Horus"
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error("Error:", error);
|
||||
return NextResponse.json({ error: "Failed" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET(request: Request) {
|
||||
const { searchParams } = new URL(request.url);
|
||||
const lastId = searchParams.get("after");
|
||||
|
||||
const messages = getMessages();
|
||||
|
||||
// Get messages after lastId
|
||||
let filtered = messages;
|
||||
if (lastId) {
|
||||
const idx = messages.findIndex(m => m.id === lastId);
|
||||
if (idx >= 0) {
|
||||
filtered = messages.slice(idx + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Return only assistant messages that haven't been fetched
|
||||
const response = filtered.filter(m => m.role === "assistant" && !m.processed);
|
||||
|
||||
// Mark as processed
|
||||
if (response.length > 0) {
|
||||
const processedIds = new Set(response.map(r => r.id));
|
||||
const updated = messages.map(m =>
|
||||
processedIds.has(m.id) ? { ...m, processed: true } : m
|
||||
);
|
||||
saveMessages(updated);
|
||||
}
|
||||
|
||||
return NextResponse.json({ messages: response });
|
||||
}
|
||||
Reference in New Issue
Block a user