UNPKG

yt-dlx

Version:

Effortless Audio-Video Downloader And Streamer!

96 lines 4.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = videoComments; const path_1 = __importDefault(require("path")); const colors_1 = __importDefault(require("colors")); const zod_1 = require("zod"); const youtubei_1 = require("youtubei"); const youtubei_js_1 = require("youtubei.js"); const ZodSchema = zod_1.z.object({ query: zod_1.z.string().min(2), verbose: zod_1.z.boolean().optional() }); async function fetchVideoComments({ query, verbose }) { try { if (verbose) console.log(colors_1.default.green("@info:"), `Searching for videos with query: ${query}`); const youtubeClient = new youtubei_1.Client(); const searchResults = await youtubeClient.search(query, { type: "video" }); const video = searchResults.items[0]; if (!video || !video.id) { if (verbose) console.log(colors_1.default.red("@error:"), "No videos found for the given query"); throw new Error("No videos found for the given query"); } const videoId = video.id; if (verbose) console.log(colors_1.default.green("@info:"), `Fetching comments for video ID: ${videoId}`); const youtubeInnertube = await youtubei_js_1.Innertube.create({ user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", cache: new youtubei_js_1.UniversalCache(true, path_1.default.join(process.cwd(), "YouTubeDLX")), }); const response = await youtubeInnertube.getComments(videoId); const comments = response.contents .map(thread => { const comment = thread?.comment; if (!comment || !comment.content?.text || !comment.published_time || !comment.author?.name) return null; return { comment_id: comment.comment_id || "", is_pinned: comment.is_pinned || false, comment: comment.content.text, published_time: comment.published_time, author_is_channel_owner: comment.author_is_channel_owner || false, creator_thumbnail_url: comment.creator_thumbnail_url || "", like_count: comment.like_count || 0, is_member: comment.is_member || false, author: comment.author.name, is_hearted: comment.is_hearted || false, is_liked: comment.is_liked || false, is_disliked: comment.is_disliked || false, reply_count: comment.reply_count || 0, hasReplies: thread.has_replies || false, }; }) .filter((item) => item !== null); if (comments.length === 0) { if (verbose) console.log(colors_1.default.red("@error:"), "No comments found for the video"); throw new Error("No comments found for the video"); } if (verbose) console.log(colors_1.default.green("@info:"), "Video comments fetched!"); return comments; } catch (error) { throw new Error(error.message); } } async function videoComments({ query, verbose }) { try { ZodSchema.parse({ query, verbose }); const comments = await fetchVideoComments({ query, verbose }); if (verbose) console.log(colors_1.default.green("@info:"), "❣️ Thank you for using yt-dlx. Consider 🌟starring the GitHub repo https://github.com/yt-dlx."); return comments; } catch (error) { if (error instanceof zod_1.ZodError) { const errorMessage = `${colors_1.default.red("@error:")} Argument validation failed: ${error.errors.map(e => `${e.path.join(".")}: ${e.message}`).join(", ")}`; console.error(errorMessage); throw new Error(errorMessage); } else if (error instanceof Error) { console.error(error.message); throw error; } else { const unexpectedError = `${colors_1.default.red("@error:")} An unexpected error occurred: ${String(error)}`; console.error(unexpectedError); throw new Error(unexpectedError); } } finally { } } //# sourceMappingURL=Comments.js.map