Skip to content

Commit 8359f84

Browse files
committed
Move economy balance to mysql, misc bug fixes
1 parent 2ffaa0f commit 8359f84

36 files changed

+1296
-626
lines changed

base/Command.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ class Command {
1414
permLevel = 'User',
1515
nsfw = false,
1616
requiredArgs = 0,
17+
cooldown = 0,
1718
},
1819
) {
1920
this.client = client;
20-
this.conf = { enabled, guildOnly, aliases, permLevel, nsfw, requiredArgs };
21+
this.conf = { enabled, guildOnly, aliases, permLevel, nsfw, requiredArgs, cooldown };
2122
this.help = { name, description, longDescription, category, usage, examples };
2223
}
2324
}

commands/Administrator/auto-role.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
const Command = require('../../base/Command.js');
22
const { EmbedBuilder } = require('discord.js');
3-
const { QuickDB } = require('quick.db');
4-
const db = new QuickDB();
53

64
class AutoRole extends Command {
75
constructor(client) {
@@ -14,7 +12,7 @@ class AutoRole extends Command {
1412
usage: 'auto-role <add | remove | list> [role or page]',
1513
aliases: ['autorole', 'autoroles'],
1614
permLevel: 'Administrator',
17-
examples: ['auto-role add @member', 'auto-role remove Moderator'],
15+
examples: ['auto-role add @Moderator', 'auto-role remove Moderator'],
1816
requiredArgs: 1,
1917
guildOnly: true,
2018
});
@@ -119,7 +117,20 @@ class AutoRole extends Command {
119117

120118
// Update the database if roles were removed
121119
if (validRoles.length !== autoRoles.length) {
122-
await db.set(`servers.${msg.guild.id}.autoRoles`, validRoles);
120+
await this.client.db.execute(
121+
/* sql */
122+
`
123+
INSERT INTO
124+
auto_roles (server_id, roles)
125+
VALUES
126+
(?, ?) ON DUPLICATE KEY
127+
UPDATE roles =
128+
VALUES
129+
(roles)
130+
`,
131+
[msg.guild.id, JSON.stringify(validRoles)],
132+
);
133+
123134
embed
124135
.setDescription('No valid auto-roles remain in the server. The list has been updated.')
125136
.setColor(msg.settings.embedColor);

commands/Economy/add-money-role.js

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
const Command = require('../../base/Command.js');
22
const { stripIndents } = require('common-tags');
33
const { EmbedBuilder } = require('discord.js');
4-
const { QuickDB } = require('quick.db');
5-
const db = new QuickDB();
64

75
class AddMoneyRole extends Command {
86
constructor(client) {
@@ -81,21 +79,37 @@ class AddMoneyRole extends Command {
8179
if (type === 'bank') {
8280
members.forEach(async (mem) => {
8381
if (!mem.user.bot) {
84-
const current = BigInt((await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.bank`)) || 0);
85-
const newAmount = current + amount;
86-
await db.set(`servers.${msg.guild.id}.users.${mem.id}.economy.bank`, newAmount.toString());
82+
await this.client.db.execute(
83+
/* sql */
84+
`
85+
INSERT INTO
86+
economy_balances (server_id, user_id, bank)
87+
VALUES
88+
(?, ?, ?) ON DUPLICATE KEY
89+
UPDATE bank = bank +
90+
VALUES
91+
(bank)
92+
`,
93+
[msg.guild.id, mem.id, amount.toString()],
94+
);
8795
}
8896
});
8997
} else {
9098
members.forEach(async (mem) => {
9199
if (!mem.user.bot) {
92-
const cash = BigInt(
93-
(await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.cash`)) ||
94-
economyRows[0]?.start_balance ||
95-
0,
100+
await this.client.db.execute(
101+
/* sql */
102+
`
103+
INSERT INTO
104+
economy_balances (server_id, user_id, cash)
105+
VALUES
106+
(?, ?, ?) ON DUPLICATE KEY
107+
UPDATE cash = cash +
108+
VALUES
109+
(cash)
110+
`,
111+
[msg.guild.id, mem.id, amount.toString()],
96112
);
97-
const newAmount = cash + amount;
98-
await db.set(`servers.${msg.guild.id}.users.${mem.id}.economy.cash`, newAmount.toString());
99113
}
100114
});
101115
}

commands/Economy/add-money.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
const Command = require('../../base/Command.js');
22
const { EmbedBuilder } = require('discord.js');
3-
const { QuickDB } = require('quick.db');
4-
const db = new QuickDB();
53

64
class AddMoney extends Command {
75
constructor(client) {
@@ -73,15 +71,33 @@ class AddMoney extends Command {
7371

7472
amount = BigInt(amount);
7573
if (type === 'bank') {
76-
const bank = BigInt((await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.bank`)) || 0);
77-
const newAmount = bank + amount;
78-
await db.set(`servers.${msg.guild.id}.users.${mem.id}.economy.bank`, newAmount.toString());
74+
await this.client.db.execute(
75+
/* sql */
76+
`
77+
INSERT INTO
78+
economy_balances (server_id, user_id, bank)
79+
VALUES
80+
(?, ?, ?) ON DUPLICATE KEY
81+
UPDATE bank = bank +
82+
VALUES
83+
(bank)
84+
`,
85+
[msg.guild.id, mem.id, amount.toString()],
86+
);
7987
} else {
80-
const cash = BigInt(
81-
(await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.cash`)) || economyRows[0]?.start_balance || 0,
88+
await this.client.db.execute(
89+
/* sql */
90+
`
91+
INSERT INTO
92+
economy_balances (server_id, user_id, cash)
93+
VALUES
94+
(?, ?, ?) ON DUPLICATE KEY
95+
UPDATE cash = cash +
96+
VALUES
97+
(cash)
98+
`,
99+
[msg.guild.id, msg.author.id, amount.toString()],
82100
);
83-
const newAmount = cash + amount;
84-
await db.set(`servers.${msg.guild.id}.users.${mem.id}.economy.cash`, newAmount.toString());
85101
}
86102

87103
let csAmount = currencySymbol + amount.toLocaleString();

commands/Economy/balance.js

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
const Command = require('../../base/Command.js');
22
const { EmbedBuilder } = require('discord.js');
3-
const { QuickDB } = require('quick.db');
4-
const db = new QuickDB();
53

64
class Balance extends Command {
75
constructor(client) {
@@ -55,11 +53,21 @@ class Balance extends Command {
5553
[msg.guild.id],
5654
);
5755

58-
const cash = BigInt(
59-
(await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.cash`)) || economyRows[0]?.start_balance || 0,
56+
const [balanceRows] = await this.client.db.execute(
57+
/* sql */ `
58+
SELECT
59+
cash,
60+
bank
61+
FROM
62+
economy_balances
63+
WHERE
64+
server_id = ?
65+
AND user_id = ?
66+
`,
67+
[msg.guild.id, mem.id],
6068
);
61-
62-
const bank = BigInt((await db.get(`servers.${msg.guild.id}.users.${mem.id}.economy.bank`)) || 0);
69+
const cash = BigInt(balanceRows[0]?.cash ?? economyRows[0]?.start_balance ?? 0);
70+
const bank = BigInt(balanceRows[0]?.bank ?? 0);
6371
const netWorth = cash + bank;
6472

6573
const currencySymbol = economyRows[0]?.symbol || '$';
@@ -86,31 +94,32 @@ class Balance extends Command {
8694
let csNetWorthAmount = formatCurrency(netWorth, currencySymbol);
8795
csNetWorthAmount = this.client.util.limitStringLength(csNetWorthAmount, 0, 1024);
8896

89-
// Fetch all users data to find the rank
90-
const usersData = (await db.get(`servers.${msg.guild.id}.users`)) || {};
91-
const leaderboard = [];
92-
93-
// Cache users and add them to the leaderboard
94-
for (const userId in usersData) {
95-
try {
96-
const user = await this.client.users.cache.get(userId);
97-
if (user) {
98-
const userCash = BigInt(usersData[userId]?.economy?.cash || 0);
99-
const userBank = BigInt(usersData[userId]?.economy?.bank || 0);
100-
const userMoney = userCash + userBank;
101-
leaderboard.push({ user: user.tag, userId: user.id, money: userMoney });
102-
}
103-
} catch (err) {
104-
this.client.logger.error(`Balance Leaderboard: ${err}`);
105-
}
106-
}
107-
108-
// Sort the leaderboard
109-
const sortedLeaderboard = leaderboard.sort((a, b) => (b.money > a.money ? 1 : -1));
97+
const [rows] = await this.client.db.execute(
98+
/* sql */
99+
`
100+
SELECT
101+
rank
102+
FROM
103+
(
104+
SELECT
105+
user_id,
106+
RANK() OVER (
107+
ORDER BY
108+
(cash + bank) DESC
109+
) AS rank
110+
FROM
111+
economy_balances
112+
WHERE
113+
server_id = ?
114+
) ranked
115+
WHERE
116+
user_id = ?
117+
`,
118+
[msg.guild.id, mem.id],
119+
);
110120

111-
// Find the user's rank
112-
const userRank = sortedLeaderboard.findIndex((entry) => entry.userId === mem.id) + 1;
113-
const userRankDisplay = userRank > 0 ? `Leaderboard Rank: ${getOrdinalSuffix(userRank)}` : 'Not on Leaderboard';
121+
const userRank = rows[0]?.rank ?? null;
122+
const userRankDisplay = userRank ? `Leaderboard Rank: ${getOrdinalSuffix(userRank)}` : 'Not on Leaderboard';
114123

115124
embed
116125
.setAuthor({ name: mem.username, iconURL: mem.displayAvatarURL() })

commands/Economy/blackjack.js

Lines changed: 68 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
const { EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder, MessageFlags } = require('discord.js');
22
const { Blackjack } = require('blackjack-n-deck');
33
const Command = require('../../base/Command.js');
4-
const { QuickDB } = require('quick.db');
5-
const db = new QuickDB();
64

75
class BlackJack extends Command {
86
constructor(client) {
@@ -113,11 +111,19 @@ class BlackJack extends Command {
113111
);
114112
const currencySymbol = economyRows[0]?.symbol || '$';
115113

116-
const cash = BigInt(
117-
(await db.get(`servers.${msg.guild.id}.users.${msg.member.id}.economy.cash`)) ||
118-
economyRows[0]?.start_balance ||
119-
0,
114+
const [BalanceRows] = await this.client.db.execute(
115+
/* sql */ `
116+
SELECT
117+
cash
118+
FROM
119+
economy_balances
120+
WHERE
121+
server_id = ?
122+
AND user_id = ?
123+
`,
124+
[msg.guild.id, msg.member.id],
120125
);
126+
const cash = BigInt(BalanceRows[0]?.cash || economyRows[0]?.start_balance || 0);
121127

122128
const Arguments = args.join(' ').toLowerCase();
123129

@@ -195,7 +201,20 @@ class BlackJack extends Command {
195201
]);
196202

197203
const newAmount = cash + winAmount;
198-
await db.set(`servers.${msg.guild.id}.users.${msg.member.id}.economy.cash`, newAmount.toString());
204+
await this.client.db.execute(
205+
/* sql */
206+
`
207+
INSERT INTO
208+
economy_balances (server_id, user_id, cash)
209+
VALUES
210+
(?, ?, ?) ON DUPLICATE KEY
211+
UPDATE cash =
212+
VALUES
213+
(cash)
214+
`,
215+
[msg.guild.id, msg.member.id, newAmount.toString()],
216+
);
217+
199218
return msg.channel.send({ embeds: [embed] });
200219
}
201220

@@ -217,7 +236,7 @@ class BlackJack extends Command {
217236
return embed;
218237
}
219238

220-
async function winCheck(selected) {
239+
async function winCheck(client, selected) {
221240
if (selected === 'hit') {
222241
bj.hit();
223242
} else if (selected === 'stand') {
@@ -228,22 +247,55 @@ class BlackJack extends Command {
228247

229248
const amount = BigInt(bj.bet);
230249
if (win) {
231-
const newAmount = cash + amount;
232-
await db.set(`servers.${msg.guild.id}.users.${msg.member.id}.economy.cash`, newAmount.toString());
250+
await client.db.execute(
251+
/* sql */
252+
`
253+
INSERT INTO
254+
economy_balances (server_id, user_id, cash)
255+
VALUES
256+
(?, ?, ?) ON DUPLICATE KEY
257+
UPDATE cash = cash +
258+
VALUES
259+
(cash)
260+
`,
261+
[msg.guild.id, msg.member.id, amount.toString()],
262+
);
233263

234264
let csAmount = currencySymbol + amount.toLocaleString();
235265
csAmount = csAmount.length > 1024 ? csAmount.slice(0, 1021) + '...' : csAmount;
236266
return cardEmbed(`Result: You win ${csAmount}`);
237267
} else if (blackjack) {
238-
const newAmount = cash + amount;
239-
await db.set(`servers.${msg.guild.id}.users.${msg.member.id}.economy.cash`, newAmount.toString());
268+
await client.db.execute(
269+
/* sql */
270+
`
271+
INSERT INTO
272+
economy_balances (server_id, user_id, cash)
273+
VALUES
274+
(?, ?, ?) ON DUPLICATE KEY
275+
UPDATE cash = cash +
276+
VALUES
277+
(cash)
278+
`,
279+
[msg.guild.id, msg.member.id, amount.toString()],
280+
);
240281

241282
let csAmount = currencySymbol + amount.toLocaleString();
242283
csAmount = csAmount.length > 1024 ? csAmount.slice(0, 1021) + '...' : csAmount;
243284
return cardEmbed(`Result: BlackJack, you win ${csAmount}`);
244285
} else if (bust) {
245-
const newAmount = cash - amount;
246-
await db.set(`servers.${msg.guild.id}.users.${msg.member.id}.economy.cash`, newAmount.toString());
286+
await client.db.execute(
287+
/* sql */
288+
`
289+
INSERT INTO
290+
economy_balances (server_id, user_id, cash)
291+
VALUES
292+
(?, ?, ?) ON DUPLICATE KEY
293+
UPDATE cash = cash -
294+
VALUES
295+
(cash)
296+
`,
297+
[msg.guild.id, msg.member.id, amount.toString()],
298+
);
247299

248300
let csAmount = currencySymbol + amount.toLocaleString();
249301
csAmount = csAmount.length > 1024 ? csAmount.slice(0, 1021) + '...' : csAmount;
@@ -297,7 +349,7 @@ class BlackJack extends Command {
297349
continue;
298350
}
299351

300-
const embed = await winCheck(selected);
352+
const embed = await winCheck(this.client, selected);
301353
if (gameOver) {
302354
row.components[0].setDisabled(true);
303355
row.components[1].setDisabled(true);
@@ -311,7 +363,7 @@ class BlackJack extends Command {
311363
.delete()
312364
.catch(() => {});
313365

314-
const embed = await winCheck(selected);
366+
const embed = await winCheck(this.client, selected);
315367
if (gameOver) {
316368
row.components[0].setDisabled(true);
317369
row.components[1].setDisabled(true);

0 commit comments

Comments
 (0)