diff --git a/languages/locale_en.hpp b/languages/locale_en.hpp index 581c33b..fa610a7 100644 --- a/languages/locale_en.hpp +++ b/languages/locale_en.hpp @@ -1,19 +1,24 @@ // Bot info #define BOT_NAME "The Bartender Bot" -#define BOT_VERSION "v0.3-1" - +#define BOT_VERSION "v0.4" #define CURRENCY_NAME "Night Coin" // Buttons #define BUTTON_ACCEPT "Confirm" #define BUTTON_CANCEL "Cancel" +// Misc +#define REQUEST_CANCELLED "Your request has been cancelled. " RESPONSE_NO_CHARGE +#define RESPONSE_NO_CHARGE "You were not charged for this request." + +/// +/// COMMANDS +/// + // Command ping -#define COMMAND_PING "ping" #define COMMAND_PING_DESCRIPTION "Ping-pong test" // Command generate_report -#define COMMAND_GENERATE_REPORT "generate_report" #define COMMAND_GENERATE_REPORT_DESCRIPTION "Generate a fake news report" #define COMMAND_GENERATE_REPORT_ARGS_IMAGE_DESCRIPTION \ "Upload a background image to use (Only supports PNG, JPEG, and WEBP files)" @@ -21,16 +26,19 @@ "What is the headline?" #define COMMAND_GENERATE_REPORT_FAIL_NOT_SUPPORTED(filetype) \ "File type: " + filetype + \ - " is not allowed. Only PNG, JPEG, and WEBP are allowed!" + " is not supported. Only PNG, JPEG, and WEBP are allowed!" +#define COMMAND_GENERATE_REPORT_FAIL_IMAGE_DOWNLOAD \ + "Failed to download the background image! Aborting." RESPONSE_NO_CHARGE #define COMMAND_GENERATE_REPORT_FAIL_IMAGE_LOAD \ - "Failed to load the background image! Aborting. You were not changed for " \ - "this." -#define COMMAND_GENERATE_REPORT_CONFIRMATION_QUESTION(price) \ + "Failed to load the background image! Aborting." RESPONSE_NO_CHARGE +#define COMMAND_GENERATE_REPORT_CONFIRMATION_QUESTION(price, imageURL, \ + headline) \ "This image generation will cost you " + price + \ - " " CURRENCY_NAME "(s).\nAre you sure you want to continue?" + " " CURRENCY_NAME \ + "(s).\nAre you sure you want to continue?\nHeadline: " + \ + headline + " [image](" + imageURL + ")" // Command get_pfp -#define COMMAND_GET_PFP "get_pfp" #define COMMAND_GET_PFP_DESCRIPTION \ "Get someone elses profile picture as an image" #define COMMAND_GET_PFP_ARGS_USER \ @@ -48,7 +56,6 @@ ") and their [server profile picture](" + guildpfp + ")" // Command about -#define COMMAND_ABOUT "about" #define COMMAND_ABOUT_DESCRIPTION "Info about the bot" #define COMMAND_ABOUT_RESPONSE \ "## " BOT_NAME " " BOT_VERSION \ @@ -57,8 +64,6 @@ "[D++]() and tears." // Command balance/bal -#define COMMAND_BALANCE "balance" -#define COMMAND_BALANCE_SHORT "bal" #define COMMAND_BALANCE_DESCRIPTION "See someone's balance of " CURRENCY_NAME #define COMMAND_BALANCE_USER_DESCRIPTION \ "Leave this blank if you want to see your own balance" @@ -68,7 +73,6 @@ "<@!" + person + "> currently has " + balance + " " CURRENCY_NAME "(s)" // Command pay -#define COMMAND_PAY "pay" #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_AMOUNT_DESCRIPTION "How much do you want to pay" @@ -79,7 +83,6 @@ "Successfully sent <@!" + recipient + "> " + amount + " " CURRENCY_NAME "(s)!" // Command print_money -#define COMMAND_PRINT_MONEY "print_money" #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_FAIL_NO_PRIVILIEGE(recipient) \ @@ -89,7 +92,6 @@ recipient + "> !" // Command burn_money -#define COMMAND_BURN_MONEY "burn_money" #define COMMAND_BURN_DESCRIPTION \ "Allows the admin to burn money, burn baby burn!" #define COMMAND_BURN_ARGS_AMOUNT_DESCRIPTION "How much are we burning?" @@ -102,7 +104,6 @@ recipient + "> !" // Command money_leaderboard -#define COMMAND_MONEY_LEADERBOARD "money_leaderboard" #define COMMAND_MONEY_LEADERBOARD_DESCRIPTION \ "See who are the wealthiest members of the server, and who are... less " \ "fortunate." diff --git a/src/Base/Entry.cpp b/src/Base/Entry.cpp index 3721ddb..06dadde 100644 --- a/src/Base/Entry.cpp +++ b/src/Base/Entry.cpp @@ -3,6 +3,7 @@ #include "../Databases.hpp" #include +#include #include #include #include @@ -32,7 +33,15 @@ int main(int argc, char **argv) { event.reply("Could not find that command :("); }); - bot.on_button_click([&bot](const dpp::button_click_t &event) {}); + bot.on_button_click([&bot](const dpp::button_click_t &event) { + event.reply(dpp::ir_deferred_update_message, "processing"); + + auto component = Components.find(event.custom_id); + if (component != Components.end()) { + component->second(event, bot); + return; + } + }); bot.on_ready([&bot](const dpp::ready_t &event) { if (dpp::run_once()) { diff --git a/src/CommandManagement.cpp b/src/CommandManagement.cpp index 76d6da4..88d09b6 100644 --- a/src/CommandManagement.cpp +++ b/src/CommandManagement.cpp @@ -6,6 +6,8 @@ extern std::unordered_map> Commands; +extern std::unordered_map> + Components; void deleteCommands(const dpp::ready_t &event, dpp::cluster &bot) { // bot.guild_bulk_command_delete(GUILD); diff --git a/src/Commands.cpp b/src/Commands.cpp index 5c05b7b..ce0be66 100644 --- a/src/Commands.cpp +++ b/src/Commands.cpp @@ -3,6 +3,9 @@ #include "Commands/MoneyCommands.cpp" #include "Commands/OtherCommands.cpp" +// Component Responses +#include "Commands/Components/GenerativeComponents.cpp" + // Registry std::unordered_map> Commands{ {COMMAND_PING, commandPing}, @@ -15,3 +18,6 @@ std::unordered_map> Commands{ {COMMAND_MONEY_LEADERBOARD, commandMoneyLeaderboard}, {COMMAND_GET_PFP, commandGetPFP}, {COMMAND_GENERATE_REPORT, commandGenerateReport}}; + +std::unordered_map> Components{ + {COMPONENT_COMMAND_CANCEL, componentCancel}}; diff --git a/src/Commands/Components/GenerativeComponents.cpp b/src/Commands/Components/GenerativeComponents.cpp new file mode 100644 index 0000000..c3f2f81 --- /dev/null +++ b/src/Commands/Components/GenerativeComponents.cpp @@ -0,0 +1,6 @@ +#include "../../Common.hpp" +#include "../../Utility/CairoTools.hpp" +#include +#include + +void componentCancel(COMPONENT_ARGS) { event.edit_response(REQUEST_CANCELLED); } diff --git a/src/Commands/GenerativeCommands.cpp b/src/Commands/GenerativeCommands.cpp index 9baa3e6..d5df1b3 100644 --- a/src/Commands/GenerativeCommands.cpp +++ b/src/Commands/GenerativeCommands.cpp @@ -17,22 +17,30 @@ void commandGenerateReport(const dpp::slashcommand_t &event, auto fileType = supportedImageFileTypes.find(file.content_type); if (fileType != supportedImageFileTypes.end()) { + // Don't forget that its only funny if it is all in upper case + std::string headline = + std::get(event.get_parameter("headline")); + // Never seen this method before but looks awesome + std::transform(headline.begin(), headline.end(), headline.data(), + ::toupper); + dpp::message confirmRequest( event.command.channel_id, COMMAND_GENERATE_REPORT_CONFIRMATION_QUESTION( - std::to_string(COMMAND_GENERATE_REPORT_COST))); + std::to_string(COMMAND_GENERATE_REPORT_COST), file.url, headline)); + confirmRequest.add_component( dpp::component() .add_component(dpp::component() .set_label(BUTTON_ACCEPT) .set_type(dpp::cot_button) .set_style(dpp::component_style::cos_success) - .set_id("generate_report_confirm")) + .set_id(COMPONENT_GENERATE_REPORT_CONFIRM)) .add_component(dpp::component() .set_label(BUTTON_CANCEL) .set_type(dpp::cot_button) .set_style(dpp::component_style::cos_danger) - .set_id("generate_report_deny"))); + .set_id(COMPONENT_COMMAND_CANCEL))); event.edit_response(confirmRequest); } else { event.edit_response( diff --git a/src/Common.hpp b/src/Common.hpp index f775c3f..28e6254 100644 --- a/src/Common.hpp +++ b/src/Common.hpp @@ -1,6 +1,23 @@ #include "../settings.hpp" #define COMMAND_ARGS const dpp::slashcommand_t &event, dpp::cluster &bot +#define COMPONENT_ARGS const dpp::button_click_t &event, dpp::cluster &bot // Costs of commands #define COMMAND_GENERATE_REPORT_COST 2 + +// Command names +#define COMMAND_PING "ping" +#define COMMAND_GENERATE_REPORT "generate_report" +#define COMMAND_GET_PFP "get_pfp" +#define COMMAND_ABOUT "about" +#define COMMAND_BALANCE "balance" +#define COMMAND_BALANCE_SHORT "bal" +#define COMMAND_PAY "pay" +#define COMMAND_PRINT_MONEY "print_money" +#define COMMAND_BURN_MONEY "burn_money" +#define COMMAND_MONEY_LEADERBOARD "money_leaderboard" + +// Component names +#define COMPONENT_GENERATE_REPORT_CONFIRM "generate_report_confirm" +#define COMPONENT_COMMAND_CANCEL "cancel"