ayaka
Version:
Вспомогательный Node.js модуль для упрощения жизни в разработке discord.js ботов.
103 lines (102 loc) • 4.67 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import axios from "axios";
import * as cheerio from "cheerio";
import { decode } from "html-entities";
/**
* Возвращает сокращенную строку.
* @param value - Исходная строка, которую нужно сократить.
* @param limit - Максимальное количество символов в сокращенной строке.
* @returns Сокращенная строка, содержащая первые `limit` символов исходной строки и добавленное троеточие ("..."), если длина исходной строки превышает `limit`. В противном случае, возвращает исходную строку без изменений.
*/
export function shortenString(value, limit) {
if (value.length > limit) {
return value.slice(0, limit) + "...";
}
else {
return value;
}
}
/**
* Функция для получения информации о манге по её названию.
* @param name - Название манги.
* @returns Массив объектов с информацией о манге.
*/
export function fetchManga(name) {
return __awaiter(this, void 0, void 0, function* () {
const url = `https://shikimori.one/mangas/autocomplete/v2?search=${name.replace(/\s+/g, "-")}`;
try {
const { data } = yield axios.get(url);
const $ = cheerio.load(data);
return $(".b-db_entry-variant-list_item")
.map((_, element) => {
const id = $(element).attr("data-id") || "";
const mangaUrl = $(element).attr("data-url") || "";
const year = $(element)
.find('.value .b-tag[data-href*="season"]')
.text()
.trim();
const name = decode($(element).find(".name a").text())
.split("/")[0]
.trim();
return {
id,
year,
name,
url: mangaUrl.startsWith("/")
? `https://shikimori.one${mangaUrl}`
: mangaUrl,
};
})
.get();
}
catch (error) {
console.error("Error fetching manga data:", error);
return [];
}
});
}
/**
* Функция для получения информации о фильме по его ID.
* @param movieID - ID фильма.
* @param kp_token - Токен для доступа к API Кинопоиска.
* @returns Объект с информацией о фильме.
*/
export function id_fetch_movie(movieID, kp_token) {
return __awaiter(this, void 0, void 0, function* () {
let response = yield fetch(`https://api.kinopoisk.dev/v1.4/movie/${movieID}`, {
method: "GET",
headers: {
"X-API-KEY": kp_token,
"Content-Type": "application/json",
},
});
return (yield response.json());
});
}
/**
* Функция для получения информации о фильме по его названию.
* @param name - Название фильма.
* @param kp_token - Токен для доступа к API Кинопоиска.
* @returns Массив объектов с информацией о фильмах.
*/
export function name_fetch_movie(name, kp_token) {
return __awaiter(this, void 0, void 0, function* () {
let response = yield fetch(`https://api.kinopoisk.dev/v1.4/movie/search?page=1&limit=25&query=${name}`, {
method: "GET",
headers: {
"X-API-KEY": kp_token,
"Content-Type": "application/json",
},
});
const jsonData = yield response.json();
return jsonData["docs"];
});
}