diff --git a/redbot/core/bank.py b/redbot/core/bank.py index 0d8f41330..f816c012a 100644 --- a/redbot/core/bank.py +++ b/redbot/core/bank.py @@ -75,6 +75,9 @@ log = logging.getLogger("red.core.bank") _data_deletion_lock = asyncio.Lock() +_cache_is_global = None +_cache = {"bank_name": None, "currency": None, "default_balance": None, "max_balance": None} + async def _init(): global _config @@ -642,7 +645,12 @@ async def is_global() -> bool: :code:`True` if the bank is global, otherwise :code:`False`. """ - return await _config.is_global() + global _cache_is_global + + if _cache_is_global is None: + _cache_is_global = await _config.is_global() + + return _cache_is_global async def set_global(global_: bool) -> bool: @@ -671,12 +679,15 @@ async def set_global(global_: bool) -> bool: if (await is_global()) is global_: return global_ + global _cache_is_global + if await is_global(): await _config.clear_all_users() else: await _config.clear_all_members() await _config.is_global.set(global_) + _cache_is_global = global_ return global_ @@ -701,7 +712,10 @@ async def get_bank_name(guild: discord.Guild = None) -> str: """ if await is_global(): - return await _config.bank_name() + global _cache + if _cache["bank_name"] is None: + _cache["bank_name"] = await _config.bank_name() + return _cache["bank_name"] elif guild is not None: return await _config.guild(guild).bank_name() else: @@ -732,6 +746,8 @@ async def set_bank_name(name: str, guild: discord.Guild = None) -> str: """ if await is_global(): await _config.bank_name.set(name) + global _cache + _cache["bank_name"] = name elif guild is not None: await _config.guild(guild).bank_name.set(name) else: @@ -760,7 +776,10 @@ async def get_currency_name(guild: discord.Guild = None) -> str: """ if await is_global(): - return await _config.currency() + global _cache + if _cache["currency"] is None: + _cache["currency"] = await _config.currency() + return _cache["currency"] elif guild is not None: return await _config.guild(guild).currency() else: @@ -791,6 +810,8 @@ async def set_currency_name(name: str, guild: discord.Guild = None) -> str: """ if await is_global(): await _config.currency.set(name) + global _cache + _cache["currency"] = name elif guild is not None: await _config.guild(guild).currency.set(name) else: @@ -821,7 +842,9 @@ async def get_max_balance(guild: discord.Guild = None) -> int: """ if await is_global(): - return await _config.max_balance() + if _cache["max_balance"] is None: + _cache["max_balance"] = await _config.max_balance() + return _cache["max_balance"] elif guild is not None: return await _config.guild(guild).max_balance() else: @@ -865,6 +888,8 @@ async def set_max_balance(amount: int, guild: discord.Guild = None) -> int: if await is_global(): await _config.max_balance.set(amount) + global _cache + _cache["max_balance"] = amount elif guild is not None: await _config.guild(guild).max_balance.set(amount) else: @@ -895,7 +920,9 @@ async def get_default_balance(guild: discord.Guild = None) -> int: """ if await is_global(): - return await _config.default_balance() + if _cache["default_balance"] is None: + _cache["default_balance"] = await _config.default_balance() + return _cache["default_balance"] elif guild is not None: return await _config.guild(guild).default_balance() else: @@ -941,6 +968,8 @@ async def set_default_balance(amount: int, guild: discord.Guild = None) -> int: if await is_global(): await _config.default_balance.set(amount) + global _cache + _cache["default_balance"] = amount elif guild is not None: await _config.guild(guild).default_balance.set(amount) else: