@@ -49,13 +49,14 @@ async def inventory(ctx):
4949
5050from  discord .ui  import  Button , Select , View 
5151@bot .slash_command () 
52- async  def  shop (ctx ):
52+ async  def  shop (ctx :  discord . ApplicationContext ):
5353    options  =  []
5454    for  item  in  ShopItem .objects :
5555        option  =  discord .SelectOption (label = item .item .name , description = item .item .price )
5656        options .append (option )
5757    menu  =  Select (placeholder = "Select an item for purchase" , options = options )
5858    async  def  on_select (interaction : discord .Interaction ):
59+         await  ctx .interaction .delete_original_message ()
5960        # we only have 1 value 
6061        itemName  =  menu .values [0 ]
6162        itemPrice  =  Item .objects .get (name = itemName ).price 
@@ -64,13 +65,32 @@ async def on_select(interaction: discord.Interaction):
6465        cancelButton  =  Button (style = discord .ButtonStyle .secondary , label = "Cancel" )
6566        confirmButton  =  Button (style = discord .ButtonStyle .success , label = "Purchase" )
6667
67-         async  def  on_confirm (interaction : discord .Interaction ):
68-             player  =  Player .objects .get (userId = interaction .user .id )
69-             player .wallet  -=  itemPrice 
70-             player .items .append (Item .objects .get (name = itemName ))
71-             player .save ()
72-             await  interaction .response .send_message (f"You purchased { itemName }   for { itemPrice }  " )
68+         async  def  on_cancel (interactione : discord .Interaction ):
69+             await  interaction .response .defer (ephemeral = False )
70+             await  interaction .delete_original_message ()
71+ 
72+         async  def  on_confirm (interactionne : discord .Interaction ):
73+             try :
74+                 player  =  Player .objects .get (userId = interactionne .user .id )
75+             except  DoesNotExist :
76+                 player  =  Player (userId = interactionne .user .id , displayName = interactionne .user .display_name , wallet = 0 , items = [])
77+                 player .save ()
78+             if  Item .objects .get (name = itemName ) in  player .items :
79+                 # the double underscore is like items.name 
80+                 await  interactionne .response .send_message (f"You already own { itemName }  " )
81+                 await  interaction .delete_original_message ()
82+             else :
83+                 if  player .wallet  <  itemPrice :
84+                     await  interactionne .response .send_message (f"You don't have enough money to buy { itemName }  " )
85+                     await  interaction .delete_original_message ()
86+                     return 
87+                 player .wallet  -=  itemPrice 
88+                 player .items .append (Item .objects .get (name = itemName ))
89+                 player .save ()
90+                 await  interactionne .response .send_message (f"You purchased { itemName }   for { itemPrice }  " )
91+                 await  interaction .delete_original_message ()
7392        confirmButton .callback  =  on_confirm 
93+         cancelButton .callback  =  on_cancel 
7494        view2  =  View ()
7595        view2 .add_item (cancelButton )
7696        view2 .add_item (confirmButton )
@@ -80,4 +100,17 @@ async def on_confirm(interaction: discord.Interaction):
80100    view .add_item (menu )
81101    await  ctx .respond (view = view )
82102
103+ @bot .slash_command (guild_ids = [804100748275220530 ]) 
104+ async  def  sparechange (ctx : discord .ApplicationContext , amount : int  =  None ):
105+     try :
106+         player  =  Player .objects .get (userId = ctx .author .id )
107+     except  DoesNotExist :
108+         player  =  Player (userId = ctx .author .id , displayName = ctx .author .name , wallet = 0 , items = [])
109+         player .save ()
110+     # if they didn't pass in an amount, the condition will fail and it'll give 10k 
111+     player .wallet  +=  amount  or  10000 
112+     player .save ()
113+     embed  =  discord .Embed (title = "Money deposited" , description = f"{ amount  or  10000 }   has been deposited into your wallet" )
114+     await  ctx .respond (embed = embed )
115+ 
83116bot .run (token )
0 commit comments