Files
blog/bot/src/tg-core.js
T
2026-06-01 17:57:22 +08:00

55 lines
1.6 KiB
JavaScript

// tg-core.js - Telegram API helpers
const config = require("./config");
const API = config.TG_TOKEN ? "https://api.telegram.org/bot" + config.TG_TOKEN : "";
async function tg(method, body) {
const res = await fetch(API + "/" + method, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
return res.json();
}
function allowed(chatId) {
if (config.ALLOWED_IDS.length === 0) return true;
return config.ALLOWED_IDS.includes(chatId);
}
async function sendMessage(chatId, text, opts) {
const safeText = String(text || "");
try {
return await tg("sendMessage", Object.assign(
{ chat_id: chatId, text: safeText, parse_mode: "HTML", disable_web_page_preview: true },
opts || {}
));
} catch (e) {
if (e.message && (e.message.includes("parse") || e.message.includes("HTML"))) {
return await tg("sendMessage", Object.assign(
{ chat_id: chatId, text: safeText },
opts || {}
));
}
throw e;
}
}
async function handleCallback(chatId, queryId, data, handlers) {
if (!data) return;
const parts = data.split("_");
const cmd = parts[0];
const page = parseInt(parts[1]) || 1;
if (cmd === "list" && handlers.list) {
await handlers.list(chatId, String(page));
} else if (cmd === "links" && handlers.links) {
await handlers.links(chatId, String(page));
} else if (cmd === "feeds" && handlers.feeds) {
await handlers.feeds(chatId, String(page));
}
try { await tg("answerCallbackQuery", { callback_query_id: queryId }); } catch {}
}
module.exports = { tg, allowed, sendMessage, handleCallback };