create qr-codes by tg bot
Deploy app frontend / app frontend (push) Failing after 48s
Deploy db-migrations / db-migrations (push) Failing after 35s
Deploy service message-delivery-method-web-push / service message-delivery-method-web-push (push) Failing after 53s

This commit is contained in:
2024-12-10 13:21:38 +02:00
parent e9b3df38fe
commit 1810c550ba
91 changed files with 3317 additions and 1909 deletions
+11
View File
@@ -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-кодов. Попробуйте позже.",
);
}
}
+7
View File
@@ -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("Команды успешно установлены.");
}
+23
View File
@@ -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 для управления уже созданными кодами.",
);
}