Files
hereconnect/services/tg-bot/src/bot/index.ts
T

52 lines
1.9 KiB
TypeScript
Raw Normal View History

2024-12-10 13:21:38 +02:00
import { Bot, session } from "grammy";
import { conversations, createConversation } from "@grammyjs/conversations";
2024-12-12 13:30:28 +02:00
import { MyContext } from "@/types/myContext";
import { env } from "@/config/env";
import { CouchDBStorageAdapter } from "./storageAdapters/CouchDBStorageAdapter";
2024-12-10 13:21:38 +02:00
import { loadUserMiddleware } from "./middleware/loadUser";
2024-12-12 13:30:28 +02:00
import { tgBotSessionsDb } from "@/dbs";
2024-12-10 13:21:38 +02:00
import { setupCommands } from "./commands/setupCommands";
import { startCommand } from "./commands/start";
import { helpCommand } from "./commands/help";
import { newCommand } from "./commands/new";
import { manageCommand } from "./commands/manage";
import { callbackQueryHandler } from "./callbackHandlers";
import { newQRCodeConversation } from "./conversations/newQRCodeConversation";
2024-12-12 13:30:28 +02:00
const storage = new CouchDBStorageAdapter(tgBotSessionsDb, {
softDelete: true,
});
2024-12-10 13:21:38 +02:00
// Инициализируем бота с нужным типом контекста
const bot = new Bot<MyContext>(env.TELEGRAM_BOT_TOKEN);
// Подключаем сессии. По необходимости определите initial state для сессии
2024-12-12 13:30:28 +02:00
bot.use(session({ storage, initial: () => ({}) }));
2024-12-10 13:21:38 +02:00
// Подключаем conversations для многошаговых сценариев
bot.use(conversations());
bot.use(createConversation(newQRCodeConversation, "newQRCodeConversation"));
// Middleware для загрузки или создания пользователя
bot.use(loadUserMiddleware);
// Регистрация команд
bot.command("start", startCommand);
bot.command("help", helpCommand);
bot.command("new", newCommand);
bot.command("manage", manageCommand);
// Обработка callback_query
bot.on("callback_query:data", callbackQueryHandler);
(async () => {
// Установка команд
await setupCommands(bot);
// Запуск бота
bot.start();
console.log("Бот запущен!");
})();
export { bot };