initial commit

This commit is contained in:
root
2026-05-13 14:20:41 +00:00
commit 6e178d2012
6022 changed files with 399872 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import { Router } from "express";
import { confirmTelegramFromBot } from "../services/auth.service.js";
const router = Router();
const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
const WEBHOOK_SECRET = process.env.TELEGRAM_WEBHOOK_SECRET;
async function tgSendMessage(chatId, text) {
if (!BOT_TOKEN) return;
try {
await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ chat_id: chatId, text, parse_mode: "HTML" }),
});
} catch (err) {
console.error("[tg] sendMessage failed", err.message);
}
}
router.post("/webhook", async (req, res) => {
// Telegram добавит заголовок если мы установили secret_token при setWebhook
if (WEBHOOK_SECRET) {
const got = req.get("x-telegram-bot-api-secret-token");
if (got !== WEBHOOK_SECRET) {
console.warn("[tg] webhook: bad secret token");
return res.status(401).json({ ok: false });
}
}
// Всегда отвечаем 200 — иначе Telegram будет ретраить
res.json({ ok: true });
try {
const update = req.body || {};
const msg = update.message;
if (!msg || !msg.text || !msg.from || !msg.chat) return;
const text = String(msg.text).trim();
const m = text.match(/^\/start\s+(\S+)/);
if (!m) {
// /start без параметра или другая команда — приветствие
if (text === "/start" || text === "/help") {
await tgSendMessage(msg.chat.id,
"Привет! Это бот авторизации <b>One Click</b>.\n\nЧтобы войти на сайт, нажмите кнопку «Войти через Telegram» на сайте — она пришлёт вам сюда специальную ссылку.");
}
return;
}
const token = m[1];
const result = await confirmTelegramFromBot({ token, telegramUser: msg.from });
await tgSendMessage(msg.chat.id, result.message || (result.ok ? "Готово!" : "Не получилось войти."));
} catch (err) {
console.error("[tg] webhook handler error:", err);
}
});
export default router;