initial commit
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user