class WalletNotFoundError(Exception): """Wallet could not find user with such an ID from a guild in the database""" def __init__(self, owner_id: int, guild_id: int) -> None: self.owner_id = owner_id self.guild_id = guild_id super().__init__( f"Wallet of a user with id {self.owner_id} was not found for the guild with id {self.guild_id}" ) class WalletInsufficientFunds(Exception): """Wallet's balance is not sufficient to perform the operation""" def __init__( self, wallet: "Wallet", amount: float, ) -> None: self.wallet = wallet self.amount = amount super().__init__( f"Wallet of a user with id {self.wallet.owner_id} for the guild with id {self.wallet.guild_id} does not have sufficient funds to perform the operation (balance: {self.wallet.balance}, requested: {self.amount})" ) class WalletOverdraftLimitExceeded(Exception): """Wallet's overdraft limit is not sufficient to perform the operation""" def __init__( self, wallet: "Wallet", amount: float, overdraft_limit: float, ) -> None: self.wallet = wallet self.amount = amount self.overdraft_limit = overdraft_limit super().__init__( f"Wallet of a user with id {self.wallet.owner_id} for the guild with id {self.wallet.guild_id} does not have sufficient funds to perform the operation (balance: {self.wallet.balance}, requested: {self.amount}, overdraft limit: {self.overdraft_limit})" ) class WalletBalanceLimitExceeded(Exception): """Wallet's balance limit is not high enough to perform the operation""" def __init__( self, wallet: "Wallet", amount: float, balance_limit: float, ) -> None: self.wallet = wallet self.amount = amount self.balance_limit = balance_limit super().__init__( f"Wallet of a user with id {self.wallet.owner_id} for the guild with id {self.wallet.guild_id} would have too much funds after the operation (balance: {self.wallet.balance}, deposited: {self.amount}, balance limit: {self.balance_limit})" )