Files
tg-chat-bot/src/commands/qr.ts
T
melod1n a736f786c2 feat(openai): add chat streaming and model commands
- add /openai (/chatgpt) chat command using OpenAI Responses API (streaming + incremental edits)
- add /openAIListModels, /openAIGetModel, /openAISetModel
- introduce base Command class and migrate non-chat commands to it
- wire OpenAI client + env vars (OPENAI_API_KEY, OPENAI_MODEL)
- bump deps (@google/genai, systeminformation, @types/node) and add openai
2026-02-03 13:39:01 +03:00

69 lines
2.3 KiB
TypeScript

import {Command} from "../base/command";
import {Message} from "typescript-telegram-bot-api";
import {extractMessagePayload, logError, replyToMessage} from "../util/utils";
import {bot, botUser} from "../index";
import QRCode from "qrcode";
export class Qr extends Command {
argsMode = "optional" as const;
title = "/qr";
description = "Generates QR-code from text you sent or replied to.";
async execute(msg: Message, match?: RegExpExecArray): Promise<void> {
const chatId = msg.chat.id;
let payload = extractMessagePayload(msg, match?.[3]);
if (!payload) {
await replyToMessage(
{
message: msg,
text: "Не найден текст для генерации QR-кода."
}
);
return;
}
if (payload.length > 1500) {
payload = payload.slice(0, 1500);
await replyToMessage(
{
message: msg,
text: `Слишком длинный текст для QR (${payload.length} символов). Текст будет обрезан до 1500 символов.`
}
);
}
try {
await bot.sendChatAction({chat_id: chatId, action: "upload_photo"});
const pngBuffer = await QRCode.toBuffer(payload, {
type: "png",
errorCorrectionLevel: "L",
margin: 2,
scale: 8,
});
const maxCaptionLength = botUser.is_premium ? 4096 : 1024;
await bot.sendPhoto({
chat_id: chatId,
photo: pngBuffer,
caption: "QR-код готов ✅\nСодержимое:\n<blockquote expandable>" +
`${payload.length > maxCaptionLength ? payload.slice(0, maxCaptionLength - 40) + "..." : payload}` +
"</blockquote>",
reply_parameters: {
message_id: msg.message_id,
},
parse_mode: "HTML"
});
} catch (e) {
await replyToMessage({
message: msg,
text: `Не получилось сгенерировать QR: ${e?.message ?? String(e)}`
}).catch(logError);
}
}
}