Added leaderboard for money

This commit is contained in:
2025-07-19 04:13:58 +03:00
parent a73e25a8b0
commit 24c82ee668
4 changed files with 54 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
#define CURRENCY_NAME "Night Coin" #define CURRENCY_NAME "Night Coin"
// Command balance/bal
#define COMMAND_BALANCE_DESCRIPTION "See someone's balance of " CURRENCY_NAME #define COMMAND_BALANCE_DESCRIPTION "See someone's balance of " CURRENCY_NAME
#define COMMAND_BALANCE_USER_DESCRIPTION \ #define COMMAND_BALANCE_USER_DESCRIPTION \
"Leave this blank if you want to see your own balance" "Leave this blank if you want to see your own balance"
@@ -8,6 +9,7 @@
#define COMMAND_BALANCE_SOMEONE_ELSE_RESPONSE(person, balance) \ #define COMMAND_BALANCE_SOMEONE_ELSE_RESPONSE(person, balance) \
"<@!" + person + "> currently has " + balance + " " CURRENCY_NAME "(s)" "<@!" + person + "> currently has " + balance + " " CURRENCY_NAME "(s)"
// Command pay
#define COMMAND_PAY_DESCRIPTION "Send someone some amount of " CURRENCY_NAME "s" #define COMMAND_PAY_DESCRIPTION "Send someone some amount of " CURRENCY_NAME "s"
#define COMMAND_PAY_ARGS_USER_DESCRIPTION "Who do you want to pay" #define COMMAND_PAY_ARGS_USER_DESCRIPTION "Who do you want to pay"
#define COMMAND_PAY_ARGS_AMOUNT_DESCRIPTION "How much do you want to pay" #define COMMAND_PAY_ARGS_AMOUNT_DESCRIPTION "How much do you want to pay"
@@ -17,6 +19,7 @@
#define COMMAND_PAY_SUCCESS(recipient, amount) \ #define COMMAND_PAY_SUCCESS(recipient, amount) \
"Successfully sent <@!" + recipient + "> " + amount + " " CURRENCY_NAME "(s)!" "Successfully sent <@!" + recipient + "> " + amount + " " CURRENCY_NAME "(s)!"
// Command print_money
#define COMMAND_PRINT_DESCRIPTION "Allows the admin to print money on-demand" #define COMMAND_PRINT_DESCRIPTION "Allows the admin to print money on-demand"
#define COMMAND_PRINT_ARGS_AMOUNT_DESCRIPTION "How much are we printing boss?" #define COMMAND_PRINT_ARGS_AMOUNT_DESCRIPTION "How much are we printing boss?"
#define COMMAND_PRINT_FAIL_NO_PRIVILIEGE(recipient) \ #define COMMAND_PRINT_FAIL_NO_PRIVILIEGE(recipient) \
@@ -25,6 +28,7 @@
"Successfully printed " + amount + " " CURRENCY_NAME "(s) to <@!" + \ "Successfully printed " + amount + " " CURRENCY_NAME "(s) to <@!" + \
recipient + "> !" recipient + "> !"
// Command burn_money
#define COMMAND_BURN_DESCRIPTION \ #define COMMAND_BURN_DESCRIPTION \
"Allows the admin to burn money, burn baby burn!" "Allows the admin to burn money, burn baby burn!"
#define COMMAND_BURN_ARGS_AMOUNT_DESCRIPTION "How much are we burning?" #define COMMAND_BURN_ARGS_AMOUNT_DESCRIPTION "How much are we burning?"
@@ -35,3 +39,12 @@
#define COMMAND_BURN_SUCCESS(recipient, amount) \ #define COMMAND_BURN_SUCCESS(recipient, amount) \
"Successfully burned " + amount + " " CURRENCY_NAME "(s) to <@!" + \ "Successfully burned " + amount + " " CURRENCY_NAME "(s) to <@!" + \
recipient + "> !" recipient + "> !"
// Command money_leaderboard
#define COMMAND_MONEY_LEADERBOARD_DESCRIPTION \
"See who are the wealthiest members of the server, and who are... less " \
"fortunate."
#define COMMAND_MONEY_LEADERBOARD_TEXT \
"## Here are the top 15 most wealthiest people in the server.\n-# Note: if " \
"you don't see yourself here it is either due to never interacting with " \
"the bot, or having too low of a balance.\n"

