create qr-codes by tg bot
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
import { MyContext } from "../../types/myContext";
|
||||
|
||||
export async function helpCommand(ctx: MyContext) {
|
||||
await ctx.reply(
|
||||
"Список доступных команд:\n" +
|
||||
"/start - начать работу с ботом\n" +
|
||||
"/help - показать помощь\n" +
|
||||
"/new - создать новый QR-код\n" +
|
||||
"/manage - управлять вашими QR-кодами\n",
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import { MyContext } from "../../types/myContext";
|
||||
import { getQRCodesByUser } from "../../api/qrCodes";
|
||||
|
||||
/**
|
||||
* Обработка команды /manage с выводом подменю
|
||||
*/
|
||||
export async function manageCommand(ctx: MyContext) {
|
||||
if (!ctx.userDoc) {
|
||||
await ctx.reply(
|
||||
"Ваш профиль не найден. Попробуйте снова или обратитесь в поддержку.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const qrCodes = await getQRCodesByUser(ctx.userDoc.user_uuid);
|
||||
|
||||
if (qrCodes.length === 0) {
|
||||
await ctx.reply(
|
||||
"У вас ещё нет QR-кодов. Используйте команду /new для создания.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Генерация клавиатуры с QR-кодами
|
||||
const keyboard = qrCodes.map((qr) => [
|
||||
{
|
||||
text: qr.name,
|
||||
callback_data: `manage:${qr.uri}`,
|
||||
},
|
||||
]);
|
||||
|
||||
await ctx.reply("Выберите QR-код для управления:", {
|
||||
reply_markup: {
|
||||
inline_keyboard: keyboard,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Ошибка при получении QR-кодов:", error);
|
||||
await ctx.reply(
|
||||
"Произошла ошибка при загрузке ваших QR-кодов. Попробуйте позже.",
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { MyContext } from "../../types/myContext";
|
||||
|
||||
export async function newCommand(ctx: MyContext) {
|
||||
// Запускаем многошаговый сценарий создания нового QR-кода
|
||||
// conversation: "newQRCodeConversation"
|
||||
await ctx.conversation.enter("newQRCodeConversation");
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import { Bot } from "grammy";
|
||||
import { MyContext } from "../../types/myContext";
|
||||
import { bot } from "old_bot"; // Ваш кастомный контекст
|
||||
|
||||
/**
|
||||
* Устанавливает команды для бота.
|
||||
* @param bot - Экземпляр бота.
|
||||
*/
|
||||
export async function setupCommands(bot: Bot<MyContext>): Promise<void> {
|
||||
// Настройка команд для английского языка (по умолчанию)
|
||||
await bot.api.setMyCommands([]);
|
||||
|
||||
// Настройка команд для русского языка
|
||||
await bot.api.setMyCommands(
|
||||
[
|
||||
{
|
||||
command: "start",
|
||||
description: "Запустить бота",
|
||||
},
|
||||
{
|
||||
command: "help",
|
||||
description: "Получить помощь",
|
||||
},
|
||||
{
|
||||
command: "new",
|
||||
description: "Создать новый QR-код",
|
||||
},
|
||||
{
|
||||
command: "manage",
|
||||
description: "Управлять QR-кодами",
|
||||
},
|
||||
],
|
||||
{ language_code: "ru" },
|
||||
);
|
||||
|
||||
console.log("Команды успешно установлены.");
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import { MyContext } from "../../types/myContext";
|
||||
import { ensureUserExists } from "../../api/users";
|
||||
|
||||
export async function startCommand(ctx: MyContext) {
|
||||
const userId = ctx.from?.id;
|
||||
|
||||
if (userId === undefined) {
|
||||
await ctx.reply(
|
||||
"Не удалось определить ваш идентификатор пользователя. Попробуйте позже или обратитесь в поддержку.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Проверяем или создаем пользователя в БД
|
||||
await ensureUserExists(userId);
|
||||
|
||||
await ctx.reply(
|
||||
"Привет! Я бот сервиса «НаСвязи». Я помогу вам создавать и настраивать QR-коды.",
|
||||
);
|
||||
await ctx.reply(
|
||||
"Используйте команду /new чтобы создать новый QR-код или /manage для управления уже созданными кодами.",
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user