yt-dlx
Version:
Effortless Audio-Video Downloader And Streamer!
96 lines • 4.49 kB
JavaScript
;
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