import type { OAuthExample } from '@/lib/oauth-examples'; export function buildBotExamples(apiBase: string): OAuthExample[] { const API_BASE = apiBase.replace(/\/+$/, ''); const BOT_TOKEN = '123456789:AAHdqTcvCH1vGWJxfSeofS0As2XJarzRz5Q'; return [ { id: 'telegraf', label: 'Telegraf', language: 'javascript', code: `import { Telegraf } from 'telegraf'; // Достаточно сменить apiRoot — код бота остаётся без изменений const bot = new Telegraf(process.env.BOT_TOKEN, { telegram: { apiRoot: '${API_BASE}/bot' } }); bot.start((ctx) => ctx.reply('Привет! Бот работает через Lendry Bot API.')); bot.command('ping', (ctx) => ctx.reply('pong')); // Inline-клавиатура и callback_query bot.command('menu', (ctx) => ctx.reply('Выберите действие:', { reply_markup: { inline_keyboard: [ [{ text: '✅ OK', callback_data: 'ok' }, { text: '❌ Cancel', callback_data: 'cancel' }] ] } }) ); bot.action('ok', async (ctx) => { await ctx.answerCbQuery('Принято!'); await ctx.editMessageText('Вы нажали OK ✅'); }); bot.launch();` }, { id: 'node-telegram-bot-api', label: 'node-telegram-bot-api', language: 'javascript', code: `import TelegramBot from 'node-telegram-bot-api'; const token = process.env.BOT_TOKEN; const bot = new TelegramBot(token, { polling: true, baseApiUrl: '${API_BASE}/bot' }); bot.on('message', (msg) => { bot.sendMessage(msg.chat.id, \`Вы написали: \${msg.text}\`); });` }, { id: 'curl', label: 'cURL', language: 'bash', code: `# getMe — проверка токена curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/getMe' | jq # sendMessage — chat_id = UUID пользователя Lendry ID curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/sendMessage' \\ -H 'Content-Type: application/json' \\ -d '{ "chat_id": "USER_UUID", "text": "Привет из Bot API!" }' | jq # sendMessage с inline-клавиатурой curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/sendMessage' \\ -H 'Content-Type: application/json' \\ -d '{ "chat_id": "USER_UUID", "text": "Выберите:", "reply_markup": { "inline_keyboard": [[{ "text": "OK", "callback_data": "ok" }]] } }' | jq # editMessageText curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/editMessageText' \\ -H 'Content-Type: application/json' \\ -d '{ "chat_id": 1000000000000, "message_id": 1, "text": "Текст обновлён" }' | jq # answerCallbackQuery curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/answerCallbackQuery' \\ -H 'Content-Type: application/json' \\ -d '{ "callback_query_id": "CALLBACK_QUERY_ID", "text": "Готово!" }' | jq # setChatMenuButton — глобальная кнопка меню (Web App) curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/setChatMenuButton' \\ -H 'Content-Type: application/json' \\ -d '{ "menu_button": { "type": "web_app", "text": "Открыть", "web_app": { "url": "https://app.example.com" } } }' | jq # setChatMenuButton — per-chat override curl -s -X POST '${API_BASE}/bot${BOT_TOKEN}/setChatMenuButton' \\ -H 'Content-Type: application/json' \\ -d '{ "chat_id": 1000000000000, "menu_button": { "type": "web_app", "text": "Персонально", "web_app": { "url": "https://app.example.com/user" } } }' | jq` }, { id: 'python', label: 'Python', language: 'python', code: `import os import requests API_BASE = '${API_BASE}' TOKEN = os.environ['BOT_TOKEN'] CHAT_ID = 'USER_UUID' def bot_api(method: str, payload: dict | None = None): url = f"{API_BASE}/bot{TOKEN}/{method}" response = requests.post(url, json=payload or {}, timeout=30) response.raise_for_status() return response.json() print(bot_api('getMe')) print(bot_api('sendMessage', {'chat_id': CHAT_ID, 'text': 'Привет!'}))` }, { id: 'botfather', label: 'BotFather (REST)', language: 'bash', code: `# Создание бота (JWT пользователя Lendry ID) curl -s -X POST '${API_BASE}/bots' \\ -H 'Authorization: Bearer ACCESS_TOKEN' \\ -H 'Content-Type: application/json' \\ -d '{ "name": "Мой сервисный бот", "username": "my_service" }' | jq # Ответ содержит token — сохраните его, повторно не показывается при GET # BotFather добавляется в семью через поиск и POST /family/groups/{id}/invites. # Профиль бота через BotFather в чате: # /setdescription my_service Описание перед /start # /setabouttext my_service Краткое описание # /setuserpic my_service https://cdn.example.com/avatar.png # /setmenubutton my_service https://app.example.com|Открыть приложение` }, { id: 'webapp', label: 'Mini App initData', language: 'javascript', code: `// На backend Mini App проверяйте initData через Bot API const response = await fetch('${API_BASE}/bots/web-app/validate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ initData: window.Telegram.WebApp.initData, botToken: process.env.BOT_TOKEN }) }); const result = await response.json(); if (!result.valid) { throw new Error(result.error ?? 'Невалидный initData'); } const user = result.userJson ? JSON.parse(result.userJson) : null;` } ]; }