diff --git a/CMakeLists.txt b/CMakeLists.txt index b11bf01..d797251 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,3 +34,4 @@ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/04_adding_files") add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/05_webhooks") add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/06_callbacks") add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/07_cache") +add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/08_listening_to_messages") diff --git a/src/01_basics/08_listening_to_messages/CMakeLists.txt b/src/01_basics/08_listening_to_messages/CMakeLists.txt new file mode 100644 index 0000000..6b2ce4f --- /dev/null +++ b/src/01_basics/08_listening_to_messages/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.28) +project(dppbots) +set(example_name "01_08_listening_to_messages") +message("Setting up ${example_name}") +add_executable(${example_name} "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp") +target_include_directories(${example_name} PUBLIC + "${dpp_SOURCE_DIR}/include" + "${dotenv-cpp_SOURCE_DIR}/include/laserpants" + +) +target_link_libraries(${example_name} + dpp + dotenv +) +SET_OUTPUT_NAMES(${example_name}) diff --git a/src/01_basics/08_listening_to_messages/src/main.cpp b/src/01_basics/08_listening_to_messages/src/main.cpp new file mode 100644 index 0000000..30900e9 --- /dev/null +++ b/src/01_basics/08_listening_to_messages/src/main.cpp @@ -0,0 +1,44 @@ +#include +#include +#include + +#include +#include + +#include "dotenv.h" + +// Please note: +// Discord made message content a privileged intent in August 2022. +// Directly pulling the message content and using prefixes for commands is +// generally an older technique for running bot commands. Nowadays it is +// recommanded to use slash commands, which is covered in 02_01. + +int main() { + // Load the .env into the environment + dotenv::init(); + // Make sure the DISCORD_TOKEN env var exists + if (!std::getenv("DISCORD_TOKEN")) { + std::cout << "Failed to get DISCORD_TOKEN from .env or environment" + << std::endl; + exit(EXIT_FAILURE); + } + // Load in the bot token from the env + std::string botToken = std::getenv("DISCORD_TOKEN"); + + // Create the bot + dpp::cluster bot(botToken, dpp::i_default_intents | dpp::i_message_content); + + // Create a lambda for the on_message_create event. + bot.on_message_create([](const dpp::message_create_t& event) { + // Filter through the message content + if (event.msg.content.find("bad word") != std::string::npos) { + event.reply("That is not allowed here. Please, mind you language.", + true); + } + }); + + // Start the bot + bot.start(dpp::st_wait); + + return 0; +}