@@ -555,86 +555,90 @@ async def cancel_callback(interaction):
555555 await ctx .reply (embed = embed , view = view if not max_reached else None )
556556
557557 @commands .command (aliases = ['upgrade_bank' , 'bu' ])
558+ @commands .cooldown (1 , 3 , commands .BucketType .user )
558559 async def bankupgrade (self , ctx ):
559560 """Upgrade your bank capacity (price scales with current limit)"""
560- user_id = ctx .author .id
561- guild_id = ctx .guild .id
562-
563- # Get current bank stats
564- current_limit = await db .get_bank_limit (user_id , guild_id )
565- current_balance = await db .get_bank_balance (user_id , guild_id )
566-
567- # Dynamic pricing formula (example: 10% of current limit + base 1000)
568- base_cost = 1000
569- upgrade_cost = int (current_limit * 0.1 ) + base_cost
570-
571- # Get user's wallet balance
572- wallet = await db .get_wallet_balance (user_id , guild_id )
573-
574- # Create confirmation embed
575- embed = discord .Embed (
576- title = "🏦 Bank Upgrade" ,
577- color = 0x2ecc71 ,
578- description = (
579- f"Current Bank Limit: **{ current_limit :,} ** { self .currency } \n "
580- f"Upgrade Cost: **{ upgrade_cost :,} ** { self .currency } \n "
581- f"New Limit: **{ current_limit + 5000 :,} ** { self .currency } \n \n "
582- f"Your Wallet: **{ wallet :,} ** { self .currency } "
583- )
584- )
585561
586- # Add upgrade button
587- view = discord .ui .View ()
588-
589- async def upgrade_callback (interaction ):
590- if interaction .user != ctx .author :
591- return await interaction .response .send_message ("This isn't your bank upgrade!" , ephemeral = True )
592-
593- # Re-check balance in case it changed
594- wallet = await db .get_wallet_balance (user_id , guild_id )
595- if wallet < upgrade_cost :
596- return await interaction .response .edit_message (
597- content = None ,
598- embed = discord .Embed (
599- description = "❌ You don't have enough money to upgrade your bank!" ,
600- color = discord .Color .red ()
601- ),
602- view = None
603- )
562+ async def create_upgrade_embed (user_id , guild_id ):
563+ # Get current bank stats
564+ current_limit = await db .get_bank_limit (user_id , guild_id )
565+ current_balance = await db .get_bank_balance (user_id , guild_id )
604566
605- # Process upgrade
606- await db .update_wallet (user_id , - upgrade_cost , guild_id )
607- await db .update_bank_limit (user_id , 5000 , guild_id ) # Increase by 5000
567+ # Dynamic pricing formula (example: 10% of current limit + base 1000)
568+ base_cost = 1000
569+ upgrade_cost = int (current_limit * 0.1 ) + base_cost
570+ new_limit = current_limit + 5000 # Fixed increase per upgrade
608571
609- # Get updated stats
610- new_limit = await db . get_bank_limit ( user_id , guild_id )
572+ # Check if user can afford it
573+ can_afford = current_balance >= upgrade_cost
611574
612- # Success message
613- success_embed = discord .Embed (
614- title = "✅ Bank Upgraded! " ,
615- color = 0x00ff00 ,
575+ # Create embed
576+ embed = discord .Embed (
577+ title = "🏦 Bank Upgrade " ,
578+ color = 0x2ecc71 if can_afford else 0xe74c3c ,
616579 description = (
617- f"New Bank Limit: **{ new_limit :,} ** { self .currency } \n "
618- f"Next Upgrade Cost: **{ int (new_limit * 0.1 ) + base_cost :,} ** { self .currency } "
580+ f"Current Bank Limit: **{ current_limit :,} ** { self .currency } \n "
581+ f"Current Bank Balance: **{ current_balance :,} ** { self .currency } \n \n "
582+ f"Upgrade Cost: **{ upgrade_cost :,} ** { self .currency } \n "
583+ f"New Limit: **{ new_limit :,} ** { self .currency } \n "
584+ f"*Money will be taken directly from your bank*"
619585 )
620586 )
621- await interaction .response .edit_message (embed = success_embed , view = None )
622-
623- upgrade_button = discord .ui .Button (label = f"Upgrade ({ upgrade_cost :,} )" , style = discord .ButtonStyle .green )
624- upgrade_button .callback = upgrade_callback
625- view .add_item (upgrade_button )
626-
627- cancel_button = discord .ui .Button (label = "Cancel" , style = discord .ButtonStyle .red )
628-
629- async def cancel_callback (interaction ):
630- if interaction .user != ctx .author :
631- return await interaction .response .send_message ("This isn't your bank upgrade!" , ephemeral = True )
632- await interaction .response .edit_message (content = "Upgrade cancelled." , embed = None , view = None )
633-
634- cancel_button .callback = cancel_callback
635- view .add_item (cancel_button )
587+
588+ if not can_afford :
589+ embed .add_field (
590+ name = "Insufficient Funds" ,
591+ value = f"You need **{ upgrade_cost - current_balance :,} ** more { self .currency } in your bank to upgrade!" ,
592+ inline = False
593+ )
594+
595+ # Create view with buttons
596+ view = discord .ui .View ()
597+
598+ if can_afford :
599+ confirm_button = discord .ui .Button (label = "Upgrade" , style = discord .ButtonStyle .green )
600+
601+ async def confirm_callback (interaction ):
602+ if interaction .user != ctx .author :
603+ return await interaction .response .send_message ("This isn't your upgrade!" , ephemeral = True )
604+
605+ # Verify balance again in case it changed
606+ fresh_balance = await db .get_bank_balance (user_id , guild_id )
607+ fresh_limit = await db .get_bank_limit (user_id , guild_id )
608+ fresh_cost = int (fresh_limit * 0.1 ) + base_cost
609+
610+ if fresh_balance < fresh_cost :
611+ error_embed = discord .Embed (
612+ description = "❌ Your bank balance changed and you can no longer afford this upgrade!" ,
613+ color = discord .Color .red ()
614+ )
615+ return await interaction .response .edit_message (embed = error_embed , view = None )
616+
617+ # Process the upgrade
618+ await db .update_bank (user_id , - fresh_cost , guild_id )
619+ await db .update_bank_limit (user_id , 5000 , guild_id ) # Increase by 5000
620+
621+ # Show new upgrade options
622+ new_embed , new_view = await create_upgrade_embed (user_id , guild_id )
623+ await interaction .response .edit_message (embed = new_embed , view = new_view )
624+
625+ confirm_button .callback = confirm_callback
626+ view .add_item (confirm_button )
627+
628+ cancel_button = discord .ui .Button (label = "Close" , style = discord .ButtonStyle .red )
629+
630+ async def cancel_callback (interaction ):
631+ if interaction .user != ctx .author :
632+ return await interaction .response .send_message ("This isn't your upgrade!" , ephemeral = True )
633+ await interaction .response .edit_message (content = "Bank upgrade closed." , embed = None , view = None )
634+
635+ cancel_button .callback = cancel_callback
636+ view .add_item (cancel_button )
637+
638+ return embed , view
636639
637- await ctx .send (embed = embed , view = view )
640+ embed , view = await create_upgrade_embed (ctx .author .id , ctx .guild .id )
641+ await ctx .reply (embed = embed , view = view )
638642
639643async def setup (bot ):
640644 await bot .add_cog (Economy (bot ))
0 commit comments