| |
| import discord |
| import logging |
| from cachetools import TTLCache |
| from database.db import db |
|
|
| |
| 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}...") |
| |
| |
| 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 |
|
|