# ______ ___ ___ _ _
# ____ | ___ \ | \/ | | | | |
# / __ \| |_/ / _| . . | ___ __| |_ _| | ___
# / / _` | __/ | | | |\/| |/ _ \ / _` | | | | |/ _ \
# | | (_| | | | |_| | | | | (_) | (_| | |_| | | __/
# \ \__,_\_| \__, \_| |_/\___/ \__,_|\__,_|_|\___|
# \____/ __/ |
# |___/
# На модуль распространяется лицензия "GNU General Public License v3.0"
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
# meta developer: @pymodule
from .. import loader, utils
import requests
import uuid
import os
@loader.tds
class QRGenMod(loader.Module):
"""Generate QR codes from text or links"""
strings = {
"name": "QRGen",
"generating": "📡 Generating QR for:\n{text}",
"no_text": "❗ Please provide text or a link to encode",
"api_error": "🚫 Error while contacting QR API",
"not_image": "⚠️ API did not return an image",
"ok": "✅ QR code successfully generated",
"error_with_details": "🚫 Error:\n{error}"
}
strings_ru = {
"name": "QRGen",
"generating": "📡 Генерация QR для:\n{text}",
"no_text": "❗ Укажи текст или ссылку для кодирования",
"api_error": "🚫 Ошибка при запросе к QR API",
"not_image": "⚠️ API не вернул изображение",
"ok": "✅ QR-код успешно сгенерирован",
"error_with_details": "🚫 Ошибка:\n{error}"
}
@loader.command(doc="Generate a QR code from text or link", ru_doc="Сгенерировать QR-код из текста или ссылки")
async def qr(self, message):
""" — generate QR code"""
text = utils.get_args_raw(message)
if not text:
return await utils.answer(message, self.strings("no_text"))
await utils.answer(message, self.strings("generating").format(text=text))
try:
params = {
"data": text,
"size": "512x512",
"ecc": "M",
"format": "png",
"margin": 10
}
response = requests.get("https://api.qrserver.com/v1/create-qr-code/", params=params, stream=True, timeout=15)
if response.status_code != 200:
return await utils.answer(message, self.strings("api_error"))
if not response.headers.get("Content-Type", "").startswith("image/"):
return await utils.answer(message, self.strings("not_image"))
temp_file = f"/tmp/qr_{uuid.uuid4()}.png"
with open(temp_file, "wb") as f:
for chunk in response.iter_content(8192):
f.write(chunk)
await message.client.send_file(
message.chat_id,
temp_file,
caption=self.strings("ok"),
reply_to=message.id
)
os.remove(temp_file)
await message.delete()
except Exception as e:
await utils.answer(message, self.strings("error_with_details").format(error=e))