|
|
|
@@ -57,7 +57,7 @@ command_result ConnectedClient::handleCommandMusicBotCreate(Command& cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
if(this->server->musicManager->max_bots() != -1 && this->server->musicManager->max_bots() <= this->server->musicManager->current_bot_count()){
|
|
|
|
|
if(this->server->music_manager_->max_bots() != -1 && this->server->music_manager_->max_bots() <= this->server->music_manager_->current_bot_count()){
|
|
|
|
|
if(config::license->isPremium())
|
|
|
|
|
return command_result{error::music_limit_reached};
|
|
|
|
|
else
|
|
|
|
@@ -79,7 +79,7 @@ command_result ConnectedClient::handleCommandMusicBotCreate(Command& cmd) {
|
|
|
|
|
|
|
|
|
|
auto max_bots = permissions[permission::i_client_music_limit];
|
|
|
|
|
if(max_bots.has_value) {
|
|
|
|
|
auto ownBots = this->server->musicManager->listBots(this->getClientDatabaseId());
|
|
|
|
|
auto ownBots = this->server->music_manager_->listBots(this->getClientDatabaseId());
|
|
|
|
|
if(!permission::v2::permission_granted(ownBots.size() + 1, max_bots))
|
|
|
|
|
return command_result{error::music_client_limit_reached};
|
|
|
|
|
}
|
|
|
|
@@ -125,7 +125,7 @@ command_result ConnectedClient::handleCommandMusicBotCreate(Command& cmd) {
|
|
|
|
|
if(!channel)
|
|
|
|
|
channel = this->server->channelTree->getDefaultChannel();
|
|
|
|
|
|
|
|
|
|
auto bot = this->server->musicManager->createBot(this->getClientDatabaseId());
|
|
|
|
|
auto bot = this->server->music_manager_->createBot(this->getClientDatabaseId());
|
|
|
|
|
if(!bot) return command_result{error::vs_critical};
|
|
|
|
|
bot->set_bot_type(create_type);
|
|
|
|
|
if(permissions[permission::i_client_music_create_modify_max_volume].has_value) {
|
|
|
|
@@ -169,21 +169,21 @@ command_result ConnectedClient::handleCommandMusicBotDelete(Command& cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto bot = this->server->musicManager->findBotById(cmd["bot_id"]);
|
|
|
|
|
auto bot = this->server->music_manager_->findBotById(cmd["bot_id"]);
|
|
|
|
|
if(!bot) return command_result{error::music_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(bot->getOwner() != this->getClientDatabaseId()) {
|
|
|
|
|
ACTION_REQUIRES_PERMISSION(permission::i_client_music_delete_power, bot->calculate_permission(permission::i_client_music_needed_delete_power, bot->getChannelId()), this->getChannelId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this->server->musicManager->deleteBot(bot);
|
|
|
|
|
this->server->music_manager_->deleteBot(bot);
|
|
|
|
|
return command_result{error::ok};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
command_result ConnectedClient::handleCommandMusicBotSetSubscription(ts::Command &cmd) {
|
|
|
|
|
if(!config::music::enabled) return command_result{error::music_disabled};
|
|
|
|
|
|
|
|
|
|
auto bot = this->server->musicManager->findBotById(cmd["bot_id"]);
|
|
|
|
|
auto bot = this->server->music_manager_->findBotById(cmd["bot_id"]);
|
|
|
|
|
if(!bot && cmd["bot_id"].as<ClientDbId>() != 0) return command_result{error::music_invalid_id};
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
@@ -229,7 +229,7 @@ command_result ConnectedClient::handleCommandMusicBotPlayerInfo(Command& cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(5);
|
|
|
|
|
|
|
|
|
|
auto bot = this->server->musicManager->findBotById(cmd["bot_id"]);
|
|
|
|
|
auto bot = this->server->music_manager_->findBotById(cmd["bot_id"]);
|
|
|
|
|
if(!bot) return command_result{error::music_invalid_id};
|
|
|
|
|
|
|
|
|
|
Command result(this->getExternalType() == CLIENT_TEAMSPEAK ? "notifymusicplayerinfo" : "");
|
|
|
|
@@ -267,7 +267,7 @@ command_result ConnectedClient::handleCommandMusicBotPlayerAction(Command& cmd)
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto bot = this->server->musicManager->findBotById(cmd["bot_id"]);
|
|
|
|
|
auto bot = this->server->music_manager_->findBotById(cmd["bot_id"]);
|
|
|
|
|
if(!bot) return command_result{error::music_invalid_id};
|
|
|
|
|
ACTION_REQUIRES_PERMISSION(permission::i_client_music_play_power, bot->calculate_permission(permission::i_client_music_needed_play_power, bot->getChannelId()), this->getChannelId());
|
|
|
|
|
|
|
|
|
@@ -299,7 +299,7 @@ command_result ConnectedClient::handleCommandPlaylistList(ts::Command &cmd) {
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto self_ref = this->ref();
|
|
|
|
|
auto playlists = this->server->musicManager->playlists();
|
|
|
|
|
auto playlists = this->server->music_manager_->playlists();
|
|
|
|
|
|
|
|
|
|
playlists.erase(find_if(playlists.begin(), playlists.end(), [&](const shared_ptr<music::PlayablePlaylist>& playlist) {
|
|
|
|
|
return playlist->client_has_permissions(self_ref, permission::i_playlist_needed_view_power, permission::i_playlist_view_power, music::PlaylistPermissions::do_no_require_granted) != permission::ok;
|
|
|
|
@@ -354,13 +354,13 @@ command_result ConnectedClient::handleCommandPlaylistCreate(ts::Command &cmd) {
|
|
|
|
|
{
|
|
|
|
|
auto max_playlists = this->calculate_permission(permission::i_max_playlists, 0);
|
|
|
|
|
if(max_playlists.has_value) {
|
|
|
|
|
auto playlists = ref_server->musicManager->find_playlists_by_client(this->getClientDatabaseId());
|
|
|
|
|
auto playlists = ref_server->music_manager_->find_playlists_by_client(this->getClientDatabaseId());
|
|
|
|
|
if(!permission::v2::permission_granted(playlists.size(), max_playlists))
|
|
|
|
|
return command_result{permission::i_max_playlists};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->create_playlist(this->getClientDatabaseId(), this->getDisplayName());
|
|
|
|
|
auto playlist = ref_server->music_manager_->create_playlist(this->getClientDatabaseId(), this->getDisplayName());
|
|
|
|
|
if(!playlist) return command_result{error::vs_critical};
|
|
|
|
|
|
|
|
|
|
playlist->properties()[property::PLAYLIST_TYPE] = music::Playlist::Type::GENERAL;
|
|
|
|
@@ -399,14 +399,14 @@ command_result ConnectedClient::handleCommandPlaylistDelete(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_delete_power, permission::i_playlist_delete_power); perr)
|
|
|
|
|
return command_result{perr};
|
|
|
|
|
|
|
|
|
|
string error;
|
|
|
|
|
if(!ref_server->musicManager->delete_playlist(playlist->playlist_id(), error)) {
|
|
|
|
|
if(!ref_server->music_manager_->delete_playlist(playlist->playlist_id(), error)) {
|
|
|
|
|
logError(this->getServerId(), "Failed to delete playlist with id {}. Error: {}", playlist->playlist_id(), error);
|
|
|
|
|
return command_result{error::vs_critical};
|
|
|
|
|
}
|
|
|
|
@@ -419,7 +419,7 @@ command_result ConnectedClient::handleCommandPlaylistInfo(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_view_power, permission::i_playlist_view_power, music::PlaylistPermissions::do_no_require_granted); perr)
|
|
|
|
@@ -440,7 +440,7 @@ command_result ConnectedClient::handleCommandPlaylistEdit(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_modify_power, permission::i_playlist_modify_power); perr)
|
|
|
|
@@ -498,7 +498,7 @@ command_result ConnectedClient::handleCommandPlaylistPermList(ts::Command &cmd)
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
@@ -551,7 +551,7 @@ command_result ConnectedClient::handleCommandPlaylistAddPerm(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(5);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_permission_modify_power, permission::i_playlist_permission_modify_power); perr)
|
|
|
|
@@ -581,7 +581,7 @@ command_result ConnectedClient::handleCommandPlaylistDelPerm(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(5);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_permission_modify_power, permission::i_playlist_permission_modify_power); perr)
|
|
|
|
@@ -611,7 +611,7 @@ command_result ConnectedClient::handleCommandPlaylistClientList(ts::Command &cmd
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
@@ -647,7 +647,7 @@ command_result ConnectedClient::handleCommandPlaylistClientPermList(ts::Command
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
@@ -710,7 +710,7 @@ command_result ConnectedClient::handleCommandPlaylistClientAddPerm(ts::Command &
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(5);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
auto client_id = cmd[0]["cldbid"].as<ClientDbId>();
|
|
|
|
@@ -743,7 +743,7 @@ command_result ConnectedClient::handleCommandPlaylistClientDelPerm(ts::Command &
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(5);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
auto client_id = cmd[0]["cldbid"].as<ClientDbId>();
|
|
|
|
@@ -815,7 +815,7 @@ command_result ConnectedClient::handleCommandPlaylistSongList(ts::Command &cmd)
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_view_power, permission::i_playlist_view_power); perr)
|
|
|
|
@@ -860,7 +860,7 @@ command_result ConnectedClient::handleCommandPlaylistSongSetCurrent(ts::Command
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_song_needed_move_power, permission::i_playlist_song_move_power); perr)
|
|
|
|
@@ -877,7 +877,7 @@ command_result ConnectedClient::handleCommandPlaylistSongAdd(ts::Command &cmd) {
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_song_needed_add_power, permission::i_playlist_song_add_power); perr)
|
|
|
|
@@ -917,7 +917,7 @@ command_result ConnectedClient::handleCommandPlaylistSongReorder(ts::Command &cm
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_song_needed_move_power, permission::i_playlist_song_move_power); perr)
|
|
|
|
@@ -940,7 +940,7 @@ command_result ConnectedClient::handleCommandPlaylistSongRemove(ts::Command &cmd
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_song_needed_remove_power, permission::i_playlist_song_remove_power); perr)
|
|
|
|
@@ -1135,21 +1135,21 @@ command_result ConnectedClient::handleCommandMusicBotPlaylistAssign(ts::Command
|
|
|
|
|
CMD_RESET_IDLE;
|
|
|
|
|
CMD_CHK_AND_INC_FLOOD_POINTS(25);
|
|
|
|
|
|
|
|
|
|
auto bot = ref_server->musicManager->findBotById(cmd["bot_id"]);
|
|
|
|
|
auto bot = ref_server->music_manager_->findBotById(cmd["bot_id"]);
|
|
|
|
|
if(!bot) return command_result{error::music_invalid_id};
|
|
|
|
|
if(bot->getOwner() != this->getClientDatabaseId())
|
|
|
|
|
ACTION_REQUIRES_GLOBAL_PERMISSION(permission::i_client_music_play_power, bot->calculate_permission(permission::i_client_music_needed_play_power, 0));
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist && cmd["playlist_id"] != 0) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
if(ref_server->musicManager->find_bot_by_playlist(playlist))
|
|
|
|
|
if(ref_server->music_manager_->find_bot_by_playlist(playlist))
|
|
|
|
|
return command_result{error::playlist_already_in_use};
|
|
|
|
|
|
|
|
|
|
if(auto perr = playlist->client_has_permissions(this->ref(), permission::i_playlist_needed_view_power, permission::i_playlist_view_power); perr)
|
|
|
|
|
return command_result{perr};
|
|
|
|
|
|
|
|
|
|
if(!ref_server->musicManager->assign_playlist(bot, playlist))
|
|
|
|
|
if(!ref_server->music_manager_->assign_playlist(bot, playlist))
|
|
|
|
|
return command_result{error::vs_critical};
|
|
|
|
|
|
|
|
|
|
return command_result{error::ok};
|
|
|
|
@@ -1162,7 +1162,7 @@ command_result ConnectedClient::handleCommandPlaylistSetSubscription(ts::Command
|
|
|
|
|
|
|
|
|
|
if(!config::music::enabled) return command_result{error::music_disabled};
|
|
|
|
|
|
|
|
|
|
auto playlist = ref_server->musicManager->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
auto playlist = ref_server->music_manager_->find_playlist(cmd["playlist_id"]);
|
|
|
|
|
if(!playlist && cmd["playlist_id"] != 0) return command_result{error::playlist_invalid_id};
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|