diff --git a/src/bot_qr.py b/src/bot_qr.py index 27f0c90..fcecbb4 100644 --- a/src/bot_qr.py +++ b/src/bot_qr.py @@ -2,10 +2,15 @@ from dotenv import load_dotenv from sys import exit as sexit import os import json +import html import telebot import qrcode +CAPTION_LIMIT = 1024 +MESSAGE_LIMIT = 4096 +QR_TEXT_LIMIT = 770 + # Загрузить переменные из файла .env и language.json load_dotenv() with open('./src/language.json', 'r', encoding='utf-8') as file: @@ -33,7 +38,7 @@ def gen_qr(text, id): # Создаем экземпляр класса QRCode qr = qrcode.QRCode( version=1, - error_correction=qrcode.constants.ERROR_CORRECT_H, + error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=1, ) @@ -48,15 +53,34 @@ def gen_qr(text, id): @bot.message_handler(content_types=['text']) def generate_qr_code(mess): - gen_qr(mess.text, mess.from_user.id) + if len(mess.text) > QR_TEXT_LIMIT: + bot.send_message( + mess.chat.id, + language['text_too_long'].format(limit=QR_TEXT_LIMIT, chars=len(mess.text)) + ) + return + + try: + gen_qr(mess.text, mess.from_user.id) + except (qrcode.exceptions.DataOverflowError, ValueError): + bot.send_message(mess.chat.id, language['qr_overflow']) + return + + words = len(mess.text.split()) + chars = len(mess.text) text = language['qr_info'].format( - text=mess.text, - words=len(mess.text.split()), - chars=len(mess.text) + text=html.escape(mess.text), + words=words, + chars=chars ) with open(photoName, 'rb') as qr_photo: - bot.send_photo(mess.chat.id, qr_photo) - bot.send_message(mess.chat.id, text, parse_mode='html') + if len(text) <= CAPTION_LIMIT: + bot.send_photo(mess.chat.id, qr_photo, caption=text, parse_mode='html') + else: + bot.send_photo(mess.chat.id, qr_photo) + if len(text) > MESSAGE_LIMIT: + text = language['qr_info_short'].format(words=words, chars=chars) + bot.send_message(mess.chat.id, text, parse_mode='html') os.remove(photoName) print(language['bot_started']) diff --git a/src/language.json b/src/language.json index 3d34b55..599e793 100644 --- a/src/language.json +++ b/src/language.json @@ -3,5 +3,8 @@ "no_token": "Отсутствует токен телеграм бота. Загрузи токен в переменные окружения и бот сможет начать работу", "bot_started": "Бот запущен", "bot_stopped": "Бот отключён", - "qr_info": "Сообщение: {text}\nСлов в сообщении: {words}\nСимволов в сообщении: {chars}" + "qr_info": "Сообщение: {text}\nСлов в сообщении: {words}\nСимволов в сообщении: {chars}", + "qr_info_short": "Слов в сообщении: {words}\nСимволов в сообщении: {chars}", + "text_too_long": "Текст слишком длинный для QR-кода. Максимум {limit} символов, а тут {chars}", + "qr_overflow": "Не получилось создать QR-код: текст слишком большой)" } \ No newline at end of file