# utils/cdn.py import discord import logging from cachetools import TTLCache from database.db import db # 🔥 THE NEW IMPORT from utils.generators.factory import generate_card_factory logger = logging.getLogger(__name__) DUMP_CHANNEL_ID = 1488240222264230179 URL_CACHE = TTLCache(maxsize=5000, ttl=43200) async def get_or_create_card_url(bot: discord.Client, instance_id: int, image_url: str, char_name: str, print_num: int, rarity: str, element: str) -> str: if instance_id in URL_CACHE: return URL_CACHE[instance_id] async with db.pool.acquire() as conn: msg_id = await conn.fetchval("SELECT dump_msg_id FROM user_characters WHERE instance_id = $1", instance_id) dump_channel = bot.get_channel(DUMP_CHANNEL_ID) if not dump_channel: dump_channel = await bot.fetch_channel(DUMP_CHANNEL_ID) if msg_id: try: msg = await dump_channel.fetch_message(msg_id) if msg.attachments: fresh_url = msg.attachments[0].url URL_CACHE[instance_id] = fresh_url return fresh_url except Exception: pass logger.info(f"Baking new card via Factory for instance #{instance_id}...") # 🔥 CALL THE FACTORY INSTEAD card_file = await generate_card_factory(image_url, char_name, print_num, rarity, element) dump_msg = await dump_channel.send(file=card_file) new_url = dump_msg.attachments[0].url async with db.pool.acquire() as conn: await conn.execute("UPDATE user_characters SET dump_msg_id = $1 WHERE instance_id = $2", dump_msg.id, instance_id) URL_CACHE[instance_id] = new_url return new_url