Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge change_voice_channel into connect_voice #1085

Merged
merged 5 commits into from
Feb 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions include/dpp/discordclient.h
Original file line number Diff line number Diff line change
Expand Up @@ -504,20 +504,6 @@ class DPP_EXPORT discord_client : public websocket_client
*/
discord_client& connect_voice(snowflake guild_id, snowflake channel_id, bool self_mute = false, bool self_deaf = false);

/**
* @brief Change voice channel
*
* @param guild_id Guild where the voice channel is
* @param channel_id Channel ID of the voice channel
* @param self_mute True if the bot should mute itself
* @param self_deaf True if the bot should deafen itself
* @return reference to self
* @note This is NOT a synchronous blocking call! The bot isn't instantly ready to send or listen for audio,
* as we have to wait for the connection to the voice server to be established!
* e.g. wait for dpp::cluster::on_voice_ready event, and then send the audio within that event.
*/
discord_client& change_voice_channel(snowflake guild_id, snowflake channel_id, bool self_mute = false, bool self_deaf = false);

/**
* @brief Disconnect from the connected voice channel on a guild
*
Expand Down
64 changes: 18 additions & 46 deletions src/dpp/discordclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -609,57 +609,29 @@ uint64_t discord_client::get_channel_count() {
}

discord_client& discord_client::connect_voice(snowflake guild_id, snowflake channel_id, bool self_mute, bool self_deaf) {
#ifdef HAVE_VOICE
std::unique_lock lock(voice_mutex);
if (connecting_voice_channels.find(guild_id) == connecting_voice_channels.end()) {
connecting_voice_channels[guild_id] = std::make_unique<voiceconn>(this, channel_id);
/* Once sent, this expects two events (in any order) on the websocket:
* VOICE_SERVER_UPDATE and VOICE_STATUS_UPDATE
*/
log(ll_debug, "Sending op 4 to join VC, guild " + std::to_string(guild_id) + " channel " + std::to_string(channel_id));
queue_message(jsonobj_to_string(json({
{ "op", 4 },
{ "d", {
{ "guild_id", std::to_string(guild_id) },
{ "channel_id", std::to_string(channel_id) },
{ "self_mute", self_mute },
{ "self_deaf", self_deaf },
}
}
})), false);
} else {
log(ll_debug, "Requested the bot connect to voice channel " + std::to_string(channel_id) + " on guild " + std::to_string(guild_id) + ", but it seems we are already on this VC");
}
#endif
return *this;
}

discord_client& discord_client::change_voice_channel(snowflake guild_id, snowflake channel_id, bool self_mute, bool self_deaf) {
#ifdef HAVE_VOICE
std::unique_lock lock(voice_mutex);
if (connecting_voice_channels.find(guild_id) != connecting_voice_channels.end()) {
if (connecting_voice_channels[guild_id]->channel_id != channel_id) {
connecting_voice_channels[guild_id] = std::make_unique<voiceconn>(this, channel_id);
/* Once sent, this expects two events (in any order) on the websocket:
* VOICE_SERVER_UPDATE and VOICE_STATUS_UPDATE
*/
log(ll_debug, "Sending op 4 to change VC channel, guild " + std::to_string(guild_id) + " channel " + std::to_string(channel_id));
queue_message(jsonobj_to_string(json({
{ "op", 4 },
{ "d", {
{ "guild_id", std::to_string(guild_id) },
{ "channel_id", std::to_string(channel_id) },
{ "self_mute", self_mute },
{ "self_deaf", self_deaf },
}
}
})), false);
} else {
log(ll_debug, "Requested the bot switch to voice channel " + std::to_string(channel_id) + " on guild " + std::to_string(guild_id) + ", but it seems we are already in this VC");
if (connecting_voice_channels[guild_id]->channel_id == channel_id) {
log(ll_debug, "Requested the bot connect to voice channel " + std::to_string(channel_id) + " on guild " + std::to_string(guild_id) + ", but it seems we are already on this VC");
return *this;
}
} else {
log(ll_debug, "Requested the bot switch to voice channel " + std::to_string(channel_id) + " on guild " + std::to_string(guild_id) + ", but we aren't connected to a VC");
}
connecting_voice_channels[guild_id] = std::make_unique<voiceconn>(this, channel_id);
/* Once sent, this expects two events (in any order) on the websocket:
* VOICE_SERVER_UPDATE and VOICE_STATUS_UPDATE
*/
log(ll_debug, "Sending op 4 to join VC, guild " + std::to_string(guild_id) + " channel " + std::to_string(channel_id));
queue_message(jsonobj_to_string(json({
{ "op", 4 },
{ "d", {
{ "guild_id", std::to_string(guild_id) },
{ "channel_id", std::to_string(channel_id) },
{ "self_mute", self_mute },
{ "self_deaf", self_deaf },
}
}
})), false);
#endif
return *this;
}
Expand Down
Loading