diff --git a/garfmain.py b/garfmain.py index f44e740..d36bee3 100644 --- a/garfmain.py +++ b/garfmain.py @@ -6,8 +6,8 @@ import subprocess from garfpy import( logger, is_private, kroger_token, find_store, search_product, - picture_time, process_image_requests, generate_chat, - aod_message, wikisum) + garfpic, process_image_requests, generate_chat, + aod_message, wikisum, generate_qr) gapikey = config.GIF_TOKEN @@ -50,13 +50,24 @@ async def on_message(message): prompt = message.content[8:] logger.info(f"Image Request - User: {user}, Server: {server}, Prompt: {prompt}") await message.channel.send(f"`Please wait... image generation queued: {prompt}`") - await picture_time(message, prompt) + await garfpic(message, prompt) if message.content.lower().startswith('garfwiki '): search_term = message.content[9:] summary = await wikisum(search_term) await message.channel.send(summary) + if message.content.lower().startswith('garfqr '): + text = message.content[7:] + if len(text) > 1000: + await mesage.channel.send("❌ Text too long! Maximum 1000 characters.") + else: + try: + qr_code = generate_qr(text) + await discord.File(fp=qr_code, filename="qrcode.png") + except Exception as e: + await message.channel.send(e) + if message.content.lower().startswith("garfping "): try: query = message.content.split() diff --git a/garfpy/__init__.py b/garfpy/__init__.py index b4e81a6..e447804 100644 --- a/garfpy/__init__.py +++ b/garfpy/__init__.py @@ -4,10 +4,11 @@ from .kroger import( kroger_token, find_store, search_product ) from .garfai import( - picture_time, + garfpic, process_image_requests, generate_chat ) from .iputils import is_private from .aod import aod_message -from .wiki import wikisum \ No newline at end of file +from .wiki import wikisum +from .qr import generate_qr \ No newline at end of file diff --git a/garfpy/garfai.py b/garfpy/garfai.py index fc48f73..35e6f90 100644 --- a/garfpy/garfai.py +++ b/garfpy/garfai.py @@ -12,10 +12,9 @@ openaikey = config.OPENAI_TOKEN txtmodel = config.TXT_MODEL imgmodel = config.IMG_MODEL -# GarfPics image_request_queue = asyncio.Queue() -async def picture_time(message, prompt): +async def garfpic(message, prompt): await image_request_queue.put({'message': message, 'prompt': prompt}) async def generate_image(prompt): diff --git a/garfpy/qr.py b/garfpy/qr.py new file mode 100644 index 0000000..ceb3877 --- /dev/null +++ b/garfpy/qr.py @@ -0,0 +1,63 @@ +import qrcode +from io import BytesIO + + +def calculate_qr_settings(text): + text_length = len(text) + + if text_length <= 25: + version = 1 + box_size = 12 + elif text_length <= 47: + version = 2 + box_size = 10 + elif text_length <= 77: + version = 3 + box_size = 8 + elif text_length <= 114: + version = 4 + box_size = 7 + elif text_length <= 154: + version = 5 + box_size = 6 + elif text_length <= 195: + version = 6 + box_size = 5 + elif text_length <= 224: + version = 7 + box_size = 5 + elif text_length <= 279: + version = 8 + box_size = 4 + elif text_length <= 335: + version = 9 + box_size = 4 + elif text_length <= 395: + version = 10 + box_size = 3 + else: + version = None + box_size = 3 + + return version, box_size + +async def generate_qr(text): + version, box_size = calculate_qr_settings(text) + + qr = qrcode.QRCode( + version=version, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=box_size, + border=4, + ) + + qr.add_data(text) + qr.make(fit=True) + + qr_image = qr.make_image(fill_color="black", back_color="white") + + img_buffer = BytesIO() + qr_image.save(img_buffer, format='PNG') + img_buffer.seek(0) + + return img_buffer \ No newline at end of file