View File

@@ -5,6 +5,7 @@
#include <dpp/dispatcher.h> #include <dpp/dispatcher.h>
#include <dpp/exception.h> #include <dpp/exception.h>
#include <dpp/snowflake.h> #include <dpp/snowflake.h>
#include <sstream>
#include <string> #include <string>
#include <variant> #include <variant>
@@ -74,6 +75,38 @@ void commandBurnMoney(const dpp::slashcommand_t &event) {
COMMAND_BURN_SUCCESS(std::to_string(ADMIN_ID), std::to_string(amount))); COMMAND_BURN_SUCCESS(std::to_string(ADMIN_ID), std::to_string(amount)));
} }
void commandMoneyLeaderboard(const dpp::slashcommand_t &event) {
std::string result;
std::stringstream replyStream;
execSQL("SELECT * FROM MONEY ORDER BY CASH DESC LIMIT 15;", &result);
replyStream << COMMAND_MONEY_LEADERBOARD_TEXT;
// AI code starts here
std::stringstream ss(result);
std::string token;
uint8_t rank = 1;
while (std::getline(ss, token, ';')) {
if (token.find("UID:") == 0) {
std::string uid = token.substr(4); // Remove "UID:"
// Get the next token (CASH)
if (std::getline(ss, token, ';')) {
std::string cash = token.substr(5); // Remove "CASH:"
replyStream << std::to_string(rank) << ". <@!" << uid << "> - " << cash
<< " " << CURRENCY_NAME << "(s)"
<< "\n";
rank++;
}
}
}
// AI code ends here
// I hate parsing strings, thank you AI
event.reply(replyStream.str());
}
/// ///
/// HELPER INLINE METHODS /// HELPER INLINE METHODS
/// ///

View File

@@ -45,4 +45,9 @@ void createCommands(const dpp::ready_t &event, dpp::cluster &bot) {
COMMAND_BURN_ARGS_AMOUNT_DESCRIPTION, true) COMMAND_BURN_ARGS_AMOUNT_DESCRIPTION, true)
.set_min_value(1)), .set_min_value(1)),
GUILD); GUILD);
bot.guild_command_create(
dpp::slashcommand("money_leaderboard",
COMMAND_MONEY_LEADERBOARD_DESCRIPTION, bot.me.id),
GUILD);
} }

View File

@@ -10,6 +10,7 @@ void commandBalance(const dpp::slashcommand_t &event);
void commandPay(const dpp::slashcommand_t &event); void commandPay(const dpp::slashcommand_t &event);
void commandPrintMoney(const dpp::slashcommand_t &event); void commandPrintMoney(const dpp::slashcommand_t &event);
void commandBurnMoney(const dpp::slashcommand_t &event); void commandBurnMoney(const dpp::slashcommand_t &event);
void commandMoneyLeaderboard(const dpp::slashcommand_t &event);
// Inline helpers // Inline helpers
inline void increaseFromUsersBalance(const dpp::snowflake userid, inline void increaseFromUsersBalance(const dpp::snowflake userid,
@@ -28,4 +29,5 @@ inline std::unordered_map<std::string,
{"bal", commandBalance}, {"bal", commandBalance},
{"pay", commandPay}, {"pay", commandPay},
{"print_money", commandPrintMoney}, {"print_money", commandPrintMoney},
{"burn_money", commandBurnMoney}}; {"burn_money", commandBurnMoney},
{"money_leaderboard", commandMoneyLeaderboard}};