diff --git a/src/01_basics/03_private_messages/src/main.cpp b/src/01_basics/03_private_messages/src/main.cpp index 454ff30..960bcc0 100644 --- a/src/01_basics/03_private_messages/src/main.cpp +++ b/src/01_basics/03_private_messages/src/main.cpp @@ -1,18 +1,81 @@ +#include #include #include #include #include +#include +#include +#include +#include #include int main() { dotenv::init(); - std::string botToken = std::getenv("DISCORD_BOT"); + std::string botToken = std::getenv("DISCORD_TOKEN"); + if (botToken.empty()) { + std::cout + << "Failed to load the discord token from .env or the environment" + << std::endl; + exit(EXIT_FAILURE); + } dpp::cluster bot(botToken); bot.on_log(dpp::utility::cout_logger()); + bot.on_slashcommand([&bot](const dpp::slashcommand_t& event) { + if (event.command.get_command_name() == "pm") { + dpp::snowflake user; + + if (event.get_parameter("user").index() == 0) { + user = event.command.get_issuing_user().id; + } else { + user = std::get(event.get_parameter("user")); + } + + bot.direct_message_create( + user, dpp::message("Here's a private message!"), + [event, user](const dpp::confirmation_callback_t& callback) { + if (callback.is_error()) { + if (user == event.command.get_issuing_user().id) { + event.reply( + dpp::message("I couldnt send you a message.") + .set_flags(dpp::m_ephemeral)); + } else { + event.reply( + dpp::message( + "I couldnt send a message to that user. " + "Please check that is a valid user.") + .set_flags(dpp::m_ephemeral)); + } + return; + } + + if (user == event.command.get_issuing_user().id) { + event.reply( + dpp::message("I've sent you a private message") + .set_flags(dpp::m_ephemeral)); + } else { + event.reply( + dpp::message( + "I've sent a private message to that user.") + .set_flags(dpp::m_ephemeral)); + } + }); + } + }); + + bot.on_ready([&bot](const dpp::ready_t& event) { + if (dpp::run_once()) { + dpp::slashcommand command("pm", "Send a private message.", + bot.me.id); + command.add_option(dpp::command_option( + dpp::co_mentionable, "user", "The user to message", false)); + bot.global_command_create(command); + } + }); + bot.start(dpp::st_wait); return 0;