38 namespace discord_core_internal {
40 class DiscordCoreAPI_Dll you_tube_request_builder :
public https_client_core {
42 you_tube_request_builder(config_manager* configManagerNew);
44 song collectFinalSong(
const song& songNew);
47 static constexpr jsonifier::string_view baseUrl{
"https://www.youtube.com" };
49 song constructDownloadInfo(
const song& songNew, uint64_t currentRecursionDepth);
51 jsonifier::vector<song> collectSearchResults(jsonifier::string_view
string, uint64_t limit = 20);
53 song collectSingleResult(jsonifier::string_view
string);
55 virtual ~you_tube_request_builder() =
default;
58 class DiscordCoreAPI_Dll you_tube_api :
public you_tube_request_builder {
60 you_tube_api(config_manager* configManagerNew,
const snowflake guildId);
62 co_routine<void, false> downloadAndStreamAudio(
const song songNew,
63 std::coroutine_handle<co_routine<void, false>::promise_type> threadHandle = std::coroutine_handle<co_routine<void, false>::promise_type>{},
64 uint64_t currentReconnectTries = 0);
66 void weFailedToDownloadOrDecode(
const song& songNew, std::coroutine_handle<co_routine<void, false>::promise_type> threadHandle, uint64_t recursionDepth);
68 jsonifier::vector<song> searchForSong(jsonifier::string_view searchQuery, uint64_t limit);
73 std::atomic_bool areWeWorkingBool{
false };
77 struct you_tube_request_client {
78 jsonifier::string_view clientVersion{
"17.13.3" };
79 jsonifier::string_view androidSdkVersion{
"31" };
80 jsonifier::string_view clientName{
"android" };
81 jsonifier::string_view platform{
"mobile" };
82 jsonifier::string_view osName{
"android" };
83 jsonifier::string_view osVersion{
"12" };
84 jsonifier::string_view hl{
"en-gb" };
85 jsonifier::string_view gl{
"us" };
89 const bool useSsl{
true };
93 const bool lockedSafetyMode{};
96 struct you_tube_request_context {
97 unordered_map<jsonifier::string, jsonifier::string> captionParams{};
98 you_tube_request_client client{};
104 jsonifier::string contentLength{};
105 jsonifier::string audioQuality{};
106 jsonifier::string mimeType{};
107 int64_t averageBitrate{};
108 jsonifier::string url{};
113 struct streaming_data {
114 jsonifier::vector<format> adaptiveFormats{};
117 struct thumbnail_element {
118 jsonifier::string url{};
122 struct video_details_thumbnail {
123 jsonifier::vector<thumbnail_element> thumbnails{};
126 struct video_details {
127 jsonifier::string shortDescription{};
128 video_details_thumbnail thumbnail{};
129 jsonifier::string lengthSeconds{};
130 jsonifier::string videoId{};
131 jsonifier::string title{};
135 streaming_data streamingData{};
136 video_details videoDetails{};
139 struct you_tube_request {
140 const jsonifier::string playlistId{};
141 you_tube_request_context context{};
142 const bool contentCheckOk{
true };
143 const jsonifier::string params{};
144 const bool racyCheckOk{
true };
145 jsonifier::string videoId{};
148 struct video_renderer {
149 jsonifier::string videoId{};
152 struct video_renderer_type {
153 video_renderer videoRenderer{};
156 struct item_section_renderer_contents {
157 jsonifier::vector<discord_core_internal::video_renderer_type> contents{};
160 struct item_section_renderer {
161 item_section_renderer_contents itemSectionRendererContents{};
164 struct section_list_renderer {
165 jsonifier::vector<item_section_renderer> contents{};
168 struct primary_contents {
169 section_list_renderer sectionListRenderer{};
172 struct two_column_search_results_renderer {
173 primary_contents primaryContents{};
177 two_column_search_results_renderer twoColumnSearchResultsRenderer{};
180 struct you_tube_search_results {
181 contents01 contents{};
The main namespace for the forward-facing interfaces.