mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
Fixed crash originated in bank.set_balance (#2997)
* Removes `MAX_BALANCE` from bank, user `bank.get_max_balance()` now `[p]bankset maxbal` can be used to set the maximum bank balance Signed-off-by: Guy <guyreis96@gmail.com> * Pushed the Fix for new issue introduced by #2926 Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com> * Changelogs Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com> * Rename changelog to a misc Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com> * Address Flame's review Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com> * Correct an outdated reference in the docs Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com> * Reword docstring for the RuntimeError Signed-off-by: guyre <27962761+drapersniper@users.noreply.github.com>
This commit is contained in:
parent
ee3be8b633
commit
575e55cb0f
1
changelog.d/2997.misc.rst
Normal file
1
changelog.d/2997.misc.rst
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fixed a crash seen when calling economy commands in DM with a global bank.
|
||||||
@ -170,12 +170,12 @@ async def can_spend(member: discord.Member, amount: int) -> bool:
|
|||||||
return await get_balance(member) >= amount
|
return await get_balance(member) >= amount
|
||||||
|
|
||||||
|
|
||||||
async def set_balance(member: discord.Member, amount: int) -> int:
|
async def set_balance(member: Union[discord.Member, discord.User], amount: int) -> int:
|
||||||
"""Set an account balance.
|
"""Set an account balance.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
member : discord.Member
|
member : Union[discord.Member, discord.User]
|
||||||
The member whose balance to set.
|
The member whose balance to set.
|
||||||
amount : int
|
amount : int
|
||||||
The amount to set the balance to.
|
The amount to set the balance to.
|
||||||
@ -189,16 +189,19 @@ async def set_balance(member: discord.Member, amount: int) -> int:
|
|||||||
------
|
------
|
||||||
ValueError
|
ValueError
|
||||||
If attempting to set the balance to a negative number.
|
If attempting to set the balance to a negative number.
|
||||||
|
RuntimeError
|
||||||
|
If the bank is guild-specific and a discord.User object is provided.
|
||||||
BalanceTooHigh
|
BalanceTooHigh
|
||||||
If attempting to set the balance to a value greater than
|
If attempting to set the balance to a value greater than
|
||||||
``bank.MAX_BALANCE``
|
``bank._MAX_BALANCE``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if amount < 0:
|
if amount < 0:
|
||||||
raise ValueError("Not allowed to have negative balance.")
|
raise ValueError("Not allowed to have negative balance.")
|
||||||
max_bal = await get_max_balance(member.guild)
|
guild = getattr(member, "guild", None)
|
||||||
|
max_bal = await get_max_balance(guild)
|
||||||
if amount > max_bal:
|
if amount > max_bal:
|
||||||
currency = await get_currency_name(member.guild)
|
currency = await get_currency_name(guild)
|
||||||
raise errors.BalanceTooHigh(
|
raise errors.BalanceTooHigh(
|
||||||
user=member.display_name, max_balance=max_bal, currency_name=currency
|
user=member.display_name, max_balance=max_bal, currency_name=currency
|
||||||
)
|
)
|
||||||
@ -303,14 +306,18 @@ async def deposit_credits(member: discord.Member, amount: int) -> int:
|
|||||||
return await set_balance(member, amount + bal)
|
return await set_balance(member, amount + bal)
|
||||||
|
|
||||||
|
|
||||||
async def transfer_credits(from_: discord.Member, to: discord.Member, amount: int):
|
async def transfer_credits(
|
||||||
|
from_: Union[discord.Member, discord.User],
|
||||||
|
to: Union[discord.Member, discord.User],
|
||||||
|
amount: int,
|
||||||
|
):
|
||||||
"""Transfer a given amount of credits from one account to another.
|
"""Transfer a given amount of credits from one account to another.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
from_: discord.Member
|
from_: Union[discord.Member, discord.User]
|
||||||
The member to transfer from.
|
The member to transfer from.
|
||||||
to : discord.Member
|
to : Union[discord.Member, discord.User]
|
||||||
The member to transfer to.
|
The member to transfer to.
|
||||||
amount : int
|
amount : int
|
||||||
The amount to transfer.
|
The amount to transfer.
|
||||||
@ -326,10 +333,11 @@ async def transfer_credits(from_: discord.Member, to: discord.Member, amount: in
|
|||||||
If the amount is invalid or if ``from_`` has insufficient funds.
|
If the amount is invalid or if ``from_`` has insufficient funds.
|
||||||
TypeError
|
TypeError
|
||||||
If the amount is not an `int`.
|
If the amount is not an `int`.
|
||||||
|
RuntimeError
|
||||||
|
If the bank is guild-specific and a discord.User object is provided.
|
||||||
BalanceTooHigh
|
BalanceTooHigh
|
||||||
If the balance after the transfer would be greater than
|
If the balance after the transfer would be greater than
|
||||||
``bank.MAX_BALANCE``
|
``bank._MAX_BALANCE``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not isinstance(amount, int):
|
if not isinstance(amount, int):
|
||||||
raise TypeError("Transfer amount must be of type int, not {}.".format(type(amount)))
|
raise TypeError("Transfer amount must be of type int, not {}.".format(type(amount)))
|
||||||
@ -339,11 +347,11 @@ async def transfer_credits(from_: discord.Member, to: discord.Member, amount: in
|
|||||||
humanize_number(amount, override_locale="en_US")
|
humanize_number(amount, override_locale="en_US")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
guild = getattr(to, "guild", None)
|
||||||
max_bal = await get_max_balance(to.guild)
|
max_bal = await get_max_balance(guild)
|
||||||
|
|
||||||
if await get_balance(to) + amount > max_bal:
|
if await get_balance(to) + amount > max_bal:
|
||||||
currency = await get_currency_name(to.guild)
|
currency = await get_currency_name(guild)
|
||||||
raise errors.BalanceTooHigh(
|
raise errors.BalanceTooHigh(
|
||||||
user=to.display_name, max_balance=max_bal, currency_name=currency
|
user=to.display_name, max_balance=max_bal, currency_name=currency
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user