Compare commits

..

2 Commits

Author SHA1 Message Date
4451bc3ff6 01 - 04
Some checks failed
Build / Build (push) Has been cancelled
2026-06-06 20:31:28 -04:00
e750ead7b2 Rework env loading + comments 2026-06-06 20:08:53 -04:00
6 changed files with 178 additions and 5 deletions

View File

@@ -21,3 +21,4 @@ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/00_project")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/01_first_bot")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/02_embeds")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/03_private_messages")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/01_basics/04_adding_files")

View File

@@ -7,8 +7,16 @@
#include <iostream>
int main() {
// Load in the .env file into the environment
// Load the .env file into the environment
dotenv::init();
// Make sure the DISCORD_TOKEN was loaded
if (!std::getenv("DISCORD_TOKEN")) {
std::cout
<< "Failed to load the discord token from .env or the environment"
<< std::endl;
exit(EXIT_FAILURE);
}
// Get the bot token
std::string botToken = std::getenv("DISCORD_TOKEN");
std::cout << "Using discord bot token: " << botToken << std::endl;

View File

@@ -9,9 +9,16 @@
#include <cstdlib>
int main() {
// Load in the .env file
// Load the .env file into the environment
dotenv::init();
// Get the discord token from the environment
// Check to make sure the token was loaded
if (!std::getenv("DISCORD_TOKEN")) {
std::cout
<< "Failed to load the discord token from .env or the environment"
<< std::endl;
exit(EXIT_FAILURE);
}
// Load in the token
std::string botToken = std::getenv("DISCORD_TOKEN");
// Create a bot cluster

View File

@@ -11,33 +11,55 @@
#include <cstdlib>
int main() {
// Load in the .env file
dotenv::init();
std::string botToken = std::getenv("DISCORD_TOKEN");
if (botToken.empty()) {
// Check to make sure the token was loaded
if (!std::getenv("DISCORD_TOKEN")) {
std::cout
<< "Failed to load the discord token from .env or the environment"
<< std::endl;
exit(EXIT_FAILURE);
}
// Load in the token into a string
std::string botToken = std::getenv("DISCORD_TOKEN");
// Create the bot
dpp::cluster bot(botToken);
// Setup a default cout_logger
bot.on_log(dpp::utility::cout_logger());
// Setup a lamda for the on_slashcommand
bot.on_slashcommand([&bot](const dpp::slashcommand_t& event) {
// Filter for the /pm slashcommand
if (event.command.get_command_name() == "pm") {
// Discord stores all objects through a reference called a
// "snowflake"
dpp::snowflake user;
if (event.get_parameter("user").index() == 0) {
// If the user parameter wasn't passed, just get the user that
// issued the command
user = event.command.get_issuing_user().id;
} else {
// Get the value of the user parameter
user = std::get<dpp::snowflake>(event.get_parameter("user"));
}
// Create a direct message
bot.direct_message_create(
// Define the user you're sending the message to, aswell as the
// message
user, dpp::message("Here's a private message!"),
// Once the request has been sent to discord, a callback can be
// specified to handle any errors or anything related to the
// message
[event, user](const dpp::confirmation_callback_t& callback) {
// Check to make sure there wasnt an error sending the
// message
if (callback.is_error()) {
// Reply back with a message saying the direct message
// failed to send
if (user == event.command.get_issuing_user().id) {
event.reply(
dpp::message("I couldnt send you a message.")
@@ -52,6 +74,8 @@ int main() {
return;
}
// In the case the direct message was able to be sent, send
// a confirmation message
if (user == event.command.get_issuing_user().id) {
event.reply(
dpp::message("I've sent you a private message")
@@ -66,16 +90,21 @@ int main() {
}
});
// Define a callback for the on_ready
bot.on_ready([&bot](const dpp::ready_t& event) {
if (dpp::run_once<struct register_bot_commands>()) {
// Create the /pm slashcommand
dpp::slashcommand command("pm", "Send a private message.",
bot.me.id);
// Add the "user" option to the command
command.add_option(dpp::command_option(
dpp::co_mentionable, "user", "The user to message", false));
// Register the command with discord
bot.global_command_create(command);
}
});
// Start the bot
bot.start(dpp::st_wait);
return 0;

View File

@@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.28)
project(dppbots)
set(example_name "01_04_adding_files")
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})

View File

@@ -0,0 +1,113 @@
#include <appcommand.h>
#include <cluster.h>
#include <dispatcher.h>
#include <dotenv/dotenv.h>
#include <dpp.h>
#include <once.h>
#include <queues.h>
#include <utility.h>
#include <cstdlib>
#include <iostream>
int main() {
// Load the .env file into the environment
dotenv::init();
// Make sure the DISCORD_TOKEN was loaded in
if (!std::getenv("DISCORD_TOKEN")) {
std::cout
<< "Failed to load the discord token from .env or the environment"
<< std::endl;
exit(EXIT_FAILURE);
}
// Load in the token
std::string botToken = std::getenv("DISCORD_TOKEN");
// Create the bot
dpp::cluster bot(botToken);
// Setup on_log to use a default cout_logger
bot.on_log(dpp::utility::cout_logger());
bot.on_slashcommand([&bot](const dpp::slashcommand_t& event) {
if (event.command.get_command_name() == "file") {
// Create the message
dpp::message msg(event.command.channel_id,
"Hey there, I've got a file for you!");
// Add the "README.md" file to the message
msg.add_file("README.md", dpp::utility::read_file("README.md"));
// Send the message
event.reply(msg);
}
// Handle the external command
if (event.command.get_command_name() == "external") {
bot.request("https://dpp.dev/DPP-Logo.png", dpp::m_get,
[event](const dpp::http_request_completion_t&
httpRequestCompletion) {
// Create the message
dpp::message msg(event.command.channel_id,
"Heres an external image!");
// Make sure the http request was completed
if (httpRequestCompletion.status == 200) {
// Add the body of the request to the msg
msg.add_file("logo.png",
httpRequestCompletion.body);
}
// Send the message
event.reply(msg);
});
}
// Handle the embed command
if (event.command.get_command_name() == "embed") {
bot.request("https://dpp.dev/DPP-Logo.png", dpp::m_get,
[event](const dpp::http_request_completion_t&
httpRequestCompletion) {
// Create the message
dpp::message msg(event.command.channel_id, "");
// Make sure the http request completed
if (httpRequestCompletion.status == 200) {
// Add the file to the message
msg.add_file("logo.png",
httpRequestCompletion.body);
// Create the embed
dpp::embed embed;
// Set the image for the embed as the image
// added above
embed.set_image("attachment://logo.png");
// Add the embed to the message
msg.add_embed(embed);
}
// Send the message
event.reply(msg);
});
}
});
bot.on_ready([&bot](const dpp::ready_t& event) {
if (dpp::run_once<struct register_bot_commands>()) {
// Create and register the file command
// This command will send a copy of the README.md file in the root
// of the project
dpp::slashcommand fileCommand(
"file", "Send a message with a file attached!", bot.me.id);
bot.global_command_create(fileCommand);
// Create and register the external command
dpp::slashcommand externalCommand(
"external", "Send an image from an external source", bot.me.id);
bot.global_command_create(externalCommand);
// Create and register the embed command
dpp::slashcommand embedCommand(
"embed", "Send a message with an image embed", bot.me.id);
bot.global_command_create(embedCommand);
}
});
// Start the bot
bot.start(dpp::st_wait);
return 0;
}