[Bank API] Cache global bank settings (#4723)

* cache global bank settings

* Make the global variable name clearer

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
Ryan 2021-01-17 17:08:59 -05:00 committed by GitHub
parent 2b72f9bb99
commit e4d24578b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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