![]() |
D++ (DPP)
C++ Discord API Bot Library
|
DPP supports receiving audio. This example shows how to use it to record some user in a VC.
#include <dpp/dpp.h> #include <iomanip> #include <sstream> int main() { /* Example to record a user in a VC * * Recording is output as './me.pcm' and you can play it via the soundboard example * or use ffmpeg 'ffplay -f s16le -ar 48000 -ac 2 -i ./me.pcm' */ /* Replace with the user's id you wish to record */ dpp::snowflake user_id = 407877550216314882; /* Setup the bot */ dpp::cluster bot("token"); FILE *fd; fd = fopen("./me.pcm", "wb"); bot.on_log(dpp::utility::cout_logger()); /* The event is fired when someone issues your commands */ bot.on_slashcommand([&bot, &fd](const dpp::slashcommand_t& event) { /* Check which command they ran */ if (event.command.get_command_name() == "record") { /* Get the guild */ dpp::guild* g = dpp::find_guild(event.command.guild_id); /* Attempt to connect to a voice channel, returns false if we fail to connect. */ if (!g->connect_member_voice(event.command.get_issuing_user().id)) { event.reply("You don't seem to be in a voice channel!"); return; } /* Tell the user we joined their channel. */ event.reply("Joined your channel, now recording!"); } else if (event.command.get_command_name() == "stop") { event.from->disconnect_voice(event.command.guild_id); fclose(fd); event.reply("Stopped recording."); } }); bot.on_voice_receive([&bot, &fd, &user_id](const dpp::voice_receive_t &event) { if (event.user_id == user_id) { fwrite((char *)event.audio, 1, event.audio_size, fd); } }); bot.on_ready([&bot](const dpp::ready_t & event) { if (dpp::run_once<struct register_bot_commands>()) { /* Create a new command. */ dpp::slashcommand recordcommand("record", "Joins your voice channel and records you.", bot.me.id); dpp::slashcommand stopcommand("stop", "Stops recording you.", bot.me.id); bot.global_bulk_command_create({ recordcommand, stopcommand }); } }); /* Start bot */ bot.start(dpp::st_wait); return 0; }