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