gacha-bot2 / utils /cdn.py
Amit
Clean Cloud Deployment
732ca45
Raw
History Blame Contribute Delete
1.69 kB
# 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