@@ -43,7 +43,33 @@ class BuyItem extends Command {
4343
4444 const item = store [ itemKey ] ;
4545 const itemCost = BigInt ( item . cost ) ;
46- let userCash = BigInt ( await db . get ( `servers.${ msg . guild . id } .users.${ msg . member . id } .economy.cash` ) ) ;
46+
47+ const [ economyRows ] = await this . client . db . execute (
48+ /* sql */ `
49+ SELECT
50+ *
51+ FROM
52+ economy_settings
53+ WHERE
54+ server_id = ?
55+ ` ,
56+ [ msg . guild . id ] ,
57+ ) ;
58+ const currencySymbol = economyRows [ 0 ] ?. symbol || '$' ;
59+
60+ const [ balanceRows ] = await this . client . db . execute (
61+ /* sql */ `
62+ SELECT
63+ cash
64+ FROM
65+ economy_balances
66+ WHERE
67+ server_id = ?
68+ AND user_id = ?
69+ ` ,
70+ [ msg . guild . id , msg . member . id ] ,
71+ ) ;
72+ const userCash = BigInt ( balanceRows [ 0 ] ?. cash ?? economyRows [ 0 ] ?. start_balance ?? 0 ) ;
4773 if ( userCash < itemCost * BigInt ( quantity ) ) return msg . reply ( 'You do not have enough money to buy this item.' ) ;
4874
4975 if ( item . stock && item . stock < quantity ) {
@@ -85,8 +111,20 @@ class BuyItem extends Command {
85111 }
86112
87113 // Deduct the cost from the user's cash
88- userCash = userCash - itemCost * BigInt ( quantity ) ;
89- await db . set ( `servers.${ msg . guild . id } .users.${ msg . member . id } .economy.cash` , userCash . toString ( ) ) ;
114+ const amount = itemCost * BigInt ( quantity ) ;
115+ await this . client . db . execute (
116+ /* sql */
117+ `
118+ INSERT INTO
119+ economy_balances (server_id, user_id, cash)
120+ VALUES
121+ (?, ?, ?) ON DUPLICATE KEY
122+ UPDATE cash = cash -
123+ VALUES
124+ (cash)
125+ ` ,
126+ [ msg . guild . id , msg . member . id , amount . toString ( ) ] ,
127+ ) ;
90128
91129 if ( ! item . inventory ) {
92130 if ( item . roleGiven ) {
@@ -118,12 +156,12 @@ class BuyItem extends Command {
118156 const memberCreated = DateTime . fromMillis ( msg . author . createdAt . getTime ( ) ) . toFormat ( 'MMMM dd, yyyy' ) ;
119157
120158 let replyMessage = item . replyMessage
121- . replace ( ' {member.id}' , msg . author . id )
122- . replace ( ' {member.username}' , msg . author . username )
123- . replace ( ' {member.tag}' , msg . author . tag )
124- . replace ( ' {member.mention}' , msg . author )
125- . replace ( ' {member.created}' , memberCreated )
126- . replace ( ' {member.created.duration}' , memberCreatedDuration ) ;
159+ . replace ( / \ {m e m b e r \ .i d \} / gi , msg . author . id )
160+ . replace ( / \ {m e m b e r \ .u s e r n a m e \} / gi , msg . author . username )
161+ . replace ( / \ {m e m b e r \ .t a g \} / gi , msg . author . tag )
162+ . replace ( / \ {m e m b e r \ .m e n t i o n \} / gi , msg . author . toString ( ) )
163+ . replace ( / \ {m e m b e r \ .c r e a t e d \} / gi , memberCreated )
164+ . replace ( / \ {m e m b e r \ .c r e a t e d \ .d u r a t i o n \} / gi , memberCreatedDuration ) ;
127165
128166 // Replace Server
129167 // Calculate the duration since the server was created
@@ -142,11 +180,11 @@ class BuyItem extends Command {
142180 const serverCreated = DateTime . fromMillis ( msg . guild . createdAt . getTime ( ) ) . toFormat ( 'MMMM dd, yyyy' ) ;
143181
144182 replyMessage = replyMessage
145- . replace ( ' {server.id}' , msg . guild . id )
146- . replace ( ' {server.name}' , msg . guild . name )
147- . replace ( ' {server.members}' , msg . guild . memberCount . toLocaleString ( ) )
148- . replace ( ' {server.created}' , serverCreated )
149- . replace ( ' {server.created.duration}' , serverCreatedDuration ) ;
183+ . replace ( / \ {s e r v e r \ .i d \} / gi , msg . guild . id )
184+ . replace ( / \ {s e r v e r \ .n a m e \} / gi , msg . guild . name )
185+ . replace ( / \ {s e r v e r \ .m e m b e r s \} / gi , msg . guild . memberCount . toLocaleString ( ) )
186+ . replace ( / \ {s e r v e r \ .c r e a t e d \} / gi , serverCreated )
187+ . replace ( / \ {s e r v e r \ .c r e a t e d \ .d u r a t i o n \} / gi , serverCreatedDuration ) ;
150188
151189 const role =
152190 this . client . util . getRole ( msg , item . roleGiven ) ||
@@ -170,12 +208,12 @@ class BuyItem extends Command {
170208 const roleCreated = DateTime . fromMillis ( role . createdAt . getTime ( ) ) . toFormat ( 'MMMM dd, yyyy' ) ;
171209
172210 replyMessage = replyMessage
173- . replace ( ' {role.id}' , role . id )
174- . replace ( ' {role.name}' , role . name )
175- . replace ( ' {role.mention}' , role )
176- . replace ( ' {role.members}' , role . members . size . toLocaleString ( ) )
177- . replace ( ' {role.created}' , roleCreated )
178- . replace ( ' {role.created.duration}' , roleCreatedDuration ) ;
211+ . replace ( / \ {r o l e \ .i d \} / gi , role . id )
212+ . replace ( / \ {r o l e \ .n a m e \} / gi , role . name )
213+ . replace ( / \ {r o l e \ .m e n t i o n \} / gi , role )
214+ . replace ( / \ {r o l e \ .m e m b e r s \} / gi , role . members . size . toLocaleString ( ) )
215+ . replace ( / \ {r o l e \ .c r e a t e d \} / gi , roleCreated )
216+ . replace ( / \ {r o l e \ .c r e a t e d \ .d u r a t i o n \} / gi , roleCreatedDuration ) ;
179217 }
180218 return msg . channel . send ( replyMessage ) ;
181219 }
@@ -205,7 +243,6 @@ class BuyItem extends Command {
205243
206244 await db . set ( `servers.${ msg . guild . id } .users.${ msg . member . id } .economy.inventory` , userInventory ) ;
207245
208- const currencySymbol = ( await db . get ( `servers.${ msg . guild . id } .economy.symbol` ) ) || '$' ;
209246 const itemCostQuantity = ( itemCost * BigInt ( quantity ) ) . toLocaleString ( ) ;
210247 const csCost = this . client . util . limitStringLength ( currencySymbol + itemCostQuantity , 0 , 700 ) ;
211248
0 commit comments