diff --git a/host.sh b/host.sh index 3118428..060f816 100755 --- a/host.sh +++ b/host.sh @@ -17,6 +17,7 @@ fi git merge $current --strategy-option theirs +npm run clearMulti npm run generate npm run json git add . diff --git a/icons/src/en/foxaholic/icon.png b/icons/multisrc/madara/icons/foxaholic.png similarity index 100% rename from icons/src/en/foxaholic/icon.png rename to icons/multisrc/madara/icons/foxaholic.png diff --git a/icons/multisrc/madara/icons/lightnovelupdates.png b/icons/multisrc/madara/icons/lightnovelupdates.png new file mode 100644 index 0000000..7968fa6 Binary files /dev/null and b/icons/multisrc/madara/icons/lightnovelupdates.png differ diff --git a/icons/src/en/nitromanga/icon.png b/icons/multisrc/madara/icons/nitromanga.png similarity index 100% rename from icons/src/en/nitromanga/icon.png rename to icons/multisrc/madara/icons/nitromanga.png diff --git a/icons/multisrc/readwn/icons/fannovel.png b/icons/multisrc/readwn/icons/fannovel.png new file mode 100644 index 0000000..72e22a9 Binary files /dev/null and b/icons/multisrc/readwn/icons/fannovel.png differ diff --git a/icons/multisrc/readwn/icons/wuxiamtl.png b/icons/multisrc/readwn/icons/wuxiamtl.png new file mode 100644 index 0000000..72e22a9 Binary files /dev/null and b/icons/multisrc/readwn/icons/wuxiamtl.png differ diff --git a/icons/src/en/wuxiaworld/icon.png b/icons/src/en/wuxiaworld/icon.png index 7c815fc..2b0fed2 100644 Binary files a/icons/src/en/wuxiaworld/icon.png and b/icons/src/en/wuxiaworld/icon.png differ diff --git a/libs/parseMadaraDate.ts b/libs/parseMadaraDate.ts deleted file mode 100644 index da5d4a7..0000000 --- a/libs/parseMadaraDate.ts +++ /dev/null @@ -1,26 +0,0 @@ -import dayjs from "dayjs"; - -export const parseMadaraDate = (date: string) => { - if (date.includes("ago")) { - const dayJSDate = dayjs(new Date()); // today - const timeAgo = date.match(/\d+/)?.[0] || ""; - const timeAgoInt = parseInt(timeAgo, 10); - - if (!timeAgo) return date; // there is no number! - - if (date.includes("hours ago") || date.includes("hour ago")) { - dayJSDate.subtract(timeAgoInt, "hours"); // go back N hours - } - - if (date.includes("days ago") || date.includes("day ago")) { - dayJSDate.subtract(timeAgoInt, "days"); // go back N days - } - - if (date.includes("months ago") || date.includes("month ago")) { - dayJSDate.subtract(timeAgoInt, "months"); // go back N months - } - - return dayJSDate.format("LL"); - } - return date; // there is no "ago" so don't mess with the date -}; diff --git a/plugins/english/comrademao.ts b/plugins/english/comrademao.ts index 2a4f054..cc8ef35 100644 --- a/plugins/english/comrademao.ts +++ b/plugins/english/comrademao.ts @@ -2,7 +2,7 @@ import { CheerioAPI, load as parseHTML } from "cheerio"; import { fetchApi, fetchFile } from "@libs/fetch"; import { FilterTypes, Filters } from "@libs/filterInputs"; import { Plugin } from "@typings/plugin"; -import { parseMadaraDate } from "@libs/parseMadaraDate"; +import dayjs from "dayjs"; class ComradeMaoPlugin implements Plugin.PluginBase { id = "comrademao"; @@ -20,14 +20,14 @@ class ComradeMaoPlugin implements Plugin.PluginBase { const novelName = loadedCheerio(this).find(".tt").text().trim(); const novelCover = loadedCheerio(this).find("img").attr("src"); const novelUrl = loadedCheerio(this).find("a").attr("href"); - + if (!novelUrl) return; const novel = { name: novelName, cover: novelCover, url: novelUrl, - } + }; novels.push(novel); }); return novels; @@ -35,7 +35,7 @@ class ComradeMaoPlugin implements Plugin.PluginBase { async popularNovels( pageNo: number, - { filters }: Plugin.PopularNovelsOptions + { filters }: Plugin.PopularNovelsOptions, ): Promise { let link = this.site; @@ -43,25 +43,19 @@ class ComradeMaoPlugin implements Plugin.PluginBase { link += "page/" + pageNo + "/?post_type=novel"; - const headers = new Headers(); - const body = await fetchApi(link, { headers }).then((result) => - result.text() - ); + const body = await fetchApi(link).then((result) => result.text()); const loadedCheerio = parseHTML(body); return this.parseNovels(loadedCheerio); } async parseNovelAndChapters(novelUrl: string): Promise { - const url = novelUrl; - const headers = new Headers(); - const result = await fetchApi(url, { headers }); - const body = await result.text(); + const body = await fetchApi(novelUrl).then((result) => result.text()); let loadedCheerio = parseHTML(body); const novel: Plugin.SourceNovel = { - url, + url: novelUrl, chapters: [], }; @@ -69,23 +63,23 @@ class ComradeMaoPlugin implements Plugin.PluginBase { novel.cover = loadedCheerio("div.thumbook > div > img").attr("src"); - loadedCheerio(".infox .wd-full").each((i,el) => { - const detailName = loadedCheerio(el).find("b").text(); - const detail = loadedCheerio(el).find('span').text(); + loadedCheerio(".infox .wd-full").each((i, el) => { + const detailName = loadedCheerio(el).find("b").text(); + const detail = loadedCheerio(el).find("span").text(); switch (detailName) { - case 'Publisher: ': - novel.author = detail.trim(); - break; - case 'Status: ': - novel.status = detail.trim(); - break; - case 'Genres:': - novel.genres = detail.trim().replace(/ , /g, ','); - break; - case 'Description: ': - novel.summary = detail.trim(); - break; + case "Publisher: ": + novel.author = detail.trim(); + break; + case "Status: ": + novel.status = detail.trim(); + break; + case "Genres:": + novel.genres = detail.trim().replace(/ , /g, ","); + break; + case "Description: ": + novel.summary = detail.trim(); + break; } }); @@ -94,53 +88,78 @@ class ComradeMaoPlugin implements Plugin.PluginBase { loadedCheerio("#chapterlist") .find("li") .each(function () { - const releaseDate = parseMadaraDate( - loadedCheerio(this).find(".chapterdate").text() - ); + const chapterUrl = loadedCheerio(this).find("a").attr("href"); + if (!chapterUrl) return; + const chapterName = loadedCheerio(this) .find(".chapternum") .text(); - const chapterUrl = loadedCheerio(this).find("a").attr("href"); + let releaseTime = loadedCheerio(this) + .find(".chapterdate") + .text(); - if (!chapterUrl) return; + if (releaseTime?.includes?.("ago")) { + const timeAgo = releaseTime.match(/\d+/)?.[0] || "0"; + const timeAgoInt = parseInt(timeAgo, 10); + if (timeAgoInt) { + const dayJSDate = dayjs(); // today + if ( + releaseTime.includes("hours ago") || + releaseTime.includes("hour ago") + ) { + dayJSDate.subtract(timeAgoInt, "hours"); // go back N hours + } + + if ( + releaseTime.includes("days ago") || + releaseTime.includes("day ago") + ) { + dayJSDate.subtract(timeAgoInt, "days"); // go back N days + } + + if ( + releaseTime.includes("months ago") || + releaseTime.includes("month ago") + ) { + dayJSDate.subtract(timeAgoInt, "months"); // go back N months + } + + releaseTime = dayJSDate.format("LL"); + } + } chapter.push({ name: chapterName, url: chapterUrl, - releaseTime: releaseDate, + releaseTime, }); }); novel.chapters = chapter.reverse(); return novel; - }; + } async parseChapter(chapterUrl: string): Promise { - const headers = new Headers(); - const result = await fetchApi(chapterUrl, { headers }); - const body = await result.text(); - + const body = await fetchApi(chapterUrl).then((result) => result.text()); const loadedCheerio = parseHTML(body); const chapterText = loadedCheerio("#chaptercontent").html()?.trim() || ""; return chapterText; - }; + } async searchNovels( searchTerm: string, - pageNo: number + pageNo: number, ): Promise { const url = `${this.site}page/${pageNo}/?s=${searchTerm}&post_type=novel`; - const headers = new Headers(); - const result = await fetchApi(url, { headers }); - const body = await result.text(); + const body = await fetchApi(url).then((result) => result.text()); const loadedCheerio = parseHTML(body); return this.parseNovels(loadedCheerio); - }; + } async fetchImage(url: string): Promise { return await fetchFile(url); diff --git a/plugins/english/foxaholic.ts b/plugins/english/foxaholic.ts deleted file mode 100644 index 06fa251..0000000 --- a/plugins/english/foxaholic.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { load as parseHTML } from "cheerio"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { Plugin } from "@typings/plugin"; -import { Filters } from "@libs/filterInputs"; - -class Foxaholic implements Plugin.PluginBase { - id = "foxaholic"; - name = "Foxaholic"; - icon = "src/en/foxaholic/icon.png"; - site = "https://www.foxaholic.com/"; - filters?: Filters | undefined; - version = "1.0.0"; - baseUrl = this.site; - async popularNovels(pageNo: number, options: Plugin.PopularNovelsOptions): Promise { - const link = `${this.baseUrl}novel/page/${pageNo}/?m_orderby=rating`; - - const result = await fetchApi(link); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - - loadedCheerio(".page-item-detail").each(function () { - const novelName = loadedCheerio(this).find(".h5 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("data-src"); - const novelUrl = loadedCheerio(this).find(".h5 > a").attr("href"); - - if (!novelUrl) return; - - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } - async parseNovelAndChapters(novelUrl: string): Promise { - const url = novelUrl; - const result = await fetchApi(url); - const body = await result.text(); - - let loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url, - chapters: [], - }; - - novel.name = loadedCheerio(".post-title > h1").text().trim(); - - novel.cover = loadedCheerio(".summary_image > a > img").attr( - "data-src" - ); - - loadedCheerio(".post-content_item").each(function () { - const detailName = loadedCheerio(this) - .find(".summary-heading > h5") - .text() - .trim(); - const detail = loadedCheerio(this).find(".summary-content").html(); - - if (!detail) return; - - switch (detailName) { - case "Genre": - novel.genres = loadedCheerio(detail) - .children("a") - .map((i, el) => loadedCheerio(el).text()) - .toArray() - .join(","); - break; - case "Author": - novel.author = loadedCheerio(detail) - .children("a") - .map((i, el) => loadedCheerio(el).text()) - .toArray() - .join(", "); - break; - case "Novel": - novel.status = detail?.trim().replace(/G/g, "g"); - break; - } - }); - - loadedCheerio( - ".description-summary > div.summary__content > div" - ).remove(); - - novel.summary = loadedCheerio( - ".description-summary > div.summary__content" - ) - .text() - .trim(); - - let chapter: Plugin.ChapterItem[] = []; - loadedCheerio(".wp-manga-chapter").each(function () { - const chapterName = loadedCheerio(this) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); - const releaseDate = loadedCheerio(this).find("span").text().trim(); - const chapterUrl = loadedCheerio(this).find("a").attr("href"); - - if (!chapterUrl) return; - - chapter.push({ - name: chapterName, - releaseTime: releaseDate, - url: chapterUrl, - }); - }); - - novel.chapters = chapter.reverse(); - - return novel; - } - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(chapterUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - loadedCheerio("img").removeAttr("srcset"); - let chapterText = loadedCheerio(".reading-content").html() || ''; - - return chapterText; - } - async searchNovels(searchTerm: string, pageNo: number): Promise { - const url = `${this.baseUrl}?s=${searchTerm}&post_type=wp-manga`; - const result = await fetchApi(url); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - - loadedCheerio(".c-tabs-item__content").each(function () { - const novelName = loadedCheerio(this).find(".h4 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("data-src"); - const novelUrl = loadedCheerio(this).find(".h4 > a").attr("href"); - - if (!novelUrl) return; - - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - }); - - return novels; - } - async fetchImage(url: string): Promise { - return fetchFile(url); - } - -} - -export default new Foxaholic(); diff --git a/plugins/english/freewebnovel.ts b/plugins/english/freewebnovel.ts index a492319..1e3b376 100644 --- a/plugins/english/freewebnovel.ts +++ b/plugins/english/freewebnovel.ts @@ -1,103 +1,108 @@ -import { Plugin } from "@typings/plugin"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; - -class FreeWebNovel implements Plugin.PluginBase { - id = "FWN.com"; - name = "Web NOVEL"; - site = "https://freewebnovel.com"; - version = "1.0.0"; - icon = "src/en/freewebnovel/icon.png"; - - - async popularNovels( - page: number, - { showLatestNovels }: Plugin.PopularNovelsOptions, - ): Promise { - const sort = showLatestNovels - ? "/latest-release-novels/" - : "/completed-novels/"; - - const body = await fetchApi(this.site + sort + page).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = loadedCheerio(".li-row") - .map((index, element) => ({ - name: loadedCheerio(element).find(".tit").text(), - cover: loadedCheerio(element).find("img").attr("src"), - url: this.site + loadedCheerio(element).find("h3 > a").attr("href"), - })) - .get(); - - return novels; - } - - async parseNovelAndChapters(url: string): Promise { - const body = await fetchApi(url).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { url }; - novel.name = loadedCheerio("h1.tit").text(); - novel.cover = loadedCheerio(".pic > img").attr("src"); - novel.genres = loadedCheerio("[title=Genre]") - .next() - .text() - .replace(/[\t\n]/g, ""); - - novel.author = loadedCheerio("[title=Author]") - .next() - .text() - .replace(/[\t\n]/g, ""); - - novel.status = loadedCheerio("[title=Status]") - .next() - .text() - .replace(/[\t\n]/g, ""); - - novel.summary = loadedCheerio(".inner").text().trim(); - - const chapters: Plugin.ChapterItem[] = loadedCheerio("#idData > li > a") - .map((index, element) => ({ - name: loadedCheerio(element).attr("title") || "Chapter " + index, - releaseTime: null, - url: this.site + loadedCheerio(element).attr("href"), - })) - .get(); - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const body = await fetchApi(chapterUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const chapterText = loadedCheerio("div.txt").html() || ""; - return chapterText; - } - - async searchNovels( - searchkey: string, - ): Promise { - const body = await fetchApi(this.site + "/search/", { - method: "POST", - body: JSON.stringify({ searchkey }), - }).then((res) => res.text()); - - const loadedCheerio = parseHTML(body); - const novels: Plugin.NovelItem[] = loadedCheerio(".li-row > .li > .con") - .map((index, element) => ({ - name: loadedCheerio(element).find(".tit").text(), - cover: loadedCheerio(element).find(".pic > a > img").attr("data-cfsrc"), - url: this.site + loadedCheerio(element).find("h3 > a").attr("href"), - })) - .get(); - - return novels; - } - - fetchImage = fetchFile; -} - -export default new FreeWebNovel(); +import { Plugin } from "@typings/plugin"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; + +class FreeWebNovel implements Plugin.PluginBase { + id = "FWN.com"; + name = "Web NOVEL"; + site = "https://freewebnovel.com"; + version = "1.0.0"; + icon = "src/en/freewebnovel/icon.png"; + + async popularNovels( + page: number, + { showLatestNovels }: Plugin.PopularNovelsOptions, + ): Promise { + const sort = showLatestNovels + ? "/latest-release-novels/" + : "/completed-novels/"; + + const body = await fetchApi(this.site + sort + page).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = loadedCheerio(".li-row") + .map((index, element) => ({ + name: loadedCheerio(element).find(".tit").text(), + cover: loadedCheerio(element).find("img").attr("src"), + url: this.site + loadedCheerio(element).find("h3 > a").attr("href"), + })) + .get(); + + return novels; + } + + async parseNovelAndChapters(url: string): Promise { + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { url }; + novel.name = loadedCheerio("h1.tit").text(); + novel.cover = loadedCheerio(".pic > img").attr("src"); + novel.genres = loadedCheerio("[title=Genre]") + .next() + .text() + .replace(/[\t\n]/g, ""); + + novel.author = loadedCheerio("[title=Author]") + .next() + .text() + .replace(/[\t\n]/g, ""); + + novel.status = loadedCheerio("[title=Status]") + .next() + .text() + .replace(/[\t\n]/g, ""); + + novel.summary = loadedCheerio(".inner").text().trim(); + + const chapters: Plugin.ChapterItem[] = loadedCheerio("#idData > li > a") + .map((chapterIndex, element) => ({ + name: loadedCheerio(element).attr("title") || "Chapter " + (chapterIndex + 1), + url: this.site + loadedCheerio(element).attr("href"), + releaseTime: null, + chapterNumber: chapterIndex + 1, + })) + .get(); + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const body = await fetchApi(chapterUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const chapterText = loadedCheerio("div.txt").html() || ""; + return chapterText; + } + + async searchNovels( + searchTerm: string, + ): Promise { + const body = await fetchApi(this.site + "/search/", { + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Referer: this.site, + Origin: this.site, + }, + method: "POST", + body: "searchkey=" + encodeURIComponent(searchTerm) + }).then((res) => res.text()); + + const loadedCheerio = parseHTML(body); + const novels: Plugin.NovelItem[] = loadedCheerio(".li-row > .li > .con") + .map((index, element) => ({ + name: loadedCheerio(element).find(".tit").text(), + cover: loadedCheerio(element).find(".pic > a > img").attr("src"), + url: this.site + loadedCheerio(element).find("h3 > a").attr("href"), + })) + .get(); + + return novels; + } + + fetchImage = fetchFile; +} + +export default new FreeWebNovel(); diff --git a/plugins/english/lightnovelupdates.ts b/plugins/english/lightnovelupdates.ts deleted file mode 100644 index 01b5c1e..0000000 --- a/plugins/english/lightnovelupdates.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { load as parseHTML } from "cheerio"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { Plugin } from "@typings/plugin"; -import { Filters } from "@libs/filterInputs"; - -class LightNovelUpdates implements Plugin.PluginBase { - id = "LightNovelUpdates"; - name = "Light Novel Updates"; - version = "1.0.0"; - icon = "src/en/lightnovelupdates/icon.png"; - site = "https://www.lightnovelupdates.com/"; - baseUrl = this.site; - async popularNovels(pageNo: number, options: Plugin.PopularNovelsOptions): Promise { - let url = `${this.baseUrl}novel/page/${pageNo}/?m_orderby=rating`; - - const body = await fetchApi(url).then((r) => r.text()); - - const loadedCheerio = parseHTML(body); - - let novels: Plugin.NovelItem[] = []; - - loadedCheerio(".page-item-detail").each(function () { - const novelName = loadedCheerio(this).find(".h5 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("src"); - const novelUrl = loadedCheerio(this).find(".h5 > a").attr("href"); - - if (!novelUrl) return; - - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } - async parseNovelAndChapters(novelUrl: string): Promise { - const url = novelUrl; - - const body = await fetchApi(url).then((r) => r.text()); - - let loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url, - chapters: [], - }; - - novel.name = loadedCheerio(".post-title > h1").text().trim(); - novel.cover = - loadedCheerio(".summary_image > a > img").attr("src") || undefined; - - loadedCheerio(".post-content_item").each(function () { - const detailName = loadedCheerio(this) - .find(".summary-heading > h5") - .text() - .trim(); - const detail = loadedCheerio(this) - .find(".summary-content") - .text() - .trim(); - - switch (detailName) { - case "Genre(s)": - novel.genres = detail.trim().replace(/[\t\n]/g, ","); - break; - case "Author(s)": - novel.author = detail.trim(); - break; - case "Status": - novel.status = detail.replace(/G/g, "g"); - break; - } - }); - - novel.summary = loadedCheerio("div.summary__content").text(); - - const chapter: Plugin.ChapterItem[] = []; - - const novelId = loadedCheerio(".rating-post-id").attr("value")!; - - let formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); - - const data = await fetchApi( - "https://www.lightnovelupdates.com/wp-admin/admin-ajax.php", - { - method: "POST", - body: formData, - }, - ); - const text = await data.text(); - - loadedCheerio = parseHTML(text); - - loadedCheerio(".wp-manga-chapter").each(function () { - const chapterName = loadedCheerio(this).find("a").text().trim(); - const releaseDate = loadedCheerio(this).find("span").text().trim(); - const chapterUrl = loadedCheerio(this).find("a").attr("href"); - - if (!chapterUrl) return; - - chapter.push({ - name: chapterName, - releaseTime: releaseDate, - url: chapterUrl, - }); - }); - - novel.chapters = chapter.reverse(); - - return novel; - } - async parseChapter(chapterUrl: string): Promise { - const chapterText = 'unable to load'; - - return chapterText; - } - async searchNovels(searchTerm: string, pageNo: number): Promise { - const url = `${this.baseUrl}?s=${searchTerm}&post_type=wp-manga&m_orderby=rating`; - - const body = await fetchApi(url).then((r) => r.text()); - - const loadedCheerio = parseHTML(body); - - let novels: Plugin.NovelItem[] = []; - - loadedCheerio(".c-tabs-item__content").each(function () { - const novelName = loadedCheerio(this).find(".h4 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("src"); - const novelUrl = loadedCheerio(this).find(".h4 > a").attr("href"); - - if (!novelUrl) return; - - novels.push({ - url: novelUrl, - name: novelName, - cover: novelCover, - }); - }); - return novels; - } - async fetchImage(url: string): Promise { - return fetchFile(url); - } - -} - -export default new LightNovelUpdates(); \ No newline at end of file diff --git a/plugins/english/nitromanga.ts b/plugins/english/nitromanga.ts deleted file mode 100644 index 9e09de3..0000000 --- a/plugins/english/nitromanga.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { load as parseHTML } from "cheerio"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { Plugin } from "@typings/plugin"; -import { Filters } from "@libs/filterInputs"; - -class NitroManga implements Plugin.PluginBase { - id = "nitromanga"; - name = "Nitro Manga"; - version = "1.0.0"; - icon = "src/en/nitromanga/icon.png"; - filters?: Filters | undefined; - site = "https://nitromanga.com/"; - baseUrl = this.site; - async popularNovels(pageNo: number, options: Plugin.PopularNovelsOptions): Promise { - const url = this.baseUrl + "mangas-genre/novel/?m_orderby=trending"; - - const body = await fetchApi(url).then((r) => r.text()); - - const loadedCheerio = parseHTML(body); - - let novels: Plugin.NovelItem[] = []; - - loadedCheerio(".page-item-detail").each(function () { - const novelName = loadedCheerio(this).find("h3 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("data-src"); - const novelUrl = loadedCheerio(this).find("h3 > a").attr("href"); - - if (!novelUrl) return; - - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } - async parseNovelAndChapters(novelUrl: string): Promise { - const url = novelUrl; - - const body = await fetchApi(url).then((r) => r.text()); - - let loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url, - chapters: [], - }; - - loadedCheerio(".manga-title-badges.custom.novel").remove(); - - novel.name = loadedCheerio(".post-title > h1").text().trim(); - novel.cover = loadedCheerio(".summary_image") - .find("img") - .attr("data-src"); - - novel.summary = loadedCheerio(".summary__content").text()?.trim(); - - novel.genres = loadedCheerio(".genres-content") - .children("a") - .map((i, el) => loadedCheerio(el).text()) - .toArray() - .join(","); - - loadedCheerio(".post-content_item").each(function () { - const detailName = loadedCheerio(this) - .find(".summary-heading") - .text() - .trim(); - const detail = loadedCheerio(this) - .find(".summary-content") - .text() - .trim(); - switch (detailName) { - case "Author(s)": - novel.author = detail; - break; - case "Status": - novel.status = detail.replace(/G/g, "g"); - break; - } - }); - let chapter: Plugin.ChapterItem[] = []; - - let chapterlisturl = novelUrl + "ajax/chapters/"; - - const data = await fetchApi(chapterlisturl, { method: "POST" }); - const text = await data.text(); - - loadedCheerio = parseHTML(text); - - loadedCheerio(".wp-manga-chapter").each(function () { - const chapterName = loadedCheerio(this).find("a").text().trim(); - const releaseDate = loadedCheerio(this).find("span").text().trim(); - const chapterUrl = loadedCheerio(this).find("a").attr("href"); - - if (!chapterUrl) return; - - chapter.push({ - name: chapterName, - releaseTime: releaseDate, - url: chapterUrl, - }); - }); - - novel.chapters = chapter.reverse(); - - return novel; - } - async parseChapter(chapterUrl: string): Promise { - const body = await fetchApi(chapterUrl).then((r) => r.text()); - - let loadedCheerio = parseHTML(body); - - const chapterText = loadedCheerio(".text-left").html() || ''; - - return chapterText; - } - async searchNovels(searchTerm: string, pageNo: number): Promise { - const url = this.baseUrl + '?s=' + searchTerm + '&post_type=wp-manga&genre%5B%5D=novel'; - - const body = await fetchApi(url).then((r) => r.text()); - - let loadedCheerio = parseHTML(body); - - let novels: Plugin.NovelItem[] = []; - - loadedCheerio(".c-tabs-item__content").each(function () { - const novelName = loadedCheerio(this).find("h3 > a").text(); - const novelCover = loadedCheerio(this).find("img").attr("data-src"); - const novelUrl = loadedCheerio(this).find("h3 > a").attr("href"); - - if (!novelUrl) return; - - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } - async fetchImage(url: string): Promise { - return fetchFile(url); - } -} - -export default new NitroManga(); \ No newline at end of file diff --git a/plugins/russian/LitSpace.ts b/plugins/russian/LitSpace.ts index d4922ac..3d21655 100644 --- a/plugins/russian/LitSpace.ts +++ b/plugins/russian/LitSpace.ts @@ -1,241 +1,242 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; - -class freedlit implements Plugin.PluginBase { - id = "freedlit.space"; - name = "LitSpace"; - site = "https://freedlit.space"; - version = "1.0.0"; - icon = "src/ru/freedlit/icon.png"; - - - async popularNovels( - page: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + "/get-books/all/list/" + page + "?sort="; - url += showLatestNovels ? "recent" : filters?.sort?.value || "popular"; - url += "&status=" + (filters?.status?.value || "all"); - url += "&access=" + (filters?.access?.value || "all"); - url += "&adult=" + (filters?.adult?.value || "hide"); - - if (filters?.genre?.value?.include?.length) { - url += filters.genre.value.include - .map(id => '&genres_included[]=' + id).join(""); - } - - if (filters?.genre?.value?.exclude?.length) { - url += filters.genre.value.exclude - .map(id => '&genres_excluded[]=' + id).join(""); - } - - const body = await fetchApi(url).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - loadedCheerio("#bookListBlock > div > div").each(function () { - const name = loadedCheerio(this).find("div > h4 > a").text()?.trim(); - const cover = loadedCheerio(this) - .find("div > a > img") - .attr("src") - ?.trim(); - const url = loadedCheerio(this).find("div > h4 > a").attr("href")?.trim(); - if (!name || !url) return; - - novels.push({ name, cover, url }); - }); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const body = await fetchApi(novelUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: loadedCheerio(".book-info h4").text(), - cover: loadedCheerio(".book-cover > div > img").attr("src")?.trim(), - summary: loadedCheerio("#nav-home").text()?.trim(), - author: loadedCheerio(".book-info h5 > a").text(), - genres: loadedCheerio(".genre-list > a") - .map((index, element) => loadedCheerio(element).text()) - .get() - .join(","), - }; - - const chapters: Plugin.ChapterItem[] = []; - - loadedCheerio("a.chapter-line").each(function () { - const name = loadedCheerio(this).find("h6").text(); - const releaseTime = loadedCheerio(this).find('span[class="date"]').text(); - const url = loadedCheerio(this).attr("href"); - if (!name || !url) return; - - chapters.push({ name, releaseTime, url }); - }); - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const body = await fetchApi(chapterUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - loadedCheerio("div.mobile-block").remove(); - loadedCheerio("div.standart-block").remove(); - - const chapterText = loadedCheerio('div[class="chapter"]').html() || ""; - return chapterText; - } - - async searchNovels(searchTerm: string): Promise { - const url = `${this.site}/search?query=${searchTerm}&type=all`; - const body = await fetchApi(url).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - loadedCheerio("#bookListBlock > div").each(function () { - const name = loadedCheerio(this).find("h4 > a").text()?.trim(); - const cover = loadedCheerio(this).find("a > img").attr("src")?.trim(); - const url = loadedCheerio(this).find("h4 > a").attr("href")?.trim(); - if (!name || !url) return; - - novels.push({ name, cover, url }); - }); - - return novels; - } - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка:", - value: "", - options: [ - { label: "По популярности", value: "popular" }, - { label: "По количеству комментариев", value: "comments" }, - { label: "По количеству лайков", value: "likes" }, - { label: "По новизне", value: "recent" }, - { label: "По просмотрам", value: "views" }, - ], - type: FilterTypes.Picker, - }, - genre: { - label: "Жанры:", - value: { include: [], exclude: [] }, - options: [ - { label: "Любой жанр", value: "all" }, - { label: "Альтернативная история", value: "alternative-history" }, - { label: "Антиутопия", value: "dystopia" }, - { label: "Бизнес-литература", value: "business-literature" }, - { label: "Боевая фантастика", value: "combat-fiction" }, - { label: "Боевик", value: "action" }, - { label: "Боевое фэнтези", value: "combat-fantasy" }, - { label: "Бояръ-Аниме", value: "boyar-anime" }, - { label: "Героическая фантастика", value: "heroic-fiction" }, - { label: "Героическое фэнтези", value: "heroic-fantasy" }, - { label: "Городское фэнтези", value: "urban-fantasy" }, - { label: "Гримдарк", value: "grimdark" }, - { label: "Детектив", value: "mystery" }, - { label: "Детская литература", value: "kids-literature" }, - { label: "Документальная проза", value: "biography" }, - { label: "Историческая проза", value: "historical-fiction" }, - { label: "Исторический детектив", value: "historical-mystery" }, - { label: "Исторический любовный роман", value: "historical-romantic-novel" }, - { label: "Историческое фэнтези", value: "historical-fantasy" }, - { label: "Киберпанк", value: "cyberpunk" }, - { label: "Космическая фантастика", value: "cosmic-fiction" }, - { label: "ЛитРПГ", value: "litrpg" }, - { label: "Лоу / Низкое фэнтези", value: "low-fantasy" }, - { label: "Любовное фэнтези", value: "romantic-fantasy" }, - { label: "Любовный роман", value: "romantic-novel" }, - { label: "Мистика", value: "mystic" }, - { label: "Мистический детектив", value: "mystic-detective" }, - { label: "Научная фантастика", value: "science-fiction" }, - { label: "Подростковая проза", value: "young-adult" }, - { label: "Политический роман", value: "political-romance" }, - { label: "Попаданцы", value: "accidental-travel" }, - { label: "Попаданцы в магические миры", value: "magic-worlds-travel" }, - { label: "Попаданцы во времени", value: "time-travel" }, - { label: "Порнотика", value: "pornotica" }, - { label: "Постапокалипсис", value: "post-apocalypse" }, - { label: "Поэзия", value: "poetry" }, - { label: "Приключения", value: "adventure" }, - { label: "Публицистика", value: "journalism" }, - { label: "Пьеса", value: "play" }, - { label: "Развитие личности", value: "how-to-book" }, - { label: "Разное", value: "other" }, - { label: "Реализм", value: "Realism" }, - { label: "РеалРПГ", value: "realrpg" }, - { label: "Репликация", value: "replication" }, - { label: "Романтическая эротика", value: "romantic-erotic-fiction" }, - { label: "Сказка", value: "fairy-tale" }, - { label: "Слэш", value: "slash" }, - { label: "Современная проза", value: "modern-prose" }, - { label: "Современный любовный роман", value: "modern-romantic-novel" }, - { label: "Социальная фантастика", value: "social-fiction" }, - { label: "Стимпанк", value: "steampunk" }, - { label: "Сценарий", value: "scenario" }, - { label: "Сюаньхуань", value: "xuanhuan" }, - { label: "Сянься", value: "xianxia" }, - { label: "Тёмное фэнтези", value: "dark-fantasy" }, - { label: "Триллер", value: "thriller" }, - { label: "Уся", value: "wuxia" }, - { label: "Фантастика", value: "fiction" }, - { label: "Фантастический детектив", value: "mystery-fiction" }, - { label: "Фанфик", value: "fan-fiction" }, - { label: "Фемслэш", value: "femslash" }, - { label: "Фэнтези", value: "fantasy" }, - { label: "Хоррор", value: "horror" }, - { label: "Шпионский детектив", value: "spy-crime" }, - { label: "Эпическое фэнтези", value: "epic-fantasy" }, - { label: "Эротика", value: "erotic-fiction" }, - { label: "Эротическая фантастика", value: "erotic-fiction" }, - { label: "Эротический фанфик", value: "erotic-fan-fiction" }, - { label: "Эротическое фэнтези", value: "erotic-fantasy" }, - { label: "Этническое фэнтези", value: "ethnic-fantasy" }, - { label: "Юмор", value: "humor" }, - { label: "Юмористическая фантастика", value: "humor-fiction" }, - { label: "Юмористическое фэнтези", value: "humor-fantasy" }, - { label: "RPS", value: "rps" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - status: { - label: "Статус:", - value: "", - options: [ - { label: "Любой статус", value: "all" }, - { label: "В процессе", value: "in-process" }, - { label: "Завершено", value: "finished" }, - ], - type: FilterTypes.Picker, - }, - access: { - label: "Доступ:", - value: "", - options: [ - { label: "Любой доступ", value: "all" }, - { label: "Бесплатные", value: "free" }, - { label: "Платные", value: "paid" }, - ], - type: FilterTypes.Picker, - }, - adult: { - label: "Возрастные ограничения:", - value: "", - options: [ - { label: "Скрыть 18+", value: "hide" }, - { label: "Показать +18", value: "show" }, - ], - type: FilterTypes.Picker, - }, - } satisfies Filters; -} - -export default new freedlit(); +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; + +class freedlit implements Plugin.PluginBase { + id = "freedlit.space"; + name = "LitSpace"; + site = "https://freedlit.space"; + version = "1.0.0"; + icon = "src/ru/freedlit/icon.png"; + + async popularNovels( + page: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/get-books/all/list/" + page + "?sort="; + url += showLatestNovels ? "recent" : filters?.sort?.value || "popular"; + url += "&status=" + (filters?.status?.value || "all"); + url += "&access=" + (filters?.access?.value || "all"); + url += "&adult=" + (filters?.adult?.value || "hide"); + + if (filters?.genre?.value?.include?.length) { + url += filters.genre.value.include + .map((id) => "&genres_included[]=" + id) + .join(""); + } + + if (filters?.genre?.value?.exclude?.length) { + url += filters.genre.value.exclude + .map((id) => "&genres_excluded[]=" + id) + .join(""); + } + + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = []; + loadedCheerio("#bookListBlock > div > div").each(function () { + const name = loadedCheerio(this).find("div > h4 > a").text()?.trim(); + const cover = loadedCheerio(this) + .find("div > a > img") + .attr("src") + ?.trim(); + const url = loadedCheerio(this).find("div > h4 > a").attr("href")?.trim(); + if (!name || !url) return; + + novels.push({ name, cover, url }); + }); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const body = await fetchApi(novelUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: loadedCheerio(".book-info h4").text(), + cover: loadedCheerio(".book-cover > div > img").attr("src")?.trim(), + summary: loadedCheerio("#nav-home").text()?.trim(), + author: loadedCheerio(".book-info h5 > a").text(), + genres: loadedCheerio(".genre-list > a") + .map((index, element) => loadedCheerio(element).text()) + .get() + .join(","), + }; + + const chapters: Plugin.ChapterItem[] = []; + + loadedCheerio("a.chapter-line").each((chapterIndex, element) => { + const name = loadedCheerio(element).find("h6").text(); + const url = loadedCheerio(element).attr("href"); + if (!name || !url) return; + + const releaseTime = loadedCheerio(element).find('span[class="date"]').text(); + chapters.push({ name, url, releaseTime, chapterNumber: chapterIndex + 1 }); + }); + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const body = await fetchApi(chapterUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + loadedCheerio("div.mobile-block").remove(); + loadedCheerio("div.standart-block").remove(); + + const chapterText = loadedCheerio('div[class="chapter"]').html() || ""; + return chapterText; + } + + async searchNovels(searchTerm: string): Promise { + const url = `${this.site}/search?query=${searchTerm}&type=all`; + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = []; + loadedCheerio("#bookListBlock > div").each(function () { + const name = loadedCheerio(this).find("h4 > a").text()?.trim(); + const cover = loadedCheerio(this).find("a > img").attr("src")?.trim(); + const url = loadedCheerio(this).find("h4 > a").attr("href")?.trim(); + if (!name || !url) return; + + novels.push({ name, cover, url }); + }); + + return novels; + } + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка:", + value: "popular", + options: [ + { label: "По популярности", value: "popular" }, + { label: "По количеству комментариев", value: "comments" }, + { label: "По количеству лайков", value: "likes" }, + { label: "По новизне", value: "recent" }, + { label: "По просмотрам", value: "views" }, + ], + type: FilterTypes.Picker, + }, + genre: { + label: "Жанры:", + value: { include: [], exclude: [] }, + options: [ + { label: "Любой жанр", value: "all" }, + { label: "Альтернативная история", value: "alternative-history" }, + { label: "Антиутопия", value: "dystopia" }, + { label: "Бизнес-литература", value: "business-literature" }, + { label: "Боевая фантастика", value: "combat-fiction" }, + { label: "Боевик", value: "action" }, + { label: "Боевое фэнтези", value: "combat-fantasy" }, + { label: "Бояръ-Аниме", value: "boyar-anime" }, + { label: "Героическая фантастика", value: "heroic-fiction" }, + { label: "Героическое фэнтези", value: "heroic-fantasy" }, + { label: "Городское фэнтези", value: "urban-fantasy" }, + { label: "Гримдарк", value: "grimdark" }, + { label: "Детектив", value: "mystery" }, + { label: "Детская литература", value: "kids-literature" }, + { label: "Документальная проза", value: "biography" }, + { label: "Историческая проза", value: "historical-fiction" }, + { label: "Исторический детектив", value: "historical-mystery" }, + { label: "Исторический любовный роман", value: "historical-romantic-novel" }, + { label: "Историческое фэнтези", value: "historical-fantasy" }, + { label: "Киберпанк", value: "cyberpunk" }, + { label: "Космическая фантастика", value: "cosmic-fiction" }, + { label: "ЛитРПГ", value: "litrpg" }, + { label: "Лоу / Низкое фэнтези", value: "low-fantasy" }, + { label: "Любовное фэнтези", value: "romantic-fantasy" }, + { label: "Любовный роман", value: "romantic-novel" }, + { label: "Мистика", value: "mystic" }, + { label: "Мистический детектив", value: "mystic-detective" }, + { label: "Научная фантастика", value: "science-fiction" }, + { label: "Подростковая проза", value: "young-adult" }, + { label: "Политический роман", value: "political-romance" }, + { label: "Попаданцы", value: "accidental-travel" }, + { label: "Попаданцы в магические миры", value: "magic-worlds-travel" }, + { label: "Попаданцы во времени", value: "time-travel" }, + { label: "Порнотика", value: "pornotica" }, + { label: "Постапокалипсис", value: "post-apocalypse" }, + { label: "Поэзия", value: "poetry" }, + { label: "Приключения", value: "adventure" }, + { label: "Публицистика", value: "journalism" }, + { label: "Пьеса", value: "play" }, + { label: "Развитие личности", value: "how-to-book" }, + { label: "Разное", value: "other" }, + { label: "Реализм", value: "Realism" }, + { label: "РеалРПГ", value: "realrpg" }, + { label: "Репликация", value: "replication" }, + { label: "Романтическая эротика", value: "romantic-erotic-fiction" }, + { label: "Сказка", value: "fairy-tale" }, + { label: "Слэш", value: "slash" }, + { label: "Современная проза", value: "modern-prose" }, + { label: "Современный любовный роман", value: "modern-romantic-novel" }, + { label: "Социальная фантастика", value: "social-fiction" }, + { label: "Стимпанк", value: "steampunk" }, + { label: "Сценарий", value: "scenario" }, + { label: "Сюаньхуань", value: "xuanhuan" }, + { label: "Сянься", value: "xianxia" }, + { label: "Тёмное фэнтези", value: "dark-fantasy" }, + { label: "Триллер", value: "thriller" }, + { label: "Уся", value: "wuxia" }, + { label: "Фантастика", value: "fiction" }, + { label: "Фантастический детектив", value: "mystery-fiction" }, + { label: "Фанфик", value: "fan-fiction" }, + { label: "Фемслэш", value: "femslash" }, + { label: "Фэнтези", value: "fantasy" }, + { label: "Хоррор", value: "horror" }, + { label: "Шпионский детектив", value: "spy-crime" }, + { label: "Эпическое фэнтези", value: "epic-fantasy" }, + { label: "Эротика", value: "erotic-fiction" }, + { label: "Эротическая фантастика", value: "erotic-fiction" }, + { label: "Эротический фанфик", value: "erotic-fan-fiction" }, + { label: "Эротическое фэнтези", value: "erotic-fantasy" }, + { label: "Этническое фэнтези", value: "ethnic-fantasy" }, + { label: "Юмор", value: "humor" }, + { label: "Юмористическая фантастика", value: "humor-fiction" }, + { label: "Юмористическое фэнтези", value: "humor-fantasy" }, + { label: "RPS", value: "rps" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + status: { + label: "Статус:", + value: "all", + options: [ + { label: "Любой статус", value: "all" }, + { label: "В процессе", value: "in-process" }, + { label: "Завершено", value: "finished" }, + ], + type: FilterTypes.Picker, + }, + access: { + label: "Доступ:", + value: "all", + options: [ + { label: "Любой доступ", value: "all" }, + { label: "Бесплатные", value: "free" }, + { label: "Платные", value: "paid" }, + ], + type: FilterTypes.Picker, + }, + adult: { + label: "Возрастные ограничения:", + value: "hide", + options: [ + { label: "Скрыть 18+", value: "hide" }, + { label: "Показать +18", value: "show" }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} + +export default new freedlit(); diff --git a/plugins/russian/authortoday.ts b/plugins/russian/authortoday.ts index f99187c..b6889bf 100644 --- a/plugins/russian/authortoday.ts +++ b/plugins/russian/authortoday.ts @@ -1,538 +1,529 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { defaultCover } from "@libs/defaultCover"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -const apiUrl = "https://api.author.today/"; -const token = "Bearer guest"; - -class AuthorToday implements Plugin.PluginBase { - id = "AT"; - name = "Автор Тудей"; - icon = "src/ru/authortoday/icon.png"; - site = "https://author.today"; - version = "1.0.0"; - - - async popularNovels( - pageNo: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - let url = apiUrl + "v1/catalog/search?page=" + pageNo; - if (filters?.genre?.value) { - url += "&genre=" + filters.genre.value; - } - - url += - "&sorting=" + (showLatestNovels ? "recent" : filters?.sort?.value || "popular"); - - url += "&form=" + (filters?.form?.value || "any"); - url += "&state=" + (filters?.state?.value || "any"); - url += "&series=" + (filters?.series?.value || "any"); - url += "&access=" + (filters?.access?.value || "any"); - url += "&promo=" + (filters?.promo?.value || "hide"); - - const result = await fetchApi(url, { - headers: { - Authorization: token, - }, - }); - const json = (await result.json()) as response; - const novels: Plugin.NovelItem[] = []; - - if (json?.code === "NotFound") { - return novels; - } - - json?.searchResults?.forEach((novel) => - novels.push({ - name: novel.title, - cover: novel?.coverUrl - ? "https://cm.author.today/content/" + novel.coverUrl - : defaultCover, - url: this.site + "/work/" + novel.id, - }), - ); - - return novels; - } - async parseNovelAndChapters(novelUrl: string): Promise { - const workID = novelUrl.split("/")[4]; - const result = await fetchApi(`${apiUrl}v1/work/${workID}/details`, { - headers: { - Authorization: token, - }, - }); - - const json = (await result.json()) as responseBook; - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: json.title, - cover: json?.coverUrl ? json.coverUrl.split("?")[0] : defaultCover, - author: - json?.originalAuthor || - json?.authorFIO || - json?.coAuthorFIO || - json?.secondCoAuthorFIO || - json?.translator || - "", - genres: json?.tags?.join(", "), - status: json?.isFinished ? NovelStatus.Completed : NovelStatus.Ongoing, - }; - - novel.summary = ""; - novel.summary += json?.annotation ? json.annotation + "\n" : ""; - novel.summary += json?.authorNotes - ? "Примечания автора:\n" + json.authorNotes - : ""; - // all chapters - const chaptersRaw = await fetchApi(`${apiUrl}v1/work/${workID}/content`, { - headers: { - Authorization: token, - }, - }); - - const chaptersJSON = (await chaptersRaw.json()) as ChaptersEntity[]; - const chapters: Plugin.ChapterItem[] = []; - chaptersJSON?.forEach((chapter, index) => { - if (chapter?.isAvailable && !chapter?.isDraft) { - chapters.push({ - name: chapter?.title || `Глава ${index + 1}`, - releaseTime: dayjs( - chapter?.publishTime || chapter.lastModificationTime, - ).format("LLL"), - url: `${apiUrl}v1/work/${workID}/chapter/${chapter.id}/text`, - }); - } - }); - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(chapterUrl, { - headers: { - Authorization: token, - }, - }); - const json = (await result.json()) as encryptedСhapter; - - if (json?.code) { - return json.code + "\n" + json?.message; - } - - const key = json.key.split("").reverse().join("") + "@_@"; - let text = ""; - - for (let i = 0; i < json.text.length; i++) { - text += String.fromCharCode( - json.text.charCodeAt(i) ^ key.charCodeAt(Math.floor(i % key.length)), - ); - } - - const loadedCheerio = parseHTML(text); - const baseUrl = this.site; - loadedCheerio("img").each(function () { - if (!loadedCheerio(this).attr("src")?.startsWith("http")) { - const src = loadedCheerio(this).attr("src"); - loadedCheerio(this).attr("src", baseUrl + src); - } - }); - const chapterText = loadedCheerio.html(); - return chapterText; - } - - async searchNovels( - searchTerm: string, - pageNo?: number | undefined, - ): Promise { - const baseUrl = this.site; - const url = baseUrl + "/search?category=works&q=" + searchTerm + "&page="; - const result = await fetchApi(url + (pageNo || 1)); - const body = await result.text(); - const loadedCheerio = parseHTML(body); - const novels: Plugin.NovelItem[] = []; - - loadedCheerio("div.book-row").each(function () { - const name = loadedCheerio(this) - .find('div[class="book-title"] a') - .text() - .trim(); - let cover = loadedCheerio(this).find("img").attr("src"); - const url = - baseUrl + - "/work/" + - loadedCheerio(this) - .find('div[class="book-title"] a') - .attr("href") - ?.split("/")[2]; - - if (cover) { - cover = cover.split("?")[0]; - } else { - cover = defaultCover; - } - - novels.push({ name, cover, url }); - }); - - return novels; - } - - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "По популярности", value: "popular" }, - { label: "По количеству лайков", value: "likes" }, - { label: "По комментариям", value: "comments" }, - { label: "По новизне", value: "recent" }, - { label: "По просмотрам", value: "views" }, - { label: "Набирающие популярность", value: "trending" }, - ], - type: FilterTypes.Picker, - }, - genre: { - label: "Жанры", - value: "", - options: [ - { label: "Альтернативная история", value: "sf-history" }, - { label: "Антиутопия", value: "dystopia" }, - { label: "Бизнес-литература", value: "biznes-literatura" }, - { label: "Боевая фантастика", value: "sf-action" }, - { label: "Боевик", value: "action" }, - { label: "Боевое фэнтези", value: "fantasy-action" }, - { label: "Бояръ-Аниме", value: "boyar-anime" }, - { label: "Героическая фантастика", value: "sf-heroic" }, - { label: "Героическое фэнтези", value: "heroic-fantasy" }, - { label: "Городское фэнтези", value: "urban-fantasy" }, - { label: "Детектив", value: "detective" }, - { label: "Детская литература", value: "detskaya-literatura" }, - { label: "Документальная проза", value: "non-fiction" }, - { label: "Историческая проза", value: "historical-fiction" }, - { label: "Исторические приключения", value: "historical-adventure" }, - { label: "Исторический детектив", value: "historical-mystery" }, - { label: "Исторический любовный роман", value: "historical-romance" }, - { label: "Историческое фэнтези", value: "historical-fantasy" }, - { label: "Киберпанк", value: "cyberpunk" }, - { label: "Короткий любовный роман", value: "short-romance" }, - { label: "Космическая фантастика", value: "sf-space" }, - { label: "ЛитРПГ", value: "litrpg" }, - { label: "Любовное фэнтези", value: "love-fantasy" }, - { label: "Любовные романы", value: "romance" }, - { label: "Мистика", value: "paranormal" }, - { label: "Назад в СССР", value: "back-to-ussr" }, - { label: "Научная фантастика", value: "science-fiction" }, - { label: "Подростковая проза", value: "teen-prose" }, - { label: "Политический роман", value: "political-fiction" }, - { label: "Попаданцы", value: "popadantsy" }, - { label: "Попаданцы в космос", value: "popadantsy-v-kosmos" }, - { label: "Попаданцы в магические миры", value: "popadantsy-v-magicheskie-miry" }, - { label: "Попаданцы во времени", value: "popadantsy-vo-vremeni" }, - { label: "Постапокалипсис", value: "postapocalyptic" }, - { label: "Поэзия", value: "poetry" }, - { label: "Приключения", value: "adventure" }, - { label: "Публицистика", value: "publicism" }, - { label: "Развитие личности", value: "razvitie-lichnosti" }, - { label: "Разное", value: "other" }, - { label: "РеалРПГ", value: "realrpg" }, - { label: "Романтическая эротика", value: "romantic-erotika" }, - { label: "Сказка", value: "fairy-tale" }, - { label: "Современная проза", value: "modern-prose" }, - { label: "Современный любовный роман", value: "contemporary-romance" }, - { label: "Социальная фантастика", value: "sf-social" }, - { label: "Стимпанк", value: "steampunk" }, - { label: "Темное фэнтези", value: "dark-fantasy" }, - { label: "Триллер", value: "thriller" }, - { label: "Ужасы", value: "horror" }, - { label: "Фантастика", value: "sci-fi" }, - { label: "Фантастический детектив", value: "detective-science-fiction" }, - { label: "Фанфик", value: "fanfiction" }, - { label: "Фэнтези", value: "fantasy" }, - { label: "Шпионский детектив", value: "spy-mystery" }, - { label: "Эпическое фэнтези", value: "epic-fantasy" }, - { label: "Эротика", value: "erotica" }, - { label: "Эротическая фантастика", value: "sf-erotika" }, - { label: "Эротический фанфик", value: "fanfiction-erotika" }, - { label: "Эротическое фэнтези", value: "fantasy-erotika" }, - { label: "Юмор", value: "humor" }, - { label: "Юмористическая фантастика", value: "sf-humor" }, - { label: "Юмористическое фэнтези", value: "ironical-fantasy" }, - ], - type: FilterTypes.Picker, - }, - form: { - label: "Форма произведения", - value: "", - options: [ - { label: "Любой", value: "any" }, - { label: "Перевод", value: "translation" }, - { label: "Повесть", value: "tale" }, - { label: "Рассказ", value: "story" }, - { label: "Роман", value: "novel" }, - { label: "Сборник поэзии", value: "poetry" }, - { label: "Сборник рассказов", value: "story-book" }, - ], - type: FilterTypes.Picker, - }, - state: { - label: "Статус произведения", - value: "", - options: [ - { label: "Любой статус", value: "any" }, - { label: "В процессе", value: "in-progress" }, - { label: "Завершено", value: "finished" }, - ], - type: FilterTypes.Picker, - }, - series: { - label: "Статус цикла", - value: "", - options: [ - { label: "Не важно", value: "any" }, - { label: "Вне цикла", value: "out" }, - { label: "Цикл завершен", value: "finished" }, - { label: "Цикл не завершен", value: "unfinished" }, - ], - type: FilterTypes.Picker, - }, - access: { - label: "Тип доступа", - value: "", - options: [ - { label: "Любой", value: "any" }, - { label: "Платный", value: "paid" }, - { label: "Бесплатный", value: "free" }, - ], - type: FilterTypes.Picker, - }, - promo: { - label: "Промо-фрагмент", - value: "", - options: [ - { label: "Скрывать", value: "hide" }, - { label: "Показывать", value: "show" }, - ], - type: FilterTypes.Picker, - }, - } satisfies Filters; -} - -export default new AuthorToday(); - -interface response { - searchResults?: SearchResultsEntity[] | null; - realTotalCount: number; - code?: string; - errorMessage?: null; - isLastPage: boolean; - format: Format; - duration: Duration; - isWorkMarkEnabled: boolean; -} -interface SearchResultsEntity { - id: number; - title: string; - annotation: string; - authorId: number; - authorFIO: string; - authorUserName: string; - originalAuthor?: null; - coAuthorId?: number | null; - coAuthorFIO?: string | null; - coAuthorUserName?: string | null; - coAuthorConfirmed: boolean; - seriesId: number; - seriesTitle?: string | null; - publishTime: string; - lastModificationTime: string; - finishTime?: string | null; - isDraft: boolean; - formEnum: string; - genreId: number; - firstSubGenreId: number; - secondSubGenreId?: number | null; - adultOnly: boolean; - tags?: (string | null)[] | null; - coverUrl: string; - viewCount: number; - commentCount: number; - reviewCount: number; - textLength: number; - likeCount: number; - showAuthor: boolean; - price?: number | null; - discount?: null; - discountStartDate?: null; - discountEndDate?: null; - status: string; - promoFragment: boolean; - isExclusive: boolean; - format: string; - marks?: null[] | null; - isLiked: boolean; - isWorkMarkEnabled: boolean; - workInLibraryState: string; -} -interface Format { - enumValue: string; - value: string; - title: string; - mobileTitle: string; -} -interface Duration { - value: string; - title: string; - mobileTitle: string; -} - -interface responseBook { - chapters?: ChaptersEntity[] | null; - allowDownloads: boolean; - downloadErrorCode: string; - downloadErrorMessage: string; - privacyDownloads: string; - collectionCount: number; - annotation: string; - authorNotes: string; - atRecommendation: boolean; - seriesWorkIds?: number[] | null; - seriesWorkNumber: number; - reviewCount: number; - tags?: string[] | null; - orderId?: null; - orderStatus: string; - orderStatusMessage?: null; - contests?: null[] | null; - galleryImages?: GalleryImagesEntity[] | null; - booktrailerVideoUrl?: null; - isExclusive: boolean; - freeChapterCount: number; - promoFragment: boolean; - recommendations?: RecommendationsEntity[] | null; - linkedWork?: null; - id: number; - title: string; - coverUrl: string; - lastModificationTime: string; - lastUpdateTime: string; - finishTime?: null; - isFinished: boolean; - textLength: number; - textLengthLastRead: number; - price: number; - discount?: null; - workForm: string; - status: string; - authorId: number; - authorFIO: string; - authorUserName: string; - originalAuthor?: null; - translator?: null; - reciter?: null; - coAuthorId?: null; - coAuthorFIO?: null; - coAuthorUserName?: null; - coAuthorConfirmed: boolean; - secondCoAuthorId?: null; - secondCoAuthorFIO?: null; - secondCoAuthorUserName?: null; - secondCoAuthorConfirmed: boolean; - isPurchased: boolean; - userLikeId?: null; - lastReadTime?: null; - lastChapterId?: null; - lastChapterProgress: number; - likeCount: number; - commentCount: number; - rewardCount: number; - rewardsEnabled: boolean; - inLibraryState: string; - addedToLibraryTime: string; - updateInLibraryTime: string; - privacyDisplay: string; - state: string; - isDraft: boolean; - enableRedLine: boolean; - enableTTS: boolean; - adultOnly: boolean; - seriesId: number; - seriesOrder: number; - seriesTitle: string; - afterword: string; - seriesNextWorkId?: null; - genreId: number; - firstSubGenreId: number; - secondSubGenreId: number; - format: string; - marks?: null; - purchaseTime?: null; - likeTime?: null; - markTime?: null; -} -interface ChaptersEntity { - id: number; - workId: number; - title: string; - isDraft: boolean; - sortOrder: number; - publishTime: string; - lastModificationTime: string; - textLength: number; - isAvailable: boolean; -} - -interface GalleryImagesEntity { - id: string; - caption?: null; - url: string; - height: number; - width: number; -} -interface RecommendationsEntity { - title: string; - coverUrl: string; - authorId: number; - authorFIO: string; - authorUserName: string; - originalAuthor?: null; - coAuthorId?: null; - coAuthorFIO?: null; - coAuthorUserName?: null; - coAuthorConfirmed: boolean; - secondCoAuthorId?: null; - secondCoAuthorFIO?: null; - secondCoAuthorUserName?: null; - secondCoAuthorConfirmed: boolean; - discount?: null; - price?: number | null; - lastModificationTime: string; - finishTime: string; - finished: boolean; - isExclusive: boolean; - format: string; - status: string; - state: string; - removalReason?: null; - removalReasonComment?: null; - id: number; -} - -interface encryptedСhapter { - id: number; - title: string; - isDraft: boolean; - publishTime: string; - lastModificationTime: string; - text: string; - key: string; - code?: string; - message?: string; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { defaultCover } from "@libs/defaultCover"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +const apiUrl = "https://api.author.today/"; +const token = "Bearer guest"; + +class AuthorToday implements Plugin.PluginBase { + id = "AT"; + name = "Автор Тудей"; + icon = "src/ru/authortoday/icon.png"; + site = "https://author.today"; + version = "1.0.0"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = apiUrl + "v1/catalog/search?page=" + pageNo; + if (filters?.genre?.value) { + url += "&genre=" + filters.genre.value; + } + + url += + "&sorting=" + + (showLatestNovels ? "recent" : filters?.sort?.value || "popular"); + + url += "&form=" + (filters?.form?.value || "any"); + url += "&state=" + (filters?.state?.value || "any"); + url += "&series=" + (filters?.series?.value || "any"); + url += "&access=" + (filters?.access?.value || "any"); + url += "&promo=" + (filters?.promo?.value || "hide"); + + const result = await fetchApi(url, { + headers: { + Authorization: token, + }, + }); + const json = (await result.json()) as response; + const novels: Plugin.NovelItem[] = []; + + if (json.code === "NotFound") { + return novels; + } + + json?.searchResults?.forEach((novel) => + novels.push({ + name: novel.title, + cover: novel.coverUrl + ? "https://cm.author.today/content/" + novel.coverUrl + : defaultCover, + url: this.site + "/work/" + novel.id, + }), + ); + + return novels; + } + async parseNovelAndChapters(novelUrl: string): Promise { + const workID = novelUrl.split("/")[4]; + const result = await fetchApi(`${apiUrl}v1/work/${workID}/details`, { + headers: { + Authorization: token, + }, + }); + + const book = (await result.json()) as responseBook; + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: book.title, + cover: book.coverUrl ? book.coverUrl.split("?")[0] : defaultCover, + genres: book.tags?.join(", "), + summary: "", + author: + book.originalAuthor || + book.authorFIO || + book.coAuthorFIO || + book.secondCoAuthorFIO || + book.translator || + "", + status: book.isFinished ? NovelStatus.Completed : NovelStatus.Ongoing, + }; + + if (book.annotation) novel.summary += book.annotation + "\n"; + if (book.authorNotes) novel.summary += "Примечания автора:\n" + book.authorNotes; + + // all chapters + const chaptersRaw = await fetchApi(`${apiUrl}v1/work/${workID}/content`, { + headers: { + Authorization: token, + }, + }); + + const chaptersJSON = (await chaptersRaw.json()) as ChaptersEntity[]; + const chapters: Plugin.ChapterItem[] = []; + chaptersJSON.forEach((chapter, chapterIndex) => { + if (chapter.isAvailable && !chapter.isDraft) { + chapters.push({ + name: chapter.title || 'Глава ' + (chapterIndex + 1), + url: `${apiUrl}v1/work/${workID}/chapter/${chapter.id}/text`, + releaseTime: dayjs(chapter.publishTime || chapter.lastModificationTime).format("LLL"), + chapterNumber: (chapter.sortOrder || chapterIndex) + 1, + }); + } + }); + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(chapterUrl, { + headers: { + Authorization: token, + }, + }); + const json = (await result.json()) as encryptedСhapter; + + if (json.code) { + return json.code + "\n" + json?.message; + } + + const key = json.key.split("").reverse().join("") + "@_@"; + let text = ""; + + for (let i = 0; i < json.text.length; i++) { + text += String.fromCharCode( + json.text.charCodeAt(i) ^ key.charCodeAt(Math.floor(i % key.length)), + ); + } + + const loadedCheerio = parseHTML(text); + loadedCheerio("img").each((index, element) => { + if (!loadedCheerio(element).attr("src")?.startsWith("http")) { + const src = loadedCheerio(element).attr("src"); + loadedCheerio(element).attr("src", this.site + src); + } + }); + const chapterText = loadedCheerio.html(); + return chapterText; + } + + async searchNovels( + searchTerm: string, + pageNo: number | undefined = 1, + ): Promise { + const url = + this.site + "/search?category=works&q=" + searchTerm + "&page=" + pageNo; + const result = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + const novels: Plugin.NovelItem[] = []; + + loadedCheerio("div.book-row").each((index, element) => { + const name = loadedCheerio(element) + .find('div[class="book-title"] a') + .text() + .trim(); + let cover = loadedCheerio(element).find("img").attr("src"); + const url = loadedCheerio(element) + .find('div[class="book-title"] a') + .attr("href") + ?.split("/")?.[2]; + + cover = cover ? cover.split("?")[0] : defaultCover; + + if (!url) return; + novels.push({ name, cover, url: this.site + "/work/" + url }); + }); + + return novels; + } + + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "popular", + options: [ + { label: "По популярности", value: "popular" }, + { label: "По количеству лайков", value: "likes" }, + { label: "По комментариям", value: "comments" }, + { label: "По новизне", value: "recent" }, + { label: "По просмотрам", value: "views" }, + { label: "Набирающие популярность", value: "trending" }, + ], + type: FilterTypes.Picker, + }, + genre: { + label: "Жанры", + value: "", + options: [ + { label: "Все", value:"" }, + { label: "Альтернативная история", value: "sf-history" }, + { label: "Антиутопия", value: "dystopia" }, + { label: "Бизнес-литература", value: "biznes-literatura" }, + { label: "Боевая фантастика", value: "sf-action" }, + { label: "Боевик", value: "action" }, + { label: "Боевое фэнтези", value: "fantasy-action" }, + { label: "Бояръ-Аниме", value: "boyar-anime" }, + { label: "Героическая фантастика", value: "sf-heroic" }, + { label: "Героическое фэнтези", value: "heroic-fantasy" }, + { label: "Городское фэнтези", value: "urban-fantasy" }, + { label: "Детектив", value: "detective" }, + { label: "Детская литература", value: "detskaya-literatura" }, + { label: "Документальная проза", value: "non-fiction" }, + { label: "Историческая проза", value: "historical-fiction" }, + { label: "Исторические приключения", value: "historical-adventure" }, + { label: "Исторический детектив", value: "historical-mystery" }, + { label: "Исторический любовный роман", value: "historical-romance" }, + { label: "Историческое фэнтези", value: "historical-fantasy" }, + { label: "Киберпанк", value: "cyberpunk" }, + { label: "Короткий любовный роман", value: "short-romance" }, + { label: "Космическая фантастика", value: "sf-space" }, + { label: "ЛитРПГ", value: "litrpg" }, + { label: "Любовное фэнтези", value: "love-fantasy" }, + { label: "Любовные романы", value: "romance" }, + { label: "Мистика", value: "paranormal" }, + { label: "Назад в СССР", value: "back-to-ussr" }, + { label: "Научная фантастика", value: "science-fiction" }, + { label: "Подростковая проза", value: "teen-prose" }, + { label: "Политический роман", value: "political-fiction" }, + { label: "Попаданцы", value: "popadantsy" }, + { label: "Попаданцы в космос", value: "popadantsy-v-kosmos" }, + { label: "Попаданцы в магические миры", value: "popadantsy-v-magicheskie-miry" }, + { label: "Попаданцы во времени", value: "popadantsy-vo-vremeni" }, + { label: "Постапокалипсис", value: "postapocalyptic" }, + { label: "Поэзия", value: "poetry" }, + { label: "Приключения", value: "adventure" }, + { label: "Публицистика", value: "publicism" }, + { label: "Развитие личности", value: "razvitie-lichnosti" }, + { label: "Разное", value: "other" }, + { label: "РеалРПГ", value: "realrpg" }, + { label: "Романтическая эротика", value: "romantic-erotika" }, + { label: "Сказка", value: "fairy-tale" }, + { label: "Современная проза", value: "modern-prose" }, + { label: "Современный любовный роман", value: "contemporary-romance" }, + { label: "Социальная фантастика", value: "sf-social" }, + { label: "Стимпанк", value: "steampunk" }, + { label: "Темное фэнтези", value: "dark-fantasy" }, + { label: "Триллер", value: "thriller" }, + { label: "Ужасы", value: "horror" }, + { label: "Фантастика", value: "sci-fi" }, + { label: "Фантастический детектив", value: "detective-science-fiction" }, + { label: "Фанфик", value: "fanfiction" }, + { label: "Фэнтези", value: "fantasy" }, + { label: "Шпионский детектив", value: "spy-mystery" }, + { label: "Эпическое фэнтези", value: "epic-fantasy" }, + { label: "Эротика", value: "erotica" }, + { label: "Эротическая фантастика", value: "sf-erotika" }, + { label: "Эротический фанфик", value: "fanfiction-erotika" }, + { label: "Эротическое фэнтези", value: "fantasy-erotika" }, + { label: "Юмор", value: "humor" }, + { label: "Юмористическая фантастика", value: "sf-humor" }, + { label: "Юмористическое фэнтези", value: "ironical-fantasy" }, + ], + type: FilterTypes.Picker, + }, + form: { + label: "Форма произведения", + value: "any", + options: [ + { label: "Любой", value: "any" }, + { label: "Перевод", value: "translation" }, + { label: "Повесть", value: "tale" }, + { label: "Рассказ", value: "story" }, + { label: "Роман", value: "novel" }, + { label: "Сборник поэзии", value: "poetry" }, + { label: "Сборник рассказов", value: "story-book" }, + ], + type: FilterTypes.Picker, + }, + state: { + label: "Статус произведения", + value: "any", + options: [ + { label: "Любой статус", value: "any" }, + { label: "В процессе", value: "in-progress" }, + { label: "Завершено", value: "finished" }, + ], + type: FilterTypes.Picker, + }, + series: { + label: "Статус цикла", + value: "any", + options: [ + { label: "Не важно", value: "any" }, + { label: "Вне цикла", value: "out" }, + { label: "Цикл завершен", value: "finished" }, + { label: "Цикл не завершен", value: "unfinished" }, + ], + type: FilterTypes.Picker, + }, + access: { + label: "Тип доступа", + value: "any", + options: [ + { label: "Любой", value: "any" }, + { label: "Платный", value: "paid" }, + { label: "Бесплатный", value: "free" }, + ], + type: FilterTypes.Picker, + }, + promo: { + label: "Промо-фрагмент", + value: "hide", + options: [ + { label: "Скрывать", value: "hide" }, + { label: "Показывать", value: "show" }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} + +export default new AuthorToday(); + +interface response { + searchResults?: SearchResultsEntity[] | null; + realTotalCount: number; + code?: string; + errorMessage?: null; + isLastPage: boolean; + format: Format; + duration: Duration; + isWorkMarkEnabled: boolean; +} +interface SearchResultsEntity { + id: number; + title: string; + annotation: string; + authorId: number; + authorFIO: string; + authorUserName: string; + originalAuthor?: null; + coAuthorId?: number | null; + coAuthorFIO?: string | null; + coAuthorUserName?: string | null; + coAuthorConfirmed: boolean; + seriesId: number; + seriesTitle?: string | null; + publishTime: string; + lastModificationTime: string; + finishTime?: string | null; + isDraft: boolean; + formEnum: string; + genreId: number; + firstSubGenreId: number; + secondSubGenreId?: number | null; + adultOnly: boolean; + tags?: (string | null)[] | null; + coverUrl: string; + viewCount: number; + commentCount: number; + reviewCount: number; + textLength: number; + likeCount: number; + showAuthor: boolean; + price?: number | null; + discount?: null; + discountStartDate?: null; + discountEndDate?: null; + status: string; + promoFragment: boolean; + isExclusive: boolean; + format: string; + marks?: null[] | null; + isLiked: boolean; + isWorkMarkEnabled: boolean; + workInLibraryState: string; +} +interface Format { + enumValue: string; + value: string; + title: string; + mobileTitle: string; +} +interface Duration { + value: string; + title: string; + mobileTitle: string; +} + +interface responseBook { + chapters?: ChaptersEntity[] | null; + allowDownloads: boolean; + downloadErrorCode: string; + downloadErrorMessage: string; + privacyDownloads: string; + collectionCount: number; + annotation: string; + authorNotes: string; + atRecommendation: boolean; + seriesWorkIds?: number[] | null; + seriesWorkNumber: number; + reviewCount: number; + tags?: string[] | null; + orderId?: null; + orderStatus: string; + orderStatusMessage?: null; + contests?: null[] | null; + galleryImages?: GalleryImagesEntity[] | null; + booktrailerVideoUrl?: null; + isExclusive: boolean; + freeChapterCount: number; + promoFragment: boolean; + recommendations?: RecommendationsEntity[] | null; + linkedWork?: null; + id: number; + title: string; + coverUrl: string; + lastModificationTime: string; + lastUpdateTime: string; + finishTime?: null; + isFinished: boolean; + textLength: number; + textLengthLastRead: number; + price: number; + discount?: null; + workForm: string; + status: string; + authorId: number; + authorFIO: string; + authorUserName: string; + originalAuthor?: null; + translator?: null; + reciter?: null; + coAuthorId?: null; + coAuthorFIO?: null; + coAuthorUserName?: null; + coAuthorConfirmed: boolean; + secondCoAuthorId?: null; + secondCoAuthorFIO?: null; + secondCoAuthorUserName?: null; + secondCoAuthorConfirmed: boolean; + isPurchased: boolean; + userLikeId?: null; + lastReadTime?: null; + lastChapterId?: null; + lastChapterProgress: number; + likeCount: number; + commentCount: number; + rewardCount: number; + rewardsEnabled: boolean; + inLibraryState: string; + addedToLibraryTime: string; + updateInLibraryTime: string; + privacyDisplay: string; + state: string; + isDraft: boolean; + enableRedLine: boolean; + enableTTS: boolean; + adultOnly: boolean; + seriesId: number; + seriesOrder: number; + seriesTitle: string; + afterword: string; + seriesNextWorkId?: null; + genreId: number; + firstSubGenreId: number; + secondSubGenreId: number; + format: string; + marks?: null; + purchaseTime?: null; + likeTime?: null; + markTime?: null; +} +interface ChaptersEntity { + id: number; + workId: number; + title: string; + isDraft: boolean; + sortOrder: number; + publishTime?: string; + lastModificationTime: string; + textLength: number; + isAvailable: boolean; +} + +interface GalleryImagesEntity { + id: string; + caption?: null; + url: string; + height: number; + width: number; +} +interface RecommendationsEntity { + title: string; + coverUrl: string; + authorId: number; + authorFIO: string; + authorUserName: string; + originalAuthor?: null; + coAuthorId?: null; + coAuthorFIO?: null; + coAuthorUserName?: null; + coAuthorConfirmed: boolean; + secondCoAuthorId?: null; + secondCoAuthorFIO?: null; + secondCoAuthorUserName?: null; + secondCoAuthorConfirmed: boolean; + discount?: null; + price?: number | null; + lastModificationTime: string; + finishTime: string; + finished: boolean; + isExclusive: boolean; + format: string; + status: string; + state: string; + removalReason?: null; + removalReasonComment?: null; + id: number; +} + +interface encryptedСhapter { + id: number; + title: string; + isDraft: boolean; + publishTime: string; + lastModificationTime: string; + text: string; + key: string; + code?: string; + message?: string; +} diff --git a/plugins/russian/bookriver.ts b/plugins/russian/bookriver.ts index 1ef60ac..f9e980e 100644 --- a/plugins/russian/bookriver.ts +++ b/plugins/russian/bookriver.ts @@ -1,258 +1,252 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -class Bookriver implements Plugin.PluginBase { - id = "bookriver"; - name = "Bookriver"; - site = "https://bookriver.ru"; - version = "1.0.0"; - icon = "src/ru/bookriver/icon.png"; - - - async popularNovels( - pageNo: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + `/genre?page=${pageNo}&perPage=24&sortingType=`; - url += showLatestNovels - ? "last-update" - : filters?.sort?.value || "bestseller"; - - if (filters?.genres?.value instanceof Array && filters?.genres?.value.length) { - url += "&g=" + filters.genres.value.join(","); - } - - const result = await fetchApi(url); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - const novels: Plugin.NovelItem[] = []; - - const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); - if (jsonRaw) { - const json: response = JSON.parse(jsonRaw); - json.props.pageProps.state.pagesFilter?.genre?.books?.forEach((novel) => - novels.push({ - name: novel.name, - cover: novel.coverImages[0].url, - url: this.site + "/book/" + novel.slug, - }), - ); - } - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const result = await fetchApi(novelUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); - const json: response = JSON.parse(jsonRaw || "{}"); - const book = json.props.pageProps.state.book?.bookPage; - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: book?.name, - cover: book?.coverImages[0].url, - summary: book?.annotation, - author: book?.author?.name, - genres: book?.tags?.map((item) => item.name).join(", "), - status: - book?.statusComplete === "writing" - ? NovelStatus.Ongoing - : NovelStatus.Completed, - }; - - const chapters: Plugin.ChapterItem[] = []; - book?.ebook?.chapters?.forEach((chapter) => { - if (chapter.available) { - chapters.push({ - name: chapter.name, - releaseTime: dayjs( - chapter?.firstPublishedAt || chapter.createdAt, - ).format("LLL"), - url: this.site + "/reader/" + book?.slug + "/" + chapter.chapterId, - }); - } - }); - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const url = "https://api.bookriver.ru/api/v1/books/chapter/text/"; - const result = await fetchApi(url + chapterUrl.split("/").pop()); - const json = (await result.json()) as responseChapter; - - let chapterText = json.data.content || "Конец произведения"; - if (json.data?.audio?.available) { - chapterText += "\n" + json.data.audio.url; - } - - return chapterText; - } - - async searchNovels( - searchTerm: string, - pageNo: number | undefined = 1, - ): Promise { - const url = `https://api.bookriver.ru/api/v1/search/autocomplete?keyword=${searchTerm}&page=${pageNo}&perPage=10`; - const result = await fetchApi(url); - const json = (await result.json()) as responseSearch; - - const novels: Plugin.NovelItem[] = []; - json?.data?.books?.forEach((novel) => - novels.push({ - name: novel.name, - cover: novel.coverImages[0].url, - url: this.site + "/book/" + novel.slug, - }), - ); - - return novels; - } - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "Бестселлеры", value: "bestseller" }, - { label: "Дате добавления", value: "newest" }, - { label: "Дате обновления", value: "last-update" }, - ], - type: FilterTypes.Picker, - }, - genres: { - label: "жанры", - value: [], - options: [ - { label: "Альтернативная история", value: "alternativnaya-istoriya" }, - { label: "Боевая фантастика", value: "boevaya-fantastika" }, - { label: "Боевое фэнтези", value: "boevoe-fentezi" }, - { label: "Бытовое фэнтези", value: "bytovoe-fentezi" }, - { label: "Героическая фантастика", value: "geroicheskaya-fantastika" }, - { label: "Героическое фэнтези", value: "geroicheskoe-fentezi" }, - { label: "Городское фэнтези", value: "gorodskoe-fentezi" }, - { label: "Детектив", value: "detektiv" }, - { label: "Детективная фантастика", value: "detektivnaya-fantastika" }, - { label: "Жёсткая эротика", value: "zhyostkaya-erotika" }, - { label: "Исторический детектив", value: "istoricheskii-detektiv" }, - { label: "Исторический любовный роман", value: "istoricheskii-lyubovnyi-roman" }, - { label: "Историческое фэнтези", value: "istoricheskoe-fentezi" }, - { label: "Киберпанк", value: "kiberpank" }, - { label: "Классический детектив", value: "klassicheskii-detektiv" }, - { label: "Короткий любовный роман", value: "korotkii-lyubovnyi-roman" }, - { label: "Космическая фантастика", value: "kosmicheskaya-fantastika" }, - { label: "Криминальный детектив", value: "kriminalnyi-detektiv" }, - { label: "ЛитРПГ", value: "litrpg" }, - { label: "Любовная фантастика", value: "lyubovnaya-fantastika" }, - { label: "Любовное фэнтези", value: "lyubovnoe-fentezi" }, - { label: "Любовный роман", value: "lyubovnyi-roman" }, - { label: "Мистика", value: "mistika" }, - { label: "Молодежная проза", value: "molodezhnaya-proza" }, - { label: "Научная фантастика", value: "nauchnaya-fantastika" }, - { label: "Остросюжетный любовный роман", value: "ostrosyuzhetnyi-lyubovnyi-roman" }, - { label: "Политический детектив", value: "politicheskii-detektiv" }, - { label: "Попаданцы", value: "popadantsy" }, - { label: "Постапокалипсис", value: "postapokalipsis" }, - { label: "Приключенческое фэнтези", value: "priklyuchencheskoe-fentezi" }, - { label: "Романтическая эротика", value: "romanticheskaya-erotika" }, - { label: "С элементами эротики", value: "s-elementami-erotiki" }, - { label: "Славянское фэнтези", value: "slavyanskoe-fentezi" }, - { label: "Современный любовный роман", value: "sovremennyi-lyubovnyi-roman" }, - { label: "Социальная фантастика", value: "sotsialnaya-fantastika" }, - { label: "Тёмное фэнтези", value: "temnoe-fentezi" }, - { label: "Фантастика", value: "fantastika" }, - { label: "Фэнтези", value: "fentezi" }, - { label: "Шпионский детектив", value: "shpionskii-detektiv" }, - { label: "Эпическое фэнтези", value: "epicheskoe-fentezi" }, - { label: "Эротика", value: "erotika" }, - { label: "Эротическая фантастика", value: "eroticheskaya-fantastika" }, - { label: "Эротический фанфик", value: "eroticheskii-fanfik" }, - { label: "Эротическое фэнтези", value: "eroticheskoe-fentezi" }, - { label: "Юмористический детектив", value: "yumoristicheskii-detektiv" }, - { label: "Юмористическое фэнтези", value: "yumoristicheskoe-fentezi" }, - ], - type: FilterTypes.CheckboxGroup, - }, - } satisfies Filters; -} -export default new Bookriver(); - -interface response { - props: { - pageProps: { - state: { - book?: { - bookPage: BooksEntity; - }; - pagesFilter?: { - genre: { - books: BooksEntity[]; - }; - }; - }; - }; - }; -} - -interface BooksEntity { - name: string; - coverImages: { url: string }[]; - slug: string; - annotation?: string; - author?: { - name: string; - }; - tags?: { name: string }[]; - ebook?: { - chapters: Chapter[]; - }; - statusComplete: string; -} - -interface Chapter { - name: string; - available: boolean; - firstPublishedAt?: Date | null; - createdAt?: Date | null; - chapterId: number | string; -} - -interface responseChapter { - data: { - id: number; - bookId: number; - name: string; - content: string; - symbols: number; - number: number; - authorPages: number; - createdAt: string; - updatedAt: string; - firstPublishedAt: string; - status: string; - protected: boolean; - free: boolean; - audio?: { - available: boolean; - url: string; - duration: number; - }; - publicationScheduledFor?: null; - }; -} - -interface responseSearch { - data: Data; - total: number; -} -interface Data { - books?: BooksEntity[] | null; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +class Bookriver implements Plugin.PluginBase { + id = "bookriver"; + name = "Bookriver"; + site = "https://bookriver.ru"; + version = "1.0.0"; + icon = "src/ru/bookriver/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + `/genre?page=${pageNo}&perPage=24&sortingType=`; + url += showLatestNovels ? "last-update" : filters?.sort?.value || "bestseller"; + + if (filters?.genres?.value?.length) { + url += "&g=" + filters.genres.value.join(","); + } + + const result = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + const novels: Plugin.NovelItem[] = []; + + const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); + if (jsonRaw) { + const json: response = JSON.parse(jsonRaw); + json.props.pageProps.state.pagesFilter?.genre?.books?.forEach((novel) => + novels.push({ + name: novel.name, + cover: novel.coverImages[0].url, + url: this.site + "/book/" + novel.slug, + }), + ); + } + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const result = await fetchApi(novelUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + + const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); + const json: response = JSON.parse(jsonRaw || "{}"); + const book = json.props.pageProps.state.book?.bookPage; + + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: book?.name, + cover: book?.coverImages[0].url, + summary: book?.annotation, + author: book?.author?.name, + genres: book?.tags?.map((tag) => tag.name).join(", "), + status: + book?.statusComplete === "writing" + ? NovelStatus.Ongoing + : NovelStatus.Completed, + }; + + const chapters: Plugin.ChapterItem[] = []; + book?.ebook?.chapters?.forEach((chapter, chapterIndex) => { + if (chapter.available) { + chapters.push({ + name: chapter.name, + url: this.site + "/reader/" + book?.slug + "/" + chapter.chapterId, + releaseTime: dayjs(chapter?.firstPublishedAt || chapter.createdAt).format("LLL"), + chapterNumber: chapterIndex + 1, + }); + } + }); + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const url = "https://api.bookriver.ru/api/v1/books/chapter/text/"; + const result = await fetchApi(url + chapterUrl.split("/").pop()); + const json = (await result.json()) as responseChapter; + + let chapterText = json.data.content || "Конец произведения"; + if (json.data?.audio?.available) { + chapterText += "\n" + json.data.audio.url; + } + + return chapterText; + } + + async searchNovels( + searchTerm: string, + pageNo: number | undefined = 1, + ): Promise { + const url = `https://api.bookriver.ru/api/v1/search/autocomplete?keyword=${searchTerm}&page=${pageNo}&perPage=10`; + const result = await fetchApi(url); + const json = (await result.json()) as responseSearch; + + const novels: Plugin.NovelItem[] = []; + json.data?.books?.forEach((novel) => + novels.push({ + name: novel.name, + cover: novel.coverImages[0].url, + url: this.site + "/book/" + novel.slug, + }), + ); + + return novels; + } + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "bestseller", + options: [ + { label: "Бестселлеры", value: "bestseller" }, + { label: "Дате добавления", value: "newest" }, + { label: "Дате обновления", value: "last-update" }, + ], + type: FilterTypes.Picker, + }, + genres: { + label: "жанры", + value: [], + options: [ + { label: "Альтернативная история", value: "alternativnaya-istoriya" }, + { label: "Боевая фантастика", value: "boevaya-fantastika" }, + { label: "Боевое фэнтези", value: "boevoe-fentezi" }, + { label: "Бытовое фэнтези", value: "bytovoe-fentezi" }, + { label: "Героическая фантастика", value: "geroicheskaya-fantastika" }, + { label: "Героическое фэнтези", value: "geroicheskoe-fentezi" }, + { label: "Городское фэнтези", value: "gorodskoe-fentezi" }, + { label: "Детектив", value: "detektiv" }, + { label: "Детективная фантастика", value: "detektivnaya-fantastika" }, + { label: "Жёсткая эротика", value: "zhyostkaya-erotika" }, + { label: "Исторический детектив", value: "istoricheskii-detektiv" }, + { label: "Исторический любовный роман", value: "istoricheskii-lyubovnyi-roman" }, + { label: "Историческое фэнтези", value: "istoricheskoe-fentezi" }, + { label: "Киберпанк", value: "kiberpank" }, + { label: "Классический детектив", value: "klassicheskii-detektiv" }, + { label: "Короткий любовный роман", value: "korotkii-lyubovnyi-roman" }, + { label: "Космическая фантастика", value: "kosmicheskaya-fantastika" }, + { label: "Криминальный детектив", value: "kriminalnyi-detektiv" }, + { label: "ЛитРПГ", value: "litrpg" }, + { label: "Любовная фантастика", value: "lyubovnaya-fantastika" }, + { label: "Любовное фэнтези", value: "lyubovnoe-fentezi" }, + { label: "Любовный роман", value: "lyubovnyi-roman" }, + { label: "Мистика", value: "mistika" }, + { label: "Молодежная проза", value: "molodezhnaya-proza" }, + { label: "Научная фантастика", value: "nauchnaya-fantastika" }, + { label: "Остросюжетный любовный роман", value: "ostrosyuzhetnyi-lyubovnyi-roman" }, + { label: "Политический детектив", value: "politicheskii-detektiv" }, + { label: "Попаданцы", value: "popadantsy" }, + { label: "Постапокалипсис", value: "postapokalipsis" }, + { label: "Приключенческое фэнтези", value: "priklyuchencheskoe-fentezi" }, + { label: "Романтическая эротика", value: "romanticheskaya-erotika" }, + { label: "С элементами эротики", value: "s-elementami-erotiki" }, + { label: "Славянское фэнтези", value: "slavyanskoe-fentezi" }, + { label: "Современный любовный роман", value: "sovremennyi-lyubovnyi-roman" }, + { label: "Социальная фантастика", value: "sotsialnaya-fantastika" }, + { label: "Тёмное фэнтези", value: "temnoe-fentezi" }, + { label: "Фантастика", value: "fantastika" }, + { label: "Фэнтези", value: "fentezi" }, + { label: "Шпионский детектив", value: "shpionskii-detektiv" }, + { label: "Эпическое фэнтези", value: "epicheskoe-fentezi" }, + { label: "Эротика", value: "erotika" }, + { label: "Эротическая фантастика", value: "eroticheskaya-fantastika" }, + { label: "Эротический фанфик", value: "eroticheskii-fanfik" }, + { label: "Эротическое фэнтези", value: "eroticheskoe-fentezi" }, + { label: "Юмористический детектив", value: "yumoristicheskii-detektiv" }, + { label: "Юмористическое фэнтези", value: "yumoristicheskoe-fentezi" }, + ], + type: FilterTypes.CheckboxGroup, + }, + } satisfies Filters; +} +export default new Bookriver(); + +interface response { + props: { + pageProps: { + state: { + book?: { + bookPage: BooksEntity; + }; + pagesFilter?: { + genre: { + books: BooksEntity[]; + }; + }; + }; + }; + }; +} + +interface BooksEntity { + name: string; + coverImages: { url: string }[]; + slug: string; + annotation?: string; + author?: { + name: string; + }; + tags?: { name: string }[]; + ebook?: { + chapters: Chapter[]; + }; + statusComplete: string; +} + +interface Chapter { + name: string; + available: boolean; + firstPublishedAt?: Date | null; + createdAt?: Date | null; + chapterId: number | string; +} + +interface responseChapter { + data: { + id: number; + bookId: number; + name: string; + content: string; + symbols: number; + number: number; + authorPages: number; + createdAt: string; + updatedAt: string; + firstPublishedAt: string; + status: string; + protected: boolean; + free: boolean; + audio?: { + available: boolean; + url: string; + duration: number; + }; + publicationScheduledFor?: null; + }; +} + +interface responseSearch { + data: Data; + total: number; +} +interface Data { + books?: BooksEntity[] | null; +} diff --git a/plugins/russian/ficbook.ts b/plugins/russian/ficbook.ts index 13e034d..19f058c 100644 --- a/plugins/russian/ficbook.ts +++ b/plugins/russian/ficbook.ts @@ -1,2643 +1,2636 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import { defaultCover } from "@libs/defaultCover"; - -class ficbook implements Plugin.PluginBase { - id = "ficbook"; - name = "ficbook"; - site = "https://ficbook.net"; - version = "1.0.0"; - icon = "src/ru/ficbook/icon.png"; - - - async popularNovels( - pageNo: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - const baseUrl = this.site; - let url = baseUrl; - - if (filters?.directions?.value) { - url += "/popular-fanfics/" + filters.directions.value; - } else if (filters?.tags?.value) { - url += "/tags/" + filters.tags.value + "?p=" + pageNo; - } else { - url += "/" + (filters?.sort?.value || "fanfiction") + "?p=" + pageNo; - } - - const result = await fetchApi(url); - const body = await result.text(); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - - loadedCheerio("article.fanfic-inline").each(function () { - const name = loadedCheerio(this).find("h3 > a").text().trim(); - let cover = loadedCheerio(this).find("picture > img").attr("src"); - const url = loadedCheerio(this).find("h3 > a").attr("href"); - - cover = cover - ? cover.replace(/covers\/m_|covers\/d_/g, "covers/") - : defaultCover; - if (!name || !url) return; - - novels.push({ name, cover, url: baseUrl + url.replace(/\?.*/g, "") }); - }); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const result = await fetchApi(novelUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url: novelUrl, - }; - - novel.name = ( - loadedCheerio('h1[itemprop="headline"]').text() || - loadedCheerio('h1[itemprop="name"]').text() - ).trim(); - - novel.cover = loadedCheerio('meta[property="og:image"]').attr("content"); - novel.summary = loadedCheerio('div[itemprop="description"]').text().trim(); - novel.author = loadedCheerio('a[itemprop="author"]').text(); - - novel.status = - loadedCheerio( - "div.fanfic-main-info > section:nth-child(3) > div:nth-child(3) > span:nth-child(2)", - ).text() === "В процессе" - ? NovelStatus.Ongoing - : NovelStatus.Completed; - - const tags = loadedCheerio('div[class="tags"] > a') - .map((index, element) => loadedCheerio(element).text()) - .get(); - if (tags) { - novel.genres = tags.join(","); - } - - if (!novel.cover || novel.cover?.includes("/design/")) { - novel.cover = defaultCover; - } else { - novel.cover = novel.cover.replace(/covers\/m_|covers\/d_/g, "covers/"); - } - - const chapters: Plugin.ChapterItem[] = []; - const baseUrl = this.site; - - if (loadedCheerio("#content").length == 1) { - const name = loadedCheerio(".title-area > h2").text(); - const releaseTime = loadedCheerio(".part-date > span").attr("title"); - - if (name) chapters.push({ name, releaseTime, url: novelUrl }); - } else { - loadedCheerio("li.part").each(function () { - const name = loadedCheerio(this).find("h3").text(); - const releaseTime = loadedCheerio(this) - .find("div > span") - .attr("title"); - const url = loadedCheerio(this).find("a:nth-child(1)").attr("href"); - if (!name || !url) return; - - chapters.push({ name, releaseTime, url: baseUrl + url }); - }); - } - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(chapterUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - let chapterText = ""; - - loadedCheerio("#content") - .html() - ?.split("\n") - ?.forEach((line) => { - if (line.trim()) { - //blank line skip - if (line.includes("

")) { - //new paragraph - chapterText += line; - } else { - //plaintext - chapterText += "

" + line + "

"; - } - } - }); - - return chapterText; - } - - async searchNovels( - searchTerm: string, - pageNo: number | undefined = 1, - ): Promise { - const formData = new FormData(); - formData.append("term", searchTerm); - formData.append("page", pageNo.toString()); - - const result = await fetchApi(this.site + "/search/fanfic", { - method: "POST", - body: formData, - }); - const json = (await result.json()) as { data: Data }; - const novels: Plugin.NovelItem[] = []; - - json.data?.data?.forEach((novel) => { - const name = novel.title.trim(); - const url = this.site + "/readfic/" + novel.slug; - const cover = novel.cover - ? "https://images.ficbook.net/fanfic-covers/" + novel.cover - : defaultCover; - - novels.push({ name, cover, url }); - }); - - return novels; - } - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка:", - value: "", - options: [ - { label: "Горячие работы", value: "fanfiction" }, - { label: "Популярные ", value: "popular-fanfics" }, - ], - type: FilterTypes.Picker, - }, - directions: { - label: "Направление:", - value: "", - options: [ - { label: "Все", value: "" }, - { label: "Джен", value: "gen" }, - { label: "Гет", value: "het" }, - { label: "Слэш", value: "slash-fics-3712917" }, - { label: "Фемслэш", value: "femslash-fanfics-9374932" }, - { label: "Статьи", value: "article" }, - { label: "Смешанный", value: "mixed" }, - { label: "Другой", value: "other" }, - ], - type: FilterTypes.Picker, - }, - tags: { - label: "Тэги:", - value: "", - options: [ - { label: "Все", value: "" }, - { label: "#1fic1week", value: "884" }, - { label: "#7daystowrite", value: "2961" }, - { label: "#Бинго_ТФ", value: "1458" }, - { label: "#миниатюры3days", value: "2118" }, - { label: "#Не_Тайный_Санта", value: "2760" }, - { label: "#Писательские фанты-блиц", value: "2613" }, - { label: "#cosmowrite", value: "2284" }, - { label: "#femKHRweek", value: "2658" }, - { label: "#FourShips", value: "2588" }, - { label: "#Goretober", value: "1861" }, - { label: "#InternationalVampireDay / #WorldDraculaDay", value: "2048" }, - { label: "#KattWeek", value: "2717" }, - { label: "#Kinktober", value: "1867" }, - { label: "#LotorWeek", value: "2657" }, - { label: "#MerMay", value: "1122" }, - { label: "#NaNoWriMo", value: "1852" }, - { label: "#nsfweruriweek", value: "2944" }, - { label: "#RCMiaChallenge", value: "2700" }, - { label: "#SheithMonth", value: "2432" }, - { label: "#SixDrabbles", value: "2293" }, - { label: "#Writober", value: "1831" }, - { label: "1900-е годы", value: "369" }, - { label: "1910-е годы", value: "213" }, - { label: "1920-е годы", value: "81" }, - { label: "1930-е годы", value: "82" }, - { label: "1940-е годы", value: "83" }, - { label: "1950-е годы", value: "84" }, - { label: "1960-е годы", value: "85" }, - { label: "1970-е годы", value: "86" }, - { label: "1980-е годы", value: "87" }, - { label: "1990-е годы", value: "88" }, - { label: "2000-е годы", value: "590" }, - { label: "2010-е годы", value: "2562" }, - { label: "2014 год", value: "2977" }, - { label: "2P", value: "1910" }, - { label: "9 мая", value: "1019" }, - { label: "Аборт / Выкидыш", value: "306" }, - { label: "Аватары", value: "2401" }, - { label: "Авиатранспорт", value: "962" }, - { label: "Авиация", value: "455" }, - { label: "Аврорат", value: "1906" }, - { label: "Австралия", value: "767" }, - { label: "Австрия", value: "1024" }, - { label: "Автомастерские", value: "788" }, - { label: "Авторская пунктуация", value: "2886" }, - { label: "Авторские неологизмы", value: "1123" }, - { label: "Автоспорт", value: "856" }, - { label: "Автостоп", value: "1429" }, - { label: "Аддикции", value: "1230" }, - { label: "Адреналиновая зависимость", value: "1480" }, - { label: "Азартные игры", value: "1009" }, - { label: "Азкабан", value: "1922" }, - { label: "Аквакинез", value: "1380" }, - { label: "Аквапарки", value: "789" }, - { label: "Акростих", value: "911" }, - { label: "Актеры", value: "408" }, - { label: "Акустикофилия", value: "903" }, - { label: "Алекситимия", value: "2020" }, - { label: "Алкоголь", value: "201" }, - { label: "Алкогольные игры", value: "1534" }, - { label: "Аллергии", value: "746" }, - { label: "Алхимия", value: "1174" }, - { label: "Альбинизм", value: "1213" }, - { label: "Альпинизм", value: "1448" }, - { label: "Альтернативная мировая история", value: "442" }, - { label: "Альтернативное размножение", value: "2751" }, - { label: "Альтернативные судьбы", value: "2839" }, - { label: "Амазонки", value: "1424" }, - { label: "Амегакуре", value: "2571" }, - { label: "Американский футбол", value: "808" }, - { label: "Ампутация", value: "704" }, - { label: "Амфибии", value: "2792" }, - { label: "Анальгезия", value: "1254" }, - { label: "Анальный оргазм", value: "999" }, - { label: "Анальный секс", value: "215" }, - { label: "Анархия", value: "1175" }, - { label: "Анахронизмы", value: "780" }, - { label: "Ангелы", value: "91" }, - { label: "Ангелы-хранители", value: "1044" }, - { label: "Ангст", value: "1665" }, - { label: "Андрогинная внешность", value: "2602" }, - { label: "Андроиды", value: "155" }, - { label: "Анимагия", value: "2519" }, - { label: "Анимализм", value: "1443" }, - { label: "Аномальные зоны", value: "822" }, - { label: "Анонимный секс", value: "112" }, - { label: "Анрождение", value: "1246" }, - { label: "Антарктида", value: "2205" }, - { label: "Анти-Сью (Анти-Стью)", value: "1150" }, - { label: "Антигерои", value: "418" }, - { label: "Антизлодеи", value: "1833" }, - { label: "Антикварные магазины", value: "1496" }, - { label: "Антисоциальное расстройство личности", value: "734" }, - { label: "Антиутопия", value: "1700" }, - { label: "Античность", value: "237" }, - { label: "Апатия", value: "1850" }, - { label: "Аптеки", value: "1240" }, - { label: "Аргентина", value: "1146" }, - { label: "Арены", value: "940" }, - { label: "Аристократия", value: "16" }, - { label: "Арктика", value: "2426" }, - { label: "Армия", value: "22" }, - { label: "Аромантичные персонажи", value: "339" }, - { label: "Артефакты", value: "924" }, - { label: "Археологи", value: "405" }, - { label: "Архивы", value: "2594" }, - { label: "Архитекторы", value: "1011" }, - { label: "Асексофобия", value: "1120" }, - { label: "Асексуальные персонажи", value: "168" }, - { label: "Аскетизм", value: "606" }, - { label: "Асоциальность", value: "2019" }, - { label: "Ассистенты", value: "2641" }, - { label: "Астма", value: "1121" }, - { label: "Астральное проецирование", value: "2530" }, - { label: "Астральные миры", value: "1379" }, - { label: "Астрология", value: "476" }, - { label: "Астронавты", value: "2220" }, - { label: "Астрономия", value: "1372" }, - { label: "Асфиксия", value: "104" }, - { label: "Атеисты", value: "669" }, - { label: "Атлантида", value: "1144" }, - { label: "Атмокинез", value: "1964" }, - { label: "Атмосферная зарисовка", value: "2802" }, - { label: "Атомные электростанции", value: "2192" }, - { label: "Аудиокинез", value: "2849" }, - { label: "Аукционы", value: "607" }, - { label: "Аутоассасинофилия", value: "2025" }, - { label: "Аутоканнибализм", value: "2593" }, - { label: "Аутофелляция / Аутокуннилингус", value: "610" }, - { label: "Африка", value: "791" }, - { label: "Афродизиаки", value: "103" }, - { label: "Аффект", value: "938" }, - { label: "Аэрокинез", value: "2850" }, - { label: "Байкеры", value: "522" }, - { label: "Байронические герои", value: "2900" }, - { label: "Балет", value: "404" }, - { label: "Баллада", value: "2318" }, - { label: "Банки / Биржи", value: "937" }, - { label: "Банши", value: "250" }, - { label: "Барти Крауч-младший — не Пожиратель Смерти", value: "2795" }, - { label: "Бары", value: "142" }, - { label: "Баскетбол", value: "829" }, - { label: "Баски", value: "1763" }, - { label: "Бастарды", value: "603" }, - { label: "Батохаки", value: "2830" }, - { label: "Бедность", value: "979" }, - { label: "Без Волдеморта", value: "2160" }, - { label: "Без диалогов (стилизация)", value: "2885" }, - { label: "Без золотого трио", value: "2648" }, - { label: "Без Избранного (Гарри Поттер)", value: "2762" }, - { label: "Без канонических персонажей", value: "2694" }, - { label: "Без Таноса", value: "2381" }, - { label: "БезГражданки", value: "2418" }, - { label: "Бездомные", value: "916" }, - { label: "Безответственность", value: "2152" }, - { label: "Безумные ученые", value: "2559" }, - { label: "Безэмоциональность", value: "1488" }, - { label: "Бейсбол", value: "1489" }, - { label: "Беларусь", value: "1030" }, - { label: "Белый день", value: "683" }, - { label: "Белый стих", value: "1998" }, - { label: "Бельгия", value: "1039" }, - { label: "Беременность", value: "1712" }, - { label: "Бермудский треугольник", value: "1158" }, - { label: "Берсерки", value: "566" }, - { label: "Бесконтактный секс", value: "2214" }, - { label: "Бесплодие", value: "719" }, - { label: "Беспокойство", value: "2888" }, - { label: "Беспризорники", value: "604" }, - { label: "Беспричудный Изуку", value: "2422" }, - { label: "Бессмертие", value: "219" }, - { label: "Бессмертный конкурс 2023", value: "3016" }, - { label: "Бестелесность", value: "2607" }, - { label: "Би-персонажи", value: "300" }, - { label: "Библейские темы и мотивы", value: "1468" }, - { label: "Библиотекари", value: "2631" }, - { label: "Библиотеки", value: "310" }, - { label: "Бизнесмены / Бизнесвумен", value: "573" }, - { label: "Биологическое оружие", value: "1188" }, - { label: "Биопанк", value: "281" }, - { label: "Биороботы", value: "2256" }, - { label: "Биполярное расстройство", value: "690" }, - { label: "Битва за Хогвартс", value: "2774" }, - { label: "Битва Историй", value: "2960" }, - { label: "Благородные разбойники", value: "952" }, - { label: "Благотворительность", value: "613" }, - { label: "Бладплей", value: "109" }, - { label: "Ближний Восток", value: "1041" }, - { label: "Близкие враги", value: "721" }, - { label: "Близнецы", value: "295" }, - { label: "Блиц-свидания", value: "2511" }, - { label: "Блогеры", value: "1471" }, - { label: "Блокадный Ленинград", value: "1111" }, - { label: "Блэкигуд", value: "2905" }, - { label: "Богачи", value: "1549" }, - { label: "Боги / Божественные сущности", value: "149" }, - { label: "Боди-арт", value: "2260" }, - { label: "Бодипозитив", value: "1153" }, - { label: "Боевая пара", value: "1919" }, - { label: "Боевые искусства", value: "918" }, - { label: "Бои без правил", value: "1390" }, - { label: "Бокс", value: "765" }, - { label: "Болгария", value: "1786" }, - { label: "Болезнь Альцгеймера", value: "2533" }, - { label: "Боль", value: "1803" }, - { label: "Больницы", value: "20" }, - { label: "Большая Игра профессора Дамблдора", value: "2890" }, - { label: "Бордели", value: "120" }, - { label: "Борьба за власть", value: "2300" }, - { label: "Борьба за отношения", value: "1251" }, - { label: "Борьба за справедливость", value: "2335" }, - { label: "Боязнь боли", value: "2441" }, - { label: "Боязнь воды", value: "1084" }, - { label: "Боязнь врачей", value: "2063" }, - { label: "Боязнь высоты", value: "1085" }, - { label: "Боязнь грозы", value: "1124" }, - { label: "Боязнь громких звуков", value: "1090" }, - { label: "Боязнь грязи", value: "1277" }, - { label: "Боязнь замкнутых пространств", value: "821" }, - { label: "Боязнь зеркал", value: "2739" }, - { label: "Боязнь клоунов", value: "2970" }, - { label: "Боязнь крови", value: "1312" }, - { label: "Боязнь людей", value: "1082" }, - { label: "Боязнь мужчин", value: "1264" }, - { label: "Боязнь насекомых / Боязнь пауков", value: "1119" }, - { label: "Боязнь неудачи", value: "2713" }, - { label: "Боязнь огня", value: "1258" }, - { label: "Боязнь одиночества", value: "1491" }, - { label: "Боязнь открытых пространств", value: "965" }, - { label: "Боязнь привязанности", value: "1343" }, - { label: "Боязнь призраков", value: "2770" }, - { label: "Боязнь прикосновений", value: "823" }, - { label: "Боязнь сексуальных домогательств", value: "2319" }, - { label: "Боязнь смерти", value: "1515" }, - { label: "Боязнь сна", value: "2262" }, - { label: "Боязнь темноты", value: "1494" }, - { label: "Боязнь тишины", value: "2233" }, - { label: "Бразилия", value: "833" }, - { label: "Брак по договоренности", value: "35" }, - { label: "Брак по расчету", value: "303" }, - { label: "БРД", value: "2907" }, - { label: "Бродячие артисты", value: "2661" }, - { label: "Бродячие певцы", value: "1497" }, - { label: "Броманс", value: "171" }, - { label: "Будущее", value: "227" }, - { label: "Буллёзный эпидермолиз", value: "2725" }, - { label: "Буллинг", value: "436" }, - { label: "Бухгалтеры", value: "2509" }, - { label: "Буч и фэм", value: "486" }, - { label: "Бывшие", value: "311" }, - { label: "Бывшие враги", value: "2812" }, - { label: "Бывшие серийные убийцы", value: "2498" }, - { label: "Бытовое фэнтези", value: "2702" }, - { label: "В одном теле", value: "1425" }, - { label: "В поисках отношений", value: "1576" }, - { label: "В. А. О. Н.", value: "2377" }, - { label: "Вагинальный секс", value: "395" }, - { label: "Ваканда", value: "2668" }, - { label: "Валькирии", value: "557" }, - { label: "Вампиры", value: "27" }, - { label: "Василиски", value: "863" }, - { label: "Вдовство", value: "2030" }, - { label: "Вебкам-модели", value: "2299" }, - { label: "Вегетарианцы / Веганы", value: "577" }, - { label: "Ведьмы / Колдуны", value: "33" }, - { label: "Великая депрессия", value: "2224" }, - { label: "Великая французская революция", value: "2000" }, - { label: "Великобритания", value: "673" }, - { label: "Великое Княжество Литовское", value: "2587" }, - { label: "Великолепный мерзавец", value: "1244" }, - { label: "Велоспорт", value: "2978" }, - { label: "Венгрия", value: "1432" }, - { label: "Вендиго", value: "251" }, - { label: "Верность", value: "459" }, - { label: "Вертикальный инцест", value: "337" }, - { label: "Вестерн", value: "2329" }, - { label: "Ветераны", value: "555" }, - { label: "Ветеринары", value: "629" }, - { label: "Вечеринки", value: "854" }, - { label: "Вечная молодость", value: "2405" }, - { label: "Вещие сны", value: "1993" }, - { label: "Взаимопонимание", value: "2887" }, - { label: "Взросление", value: "909" }, - { label: "Вигиланты", value: "1514" }, - { label: "Видеоигры", value: "2508" }, - { label: "Визажисты / Гримеры", value: "1801" }, - { label: "Викинги", value: "676" }, - { label: "Виктимблейминг", value: "331" }, - { label: "Викторианская эпоха", value: "469" }, - { label: "Виртуальная реальность", value: "803" }, - { label: "Виртуальный секс", value: "268" }, - { label: "Витилиго", value: "1167" }, - { label: "Вице-королевство Новая Испания", value: "2603" }, - { label: "ВИЧ / СПИД", value: "542" }, - { label: "Влюбленность", value: "1303" }, - { label: "Вне закона", value: "1089" }, - { label: "Внутренний сексизм", value: "2155" }, - { label: "Внутренняя гомофобия", value: "2154" }, - { label: "Внутренняя трансфобия", value: "2716" }, - { label: "Водители / Шоферы", value: "879" }, - { label: "Военные", value: "313" }, - { label: "Военные городки", value: "2095" }, - { label: "Военные преступления", value: "2356" }, - { label: "Возвращение", value: "1522" }, - { label: "Возвращение Артура", value: "2570" }, - { label: "Воздержание", value: "921" }, - { label: "Воздушная атлетика", value: "2811" }, - { label: "Война", value: "232" }, - { label: "Война в Афганистане", value: "1050" }, - { label: "Война во Вьетнаме", value: "1332" }, - { label: "Война за независимость США", value: "2065" }, - { label: "Война миров", value: "1222" }, - { label: "Волдигуд", value: "1874" }, - { label: "Волейбол", value: "1095" }, - { label: "Волк в овечьей шкуре", value: "2228" }, - { label: "Волонтеры", value: "900" }, - { label: "Волшебники / Волшебницы", value: "93" }, - { label: "Воображаемые друзья", value: "738" }, - { label: "Ворарефилия", value: "157" }, - { label: "Воры", value: "320" }, - { label: "Воскрешение", value: "256" }, - { label: "Воспоминания", value: "1118" }, - { label: "Воссоединение", value: "498" }, - { label: "Восстание машин", value: "817" }, - { label: "Восточное побережье", value: "770" }, - { label: "Восьмое марта", value: "493" }, - { label: "Вражда", value: "681" }, - { label: "Вражда семей", value: "2867" }, - { label: "Врачи", value: "374" }, - { label: "Времена Мародеров", value: "1872" }, - { label: "Времена Основателей", value: "1891" }, - { label: "Временная смерть персонажа", value: "439" }, - { label: "Временное бессмертие", value: "2755" }, - { label: "Временное воскрешение персонажей", value: "2649" }, - { label: "Временные петли", value: "147" }, - { label: "Временные превращения", value: "927" }, - { label: "Врожденные заболевания", value: "1781" }, - { label: "Всадники Апокалипсиса", value: "1326" }, - { label: "Все живы / Никто не умер", value: "535" }, - { label: "Все за Одного — отец Изуку", value: "2421" }, - { label: "Всезнающий рассказчик", value: "1368" }, - { label: "Вселение в тело", value: "1181" }, - { label: "Вторая мировая", value: "488" }, - { label: "Вторжение пришельцев", value: "755" }, - { label: "Вторичный стыд", value: "1393" }, - { label: "Второй шанс", value: "1799" }, - { label: "Второстепенные оригинальные персонажи", value: "1536" }, - { label: "Вуайеризм", value: "174" }, - { label: "Вуду", value: "678" }, - { label: "Выбор", value: "2808" }, - { label: "Выгорание", value: "2914" }, - { label: "Выживание", value: "216" }, - { label: "Вымирающий вид", value: "2373" }, - { label: "Вымышленная анатомия", value: "1317" }, - { label: "Вымышленная география", value: "1294" }, - { label: "Вымышленная религия", value: "2062" }, - { label: "Вымышленная физика", value: "2132" }, - { label: "Вымышленные виды спорта", value: "1777" }, - { label: "Вымышленные заболевания", value: "1295" }, - { label: "Вымышленные науки", value: "1333" }, - { label: "Вымышленные праздники", value: "1769" }, - { label: "Вымышленные профессии", value: "1391" }, - { label: "Вымышленные существа", value: "1685" }, - { label: "Вымышленные языки", value: "536" }, - { label: "Выпускные", value: "717" }, - { label: "Высшее общество", value: "1093" }, - { label: "Высшие учебные заведения", value: "97" }, - { label: "Выученная беспомощность", value: "2772" }, - { label: "Выхаживание", value: "511" }, - { label: "Выход из нездоровых отношений", value: "2891" }, - { label: "Гадалки / Ясновидящие", value: "2662" }, - { label: "Гадкий утенок", value: "1225" }, - { label: "Газлайтинг", value: "1418" }, - { label: "Галлюцинации / Иллюзии", value: "365" }, - { label: "Гаремник", value: "50" }, - { label: "Гаремы", value: "115" }, - { label: "Гарпии", value: "1482" }, - { label: "Гарри Поттер и Драко Малфой — друзья", value: "1923" }, - { label: "Гастроли", value: "2487" }, - { label: "Гедонизм", value: "736" }, - { label: "Гей-клубы", value: "2482" }, - { label: "Геймеры", value: "356" }, - { label: "Геймлит", value: "23" }, - { label: "Гейши / Кисэн", value: "332" }, - { label: "Гемофилия", value: "1341" }, - { label: "Гендерная дисфория", value: "431" }, - { label: "Гендерная интрига", value: "55" }, - { label: "Гендерное неравенство", value: "2568" }, - { label: "Гендерный нонконформизм", value: "1417" }, - { label: "Гендерсвап", value: "1691" }, - { label: "Генетика / Эволюция", value: "2131" }, - { label: "Гении", value: "445" }, - { label: "Генитальные пытки", value: "2104" }, - { label: "Геноцид", value: "720" }, - { label: "Геокинез", value: "2889" }, - { label: "Геологи / Географы", value: "934" }, - { label: "Германия", value: "688" }, - { label: "Германия — не Священная Римская Империя", value: "2470" }, - { label: "Герой поневоле", value: "2145" }, - { label: "Геронтофилия", value: "162" }, - { label: "Гетерохромия", value: "1210" }, - { label: "Гетто", value: "1783" }, - { label: "Гибристофилия", value: "1843" }, - { label: "Гиганты", value: "735" }, - { label: "Гидра трэш-пати", value: "2804" }, - { label: "Гики", value: "482" }, - { label: "Гильдии", value: "957" }, - { label: "Гимнастика", value: "1974" }, - { label: "Гиперакузия", value: "2866" }, - { label: "Гиперсексуальность", value: "945" }, - { label: "Гипноз", value: "700" }, - { label: "Гладиаторы", value: "677" }, - { label: "Глобальные катастрофы", value: "525" }, - { label: "Глухота", value: "595" }, - { label: "Гнев", value: "2806" }, - { label: "Гнездование", value: "1452" }, - { label: "Гномы", value: "138" }, - { label: "Гоблины", value: "188" }, - { label: "Големы", value: "1208" }, - { label: "Голод", value: "868" }, - { label: "Голодные Фэндомные Игры", value: "2895" }, - { label: "Гомофобия", value: "428" }, - { label: "Гомункулы", value: "1366" }, - { label: "Горе / Утрата", value: "1113" }, - { label: "Горизонтальный инцест", value: "338" }, - { label: "Городские легенды", value: "1832" }, - { label: "Горы", value: "702" }, - { label: "Горячие источники", value: "2813" }, - { label: "Гостевой брак", value: "1354" }, - { label: "Гостиницы", value: "384" }, - { label: "Готический роман", value: "963" }, - { label: "Готы", value: "575" }, - { label: "Гравиокинез", value: "1985" }, - { label: "Гражданская война", value: "370" }, - { label: "Гражданская война в России", value: "1282" }, - { label: "Гражданская война в США", value: "1018" }, - { label: "Графичные описания", value: "2854" }, - { label: "Грейнджергад", value: "1892" }, - { label: "Грейромантичные персонажи", value: "707" }, - { label: "Гремлины", value: "189" }, - { label: "Греция", value: "1040" }, - { label: "Грифоны", value: "335" }, - { label: "Громкий секс", value: "1184" }, - { label: "Грубый секс", value: "121" }, - { label: "Грудное кормление", value: "296" }, - { label: "Групи", value: "2925" }, - { label: "Групповое изнасилование", value: "2203" }, - { label: "Групповой секс", value: "1654" }, - { label: "Грязный реализм", value: "634" }, - { label: "Гувернантки", value: "1179" }, - { label: "Гули", value: "367" }, - { label: "Гэвин Рид — андроид", value: "2692" }, - { label: "Даб-кон", value: "57" }, - { label: "Даби — не Тойя Тодороки", value: "2821" }, - { label: "Даби — Тойя Тодороки", value: "2423" }, - { label: "Дадзава", value: "2915" }, - { label: "Дадмайт", value: "2917" }, - { label: "Дайверы", value: "939" }, - { label: "Дайвинг", value: "2823" }, - { label: "Дама в беде", value: "1259" }, - { label: "Дамбигад", value: "1863" }, - { label: "Дамбигуд", value: "1873" }, - { label: "Дампиры", value: "2860" }, - { label: "Дандэрэ", value: "1364" }, - { label: "Дарк", value: "1678" }, - { label: "Даркнет", value: "1287" }, - { label: "Дачи", value: "930" }, - { label: "Двойники", value: "305" }, - { label: "Двойное проникновение", value: "107" }, - { label: "Двойной кноттинг", value: "2619" }, - { label: "Двойные агенты", value: "441" }, - { label: "Дворцовые интриги", value: "2075" }, - { label: "Девиантное поведение", value: "1814" }, - { label: "Девичники / Мальчишники", value: "1191" }, - { label: "Девочки из Эквестрии", value: "2912" }, - { label: "Дежавю", value: "2049" }, - { label: "Декаданс", value: "2353" }, - { label: "Деконструкция", value: "1322" }, - { label: "Деми-персонажи", value: "723" }, - { label: "Демиурги", value: "819" }, - { label: "Демонология", value: "2485" }, - { label: "Демоны", value: "73" }, - { label: "Демоны-хранители", value: "2045" }, - { label: "Дендрофилия", value: "491" }, - { label: "День благодарения", value: "754" }, - { label: "День знаний", value: "1075" }, - { label: "День матери", value: "2979" }, - { label: "День мертвых", value: "1074" }, - { label: "День независимости США", value: "1008" }, - { label: "День рождения", value: "298" }, - { label: "День святого Валентина", value: "204" }, - { label: "День святого Патрика", value: "1129" }, - { label: "День смерти", value: "2251" }, - { label: "День учителя", value: "1076" }, - { label: "Деперсонализация", value: "1197" }, - { label: "Депрессия", value: "354" }, - { label: "Депривация сна", value: "551" }, - { label: "Дереализация", value: "1198" }, - { label: "Деревни", value: "364" }, - { label: "Дерматозойный бред", value: "2779" }, - { label: "Деспоты / Тираны", value: "1345" }, - { label: "Детектив", value: "1672" }, - { label: "Дети", value: "217" }, - { label: "Детоненавистничество", value: "1836" }, - { label: "Детская влюбленность", value: "186" }, - { label: "Детские дома", value: "355" }, - { label: "Детские лагеря", value: "222" }, - { label: "Детские сады", value: "567" }, - { label: "Дефекты зрения", value: "2639" }, - { label: "Дефекты речи", value: "737" }, - { label: "Джинны / Пери", value: "456" }, - { label: "Джон Ватсон — преступник", value: "1932" }, - { label: "Джуманджи — не игровой мир", value: "2799" }, - { label: "Диабет", value: "820" }, - { label: "Диалоги (стилизация)", value: "1139" }, - { label: "Дизайнеры", value: "1875" }, - { label: "Дизельпанк", value: "294" }, - { label: "Дикие животные", value: "622" }, - { label: "Дикий Запад", value: "293" }, - { label: "Дилетанты", value: "2443" }, - { label: "Динозавры", value: "670" }, - { label: "Дипломатия", value: "1790" }, - { label: "Дисбаланс власти", value: "732" }, - { label: "Дискриминация", value: "2230" }, - { label: "Дискриминация по внешности", value: "1414" }, - { label: "Дискриминация по возрасту", value: "2843" }, - { label: "Дислексия", value: "860" }, - { label: "Дисморфофобия", value: "1108" }, - { label: "Диссоциативное расстройство идентичности", value: "2127" }, - { label: "Дистанционное обучение", value: "2592" }, - { label: "Дисфункциональные семьи", value: "602" }, - { label: "Дневники (стилизация)", value: "214" }, - { label: "Добрый Сальери", value: "2522" }, - { label: "Доверие", value: "1117" }, - { label: "Договоры / Сделки", value: "2137" }, - { label: "Документы / Отчеты (стилизация)", value: "752" }, - { label: "Долголетие", value: "2130" }, - { label: "Домашнее насилие", value: "42" }, - { label: "Домашние животные", value: "517" }, - { label: "Домашний арест", value: "2526" }, - { label: "Домашний ремонт", value: "867" }, - { label: "Домовые", value: "1423" }, - { label: "Допросы", value: "2654" }, - { label: "Дорожное приключение", value: "47" }, - { label: "Драббл", value: "2935" }, - { label: "Драки", value: "1367" }, - { label: "Драконы", value: "43" }, - { label: "Драма", value: "1668" }, - { label: "Драуги", value: "2264" }, - { label: "Древний Восток", value: "1940" }, - { label: "Древний Египет", value: "474" }, - { label: "Древний Китай", value: "1438" }, - { label: "Древняя Русь", value: "466" }, - { label: "Дремлющее зло", value: "2719" }, - { label: "Дремлющие способности", value: "2084" }, - { label: "Другая магическая школа", value: "1864" }, - { label: "Другие планеты", value: "1415" }, - { label: "Другой избранный", value: "2054" }, - { label: "Другой факультет", value: "1866" }, - { label: "Дружба", value: "1701" }, - { label: "Дружба втайне", value: "2303" }, - { label: "Дружба по расчету", value: "2331" }, - { label: "Друзья детства", value: "343" }, - { label: "Друзья по переписке", value: "1466" }, - { label: "Друзья поневоле", value: "627" }, - { label: "Друзья с привилегиями", value: "113" }, - { label: "Друиды", value: "1199" }, - { label: "Дрэг (субкультура)", value: "1248" }, - { label: "Дурмстранг", value: "2389" }, - { label: "Дурслигуд", value: "2058" }, - { label: "Духи природы", value: "503" }, - { label: "Духовенство", value: "478" }, - { label: "Духовная связь", value: "2090" }, - { label: "Духокинез", value: "2500" }, - { label: "Дуэли", value: "446" }, - { label: "Дьяволы", value: "2369" }, - { label: "Дэдди-кинк", value: "165" }, - { label: "Еда / Кулинария", value: "1195" }, - { label: "Единороги", value: "373" }, - { label: "Ёкаи", value: "416" }, - { label: "Естественные враги", value: "728" }, - { label: "Жамевю", value: "2050" }, - { label: "Жаргон", value: "1016" }, - { label: "Ждун Фест", value: "2936" }, - { label: "Железнодорожники", value: "2680" }, - { label: "Железные дороги", value: "811" }, - { label: "Женская дружба", value: "2156" }, - { label: "Жертвы обстоятельств", value: "1475" }, - { label: "Жестокое обращение с животными", value: "722" }, - { label: "Жестокость", value: "1710" }, - { label: "Живой сосуд", value: "2072" }, - { label: "Животные-компаньоны", value: "2371" }, - { label: "Живые машины", value: "961" }, - { label: "ЖиП", value: "143" }, - { label: "Журналисты", value: "438" }, - { label: "Заболевания", value: "1268" }, - { label: "Заболевания крови", value: "2254" }, - { label: "Заболевания сердца", value: "1767" }, - { label: "Забота / Поддержка", value: "1302" }, - { label: "Заброшенные города", value: "1276" }, - { label: "Заброшенные здания", value: "1483" }, - { label: "Забытый герой", value: "2337" }, - { label: "Завещание", value: "1262" }, - { label: "Зависимое расстройство личности", value: "2349" }, - { label: "Зависть", value: "990" }, - { label: "Завоевание", value: "978" }, - { label: "Загробный мир", value: "275" }, - { label: "Закавказье", value: "2819" }, - { label: "Заклятые друзья", value: "1316" }, - { label: "Закрытые города", value: "1481" }, - { label: "Закрытые учебные заведения", value: "98" }, - { label: "Закрытый детектив", value: "2616" }, - { label: "Заложники", value: "845" }, - { label: "Замки", value: "654" }, - { label: "Замкнутое пространство", value: "2306" }, - { label: "Замкнутый мир", value: "874" }, - { label: "Занавесочная история", value: "1688" }, - { label: "Запахи", value: "1385" }, - { label: "Заповедники", value: "618" }, - { label: "Запредельно одаренный персонаж", value: "1241" }, - { label: "Запрет на магию", value: "2663" }, - { label: "Запретные отношения", value: "362" }, - { label: "Засосы / Укусы", value: "913" }, - { label: "Застенчивость", value: "2807" }, - { label: "Затворники", value: "1059" }, - { label: "Затерянные миры", value: "2448" }, - { label: "Защита любимого", value: "2492" }, - { label: "Защитники природы", value: "628" }, - { label: "Защищенный секс", value: "636" }, - { label: "Звездные слезы", value: "2971" }, - { label: "Здоровые механизмы преодоления", value: "2147" }, - { label: "Здоровые отношения", value: "1853" }, - { label: "Зеркала", value: "724" }, - { label: "Зимняя Фандомная Битва", value: "254" }, - { label: "Злобные бывшие", value: "518" }, - { label: "Зловещая находка", value: "2275" }, - { label: "Знаки зодиака", value: "643" }, - { label: "Знаменитости", value: "1360" }, - { label: "Золотая клетка", value: "480" }, - { label: "Золотая молодежь", value: "796" }, - { label: "Золотая Орда", value: "1143" }, - { label: "Золушка", value: "1226" }, - { label: "Зомби", value: "31" }, - { label: "Зоопарки", value: "792" }, - { label: "Зоофилия", value: "1662" }, - { label: "Зоофобии", value: "2715" }, - { label: "ЗППП", value: "630" }, - { label: "ЗПР", value: "2259" }, - { label: "Зрелые персонажи", value: "851" }, - { label: "Иван Купала", value: "1068" }, - { label: "Игровое расстройство", value: "949" }, - { label: "Игрушки", value: "1346" }, - { label: "Игры на выживание", value: "554" }, - { label: "Игры на раздевание", value: "1535" }, - { label: "Игры с сосками", value: "423" }, - { label: "Игры с температурой", value: "230" }, - { label: "Идеализация", value: "1540" }, - { label: "Иерархический строй", value: "652" }, - { label: "Избранные", value: "847" }, - { label: "Избыточный физиологизм", value: "2334" }, - { label: "Изгнанники", value: "871" }, - { label: "Измена", value: "62" }, - { label: "Измененное состояние сознания", value: "2242" }, - { label: "Изменились за лето", value: "1908" }, - { label: "Изнасилование", value: "1650" }, - { label: "Изоляция", value: "1296" }, - { label: "Израиль", value: "1094" }, - { label: "Изуку Мидория — злодей", value: "2472" }, - { label: "Иллюзионисты", value: "532" }, - { label: "Имейджин", value: "838" }, - { label: "Импотенция", value: "632" }, - { label: "Импринтинг", value: "635" }, - { label: "Импрореал", value: "2955" }, - { label: "Импрофест", value: "2947" }, - { label: "Имя вместо цвета", value: "2919" }, - { label: "Инвалидность", value: "197" }, - { label: "Индия", value: "1002" }, - { label: "Инквизиция", value: "1130" }, - { label: "Инопланетяне", value: "58" }, - { label: "Инсектоиды / Арахноиды", value: "953" }, - { label: "Инсектофилия / Арахнофилия", value: "664" }, - { label: "Инсценированная смерть персонажа", value: "440" }, - { label: "Интерактивная работа", value: "419" }, - { label: "Интервью (стилизация)", value: "2446" }, - { label: "Интернет", value: "1286" }, - { label: "Интерсекс-персонажи", value: "299" }, - { label: "Интрамаммарный секс", value: "840" }, - { label: "Инфантильность", value: "1300" }, - { label: "Инцест", value: "1651" }, - { label: "Ипохондрия", value: "2178" }, - { label: "Ирландия", value: "1035" }, - { label: "Иронический детектив", value: "2638" }, - { label: "Искра Стайлз Стилински", value: "1975" }, - { label: "Искупление", value: "877" }, - { label: "Искусственно вызванные чувства", value: "626" }, - { label: "Искусственные интеллекты", value: "150" }, - { label: "Искусственные существа", value: "2277" }, - { label: "Искусство", value: "2257" }, - { label: "Искусствоведы", value: "2873" }, - { label: "Искушение", value: "776" }, - { label: "Испания", value: "1020" }, - { label: "Исповеди", value: "1342" }, - { label: "Исправительные лагеря", value: "2439" }, - { label: "Истинные", value: "1855" }, - { label: "Историческая Хеталия", value: "1865" }, - { label: "Исторические эпохи", value: "1698" }, - { label: "Исторический Кантриболс", value: "2913" }, - { label: "Историческое допущение", value: "2681" }, - { label: "Исцеление", value: "802" }, - { label: "Италия", value: "1003" }, - { label: "Ихтиоморфы", value: "972" }, - { label: "Йога", value: "483" }, - { label: "Йоль", value: "2143" }, - { label: "Кабаре", value: "457" }, - { label: "Кабэ-дон", value: "2626" }, - { label: "Казахстан", value: "1260" }, - { label: "Казино", value: "620" }, - { label: "Казнь", value: "548" }, - { label: "Как ориджинал", value: "1032" }, - { label: "Каламбуры", value: "881" }, - { label: "Каминг-аут", value: "559" }, - { label: "Канада", value: "695" }, - { label: "Каникулы", value: "805" }, - { label: "Каннибализм", value: "1706" }, - { label: "Канонная смерть персонажа", value: "564" }, - { label: "Капитан Гидра", value: "1928" }, - { label: "Карантинные зоны", value: "1290" }, - { label: "Карантины", value: "2734" }, - { label: "Караоке", value: "886" }, - { label: "Карательная психиатрия", value: "730" }, - { label: "Карибский бассейн", value: "1172" }, - { label: "Карма", value: "647" }, - { label: "Карьеризм", value: "956" }, - { label: "Каскадеры", value: "2267" }, - { label: "Катарсис", value: "824" }, - { label: "Кафе / Кофейни / Чайные", value: "13" }, - { label: "Квай-Гад", value: "2894" }, - { label: "Квантовая физика", value: "2744" }, - { label: "Квисины", value: "2722" }, - { label: "Кемономими", value: "997" }, - { label: "Кемпинг", value: "182" }, - { label: "Кентавры", value: "64" }, - { label: "Кибербуллинг", value: "1858" }, - { label: "Киберпанк", value: "24" }, - { label: "Киберспорт", value: "745" }, - { label: "Кибертрон", value: "2775" }, - { label: "Киборги", value: "154" }, - { label: "Киевская Русь", value: "515" }, - { label: "Кинк на беременность", value: "2281" }, - { label: "Кинк на волосы", value: "2089" }, - { label: "Кинк на волосы на теле", value: "1337" }, - { label: "Кинк на девственность", value: "2282" }, - { label: "Кинк на инвалидность", value: "633" }, - { label: "Кинк на интеллект", value: "2798" }, - { label: "Кинк на клыки", value: "2325" }, - { label: "Кинк на колготки", value: "2644" }, - { label: "Кинк на крылья", value: "2035" }, - { label: "Кинк на латекс", value: "134" }, - { label: "Кинк на мольбы", value: "1543" }, - { label: "Кинк на наручники", value: "1065" }, - { label: "Кинк на нижнее белье", value: "145" }, - { label: "Кинк на очки", value: "1723" }, - { label: "Кинк на ошейники", value: "388" }, - { label: "Кинк на полноту", value: "552" }, - { label: "Кинк на похвалу", value: "1042" }, - { label: "Кинк на протезы", value: "2682" }, - { label: "Кинк на рога", value: "2320" }, - { label: "Кинк на руки", value: "915" }, - { label: "Кинк на сердцебиение", value: "941" }, - { label: "Кинк на силу", value: "1476" }, - { label: "Кинк на слезы", value: "1373" }, - { label: "Кинк на служение", value: "2980" }, - { label: "Кинк на страх", value: "2246" }, - { label: "Кинк на стыд", value: "747" }, - { label: "Кинк на унижение", value: "2291" }, - { label: "Кинк на униформу", value: "1350" }, - { label: "Кинк на уши", value: "2370" }, - { label: "Кинк на формальную одежду", value: "1064" }, - { label: "Кинк на чужую одежду", value: "2920" }, - { label: "Кинк на чулки", value: "810" }, - { label: "Кинк на шрамы", value: "2831" }, - { label: "Кинк на щекотку", value: "2396" }, - { label: "Кинк-бинго", value: "2290" }, - { label: "Кинки / Фетиши", value: "1659" }, - { label: "Кинотеатры", value: "981" }, - { label: "Киригакуре", value: "2475" }, - { label: "Китай", value: "757" }, - { label: "Кладбища", value: "501" }, - { label: "Кланы", value: "2879" }, - { label: "Классизм", value: "1927" }, - { label: "Клейма", value: "1548" }, - { label: "Клептомания", value: "1160" }, - { label: "Клетка Люцифера", value: "1884" }, - { label: "Клетки", value: "1069" }, - { label: "Клиническая смерть", value: "2068" }, - { label: "Клокпанк / Ветропанк", value: "1812" }, - { label: "Клоны", value: "358" }, - { label: "Клоуны", value: "1520" }, - { label: "Клубы по интересам", value: "1369" }, - { label: "Клюква", value: "1001" }, - { label: "Кляпы / Затыкание рта", value: "379" }, - { label: "Книги", value: "2746" }, - { label: "Книжные магазины", value: "444" }, - { label: "Кноттинг", value: "99" }, - { label: "Ковбои", value: "330" }, - { label: "Кода", value: "1943" }, - { label: "Кожаная одежда", value: "1517" }, - { label: "Колдовстворец", value: "2600" }, - { label: "Кома", value: "516" }, - { label: "Командная работа", value: "708" }, - { label: "Комики", value: "1315" }, - { label: "Комиксисты / Мангаки", value: "576" }, - { label: "Коммунальные квартиры", value: "1437" }, - { label: "Коммуны", value: "797" }, - { label: "Комнатные растения", value: "1792" }, - { label: "Комплекс Бога", value: "2087" }, - { label: "Комплекс превосходства", value: "2191" }, - { label: "Комплексы", value: "2529" }, - { label: "Конкурс от BUBBLE", value: "2937" }, - { label: "Конный спорт", value: "1378" }, - { label: "Конохагакуре", value: "2477" }, - { label: "Конспирология", value: "1911" }, - { label: "Контрабандисты", value: "2363" }, - { label: "Контроль / Подчинение", value: "932" }, - { label: "Контроль памяти", value: "2540" }, - { label: "Контроль сознания", value: "257" }, - { label: "Конфликт мировоззрений", value: "2678" }, - { label: "Концентрационные лагеря", value: "547" }, - { label: "Концерты / Выступления", value: "1236" }, - { label: "Конюшни", value: "514" }, - { label: "Копирование сознания", value: "1231" }, - { label: "Копирование способностей", value: "1825" }, - { label: "Копро-кинк", value: "763" }, - { label: "Корё", value: "1142" }, - { label: "Корейская война", value: "2187" }, - { label: "Коренные народы", value: "1505" }, - { label: "Королевства", value: "2794" }, - { label: "Корпорация BOBSOC", value: "2940" }, - { label: "Корректирующее изнасилование", value: "2856" }, - { label: "Коррупция", value: "2150" }, - { label: "Косвенные убийства", value: "2846" }, - { label: "Космоопера", value: "48" }, - { label: "Космос", value: "236" }, - { label: "Косплееры", value: "944" }, - { label: "Кочевники", value: "1793" }, - { label: "Кошмары", value: "1228" }, - { label: "Красная нить судьбы", value: "608" }, - { label: "Крепости / Башни", value: "2321" }, - { label: "Крестовые походы", value: "2070" }, - { label: "Крестражи", value: "2238" }, - { label: "Кризис гендера", value: "1406" }, - { label: "Кризис ориентации", value: "1405" }, - { label: "Криминалистическая экспертиза", value: "2361" }, - { label: "Криминальная пара", value: "1920" }, - { label: "Криокинез", value: "1804" }, - { label: "Криптиды", value: "60" }, - { label: "Криптоистория", value: "179" }, - { label: "Кровь / Травмы", value: "800" }, - { label: "Кроссдрессинг", value: "65" }, - { label: "Кроссовер", value: "10" }, - { label: "Кроули — Архангел Рафаэль", value: "2471" }, - { label: "Круизы", value: "2488" }, - { label: "Крушение «Титаника»", value: "2200" }, - { label: "Крылатые", value: "92" }, - { label: "Крэк", value: "1408" }, - { label: "Ксенофилия", value: "1711" }, - { label: "Ксенофобия", value: "589" }, - { label: "Куба", value: "773" }, - { label: "Кудэрэ", value: "1216" }, - { label: "Куклы", value: "1221" }, - { label: "Куколдинг", value: "524" }, - { label: "Культ Дракона", value: "2244" }, - { label: "Кумогакуре", value: "2474" }, - { label: "Куннилингус", value: "172" }, - { label: "Купальни", value: "964" }, - { label: "Курение", value: "202" }, - { label: "Курортный роман", value: "181" }, - { label: "Курьеры", value: "2735" }, - { label: "Лабиринты", value: "1981" }, - { label: "Лаборатории", value: "1115" }, - { label: "Лабораторные опыты", value: "146" }, - { label: "Лав-отели", value: "801" }, - { label: "Лавандовый брак", value: "1357" }, - { label: "Лакросс", value: "830" }, - { label: "Лапслок", value: "267" }, - { label: "Латентная гомосексуальность", value: "2339" }, - { label: "ЛГБТ-родители", value: "2723" }, - { label: "Лебединая верность", value: "537" }, - { label: "Левитация", value: "1281" }, - { label: "Легкая атлетика", value: "1797" }, - { label: "Лекарственная зависимость", value: "2632" }, - { label: "Леса", value: "703" }, - { label: "Летние ОтМетки", value: "2956" }, - { label: "Летние школы", value: "2803" }, - { label: "Лето девяносто девятого", value: "1990" }, - { label: "Лжебоги", value: "2869" }, - { label: "Лингвистический кинк", value: "2042" }, - { label: "Лирика", value: "2005" }, - { label: "Лихтенштейн", value: "1023" }, - { label: "Личность против системы", value: "1912" }, - { label: "Ложная беременность", value: "1428" }, - { label: "Ложные воспоминания", value: "376" }, - { label: "Ложные обвинения", value: "1204" }, - { label: "Локальный постапокалипсис", value: "2455" }, - { label: "Лолита (субкультура)", value: "1207" }, - { label: "Ломка", value: "1846" }, - { label: "Лошади", value: "1083" }, - { label: "Лугнасад", value: "2621" }, - { label: "Лудомания", value: "947" }, - { label: "Лучники", value: "1521" }, - { label: "Любить луну", value: "2901" }, - { label: "Любовная магия", value: "2317" }, - { label: "Любовный магнит", value: "1407" }, - { label: "Любовный многоугольник", value: "63" }, - { label: "Любовь с первого взгляда", value: "813" }, - { label: "Любовь/Ненависть", value: "1703" }, - { label: "Люди", value: "1538" }, - { label: "Людоеды", value: "1288" }, - { label: "Магазины", value: "1063" }, - { label: "Магическая связь", value: "2720" }, - { label: "Магические клятвы", value: "2245" }, - { label: "Магические лавки", value: "2629" }, - { label: "Магические учебные заведения", value: "1338" }, - { label: "Магический реализм", value: "9" }, - { label: "Магия", value: "1419" }, - { label: "Магия крови", value: "2857" }, - { label: "Маленькие города", value: "221" }, - { label: "Малфоигуд", value: "1890" }, - { label: "Мамми-кинк", value: "273" }, - { label: "Мандалорцы", value: "2870" }, - { label: "Манекены", value: "1509" }, - { label: "Манипуляции", value: "992" }, - { label: "Марафонный секс", value: "316" }, - { label: "Маргиналы", value: "394" }, - { label: "Марди Гра", value: "2407" }, - { label: "Маскарады / Балы", value: "443" }, - { label: "Массаж", value: "2218" }, - { label: "Мастурбация", value: "226" }, - { label: "Матриархат", value: "706" }, - { label: "Матчасть", value: "2328" }, - { label: "Махотокоро", value: "2943" }, - { label: "Маяки", value: "1356" }, - { label: "Мегаломания", value: "985" }, - { label: "Мегаполисы", value: "451" }, - { label: "Медицинский кинк", value: "748" }, - { label: "Медицинское использование наркотиков", value: "925" }, - { label: "Медовый месяц", value: "2235" }, - { label: "Медсестры / Медбратья", value: "2236" }, - { label: "Межбедренный секс", value: "931" }, - { label: "Междумирье", value: "2280" }, - { label: "Межэтнические отношения", value: "2121" }, - { label: "Мейлдом", value: "59" }, - { label: "Мексика", value: "768" }, - { label: "Меланхолия", value: "2108" }, - { label: "Мелодрама", value: "2881" }, - { label: "Менструация", value: "1570" }, - { label: "Ментальная тюрьма", value: "2294" }, - { label: "Месть", value: "907" }, - { label: "Металлисты", value: "1206" }, - { label: "Металлокинез", value: "1532" }, - { label: "Метафизические существа", value: "2097" }, - { label: "Метки", value: "1398" }, - { label: "Метросексуалы", value: "558" }, - { label: "Механофилия / Технофилия", value: "587" }, - { label: "Мечники", value: "2783" }, - { label: "Мечты", value: "993" }, - { label: "Миддлпанк", value: "2076" }, - { label: "Мизофилия", value: "1970" }, - { label: "Микро / Макро", value: "407" }, - { label: "Микрофикшен", value: "417" }, - { label: "Мимикрия", value: "2083" }, - { label: "Минет", value: "231" }, - { label: "Министерство Магии", value: "1917" }, - { label: "Минотавры", value: "2820" }, - { label: "Мир без гомофобии", value: "2660" }, - { label: "Мир Желаний (Однажды в сказке)", value: "2923" }, - { label: "Мир Института Войны", value: "2379" }, - { label: "Мироустройство", value: "989" }, - { label: "Мистерия", value: "2012" }, - { label: "Мистика", value: "1671" }, - { label: "Мистическая беременность", value: "1784" }, - { label: "Мистические защитники", value: "2162" }, - { label: "Мифы и мифология", value: "18" }, - { label: "Мнимая беременность", value: "1096" }, - { label: "Мнимая проза", value: "1098" }, - { label: "Мнимая свобода", value: "2708" }, - { label: "Многодетные семьи", value: "2785" }, - { label: "Множественное проникновение", value: "2059" }, - { label: "Множественные оргазмы", value: "317" }, - { label: "Множественные финалы", value: "312" }, - { label: "Могучие Рейнджеры: Дино Заряд", value: "2931" }, - { label: "Могучие Рейнджеры: Мегафорс", value: "2930" }, - { label: "Могучие Рейнджеры: Мистическая Сила", value: "2933" }, - { label: "Могучие Рейнджеры: Самураи", value: "2929" }, - { label: "Могучие Рейнджеры: Успеть на помощь", value: "2934" }, - { label: "Могучие Рейнджеры: Ярость Джунглей", value: "2932" }, - { label: "Модели", value: "399" }, - { label: "Модельеры", value: "598" }, - { label: "Модельный бизнес", value: "435" }, - { label: "Модификации тела", value: "890" }, - { label: "Молдова", value: "2967" }, - { label: "Молчание", value: "2465" }, - { label: "Монастыри", value: "352" }, - { label: "Монахи", value: "353" }, - { label: "Монолог", value: "2333" }, - { label: "Монстрофилия", value: "94" }, - { label: "Монстры", value: "529" }, - { label: "Моральные дилеммы", value: "959" }, - { label: "Морлед", value: "2255" }, - { label: "Моря / Океаны", value: "955" }, - { label: "Моряки", value: "406" }, - { label: "Мотоспорт", value: "1461" }, - { label: "Мужская беременность", value: "1660" }, - { label: "Мужская дружба", value: "2157" }, - { label: "Мужское грудное кормление", value: "297" }, - { label: "Музеи / Галереи", value: "795" }, - { label: "Музы", value: "2001" }, - { label: "Музыканты", value: "141" }, - { label: "Муковисцидоз", value: "2764" }, - { label: "Мультикроссовер", value: "2247" }, - { label: "Мумии", value: "579" }, - { label: "Мутанты", value: "740" }, - { label: "Мэри Сью (Марти Стью)", value: "1655" }, - { label: "Мятежи / Восстания", value: "584" }, - { label: "На грани жизни и смерти", value: "2545" }, - { label: "Наблюдатели", value: "1816" }, - { label: "Навязчивая опека", value: "954" }, - { label: "Навязчивые мысли", value: "2851" }, - { label: "Наги", value: "90" }, - { label: "Надежда", value: "2627" }, - { label: "Наемники", value: "512" }, - { label: "Наемные убийцы", value: "192" }, - { label: "Названные сиблинги", value: "2927" }, - { label: "Намеки на отношения", value: "1387" }, - { label: "Намеки на секс", value: "1382" }, - { label: "Напарники", value: "1291" }, - { label: "Наперегонки со временем", value: "2240" }, - { label: "НапиСанта", value: "2946" }, - { label: "Наполеоновские войны", value: "470" }, - { label: "Нарколепсия", value: "586" }, - { label: "Наркоторговля", value: "1116" }, - { label: "Нарушение этических норм", value: "968" }, - { label: "Нарциссизм", value: "546" }, - { label: "Насекомые", value: "2358" }, - { label: "Насилие", value: "1649" }, - { label: "Насилие над детьми", value: "726" }, - { label: "Наследие (Гарри Поттер)", value: "1935" }, - { label: "Наследство", value: "2172" }, - { label: "Наставничество", value: "935" }, - { label: "Настольные игры", value: "1513" }, - { label: "Настольные ролевые игры", value: "644" }, - { label: "Натуризм / Нудизм", value: "1810" }, - { label: "Наука", value: "2624" }, - { label: "Научная фантастика", value: "596" }, - { label: "Научно-исследовательские организации", value: "1503" }, - { label: "Научное фэнтези", value: "180" }, - { label: "Начало отношений", value: "1328" }, - { label: "Небинарные персонажи", value: "314" }, - { label: "Невезение", value: "2689" }, - { label: "Невзаимные предначертанные", value: "1484" }, - { label: "Невзаимные чувства", value: "105" }, - { label: "Невидимость", value: "359" }, - { label: "Невидимый мир", value: "2286" }, - { label: "Неграфичные описания", value: "2855" }, - { label: "Недоверие", value: "1842" }, - { label: "Недопонимания", value: "614" }, - { label: "Недостатки внешности", value: "923" }, - { label: "Нежелательная беременность", value: "715" }, - { label: "Нежелательные сверхспособности", value: "1335" }, - { label: "Нежелательные чувства", value: "2078" }, - { label: "Нежный секс", value: "280" }, - { label: "Незащищенный секс", value: "497" }, - { label: "Нездоровые механизмы преодоления", value: "1528" }, - { label: "Нездоровые отношения", value: "71" }, - { label: "Нездоровый образ жизни", value: "2148" }, - { label: "Нездоровый BDSM", value: "1062" }, - { label: "Неидеальный омегаверс", value: "2712" }, - { label: "Неизвестность", value: "2826" }, - { label: "Неизвестные родственники", value: "2752" }, - { label: "Неизлечимые заболевания", value: "1269" }, - { label: "Нейтрализация сверхспособностей", value: "2343" }, - { label: "Некромаги", value: "679" }, - { label: "Некрофилия", value: "1663" }, - { label: "Нелинейное повествование", value: "1699" }, - { label: "Неловкий секс", value: "2883" }, - { label: "Неловкость", value: "2459" }, - { label: "Нелюбящие родители", value: "2817" }, - { label: "Немертвые", value: "495" }, - { label: "Немота", value: "414" }, - { label: "Ненависть", value: "685" }, - { label: "Ненависть к себе", value: "1441" }, - { label: "Ненависть с первого взгляда", value: "814" }, - { label: "Ненадежный рассказчик", value: "322" }, - { label: "Ненасильственная смерть", value: "2531" }, - { label: "Необитаемые острова", value: "1196" }, - { label: "Необратимые превращения", value: "926" }, - { label: "Неозвученные чувства", value: "258" }, - { label: "Неприятие отношений", value: "2056" }, - { label: "Неравные отношения", value: "545" }, - { label: "Неравный брак", value: "409" }, - { label: "Неразрывная связь", value: "2569" }, - { label: "Нервный срыв", value: "1190" }, - { label: "Нерды", value: "481" }, - { label: "Нереалистичность", value: "2350" }, - { label: "Несексуальная близость", value: "2874" }, - { label: "Нестандартная поэзия", value: "1704" }, - { label: "Несчастливые отношения", value: "2080" }, - { label: "Несчастливый финал", value: "61" }, - { label: "Несчастные случаи", value: "499" }, - { label: "Нетаймори", value: "2323" }, - { label: "Неторопливое повествование", value: "1815" }, - { label: "Нетрадиционное использование Силы", value: "2520" }, - { label: "Неумышленное употребление наркотических веществ", value: "1192" }, - { label: "Неуставные отношения", value: "1396" }, - { label: "Нефилимы", value: "1086" }, - { label: "Неформальный брак", value: "1355" }, - { label: "Нецензурная лексика", value: "1653" }, - { label: "Нечеловеческая мораль", value: "2551" }, - { label: "Нечеловеческие виды", value: "995" }, - { label: "Нечистая сила", value: "1464" }, - { label: "Нидерланды", value: "1141" }, - { label: "Низкая самооценка", value: "2014" }, - { label: "Низкое фэнтези", value: "2007" }, - { label: "Нимфы", value: "1477" }, - { label: "Ниндзя", value: "471" }, - { label: "Новая жизнь", value: "2018" }, - { label: "Новая Зеландия", value: "1789" }, - { label: "Новеллизация", value: "262" }, - { label: "Новые отношения", value: "1827" }, - { label: "Новый год", value: "206" }, - { label: "Новый канон ЗВ", value: "1948" }, - { label: "Норны", value: "2206" }, - { label: "Ностальгия", value: "878" }, - { label: "Ночное видение", value: "2006" }, - { label: "Ночные клубы", value: "531" }, - { label: "Нуар", value: "137" }, - { label: "Няни", value: "570" }, - { label: "Обездвиживание", value: "116" }, - { label: "Обещания / Клятвы", value: "1823" }, - { label: "Обиды", value: "905" }, - { label: "Обман / Заблуждение", value: "650" }, - { label: "Обмен квами", value: "2572" }, - { label: "Обмен ролями", value: "1055" }, - { label: "Обмен телами", value: "49" }, - { label: "Обмороки", value: "2484" }, - { label: "Обнажение", value: "970" }, - { label: "Оборотни", value: "28" }, - { label: "Обоснованный ООС", value: "2549" }, - { label: "Образ тела", value: "2289" }, - { label: "Обратный омегаверс", value: "2435" }, - { label: "Обретенные семьи", value: "601" }, - { label: "Обреченные отношения", value: "653" }, - { label: "Обскуры", value: "2237" }, - { label: "Обсуждение кинков", value: "1072" }, - { label: "Обусловленная контекстом гомофобия", value: "2685" }, - { label: "Обусловленный контекстом расизм", value: "2686" }, - { label: "Обусловленный контекстом сексизм", value: "2687" }, - { label: "Общежития", value: "534" }, - { label: "Общественный транспорт", value: "615" }, - { label: "Объективация", value: "1837" }, - { label: "Объектофилия", value: "366" }, - { label: "Овипозиция", value: "269" }, - { label: "Огнестрельное оружие", value: "1189" }, - { label: "Ограбления", value: "2269" }, - { label: "Одержимость", value: "2248" }, - { label: "Одержимые", value: "496" }, - { label: "Один день", value: "2647" }, - { label: "Одиночество", value: "1015" }, - { label: "Одичавшие дети", value: "835" }, - { label: "Однолюбы", value: "2146" }, - { label: "Одноминутный канонический персонаж", value: "2184" }, - { label: "Однополый мир", value: "1462" }, - { label: "Ожидание", value: "2909" }, - { label: "ОЖП", value: "1657" }, - { label: "Окаменение", value: "2052" }, - { label: "Океания", value: "1058" }, - { label: "Оккультизм", value: "2374" }, - { label: "ОКР", value: "594" }, - { label: "Окулолинктус", value: "1470" }, - { label: "Олимпийские игры", value: "1127" }, - { label: "Олфактофилия", value: "1945" }, - { label: "Омегаверс", value: "1693" }, - { label: "Омегаверс: Альфа/Альфа", value: "2437" }, - { label: "Омегаверс: Альфа/Бета", value: "2741" }, - { label: "Омегаверс: Альфа/Бета/Омега", value: "2898" }, - { label: "Омегаверс: Альфа/Омега/Альфа", value: "2436" }, - { label: "Омегаверс: Бета/Бета", value: "2966" }, - { label: "Омегаверс: Больше трех полов", value: "2782" }, - { label: "Омегаверс: Омега/Альфа/Омега", value: "2544" }, - { label: "Омегаверс: Омега/Бета", value: "2965" }, - { label: "Омегаверс: Омега/Омега", value: "2564" }, - { label: "Омегаверс: Смена второго пола", value: "2776" }, - { label: "Омегаверс: f!Альфа/m!Омега", value: "2777" }, - { label: "ОМП", value: "1656" }, - { label: "Онейрокинез", value: "2067" }, - { label: "Онкологические заболевания", value: "540" }, - { label: "ООС", value: "1648" }, - { label: "Опасность", value: "2847" }, - { label: "Опера", value: "549" }, - { label: "Опричнина", value: "2252" }, - { label: "Оптимизм", value: "2420" }, - { label: "Оракулы / Провидцы", value: "2221" }, - { label: "Оральная фиксация", value: "2523" }, - { label: "Оргазм без стимуляции", value: "1000" }, - { label: "Организаторы свадеб", value: "858" }, - { label: "Орден Феникса", value: "1907" }, - { label: "Орки", value: "187" }, - { label: "Оружие массового поражения", value: "1193" }, - { label: "Освоение земель", value: "1824" }, - { label: "Оседлание", value: "1223" }, - { label: "Османская империя", value: "527" }, - { label: "Особняки / Резиденции", value: "500" }, - { label: "Осознанные сновидения", value: "530" }, - { label: "Остеокинез", value: "2845" }, - { label: "Острова", value: "799" }, - { label: "От антигероя к герою", value: "2173" }, - { label: "От антигероя к злодею", value: "2213" }, - { label: "От божественного существа к смертному", value: "2664" }, - { label: "От возлюбленных к врагам", value: "783" }, - { label: "От возлюбленных к друзьям", value: "782" }, - { label: "От врагов к возлюбленным", value: "346" }, - { label: "От врагов к друзьям", value: "347" }, - { label: "От врагов к друзьям к возлюбленным", value: "345" }, - { label: "От героя к антигерою", value: "2546" }, - { label: "От героя к злодею", value: "1027" }, - { label: "От героя к монстру", value: "2659" }, - { label: "От героя к обычному персонажу", value: "2584" }, - { label: "От друзей к возлюбленным", value: "344" }, - { label: "От друзей к врагам", value: "463" }, - { label: "От друзей к незнакомцам", value: "1870" }, - { label: "От злодея к антигерою", value: "2640" }, - { label: "От злодея к герою", value: "1026" }, - { label: "От напарников к друзьям к возлюбленным", value: "2460" }, - { label: "От нездоровых отношений к здоровым", value: "2301" }, - { label: "От незнакомцев к возлюбленным", value: "372" }, - { label: "От простонародья к аристократу", value: "2816" }, - { label: "От сексуальных партнеров к возлюбленным", value: "2069" }, - { label: "От смертного к божественному существу", value: "2665" }, - { label: "От супругов к возлюбленным", value: "2359" }, - { label: "Ответвление от канона", value: "2336" }, - { label: "Ответственность", value: "2468" }, - { label: "Отдаю на вдохновение", value: "2288" }, - { label: "Отечественная война 1812 года", value: "1162" }, - { label: "Отказ от чувств", value: "2227" }, - { label: "Отклонения от канона", value: "5" }, - { label: "Открытый финал", value: "185" }, - { label: "ОтМетки", value: "2945" }, - { label: "Отношения втайне", value: "285" }, - { label: "Отношения на расстоянии", value: "37" }, - { label: "Отношения на спор", value: "383" }, - { label: "Отношения наполовину", value: "1573" }, - { label: "Отпуск", value: "1828" }, - { label: "Отрицание", value: "1868" }, - { label: "Отрицание чувств", value: "648" }, - { label: "Отрицательный протагонист", value: "1442" }, - { label: "Отсутствие души", value: "1897" }, - { label: "Отшельники", value: "543" }, - { label: "Офисы", value: "74" }, - { label: "Официанты / Официантки", value: "2560" }, - { label: "Охота", value: "825" }, - { label: "Охота на разумных существ", value: "2784" }, - { label: "Охотники", value: "2036" }, - { label: "Охотники за головами", value: "2103" }, - { label: "Охотники на нечисть", value: "46" }, - { label: "Охранники", value: "1173" }, - { label: "Ошибки", value: "2554" }, - { label: "Ошибочная идентификация", value: "2490" }, - { label: "Паладины", value: "1194" }, - { label: "Пан-персонажи", value: "302" }, - { label: "Пандемия COVID-19", value: "2724" }, - { label: "Панические атаки", value: "751" }, - { label: "Паническое расстройство", value: "733" }, - { label: "Панки", value: "625" }, - { label: "Паразиты", value: "1877" }, - { label: "Паралич", value: "1941" }, - { label: "Параллельные миры", value: "378" }, - { label: "Паранойя", value: "1253" }, - { label: "Пари", value: "778" }, - { label: "Парки / Зоны отдыха", value: "1005" }, - { label: "Парки аттракционов / Ярмарки", value: "793" }, - { label: "Паркур", value: "553" }, - { label: "Пародия", value: "1676" }, - { label: "Партизаны", value: "850" }, - { label: "Парфюмеры", value: "1384" }, - { label: "Пасха", value: "562" }, - { label: "Патологическое бесстрашие", value: "1498" }, - { label: "Патологическое накопительство", value: "2691" }, - { label: "Патологоанатомы", value: "502" }, - { label: "Патриархат", value: "705" }, - { label: "Патриотические темы и мотивы", value: "2231" }, - { label: "Патронусы", value: "2390" }, - { label: "Патрули", value: "1819" }, - { label: "Пафос", value: "2589" }, - { label: "Пацифисты", value: "1939" }, - { label: "Пегасы", value: "1047" }, - { label: "Пеггинг", value: "159" }, - { label: "Пейзажная лирика", value: "2330" }, - { label: "Пекарни", value: "78" }, - { label: "Первая мировая", value: "487" }, - { label: "Первая чеченская война", value: "2428" }, - { label: "Первобытные времена", value: "465" }, - { label: "Первое апреля", value: "2315" }, - { label: "Первопроходцы", value: "351" }, - { label: "Первый контакт", value: "2093" }, - { label: "Первый поцелуй", value: "2790" }, - { label: "Первый раз", value: "1292" }, - { label: "Передача магических способностей", value: "2497" }, - { label: "Переезд", value: "658" }, - { label: "Перезапуск мира", value: "2710" }, - { label: "Перемирие", value: "1331" }, - { label: "Переписки и чаты (стилизация)", value: "38" }, - { label: "Перерыв в отношениях", value: "519" }, - { label: "Переселение душ", value: "1237" }, - { label: "Перестрелки", value: "2268" }, - { label: "Переходный возраст", value: "1297" }, - { label: "Период Эдо", value: "1140" }, - { label: "Персекуторный бред", value: "2136" }, - { label: "Персонажи-геи", value: "2141" }, - { label: "Персонажи-лесбиянки", value: "2142" }, - { label: "Персонификация", value: "994" }, - { label: "Персонификация смерти", value: "1046" }, - { label: "Перу", value: "2017" }, - { label: "Перфекционизм", value: "2730" }, - { label: "Пессимизм", value: "2709" }, - { label: "Пет-плей", value: "391" }, - { label: "Петербург: бикейм #Чимин Сергеевич", value: "1859" }, - { label: "Петтинг", value: "301" }, - { label: "Пещеры", value: "655" }, - { label: "Пижамные вечеринки", value: "1340" }, - { label: "Пикацизм", value: "1227" }, - { label: "Пикники", value: "1165" }, - { label: "Пионеры", value: "668" }, - { label: "Пираты", value: "72" }, - { label: "Пирокинез", value: "1180" }, - { label: "Пиромания", value: "899" }, - { label: "Пирсинг", value: "507" }, - { label: "Писатели", value: "196" }, - { label: "Письма", value: "2298" }, - { label: "Письма (стилизация)", value: "266" }, - { label: "Пиццерии / Дайнеры", value: "593" }, - { label: "Плавание", value: "1135" }, - { label: "Плантокинез", value: "2029" }, - { label: "Пластические операции", value: "1847" }, - { label: "Платонические отношения", value: "385" }, - { label: "Племена", value: "1336" }, - { label: "Плен", value: "290" }, - { label: "Плененные путешествием", value: "2615" }, - { label: "Плохая компания", value: "1502" }, - { label: "Плохие друзья", value: "2445" }, - { label: "Плохой хороший финал", value: "1265" }, - { label: "Плюшефилия", value: "520" }, - { label: "Пляжи", value: "766" }, - { label: "По разные стороны", value: "897" }, - { label: "Побег", value: "661" }, - { label: "Побег из дома", value: "2309" }, - { label: "Победа Волдеморта", value: "1887" }, - { label: "Победа Гриндевальда", value: "2398" }, - { label: "Повара", value: "2853" }, - { label: "Повелитель смерти", value: "1909" }, - { label: "Повествование в будущем времени", value: "2633" }, - { label: "Повествование в настоящем времени", value: "1826" }, - { label: "Повествование во втором лице", value: "166" }, - { label: "Повествование от нескольких лиц", value: "1157" }, - { label: "Повествование от первого лица", value: "1681" }, - { label: "Повседневность", value: "1677" }, - { label: "Повстанцы", value: "659" }, - { label: "Повторение судьбы", value: "1997" }, - { label: "Поглощение способностей", value: "2605" }, - { label: "Погони / Преследования", value: "1996" }, - { label: "Пограничный синдром", value: "710" }, - { label: "Погребение заживо", value: "1279" }, - { label: "Под одной крышей", value: "462" }, - { label: "Под старину (стилизация)", value: "2486" }, - { label: "Подарки", value: "1109" }, - { label: "Подвешивание", value: "914" }, - { label: "Подводный мир", value: "901" }, - { label: "Подземелья", value: "2314" }, - { label: "Подземный мир", value: "1453" }, - { label: "Подлость", value: "2625" }, - { label: "Подменыши", value: "2250" }, - { label: "Подпольные бои", value: "1389" }, - { label: "Подразумеваемая смерть персонажа", value: "2204" }, - { label: "Подростки", value: "218" }, - { label: "Подростковая беременность", value: "986" }, - { label: "Подростковая влюбленность", value: "581" }, - { label: "Подсознание", value: "2273" }, - { label: "Поедание разумных существ", value: "1795" }, - { label: "Пожарные", value: "2557" }, - { label: "Пожилые персонажи", value: "852" }, - { label: "Поза 69", value: "699" }, - { label: "Поиск работы", value: "2646" }, - { label: "Поиск родителей", value: "2033" }, - { label: "Поклонение телу", value: "712" }, - { label: "Покровительство", value: "2223" }, - { label: "Покушение на жизнь", value: "1057" }, - { label: "Покушение на свободу", value: "2655" }, - { label: "Полиамория", value: "1705" }, - { label: "Полиандрия", value: "761" }, - { label: "Полигиния", value: "760" }, - { label: "Политика", value: "1835" }, - { label: "Политики", value: "711" }, - { label: "Политические интриги", value: "183" }, - { label: "Полицейские", value: "14" }, - { label: "Половой диморфизм", value: "1780" }, - { label: "Полубоги", value: "437" }, - { label: "Полудемоны", value: "2872" }, - { label: "Полудраконы", value: "2859" }, - { label: "Полукровки", value: "368" }, - { label: "Польша", value: "777" }, - { label: "Полярные станции", value: "1493" }, - { label: "Помощь врагу", value: "1325" }, - { label: "Попаданцы: В реальный мир", value: "1499" }, - { label: "Попаданцы: В своем теле", value: "1412" }, - { label: "Попаданцы: В чужом теле", value: "1413" }, - { label: "Попаданцы: Из одного фандома в другой", value: "2699" }, - { label: "Попаданцы: Из фандома в ориджинал", value: "2193" }, - { label: "Попаданцы: По обмену", value: "2196" }, - { label: "Попаданчество", value: "1695" }, - { label: "Популярность", value: "2581" }, - { label: "Попытка изнасилования", value: "1440" }, - { label: "Порноактеры", value: "289" }, - { label: "Португалия", value: "1749" }, - { label: "Порты", value: "1028" }, - { label: "Поселки", value: "1298" }, - { label: "После таймскипа (Haikyuu!!)", value: "2906" }, - { label: "После таймскипа (Shingeki no Kyojin)", value: "2903" }, - { label: "Послевоенное время", value: "1080" }, - { label: "Последний раз", value: "2645" }, - { label: "Последний рубеж", value: "1178" }, - { label: "Последний шанс", value: "1209" }, - { label: "Последствия", value: "2491" }, - { label: "Последствия болезни", value: "2612" }, - { label: "Послеродовая депрессия", value: "988" }, - { label: "Посмертная любовь", value: "2670" }, - { label: "Посмертный персонаж", value: "2653" }, - { label: "Пост-Пацифист", value: "2408" }, - { label: "Пост-Рейхенбах", value: "1903" }, - { label: "Пост-третий сезон (Шерлок)", value: "1977" }, - { label: "Постапокалиптика", value: "1697" }, - { label: "ПостВБ", value: "2386" }, - { label: "Постканон", value: "6" }, - { label: "ПостРагнарек", value: "2537" }, - { label: "ПостХог", value: "1883" }, - { label: "ПостЭндгейм", value: "2179" }, - { label: "Потеря девственности", value: "1234" }, - { label: "Потеря конечностей", value: "1289" }, - { label: "Потеря магических способностей", value: "1430" }, - { label: "Потеря памяти", value: "36" }, - { label: "Потеря сверхспособностей", value: "1051" }, - { label: "Поттергад", value: "2417" }, - { label: "Похищение", value: "224" }, - { label: "Похороны", value: "786" }, - { label: "Почтовые работники", value: "1821" }, - { label: "Пошлый юмор", value: "1362" }, - { label: "Поэма", value: "1938" }, - { label: "Поэты", value: "357" }, - { label: "Пояс верности", value: "1779" }, - { label: "Правда или действие", value: "1982" }, - { label: "Практопия", value: "2249" }, - { label: "Пре-гет", value: "209" }, - { label: "Пре-Рош", value: "2047" }, - { label: "Пре-слэш", value: "207" }, - { label: "Пре-фемслэш", value: "208" }, - { label: "Предательство", value: "361" }, - { label: "Предвидение", value: "1876" }, - { label: "Предложение руки и сердца", value: "1081" }, - { label: "Предопределенность", value: "411" }, - { label: "Предрассудки", value: "2046" }, - { label: "Предсмертные сообщения", value: "2174" }, - { label: "Преканон", value: "7" }, - { label: "ПреКербер", value: "2726" }, - { label: "Прекрасная эпоха", value: "1809" }, - { label: "Прелюдия", value: "2395" }, - { label: "Пренебрежение гигиеной", value: "2921" }, - { label: "Пренебрежение жизнью", value: "2216" }, - { label: "Преодоление комплексов", value: "588" }, - { label: "Преподаватели", value: "403" }, - { label: "Преподаватель/Обучающийся", value: "2507" }, - { label: "Преступники", value: "1446" }, - { label: "Преступный мир", value: "12" }, - { label: "Прибрежные города", value: "984" }, - { label: "Приватный танец", value: "2786" }, - { label: "Привязанность", value: "2372" }, - { label: "Пригород", value: "452" }, - { label: "Приемные семьи", value: "844" }, - { label: "Признания в любви", value: "1049" }, - { label: "Призраки", value: "26" }, - { label: "Приключения", value: "21" }, - { label: "Приметы / Суеверия", value: "612" }, - { label: "Примирение", value: "660" }, - { label: "Принудительная феминизация", value: "656" }, - { label: "Принудительное лечение", value: "971" }, - { label: "Принудительные отношения", value: "2302" }, - { label: "Принудительный брак", value: "307" }, - { label: "Принудительный инцест", value: "2942" }, - { label: "Принуждение", value: "1323" }, - { label: "Принятие себя", value: "2754" }, - { label: "Прислуга", value: "804" }, - { label: "Прист-кинк", value: "342" }, - { label: "Приступы агрессии", value: "2788" }, - { label: "Притча", value: "1088" }, - { label: "Приюты для животных", value: "2345" }, - { label: "ПРЛ", value: "1092" }, - { label: "Проблемы доверия", value: "2208" }, - { label: "Проблемы с законом", value: "1007" }, - { label: "Проводники душ", value: "2348" }, - { label: "Программисты", value: "574" }, - { label: "Прогрессорство", value: "449" }, - { label: "Прогулки", value: "2462" }, - { label: "Продажа души", value: "887" }, - { label: "Прозопагнозия", value: "2013" }, - { label: "Производственный роман", value: "2119" }, - { label: "Проклятия", value: "875" }, - { label: "Пролапс", value: "2926" }, - { label: "Промискуитет", value: "1817" }, - { label: "Промышленные предприятия", value: "1456" }, - { label: "Пропавшие без вести", value: "2073" }, - { label: "Пропущенная сцена", value: "1702" }, - { label: "Пророчества", value: "834" }, - { label: "Просмотр порно", value: "2341" }, - { label: "Проституция", value: "178" }, - { label: "Протезы", value: "1581" }, - { label: "Противоположности", value: "948" }, - { label: "Противоречивые чувства", value: "2528" }, - { label: "Прошлое", value: "983" }, - { label: "Прощение", value: "1545" }, - { label: "Псевдо-инцест", value: "336" }, - { label: "Псевдо-мистика", value: "2159" }, - { label: "Псевдоисторический сеттинг", value: "1479" }, - { label: "Псионика", value: "2023" }, - { label: "Психиатрические больницы", value: "135" }, - { label: "Психические расстройства", value: "69" }, - { label: "Психоз", value: "1339" }, - { label: "Психологи / Психоаналитики", value: "611" }, - { label: "Психологическая война", value: "2595" }, - { label: "Психологические пытки", value: "2825" }, - { label: "Психологические травмы", value: "40" }, - { label: "Психологический мазохизм", value: "2212" }, - { label: "Психологический ужас", value: "1261" }, - { label: "Психологическое насилие", value: "836" }, - { label: "Психология", value: "1674" }, - { label: "Психопатия", value: "869" }, - { label: "Психосоматические расстройства", value: "1834" }, - { label: "Психотерапия", value: "958" }, - { label: "ПТСР", value: "425" }, - { label: "Публичное обнажение", value: "319" }, - { label: "Пурпурная проза", value: "599" }, - { label: "Пустоши", value: "1114" }, - { label: "Пустыни", value: "692" }, - { label: "Путешественники-исследователи", value: "888" }, - { label: "Путешествия", value: "894" }, - { label: "Пытки", value: "210" }, - { label: "Пьеса", value: "434" }, - { label: "Рабочие", value: "1771" }, - { label: "Рабство", value: "51" }, - { label: "Равнодушие", value: "2516" }, - { label: "Равные отношения", value: "2728" }, - { label: "Радикальная медицина", value: "731" }, - { label: "Радио", value: "974" }, - { label: "Разбойники", value: "473" }, - { label: "Развитие отношений", value: "1404" }, - { label: "Развод", value: "200" }, - { label: "Разговоры", value: "1401" }, - { label: "Раздвоение личности", value: "287" }, - { label: "Раздельное обучение", value: "1959" }, - { label: "Разлука / Прощания", value: "1104" }, - { label: "Разница в возрасте", value: "2" }, - { label: "Разница культур", value: "1079" }, - { label: "Разновозрастная дружба", value: "2402" }, - { label: "Разнополая дружба", value: "806" }, - { label: "Разоблачения", value: "2684" }, - { label: "Разочарования", value: "646" }, - { label: "Разрушение стереотипов", value: "2805" }, - { label: "Разрушение четвертой стены", value: "381" }, - { label: "Разрыв связи", value: "2582" }, - { label: "Разум роя", value: "1459" }, - { label: "Разумное оружие", value: "2675" }, - { label: "Разумные животные", value: "895" }, - { label: "Разумные растения", value: "1037" }, - { label: "Раптофилия", value: "729" }, - { label: "Расизм", value: "433" }, - { label: "Раскрытие личностей", value: "2120" }, - { label: "Раскрытие магии", value: "1878" }, - { label: "Расплата", value: "2464" }, - { label: "Рассказ в рассказе", value: "2077" }, - { label: "Расставание", value: "506" }, - { label: "Расстройства аутистического спектра", value: "541" }, - { label: "Расстройства цветового восприятия", value: "1330" }, - { label: "Расстройства шизофренического спектра", value: "912" }, - { label: "Растаманы", value: "857" }, - { label: "Расширенная Вселенная ЗВ", value: "1950" }, - { label: "Реабилитационные центры", value: "1467" }, - { label: "Реактивное расстройство привязанности", value: "2576" }, - { label: "Реакции (стилизация)", value: "1283" }, - { label: "Реализм", value: "1201" }, - { label: "Реалити-шоу", value: "2312" }, - { label: "Ревность", value: "544" }, - { label: "Революции", value: "585" }, - { label: "Регенерация", value: "1530" }, - { label: "Регресс", value: "450" }, - { label: "Регрессия возраста", value: "102" }, - { label: "Редкие заболевания", value: "1856" }, - { label: "Реинкарнация", value: "101" }, - { label: "Рейтинг за лексику", value: "276" }, - { label: "Рейтинг за насилие и/или жестокость", value: "277" }, - { label: "Рейтинг за секс", value: "278" }, - { label: "Религиозная нетерпимость", value: "2451" }, - { label: "Религиозные войны", value: "2911" }, - { label: "Религиозные темы и мотивы", value: "198" }, - { label: "Религиозный фанатизм", value: "2548" }, - { label: "Ренессанс", value: "239" }, - { label: "Репетиторы", value: "2413" }, - { label: "Репетиции", value: "2241" }, - { label: "Репродуктивное насилие", value: "2310" }, - { label: "Реставраторы", value: "2239" }, - { label: "Рестораны", value: "412" }, - { label: "Ретеллинг", value: "52" }, - { label: "Ретрофутуризм", value: "727" }, - { label: "Реформация", value: "2199" }, - { label: "Речь Посполитая", value: "1529" }, - { label: "Риветхеды", value: "2904" }, - { label: "Римминг", value: "170" }, - { label: "Риск", value: "2467" }, - { label: "Рискованная беременность", value: "998" }, - { label: "Ритуалы", value: "749" }, - { label: "Ритуальные услуги", value: "2362" }, - { label: "Роботы", value: "513" }, - { label: "Родео", value: "1314" }, - { label: "Родители-одиночки", value: "325" }, - { label: "Родительские чувства", value: "2308" }, - { label: "Родомагия", value: "1899" }, - { label: "Роды", value: "991" }, - { label: "Рождество", value: "211" }, - { label: "Розыгрыши", value: "1807" }, - { label: "Рокеры", value: "861" }, - { label: "Роковая женщина / Роковой мужчина", value: "982" }, - { label: "Роковое усилие", value: "2604" }, - { label: "Роллер-дерби", value: "1014" }, - { label: "Романтизация", value: "1898" }, - { label: "Романтика", value: "1664" }, - { label: "Романтическая дружба", value: "2307" }, - { label: "Ромком", value: "2768" }, - { label: "Российская империя", value: "475" }, - { label: "Россия", value: "701" }, - { label: "РПП", value: "286" }, - { label: "Румыния", value: "862" }, - { label: "Русалки", value: "32" }, - { label: "Русальная неделя", value: "1067" }, - { label: "Русреал", value: "53" }, - { label: "Руферы", value: "578" }, - { label: "Рыбалка", value: "855" }, - { label: "Рыцари", value: "426" }, - { label: "Рыцарские турниры", value: "2759" }, - { label: "С чистого листа", value: "987" }, - { label: "Савойя", value: "1036" }, - { label: "Садизм / Мазохизм", value: "461" }, - { label: "Садовники", value: "1348" }, - { label: "Сайз-кинк", value: "100" }, - { label: "Самобытные культуры", value: "663" }, - { label: "Самовнушение", value: "2169" }, - { label: "Самовставка", value: "1689" }, - { label: "Самозванцы", value: "1811" }, - { label: "Самоистязание", value: "1386" }, - { label: "Самоопределение / Самопознание", value: "1278" }, - { label: "Самопожертвование", value: "750" }, - { label: "Самосуд", value: "1402" }, - { label: "Самоуничижение", value: "2667" }, - { label: "Самураи", value: "472" }, - { label: "Санатории", value: "223" }, - { label: "Сандалпанк", value: "1986" }, - { label: "Сарказм", value: "2225" }, - { label: "Сатира", value: "1944" }, - { label: "Сатиры", value: "264" }, - { label: "Сахарный диабет", value: "2609" }, - { label: "Сборник драбблов", value: "39" }, - { label: "Сборник лимериков", value: "1989" }, - { label: "Сборник пирожков", value: "743" }, - { label: "Сборник стихотворений", value: "600" }, - { label: "Сборник японской поэзии", value: "1351" }, - { label: "Свадьба", value: "184" }, - { label: "Сверхразумы", value: "966" }, - { label: "Сверхскорость", value: "1902" }, - { label: "Сверхспособности", value: "597" }, - { label: "Светлые властелины", value: "2596" }, - { label: "Светские мероприятия", value: "973" }, - { label: "Свидание вслепую", value: "741" }, - { label: "Свидания", value: "1235" }, - { label: "Свидетели", value: "1242" }, - { label: "Свингерство", value: "203" }, - { label: "Свобода", value: "2166" }, - { label: "Свободные отношения", value: "255" }, - { label: "Сводничество", value: "568" }, - { label: "Сводные родственники", value: "1445" }, - { label: "Святые", value: "393" }, - { label: "Сгенерировано ИИ", value: "3014" }, - { label: "СДВГ", value: "539" }, - { label: "Севвитус", value: "1871" }, - { label: "Северная Корея", value: "2767" }, - { label: "Северус Снейп жив", value: "2406" }, - { label: "Сегрегация", value: "2158" }, - { label: "Секретари", value: "1170" }, - { label: "Секретные миссии", value: "1829" }, - { label: "Секс без обязательств", value: "387" }, - { label: "Секс в воде", value: "718" }, - { label: "Секс в нетрезвом виде", value: "1110" }, - { label: "Секс в одежде", value: "1013" }, - { label: "Секс в публичных местах", value: "123" }, - { label: "Секс в транспорте", value: "124" }, - { label: "Секс в церкви", value: "2968" }, - { label: "Секс во время беременности", value: "279" }, - { label: "Секс во время болезни", value: "1365" }, - { label: "Секс во время менструации", value: "153" }, - { label: "Секс на камеру", value: "1101" }, - { label: "Секс на природе", value: "1256" }, - { label: "Секс перед зеркалом", value: "1255" }, - { label: "Секс по расчету", value: "1212" }, - { label: "Секс по телефону", value: "133" }, - { label: "Секс при посторонних", value: "2514" }, - { label: "Секс с воображаемыми партнерами", value: "2276" }, - { label: "Секс с использованием магии", value: "1563" }, - { label: "Секс с использованием одурманивающих веществ", value: "2635" }, - { label: "Секс с использованием посторонних предметов", value: "1661" }, - { label: "Секс с использованием сверхспособностей", value: "2610" }, - { label: "Секс со смертельным исходом", value: "1171" }, - { label: "Секс-игрушки", value: "176" }, - { label: "Секс-индустрия", value: "447" }, - { label: "Секс-клубы / Секс-вечеринки", value: "936" }, - { label: "Секс-куклы", value: "1202" }, - { label: "Секс-магия", value: "1131" }, - { label: "Секс-машины", value: "1112" }, - { label: "Секс-шопы", value: "739" }, - { label: "Сексизм", value: "464" }, - { label: "Сексомния", value: "2024" }, - { label: "Секстинг", value: "2215" }, - { label: "Сексуальная неопытность", value: "1717" }, - { label: "Сексуальное насилие", value: "2495" }, - { label: "Сексуальное обучение", value: "967" }, - { label: "Сексуальное рабство", value: "1353" }, - { label: "Сексуальные фобии", value: "1537" }, - { label: "Селфхарм", value: "76" }, - { label: "Селфцест", value: "1708" }, - { label: "Семейная сага", value: "920" }, - { label: "Семейные тайны", value: "779" }, - { label: "Семейный бизнес", value: "2338" }, - { label: "Семьи", value: "220" }, - { label: "Сенсорная депривация", value: "282" }, - { label: "Сенсорная перегрузка", value: "2351" }, - { label: "Сентиментальность", value: "2567" }, - { label: "Серая мораль", value: "839" }, - { label: "Серая мышь", value: "1250" }, - { label: "Серая реальность", value: "2278" }, - { label: "Серийные насильники", value: "1942" }, - { label: "Серийные убийцы", value: "193" }, - { label: "Серфинг", value: "764" }, - { label: "Сиамские близнецы", value: "1252" }, - { label: "Сибари", value: "131" }, - { label: "Сиблинги", value: "617" }, - { label: "Сидение на лице", value: "713" }, - { label: "Силкпанк", value: "1813" }, - { label: "Симбиоз", value: "849" }, - { label: "Символизм", value: "538" }, - { label: "Симфорофилия", value: "492" }, - { label: "Синдром восьмиклассника", value: "2032" }, - { label: "Синдром выжившего", value: "1100" }, - { label: "Синдром Дауна", value: "2106" }, - { label: "Синдром Котара", value: "2765" }, - { label: "Синдром Питера Пэна", value: "687" }, - { label: "Синдром Туретта", value: "946" }, - { label: "Синестезия", value: "960" }, - { label: "Сирены", value: "1830" }, - { label: "Сириус Блэк жив", value: "2617" }, - { label: "Сироты", value: "689" }, - { label: "Ситком", value: "2553" }, - { label: "Сказка", value: "288" }, - { label: "Скайпанк", value: "976" }, - { label: "Скандинавия", value: "781" }, - { label: "Скандинавская мифология", value: "2304" }, - { label: "Сквиртинг", value: "950" }, - { label: "Сквозное видение", value: "1280" }, - { label: "Скейтбординг", value: "1395" }, - { label: "Скелеты", value: "1766" }, - { label: "Скинхэды", value: "1757" }, - { label: "Скрытая беременность", value: "2580" }, - { label: "Скрытность", value: "2577" }, - { label: "Скрытые способности", value: "2579" }, - { label: "Скрытый Этаж", value: "2763" }, - { label: "Скульпторы", value: "2976" }, - { label: "Слатшейминг", value: "2910" }, - { label: "Следующее поколение", value: "698" }, - { label: "Слежка", value: "2102" }, - { label: "Слепота", value: "413" }, - { label: "Слияние", value: "2324" }, - { label: "Словакия", value: "2938" }, - { label: "Словения", value: "1788" }, - { label: "Сложные отношения", value: "326" }, - { label: "Слом личности", value: "623" }, - { label: "Слоуберн", value: "19" }, - { label: "Служебные животные", value: "1506" }, - { label: "Служебные отношения", value: "1347" }, - { label: "Служебный роман", value: "75" }, - { label: "Слухи / Сплетни", value: "2809" }, - { label: "Случайные убийства", value: "2673" }, - { label: "Случайный брак", value: "304" }, - { label: "Случайный поцелуй", value: "2852" }, - { label: "Случайный секс", value: "1275" }, - { label: "Смена имени", value: "2094" }, - { label: "Смена мировоззрения", value: "2865" }, - { label: "Смена сущности", value: "1707" }, - { label: "Смертельные заболевания", value: "1132" }, - { label: "Смерть антагониста", value: "2650" }, - { label: "Смерть всех персонажей", value: "2611" }, - { label: "Смерть второстепенных персонажей", value: "1713" }, - { label: "Смерть животных", value: "2210" }, - { label: "Смерть основных персонажей", value: "1647" }, - { label: "СМИ", value: "2656" }, - { label: "Смирение", value: "2272" }, - { label: "Смотрины", value: "1495" }, - { label: "Смутное время", value: "2002" }, - { label: "Снайперы", value: "1762" }, - { label: "Сновидения", value: "490" }, - { label: "Сноубординг", value: "2180" }, - { label: "Соблазнение / Ухаживания", value: "616" }, - { label: "Собственничество", value: "908" }, - { label: "Советпанк", value: "397" }, - { label: "Советский Союз", value: "468" }, - { label: "Совместная кровать", value: "1229" }, - { label: "Совместное купание", value: "1301" }, - { label: "Современное искусство", value: "1087" }, - { label: "Современность", value: "80" }, - { label: "Согласование с каноном", value: "1388" }, - { label: "Сожаления", value: "550" }, - { label: "Создание общества", value: "2643" }, - { label: "Созидание", value: "2590" }, - { label: "Сокровища", value: "893" }, - { label: "Сокрытие убийства", value: "2311" }, - { label: "Солянка из Сансов", value: "2515" }, - { label: "Сомелье / Бармены", value: "865" }, - { label: "Сомнамбулизм", value: "1394" }, - { label: "Сомнения", value: "1544" }, - { label: "Сомнофилия", value: "95" }, - { label: "Сонный паралич", value: "1203" }, - { label: "Соперничество", value: "671" }, - { label: "Сорванная свадьба", value: "2044" }, - { label: "Сострадание", value: "885" }, - { label: "Состязания", value: "910" }, - { label: "Состязания с участием животных", value: "1154" }, - { label: "Сотриголова — отец Хитоши Шинсо", value: "2877" }, - { label: "Соулмейты", value: "1696" }, - { label: "Соулмейты: Действия", value: "2575" }, - { label: "Соулмейты: Изменение восприятия", value: "1400" }, - { label: "Соулмейты: Контакт через кожу", value: "2608" }, - { label: "Соулмейты: Ментальная связь", value: "2841" }, - { label: "Соулмейты: Общая боль", value: "2583" }, - { label: "Соулмейты: Общие эмоции", value: "2637" }, - { label: "Соулмейты: Опознавательные фразы", value: "1399" }, - { label: "Соулмейты: Предметы", value: "2563" }, - { label: "Соулмейты: Предпочтения", value: "2521" }, - { label: "Соулмейты: Разноцветные глаза", value: "2461" }, - { label: "Соулмейты: Ранения", value: "2134" }, - { label: "Соулмейты: Сны", value: "2414" }, - { label: "Соулмейты: Тактильный контакт", value: "2190" }, - { label: "Соулмейты: Татуировки", value: "2711" }, - { label: "Соулмейты: Физические проявления", value: "2864" }, - { label: "Социальная фантастика", value: "591" }, - { label: "Социальные темы и мотивы", value: "1017" }, - { label: "Социальные эксперименты", value: "2756" }, - { label: "Социальный паразитизм", value: "2444" }, - { label: "Социофобия", value: "826" }, - { label: "Спарринги", value: "1575" }, - { label: "Спасатели", value: "392" }, - { label: "Спасение жизни", value: "1299" }, - { label: "Спасение мира", value: "812" }, - { label: "Спектрофилия", value: "2634" }, - { label: "Спецагенты", value: "401" }, - { label: "Спиритизм", value: "1478" }, - { label: "Сплошинг", value: "424" }, - { label: "Спонтанный секс", value: "2918" }, - { label: "Спорт", value: "15" }, - { label: "Спортзалы", value: "1359" }, - { label: "Сражения", value: "2868" }, - { label: "Средневековье", value: "238" }, - { label: "Ссоры / Конфликты", value: "645" }, - { label: "Стаи", value: "2884" }, - { label: "Сталкеры / Диггеры (субкультура)", value: "1029" }, - { label: "Сталкинг", value: "605" }, - { label: "Становление героя", value: "680" }, - { label: "Стёб", value: "1690" }, - { label: "Стереотипы", value: "809" }, - { label: "Стимпанк", value: "25" }, - { label: "Стимуляция руками", value: "225" }, - { label: "Стихи", value: "1692" }, - { label: "Стихийные бедствия", value: "1352" }, - { label: "Стихотворные вставки", value: "2404" }, - { label: "СтихоТворцы", value: "3015" }, - { label: "Стокгольмский синдром / Лимский синдром", value: "1217" }, - { label: "Столетняя война", value: "2243" }, - { label: "Сторонний рассказчик", value: "1383" }, - { label: "Стоунпанк", value: "1987" }, - { label: "Страдания", value: "2009" }, - { label: "Странногеддон", value: "1882" }, - { label: "Страны Балтии", value: "1031" }, - { label: "Страпоны", value: "380" }, - { label: "Страсть", value: "1955" }, - { label: "Страх перед родителями", value: "2332" }, - { label: "Стрельба из лука", value: "1791" }, - { label: "Стримеры / Ютуберы", value: "1473" }, - { label: "Стрип-клубы", value: "79" }, - { label: "Стрит-арт", value: "1012" }, - { label: "Строители", value: "1774" }, - { label: "Студенты", value: "274" }, - { label: "Студенты по обмену", value: "859" }, - { label: "Студенческие городки", value: "753" }, - { label: "Субкультуры", value: "1061" }, - { label: "Субординация", value: "1099" }, - { label: "Суд", value: "827" }, - { label: "Суккубы / Инкубы", value: "334" }, - { label: "Сумасшествие", value: "1239" }, - { label: "Сунагакуре", value: "2476" }, - { label: "Супергерои", value: "67" }, - { label: "Суперзлодеи", value: "1205" }, - { label: "Супермаркеты", value: "843" }, - { label: "Суррогатная беременность", value: "1427" }, - { label: "Сухой закон", value: "2100" }, - { label: "Сухой оргазм", value: "2818" }, - { label: "Сфера ИТ", value: "2534" }, - { label: "Сфинксы", value: "1349" }, - { label: "Сценарий (стилизация)", value: "323" }, - { label: "Счастливый финал", value: "3" }, - { label: "США", value: "640" }, - { label: "Съемочная площадка", value: "410" }, - { label: "Сын Тьмы", value: "2175" }, - { label: "Сэнгоку Джидай", value: "2380" }, - { label: "Сэнгоку Дзидай", value: "2834" }, - { label: "Сэцубун", value: "2969" }, - { label: "Сюрреализм / Фантасмагория", value: "872" }, - { label: "Т/И / Л/И", value: "167" }, - { label: "Таджикистан", value: "2974" }, - { label: "Таиланд", value: "1034" }, - { label: "Тайна происхождения", value: "662" }, - { label: "Тайная личность", value: "194" }, - { label: "Тайная сущность", value: "1512" }, - { label: "Тайны / Секреты", value: "906" }, - { label: "Тайные друзья (игра)", value: "2908" }, - { label: "Тайные организации", value: "572" }, - { label: "Тайные поклонники", value: "1374" }, - { label: "Тайный НапиСанта", value: "2972" }, - { label: "Таксисты", value: "2679" }, - { label: "Тактильный голод", value: "2197" }, - { label: "Тактильный контакт", value: "2875" }, - { label: "Танабата", value: "2340" }, - { label: "Танцы", value: "108" }, - { label: "Танцы на пилоне", value: "1370" }, - { label: "Таро", value: "642" }, - { label: "Тату-салоны", value: "324" }, - { label: "Татуировки", value: "327" }, - { label: "Твинцест", value: "1652" }, - { label: "Творческий кризис", value: "2107" }, - { label: "Театры", value: "195" }, - { label: "Телекинез", value: "951" }, - { label: "Телепатия", value: "127" }, - { label: "Телепортация", value: "1794" }, - { label: "Телесные жидкости", value: "1220" }, - { label: "Телесные наказания", value: "132" }, - { label: "Телесный хоррор", value: "212" }, - { label: "Телохранители", value: "400" }, - { label: "Темная сторона (Гарри Поттер)", value: "1937" }, - { label: "Темная сторона Силы", value: "1946" }, - { label: "Темная Эра (Bungou Stray Dogs)", value: "2494" }, - { label: "Темное прошлое", value: "2229" }, - { label: "Темное фэнтези", value: "1963" }, - { label: "Темные властелины", value: "1224" }, - { label: "Темные эльфы", value: "2597" }, - { label: "Темный романтизм", value: "2128" }, - { label: "Темы ментального здоровья", value: "2344" }, - { label: "Темы этики и морали", value: "1106" }, - { label: "Теннис", value: "1066" }, - { label: "Тентакли", value: "129" }, - { label: "Теория инверсии", value: "1980" }, - { label: "Теория Одурманивания", value: "2493" }, - { label: "Термокинез", value: "2793" }, - { label: "Террористы", value: "556" }, - { label: "Теслапанк", value: "1988" }, - { label: "Техники", value: "1272" }, - { label: "Техногенные катастрофы", value: "526" }, - { label: "Технокинез", value: "1271" }, - { label: "Технологии", value: "1232" }, - { label: "Технотриллер", value: "649" }, - { label: "Течка / Гон", value: "283" }, - { label: "Тим Дрейк — Джокер-младший", value: "2454" }, - { label: "Тим Дрейк — Кэтлэд", value: "2453" }, - { label: "Тихий секс", value: "1185" }, - { label: "Товарищи по несчастью", value: "2666" }, - { label: "Токсичные родственники", value: "2008" }, - { label: "Том Реддл — не Темный Лорд", value: "2394" }, - { label: "Томбои", value: "565" }, - { label: "Томгерлз", value: "848" }, - { label: "Торговля органами", value: "1358" }, - { label: "Торговцы", value: "2098" }, - { label: "Торговые центры", value: "1416" }, - { label: "Тоталитаризм", value: "1169" }, - { label: "Травники / Травницы", value: "1211" }, - { label: "Трагедия", value: "919" }, - { label: "Трагикомедия", value: "1454" }, - { label: "Традиции", value: "1463" }, - { label: "Трансгендерные персонажи", value: "175" }, - { label: "Трансплантация", value: "2364" }, - { label: "Трансфобия", value: "420" }, - { label: "Тревожное расстройство личности", value: "1914" }, - { label: "Тревожность", value: "1318" }, - { label: "Трейлеры", value: "785" }, - { label: "Тренировки / Обучение", value: "876" }, - { label: "Третий лишний", value: "1176" }, - { label: "Третья мировая", value: "624" }, - { label: "Три корейских государства", value: "2322" }, - { label: "Трикстеры", value: "1507" }, - { label: "Триллер", value: "169" }, - { label: "Трилогия Юникрона", value: "2378" }, - { label: "Трипофобия", value: "2342" }, - { label: "Трисам", value: "758" }, - { label: "Трихотилломания", value: "2185" }, - { label: "Тролли", value: "190" }, - { label: "Трудные отношения с родителями", value: "1490" }, - { label: "Трудный характер", value: "2123" }, - { label: "Трудоголизм", value: "1848" }, - { label: "Трущобы", value: "2822" }, - { label: "Туалетный юмор", value: "1247" }, - { label: "Туберкулез", value: "2163" }, - { label: "Турция", value: "794" }, - { label: "Тщеславие", value: "2578" }, - { label: "Тюрьмы / Темницы", value: "117" }, - { label: "Тяжелое детство", value: "2614" }, - { label: "Убийства", value: "621" }, - { label: "Убийственная пара", value: "1918" }, - { label: "Убийца поневоле", value: "2671" }, - { label: "Уважение", value: "2688" }, - { label: "Ужасы", value: "1679" }, - { label: "Узбекистан", value: "1293" }, - { label: "Уизлигады", value: "1862" }, - { label: "Украина", value: "716" }, - { label: "Укрытия", value: "199" }, - { label: "Уличные артисты", value: "2550" }, - { label: "Уличные гонки", value: "880" }, - { label: "Умбракинез", value: "2355" }, - { label: "Универсалы", value: "657" }, - { label: "Унижения", value: "1319" }, - { label: "Упоминания аддикций", value: "2848" }, - { label: "Упоминания алкоголя", value: "2415" }, - { label: "Упоминания беременности", value: "2057" }, - { label: "Упоминания войны", value: "2707" }, - { label: "Упоминания жестокости", value: "2447" }, - { label: "Упоминания зоофилии", value: "2620" }, - { label: "Упоминания измены", value: "2876" }, - { label: "Упоминания изнасилования", value: "521" }, - { label: "Упоминания инвалидности", value: "2705" }, - { label: "Упоминания инцеста", value: "2285" }, - { label: "Упоминания каннибализма", value: "2427" }, - { label: "Упоминания курения", value: "2450" }, - { label: "Упоминания мужской беременности", value: "2226" }, - { label: "Упоминания наркотиков", value: "144" }, - { label: "Упоминания насилия", value: "2207" }, - { label: "Упоминания нездоровых отношений", value: "2892" }, - { label: "Упоминания проституции", value: "2618" }, - { label: "Упоминания пыток", value: "2410" }, - { label: "Упоминания расизма", value: "2737" }, - { label: "Упоминания религии", value: "1048" }, - { label: "Упоминания самоубийства", value: "77" }, - { label: "Упоминания секса", value: "2747" }, - { label: "Упоминания селфхарма", value: "2105" }, - { label: "Упоминания смертей", value: "2081" }, - { label: "Упоминания смертей животных", value: "2211" }, - { label: "Упоминания телесного хоррора", value: "2466" }, - { label: "Упоминания терроризма", value: "774" }, - { label: "Упоминания убийств", value: "1501" }, - { label: "Управление оргазмом", value: "118" }, - { label: "Управление стихиями", value: "2091" }, - { label: "Уретральное проникновение", value: "1469" }, - { label: "Уро-кинк", value: "762" }, - { label: "Условное бессмертие", value: "2117" }, - { label: "Уся / Сянься", value: "2714" }, - { label: "Утопия", value: "350" }, - { label: "Утраченная тройка", value: "2535" }, - { label: "Утренний секс", value: "2882" }, - { label: "Уход за персонажами с инвалидностью", value: "2133" }, - { label: "Ухудшение отношений", value: "1219" }, - { label: "Учебные заведения", value: "1694" }, - { label: "Ученые", value: "402" }, - { label: "Уют", value: "2738" }, - { label: "Фавориты", value: "2135" }, - { label: "Фамильяры", value: "1045" }, - { label: "Фан-Бинго", value: "2957" }, - { label: "Фан-Фанты", value: "2953" }, - { label: "Фандомная аналитика", value: "742" }, - { label: "Фандомная Битва", value: "253" }, - { label: "Фансервис", value: "2483" }, - { label: "Фантастика", value: "1670" }, - { label: "Фастберн", value: "2016" }, - { label: "Фастфуд / Закусочные", value: "1025" }, - { label: "Феи", value: "191" }, - { label: "Фельчинг", value: "2368" }, - { label: "Фемдом", value: "54" }, - { label: "Феминистские темы и мотивы", value: "523" }, - { label: "Феминитивы", value: "390" }, - { label: "Фениксы", value: "1215" }, - { label: "Феодализм", value: "1504" }, - { label: "Фермы / Ранчо", value: "329" }, - { label: "Фестивали", value: "1006" }, - { label: "Фехтование", value: "1775" }, - { label: "Фиггинг", value: "1439" }, - { label: "Фигурное катание", value: "460" }, - { label: "Физиотерапия", value: "2222" }, - { label: "Физическая сверхсила", value: "2880" }, - { label: "Фикрайтеры / Фикридеры", value: "1284" }, - { label: "Фиксированная раскладка", value: "1344" }, - { label: "Фиктивные отношения", value: "308" }, - { label: "Фиктивный брак", value: "34" }, - { label: "Философия", value: "1675" }, - { label: "Финляндия", value: "1133" }, - { label: "Фистинг", value: "151" }, - { label: "Флафф", value: "1667" }, - { label: "Флирт", value: "349" }, - { label: "Флот", value: "846" }, - { label: "Фобии", value: "977" }, - { label: "Фольклор и предания", value: "1273" }, - { label: "Форнифилия", value: "580" }, - { label: "Фотографы", value: "348" }, - { label: "Фотокинез", value: "1805" }, - { label: "Франция", value: "691" }, - { label: "Фред Уизли жив", value: "2941" }, - { label: "Фроттаж", value: "96" }, - { label: "Фуд-плей", value: "509" }, - { label: "Фуд-фетиш", value: "2168" }, - { label: "Фурри", value: "996" }, - { label: "Фут-фетиш", value: "432" }, - { label: "Футбол", value: "458" }, - { label: "Фэйри", value: "2028" }, - { label: "Фэнтези", value: "1669" }, - { label: "Хакеры", value: "340" }, - { label: "Ханами", value: "1155" }, - { label: "Ханахаки", value: "45" }, - { label: "Ханжество", value: "882" }, - { label: "Характерная для канона жестокость", value: "896" }, - { label: "Харассмент", value: "477" }, - { label: "Хиерофилия", value: "2366" }, - { label: "Химеры", value: "816" }, - { label: "Химическое оружие", value: "1186" }, - { label: "Химэдэрэ / Оджидэрэ", value: "1363" }, - { label: "Хип-хоп (субкультура)", value: "1822" }, - { label: "Хиппи", value: "784" }, - { label: "Хиромантия", value: "2749" }, - { label: "Хирургическая коррекция пола", value: "1249" }, - { label: "Хирургические операции", value: "1845" }, - { label: "Хобби", value: "1161" }, - { label: "Хогсмид", value: "2388" }, - { label: "Хоккей", value: "828" }, - { label: "Холодная война", value: "2140" }, - { label: "Холодное оружие", value: "1187" }, - { label: "Хорватия", value: "1433" }, - { label: "Хороший плохой финал", value: "1266" }, - { label: "Хронические заболевания", value: "1267" }, - { label: "Хронокинез", value: "1447" }, - { label: "Хронофантастика", value: "56" }, - { label: "Хтонические существа", value: "504" }, - { label: "Художники", value: "140" }, - { label: "Хуманизация", value: "177" }, - { label: "Хэллоуин", value: "205" }, - { label: "Хюльдры", value: "1397" }, - { label: "Цветочные магазины", value: "164" }, - { label: "Целители", value: "1107" }, - { label: "Церкви", value: "533" }, - { label: "Цикличность", value: "1979" }, - { label: "Цирки", value: "259" }, - { label: "Цукими", value: "1798" }, - { label: "Цундэрэ", value: "1137" }, - { label: "Цыгане", value: "1091" }, - { label: "Чайлдфри", value: "592" }, - { label: "Чайные церемонии", value: "2416" }, - { label: "Частичный ООС", value: "1409" }, - { label: "Частные детективы", value: "427" }, - { label: "Черная археология", value: "2503" }, - { label: "Черная мораль", value: "2438" }, - { label: "Чернобыльская катастрофа", value: "775" }, - { label: "Черный юмор", value: "66" }, - { label: "Чехия", value: "1021" }, - { label: "Чиновники", value: "1991" }, - { label: "Чирлидинг", value: "1431" }, - { label: "Чистокровные AU (Гарри Поттер)", value: "1905" }, - { label: "Чосон", value: "571" }, - { label: "Чувство вины", value: "902" }, - { label: "Чумные доктора", value: "1125" }, - { label: "Чхусок", value: "2973" }, - { label: "Шаманы", value: "484" }, - { label: "Шантаж", value: "569" }, - { label: "Шармбатон", value: "2733" }, - { label: "Швейцария", value: "1022" }, - { label: "Шейпшифтеры", value: "29" }, - { label: "Шелки", value: "2431" }, - { label: "Шифры", value: "2232" }, - { label: "Школьная иерархия", value: "2787" }, - { label: "Школьники", value: "2566" }, - { label: "Школьные годы Тома Реддла", value: "1913" }, - { label: "Школьные ОтМетки", value: "3017" }, - { label: "Школьные поездки", value: "2481" }, - { label: "Школьный роман", value: "2440" }, - { label: "Шопинг", value: "864" }, - { label: "Шоу-бизнес", value: "17" }, - { label: "Шпионы", value: "148" }, - { label: "Шрамирование", value: "891" }, - { label: "Шрамы", value: "328" }, - { label: "Эвтаназия", value: "1102" }, - { label: "Эгоизм", value: "2071" }, - { label: "Эдвардианская эпоха", value: "2975" }, - { label: "Эзотерические темы и мотивы", value: "2801" }, - { label: "Эйблизм", value: "453" }, - { label: "Эйдетическая память", value: "975" }, - { label: "Эйфория", value: "2458" }, - { label: "Экзамены", value: "2591" }, - { label: "Экзистенциальный кризис", value: "1200" }, - { label: "Экзорцизм", value: "494" }, - { label: "Экологи / Биологи", value: "631" }, - { label: "Экологический кризис", value: "485" }, - { label: "Экономический кризис", value: "1547" }, - { label: "Эксаудиризм", value: "2151" }, - { label: "Эксгибиционизм", value: "489" }, - { label: "Эксперимент", value: "1686" }, - { label: "Экстрасенсы", value: "371" }, - { label: "Экшн", value: "1673" }, - { label: "Электрокинез", value: "1857" }, - { label: "Электростимуляция", value: "807" }, - { label: "Элементы ангста", value: "2696" }, - { label: "Элементы гета", value: "1714" }, - { label: "Элементы дарка", value: "2703" }, - { label: "Элементы детектива", value: "2698" }, - { label: "Элементы драмы", value: "2697" }, - { label: "Элементы других видов отношений", value: "454" }, - { label: "Элементы мистики", value: "1324" }, - { label: "Элементы психологии", value: "2824" }, - { label: "Элементы романтики", value: "2742" }, - { label: "Элементы слэша", value: "1715" }, - { label: "Элементы ужасов", value: "2721" }, - { label: "Элементы фемслэша", value: "1716" }, - { label: "Элементы флаффа", value: "2731" }, - { label: "Элементы юмора / Элементы стёба", value: "2011" }, - { label: "Эльфы", value: "44" }, - { label: "Эметофилия", value: "1434" }, - { label: "Эмо", value: "641" }, - { label: "Эмоциональная одержимость", value: "1270" }, - { label: "Эмпатия", value: "1177" }, - { label: "Энергетический вампиризм", value: "818" }, - { label: "Эпидемии", value: "619" }, - { label: "Эпизод 23.5", value: "2469" }, - { label: "Эпилепсия", value: "1511" }, - { label: "Эпилог? Какой эпилог?", value: "2651" }, - { label: "Эпоха Бакумацу", value: "1472" }, - { label: "Эпоха Мэйдзи", value: "1435" }, - { label: "Эпоха Тайсё", value: "2015" }, - { label: "Эрик Киллмонгер жив", value: "2897" }, - { label: "Эрогуро", value: "1731" }, - { label: "Эротическая дрессировка", value: "2026" }, - { label: "Эротическая лактация", value: "284" }, - { label: "Эротическая мумификация", value: "415" }, - { label: "Эротическая сверхстимуляция", value: "1245" }, - { label: "Эротические наказания", value: "125" }, - { label: "Эротические ролевые игры", value: "111" }, - { label: "Эротические сны", value: "128" }, - { label: "Эротические фантазии", value: "561" }, - { label: "Эротический массаж", value: "1518" }, - { label: "Эротический перенос", value: "744" }, - { label: "Эротомания", value: "2922" }, - { label: "Эскапизм", value: "1552" }, - { label: "Эскорты", value: "922" }, - { label: "Эстетика", value: "2021" }, - { label: "ЭТЕРНА", value: "2948" }, - { label: "Этнические анклавы", value: "2732" }, - { label: "Этническое фэнтези", value: "667" }, - { label: "Эффект бабочки", value: "1572" }, - { label: "Ювелиры", value: "2964" }, - { label: "Южная Америка", value: "832" }, - { label: "Южная готика", value: "1077" }, - { label: "Южная Корея", value: "674" }, - { label: "Юмор", value: "1666" }, - { label: "Юристы", value: "333" }, - { label: "Я никогда не... (игра)", value: "1436" }, - { label: "Явное согласие", value: "1569" }, - { label: "Ядерная война", value: "889" }, - { label: "Язык жестов", value: "2962" }, - { label: "Язык животных", value: "1327" }, - { label: "Язык растений", value: "2622" }, - { label: "Язык цветов", value: "272" }, - { label: "Ямадад", value: "2916" }, - { label: "Янгирэ", value: "1257" }, - { label: "Яндэрэ", value: "1136" }, - { label: "Яогуаи", value: "2347" }, - { label: "Япония", value: "665" }, - { label: "Японские фестивали", value: "2555" }, - { label: "Ящеролюди", value: "682" }, - { label: "Abuse/Comfort", value: "2599" }, - { label: "Aged down", value: "229" }, - { label: "Aged up", value: "4" }, - { label: "Artfic", value: "68" }, - { label: "AU", value: "1683" }, - { label: "AU: Альтернативные способности", value: "2086" }, - { label: "AU: Без апокалипсиса", value: "2051" }, - { label: "AU: Без войны", value: "2305" }, - { label: "AU: Без магии", value: "1052" }, - { label: "AU: Без мистики", value: "2489" }, - { label: "AU: Без сверхспособностей", value: "1053" }, - { label: "AU: Без супергероев", value: "1152" }, - { label: "AU: Все гражданские", value: "2797" }, - { label: "AU: Все друзья", value: "2552" }, - { label: "AU: Все люди", value: "1151" }, - { label: "AU: Все хорошо", value: "2124" }, - { label: "AU: Другая страна", value: "2165" }, - { label: "AU: Другая эпоха", value: "2452" }, - { label: "AU: Другое детство", value: "2360" }, - { label: "AU: Другое знакомство", value: "2217" }, - { label: "AU: Другое семейное положение", value: "2902" }, - { label: "AU: Не родственники", value: "2167" }, - { label: "AU: Профессиональные герои (BNHA)", value: "2924" }, - { label: "AU: Родственники", value: "2164" }, - { label: "AU: Школа", value: "2532" }, - { label: "AU: Age swap", value: "917" }, - { label: "AU: Kitty Gang", value: "2928" }, - { label: "AU: Race swap", value: "933" }, - { label: "AU: Reverse", value: "1156" }, - { label: "AU: Role swap", value: "1054" }, - { label: "Authors Time", value: "2959" }, - { label: "BDSM", value: "1646" }, - { label: "BDSM-вселенная", value: "1078" }, - { label: "BDSM: Домспейс", value: "1444" }, - { label: "BDSM: Дроп", value: "1411" }, - { label: "BDSM: Сабспейс", value: "1410" }, - { label: "BDSM: Aftercare", value: "1523" }, - { label: "BEAST (Bungou Stray Dogs)", value: "2457" }, - { label: "Blackwatch", value: "2116" }, - { label: "Body inflation", value: "389" }, - { label: "Character study", value: "363" }, - { label: "Cockwarming", value: "318" }, - { label: "Dark academia", value: "2430" }, - { label: "DDLG / DDLB / MDLG / MDLB", value: "1033" }, - { label: "Dirty talk", value: "139" }, - { label: "Doggy style", value: "1361" }, - { label: "Dollification", value: "2780" }, - { label: "Dramione Authors Tournament", value: "2950" }, - { label: "EIQ", value: "271" }, - { label: "ER", value: "1687" }, - { label: "Final Haikyuu Quest", value: "2652" }, - { label: "Fix-it", value: "1" }, - { label: "Frenemies", value: "666" }, - { label: "Gangbang", value: "315" }, - { label: "Glory hole", value: "2188" }, - { label: "Golden Age Overwatch", value: "2112" }, - { label: "GOLockdown", value: "2391" }, - { label: "Gun play", value: "252" }, - { label: "Hurt/Comfort", value: "1682" }, - { label: "Hydra!AU", value: "1931" }, - { label: "Ironqrow week", value: "2209" }, - { label: "Kimetsu Gakuen", value: "2574" }, - { label: "Knife play", value: "152" }, - { label: "KPOP-AUFEST", value: "1851" }, - { label: "LARP", value: "1510" }, - { label: "LOVE ОтМетки", value: "2981" }, - { label: "Maleval week", value: "2382" }, - { label: "Marvel ГФИ", value: "2896" }, - { label: "Mate or die", value: "375" }, - { label: "Mirror!verse (Звездный путь)", value: "2899" }, - { label: "Moresome", value: "759" }, - { label: "N раз", value: "263" }, - { label: "Omnic Crisis Era", value: "2111" }, - { label: "ORIGINAL'S 2021", value: "2939" }, - { label: "Parentlock", value: "2053" }, - { label: "Patronus of Dramione", value: "2958" }, - { label: "Post-Fall of Overwatch", value: "2114" }, - { label: "Post-Recall", value: "2115" }, - { label: "PWP", value: "1680" }, - { label: "Rape/Revenge", value: "2195" }, - { label: "Reverse Falls", value: "1879" }, - { label: "RofR ДраМиВояж", value: "2954" }, - { label: "RST", value: "815" }, - { label: "RTFM", value: "2327" }, - { label: "Service top / Power bottom", value: "563" }, - { label: "Shingeki no Kyojin High School AU", value: "2037" }, - { label: "Shingeki! Kyojin Chuugakkou", value: "2038" }, - { label: "Sickfic", value: "422" }, - { label: "Songfic", value: "1684" }, - { label: "Spider-son & Iron-dad", value: "1885" }, - { label: "Sugar daddy", value: "106" }, - { label: "Sugar mommy", value: "160" }, - { label: "Superfamily (Мстители)", value: "2623" }, - { label: "Superior Iron Man", value: "2676" }, - { label: "Talon (Overwatch)", value: "2110" }, - { label: "The Big Four / The Super Six", value: "1954" }, - { label: "Trench AU", value: "2387" }, - { label: "TYL", value: "1933" }, - { label: "Underage", value: "1658" }, - { label: "URT", value: "2761" }, - { label: "UST", value: "1709" }, - { label: "Versefic", value: "2729" }, - { label: "Videofic", value: "2480" }, - { label: "Womance", value: "265" }, - { label: "X век", value: "240" }, - { label: "XI век", value: "241" }, - { label: "XII век", value: "242" }, - { label: "XIII век", value: "243" }, - { label: "XIV век", value: "244" }, - { label: "XIX век", value: "249" }, - { label: "XV век", value: "245" }, - { label: "XVI век", value: "246" }, - { label: "XVII век", value: "247" }, - { label: "XVIII век", value: "248" }, - { label: "XX век", value: "1004" }, - ], - type: FilterTypes.Picker, - }, - } satisfies Filters; -} - -export default new ficbook(); - -interface Data { - data?: DataEntity[] | null; - more: boolean; -} -interface DataEntity { - id: string; - slug: string; - author_id: number; - user_slug: string; - author_username: string; - real_author_id: string | null; - direction: number; - part_cnt: number; - title: string; - description: string; - enable_marks: boolean; - marks_plus: number; - is_premium: boolean; - status: number; - last_updated: string; - readedDate?: string | null; - reward_cnt: number; - cover?: string | null; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import { defaultCover } from "@libs/defaultCover"; + +class ficbook implements Plugin.PluginBase { + id = "ficbook"; + name = "ficbook"; + site = "https://ficbook.net"; + version = "1.0.0"; + icon = "src/ru/ficbook/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site; + + if (filters?.directions?.value) { + url += "/popular-fanfics/" + filters.directions.value; + } else if (filters?.tags?.value) { + url += "/tags/" + filters.tags.value + "?p=" + pageNo; + } else { + url += "/" + (filters?.sort?.value || "fanfiction") + "?p=" + pageNo; + } + + const result = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + const novels: Plugin.NovelItem[] = []; + + loadedCheerio("article.fanfic-inline").each((index, element) => { + const name = loadedCheerio(element).find("h3 > a").text().trim(); + let cover = loadedCheerio(element).find("picture > img").attr("src"); + const url = loadedCheerio(element).find("h3 > a").attr("href"); + + cover = cover + ? cover.replace(/covers\/m_|covers\/d_/g, "covers/") + : defaultCover; + if (!name || !url) return; + + novels.push({ name, cover, url: this.site + url.replace(/\?.*/g, "") }); + }); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const result = await fetchApi(novelUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + + const novel: Plugin.SourceNovel = { + url: novelUrl, + }; + + novel.name = ( + loadedCheerio('h1[itemprop="headline"]').text() || + loadedCheerio('h1[itemprop="name"]').text() + ).trim(); + + novel.cover = loadedCheerio('meta[property="og:image"]').attr("content"); + novel.summary = loadedCheerio('div[itemprop="description"]').text().trim(); + novel.author = loadedCheerio('a[itemprop="author"]').text(); + + novel.status = + loadedCheerio( + "div.fanfic-main-info > section:nth-child(3) > div:nth-child(3) > span:nth-child(2)", + ).text() === "В процессе" + ? NovelStatus.Ongoing + : NovelStatus.Completed; + + const tags = loadedCheerio('div[class="tags"] > a') + .map((index, element) => loadedCheerio(element).text()) + .get(); + + if (tags.length) { + novel.genres = tags.join(","); + } + + if (!novel.cover || novel.cover?.includes("/design/")) { + novel.cover = defaultCover; + } else { + novel.cover = novel.cover.replace(/covers\/m_|covers\/d_/g, "covers/"); + } + + const chapters: Plugin.ChapterItem[] = []; + + if (loadedCheerio("#content").length == 1) { + const name = loadedCheerio(".title-area > h2").text(); + const releaseTime = loadedCheerio(".part-date > span").attr("title"); + + if (name) chapters.push({ name, url: novelUrl, releaseTime }); + } else { + loadedCheerio("li.part").each((chapterIndex, element) => { + const name = loadedCheerio(element).find("h3").text(); + const url = loadedCheerio(element).find("a:nth-child(1)").attr("href"); + if (!name || !url) return; + + const releaseTime = loadedCheerio(element).find("div > span").attr("title"); + chapters.push({ + name, url: this.site + url, releaseTime, chapterNumber: chapterIndex + 1, + }); + }); + + } + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(chapterUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + let chapterText = ""; + + loadedCheerio("#content") + .html() + ?.split("\n") + ?.forEach((line) => { + if (line.trim()) { + //blank line skip + if (line.includes("

")) { + //new paragraph + chapterText += line; + } else { + //plaintext + chapterText += "

" + line + "

"; + } + } + }); + + return chapterText; + } + + async searchNovels( + searchTerm: string, + pageNo: number | undefined = 1, + ): Promise { + const formData = new FormData(); + formData.append("term", searchTerm); + formData.append("page", pageNo.toString()); + + const result = await fetchApi(this.site + "/search/fanfic", { + method: "POST", + body: formData, + }); + const json = (await result.json()) as { data: Data }; + const novels: Plugin.NovelItem[] = []; + + json.data?.data?.forEach((novel) => { + const name = novel.title.trim(); + const url = this.site + "/readfic/" + novel.slug; + const cover = novel.cover + ? "https://images.ficbook.net/fanfic-covers/" + novel.cover + : defaultCover; + + novels.push({ name, cover, url }); + }); + + return novels; + } + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка:", + value: "fanfiction", + options: [ + { label: "Горячие работы", value: "fanfiction" }, + { label: "Популярные ", value: "popular-fanfics" }, + ], + type: FilterTypes.Picker, + }, + directions: { + label: "Направление:", + value: "", + options: [ + { label: "Все", value: "" }, + { label: "Джен", value: "gen" }, + { label: "Гет", value: "het" }, + { label: "Слэш", value: "slash-fics-3712917" }, + { label: "Фемслэш", value: "femslash-fanfics-9374932" }, + { label: "Статьи", value: "article" }, + { label: "Смешанный", value: "mixed" }, + { label: "Другой", value: "other" }, + ], + type: FilterTypes.Picker, + }, + tags: { + label: "Тэги:", + value: "", + options: [ + { label: "Все", value: "" }, + { label: "#1fic1week", value: "884" }, + { label: "#7daystowrite", value: "2961" }, + { label: "#Бинго_ТФ", value: "1458" }, + { label: "#миниатюры3days", value: "2118" }, + { label: "#Не_Тайный_Санта", value: "2760" }, + { label: "#Писательские фанты-блиц", value: "2613" }, + { label: "#cosmowrite", value: "2284" }, + { label: "#femKHRweek", value: "2658" }, + { label: "#FourShips", value: "2588" }, + { label: "#Goretober", value: "1861" }, + { label: "#InternationalVampireDay / #WorldDraculaDay", value: "2048" }, + { label: "#KattWeek", value: "2717" }, + { label: "#Kinktober", value: "1867" }, + { label: "#LotorWeek", value: "2657" }, + { label: "#MerMay", value: "1122" }, + { label: "#NaNoWriMo", value: "1852" }, + { label: "#nsfweruriweek", value: "2944" }, + { label: "#RCMiaChallenge", value: "2700" }, + { label: "#SheithMonth", value: "2432" }, + { label: "#SixDrabbles", value: "2293" }, + { label: "#Writober", value: "1831" }, + { label: "1900-е годы", value: "369" }, + { label: "1910-е годы", value: "213" }, + { label: "1920-е годы", value: "81" }, + { label: "1930-е годы", value: "82" }, + { label: "1940-е годы", value: "83" }, + { label: "1950-е годы", value: "84" }, + { label: "1960-е годы", value: "85" }, + { label: "1970-е годы", value: "86" }, + { label: "1980-е годы", value: "87" }, + { label: "1990-е годы", value: "88" }, + { label: "2000-е годы", value: "590" }, + { label: "2010-е годы", value: "2562" }, + { label: "2014 год", value: "2977" }, + { label: "2P", value: "1910" }, + { label: "9 мая", value: "1019" }, + { label: "Аборт / Выкидыш", value: "306" }, + { label: "Аватары", value: "2401" }, + { label: "Авиатранспорт", value: "962" }, + { label: "Авиация", value: "455" }, + { label: "Аврорат", value: "1906" }, + { label: "Австралия", value: "767" }, + { label: "Австрия", value: "1024" }, + { label: "Автомастерские", value: "788" }, + { label: "Авторская пунктуация", value: "2886" }, + { label: "Авторские неологизмы", value: "1123" }, + { label: "Автоспорт", value: "856" }, + { label: "Автостоп", value: "1429" }, + { label: "Аддикции", value: "1230" }, + { label: "Адреналиновая зависимость", value: "1480" }, + { label: "Азартные игры", value: "1009" }, + { label: "Азкабан", value: "1922" }, + { label: "Аквакинез", value: "1380" }, + { label: "Аквапарки", value: "789" }, + { label: "Акростих", value: "911" }, + { label: "Актеры", value: "408" }, + { label: "Акустикофилия", value: "903" }, + { label: "Алекситимия", value: "2020" }, + { label: "Алкоголь", value: "201" }, + { label: "Алкогольные игры", value: "1534" }, + { label: "Аллергии", value: "746" }, + { label: "Алхимия", value: "1174" }, + { label: "Альбинизм", value: "1213" }, + { label: "Альпинизм", value: "1448" }, + { label: "Альтернативная мировая история", value: "442" }, + { label: "Альтернативное размножение", value: "2751" }, + { label: "Альтернативные судьбы", value: "2839" }, + { label: "Амазонки", value: "1424" }, + { label: "Амегакуре", value: "2571" }, + { label: "Американский футбол", value: "808" }, + { label: "Ампутация", value: "704" }, + { label: "Амфибии", value: "2792" }, + { label: "Анальгезия", value: "1254" }, + { label: "Анальный оргазм", value: "999" }, + { label: "Анальный секс", value: "215" }, + { label: "Анархия", value: "1175" }, + { label: "Анахронизмы", value: "780" }, + { label: "Ангелы", value: "91" }, + { label: "Ангелы-хранители", value: "1044" }, + { label: "Ангст", value: "1665" }, + { label: "Андрогинная внешность", value: "2602" }, + { label: "Андроиды", value: "155" }, + { label: "Анимагия", value: "2519" }, + { label: "Анимализм", value: "1443" }, + { label: "Аномальные зоны", value: "822" }, + { label: "Анонимный секс", value: "112" }, + { label: "Анрождение", value: "1246" }, + { label: "Антарктида", value: "2205" }, + { label: "Анти-Сью (Анти-Стью)", value: "1150" }, + { label: "Антигерои", value: "418" }, + { label: "Антизлодеи", value: "1833" }, + { label: "Антикварные магазины", value: "1496" }, + { label: "Антисоциальное расстройство личности", value: "734" }, + { label: "Антиутопия", value: "1700" }, + { label: "Античность", value: "237" }, + { label: "Апатия", value: "1850" }, + { label: "Аптеки", value: "1240" }, + { label: "Аргентина", value: "1146" }, + { label: "Арены", value: "940" }, + { label: "Аристократия", value: "16" }, + { label: "Арктика", value: "2426" }, + { label: "Армия", value: "22" }, + { label: "Аромантичные персонажи", value: "339" }, + { label: "Артефакты", value: "924" }, + { label: "Археологи", value: "405" }, + { label: "Архивы", value: "2594" }, + { label: "Архитекторы", value: "1011" }, + { label: "Асексофобия", value: "1120" }, + { label: "Асексуальные персонажи", value: "168" }, + { label: "Аскетизм", value: "606" }, + { label: "Асоциальность", value: "2019" }, + { label: "Ассистенты", value: "2641" }, + { label: "Астма", value: "1121" }, + { label: "Астральное проецирование", value: "2530" }, + { label: "Астральные миры", value: "1379" }, + { label: "Астрология", value: "476" }, + { label: "Астронавты", value: "2220" }, + { label: "Астрономия", value: "1372" }, + { label: "Асфиксия", value: "104" }, + { label: "Атеисты", value: "669" }, + { label: "Атлантида", value: "1144" }, + { label: "Атмокинез", value: "1964" }, + { label: "Атмосферная зарисовка", value: "2802" }, + { label: "Атомные электростанции", value: "2192" }, + { label: "Аудиокинез", value: "2849" }, + { label: "Аукционы", value: "607" }, + { label: "Аутоассасинофилия", value: "2025" }, + { label: "Аутоканнибализм", value: "2593" }, + { label: "Аутофелляция / Аутокуннилингус", value: "610" }, + { label: "Африка", value: "791" }, + { label: "Афродизиаки", value: "103" }, + { label: "Аффект", value: "938" }, + { label: "Аэрокинез", value: "2850" }, + { label: "Байкеры", value: "522" }, + { label: "Байронические герои", value: "2900" }, + { label: "Балет", value: "404" }, + { label: "Баллада", value: "2318" }, + { label: "Банки / Биржи", value: "937" }, + { label: "Банши", value: "250" }, + { label: "Барти Крауч-младший — не Пожиратель Смерти", value: "2795" }, + { label: "Бары", value: "142" }, + { label: "Баскетбол", value: "829" }, + { label: "Баски", value: "1763" }, + { label: "Бастарды", value: "603" }, + { label: "Батохаки", value: "2830" }, + { label: "Бедность", value: "979" }, + { label: "Без Волдеморта", value: "2160" }, + { label: "Без диалогов (стилизация)", value: "2885" }, + { label: "Без золотого трио", value: "2648" }, + { label: "Без Избранного (Гарри Поттер)", value: "2762" }, + { label: "Без канонических персонажей", value: "2694" }, + { label: "Без Таноса", value: "2381" }, + { label: "БезГражданки", value: "2418" }, + { label: "Бездомные", value: "916" }, + { label: "Безответственность", value: "2152" }, + { label: "Безумные ученые", value: "2559" }, + { label: "Безэмоциональность", value: "1488" }, + { label: "Бейсбол", value: "1489" }, + { label: "Беларусь", value: "1030" }, + { label: "Белый день", value: "683" }, + { label: "Белый стих", value: "1998" }, + { label: "Бельгия", value: "1039" }, + { label: "Беременность", value: "1712" }, + { label: "Бермудский треугольник", value: "1158" }, + { label: "Берсерки", value: "566" }, + { label: "Бесконтактный секс", value: "2214" }, + { label: "Бесплодие", value: "719" }, + { label: "Беспокойство", value: "2888" }, + { label: "Беспризорники", value: "604" }, + { label: "Беспричудный Изуку", value: "2422" }, + { label: "Бессмертие", value: "219" }, + { label: "Бессмертный конкурс 2023", value: "3016" }, + { label: "Бестелесность", value: "2607" }, + { label: "Би-персонажи", value: "300" }, + { label: "Библейские темы и мотивы", value: "1468" }, + { label: "Библиотекари", value: "2631" }, + { label: "Библиотеки", value: "310" }, + { label: "Бизнесмены / Бизнесвумен", value: "573" }, + { label: "Биологическое оружие", value: "1188" }, + { label: "Биопанк", value: "281" }, + { label: "Биороботы", value: "2256" }, + { label: "Биполярное расстройство", value: "690" }, + { label: "Битва за Хогвартс", value: "2774" }, + { label: "Битва Историй", value: "2960" }, + { label: "Благородные разбойники", value: "952" }, + { label: "Благотворительность", value: "613" }, + { label: "Бладплей", value: "109" }, + { label: "Ближний Восток", value: "1041" }, + { label: "Близкие враги", value: "721" }, + { label: "Близнецы", value: "295" }, + { label: "Блиц-свидания", value: "2511" }, + { label: "Блогеры", value: "1471" }, + { label: "Блокадный Ленинград", value: "1111" }, + { label: "Блэкигуд", value: "2905" }, + { label: "Богачи", value: "1549" }, + { label: "Боги / Божественные сущности", value: "149" }, + { label: "Боди-арт", value: "2260" }, + { label: "Бодипозитив", value: "1153" }, + { label: "Боевая пара", value: "1919" }, + { label: "Боевые искусства", value: "918" }, + { label: "Бои без правил", value: "1390" }, + { label: "Бокс", value: "765" }, + { label: "Болгария", value: "1786" }, + { label: "Болезнь Альцгеймера", value: "2533" }, + { label: "Боль", value: "1803" }, + { label: "Больницы", value: "20" }, + { label: "Большая Игра профессора Дамблдора", value: "2890" }, + { label: "Бордели", value: "120" }, + { label: "Борьба за власть", value: "2300" }, + { label: "Борьба за отношения", value: "1251" }, + { label: "Борьба за справедливость", value: "2335" }, + { label: "Боязнь боли", value: "2441" }, + { label: "Боязнь воды", value: "1084" }, + { label: "Боязнь врачей", value: "2063" }, + { label: "Боязнь высоты", value: "1085" }, + { label: "Боязнь грозы", value: "1124" }, + { label: "Боязнь громких звуков", value: "1090" }, + { label: "Боязнь грязи", value: "1277" }, + { label: "Боязнь замкнутых пространств", value: "821" }, + { label: "Боязнь зеркал", value: "2739" }, + { label: "Боязнь клоунов", value: "2970" }, + { label: "Боязнь крови", value: "1312" }, + { label: "Боязнь людей", value: "1082" }, + { label: "Боязнь мужчин", value: "1264" }, + { label: "Боязнь насекомых / Боязнь пауков", value: "1119" }, + { label: "Боязнь неудачи", value: "2713" }, + { label: "Боязнь огня", value: "1258" }, + { label: "Боязнь одиночества", value: "1491" }, + { label: "Боязнь открытых пространств", value: "965" }, + { label: "Боязнь привязанности", value: "1343" }, + { label: "Боязнь призраков", value: "2770" }, + { label: "Боязнь прикосновений", value: "823" }, + { label: "Боязнь сексуальных домогательств", value: "2319" }, + { label: "Боязнь смерти", value: "1515" }, + { label: "Боязнь сна", value: "2262" }, + { label: "Боязнь темноты", value: "1494" }, + { label: "Боязнь тишины", value: "2233" }, + { label: "Бразилия", value: "833" }, + { label: "Брак по договоренности", value: "35" }, + { label: "Брак по расчету", value: "303" }, + { label: "БРД", value: "2907" }, + { label: "Бродячие артисты", value: "2661" }, + { label: "Бродячие певцы", value: "1497" }, + { label: "Броманс", value: "171" }, + { label: "Будущее", value: "227" }, + { label: "Буллёзный эпидермолиз", value: "2725" }, + { label: "Буллинг", value: "436" }, + { label: "Бухгалтеры", value: "2509" }, + { label: "Буч и фэм", value: "486" }, + { label: "Бывшие", value: "311" }, + { label: "Бывшие враги", value: "2812" }, + { label: "Бывшие серийные убийцы", value: "2498" }, + { label: "Бытовое фэнтези", value: "2702" }, + { label: "В одном теле", value: "1425" }, + { label: "В поисках отношений", value: "1576" }, + { label: "В. А. О. Н.", value: "2377" }, + { label: "Вагинальный секс", value: "395" }, + { label: "Ваканда", value: "2668" }, + { label: "Валькирии", value: "557" }, + { label: "Вампиры", value: "27" }, + { label: "Василиски", value: "863" }, + { label: "Вдовство", value: "2030" }, + { label: "Вебкам-модели", value: "2299" }, + { label: "Вегетарианцы / Веганы", value: "577" }, + { label: "Ведьмы / Колдуны", value: "33" }, + { label: "Великая депрессия", value: "2224" }, + { label: "Великая французская революция", value: "2000" }, + { label: "Великобритания", value: "673" }, + { label: "Великое Княжество Литовское", value: "2587" }, + { label: "Великолепный мерзавец", value: "1244" }, + { label: "Велоспорт", value: "2978" }, + { label: "Венгрия", value: "1432" }, + { label: "Вендиго", value: "251" }, + { label: "Верность", value: "459" }, + { label: "Вертикальный инцест", value: "337" }, + { label: "Вестерн", value: "2329" }, + { label: "Ветераны", value: "555" }, + { label: "Ветеринары", value: "629" }, + { label: "Вечеринки", value: "854" }, + { label: "Вечная молодость", value: "2405" }, + { label: "Вещие сны", value: "1993" }, + { label: "Взаимопонимание", value: "2887" }, + { label: "Взросление", value: "909" }, + { label: "Вигиланты", value: "1514" }, + { label: "Видеоигры", value: "2508" }, + { label: "Визажисты / Гримеры", value: "1801" }, + { label: "Викинги", value: "676" }, + { label: "Виктимблейминг", value: "331" }, + { label: "Викторианская эпоха", value: "469" }, + { label: "Виртуальная реальность", value: "803" }, + { label: "Виртуальный секс", value: "268" }, + { label: "Витилиго", value: "1167" }, + { label: "Вице-королевство Новая Испания", value: "2603" }, + { label: "ВИЧ / СПИД", value: "542" }, + { label: "Влюбленность", value: "1303" }, + { label: "Вне закона", value: "1089" }, + { label: "Внутренний сексизм", value: "2155" }, + { label: "Внутренняя гомофобия", value: "2154" }, + { label: "Внутренняя трансфобия", value: "2716" }, + { label: "Водители / Шоферы", value: "879" }, + { label: "Военные", value: "313" }, + { label: "Военные городки", value: "2095" }, + { label: "Военные преступления", value: "2356" }, + { label: "Возвращение", value: "1522" }, + { label: "Возвращение Артура", value: "2570" }, + { label: "Воздержание", value: "921" }, + { label: "Воздушная атлетика", value: "2811" }, + { label: "Война", value: "232" }, + { label: "Война в Афганистане", value: "1050" }, + { label: "Война во Вьетнаме", value: "1332" }, + { label: "Война за независимость США", value: "2065" }, + { label: "Война миров", value: "1222" }, + { label: "Волдигуд", value: "1874" }, + { label: "Волейбол", value: "1095" }, + { label: "Волк в овечьей шкуре", value: "2228" }, + { label: "Волонтеры", value: "900" }, + { label: "Волшебники / Волшебницы", value: "93" }, + { label: "Воображаемые друзья", value: "738" }, + { label: "Ворарефилия", value: "157" }, + { label: "Воры", value: "320" }, + { label: "Воскрешение", value: "256" }, + { label: "Воспоминания", value: "1118" }, + { label: "Воссоединение", value: "498" }, + { label: "Восстание машин", value: "817" }, + { label: "Восточное побережье", value: "770" }, + { label: "Восьмое марта", value: "493" }, + { label: "Вражда", value: "681" }, + { label: "Вражда семей", value: "2867" }, + { label: "Врачи", value: "374" }, + { label: "Времена Мародеров", value: "1872" }, + { label: "Времена Основателей", value: "1891" }, + { label: "Временная смерть персонажа", value: "439" }, + { label: "Временное бессмертие", value: "2755" }, + { label: "Временное воскрешение персонажей", value: "2649" }, + { label: "Временные петли", value: "147" }, + { label: "Временные превращения", value: "927" }, + { label: "Врожденные заболевания", value: "1781" }, + { label: "Всадники Апокалипсиса", value: "1326" }, + { label: "Все живы / Никто не умер", value: "535" }, + { label: "Все за Одного — отец Изуку", value: "2421" }, + { label: "Всезнающий рассказчик", value: "1368" }, + { label: "Вселение в тело", value: "1181" }, + { label: "Вторая мировая", value: "488" }, + { label: "Вторжение пришельцев", value: "755" }, + { label: "Вторичный стыд", value: "1393" }, + { label: "Второй шанс", value: "1799" }, + { label: "Второстепенные оригинальные персонажи", value: "1536" }, + { label: "Вуайеризм", value: "174" }, + { label: "Вуду", value: "678" }, + { label: "Выбор", value: "2808" }, + { label: "Выгорание", value: "2914" }, + { label: "Выживание", value: "216" }, + { label: "Вымирающий вид", value: "2373" }, + { label: "Вымышленная анатомия", value: "1317" }, + { label: "Вымышленная география", value: "1294" }, + { label: "Вымышленная религия", value: "2062" }, + { label: "Вымышленная физика", value: "2132" }, + { label: "Вымышленные виды спорта", value: "1777" }, + { label: "Вымышленные заболевания", value: "1295" }, + { label: "Вымышленные науки", value: "1333" }, + { label: "Вымышленные праздники", value: "1769" }, + { label: "Вымышленные профессии", value: "1391" }, + { label: "Вымышленные существа", value: "1685" }, + { label: "Вымышленные языки", value: "536" }, + { label: "Выпускные", value: "717" }, + { label: "Высшее общество", value: "1093" }, + { label: "Высшие учебные заведения", value: "97" }, + { label: "Выученная беспомощность", value: "2772" }, + { label: "Выхаживание", value: "511" }, + { label: "Выход из нездоровых отношений", value: "2891" }, + { label: "Гадалки / Ясновидящие", value: "2662" }, + { label: "Гадкий утенок", value: "1225" }, + { label: "Газлайтинг", value: "1418" }, + { label: "Галлюцинации / Иллюзии", value: "365" }, + { label: "Гаремник", value: "50" }, + { label: "Гаремы", value: "115" }, + { label: "Гарпии", value: "1482" }, + { label: "Гарри Поттер и Драко Малфой — друзья", value: "1923" }, + { label: "Гастроли", value: "2487" }, + { label: "Гедонизм", value: "736" }, + { label: "Гей-клубы", value: "2482" }, + { label: "Геймеры", value: "356" }, + { label: "Геймлит", value: "23" }, + { label: "Гейши / Кисэн", value: "332" }, + { label: "Гемофилия", value: "1341" }, + { label: "Гендерная дисфория", value: "431" }, + { label: "Гендерная интрига", value: "55" }, + { label: "Гендерное неравенство", value: "2568" }, + { label: "Гендерный нонконформизм", value: "1417" }, + { label: "Гендерсвап", value: "1691" }, + { label: "Генетика / Эволюция", value: "2131" }, + { label: "Гении", value: "445" }, + { label: "Генитальные пытки", value: "2104" }, + { label: "Геноцид", value: "720" }, + { label: "Геокинез", value: "2889" }, + { label: "Геологи / Географы", value: "934" }, + { label: "Германия", value: "688" }, + { label: "Германия — не Священная Римская Империя", value: "2470" }, + { label: "Герой поневоле", value: "2145" }, + { label: "Геронтофилия", value: "162" }, + { label: "Гетерохромия", value: "1210" }, + { label: "Гетто", value: "1783" }, + { label: "Гибристофилия", value: "1843" }, + { label: "Гиганты", value: "735" }, + { label: "Гидра трэш-пати", value: "2804" }, + { label: "Гики", value: "482" }, + { label: "Гильдии", value: "957" }, + { label: "Гимнастика", value: "1974" }, + { label: "Гиперакузия", value: "2866" }, + { label: "Гиперсексуальность", value: "945" }, + { label: "Гипноз", value: "700" }, + { label: "Гладиаторы", value: "677" }, + { label: "Глобальные катастрофы", value: "525" }, + { label: "Глухота", value: "595" }, + { label: "Гнев", value: "2806" }, + { label: "Гнездование", value: "1452" }, + { label: "Гномы", value: "138" }, + { label: "Гоблины", value: "188" }, + { label: "Големы", value: "1208" }, + { label: "Голод", value: "868" }, + { label: "Голодные Фэндомные Игры", value: "2895" }, + { label: "Гомофобия", value: "428" }, + { label: "Гомункулы", value: "1366" }, + { label: "Горе / Утрата", value: "1113" }, + { label: "Горизонтальный инцест", value: "338" }, + { label: "Городские легенды", value: "1832" }, + { label: "Горы", value: "702" }, + { label: "Горячие источники", value: "2813" }, + { label: "Гостевой брак", value: "1354" }, + { label: "Гостиницы", value: "384" }, + { label: "Готический роман", value: "963" }, + { label: "Готы", value: "575" }, + { label: "Гравиокинез", value: "1985" }, + { label: "Гражданская война", value: "370" }, + { label: "Гражданская война в России", value: "1282" }, + { label: "Гражданская война в США", value: "1018" }, + { label: "Графичные описания", value: "2854" }, + { label: "Грейнджергад", value: "1892" }, + { label: "Грейромантичные персонажи", value: "707" }, + { label: "Гремлины", value: "189" }, + { label: "Греция", value: "1040" }, + { label: "Грифоны", value: "335" }, + { label: "Громкий секс", value: "1184" }, + { label: "Грубый секс", value: "121" }, + { label: "Грудное кормление", value: "296" }, + { label: "Групи", value: "2925" }, + { label: "Групповое изнасилование", value: "2203" }, + { label: "Групповой секс", value: "1654" }, + { label: "Грязный реализм", value: "634" }, + { label: "Гувернантки", value: "1179" }, + { label: "Гули", value: "367" }, + { label: "Гэвин Рид — андроид", value: "2692" }, + { label: "Даб-кон", value: "57" }, + { label: "Даби — не Тойя Тодороки", value: "2821" }, + { label: "Даби — Тойя Тодороки", value: "2423" }, + { label: "Дадзава", value: "2915" }, + { label: "Дадмайт", value: "2917" }, + { label: "Дайверы", value: "939" }, + { label: "Дайвинг", value: "2823" }, + { label: "Дама в беде", value: "1259" }, + { label: "Дамбигад", value: "1863" }, + { label: "Дамбигуд", value: "1873" }, + { label: "Дампиры", value: "2860" }, + { label: "Дандэрэ", value: "1364" }, + { label: "Дарк", value: "1678" }, + { label: "Даркнет", value: "1287" }, + { label: "Дачи", value: "930" }, + { label: "Двойники", value: "305" }, + { label: "Двойное проникновение", value: "107" }, + { label: "Двойной кноттинг", value: "2619" }, + { label: "Двойные агенты", value: "441" }, + { label: "Дворцовые интриги", value: "2075" }, + { label: "Девиантное поведение", value: "1814" }, + { label: "Девичники / Мальчишники", value: "1191" }, + { label: "Девочки из Эквестрии", value: "2912" }, + { label: "Дежавю", value: "2049" }, + { label: "Декаданс", value: "2353" }, + { label: "Деконструкция", value: "1322" }, + { label: "Деми-персонажи", value: "723" }, + { label: "Демиурги", value: "819" }, + { label: "Демонология", value: "2485" }, + { label: "Демоны", value: "73" }, + { label: "Демоны-хранители", value: "2045" }, + { label: "Дендрофилия", value: "491" }, + { label: "День благодарения", value: "754" }, + { label: "День знаний", value: "1075" }, + { label: "День матери", value: "2979" }, + { label: "День мертвых", value: "1074" }, + { label: "День независимости США", value: "1008" }, + { label: "День рождения", value: "298" }, + { label: "День святого Валентина", value: "204" }, + { label: "День святого Патрика", value: "1129" }, + { label: "День смерти", value: "2251" }, + { label: "День учителя", value: "1076" }, + { label: "Деперсонализация", value: "1197" }, + { label: "Депрессия", value: "354" }, + { label: "Депривация сна", value: "551" }, + { label: "Дереализация", value: "1198" }, + { label: "Деревни", value: "364" }, + { label: "Дерматозойный бред", value: "2779" }, + { label: "Деспоты / Тираны", value: "1345" }, + { label: "Детектив", value: "1672" }, + { label: "Дети", value: "217" }, + { label: "Детоненавистничество", value: "1836" }, + { label: "Детская влюбленность", value: "186" }, + { label: "Детские дома", value: "355" }, + { label: "Детские лагеря", value: "222" }, + { label: "Детские сады", value: "567" }, + { label: "Дефекты зрения", value: "2639" }, + { label: "Дефекты речи", value: "737" }, + { label: "Джинны / Пери", value: "456" }, + { label: "Джон Ватсон — преступник", value: "1932" }, + { label: "Джуманджи — не игровой мир", value: "2799" }, + { label: "Диабет", value: "820" }, + { label: "Диалоги (стилизация)", value: "1139" }, + { label: "Дизайнеры", value: "1875" }, + { label: "Дизельпанк", value: "294" }, + { label: "Дикие животные", value: "622" }, + { label: "Дикий Запад", value: "293" }, + { label: "Дилетанты", value: "2443" }, + { label: "Динозавры", value: "670" }, + { label: "Дипломатия", value: "1790" }, + { label: "Дисбаланс власти", value: "732" }, + { label: "Дискриминация", value: "2230" }, + { label: "Дискриминация по внешности", value: "1414" }, + { label: "Дискриминация по возрасту", value: "2843" }, + { label: "Дислексия", value: "860" }, + { label: "Дисморфофобия", value: "1108" }, + { label: "Диссоциативное расстройство идентичности", value: "2127" }, + { label: "Дистанционное обучение", value: "2592" }, + { label: "Дисфункциональные семьи", value: "602" }, + { label: "Дневники (стилизация)", value: "214" }, + { label: "Добрый Сальери", value: "2522" }, + { label: "Доверие", value: "1117" }, + { label: "Договоры / Сделки", value: "2137" }, + { label: "Документы / Отчеты (стилизация)", value: "752" }, + { label: "Долголетие", value: "2130" }, + { label: "Домашнее насилие", value: "42" }, + { label: "Домашние животные", value: "517" }, + { label: "Домашний арест", value: "2526" }, + { label: "Домашний ремонт", value: "867" }, + { label: "Домовые", value: "1423" }, + { label: "Допросы", value: "2654" }, + { label: "Дорожное приключение", value: "47" }, + { label: "Драббл", value: "2935" }, + { label: "Драки", value: "1367" }, + { label: "Драконы", value: "43" }, + { label: "Драма", value: "1668" }, + { label: "Драуги", value: "2264" }, + { label: "Древний Восток", value: "1940" }, + { label: "Древний Египет", value: "474" }, + { label: "Древний Китай", value: "1438" }, + { label: "Древняя Русь", value: "466" }, + { label: "Дремлющее зло", value: "2719" }, + { label: "Дремлющие способности", value: "2084" }, + { label: "Другая магическая школа", value: "1864" }, + { label: "Другие планеты", value: "1415" }, + { label: "Другой избранный", value: "2054" }, + { label: "Другой факультет", value: "1866" }, + { label: "Дружба", value: "1701" }, + { label: "Дружба втайне", value: "2303" }, + { label: "Дружба по расчету", value: "2331" }, + { label: "Друзья детства", value: "343" }, + { label: "Друзья по переписке", value: "1466" }, + { label: "Друзья поневоле", value: "627" }, + { label: "Друзья с привилегиями", value: "113" }, + { label: "Друиды", value: "1199" }, + { label: "Дрэг (субкультура)", value: "1248" }, + { label: "Дурмстранг", value: "2389" }, + { label: "Дурслигуд", value: "2058" }, + { label: "Духи природы", value: "503" }, + { label: "Духовенство", value: "478" }, + { label: "Духовная связь", value: "2090" }, + { label: "Духокинез", value: "2500" }, + { label: "Дуэли", value: "446" }, + { label: "Дьяволы", value: "2369" }, + { label: "Дэдди-кинк", value: "165" }, + { label: "Еда / Кулинария", value: "1195" }, + { label: "Единороги", value: "373" }, + { label: "Ёкаи", value: "416" }, + { label: "Естественные враги", value: "728" }, + { label: "Жамевю", value: "2050" }, + { label: "Жаргон", value: "1016" }, + { label: "Ждун Фест", value: "2936" }, + { label: "Железнодорожники", value: "2680" }, + { label: "Железные дороги", value: "811" }, + { label: "Женская дружба", value: "2156" }, + { label: "Жертвы обстоятельств", value: "1475" }, + { label: "Жестокое обращение с животными", value: "722" }, + { label: "Жестокость", value: "1710" }, + { label: "Живой сосуд", value: "2072" }, + { label: "Животные-компаньоны", value: "2371" }, + { label: "Живые машины", value: "961" }, + { label: "ЖиП", value: "143" }, + { label: "Журналисты", value: "438" }, + { label: "Заболевания", value: "1268" }, + { label: "Заболевания крови", value: "2254" }, + { label: "Заболевания сердца", value: "1767" }, + { label: "Забота / Поддержка", value: "1302" }, + { label: "Заброшенные города", value: "1276" }, + { label: "Заброшенные здания", value: "1483" }, + { label: "Забытый герой", value: "2337" }, + { label: "Завещание", value: "1262" }, + { label: "Зависимое расстройство личности", value: "2349" }, + { label: "Зависть", value: "990" }, + { label: "Завоевание", value: "978" }, + { label: "Загробный мир", value: "275" }, + { label: "Закавказье", value: "2819" }, + { label: "Заклятые друзья", value: "1316" }, + { label: "Закрытые города", value: "1481" }, + { label: "Закрытые учебные заведения", value: "98" }, + { label: "Закрытый детектив", value: "2616" }, + { label: "Заложники", value: "845" }, + { label: "Замки", value: "654" }, + { label: "Замкнутое пространство", value: "2306" }, + { label: "Замкнутый мир", value: "874" }, + { label: "Занавесочная история", value: "1688" }, + { label: "Запахи", value: "1385" }, + { label: "Заповедники", value: "618" }, + { label: "Запредельно одаренный персонаж", value: "1241" }, + { label: "Запрет на магию", value: "2663" }, + { label: "Запретные отношения", value: "362" }, + { label: "Засосы / Укусы", value: "913" }, + { label: "Застенчивость", value: "2807" }, + { label: "Затворники", value: "1059" }, + { label: "Затерянные миры", value: "2448" }, + { label: "Защита любимого", value: "2492" }, + { label: "Защитники природы", value: "628" }, + { label: "Защищенный секс", value: "636" }, + { label: "Звездные слезы", value: "2971" }, + { label: "Здоровые механизмы преодоления", value: "2147" }, + { label: "Здоровые отношения", value: "1853" }, + { label: "Зеркала", value: "724" }, + { label: "Зимняя Фандомная Битва", value: "254" }, + { label: "Злобные бывшие", value: "518" }, + { label: "Зловещая находка", value: "2275" }, + { label: "Знаки зодиака", value: "643" }, + { label: "Знаменитости", value: "1360" }, + { label: "Золотая клетка", value: "480" }, + { label: "Золотая молодежь", value: "796" }, + { label: "Золотая Орда", value: "1143" }, + { label: "Золушка", value: "1226" }, + { label: "Зомби", value: "31" }, + { label: "Зоопарки", value: "792" }, + { label: "Зоофилия", value: "1662" }, + { label: "Зоофобии", value: "2715" }, + { label: "ЗППП", value: "630" }, + { label: "ЗПР", value: "2259" }, + { label: "Зрелые персонажи", value: "851" }, + { label: "Иван Купала", value: "1068" }, + { label: "Игровое расстройство", value: "949" }, + { label: "Игрушки", value: "1346" }, + { label: "Игры на выживание", value: "554" }, + { label: "Игры на раздевание", value: "1535" }, + { label: "Игры с сосками", value: "423" }, + { label: "Игры с температурой", value: "230" }, + { label: "Идеализация", value: "1540" }, + { label: "Иерархический строй", value: "652" }, + { label: "Избранные", value: "847" }, + { label: "Избыточный физиологизм", value: "2334" }, + { label: "Изгнанники", value: "871" }, + { label: "Измена", value: "62" }, + { label: "Измененное состояние сознания", value: "2242" }, + { label: "Изменились за лето", value: "1908" }, + { label: "Изнасилование", value: "1650" }, + { label: "Изоляция", value: "1296" }, + { label: "Израиль", value: "1094" }, + { label: "Изуку Мидория — злодей", value: "2472" }, + { label: "Иллюзионисты", value: "532" }, + { label: "Имейджин", value: "838" }, + { label: "Импотенция", value: "632" }, + { label: "Импринтинг", value: "635" }, + { label: "Импрореал", value: "2955" }, + { label: "Импрофест", value: "2947" }, + { label: "Имя вместо цвета", value: "2919" }, + { label: "Инвалидность", value: "197" }, + { label: "Индия", value: "1002" }, + { label: "Инквизиция", value: "1130" }, + { label: "Инопланетяне", value: "58" }, + { label: "Инсектоиды / Арахноиды", value: "953" }, + { label: "Инсектофилия / Арахнофилия", value: "664" }, + { label: "Инсценированная смерть персонажа", value: "440" }, + { label: "Интерактивная работа", value: "419" }, + { label: "Интервью (стилизация)", value: "2446" }, + { label: "Интернет", value: "1286" }, + { label: "Интерсекс-персонажи", value: "299" }, + { label: "Интрамаммарный секс", value: "840" }, + { label: "Инфантильность", value: "1300" }, + { label: "Инцест", value: "1651" }, + { label: "Ипохондрия", value: "2178" }, + { label: "Ирландия", value: "1035" }, + { label: "Иронический детектив", value: "2638" }, + { label: "Искра Стайлз Стилински", value: "1975" }, + { label: "Искупление", value: "877" }, + { label: "Искусственно вызванные чувства", value: "626" }, + { label: "Искусственные интеллекты", value: "150" }, + { label: "Искусственные существа", value: "2277" }, + { label: "Искусство", value: "2257" }, + { label: "Искусствоведы", value: "2873" }, + { label: "Искушение", value: "776" }, + { label: "Испания", value: "1020" }, + { label: "Исповеди", value: "1342" }, + { label: "Исправительные лагеря", value: "2439" }, + { label: "Истинные", value: "1855" }, + { label: "Историческая Хеталия", value: "1865" }, + { label: "Исторические эпохи", value: "1698" }, + { label: "Исторический Кантриболс", value: "2913" }, + { label: "Историческое допущение", value: "2681" }, + { label: "Исцеление", value: "802" }, + { label: "Италия", value: "1003" }, + { label: "Ихтиоморфы", value: "972" }, + { label: "Йога", value: "483" }, + { label: "Йоль", value: "2143" }, + { label: "Кабаре", value: "457" }, + { label: "Кабэ-дон", value: "2626" }, + { label: "Казахстан", value: "1260" }, + { label: "Казино", value: "620" }, + { label: "Казнь", value: "548" }, + { label: "Как ориджинал", value: "1032" }, + { label: "Каламбуры", value: "881" }, + { label: "Каминг-аут", value: "559" }, + { label: "Канада", value: "695" }, + { label: "Каникулы", value: "805" }, + { label: "Каннибализм", value: "1706" }, + { label: "Канонная смерть персонажа", value: "564" }, + { label: "Капитан Гидра", value: "1928" }, + { label: "Карантинные зоны", value: "1290" }, + { label: "Карантины", value: "2734" }, + { label: "Караоке", value: "886" }, + { label: "Карательная психиатрия", value: "730" }, + { label: "Карибский бассейн", value: "1172" }, + { label: "Карма", value: "647" }, + { label: "Карьеризм", value: "956" }, + { label: "Каскадеры", value: "2267" }, + { label: "Катарсис", value: "824" }, + { label: "Кафе / Кофейни / Чайные", value: "13" }, + { label: "Квай-Гад", value: "2894" }, + { label: "Квантовая физика", value: "2744" }, + { label: "Квисины", value: "2722" }, + { label: "Кемономими", value: "997" }, + { label: "Кемпинг", value: "182" }, + { label: "Кентавры", value: "64" }, + { label: "Кибербуллинг", value: "1858" }, + { label: "Киберпанк", value: "24" }, + { label: "Киберспорт", value: "745" }, + { label: "Кибертрон", value: "2775" }, + { label: "Киборги", value: "154" }, + { label: "Киевская Русь", value: "515" }, + { label: "Кинк на беременность", value: "2281" }, + { label: "Кинк на волосы", value: "2089" }, + { label: "Кинк на волосы на теле", value: "1337" }, + { label: "Кинк на девственность", value: "2282" }, + { label: "Кинк на инвалидность", value: "633" }, + { label: "Кинк на интеллект", value: "2798" }, + { label: "Кинк на клыки", value: "2325" }, + { label: "Кинк на колготки", value: "2644" }, + { label: "Кинк на крылья", value: "2035" }, + { label: "Кинк на латекс", value: "134" }, + { label: "Кинк на мольбы", value: "1543" }, + { label: "Кинк на наручники", value: "1065" }, + { label: "Кинк на нижнее белье", value: "145" }, + { label: "Кинк на очки", value: "1723" }, + { label: "Кинк на ошейники", value: "388" }, + { label: "Кинк на полноту", value: "552" }, + { label: "Кинк на похвалу", value: "1042" }, + { label: "Кинк на протезы", value: "2682" }, + { label: "Кинк на рога", value: "2320" }, + { label: "Кинк на руки", value: "915" }, + { label: "Кинк на сердцебиение", value: "941" }, + { label: "Кинк на силу", value: "1476" }, + { label: "Кинк на слезы", value: "1373" }, + { label: "Кинк на служение", value: "2980" }, + { label: "Кинк на страх", value: "2246" }, + { label: "Кинк на стыд", value: "747" }, + { label: "Кинк на унижение", value: "2291" }, + { label: "Кинк на униформу", value: "1350" }, + { label: "Кинк на уши", value: "2370" }, + { label: "Кинк на формальную одежду", value: "1064" }, + { label: "Кинк на чужую одежду", value: "2920" }, + { label: "Кинк на чулки", value: "810" }, + { label: "Кинк на шрамы", value: "2831" }, + { label: "Кинк на щекотку", value: "2396" }, + { label: "Кинк-бинго", value: "2290" }, + { label: "Кинки / Фетиши", value: "1659" }, + { label: "Кинотеатры", value: "981" }, + { label: "Киригакуре", value: "2475" }, + { label: "Китай", value: "757" }, + { label: "Кладбища", value: "501" }, + { label: "Кланы", value: "2879" }, + { label: "Классизм", value: "1927" }, + { label: "Клейма", value: "1548" }, + { label: "Клептомания", value: "1160" }, + { label: "Клетка Люцифера", value: "1884" }, + { label: "Клетки", value: "1069" }, + { label: "Клиническая смерть", value: "2068" }, + { label: "Клокпанк / Ветропанк", value: "1812" }, + { label: "Клоны", value: "358" }, + { label: "Клоуны", value: "1520" }, + { label: "Клубы по интересам", value: "1369" }, + { label: "Клюква", value: "1001" }, + { label: "Кляпы / Затыкание рта", value: "379" }, + { label: "Книги", value: "2746" }, + { label: "Книжные магазины", value: "444" }, + { label: "Кноттинг", value: "99" }, + { label: "Ковбои", value: "330" }, + { label: "Кода", value: "1943" }, + { label: "Кожаная одежда", value: "1517" }, + { label: "Колдовстворец", value: "2600" }, + { label: "Кома", value: "516" }, + { label: "Командная работа", value: "708" }, + { label: "Комики", value: "1315" }, + { label: "Комиксисты / Мангаки", value: "576" }, + { label: "Коммунальные квартиры", value: "1437" }, + { label: "Коммуны", value: "797" }, + { label: "Комнатные растения", value: "1792" }, + { label: "Комплекс Бога", value: "2087" }, + { label: "Комплекс превосходства", value: "2191" }, + { label: "Комплексы", value: "2529" }, + { label: "Конкурс от BUBBLE", value: "2937" }, + { label: "Конный спорт", value: "1378" }, + { label: "Конохагакуре", value: "2477" }, + { label: "Конспирология", value: "1911" }, + { label: "Контрабандисты", value: "2363" }, + { label: "Контроль / Подчинение", value: "932" }, + { label: "Контроль памяти", value: "2540" }, + { label: "Контроль сознания", value: "257" }, + { label: "Конфликт мировоззрений", value: "2678" }, + { label: "Концентрационные лагеря", value: "547" }, + { label: "Концерты / Выступления", value: "1236" }, + { label: "Конюшни", value: "514" }, + { label: "Копирование сознания", value: "1231" }, + { label: "Копирование способностей", value: "1825" }, + { label: "Копро-кинк", value: "763" }, + { label: "Корё", value: "1142" }, + { label: "Корейская война", value: "2187" }, + { label: "Коренные народы", value: "1505" }, + { label: "Королевства", value: "2794" }, + { label: "Корпорация BOBSOC", value: "2940" }, + { label: "Корректирующее изнасилование", value: "2856" }, + { label: "Коррупция", value: "2150" }, + { label: "Косвенные убийства", value: "2846" }, + { label: "Космоопера", value: "48" }, + { label: "Космос", value: "236" }, + { label: "Косплееры", value: "944" }, + { label: "Кочевники", value: "1793" }, + { label: "Кошмары", value: "1228" }, + { label: "Красная нить судьбы", value: "608" }, + { label: "Крепости / Башни", value: "2321" }, + { label: "Крестовые походы", value: "2070" }, + { label: "Крестражи", value: "2238" }, + { label: "Кризис гендера", value: "1406" }, + { label: "Кризис ориентации", value: "1405" }, + { label: "Криминалистическая экспертиза", value: "2361" }, + { label: "Криминальная пара", value: "1920" }, + { label: "Криокинез", value: "1804" }, + { label: "Криптиды", value: "60" }, + { label: "Криптоистория", value: "179" }, + { label: "Кровь / Травмы", value: "800" }, + { label: "Кроссдрессинг", value: "65" }, + { label: "Кроссовер", value: "10" }, + { label: "Кроули — Архангел Рафаэль", value: "2471" }, + { label: "Круизы", value: "2488" }, + { label: "Крушение «Титаника»", value: "2200" }, + { label: "Крылатые", value: "92" }, + { label: "Крэк", value: "1408" }, + { label: "Ксенофилия", value: "1711" }, + { label: "Ксенофобия", value: "589" }, + { label: "Куба", value: "773" }, + { label: "Кудэрэ", value: "1216" }, + { label: "Куклы", value: "1221" }, + { label: "Куколдинг", value: "524" }, + { label: "Культ Дракона", value: "2244" }, + { label: "Кумогакуре", value: "2474" }, + { label: "Куннилингус", value: "172" }, + { label: "Купальни", value: "964" }, + { label: "Курение", value: "202" }, + { label: "Курортный роман", value: "181" }, + { label: "Курьеры", value: "2735" }, + { label: "Лабиринты", value: "1981" }, + { label: "Лаборатории", value: "1115" }, + { label: "Лабораторные опыты", value: "146" }, + { label: "Лав-отели", value: "801" }, + { label: "Лавандовый брак", value: "1357" }, + { label: "Лакросс", value: "830" }, + { label: "Лапслок", value: "267" }, + { label: "Латентная гомосексуальность", value: "2339" }, + { label: "ЛГБТ-родители", value: "2723" }, + { label: "Лебединая верность", value: "537" }, + { label: "Левитация", value: "1281" }, + { label: "Легкая атлетика", value: "1797" }, + { label: "Лекарственная зависимость", value: "2632" }, + { label: "Леса", value: "703" }, + { label: "Летние ОтМетки", value: "2956" }, + { label: "Летние школы", value: "2803" }, + { label: "Лето девяносто девятого", value: "1990" }, + { label: "Лжебоги", value: "2869" }, + { label: "Лингвистический кинк", value: "2042" }, + { label: "Лирика", value: "2005" }, + { label: "Лихтенштейн", value: "1023" }, + { label: "Личность против системы", value: "1912" }, + { label: "Ложная беременность", value: "1428" }, + { label: "Ложные воспоминания", value: "376" }, + { label: "Ложные обвинения", value: "1204" }, + { label: "Локальный постапокалипсис", value: "2455" }, + { label: "Лолита (субкультура)", value: "1207" }, + { label: "Ломка", value: "1846" }, + { label: "Лошади", value: "1083" }, + { label: "Лугнасад", value: "2621" }, + { label: "Лудомания", value: "947" }, + { label: "Лучники", value: "1521" }, + { label: "Любить луну", value: "2901" }, + { label: "Любовная магия", value: "2317" }, + { label: "Любовный магнит", value: "1407" }, + { label: "Любовный многоугольник", value: "63" }, + { label: "Любовь с первого взгляда", value: "813" }, + { label: "Любовь/Ненависть", value: "1703" }, + { label: "Люди", value: "1538" }, + { label: "Людоеды", value: "1288" }, + { label: "Магазины", value: "1063" }, + { label: "Магическая связь", value: "2720" }, + { label: "Магические клятвы", value: "2245" }, + { label: "Магические лавки", value: "2629" }, + { label: "Магические учебные заведения", value: "1338" }, + { label: "Магический реализм", value: "9" }, + { label: "Магия", value: "1419" }, + { label: "Магия крови", value: "2857" }, + { label: "Маленькие города", value: "221" }, + { label: "Малфоигуд", value: "1890" }, + { label: "Мамми-кинк", value: "273" }, + { label: "Мандалорцы", value: "2870" }, + { label: "Манекены", value: "1509" }, + { label: "Манипуляции", value: "992" }, + { label: "Марафонный секс", value: "316" }, + { label: "Маргиналы", value: "394" }, + { label: "Марди Гра", value: "2407" }, + { label: "Маскарады / Балы", value: "443" }, + { label: "Массаж", value: "2218" }, + { label: "Мастурбация", value: "226" }, + { label: "Матриархат", value: "706" }, + { label: "Матчасть", value: "2328" }, + { label: "Махотокоро", value: "2943" }, + { label: "Маяки", value: "1356" }, + { label: "Мегаломания", value: "985" }, + { label: "Мегаполисы", value: "451" }, + { label: "Медицинский кинк", value: "748" }, + { label: "Медицинское использование наркотиков", value: "925" }, + { label: "Медовый месяц", value: "2235" }, + { label: "Медсестры / Медбратья", value: "2236" }, + { label: "Межбедренный секс", value: "931" }, + { label: "Междумирье", value: "2280" }, + { label: "Межэтнические отношения", value: "2121" }, + { label: "Мейлдом", value: "59" }, + { label: "Мексика", value: "768" }, + { label: "Меланхолия", value: "2108" }, + { label: "Мелодрама", value: "2881" }, + { label: "Менструация", value: "1570" }, + { label: "Ментальная тюрьма", value: "2294" }, + { label: "Месть", value: "907" }, + { label: "Металлисты", value: "1206" }, + { label: "Металлокинез", value: "1532" }, + { label: "Метафизические существа", value: "2097" }, + { label: "Метки", value: "1398" }, + { label: "Метросексуалы", value: "558" }, + { label: "Механофилия / Технофилия", value: "587" }, + { label: "Мечники", value: "2783" }, + { label: "Мечты", value: "993" }, + { label: "Миддлпанк", value: "2076" }, + { label: "Мизофилия", value: "1970" }, + { label: "Микро / Макро", value: "407" }, + { label: "Микрофикшен", value: "417" }, + { label: "Мимикрия", value: "2083" }, + { label: "Минет", value: "231" }, + { label: "Министерство Магии", value: "1917" }, + { label: "Минотавры", value: "2820" }, + { label: "Мир без гомофобии", value: "2660" }, + { label: "Мир Желаний (Однажды в сказке)", value: "2923" }, + { label: "Мир Института Войны", value: "2379" }, + { label: "Мироустройство", value: "989" }, + { label: "Мистерия", value: "2012" }, + { label: "Мистика", value: "1671" }, + { label: "Мистическая беременность", value: "1784" }, + { label: "Мистические защитники", value: "2162" }, + { label: "Мифы и мифология", value: "18" }, + { label: "Мнимая беременность", value: "1096" }, + { label: "Мнимая проза", value: "1098" }, + { label: "Мнимая свобода", value: "2708" }, + { label: "Многодетные семьи", value: "2785" }, + { label: "Множественное проникновение", value: "2059" }, + { label: "Множественные оргазмы", value: "317" }, + { label: "Множественные финалы", value: "312" }, + { label: "Могучие Рейнджеры: Дино Заряд", value: "2931" }, + { label: "Могучие Рейнджеры: Мегафорс", value: "2930" }, + { label: "Могучие Рейнджеры: Мистическая Сила", value: "2933" }, + { label: "Могучие Рейнджеры: Самураи", value: "2929" }, + { label: "Могучие Рейнджеры: Успеть на помощь", value: "2934" }, + { label: "Могучие Рейнджеры: Ярость Джунглей", value: "2932" }, + { label: "Модели", value: "399" }, + { label: "Модельеры", value: "598" }, + { label: "Модельный бизнес", value: "435" }, + { label: "Модификации тела", value: "890" }, + { label: "Молдова", value: "2967" }, + { label: "Молчание", value: "2465" }, + { label: "Монастыри", value: "352" }, + { label: "Монахи", value: "353" }, + { label: "Монолог", value: "2333" }, + { label: "Монстрофилия", value: "94" }, + { label: "Монстры", value: "529" }, + { label: "Моральные дилеммы", value: "959" }, + { label: "Морлед", value: "2255" }, + { label: "Моря / Океаны", value: "955" }, + { label: "Моряки", value: "406" }, + { label: "Мотоспорт", value: "1461" }, + { label: "Мужская беременность", value: "1660" }, + { label: "Мужская дружба", value: "2157" }, + { label: "Мужское грудное кормление", value: "297" }, + { label: "Музеи / Галереи", value: "795" }, + { label: "Музы", value: "2001" }, + { label: "Музыканты", value: "141" }, + { label: "Муковисцидоз", value: "2764" }, + { label: "Мультикроссовер", value: "2247" }, + { label: "Мумии", value: "579" }, + { label: "Мутанты", value: "740" }, + { label: "Мэри Сью (Марти Стью)", value: "1655" }, + { label: "Мятежи / Восстания", value: "584" }, + { label: "На грани жизни и смерти", value: "2545" }, + { label: "Наблюдатели", value: "1816" }, + { label: "Навязчивая опека", value: "954" }, + { label: "Навязчивые мысли", value: "2851" }, + { label: "Наги", value: "90" }, + { label: "Надежда", value: "2627" }, + { label: "Наемники", value: "512" }, + { label: "Наемные убийцы", value: "192" }, + { label: "Названные сиблинги", value: "2927" }, + { label: "Намеки на отношения", value: "1387" }, + { label: "Намеки на секс", value: "1382" }, + { label: "Напарники", value: "1291" }, + { label: "Наперегонки со временем", value: "2240" }, + { label: "НапиСанта", value: "2946" }, + { label: "Наполеоновские войны", value: "470" }, + { label: "Нарколепсия", value: "586" }, + { label: "Наркоторговля", value: "1116" }, + { label: "Нарушение этических норм", value: "968" }, + { label: "Нарциссизм", value: "546" }, + { label: "Насекомые", value: "2358" }, + { label: "Насилие", value: "1649" }, + { label: "Насилие над детьми", value: "726" }, + { label: "Наследие (Гарри Поттер)", value: "1935" }, + { label: "Наследство", value: "2172" }, + { label: "Наставничество", value: "935" }, + { label: "Настольные игры", value: "1513" }, + { label: "Настольные ролевые игры", value: "644" }, + { label: "Натуризм / Нудизм", value: "1810" }, + { label: "Наука", value: "2624" }, + { label: "Научная фантастика", value: "596" }, + { label: "Научно-исследовательские организации", value: "1503" }, + { label: "Научное фэнтези", value: "180" }, + { label: "Начало отношений", value: "1328" }, + { label: "Небинарные персонажи", value: "314" }, + { label: "Невезение", value: "2689" }, + { label: "Невзаимные предначертанные", value: "1484" }, + { label: "Невзаимные чувства", value: "105" }, + { label: "Невидимость", value: "359" }, + { label: "Невидимый мир", value: "2286" }, + { label: "Неграфичные описания", value: "2855" }, + { label: "Недоверие", value: "1842" }, + { label: "Недопонимания", value: "614" }, + { label: "Недостатки внешности", value: "923" }, + { label: "Нежелательная беременность", value: "715" }, + { label: "Нежелательные сверхспособности", value: "1335" }, + { label: "Нежелательные чувства", value: "2078" }, + { label: "Нежный секс", value: "280" }, + { label: "Незащищенный секс", value: "497" }, + { label: "Нездоровые механизмы преодоления", value: "1528" }, + { label: "Нездоровые отношения", value: "71" }, + { label: "Нездоровый образ жизни", value: "2148" }, + { label: "Нездоровый BDSM", value: "1062" }, + { label: "Неидеальный омегаверс", value: "2712" }, + { label: "Неизвестность", value: "2826" }, + { label: "Неизвестные родственники", value: "2752" }, + { label: "Неизлечимые заболевания", value: "1269" }, + { label: "Нейтрализация сверхспособностей", value: "2343" }, + { label: "Некромаги", value: "679" }, + { label: "Некрофилия", value: "1663" }, + { label: "Нелинейное повествование", value: "1699" }, + { label: "Неловкий секс", value: "2883" }, + { label: "Неловкость", value: "2459" }, + { label: "Нелюбящие родители", value: "2817" }, + { label: "Немертвые", value: "495" }, + { label: "Немота", value: "414" }, + { label: "Ненависть", value: "685" }, + { label: "Ненависть к себе", value: "1441" }, + { label: "Ненависть с первого взгляда", value: "814" }, + { label: "Ненадежный рассказчик", value: "322" }, + { label: "Ненасильственная смерть", value: "2531" }, + { label: "Необитаемые острова", value: "1196" }, + { label: "Необратимые превращения", value: "926" }, + { label: "Неозвученные чувства", value: "258" }, + { label: "Неприятие отношений", value: "2056" }, + { label: "Неравные отношения", value: "545" }, + { label: "Неравный брак", value: "409" }, + { label: "Неразрывная связь", value: "2569" }, + { label: "Нервный срыв", value: "1190" }, + { label: "Нерды", value: "481" }, + { label: "Нереалистичность", value: "2350" }, + { label: "Несексуальная близость", value: "2874" }, + { label: "Нестандартная поэзия", value: "1704" }, + { label: "Несчастливые отношения", value: "2080" }, + { label: "Несчастливый финал", value: "61" }, + { label: "Несчастные случаи", value: "499" }, + { label: "Нетаймори", value: "2323" }, + { label: "Неторопливое повествование", value: "1815" }, + { label: "Нетрадиционное использование Силы", value: "2520" }, + { label: "Неумышленное употребление наркотических веществ", value: "1192" }, + { label: "Неуставные отношения", value: "1396" }, + { label: "Нефилимы", value: "1086" }, + { label: "Неформальный брак", value: "1355" }, + { label: "Нецензурная лексика", value: "1653" }, + { label: "Нечеловеческая мораль", value: "2551" }, + { label: "Нечеловеческие виды", value: "995" }, + { label: "Нечистая сила", value: "1464" }, + { label: "Нидерланды", value: "1141" }, + { label: "Низкая самооценка", value: "2014" }, + { label: "Низкое фэнтези", value: "2007" }, + { label: "Нимфы", value: "1477" }, + { label: "Ниндзя", value: "471" }, + { label: "Новая жизнь", value: "2018" }, + { label: "Новая Зеландия", value: "1789" }, + { label: "Новеллизация", value: "262" }, + { label: "Новые отношения", value: "1827" }, + { label: "Новый год", value: "206" }, + { label: "Новый канон ЗВ", value: "1948" }, + { label: "Норны", value: "2206" }, + { label: "Ностальгия", value: "878" }, + { label: "Ночное видение", value: "2006" }, + { label: "Ночные клубы", value: "531" }, + { label: "Нуар", value: "137" }, + { label: "Няни", value: "570" }, + { label: "Обездвиживание", value: "116" }, + { label: "Обещания / Клятвы", value: "1823" }, + { label: "Обиды", value: "905" }, + { label: "Обман / Заблуждение", value: "650" }, + { label: "Обмен квами", value: "2572" }, + { label: "Обмен ролями", value: "1055" }, + { label: "Обмен телами", value: "49" }, + { label: "Обмороки", value: "2484" }, + { label: "Обнажение", value: "970" }, + { label: "Оборотни", value: "28" }, + { label: "Обоснованный ООС", value: "2549" }, + { label: "Образ тела", value: "2289" }, + { label: "Обратный омегаверс", value: "2435" }, + { label: "Обретенные семьи", value: "601" }, + { label: "Обреченные отношения", value: "653" }, + { label: "Обскуры", value: "2237" }, + { label: "Обсуждение кинков", value: "1072" }, + { label: "Обусловленная контекстом гомофобия", value: "2685" }, + { label: "Обусловленный контекстом расизм", value: "2686" }, + { label: "Обусловленный контекстом сексизм", value: "2687" }, + { label: "Общежития", value: "534" }, + { label: "Общественный транспорт", value: "615" }, + { label: "Объективация", value: "1837" }, + { label: "Объектофилия", value: "366" }, + { label: "Овипозиция", value: "269" }, + { label: "Огнестрельное оружие", value: "1189" }, + { label: "Ограбления", value: "2269" }, + { label: "Одержимость", value: "2248" }, + { label: "Одержимые", value: "496" }, + { label: "Один день", value: "2647" }, + { label: "Одиночество", value: "1015" }, + { label: "Одичавшие дети", value: "835" }, + { label: "Однолюбы", value: "2146" }, + { label: "Одноминутный канонический персонаж", value: "2184" }, + { label: "Однополый мир", value: "1462" }, + { label: "Ожидание", value: "2909" }, + { label: "ОЖП", value: "1657" }, + { label: "Окаменение", value: "2052" }, + { label: "Океания", value: "1058" }, + { label: "Оккультизм", value: "2374" }, + { label: "ОКР", value: "594" }, + { label: "Окулолинктус", value: "1470" }, + { label: "Олимпийские игры", value: "1127" }, + { label: "Олфактофилия", value: "1945" }, + { label: "Омегаверс", value: "1693" }, + { label: "Омегаверс: Альфа/Альфа", value: "2437" }, + { label: "Омегаверс: Альфа/Бета", value: "2741" }, + { label: "Омегаверс: Альфа/Бета/Омега", value: "2898" }, + { label: "Омегаверс: Альфа/Омега/Альфа", value: "2436" }, + { label: "Омегаверс: Бета/Бета", value: "2966" }, + { label: "Омегаверс: Больше трех полов", value: "2782" }, + { label: "Омегаверс: Омега/Альфа/Омега", value: "2544" }, + { label: "Омегаверс: Омега/Бета", value: "2965" }, + { label: "Омегаверс: Омега/Омега", value: "2564" }, + { label: "Омегаверс: Смена второго пола", value: "2776" }, + { label: "Омегаверс: f!Альфа/m!Омега", value: "2777" }, + { label: "ОМП", value: "1656" }, + { label: "Онейрокинез", value: "2067" }, + { label: "Онкологические заболевания", value: "540" }, + { label: "ООС", value: "1648" }, + { label: "Опасность", value: "2847" }, + { label: "Опера", value: "549" }, + { label: "Опричнина", value: "2252" }, + { label: "Оптимизм", value: "2420" }, + { label: "Оракулы / Провидцы", value: "2221" }, + { label: "Оральная фиксация", value: "2523" }, + { label: "Оргазм без стимуляции", value: "1000" }, + { label: "Организаторы свадеб", value: "858" }, + { label: "Орден Феникса", value: "1907" }, + { label: "Орки", value: "187" }, + { label: "Оружие массового поражения", value: "1193" }, + { label: "Освоение земель", value: "1824" }, + { label: "Оседлание", value: "1223" }, + { label: "Османская империя", value: "527" }, + { label: "Особняки / Резиденции", value: "500" }, + { label: "Осознанные сновидения", value: "530" }, + { label: "Остеокинез", value: "2845" }, + { label: "Острова", value: "799" }, + { label: "От антигероя к герою", value: "2173" }, + { label: "От антигероя к злодею", value: "2213" }, + { label: "От божественного существа к смертному", value: "2664" }, + { label: "От возлюбленных к врагам", value: "783" }, + { label: "От возлюбленных к друзьям", value: "782" }, + { label: "От врагов к возлюбленным", value: "346" }, + { label: "От врагов к друзьям", value: "347" }, + { label: "От врагов к друзьям к возлюбленным", value: "345" }, + { label: "От героя к антигерою", value: "2546" }, + { label: "От героя к злодею", value: "1027" }, + { label: "От героя к монстру", value: "2659" }, + { label: "От героя к обычному персонажу", value: "2584" }, + { label: "От друзей к возлюбленным", value: "344" }, + { label: "От друзей к врагам", value: "463" }, + { label: "От друзей к незнакомцам", value: "1870" }, + { label: "От злодея к антигерою", value: "2640" }, + { label: "От злодея к герою", value: "1026" }, + { label: "От напарников к друзьям к возлюбленным", value: "2460" }, + { label: "От нездоровых отношений к здоровым", value: "2301" }, + { label: "От незнакомцев к возлюбленным", value: "372" }, + { label: "От простонародья к аристократу", value: "2816" }, + { label: "От сексуальных партнеров к возлюбленным", value: "2069" }, + { label: "От смертного к божественному существу", value: "2665" }, + { label: "От супругов к возлюбленным", value: "2359" }, + { label: "Ответвление от канона", value: "2336" }, + { label: "Ответственность", value: "2468" }, + { label: "Отдаю на вдохновение", value: "2288" }, + { label: "Отечественная война 1812 года", value: "1162" }, + { label: "Отказ от чувств", value: "2227" }, + { label: "Отклонения от канона", value: "5" }, + { label: "Открытый финал", value: "185" }, + { label: "ОтМетки", value: "2945" }, + { label: "Отношения втайне", value: "285" }, + { label: "Отношения на расстоянии", value: "37" }, + { label: "Отношения на спор", value: "383" }, + { label: "Отношения наполовину", value: "1573" }, + { label: "Отпуск", value: "1828" }, + { label: "Отрицание", value: "1868" }, + { label: "Отрицание чувств", value: "648" }, + { label: "Отрицательный протагонист", value: "1442" }, + { label: "Отсутствие души", value: "1897" }, + { label: "Отшельники", value: "543" }, + { label: "Офисы", value: "74" }, + { label: "Официанты / Официантки", value: "2560" }, + { label: "Охота", value: "825" }, + { label: "Охота на разумных существ", value: "2784" }, + { label: "Охотники", value: "2036" }, + { label: "Охотники за головами", value: "2103" }, + { label: "Охотники на нечисть", value: "46" }, + { label: "Охранники", value: "1173" }, + { label: "Ошибки", value: "2554" }, + { label: "Ошибочная идентификация", value: "2490" }, + { label: "Паладины", value: "1194" }, + { label: "Пан-персонажи", value: "302" }, + { label: "Пандемия COVID-19", value: "2724" }, + { label: "Панические атаки", value: "751" }, + { label: "Паническое расстройство", value: "733" }, + { label: "Панки", value: "625" }, + { label: "Паразиты", value: "1877" }, + { label: "Паралич", value: "1941" }, + { label: "Параллельные миры", value: "378" }, + { label: "Паранойя", value: "1253" }, + { label: "Пари", value: "778" }, + { label: "Парки / Зоны отдыха", value: "1005" }, + { label: "Парки аттракционов / Ярмарки", value: "793" }, + { label: "Паркур", value: "553" }, + { label: "Пародия", value: "1676" }, + { label: "Партизаны", value: "850" }, + { label: "Парфюмеры", value: "1384" }, + { label: "Пасха", value: "562" }, + { label: "Патологическое бесстрашие", value: "1498" }, + { label: "Патологическое накопительство", value: "2691" }, + { label: "Патологоанатомы", value: "502" }, + { label: "Патриархат", value: "705" }, + { label: "Патриотические темы и мотивы", value: "2231" }, + { label: "Патронусы", value: "2390" }, + { label: "Патрули", value: "1819" }, + { label: "Пафос", value: "2589" }, + { label: "Пацифисты", value: "1939" }, + { label: "Пегасы", value: "1047" }, + { label: "Пеггинг", value: "159" }, + { label: "Пейзажная лирика", value: "2330" }, + { label: "Пекарни", value: "78" }, + { label: "Первая мировая", value: "487" }, + { label: "Первая чеченская война", value: "2428" }, + { label: "Первобытные времена", value: "465" }, + { label: "Первое апреля", value: "2315" }, + { label: "Первопроходцы", value: "351" }, + { label: "Первый контакт", value: "2093" }, + { label: "Первый поцелуй", value: "2790" }, + { label: "Первый раз", value: "1292" }, + { label: "Передача магических способностей", value: "2497" }, + { label: "Переезд", value: "658" }, + { label: "Перезапуск мира", value: "2710" }, + { label: "Перемирие", value: "1331" }, + { label: "Переписки и чаты (стилизация)", value: "38" }, + { label: "Перерыв в отношениях", value: "519" }, + { label: "Переселение душ", value: "1237" }, + { label: "Перестрелки", value: "2268" }, + { label: "Переходный возраст", value: "1297" }, + { label: "Период Эдо", value: "1140" }, + { label: "Персекуторный бред", value: "2136" }, + { label: "Персонажи-геи", value: "2141" }, + { label: "Персонажи-лесбиянки", value: "2142" }, + { label: "Персонификация", value: "994" }, + { label: "Персонификация смерти", value: "1046" }, + { label: "Перу", value: "2017" }, + { label: "Перфекционизм", value: "2730" }, + { label: "Пессимизм", value: "2709" }, + { label: "Пет-плей", value: "391" }, + { label: "Петербург: бикейм #Чимин Сергеевич", value: "1859" }, + { label: "Петтинг", value: "301" }, + { label: "Пещеры", value: "655" }, + { label: "Пижамные вечеринки", value: "1340" }, + { label: "Пикацизм", value: "1227" }, + { label: "Пикники", value: "1165" }, + { label: "Пионеры", value: "668" }, + { label: "Пираты", value: "72" }, + { label: "Пирокинез", value: "1180" }, + { label: "Пиромания", value: "899" }, + { label: "Пирсинг", value: "507" }, + { label: "Писатели", value: "196" }, + { label: "Письма", value: "2298" }, + { label: "Письма (стилизация)", value: "266" }, + { label: "Пиццерии / Дайнеры", value: "593" }, + { label: "Плавание", value: "1135" }, + { label: "Плантокинез", value: "2029" }, + { label: "Пластические операции", value: "1847" }, + { label: "Платонические отношения", value: "385" }, + { label: "Племена", value: "1336" }, + { label: "Плен", value: "290" }, + { label: "Плененные путешествием", value: "2615" }, + { label: "Плохая компания", value: "1502" }, + { label: "Плохие друзья", value: "2445" }, + { label: "Плохой хороший финал", value: "1265" }, + { label: "Плюшефилия", value: "520" }, + { label: "Пляжи", value: "766" }, + { label: "По разные стороны", value: "897" }, + { label: "Побег", value: "661" }, + { label: "Побег из дома", value: "2309" }, + { label: "Победа Волдеморта", value: "1887" }, + { label: "Победа Гриндевальда", value: "2398" }, + { label: "Повара", value: "2853" }, + { label: "Повелитель смерти", value: "1909" }, + { label: "Повествование в будущем времени", value: "2633" }, + { label: "Повествование в настоящем времени", value: "1826" }, + { label: "Повествование во втором лице", value: "166" }, + { label: "Повествование от нескольких лиц", value: "1157" }, + { label: "Повествование от первого лица", value: "1681" }, + { label: "Повседневность", value: "1677" }, + { label: "Повстанцы", value: "659" }, + { label: "Повторение судьбы", value: "1997" }, + { label: "Поглощение способностей", value: "2605" }, + { label: "Погони / Преследования", value: "1996" }, + { label: "Пограничный синдром", value: "710" }, + { label: "Погребение заживо", value: "1279" }, + { label: "Под одной крышей", value: "462" }, + { label: "Под старину (стилизация)", value: "2486" }, + { label: "Подарки", value: "1109" }, + { label: "Подвешивание", value: "914" }, + { label: "Подводный мир", value: "901" }, + { label: "Подземелья", value: "2314" }, + { label: "Подземный мир", value: "1453" }, + { label: "Подлость", value: "2625" }, + { label: "Подменыши", value: "2250" }, + { label: "Подпольные бои", value: "1389" }, + { label: "Подразумеваемая смерть персонажа", value: "2204" }, + { label: "Подростки", value: "218" }, + { label: "Подростковая беременность", value: "986" }, + { label: "Подростковая влюбленность", value: "581" }, + { label: "Подсознание", value: "2273" }, + { label: "Поедание разумных существ", value: "1795" }, + { label: "Пожарные", value: "2557" }, + { label: "Пожилые персонажи", value: "852" }, + { label: "Поза 69", value: "699" }, + { label: "Поиск работы", value: "2646" }, + { label: "Поиск родителей", value: "2033" }, + { label: "Поклонение телу", value: "712" }, + { label: "Покровительство", value: "2223" }, + { label: "Покушение на жизнь", value: "1057" }, + { label: "Покушение на свободу", value: "2655" }, + { label: "Полиамория", value: "1705" }, + { label: "Полиандрия", value: "761" }, + { label: "Полигиния", value: "760" }, + { label: "Политика", value: "1835" }, + { label: "Политики", value: "711" }, + { label: "Политические интриги", value: "183" }, + { label: "Полицейские", value: "14" }, + { label: "Половой диморфизм", value: "1780" }, + { label: "Полубоги", value: "437" }, + { label: "Полудемоны", value: "2872" }, + { label: "Полудраконы", value: "2859" }, + { label: "Полукровки", value: "368" }, + { label: "Польша", value: "777" }, + { label: "Полярные станции", value: "1493" }, + { label: "Помощь врагу", value: "1325" }, + { label: "Попаданцы: В реальный мир", value: "1499" }, + { label: "Попаданцы: В своем теле", value: "1412" }, + { label: "Попаданцы: В чужом теле", value: "1413" }, + { label: "Попаданцы: Из одного фандома в другой", value: "2699" }, + { label: "Попаданцы: Из фандома в ориджинал", value: "2193" }, + { label: "Попаданцы: По обмену", value: "2196" }, + { label: "Попаданчество", value: "1695" }, + { label: "Популярность", value: "2581" }, + { label: "Попытка изнасилования", value: "1440" }, + { label: "Порноактеры", value: "289" }, + { label: "Португалия", value: "1749" }, + { label: "Порты", value: "1028" }, + { label: "Поселки", value: "1298" }, + { label: "После таймскипа (Haikyuu!!)", value: "2906" }, + { label: "После таймскипа (Shingeki no Kyojin)", value: "2903" }, + { label: "Послевоенное время", value: "1080" }, + { label: "Последний раз", value: "2645" }, + { label: "Последний рубеж", value: "1178" }, + { label: "Последний шанс", value: "1209" }, + { label: "Последствия", value: "2491" }, + { label: "Последствия болезни", value: "2612" }, + { label: "Послеродовая депрессия", value: "988" }, + { label: "Посмертная любовь", value: "2670" }, + { label: "Посмертный персонаж", value: "2653" }, + { label: "Пост-Пацифист", value: "2408" }, + { label: "Пост-Рейхенбах", value: "1903" }, + { label: "Пост-третий сезон (Шерлок)", value: "1977" }, + { label: "Постапокалиптика", value: "1697" }, + { label: "ПостВБ", value: "2386" }, + { label: "Постканон", value: "6" }, + { label: "ПостРагнарек", value: "2537" }, + { label: "ПостХог", value: "1883" }, + { label: "ПостЭндгейм", value: "2179" }, + { label: "Потеря девственности", value: "1234" }, + { label: "Потеря конечностей", value: "1289" }, + { label: "Потеря магических способностей", value: "1430" }, + { label: "Потеря памяти", value: "36" }, + { label: "Потеря сверхспособностей", value: "1051" }, + { label: "Поттергад", value: "2417" }, + { label: "Похищение", value: "224" }, + { label: "Похороны", value: "786" }, + { label: "Почтовые работники", value: "1821" }, + { label: "Пошлый юмор", value: "1362" }, + { label: "Поэма", value: "1938" }, + { label: "Поэты", value: "357" }, + { label: "Пояс верности", value: "1779" }, + { label: "Правда или действие", value: "1982" }, + { label: "Практопия", value: "2249" }, + { label: "Пре-гет", value: "209" }, + { label: "Пре-Рош", value: "2047" }, + { label: "Пре-слэш", value: "207" }, + { label: "Пре-фемслэш", value: "208" }, + { label: "Предательство", value: "361" }, + { label: "Предвидение", value: "1876" }, + { label: "Предложение руки и сердца", value: "1081" }, + { label: "Предопределенность", value: "411" }, + { label: "Предрассудки", value: "2046" }, + { label: "Предсмертные сообщения", value: "2174" }, + { label: "Преканон", value: "7" }, + { label: "ПреКербер", value: "2726" }, + { label: "Прекрасная эпоха", value: "1809" }, + { label: "Прелюдия", value: "2395" }, + { label: "Пренебрежение гигиеной", value: "2921" }, + { label: "Пренебрежение жизнью", value: "2216" }, + { label: "Преодоление комплексов", value: "588" }, + { label: "Преподаватели", value: "403" }, + { label: "Преподаватель/Обучающийся", value: "2507" }, + { label: "Преступники", value: "1446" }, + { label: "Преступный мир", value: "12" }, + { label: "Прибрежные города", value: "984" }, + { label: "Приватный танец", value: "2786" }, + { label: "Привязанность", value: "2372" }, + { label: "Пригород", value: "452" }, + { label: "Приемные семьи", value: "844" }, + { label: "Признания в любви", value: "1049" }, + { label: "Призраки", value: "26" }, + { label: "Приключения", value: "21" }, + { label: "Приметы / Суеверия", value: "612" }, + { label: "Примирение", value: "660" }, + { label: "Принудительная феминизация", value: "656" }, + { label: "Принудительное лечение", value: "971" }, + { label: "Принудительные отношения", value: "2302" }, + { label: "Принудительный брак", value: "307" }, + { label: "Принудительный инцест", value: "2942" }, + { label: "Принуждение", value: "1323" }, + { label: "Принятие себя", value: "2754" }, + { label: "Прислуга", value: "804" }, + { label: "Прист-кинк", value: "342" }, + { label: "Приступы агрессии", value: "2788" }, + { label: "Притча", value: "1088" }, + { label: "Приюты для животных", value: "2345" }, + { label: "ПРЛ", value: "1092" }, + { label: "Проблемы доверия", value: "2208" }, + { label: "Проблемы с законом", value: "1007" }, + { label: "Проводники душ", value: "2348" }, + { label: "Программисты", value: "574" }, + { label: "Прогрессорство", value: "449" }, + { label: "Прогулки", value: "2462" }, + { label: "Продажа души", value: "887" }, + { label: "Прозопагнозия", value: "2013" }, + { label: "Производственный роман", value: "2119" }, + { label: "Проклятия", value: "875" }, + { label: "Пролапс", value: "2926" }, + { label: "Промискуитет", value: "1817" }, + { label: "Промышленные предприятия", value: "1456" }, + { label: "Пропавшие без вести", value: "2073" }, + { label: "Пропущенная сцена", value: "1702" }, + { label: "Пророчества", value: "834" }, + { label: "Просмотр порно", value: "2341" }, + { label: "Проституция", value: "178" }, + { label: "Протезы", value: "1581" }, + { label: "Противоположности", value: "948" }, + { label: "Противоречивые чувства", value: "2528" }, + { label: "Прошлое", value: "983" }, + { label: "Прощение", value: "1545" }, + { label: "Псевдо-инцест", value: "336" }, + { label: "Псевдо-мистика", value: "2159" }, + { label: "Псевдоисторический сеттинг", value: "1479" }, + { label: "Псионика", value: "2023" }, + { label: "Психиатрические больницы", value: "135" }, + { label: "Психические расстройства", value: "69" }, + { label: "Психоз", value: "1339" }, + { label: "Психологи / Психоаналитики", value: "611" }, + { label: "Психологическая война", value: "2595" }, + { label: "Психологические пытки", value: "2825" }, + { label: "Психологические травмы", value: "40" }, + { label: "Психологический мазохизм", value: "2212" }, + { label: "Психологический ужас", value: "1261" }, + { label: "Психологическое насилие", value: "836" }, + { label: "Психология", value: "1674" }, + { label: "Психопатия", value: "869" }, + { label: "Психосоматические расстройства", value: "1834" }, + { label: "Психотерапия", value: "958" }, + { label: "ПТСР", value: "425" }, + { label: "Публичное обнажение", value: "319" }, + { label: "Пурпурная проза", value: "599" }, + { label: "Пустоши", value: "1114" }, + { label: "Пустыни", value: "692" }, + { label: "Путешественники-исследователи", value: "888" }, + { label: "Путешествия", value: "894" }, + { label: "Пытки", value: "210" }, + { label: "Пьеса", value: "434" }, + { label: "Рабочие", value: "1771" }, + { label: "Рабство", value: "51" }, + { label: "Равнодушие", value: "2516" }, + { label: "Равные отношения", value: "2728" }, + { label: "Радикальная медицина", value: "731" }, + { label: "Радио", value: "974" }, + { label: "Разбойники", value: "473" }, + { label: "Развитие отношений", value: "1404" }, + { label: "Развод", value: "200" }, + { label: "Разговоры", value: "1401" }, + { label: "Раздвоение личности", value: "287" }, + { label: "Раздельное обучение", value: "1959" }, + { label: "Разлука / Прощания", value: "1104" }, + { label: "Разница в возрасте", value: "2" }, + { label: "Разница культур", value: "1079" }, + { label: "Разновозрастная дружба", value: "2402" }, + { label: "Разнополая дружба", value: "806" }, + { label: "Разоблачения", value: "2684" }, + { label: "Разочарования", value: "646" }, + { label: "Разрушение стереотипов", value: "2805" }, + { label: "Разрушение четвертой стены", value: "381" }, + { label: "Разрыв связи", value: "2582" }, + { label: "Разум роя", value: "1459" }, + { label: "Разумное оружие", value: "2675" }, + { label: "Разумные животные", value: "895" }, + { label: "Разумные растения", value: "1037" }, + { label: "Раптофилия", value: "729" }, + { label: "Расизм", value: "433" }, + { label: "Раскрытие личностей", value: "2120" }, + { label: "Раскрытие магии", value: "1878" }, + { label: "Расплата", value: "2464" }, + { label: "Рассказ в рассказе", value: "2077" }, + { label: "Расставание", value: "506" }, + { label: "Расстройства аутистического спектра", value: "541" }, + { label: "Расстройства цветового восприятия", value: "1330" }, + { label: "Расстройства шизофренического спектра", value: "912" }, + { label: "Растаманы", value: "857" }, + { label: "Расширенная Вселенная ЗВ", value: "1950" }, + { label: "Реабилитационные центры", value: "1467" }, + { label: "Реактивное расстройство привязанности", value: "2576" }, + { label: "Реакции (стилизация)", value: "1283" }, + { label: "Реализм", value: "1201" }, + { label: "Реалити-шоу", value: "2312" }, + { label: "Ревность", value: "544" }, + { label: "Революции", value: "585" }, + { label: "Регенерация", value: "1530" }, + { label: "Регресс", value: "450" }, + { label: "Регрессия возраста", value: "102" }, + { label: "Редкие заболевания", value: "1856" }, + { label: "Реинкарнация", value: "101" }, + { label: "Рейтинг за лексику", value: "276" }, + { label: "Рейтинг за насилие и/или жестокость", value: "277" }, + { label: "Рейтинг за секс", value: "278" }, + { label: "Религиозная нетерпимость", value: "2451" }, + { label: "Религиозные войны", value: "2911" }, + { label: "Религиозные темы и мотивы", value: "198" }, + { label: "Религиозный фанатизм", value: "2548" }, + { label: "Ренессанс", value: "239" }, + { label: "Репетиторы", value: "2413" }, + { label: "Репетиции", value: "2241" }, + { label: "Репродуктивное насилие", value: "2310" }, + { label: "Реставраторы", value: "2239" }, + { label: "Рестораны", value: "412" }, + { label: "Ретеллинг", value: "52" }, + { label: "Ретрофутуризм", value: "727" }, + { label: "Реформация", value: "2199" }, + { label: "Речь Посполитая", value: "1529" }, + { label: "Риветхеды", value: "2904" }, + { label: "Римминг", value: "170" }, + { label: "Риск", value: "2467" }, + { label: "Рискованная беременность", value: "998" }, + { label: "Ритуалы", value: "749" }, + { label: "Ритуальные услуги", value: "2362" }, + { label: "Роботы", value: "513" }, + { label: "Родео", value: "1314" }, + { label: "Родители-одиночки", value: "325" }, + { label: "Родительские чувства", value: "2308" }, + { label: "Родомагия", value: "1899" }, + { label: "Роды", value: "991" }, + { label: "Рождество", value: "211" }, + { label: "Розыгрыши", value: "1807" }, + { label: "Рокеры", value: "861" }, + { label: "Роковая женщина / Роковой мужчина", value: "982" }, + { label: "Роковое усилие", value: "2604" }, + { label: "Роллер-дерби", value: "1014" }, + { label: "Романтизация", value: "1898" }, + { label: "Романтика", value: "1664" }, + { label: "Романтическая дружба", value: "2307" }, + { label: "Ромком", value: "2768" }, + { label: "Российская империя", value: "475" }, + { label: "Россия", value: "701" }, + { label: "РПП", value: "286" }, + { label: "Румыния", value: "862" }, + { label: "Русалки", value: "32" }, + { label: "Русальная неделя", value: "1067" }, + { label: "Русреал", value: "53" }, + { label: "Руферы", value: "578" }, + { label: "Рыбалка", value: "855" }, + { label: "Рыцари", value: "426" }, + { label: "Рыцарские турниры", value: "2759" }, + { label: "С чистого листа", value: "987" }, + { label: "Савойя", value: "1036" }, + { label: "Садизм / Мазохизм", value: "461" }, + { label: "Садовники", value: "1348" }, + { label: "Сайз-кинк", value: "100" }, + { label: "Самобытные культуры", value: "663" }, + { label: "Самовнушение", value: "2169" }, + { label: "Самовставка", value: "1689" }, + { label: "Самозванцы", value: "1811" }, + { label: "Самоистязание", value: "1386" }, + { label: "Самоопределение / Самопознание", value: "1278" }, + { label: "Самопожертвование", value: "750" }, + { label: "Самосуд", value: "1402" }, + { label: "Самоуничижение", value: "2667" }, + { label: "Самураи", value: "472" }, + { label: "Санатории", value: "223" }, + { label: "Сандалпанк", value: "1986" }, + { label: "Сарказм", value: "2225" }, + { label: "Сатира", value: "1944" }, + { label: "Сатиры", value: "264" }, + { label: "Сахарный диабет", value: "2609" }, + { label: "Сборник драбблов", value: "39" }, + { label: "Сборник лимериков", value: "1989" }, + { label: "Сборник пирожков", value: "743" }, + { label: "Сборник стихотворений", value: "600" }, + { label: "Сборник японской поэзии", value: "1351" }, + { label: "Свадьба", value: "184" }, + { label: "Сверхразумы", value: "966" }, + { label: "Сверхскорость", value: "1902" }, + { label: "Сверхспособности", value: "597" }, + { label: "Светлые властелины", value: "2596" }, + { label: "Светские мероприятия", value: "973" }, + { label: "Свидание вслепую", value: "741" }, + { label: "Свидания", value: "1235" }, + { label: "Свидетели", value: "1242" }, + { label: "Свингерство", value: "203" }, + { label: "Свобода", value: "2166" }, + { label: "Свободные отношения", value: "255" }, + { label: "Сводничество", value: "568" }, + { label: "Сводные родственники", value: "1445" }, + { label: "Святые", value: "393" }, + { label: "Сгенерировано ИИ", value: "3014" }, + { label: "СДВГ", value: "539" }, + { label: "Севвитус", value: "1871" }, + { label: "Северная Корея", value: "2767" }, + { label: "Северус Снейп жив", value: "2406" }, + { label: "Сегрегация", value: "2158" }, + { label: "Секретари", value: "1170" }, + { label: "Секретные миссии", value: "1829" }, + { label: "Секс без обязательств", value: "387" }, + { label: "Секс в воде", value: "718" }, + { label: "Секс в нетрезвом виде", value: "1110" }, + { label: "Секс в одежде", value: "1013" }, + { label: "Секс в публичных местах", value: "123" }, + { label: "Секс в транспорте", value: "124" }, + { label: "Секс в церкви", value: "2968" }, + { label: "Секс во время беременности", value: "279" }, + { label: "Секс во время болезни", value: "1365" }, + { label: "Секс во время менструации", value: "153" }, + { label: "Секс на камеру", value: "1101" }, + { label: "Секс на природе", value: "1256" }, + { label: "Секс перед зеркалом", value: "1255" }, + { label: "Секс по расчету", value: "1212" }, + { label: "Секс по телефону", value: "133" }, + { label: "Секс при посторонних", value: "2514" }, + { label: "Секс с воображаемыми партнерами", value: "2276" }, + { label: "Секс с использованием магии", value: "1563" }, + { label: "Секс с использованием одурманивающих веществ", value: "2635" }, + { label: "Секс с использованием посторонних предметов", value: "1661" }, + { label: "Секс с использованием сверхспособностей", value: "2610" }, + { label: "Секс со смертельным исходом", value: "1171" }, + { label: "Секс-игрушки", value: "176" }, + { label: "Секс-индустрия", value: "447" }, + { label: "Секс-клубы / Секс-вечеринки", value: "936" }, + { label: "Секс-куклы", value: "1202" }, + { label: "Секс-магия", value: "1131" }, + { label: "Секс-машины", value: "1112" }, + { label: "Секс-шопы", value: "739" }, + { label: "Сексизм", value: "464" }, + { label: "Сексомния", value: "2024" }, + { label: "Секстинг", value: "2215" }, + { label: "Сексуальная неопытность", value: "1717" }, + { label: "Сексуальное насилие", value: "2495" }, + { label: "Сексуальное обучение", value: "967" }, + { label: "Сексуальное рабство", value: "1353" }, + { label: "Сексуальные фобии", value: "1537" }, + { label: "Селфхарм", value: "76" }, + { label: "Селфцест", value: "1708" }, + { label: "Семейная сага", value: "920" }, + { label: "Семейные тайны", value: "779" }, + { label: "Семейный бизнес", value: "2338" }, + { label: "Семьи", value: "220" }, + { label: "Сенсорная депривация", value: "282" }, + { label: "Сенсорная перегрузка", value: "2351" }, + { label: "Сентиментальность", value: "2567" }, + { label: "Серая мораль", value: "839" }, + { label: "Серая мышь", value: "1250" }, + { label: "Серая реальность", value: "2278" }, + { label: "Серийные насильники", value: "1942" }, + { label: "Серийные убийцы", value: "193" }, + { label: "Серфинг", value: "764" }, + { label: "Сиамские близнецы", value: "1252" }, + { label: "Сибари", value: "131" }, + { label: "Сиблинги", value: "617" }, + { label: "Сидение на лице", value: "713" }, + { label: "Силкпанк", value: "1813" }, + { label: "Симбиоз", value: "849" }, + { label: "Символизм", value: "538" }, + { label: "Симфорофилия", value: "492" }, + { label: "Синдром восьмиклассника", value: "2032" }, + { label: "Синдром выжившего", value: "1100" }, + { label: "Синдром Дауна", value: "2106" }, + { label: "Синдром Котара", value: "2765" }, + { label: "Синдром Питера Пэна", value: "687" }, + { label: "Синдром Туретта", value: "946" }, + { label: "Синестезия", value: "960" }, + { label: "Сирены", value: "1830" }, + { label: "Сириус Блэк жив", value: "2617" }, + { label: "Сироты", value: "689" }, + { label: "Ситком", value: "2553" }, + { label: "Сказка", value: "288" }, + { label: "Скайпанк", value: "976" }, + { label: "Скандинавия", value: "781" }, + { label: "Скандинавская мифология", value: "2304" }, + { label: "Сквиртинг", value: "950" }, + { label: "Сквозное видение", value: "1280" }, + { label: "Скейтбординг", value: "1395" }, + { label: "Скелеты", value: "1766" }, + { label: "Скинхэды", value: "1757" }, + { label: "Скрытая беременность", value: "2580" }, + { label: "Скрытность", value: "2577" }, + { label: "Скрытые способности", value: "2579" }, + { label: "Скрытый Этаж", value: "2763" }, + { label: "Скульпторы", value: "2976" }, + { label: "Слатшейминг", value: "2910" }, + { label: "Следующее поколение", value: "698" }, + { label: "Слежка", value: "2102" }, + { label: "Слепота", value: "413" }, + { label: "Слияние", value: "2324" }, + { label: "Словакия", value: "2938" }, + { label: "Словения", value: "1788" }, + { label: "Сложные отношения", value: "326" }, + { label: "Слом личности", value: "623" }, + { label: "Слоуберн", value: "19" }, + { label: "Служебные животные", value: "1506" }, + { label: "Служебные отношения", value: "1347" }, + { label: "Служебный роман", value: "75" }, + { label: "Слухи / Сплетни", value: "2809" }, + { label: "Случайные убийства", value: "2673" }, + { label: "Случайный брак", value: "304" }, + { label: "Случайный поцелуй", value: "2852" }, + { label: "Случайный секс", value: "1275" }, + { label: "Смена имени", value: "2094" }, + { label: "Смена мировоззрения", value: "2865" }, + { label: "Смена сущности", value: "1707" }, + { label: "Смертельные заболевания", value: "1132" }, + { label: "Смерть антагониста", value: "2650" }, + { label: "Смерть всех персонажей", value: "2611" }, + { label: "Смерть второстепенных персонажей", value: "1713" }, + { label: "Смерть животных", value: "2210" }, + { label: "Смерть основных персонажей", value: "1647" }, + { label: "СМИ", value: "2656" }, + { label: "Смирение", value: "2272" }, + { label: "Смотрины", value: "1495" }, + { label: "Смутное время", value: "2002" }, + { label: "Снайперы", value: "1762" }, + { label: "Сновидения", value: "490" }, + { label: "Сноубординг", value: "2180" }, + { label: "Соблазнение / Ухаживания", value: "616" }, + { label: "Собственничество", value: "908" }, + { label: "Советпанк", value: "397" }, + { label: "Советский Союз", value: "468" }, + { label: "Совместная кровать", value: "1229" }, + { label: "Совместное купание", value: "1301" }, + { label: "Современное искусство", value: "1087" }, + { label: "Современность", value: "80" }, + { label: "Согласование с каноном", value: "1388" }, + { label: "Сожаления", value: "550" }, + { label: "Создание общества", value: "2643" }, + { label: "Созидание", value: "2590" }, + { label: "Сокровища", value: "893" }, + { label: "Сокрытие убийства", value: "2311" }, + { label: "Солянка из Сансов", value: "2515" }, + { label: "Сомелье / Бармены", value: "865" }, + { label: "Сомнамбулизм", value: "1394" }, + { label: "Сомнения", value: "1544" }, + { label: "Сомнофилия", value: "95" }, + { label: "Сонный паралич", value: "1203" }, + { label: "Соперничество", value: "671" }, + { label: "Сорванная свадьба", value: "2044" }, + { label: "Сострадание", value: "885" }, + { label: "Состязания", value: "910" }, + { label: "Состязания с участием животных", value: "1154" }, + { label: "Сотриголова — отец Хитоши Шинсо", value: "2877" }, + { label: "Соулмейты", value: "1696" }, + { label: "Соулмейты: Действия", value: "2575" }, + { label: "Соулмейты: Изменение восприятия", value: "1400" }, + { label: "Соулмейты: Контакт через кожу", value: "2608" }, + { label: "Соулмейты: Ментальная связь", value: "2841" }, + { label: "Соулмейты: Общая боль", value: "2583" }, + { label: "Соулмейты: Общие эмоции", value: "2637" }, + { label: "Соулмейты: Опознавательные фразы", value: "1399" }, + { label: "Соулмейты: Предметы", value: "2563" }, + { label: "Соулмейты: Предпочтения", value: "2521" }, + { label: "Соулмейты: Разноцветные глаза", value: "2461" }, + { label: "Соулмейты: Ранения", value: "2134" }, + { label: "Соулмейты: Сны", value: "2414" }, + { label: "Соулмейты: Тактильный контакт", value: "2190" }, + { label: "Соулмейты: Татуировки", value: "2711" }, + { label: "Соулмейты: Физические проявления", value: "2864" }, + { label: "Социальная фантастика", value: "591" }, + { label: "Социальные темы и мотивы", value: "1017" }, + { label: "Социальные эксперименты", value: "2756" }, + { label: "Социальный паразитизм", value: "2444" }, + { label: "Социофобия", value: "826" }, + { label: "Спарринги", value: "1575" }, + { label: "Спасатели", value: "392" }, + { label: "Спасение жизни", value: "1299" }, + { label: "Спасение мира", value: "812" }, + { label: "Спектрофилия", value: "2634" }, + { label: "Спецагенты", value: "401" }, + { label: "Спиритизм", value: "1478" }, + { label: "Сплошинг", value: "424" }, + { label: "Спонтанный секс", value: "2918" }, + { label: "Спорт", value: "15" }, + { label: "Спортзалы", value: "1359" }, + { label: "Сражения", value: "2868" }, + { label: "Средневековье", value: "238" }, + { label: "Ссоры / Конфликты", value: "645" }, + { label: "Стаи", value: "2884" }, + { label: "Сталкеры / Диггеры (субкультура)", value: "1029" }, + { label: "Сталкинг", value: "605" }, + { label: "Становление героя", value: "680" }, + { label: "Стёб", value: "1690" }, + { label: "Стереотипы", value: "809" }, + { label: "Стимпанк", value: "25" }, + { label: "Стимуляция руками", value: "225" }, + { label: "Стихи", value: "1692" }, + { label: "Стихийные бедствия", value: "1352" }, + { label: "Стихотворные вставки", value: "2404" }, + { label: "СтихоТворцы", value: "3015" }, + { label: "Стокгольмский синдром / Лимский синдром", value: "1217" }, + { label: "Столетняя война", value: "2243" }, + { label: "Сторонний рассказчик", value: "1383" }, + { label: "Стоунпанк", value: "1987" }, + { label: "Страдания", value: "2009" }, + { label: "Странногеддон", value: "1882" }, + { label: "Страны Балтии", value: "1031" }, + { label: "Страпоны", value: "380" }, + { label: "Страсть", value: "1955" }, + { label: "Страх перед родителями", value: "2332" }, + { label: "Стрельба из лука", value: "1791" }, + { label: "Стримеры / Ютуберы", value: "1473" }, + { label: "Стрип-клубы", value: "79" }, + { label: "Стрит-арт", value: "1012" }, + { label: "Строители", value: "1774" }, + { label: "Студенты", value: "274" }, + { label: "Студенты по обмену", value: "859" }, + { label: "Студенческие городки", value: "753" }, + { label: "Субкультуры", value: "1061" }, + { label: "Субординация", value: "1099" }, + { label: "Суд", value: "827" }, + { label: "Суккубы / Инкубы", value: "334" }, + { label: "Сумасшествие", value: "1239" }, + { label: "Сунагакуре", value: "2476" }, + { label: "Супергерои", value: "67" }, + { label: "Суперзлодеи", value: "1205" }, + { label: "Супермаркеты", value: "843" }, + { label: "Суррогатная беременность", value: "1427" }, + { label: "Сухой закон", value: "2100" }, + { label: "Сухой оргазм", value: "2818" }, + { label: "Сфера ИТ", value: "2534" }, + { label: "Сфинксы", value: "1349" }, + { label: "Сценарий (стилизация)", value: "323" }, + { label: "Счастливый финал", value: "3" }, + { label: "США", value: "640" }, + { label: "Съемочная площадка", value: "410" }, + { label: "Сын Тьмы", value: "2175" }, + { label: "Сэнгоку Джидай", value: "2380" }, + { label: "Сэнгоку Дзидай", value: "2834" }, + { label: "Сэцубун", value: "2969" }, + { label: "Сюрреализм / Фантасмагория", value: "872" }, + { label: "Т/И / Л/И", value: "167" }, + { label: "Таджикистан", value: "2974" }, + { label: "Таиланд", value: "1034" }, + { label: "Тайна происхождения", value: "662" }, + { label: "Тайная личность", value: "194" }, + { label: "Тайная сущность", value: "1512" }, + { label: "Тайны / Секреты", value: "906" }, + { label: "Тайные друзья (игра)", value: "2908" }, + { label: "Тайные организации", value: "572" }, + { label: "Тайные поклонники", value: "1374" }, + { label: "Тайный НапиСанта", value: "2972" }, + { label: "Таксисты", value: "2679" }, + { label: "Тактильный голод", value: "2197" }, + { label: "Тактильный контакт", value: "2875" }, + { label: "Танабата", value: "2340" }, + { label: "Танцы", value: "108" }, + { label: "Танцы на пилоне", value: "1370" }, + { label: "Таро", value: "642" }, + { label: "Тату-салоны", value: "324" }, + { label: "Татуировки", value: "327" }, + { label: "Твинцест", value: "1652" }, + { label: "Творческий кризис", value: "2107" }, + { label: "Театры", value: "195" }, + { label: "Телекинез", value: "951" }, + { label: "Телепатия", value: "127" }, + { label: "Телепортация", value: "1794" }, + { label: "Телесные жидкости", value: "1220" }, + { label: "Телесные наказания", value: "132" }, + { label: "Телесный хоррор", value: "212" }, + { label: "Телохранители", value: "400" }, + { label: "Темная сторона (Гарри Поттер)", value: "1937" }, + { label: "Темная сторона Силы", value: "1946" }, + { label: "Темная Эра (Bungou Stray Dogs)", value: "2494" }, + { label: "Темное прошлое", value: "2229" }, + { label: "Темное фэнтези", value: "1963" }, + { label: "Темные властелины", value: "1224" }, + { label: "Темные эльфы", value: "2597" }, + { label: "Темный романтизм", value: "2128" }, + { label: "Темы ментального здоровья", value: "2344" }, + { label: "Темы этики и морали", value: "1106" }, + { label: "Теннис", value: "1066" }, + { label: "Тентакли", value: "129" }, + { label: "Теория инверсии", value: "1980" }, + { label: "Теория Одурманивания", value: "2493" }, + { label: "Термокинез", value: "2793" }, + { label: "Террористы", value: "556" }, + { label: "Теслапанк", value: "1988" }, + { label: "Техники", value: "1272" }, + { label: "Техногенные катастрофы", value: "526" }, + { label: "Технокинез", value: "1271" }, + { label: "Технологии", value: "1232" }, + { label: "Технотриллер", value: "649" }, + { label: "Течка / Гон", value: "283" }, + { label: "Тим Дрейк — Джокер-младший", value: "2454" }, + { label: "Тим Дрейк — Кэтлэд", value: "2453" }, + { label: "Тихий секс", value: "1185" }, + { label: "Товарищи по несчастью", value: "2666" }, + { label: "Токсичные родственники", value: "2008" }, + { label: "Том Реддл — не Темный Лорд", value: "2394" }, + { label: "Томбои", value: "565" }, + { label: "Томгерлз", value: "848" }, + { label: "Торговля органами", value: "1358" }, + { label: "Торговцы", value: "2098" }, + { label: "Торговые центры", value: "1416" }, + { label: "Тоталитаризм", value: "1169" }, + { label: "Травники / Травницы", value: "1211" }, + { label: "Трагедия", value: "919" }, + { label: "Трагикомедия", value: "1454" }, + { label: "Традиции", value: "1463" }, + { label: "Трансгендерные персонажи", value: "175" }, + { label: "Трансплантация", value: "2364" }, + { label: "Трансфобия", value: "420" }, + { label: "Тревожное расстройство личности", value: "1914" }, + { label: "Тревожность", value: "1318" }, + { label: "Трейлеры", value: "785" }, + { label: "Тренировки / Обучение", value: "876" }, + { label: "Третий лишний", value: "1176" }, + { label: "Третья мировая", value: "624" }, + { label: "Три корейских государства", value: "2322" }, + { label: "Трикстеры", value: "1507" }, + { label: "Триллер", value: "169" }, + { label: "Трилогия Юникрона", value: "2378" }, + { label: "Трипофобия", value: "2342" }, + { label: "Трисам", value: "758" }, + { label: "Трихотилломания", value: "2185" }, + { label: "Тролли", value: "190" }, + { label: "Трудные отношения с родителями", value: "1490" }, + { label: "Трудный характер", value: "2123" }, + { label: "Трудоголизм", value: "1848" }, + { label: "Трущобы", value: "2822" }, + { label: "Туалетный юмор", value: "1247" }, + { label: "Туберкулез", value: "2163" }, + { label: "Турция", value: "794" }, + { label: "Тщеславие", value: "2578" }, + { label: "Тюрьмы / Темницы", value: "117" }, + { label: "Тяжелое детство", value: "2614" }, + { label: "Убийства", value: "621" }, + { label: "Убийственная пара", value: "1918" }, + { label: "Убийца поневоле", value: "2671" }, + { label: "Уважение", value: "2688" }, + { label: "Ужасы", value: "1679" }, + { label: "Узбекистан", value: "1293" }, + { label: "Уизлигады", value: "1862" }, + { label: "Украина", value: "716" }, + { label: "Укрытия", value: "199" }, + { label: "Уличные артисты", value: "2550" }, + { label: "Уличные гонки", value: "880" }, + { label: "Умбракинез", value: "2355" }, + { label: "Универсалы", value: "657" }, + { label: "Унижения", value: "1319" }, + { label: "Упоминания аддикций", value: "2848" }, + { label: "Упоминания алкоголя", value: "2415" }, + { label: "Упоминания беременности", value: "2057" }, + { label: "Упоминания войны", value: "2707" }, + { label: "Упоминания жестокости", value: "2447" }, + { label: "Упоминания зоофилии", value: "2620" }, + { label: "Упоминания измены", value: "2876" }, + { label: "Упоминания изнасилования", value: "521" }, + { label: "Упоминания инвалидности", value: "2705" }, + { label: "Упоминания инцеста", value: "2285" }, + { label: "Упоминания каннибализма", value: "2427" }, + { label: "Упоминания курения", value: "2450" }, + { label: "Упоминания мужской беременности", value: "2226" }, + { label: "Упоминания наркотиков", value: "144" }, + { label: "Упоминания насилия", value: "2207" }, + { label: "Упоминания нездоровых отношений", value: "2892" }, + { label: "Упоминания проституции", value: "2618" }, + { label: "Упоминания пыток", value: "2410" }, + { label: "Упоминания расизма", value: "2737" }, + { label: "Упоминания религии", value: "1048" }, + { label: "Упоминания самоубийства", value: "77" }, + { label: "Упоминания секса", value: "2747" }, + { label: "Упоминания селфхарма", value: "2105" }, + { label: "Упоминания смертей", value: "2081" }, + { label: "Упоминания смертей животных", value: "2211" }, + { label: "Упоминания телесного хоррора", value: "2466" }, + { label: "Упоминания терроризма", value: "774" }, + { label: "Упоминания убийств", value: "1501" }, + { label: "Управление оргазмом", value: "118" }, + { label: "Управление стихиями", value: "2091" }, + { label: "Уретральное проникновение", value: "1469" }, + { label: "Уро-кинк", value: "762" }, + { label: "Условное бессмертие", value: "2117" }, + { label: "Уся / Сянься", value: "2714" }, + { label: "Утопия", value: "350" }, + { label: "Утраченная тройка", value: "2535" }, + { label: "Утренний секс", value: "2882" }, + { label: "Уход за персонажами с инвалидностью", value: "2133" }, + { label: "Ухудшение отношений", value: "1219" }, + { label: "Учебные заведения", value: "1694" }, + { label: "Ученые", value: "402" }, + { label: "Уют", value: "2738" }, + { label: "Фавориты", value: "2135" }, + { label: "Фамильяры", value: "1045" }, + { label: "Фан-Бинго", value: "2957" }, + { label: "Фан-Фанты", value: "2953" }, + { label: "Фандомная аналитика", value: "742" }, + { label: "Фандомная Битва", value: "253" }, + { label: "Фансервис", value: "2483" }, + { label: "Фантастика", value: "1670" }, + { label: "Фастберн", value: "2016" }, + { label: "Фастфуд / Закусочные", value: "1025" }, + { label: "Феи", value: "191" }, + { label: "Фельчинг", value: "2368" }, + { label: "Фемдом", value: "54" }, + { label: "Феминистские темы и мотивы", value: "523" }, + { label: "Феминитивы", value: "390" }, + { label: "Фениксы", value: "1215" }, + { label: "Феодализм", value: "1504" }, + { label: "Фермы / Ранчо", value: "329" }, + { label: "Фестивали", value: "1006" }, + { label: "Фехтование", value: "1775" }, + { label: "Фиггинг", value: "1439" }, + { label: "Фигурное катание", value: "460" }, + { label: "Физиотерапия", value: "2222" }, + { label: "Физическая сверхсила", value: "2880" }, + { label: "Фикрайтеры / Фикридеры", value: "1284" }, + { label: "Фиксированная раскладка", value: "1344" }, + { label: "Фиктивные отношения", value: "308" }, + { label: "Фиктивный брак", value: "34" }, + { label: "Философия", value: "1675" }, + { label: "Финляндия", value: "1133" }, + { label: "Фистинг", value: "151" }, + { label: "Флафф", value: "1667" }, + { label: "Флирт", value: "349" }, + { label: "Флот", value: "846" }, + { label: "Фобии", value: "977" }, + { label: "Фольклор и предания", value: "1273" }, + { label: "Форнифилия", value: "580" }, + { label: "Фотографы", value: "348" }, + { label: "Фотокинез", value: "1805" }, + { label: "Франция", value: "691" }, + { label: "Фред Уизли жив", value: "2941" }, + { label: "Фроттаж", value: "96" }, + { label: "Фуд-плей", value: "509" }, + { label: "Фуд-фетиш", value: "2168" }, + { label: "Фурри", value: "996" }, + { label: "Фут-фетиш", value: "432" }, + { label: "Футбол", value: "458" }, + { label: "Фэйри", value: "2028" }, + { label: "Фэнтези", value: "1669" }, + { label: "Хакеры", value: "340" }, + { label: "Ханами", value: "1155" }, + { label: "Ханахаки", value: "45" }, + { label: "Ханжество", value: "882" }, + { label: "Характерная для канона жестокость", value: "896" }, + { label: "Харассмент", value: "477" }, + { label: "Хиерофилия", value: "2366" }, + { label: "Химеры", value: "816" }, + { label: "Химическое оружие", value: "1186" }, + { label: "Химэдэрэ / Оджидэрэ", value: "1363" }, + { label: "Хип-хоп (субкультура)", value: "1822" }, + { label: "Хиппи", value: "784" }, + { label: "Хиромантия", value: "2749" }, + { label: "Хирургическая коррекция пола", value: "1249" }, + { label: "Хирургические операции", value: "1845" }, + { label: "Хобби", value: "1161" }, + { label: "Хогсмид", value: "2388" }, + { label: "Хоккей", value: "828" }, + { label: "Холодная война", value: "2140" }, + { label: "Холодное оружие", value: "1187" }, + { label: "Хорватия", value: "1433" }, + { label: "Хороший плохой финал", value: "1266" }, + { label: "Хронические заболевания", value: "1267" }, + { label: "Хронокинез", value: "1447" }, + { label: "Хронофантастика", value: "56" }, + { label: "Хтонические существа", value: "504" }, + { label: "Художники", value: "140" }, + { label: "Хуманизация", value: "177" }, + { label: "Хэллоуин", value: "205" }, + { label: "Хюльдры", value: "1397" }, + { label: "Цветочные магазины", value: "164" }, + { label: "Целители", value: "1107" }, + { label: "Церкви", value: "533" }, + { label: "Цикличность", value: "1979" }, + { label: "Цирки", value: "259" }, + { label: "Цукими", value: "1798" }, + { label: "Цундэрэ", value: "1137" }, + { label: "Цыгане", value: "1091" }, + { label: "Чайлдфри", value: "592" }, + { label: "Чайные церемонии", value: "2416" }, + { label: "Частичный ООС", value: "1409" }, + { label: "Частные детективы", value: "427" }, + { label: "Черная археология", value: "2503" }, + { label: "Черная мораль", value: "2438" }, + { label: "Чернобыльская катастрофа", value: "775" }, + { label: "Черный юмор", value: "66" }, + { label: "Чехия", value: "1021" }, + { label: "Чиновники", value: "1991" }, + { label: "Чирлидинг", value: "1431" }, + { label: "Чистокровные AU (Гарри Поттер)", value: "1905" }, + { label: "Чосон", value: "571" }, + { label: "Чувство вины", value: "902" }, + { label: "Чумные доктора", value: "1125" }, + { label: "Чхусок", value: "2973" }, + { label: "Шаманы", value: "484" }, + { label: "Шантаж", value: "569" }, + { label: "Шармбатон", value: "2733" }, + { label: "Швейцария", value: "1022" }, + { label: "Шейпшифтеры", value: "29" }, + { label: "Шелки", value: "2431" }, + { label: "Шифры", value: "2232" }, + { label: "Школьная иерархия", value: "2787" }, + { label: "Школьники", value: "2566" }, + { label: "Школьные годы Тома Реддла", value: "1913" }, + { label: "Школьные ОтМетки", value: "3017" }, + { label: "Школьные поездки", value: "2481" }, + { label: "Школьный роман", value: "2440" }, + { label: "Шопинг", value: "864" }, + { label: "Шоу-бизнес", value: "17" }, + { label: "Шпионы", value: "148" }, + { label: "Шрамирование", value: "891" }, + { label: "Шрамы", value: "328" }, + { label: "Эвтаназия", value: "1102" }, + { label: "Эгоизм", value: "2071" }, + { label: "Эдвардианская эпоха", value: "2975" }, + { label: "Эзотерические темы и мотивы", value: "2801" }, + { label: "Эйблизм", value: "453" }, + { label: "Эйдетическая память", value: "975" }, + { label: "Эйфория", value: "2458" }, + { label: "Экзамены", value: "2591" }, + { label: "Экзистенциальный кризис", value: "1200" }, + { label: "Экзорцизм", value: "494" }, + { label: "Экологи / Биологи", value: "631" }, + { label: "Экологический кризис", value: "485" }, + { label: "Экономический кризис", value: "1547" }, + { label: "Эксаудиризм", value: "2151" }, + { label: "Эксгибиционизм", value: "489" }, + { label: "Эксперимент", value: "1686" }, + { label: "Экстрасенсы", value: "371" }, + { label: "Экшн", value: "1673" }, + { label: "Электрокинез", value: "1857" }, + { label: "Электростимуляция", value: "807" }, + { label: "Элементы ангста", value: "2696" }, + { label: "Элементы гета", value: "1714" }, + { label: "Элементы дарка", value: "2703" }, + { label: "Элементы детектива", value: "2698" }, + { label: "Элементы драмы", value: "2697" }, + { label: "Элементы других видов отношений", value: "454" }, + { label: "Элементы мистики", value: "1324" }, + { label: "Элементы психологии", value: "2824" }, + { label: "Элементы романтики", value: "2742" }, + { label: "Элементы слэша", value: "1715" }, + { label: "Элементы ужасов", value: "2721" }, + { label: "Элементы фемслэша", value: "1716" }, + { label: "Элементы флаффа", value: "2731" }, + { label: "Элементы юмора / Элементы стёба", value: "2011" }, + { label: "Эльфы", value: "44" }, + { label: "Эметофилия", value: "1434" }, + { label: "Эмо", value: "641" }, + { label: "Эмоциональная одержимость", value: "1270" }, + { label: "Эмпатия", value: "1177" }, + { label: "Энергетический вампиризм", value: "818" }, + { label: "Эпидемии", value: "619" }, + { label: "Эпизод 23.5", value: "2469" }, + { label: "Эпилепсия", value: "1511" }, + { label: "Эпилог? Какой эпилог?", value: "2651" }, + { label: "Эпоха Бакумацу", value: "1472" }, + { label: "Эпоха Мэйдзи", value: "1435" }, + { label: "Эпоха Тайсё", value: "2015" }, + { label: "Эрик Киллмонгер жив", value: "2897" }, + { label: "Эрогуро", value: "1731" }, + { label: "Эротическая дрессировка", value: "2026" }, + { label: "Эротическая лактация", value: "284" }, + { label: "Эротическая мумификация", value: "415" }, + { label: "Эротическая сверхстимуляция", value: "1245" }, + { label: "Эротические наказания", value: "125" }, + { label: "Эротические ролевые игры", value: "111" }, + { label: "Эротические сны", value: "128" }, + { label: "Эротические фантазии", value: "561" }, + { label: "Эротический массаж", value: "1518" }, + { label: "Эротический перенос", value: "744" }, + { label: "Эротомания", value: "2922" }, + { label: "Эскапизм", value: "1552" }, + { label: "Эскорты", value: "922" }, + { label: "Эстетика", value: "2021" }, + { label: "ЭТЕРНА", value: "2948" }, + { label: "Этнические анклавы", value: "2732" }, + { label: "Этническое фэнтези", value: "667" }, + { label: "Эффект бабочки", value: "1572" }, + { label: "Ювелиры", value: "2964" }, + { label: "Южная Америка", value: "832" }, + { label: "Южная готика", value: "1077" }, + { label: "Южная Корея", value: "674" }, + { label: "Юмор", value: "1666" }, + { label: "Юристы", value: "333" }, + { label: "Я никогда не... (игра)", value: "1436" }, + { label: "Явное согласие", value: "1569" }, + { label: "Ядерная война", value: "889" }, + { label: "Язык жестов", value: "2962" }, + { label: "Язык животных", value: "1327" }, + { label: "Язык растений", value: "2622" }, + { label: "Язык цветов", value: "272" }, + { label: "Ямадад", value: "2916" }, + { label: "Янгирэ", value: "1257" }, + { label: "Яндэрэ", value: "1136" }, + { label: "Яогуаи", value: "2347" }, + { label: "Япония", value: "665" }, + { label: "Японские фестивали", value: "2555" }, + { label: "Ящеролюди", value: "682" }, + { label: "Abuse/Comfort", value: "2599" }, + { label: "Aged down", value: "229" }, + { label: "Aged up", value: "4" }, + { label: "Artfic", value: "68" }, + { label: "AU", value: "1683" }, + { label: "AU: Альтернативные способности", value: "2086" }, + { label: "AU: Без апокалипсиса", value: "2051" }, + { label: "AU: Без войны", value: "2305" }, + { label: "AU: Без магии", value: "1052" }, + { label: "AU: Без мистики", value: "2489" }, + { label: "AU: Без сверхспособностей", value: "1053" }, + { label: "AU: Без супергероев", value: "1152" }, + { label: "AU: Все гражданские", value: "2797" }, + { label: "AU: Все друзья", value: "2552" }, + { label: "AU: Все люди", value: "1151" }, + { label: "AU: Все хорошо", value: "2124" }, + { label: "AU: Другая страна", value: "2165" }, + { label: "AU: Другая эпоха", value: "2452" }, + { label: "AU: Другое детство", value: "2360" }, + { label: "AU: Другое знакомство", value: "2217" }, + { label: "AU: Другое семейное положение", value: "2902" }, + { label: "AU: Не родственники", value: "2167" }, + { label: "AU: Профессиональные герои (BNHA)", value: "2924" }, + { label: "AU: Родственники", value: "2164" }, + { label: "AU: Школа", value: "2532" }, + { label: "AU: Age swap", value: "917" }, + { label: "AU: Kitty Gang", value: "2928" }, + { label: "AU: Race swap", value: "933" }, + { label: "AU: Reverse", value: "1156" }, + { label: "AU: Role swap", value: "1054" }, + { label: "Authors Time", value: "2959" }, + { label: "BDSM", value: "1646" }, + { label: "BDSM-вселенная", value: "1078" }, + { label: "BDSM: Домспейс", value: "1444" }, + { label: "BDSM: Дроп", value: "1411" }, + { label: "BDSM: Сабспейс", value: "1410" }, + { label: "BDSM: Aftercare", value: "1523" }, + { label: "BEAST (Bungou Stray Dogs)", value: "2457" }, + { label: "Blackwatch", value: "2116" }, + { label: "Body inflation", value: "389" }, + { label: "Character study", value: "363" }, + { label: "Cockwarming", value: "318" }, + { label: "Dark academia", value: "2430" }, + { label: "DDLG / DDLB / MDLG / MDLB", value: "1033" }, + { label: "Dirty talk", value: "139" }, + { label: "Doggy style", value: "1361" }, + { label: "Dollification", value: "2780" }, + { label: "Dramione Authors Tournament", value: "2950" }, + { label: "EIQ", value: "271" }, + { label: "ER", value: "1687" }, + { label: "Final Haikyuu Quest", value: "2652" }, + { label: "Fix-it", value: "1" }, + { label: "Frenemies", value: "666" }, + { label: "Gangbang", value: "315" }, + { label: "Glory hole", value: "2188" }, + { label: "Golden Age Overwatch", value: "2112" }, + { label: "GOLockdown", value: "2391" }, + { label: "Gun play", value: "252" }, + { label: "Hurt/Comfort", value: "1682" }, + { label: "Hydra!AU", value: "1931" }, + { label: "Ironqrow week", value: "2209" }, + { label: "Kimetsu Gakuen", value: "2574" }, + { label: "Knife play", value: "152" }, + { label: "KPOP-AUFEST", value: "1851" }, + { label: "LARP", value: "1510" }, + { label: "LOVE ОтМетки", value: "2981" }, + { label: "Maleval week", value: "2382" }, + { label: "Marvel ГФИ", value: "2896" }, + { label: "Mate or die", value: "375" }, + { label: "Mirror!verse (Звездный путь)", value: "2899" }, + { label: "Moresome", value: "759" }, + { label: "N раз", value: "263" }, + { label: "Omnic Crisis Era", value: "2111" }, + { label: "ORIGINAL'S 2021", value: "2939" }, + { label: "Parentlock", value: "2053" }, + { label: "Patronus of Dramione", value: "2958" }, + { label: "Post-Fall of Overwatch", value: "2114" }, + { label: "Post-Recall", value: "2115" }, + { label: "PWP", value: "1680" }, + { label: "Rape/Revenge", value: "2195" }, + { label: "Reverse Falls", value: "1879" }, + { label: "RofR ДраМиВояж", value: "2954" }, + { label: "RST", value: "815" }, + { label: "RTFM", value: "2327" }, + { label: "Service top / Power bottom", value: "563" }, + { label: "Shingeki no Kyojin High School AU", value: "2037" }, + { label: "Shingeki! Kyojin Chuugakkou", value: "2038" }, + { label: "Sickfic", value: "422" }, + { label: "Songfic", value: "1684" }, + { label: "Spider-son & Iron-dad", value: "1885" }, + { label: "Sugar daddy", value: "106" }, + { label: "Sugar mommy", value: "160" }, + { label: "Superfamily (Мстители)", value: "2623" }, + { label: "Superior Iron Man", value: "2676" }, + { label: "Talon (Overwatch)", value: "2110" }, + { label: "The Big Four / The Super Six", value: "1954" }, + { label: "Trench AU", value: "2387" }, + { label: "TYL", value: "1933" }, + { label: "Underage", value: "1658" }, + { label: "URT", value: "2761" }, + { label: "UST", value: "1709" }, + { label: "Versefic", value: "2729" }, + { label: "Videofic", value: "2480" }, + { label: "Womance", value: "265" }, + { label: "X век", value: "240" }, + { label: "XI век", value: "241" }, + { label: "XII век", value: "242" }, + { label: "XIII век", value: "243" }, + { label: "XIV век", value: "244" }, + { label: "XIX век", value: "249" }, + { label: "XV век", value: "245" }, + { label: "XVI век", value: "246" }, + { label: "XVII век", value: "247" }, + { label: "XVIII век", value: "248" }, + { label: "XX век", value: "1004" }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} + +export default new ficbook(); + +interface Data { + data?: DataEntity[] | null; + more: boolean; +} +interface DataEntity { + id: string; + slug: string; + author_id: number; + user_slug: string; + author_username: string; + real_author_id: string | null; + direction: number; + part_cnt: number; + title: string; + description: string; + enable_marks: boolean; + marks_plus: number; + is_premium: boolean; + status: number; + last_updated: string; + readedDate?: string | null; + reward_cnt: number; + cover?: string | null; +} diff --git a/plugins/russian/jaomix.ts b/plugins/russian/jaomix.ts index 8cc7d01..d0f79d8 100644 --- a/plugins/russian/jaomix.ts +++ b/plugins/russian/jaomix.ts @@ -1,264 +1,263 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; - -class Jaomix implements Plugin.PluginBase { - id = "jaomix.ru"; - name = "Jaomix"; - site = "https://jaomix.ru"; - version = "1.0.0"; - icon = "src/ru/jaomix/icon.png"; - - - async popularNovels( - pageNo: number, - { - showLatestNovels, - filters, - }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + "/?searchrn"; - - if (filters?.lang?.value?.length) { - url += filters.lang.value - .map((lang, idx) => `&lang[${idx}]=${lang}`).join(""); - } - - if (filters?.genre?.value?.include?.length) { - url += filters.genre.value.include - .map((genre, idx) => `&genre[${idx}]=${genre}`).join(""); - } - - if (filters?.genre?.value?.exclude?.length) { - url += filters.genre.value.exclude - .map((genre, idx) => `&delgenre[${idx}]=del ${genre}`).join(""); - } - - url += "&sortcountchapt=" + (filters?.sortcountchapt?.value || "1"); - url += "&sortdaycreate=" + (filters?.sortdaycreate?.value || "1"); - url += - "&sortby=" + (showLatestNovels ? "upd" : filters?.sortby?.value || "topweek"); - url += "&gpage=" + pageNo; - - const body = await fetchApi(url).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - loadedCheerio('div[class="block-home"] > div[class="one"]').each( - function () { - const name = loadedCheerio(this) - .find('div[class="img-home"] > a') - .attr("title"); - const cover = loadedCheerio(this) - .find('div[class="img-home"] > a > img') - .attr("src") - ?.replace("-150x150", ""); - const url = loadedCheerio(this) - .find('div[class="img-home"] > a') - .attr("href"); - - if (!name || !url) return; - - novels.push({ name, cover, url }); - }, - ); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const body = await fetchApi(novelUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: loadedCheerio('div[class="desc-book"] > h1').text().trim(), - cover: loadedCheerio('div[class="img-book"] > img').attr("src"), - summary: loadedCheerio('div[id="desc-tab"]').text().trim() - }; - - loadedCheerio("#info-book > p").each(function () { - let text = loadedCheerio(this).text().replace(/,/g, "").split(" "); - if (text[0] === "Автор:") { - novel.author = text.splice(1).join(" "); - } else if (text[0] === "Жанры:") { - novel.genres = text.splice(1).join(","); - } else if (text[0] === "Статус:") { - novel.status = text.includes("продолжается") - ? NovelStatus.Ongoing - : NovelStatus.Completed; - } - }); - - const chapters: Plugin.ChapterItem[] = []; - - loadedCheerio(".download-chapter div.title").each(function () { - const name = loadedCheerio(this).find("a").attr("title"); - const releaseTime = loadedCheerio(this).find("time").text(); - const url = loadedCheerio(this).find("a").attr("href"); - if (!name || !url) return; - - chapters.push({ name, releaseTime, url }); - }); - - novel.chapters = chapters.reverse(); - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const body = await fetchApi(chapterUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - loadedCheerio('div[class="adblock-service"]').remove(); - const chapterText = loadedCheerio('div[class="entry-content"]').html(); - - return chapterText || ""; - } - - async searchNovels( - searchTerm: string, - pageNo: number | undefined = 1, - ): Promise { - const url = `${this.site}/?searchrn=${searchTerm}&but=Поиск по названию&sortby=upd&gpage=${pageNo}`; - const body = await fetchApi(url).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - loadedCheerio('div[class="block-home"] > div[class="one"]').each( - function () { - const name = loadedCheerio(this) - .find('div[class="img-home"] > a') - .attr("title"); - const cover = loadedCheerio(this) - .find('div[class="img-home"] > a > img') - .attr("src") - ?.replace("-150x150", ""); - const url = loadedCheerio(this) - .find('div[class="img-home"] > a') - .attr("href"); - - if (!name || !url) return; - - novels.push({ name, cover, url }); - }, - ); - - return novels; - } - fetchImage = fetchFile; - - filters = { - sortby: { - label: "Сортировка:", - value: "topweek", - options: [ - { label: "Топ недели", value: "topweek" }, - { label: "По алфавиту", value: "alphabet" }, - { label: "По дате обновления", value: "upd" }, - { label: "По дате создания", value: "new" }, - { label: "По просмотрам", value: "count" }, - { label: "Топ года", value: "topyear" }, - { label: "Топ дня", value: "topday" }, - { label: "Топ за все время", value: "alltime" }, - { label: "Топ месяца", value: "topmonth" }, - ], - type: FilterTypes.Picker, - }, - sortdaycreate: { - label: "Дата добавления:", - value: "1", - options: [ - { label: "Любое", value: "1" }, - { label: "От 120 до 180 дней", value: "1218" }, - { label: "От 180 до 365 дней", value: "1836" }, - { label: "От 30 до 60 дней", value: "3060" }, - { label: "От 365 дней", value: "365" }, - { label: "От 60 до 90 дней", value: "6090" }, - { label: "От 90 до 120 дней", value: "9012" }, - { label: "Послед. 30 дней", value: "30" }, - ], - type: FilterTypes.Picker, - }, - sortcountchapt: { - label: "Количество глав:", - value: "1", - options: [ - { label: "Любое кол-во глав", value: "1" }, - { label: "До 500", value: "500" }, - { label: "От 1000 до 2000", value: "1020" }, - { label: "От 2000 до 3000", value: "2030" }, - { label: "От 3000 до 4000", value: "3040" }, - { label: "От 4000", value: "400" }, - { label: "От 500 до 1000", value: "510" }, - ], - type: FilterTypes.Picker, - }, - genre: { - label: "Жанры:", - value: { include: [], exclude: [] }, - options: [ - { label: "Боевые Искусства", value: "Боевые Искусства" }, - { label: "Виртуальный Мир", value: "Виртуальный Мир" }, - { label: "Гарем", value: "Гарем" }, - { label: "Детектив", value: "Детектив" }, - { label: "Драма", value: "Драма" }, - { label: "Игра", value: "Игра" }, - { label: "Истории из жизни", value: "Истории из жизни" }, - { label: "Исторический", value: "Исторический" }, - { label: "История", value: "История" }, - { label: "Исэкай", value: "Исэкай" }, - { label: "Комедия", value: "Комедия" }, - { label: "Меха", value: "Меха" }, - { label: "Мистика", value: "Мистика" }, - { label: "Научная Фантастика", value: "Научная Фантастика" }, - { label: "Повседневность", value: "Повседневность" }, - { label: "Постапокалипсис", value: "Постапокалипсис" }, - { label: "Приключения", value: "Приключения" }, - { label: "Психология", value: "Психология" }, - { label: "Романтика", value: "Романтика" }, - { label: "Сверхъестественное", value: "Сверхъестественное" }, - { label: "Сёнэн", value: "Сёнэн" }, - { label: "Сёнэн-ай", value: "Сёнэн-ай" }, - { label: "Спорт", value: "Спорт" }, - { label: "Сэйнэн", value: "Сэйнэн" }, - { label: "Сюаньхуа", value: "Сюаньхуа" }, - { label: "Трагедия", value: "Трагедия" }, - { label: "Триллер", value: "Триллер" }, - { label: "Фантастика", value: "Фантастика" }, - { label: "Фэнтези", value: "Фэнтези" }, - { label: "Хоррор", value: "Хоррор" }, - { label: "Школьная жизнь", value: "Школьная жизнь" }, - { label: "Шоунен", value: "Шоунен" }, - { label: "Экшн", value: "Экшн" }, - { label: "Этти", value: "Этти" }, - { label: "Юри", value: "Юри" }, - { label: "Adult", value: "Adult" }, - { label: "Ecchi", value: "Ecchi" }, - { label: "Josei", value: "Josei" }, - { label: "Lolicon", value: "Lolicon" }, - { label: "Mature", value: "Mature" }, - { label: "Shoujo", value: "Shoujo" }, - { label: "Wuxia", value: "Wuxia" }, - { label: "Xianxia", value: "Xianxia" }, - { label: "Xuanhuan", value: "Xuanhuan" }, - { label: "Yaoi", value: "Yaoi" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - lang: { - label: "Выбрать языки:", - value: [], - options: [ - { label: "Английский", value: "Английский" }, - { label: "Китайский", value: "Китайский" }, - { label: "Корейский", value: "Корейский" }, - { label: "Японский", value: "Японский" }, - ], - type: FilterTypes.CheckboxGroup, - }, - } satisfies Filters; -} - -export default new Jaomix(); +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; + +class Jaomix implements Plugin.PluginBase { + id = "jaomix.ru"; + name = "Jaomix"; + site = "https://jaomix.ru"; + version = "1.0.0"; + icon = "src/ru/jaomix/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/?searchrn"; + + if (filters?.lang?.value?.length) { + url += filters.lang.value + .map((lang, idx) => `&lang[${idx}]=${lang}`) + .join(""); + } + + if (filters?.genre?.value?.include?.length) { + url += filters.genre.value.include + .map((genre, idx) => `&genre[${idx}]=${genre}`) + .join(""); + } + + if (filters?.genre?.value?.exclude?.length) { + url += filters.genre.value.exclude + .map((genre, idx) => `&delgenre[${idx}]=del ${genre}`) + .join(""); + } + + url += "&sortcountchapt=" + (filters?.sortcountchapt?.value || "1"); + url += "&sortdaycreate=" + (filters?.sortdaycreate?.value || "1"); + url += "&sortby=" + (showLatestNovels ? "upd" : filters?.sortby?.value || "topweek"); + url += "&gpage=" + pageNo; + + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = []; + loadedCheerio('div[class="block-home"] > div[class="one"]').each( + function () { + const name = loadedCheerio(this) + .find('div[class="img-home"] > a') + .attr("title"); + const cover = loadedCheerio(this) + .find('div[class="img-home"] > a > img') + .attr("src") + ?.replace("-150x150", ""); + const url = loadedCheerio(this) + .find('div[class="img-home"] > a') + .attr("href"); + + if (!name || !url) return; + + novels.push({ name, cover, url }); + }, + ); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const body = await fetchApi(novelUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: loadedCheerio('div[class="desc-book"] > h1').text().trim(), + cover: loadedCheerio('div[class="img-book"] > img').attr("src"), + summary: loadedCheerio('div[id="desc-tab"]').text().trim(), + }; + + loadedCheerio("#info-book > p").each(function () { + let text = loadedCheerio(this).text().replace(/,/g, "").split(" "); + if (text[0] === "Автор:") { + novel.author = text.splice(1).join(" "); + } else if (text[0] === "Жанры:") { + novel.genres = text.splice(1).join(","); + } else if (text[0] === "Статус:") { + novel.status = text.includes("продолжается") + ? NovelStatus.Ongoing + : NovelStatus.Completed; + } + }); + + const chapters: Plugin.ChapterItem[] = []; + const totalChapters = loadedCheerio(".download-chapter div.title").length; + + loadedCheerio(".download-chapter div.title").each((chapterIndex, element) => { + const name = loadedCheerio(element).find("a").attr("title"); + const url = loadedCheerio(element).find("a").attr("href"); + if (!name || !url) return; + + const releaseTime = loadedCheerio(element).find("time").text(); + chapters.push({ name, url, releaseTime, chapterNumber: totalChapters - chapterIndex }); + }); + + novel.chapters = chapters.reverse(); + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const body = await fetchApi(chapterUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + loadedCheerio('div[class="adblock-service"]').remove(); + const chapterText = loadedCheerio('div[class="entry-content"]').html(); + + return chapterText || ""; + } + + async searchNovels( + searchTerm: string, + pageNo: number | undefined = 1, + ): Promise { + const url = `${this.site}/?searchrn=${searchTerm}&but=Поиск по названию&sortby=upd&gpage=${pageNo}`; + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = []; + loadedCheerio('div[class="block-home"] > div[class="one"]').each( + function () { + const name = loadedCheerio(this) + .find('div[class="img-home"] > a') + .attr("title"); + const cover = loadedCheerio(this) + .find('div[class="img-home"] > a > img') + .attr("src") + ?.replace("-150x150", ""); + const url = loadedCheerio(this) + .find('div[class="img-home"] > a') + .attr("href"); + + if (!name || !url) return; + + novels.push({ name, cover, url }); + }, + ); + + return novels; + } + fetchImage = fetchFile; + + filters = { + sortby: { + label: "Сортировка:", + value: "topweek", + options: [ + { label: "Топ недели", value: "topweek" }, + { label: "По алфавиту", value: "alphabet" }, + { label: "По дате обновления", value: "upd" }, + { label: "По дате создания", value: "new" }, + { label: "По просмотрам", value: "count" }, + { label: "Топ года", value: "topyear" }, + { label: "Топ дня", value: "topday" }, + { label: "Топ за все время", value: "alltime" }, + { label: "Топ месяца", value: "topmonth" }, + ], + type: FilterTypes.Picker, + }, + sortdaycreate: { + label: "Дата добавления:", + value: "1", + options: [ + { label: "Любое", value: "1" }, + { label: "От 120 до 180 дней", value: "1218" }, + { label: "От 180 до 365 дней", value: "1836" }, + { label: "От 30 до 60 дней", value: "3060" }, + { label: "От 365 дней", value: "365" }, + { label: "От 60 до 90 дней", value: "6090" }, + { label: "От 90 до 120 дней", value: "9012" }, + { label: "Послед. 30 дней", value: "30" }, + ], + type: FilterTypes.Picker, + }, + sortcountchapt: { + label: "Количество глав:", + value: "1", + options: [ + { label: "Любое кол-во глав", value: "1" }, + { label: "До 500", value: "500" }, + { label: "От 1000 до 2000", value: "1020" }, + { label: "От 2000 до 3000", value: "2030" }, + { label: "От 3000 до 4000", value: "3040" }, + { label: "От 4000", value: "400" }, + { label: "От 500 до 1000", value: "510" }, + ], + type: FilterTypes.Picker, + }, + genre: { + label: "Жанры:", + value: { include: [], exclude: [] }, + options: [ + { label: "Боевые Искусства", value: "Боевые Искусства" }, + { label: "Виртуальный Мир", value: "Виртуальный Мир" }, + { label: "Гарем", value: "Гарем" }, + { label: "Детектив", value: "Детектив" }, + { label: "Драма", value: "Драма" }, + { label: "Игра", value: "Игра" }, + { label: "Истории из жизни", value: "Истории из жизни" }, + { label: "Исторический", value: "Исторический" }, + { label: "История", value: "История" }, + { label: "Исэкай", value: "Исэкай" }, + { label: "Комедия", value: "Комедия" }, + { label: "Меха", value: "Меха" }, + { label: "Мистика", value: "Мистика" }, + { label: "Научная Фантастика", value: "Научная Фантастика" }, + { label: "Повседневность", value: "Повседневность" }, + { label: "Постапокалипсис", value: "Постапокалипсис" }, + { label: "Приключения", value: "Приключения" }, + { label: "Психология", value: "Психология" }, + { label: "Романтика", value: "Романтика" }, + { label: "Сверхъестественное", value: "Сверхъестественное" }, + { label: "Сёнэн", value: "Сёнэн" }, + { label: "Сёнэн-ай", value: "Сёнэн-ай" }, + { label: "Спорт", value: "Спорт" }, + { label: "Сэйнэн", value: "Сэйнэн" }, + { label: "Сюаньхуа", value: "Сюаньхуа" }, + { label: "Трагедия", value: "Трагедия" }, + { label: "Триллер", value: "Триллер" }, + { label: "Фантастика", value: "Фантастика" }, + { label: "Фэнтези", value: "Фэнтези" }, + { label: "Хоррор", value: "Хоррор" }, + { label: "Школьная жизнь", value: "Школьная жизнь" }, + { label: "Шоунен", value: "Шоунен" }, + { label: "Экшн", value: "Экшн" }, + { label: "Этти", value: "Этти" }, + { label: "Юри", value: "Юри" }, + { label: "Adult", value: "Adult" }, + { label: "Ecchi", value: "Ecchi" }, + { label: "Josei", value: "Josei" }, + { label: "Lolicon", value: "Lolicon" }, + { label: "Mature", value: "Mature" }, + { label: "Shoujo", value: "Shoujo" }, + { label: "Wuxia", value: "Wuxia" }, + { label: "Xianxia", value: "Xianxia" }, + { label: "Xuanhuan", value: "Xuanhuan" }, + { label: "Yaoi", value: "Yaoi" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + lang: { + label: "Выбрать языки:", + value: [], + options: [ + { label: "Английский", value: "Английский" }, + { label: "Китайский", value: "Китайский" }, + { label: "Корейский", value: "Корейский" }, + { label: "Японский", value: "Японский" }, + ], + type: FilterTypes.CheckboxGroup, + }, + } satisfies Filters; +} + +export default new Jaomix(); diff --git a/plugins/russian/novelTL.ts b/plugins/russian/novelTL.ts index 2039ca3..1461050 100644 --- a/plugins/russian/novelTL.ts +++ b/plugins/russian/novelTL.ts @@ -1,957 +1,963 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { defaultCover } from "@libs/defaultCover"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -class TL implements Plugin.PluginBase { - id = "TL"; - name = "NovelTL"; - site = "https://novel.tl"; - version = "1.0.0"; - icon = "src/ru/noveltl/icon.png"; - - - async popularNovels( - page: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - const result = await fetchApi(this.site + "/api/site/v2/graphql", { - method: "post", - headers: { - Accept: "application/json, text/plain, */*", - "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", - "Content-Type": "application/json", - }, - referrer: this.site, - body: JSON.stringify({ - operationName: "Projects", - query: - "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", - variables: { - filter: { - tags: filters?.tags?.value || [], - genres: filters?.genres?.value || [], - }, - hostname: "novel.tl", - limit: 40, - page, - }, - }), - }); - - const json = (await result.json()) as response; - const novels: Plugin.NovelItem[] = []; - - json.data?.projects?.content?.forEach((novel) => - novels.push({ - name: novel.title, - url: "https://" + novel.fullUrl, - cover: novel?.covers?.[0]?.url - ? this.site + novel.covers[0].url - : defaultCover, - }), - ); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const result = await fetchApi(this.site + "/api/site/v2/graphql", { - method: "post", - headers: { - Accept: "application/json, text/plain, */*", - "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", - "Content-Type": "application/json", - }, - referrer: this.site, - body: JSON.stringify({ - operationName: "Book", - query: - 'query Book($url:String){project(project:{fullUrl:$url}){title translationStatus fullUrl covers{url}persons(langs:["ru","en","*"],roles:["author","illustrator"]){role name{firstName lastName}}genres{nameRu nameEng}tags{nameRu nameEng}annotation{text}subprojects{content{title volumes{content{shortName chapters{title publishDate fullUrl published}}}}}}}', - variables: { - url: novelUrl, - }, - }), - }); - const json = (await result.json()) as response; - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: json.data.project?.title, - cover: json.data.project?.covers?.[0]?.url - ? this.site + json.data.project.covers[0].url - : defaultCover, - summary: json.data.project?.annotation?.text, - status: - json.data.project?.translationStatus === "active" - ? NovelStatus.Ongoing - : NovelStatus.Completed, - }; - - const genres = [json.data.project?.tags, json.data.project?.genres] - .flat() - .map((item) => item?.nameRu || item?.nameEng) - .filter((item) => item); - - if (genres?.length) { - novel.genres = genres.join(", "); - } - - json.data.project?.persons?.forEach((person) => { - if (person.role == "author" && person.name.firstName) { - novel.author = - person.name.firstName + " " + (person.name?.lastName || ""); - } - }); - - const chapters: Plugin.ChapterItem[] = []; - json.data.project?.subprojects?.content?.forEach((work) => - work.volumes.content.forEach((volume) => - volume.chapters.forEach( - (chapter) => - chapter?.published && - chapters.push({ - name: volume.shortName + " " + chapter.title, - url: "https://" + chapter.fullUrl, - releaseTime: dayjs(chapter.publishDate).format("LLL"), - }), - ), - ), - ); - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(this.site + "/api/site/v2/graphql", { - method: "post", - headers: { - Accept: "application/json, text/plain, */*", - "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", - "Content-Type": "application/json", - }, - referrer: this.site, - body: JSON.stringify({ - query: - "query($url:String){chapter(chapter:{fullUrl:$url}){text{text}}}", - variables: { - url: chapterUrl, - }, - }), - }); - const json = (await result.json()) as response; - - const baseUrl = this.site; - const loadedCheerio = parseHTML(json.data.chapter?.text?.text || ""); - loadedCheerio("p > a[href]").each(function () { - let src = baseUrl + loadedCheerio(this).attr("href"); - if (!src.startsWith("http")) { - src = baseUrl + src; - } - loadedCheerio(this).find("picture").remove(); - loadedCheerio(this).removeAttr("href"); - loadedCheerio(``).appendTo(this); - }); - - const chapterText = loadedCheerio.html(); - return chapterText; - } - - async searchNovels( - searchTerm: string, - page: number | undefined = 1, - ): Promise { - const result = await fetchApi(this.site + "/api/site/v2/graphql", { - method: "post", - headers: { - Accept: "application/json, text/plain, */*", - "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", - "Content-Type": "application/json", - }, - referrer: this.site, - body: JSON.stringify({ - operationName: "Projects", - query: - "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", - variables: { - filter: { - query: searchTerm, - }, - hostname: "novel.tl", - limit: 40, - page, - }, - }), - }); - const json = (await result.json()) as response; - const novels: Plugin.NovelItem[] = []; - - json?.data?.projects?.content?.forEach((novel) => - novels.push({ - name: novel.title, - url: "https://" + novel.fullUrl, - cover: novel?.covers?.[0]?.url - ? this.site + novel.covers[0].url - : defaultCover, - }), - ); - - return novels; - } - - fetchImage = fetchFile; - - filters = { - tags: { - label: "Тэги", - value: [], - options: [ - { label: "Автоматы", value: "64" }, - { label: "Агрессивные персонажи", value: "26" }, - { label: "Ад", value: "338" }, - { label: "Адаптация манги", value: "8" }, - { label: "Академия", value: "5" }, - { label: "Актёрское искусство", value: "7" }, - { label: "Актеры озвучки", value: "746" }, - { label: "Алхимия", value: "27" }, - { label: "Альтернативная реальность", value: "30" }, - { label: "Амнезия", value: "31" }, - { label: "Анабиоз", value: "170" }, - { label: "Анал", value: "33" }, - { label: "Ангелы", value: "38" }, - { label: "Андроиды", value: "37" }, - { label: "Анти-рост персонажа", value: "25" }, - { label: "Антигерой", value: "43" }, - { label: "Антикварный магазин", value: "44" }, - { label: "Антимагия", value: "41" }, - { label: "Антиутопия", value: "225" }, - { label: "Апатичный главный герой", value: "46" }, - { label: "Апокалипсис", value: "47" }, - { label: "Аристократия", value: "51" }, - { label: "Армия", value: "53" }, - { label: "Артефакты", value: "58" }, - { label: "Асоциальный главный герой", value: "42" }, - { label: "Ассасины", value: "61" }, - { label: "Атмосфера Европы", value: "245" }, - { label: "Банды", value: "302" }, - { label: "БДСМ", value: "77" }, - { label: "Бедный главный герой", value: "541" }, - { label: "Бездушный главный герой", value: "143" }, - { label: "Беззаботный герой", value: "115" }, - { label: "Безответная любовь", value: "213" }, - { label: "Безответная любовь", value: "740" }, - { label: "Безработные", value: "377" }, - { label: "Беременность", value: "551" }, - { label: "Бескорыстная любовь", value: "733" }, - { label: "Бессмертные", value: "359" }, - { label: "Бесстрашный главный герой", value: "274" }, - { label: "Библиотека", value: "393" }, - { label: "Биография", value: "86" }, - { label: "Близнецы", value: "729" }, - { label: "Богачи", value: "753" }, - { label: "Боги", value: "318" }, - { label: "Богини", value: "316" }, - { label: "Богоподобный протагонист", value: "314" }, - { label: "Боевая академия", value: "75" }, - { label: "Боевая парочка", value: "547" }, - { label: "Божественная защита", value: "208" }, - { label: "Божественная сила", value: "317" }, - { label: "Болеющие персонажи", value: "648" }, - { label: "Борьба за власть", value: "548" }, - { label: "Брак по расчету", value: "55" }, - { label: "Братство", value: "106" }, - { label: "Братья или сёстры", value: "646" }, - { label: "Брошенные дети", value: "1" }, - { label: "Бывший герой", value: "290" }, - { label: "Вампиры", value: "742" }, - { label: "Ваншот", value: "496" }, - { label: "Вдали от родителей", value: "3" }, - { label: "Ведьмы", value: "756" }, - { label: "Везучий главный герой", value: "411" }, - { label: "Верные подданные", value: "410" }, - { label: "Вероломные герои/плетение интриг", value: "424" }, - { label: "Взросление персонажа", value: "24" }, - { label: "Видит то, чего остальной люд не в силах", value: "617" }, - { label: "Виртуальная реальность", value: "744" }, - { label: "Владелец магазина", value: "677" }, - { label: "Владелец уникального оружия", value: "736" }, - { label: "Властные персонажи", value: "545" }, - { label: "Влияние прошлого", value: "517" }, - { label: "Внезапное обогащение", value: "691" }, - { label: "Внезапное обретение силы", value: "690" }, - { label: "Военные хроники", value: "749" }, - { label: "Возвращение в родной мир", value: "587" }, - { label: "Война", value: "750" }, - { label: "Вокалоид", value: "745" }, - { label: "Волшебные твари", value: "413" }, - { label: "Воскрешение", value: "586" }, - { label: "Воспитанный главный герой", value: "537" }, - { label: "Воспоминания прошлого", value: "283" }, - { label: "Враги становятся союзниками", value: "238" }, - { label: "Врата в иной мир", value: "303" }, - { label: "Временной парадокс", value: "711" }, - { label: "Вторжение на Землю", value: "228" }, - { label: "Второй шанс", value: "608" }, - { label: "Выживание", value: "695" }, - { label: "Вынужденные условия проживания", value: "287" }, - { label: "Высокомерный герой", value: "56" }, - { label: "Гадание", value: "207" }, - { label: "Галлюцинации", value: "189" }, - { label: "Гарем рабов", value: "656" }, - { label: "Геймеры", value: "301" }, - { label: "Генетические модификации", value: "306" }, - { label: "Герои", value: "341" }, - { label: "Герои непонятного пола", value: "36" }, - { label: "Героиня девушка-сорванец", value: "715" }, - { label: "Героиня красавица", value: "81" }, - { label: "Герой влюбляется первым", value: "561" }, - { label: "Герой использует щит", value: "636" }, - { label: "Герой красавец", value: "329" }, - { label: "Герой со множеством тел", value: "564" }, - { label: "Герой-бесстыдник", value: "632" }, - { label: "Герой-извращенец", value: "521" }, - { label: "Герой-трудяга", value: "330" }, - { label: "Герой-яндере", value: "421" }, - { label: "Гетерохромия", value: "342" }, - { label: "Гильдии", value: "324" }, - { label: "Гиперопека", value: "509" }, - { label: "Главная героиня — женщина", value: "277" }, - { label: "Главный герой - гений", value: "308" }, - { label: "Главный герой - Моб", value: "446" }, - { label: "Главный герой — знаменитость", value: "263" }, - { label: "Главный герой — мужчина", value: "419" }, - { label: "Главный герой в поисках гарема", value: "331" }, - { label: "Главный герой заранее готовится", value: "557" }, - { label: "Главный герой не человек", value: "488" }, - { label: "Главный герой приёмный", value: "20" }, - { label: "Главный герой сразу силён", value: "563" }, - { label: "Гладиаторы", value: "310" }, - { label: "Глухой к любви герой", value: "194" }, - { label: "Гоблины", value: "313" }, - { label: "Големы", value: "319" }, - { label: "Гомункул", value: "347" }, - { label: "Горничные", value: "418" }, - { label: "Государственные интриги", value: "212" }, - { label: "Гринд", value: "322" }, - { label: "Давняя травма", value: "518" }, - { label: "Двойник", value: "97" }, - { label: "Дворецкие", value: "111" }, - { label: "Дворфы", value: "224" }, - { label: "Дворяне", value: "487" }, - { label: "Двоюродные братья или сёстры", value: "162" }, - { label: "Девочки-волшебницы", value: "415" }, - { label: "Демоны", value: "193" }, - { label: "Депрессия", value: "196" }, - { label: "Детектив", value: "198" }, - { label: "Детективное расследование", value: "473" }, - { label: "Детское насилие", value: "125" }, - { label: "Детское обещание", value: "130" }, - { label: "Дискриминация", value: "203" }, - { label: "Длительный разрыв отношений", value: "400" }, - { label: "Домашняя жизнь", value: "45" }, - { label: "Драконы", value: "218" }, - { label: "Древний Китай", value: "34" }, - { label: "Дружба", value: "293" }, - { label: "Друзья детства", value: "128" }, - { label: "Друзья становятся врагами", value: "292" }, - { label: "Духи", value: "673" }, - { label: "Духовная сила", value: "665" }, - { label: "Духовный наставник", value: "671" }, - { label: "Душещипательная история", value: "335" }, - { label: "Души", value: "666" }, - { label: "Дьявольский путь культивации", value: "192" }, - { label: "Ёкай", value: "763" }, - { label: "Есть аниме-адаптация", value: "10" }, - { label: "Есть видеоигра", value: "13" }, - { label: "Есть дорама-адаптация", value: "11" }, - { label: "Есть манга-адаптация", value: "14" }, - { label: "Есть манхва-адаптация", value: "16" }, - { label: "Есть маньхуа-адаптация", value: "15" }, - { label: "Есть фильм", value: "17" }, - { label: "Есть CD дорама-адаптация", value: "12" }, - { label: "Жёсткий главный герой", value: "597" }, - { label: "Жестокие персонажи", value: "4" }, - { label: "Жёстокие персонажи", value: "169" }, - { label: "Животное-спутник", value: "78" }, - { label: "Жизнь в одиночку", value: "396" }, - { label: "Жрецы", value: "555" }, - { label: "Жрицы", value: "554" }, - { label: "Забота о детях", value: "127" }, - { label: "Заботливый главный герой", value: "116" }, - { label: "Загадочное заболевание", value: "471" }, - { label: "Загадочное прошлое родителей", value: "470" }, - { label: "Заговоры", value: "154" }, - { label: "Закалка тела", value: "96" }, - { label: "Закон джунглей", value: "682" }, - { label: "Закулисная борба", value: "603" }, - { label: "Замкнутый главный герой", value: "371" }, - { label: "Запечатанная сила", value: "607" }, - { label: "Затворник", value: "346" }, - { label: "Звери", value: "80" }, - { label: "Зверолюди", value: "39" }, - { label: "Звероподобные", value: "79" }, - { label: "Земледелие", value: "268" }, - { label: "Злобные благородные девы", value: "743" }, - { label: "Зловещие организации", value: "247" }, - { label: "Злой главный герой", value: "248" }, - { label: "Злые боги", value: "246" }, - { label: "Злые религии", value: "249" }, - { label: "Знаменитости", value: "118" }, - { label: "Знания из прошлой жизни", value: "553" }, - { label: "Зомби", value: "767" }, - { label: "Игра на выживание", value: "696" }, - { label: "Игровая рейтинговая система", value: "300" }, - { label: "Из грязи в князи", value: "542" }, - { label: "Известные родители", value: "262" }, - { label: "Изменение внешнего вида", value: "48" }, - { label: "Изнасилование", value: "574" }, - { label: "Инвалидность", value: "202" }, - { label: "Индустриализация", value: "364" }, - { label: "Инженер", value: "241" }, - { label: "Инцест", value: "361" }, - { label: "Искажённая личность", value: "730" }, - { label: "Искусственный интеллект", value: "59" }, - { label: "Исполнение желаний", value: "755" }, - { label: "Каннибализм", value: "113" }, - { label: "Карточные игры", value: "114" }, - { label: "Кладбищенский смотритель", value: "321" }, - { label: "Классика", value: "134" }, - { label: "Книги", value: "99" }, - { label: "Книги навыков", value: "654" }, - { label: "Книжный червь", value: "100" }, - { label: "Коллеги", value: "140" }, - { label: "Колледж/Университет", value: "145" }, - { label: "Командная работа", value: "701" }, - { label: "Комедийный подтекст", value: "147" }, - { label: "Комплекс брата", value: "105" }, - { label: "Комплекс неполноценности", value: "365" }, - { label: "Контракты", value: "155" }, - { label: "Контроль разума", value: "441" }, - { label: "Конфликт в семье", value: "261" }, - { label: "Конфликт верности", value: "153" }, - { label: "Копейщик", value: "668" }, - { label: "Королевская особа", value: "596" }, - { label: "Королевства", value: "382" }, - { label: "Короткий рассказ", value: "638" }, - { label: "Коррупция", value: "157" }, - { label: "Космические Войны", value: "158" }, - { label: "Космос", value: "507" }, - { label: "Косплей", value: "159" }, - { label: "Кража способностей", value: "2" }, - { label: "Крафтинг", value: "164" }, - { label: "Кризис личности", value: "357" }, - { label: "Кровь", value: "320" }, - { label: "Кружки, клубы", value: "138" }, - { label: "Кудэрэ", value: "384" }, - { label: "Кузнец", value: "90" }, - { label: "Кукловоды", value: "567" }, - { label: "Куклы/Марионетки", value: "211" }, - { label: "Кулинария", value: "156" }, - { label: "Культивация", value: "171" }, - { label: "Куннилингус", value: "172" }, - { label: "Легенды", value: "391" }, - { label: "Легкая жизнь", value: "229" }, - { label: "Лекари", value: "334" }, - { label: "Ленивый главный герой", value: "389" }, - { label: "Лидерство", value: "390" }, - { label: "Любит персонажа младше себя", value: "765" }, - { label: "Любит персонажа старше себя", value: "494" }, - { label: "Любовное соперничество", value: "406" }, - { label: "Любовные треугольники", value: "407" }, - { label: "Любовь детства", value: "129" }, - { label: "Любовь с первого взгляда", value: "404" }, - { label: "Любящие родители", value: "215" }, - { label: "Маги", value: "757" }, - { label: "Магические технологии", value: "417" }, - { label: "Магия", value: "412" }, - { label: "Магия призыва", value: "694" }, - { label: "Маленькие девочки", value: "397" }, - { label: "Мангака", value: "423" }, - { label: "Маниакальная любовь", value: "492" }, - { label: "Марти Сью", value: "508" }, - { label: "Мастер подземелий", value: "222" }, - { label: "Мастурбация", value: "432" }, - { label: "Матриархат", value: "433" }, - { label: "Межпространственные путешествия", value: "370" }, - { label: "Менеджмент", value: "422" }, - { label: "Месть", value: "588" }, - { label: "Мечи и магия", value: "697" }, - { label: "Мечники", value: "698" }, - { label: "Миленькие дети", value: "176" }, - { label: "Милитаризм", value: "439" }, - { label: "Миловидная история", value: "178" }, - { label: "Милый главный герой", value: "177" }, - { label: "Минет", value: "275" }, - { label: "Мировое древо", value: "760" }, - { label: "Миролюбивый главный герой", value: "510" }, - { label: "Мифология", value: "475" }, - { label: "Младшие сёстры", value: "766" }, - { label: "ММОРПГ", value: "445" }, - { label: "Множество временных линий", value: "463" }, - { label: "Модели", value: "447" }, - { label: "Молод не по годам", value: "49" }, - { label: "Монстры", value: "454" }, - { label: "Мрачность", value: "183" }, - { label: "Музыка", value: "466" }, - { label: "Музыкальные группы", value: "68" }, - { label: "Мутации", value: "468" }, - { label: "На волосок от смерти", value: "479" }, - { label: "На все руки мастер", value: "374" }, - { label: "Навыки имеют стоимость", value: "150" }, - { label: "Нагота", value: "490" }, - { label: "Наездники на драконах", value: "216" }, - { label: "Наёмники", value: "437" }, - { label: "Наивный главный герой", value: "476" }, - { label: "Наследие", value: "366" }, - { label: "Настоящая любовь", value: "200" }, - { label: "Настоящий гарем", value: "540" }, - { label: "Небесное испытание", value: "337" }, - { label: "Невезучий главный герой", value: "738" }, - { label: "Недоверчивый протагонист", value: "206" }, - { label: "Недооцененный главный герой", value: "734" }, - { label: "Недопонимание", value: "444" }, - { label: "Некромант", value: "480" }, - { label: "Нелинейное повествование", value: "489" }, - { label: "Неловкий главный герой", value: "67" }, - { label: "Нелюбимый протагонист", value: "333" }, - { label: "Немой персонаж", value: "469" }, - { label: "Ненадежный рассказчик", value: "739" }, - { label: "Непримечательный герой", value: "65" }, - { label: "Нерешительный протагонист", value: "363" }, - { label: "Несгибаемый главный герой", value: "676" }, - { label: "Несколько главных героев", value: "460" }, - { label: "Несколько миров", value: "461" }, - { label: "Несколько перерожденцев", value: "462" }, - { label: "Несколько попаданцев", value: "464" }, - { label: "Несравненная скорость культивации", value: "269" }, - { label: "Нехватка/отсутствие здравого смысла", value: "385" }, - { label: "Нечестный протагонист", value: "205" }, - { label: "НИИТ", value: "481" }, - { label: "Ниндзя", value: "486" }, - { label: "Обмен телами", value: "95" }, - { label: "Оборотни", value: "754" }, - { label: "Объект любви влюбился первым", value: "405" }, - { label: "Объект любви популярен", value: "543" }, - { label: "Огнестрельное оружие", value: "280" }, - { label: "Ограничение на время жизни", value: "394" }, - { label: "Одержимость", value: "544" }, - { label: "Один родитель", value: "651" }, - { label: "Одинокий главный герой", value: "399" }, - { label: "Одиночество", value: "398" }, - { label: "Одно тело на двоих", value: "634" }, - { label: "Око силы", value: "253" }, - { label: "Оммёдзи", value: "498" }, - { label: "Организованная преступность", value: "500" }, - { label: "Оргия", value: "501" }, - { label: "Орки", value: "499" }, - { label: "Основано на аниме", value: "74" }, - { label: "Основано на видеоигре", value: "72" }, - { label: "Основано на визуальной новелле", value: "73" }, - { label: "Основано на песне", value: "70" }, - { label: "Основано на фильме", value: "69" }, - { label: "Осторожный главный герой", value: "117" }, - { label: "От ненависти до любви один шаг", value: "239" }, - { label: "От сильного с сильнейшему", value: "684" }, - { label: "От слабого к сильному", value: "752" }, - { label: "Отаку", value: "503" }, - { label: "Отзывчивая любовь", value: "380" }, - { label: "Отзывчивый главный герой", value: "339" }, - { label: "Отношение учитель-ученик", value: "430" }, - { label: "Отношения бог-человек", value: "315" }, - { label: "Отношения между учителем и учеником", value: "687" }, - { label: "Отношения начальник-подчинённый", value: "101" }, - { label: "Отношения против воли", value: "286" }, - { label: "Отношения с нечеловеком", value: "353" }, - { label: "Отношения сэмпай-кохай", value: "621" }, - { label: "Отношения хозяин-слуга", value: "431" }, - { label: "Отомэ-игры", value: "504" }, - { label: "ОТП", value: "562" }, - { label: "Отшельники", value: "505" }, - { label: "Офисный работник", value: "600" }, - { label: "Официанты", value: "748" }, - { label: "Охотники", value: "355" }, - { label: "Падшие ангелы", value: "255" }, - { label: "Падшие дворяне", value: "256" }, - { label: "Пайзури", value: "511" }, - { label: "Паразиты", value: "513" }, - { label: "Параллельные миры", value: "512" }, - { label: "Парк развлечений", value: "32" }, - { label: "Пародия", value: "515" }, - { label: "Перемещение между мирами", value: "758" }, - { label: "Переодевание", value: "167" }, - { label: "Переплавка пилюль", value: "529" }, - { label: "Перерождение в девушку", value: "420" }, - { label: "Перерождение в другом мире", value: "580" }, - { label: "Перерождение в другом мире", value: "720" }, - { label: "Перерождение в игровом мире", value: "579" }, - { label: "Перерождение в монстра", value: "577" }, - { label: "Персонажи с мазохистскими наклонностями", value: "429" }, - { label: "Персонажи с садистскими наклонностями", value: "598" }, - { label: "Петля времени", value: "709" }, - { label: "Петтинг", value: "328" }, - { label: "Писатели", value: "761" }, - { label: "Питомцы", value: "522" }, - { label: "Племенное общество", value: "726" }, - { label: "Повелитель демонов", value: "191" }, - { label: "Повествование от нескольких лиц", value: "459" }, - { label: "Поглощение навыков", value: "653" }, - { label: "Подземелья", value: "223" }, - { label: "Поздно начинающаяся романтическая линия", value: "387" }, - { label: "Политика", value: "538" }, - { label: "Полулюди", value: "190" }, - { label: "Помолвка", value: "240" }, - { label: "Попаданец в другой мир", value: "723" }, - { label: "Попаданец в игровой мир", value: "722" }, - { label: "Постапокалипсис", value: "546" }, - { label: "Постижение Дао", value: "181" }, - { label: "Потеря девственности", value: "282" }, - { label: "Потустороннее пространство", value: "416" }, - { label: "Похищения", value: "379" }, - { label: "Прагматичный главный герой", value: "549" }, - { label: "Предательство", value: "83" }, - { label: "Предвидение", value: "550" }, - { label: "Преследователи", value: "674" }, - { label: "Преступление", value: "165" }, - { label: "Преступность", value: "166" }, - { label: "Приёмные дети", value: "19" }, - { label: "Призванный герой", value: "693" }, - { label: "Призраки", value: "309" }, - { label: "Приключения", value: "22" }, - { label: "Принуждение", value: "108" }, - { label: "Приручатель", value: "453" }, - { label: "Прислуга", value: "625" }, - { label: "Приставучий любовник", value: "136" }, - { label: "Притворная любовь", value: "552" }, - { label: "Пришельцы", value: "28" }, - { label: "Программист", value: "558" }, - { label: "Произведение - обладатель наград", value: "66" }, - { label: "Проклятия", value: "175" }, - { label: "Промывка мозгов", value: "102" }, - { label: "Пропуск времени", value: "712" }, - { label: "Пророчества", value: "559" }, - { label: "Протагонист в очках", value: "312" }, - { label: "Протагонист раб", value: "657" }, - { label: "Психокинез", value: "565" }, - { label: "Психопаты", value: "566" }, - { label: "Путешествия", value: "759" }, - { label: "Путешествия во времени", value: "713" }, - { label: "Пытки", value: "716" }, - { label: "Рабы", value: "658" }, - { label: "Развитие отношений", value: "160" }, - { label: "Развитие персонажа", value: "119" }, - { label: "Раздвоение личности", value: "458" }, - { label: "Размеренная романтика", value: "661" }, - { label: "Разница в статусе", value: "201" }, - { label: "Разорванная помолвка", value: "104" }, - { label: "Разумные предметы", value: "622" }, - { label: "Рай", value: "336" }, - { label: "Раняя романтика", value: "227" }, - { label: "Расизм", value: "573" }, - { label: "Расследования", value: "372" }, - { label: "Ребенок — главный герой", value: "126" }, - { label: "Реверс-гарем", value: "589" }, - { label: "Реверс-изнасилование", value: "590" }, - { label: "Резкая смена характера", value: "520" }, - { label: "Реинкарнация", value: "581" }, - { label: "Религии", value: "582" }, - { label: "Ресторан", value: "585" }, - { label: "Решительный главный герой", value: "199" }, - { label: "Робкий протагонист", value: "714" }, - { label: "Родительсткий комплекс", value: "514" }, - { label: "Родные не связанные кровью", value: "647" }, - { label: "Родословные", value: "94" }, - { label: "РПГ-система", value: "392" }, - { label: "Рыцари", value: "383" }, - { label: "Самовлюбленный главный герой", value: "477" }, - { label: "Самоубийства", value: "692" }, - { label: "Самураи", value: "601" }, - { label: "Сборник коротких историй", value: "144" }, - { label: "Свадьба", value: "426" }, - { label: "Связанные сюжетные линии", value: "369" }, - { label: "Святые", value: "599" }, - { label: "Секреты", value: "614" }, - { label: "Секс втроём", value: "707" }, - { label: "Секс-рабыня", value: "629" }, - { label: "Семейная любовь", value: "257" }, - { label: "Семь добродетелей", value: "627" }, - { label: "Семь смертных грехов", value: "626" }, - { label: "Серийные убийцы", value: "624" }, - { label: "Сикигами", value: "637" }, - { label: "Сильная любовь от старших", value: "214" }, - { label: "Синдром восьмиклассника", value: "132" }, - { label: "Синдром сестры", value: "652" }, - { label: "Сироты", value: "502" }, - { label: "Системный администратор", value: "699" }, - { label: "Скромный главный герой", value: "409" }, - { label: "Скрытые романтические отношения", value: "23" }, - { label: "Скрытые способности", value: "343" }, - { label: "Скряга", value: "450" }, - { label: "Скульпторы", value: "606" }, - { label: "Слабая романтика", value: "688" }, - { label: "Слабый главный герой", value: "751" }, - { label: "Сложные семейные отношения", value: "149" }, - { label: "Смена расы", value: "572" }, - { label: "Смертельное заболевание", value: "704" }, - { label: "Смерть", value: "185" }, - { label: "Смерть любимых", value: "186" }, - { label: "Современность", value: "448" }, - { label: "Современные знания в слаборазвитых мирах", value: "449" }, - { label: "Сожительство", value: "141" }, - { label: "Создание артефактов", value: "57" }, - { label: "Создание клана", value: "133" }, - { label: "Создание королевства", value: "381" }, - { label: "Создание навыков", value: "655" }, - { label: "Сокрытие истинных способностей", value: "344" }, - { label: "Сокрытие личности", value: "345" }, - { label: "Солдаты", value: "664" }, - { label: "Сон", value: "659" }, - { label: "Соседи по комнате", value: "595" }, - { label: "Социальные изгои", value: "663" }, - { label: "Спасение мира", value: "602" }, - { label: "Спорящая пара", value: "84" }, - { label: "Способность перевоплощения", value: "719" }, - { label: "Средневековье", value: "436" }, - { label: "Стеснительные персонажи", value: "643" }, - { label: "Стокгольмский синдром", value: "575" }, - { label: "Стокгольмский синдром", value: "675" }, - { label: "Стратег", value: "681" }, - { label: "Стратегические битвы", value: "680" }, - { label: "Стрелки", value: "325" }, - { label: "Стрельба из лука", value: "50" }, - { label: "Студенческий совет", value: "686" }, - { label: "Судьба", value: "197" }, - { label: "Суккубы", value: "689" }, - { label: "Суперспособности", value: "669" }, - { label: "Суровая тренировка", value: "332" }, - { label: "Сцены насилия", value: "195" }, - { label: "Таинственное прошлое", value: "472" }, - { label: "Тайная личность", value: "610" }, - { label: "Тайные организации", value: "611" }, - { label: "Телохранители", value: "98" }, - { label: "Тентакли", value: "703" }, - { label: "Террористы", value: "705" }, - { label: "Технологический разрыв", value: "702" }, - { label: "Тихие герои", value: "568" }, - { label: "Толстый протагонист", value: "271" }, - { label: "Торговцы", value: "438" }, - { label: "Травник", value: "340" }, - { label: "Трагичное прошлое", value: "718" }, - { label: "Трап", value: "725" }, - { label: "Триллер", value: "708" }, - { label: "Турнир", value: "76" }, - { label: "Тюрьма", value: "556" }, - { label: "Убийства", value: "465" }, - { label: "Уверенный в себе главный герой", value: "151" }, - { label: "Умная пара", value: "662" }, - { label: "Умный главный герой", value: "135" }, - { label: "Уникальная техника культивации", value: "735" }, - { label: "Уникальные оружия", value: "737" }, - { label: "Управление бизнесом", value: "109" }, - { label: "Управление временем", value: "710" }, - { label: "Управление пространством", value: "667" }, - { label: "Ускоренный рост", value: "6" }, - { label: "Учёные", value: "605" }, - { label: "Учителя", value: "700" }, - { label: "Фамильяры", value: "258" }, - { label: "Фанатизм", value: "264" }, - { label: "Фармацевт", value: "523" }, - { label: "Феи", value: "254" }, - { label: "Фениксы", value: "526" }, - { label: "Фетиш на грудь", value: "103" }, - { label: "Фетиш на очки", value: "311" }, - { label: "Философия", value: "524" }, - { label: "Фобии/Страхи", value: "525" }, - { label: "Фольклор", value: "285" }, - { label: "Формирование армии", value: "54" }, - { label: "Футанари", value: "295" }, - { label: "Футуристический мир", value: "296" }, - { label: "Фэнтези", value: "267" }, - { label: "Фэнтезийные существа", value: "266" }, - { label: "Хакеры", value: "326" }, - { label: "Харизматичный протагонист", value: "120" }, - { label: "Хитрый главный герой", value: "173" }, - { label: "Хладнокровный главный герой", value: "112" }, - { label: "Художники", value: "60" }, - { label: "Хулиганы", value: "188" }, - { label: "Цундере", value: "728" }, - { label: "Чат", value: "122" }, - { label: "Человек-оружие", value: "352" }, - { label: "Человекоподобный главный герой", value: "354" }, - { label: "Честный главный герой", value: "348" }, - { label: "Четкие любовные убеждения", value: "683" }, - { label: "Читы", value: "123" }, - { label: "Чудаковатые герои", value: "569" }, - { label: "Чужие воспоминания", value: "721" }, - { label: "Шантаж", value: "89" }, - { label: "Шеф-повар", value: "124" }, - { label: "Школа для девочек", value: "29" }, - { label: "Шоу-бизнес", value: "642" }, - { label: "Шпионы", value: "670" }, - { label: "Эволюция", value: "250" }, - { label: "Эгоистичный главный герой", value: "618" }, - { label: "Экзорцизм", value: "252" }, - { label: "Экономика", value: "230" }, - { label: "Эксгибиционизм", value: "251" }, - { label: "Эксперименты на людях", value: "351" }, - { label: "Элементальная магия", value: "234" }, - { label: "Элементы игрового мира", value: "299" }, - { label: "Элементы романтики", value: "594" }, - { label: "Элементы юри", value: "640" }, - { label: "Элементы яоя", value: "641" }, - { label: "Эльфы", value: "235" }, - { label: "Эпизодичность", value: "243" }, - { label: "Язвительные персонажи", value: "635" }, - { label: "Языковой барьер", value: "386" }, - { label: "Яндере", value: "762" }, - { label: "Яойщица", value: "294" }, - { label: "Японские силы самообороны", value: "378" }, - { label: "R-15", value: "570" }, - { label: "R-18", value: "571" }, - ], - type: FilterTypes.CheckboxGroup, - }, - genres: { - label: "Жанры", - value: [], - options: [ - { label: "16+", value: "1" }, - { label: "18+", value: "2" }, - { label: "Боевик", value: "3" }, - { label: "Боевые искусства", value: "4" }, - { label: "Вампиры", value: "47" }, - { label: "Военное", value: "44" }, - { label: "Гарем", value: "5" }, - { label: "Демоны", value: "48" }, - { label: "Детектив", value: "6" }, - { label: "Дзёсей", value: "50" }, - { label: "Драма", value: "7" }, - { label: "Игры", value: "45" }, - { label: "Историческое", value: "8" }, - { label: "Киберпанк", value: "9" }, - { label: "Комедия", value: "10" }, - { label: "Космос", value: "46" }, - { label: "Магия", value: "42" }, - { label: "Махо-сёдзё", value: "12" }, - { label: "Меха", value: "13" }, - { label: "Мистика", value: "14" }, - { label: "Музыка", value: "49" }, - { label: "Научная фантастика", value: "15" }, - { label: "Пародия", value: "16" }, - { label: "Повседневность", value: "17" }, - { label: "Приключения", value: "18" }, - { label: "Психологическое", value: "19" }, - { label: "Романтика", value: "20" }, - { label: "Сверхъестественное", value: "21" }, - { label: "Сёдзё", value: "22" }, - { label: "Сёдзё-ай", value: "23" }, - { label: "Сёнэн", value: "24" }, - { label: "Сёнэн-ай", value: "25" }, - { label: "Смена пола", value: "26" }, - { label: "Современность", value: "27" }, - { label: "Спорт", value: "28" }, - { label: "Супер сила", value: "43" }, - { label: "Сэйнэн", value: "29" }, - { label: "Трагедия", value: "32" }, - { label: "Триллер", value: "33" }, - { label: "Ужасы", value: "34" }, - { label: "Уся", value: "35" }, - { label: "Фэнтези", value: "36" }, - { label: "Школьная жизнь", value: "37" }, - { label: "Этти", value: "38" }, - { label: "Юри", value: "39" }, - { label: "Яой", value: "40" }, - { label: "LitRPG", value: "41" }, - ], - type: FilterTypes.CheckboxGroup, - }, - } satisfies Filters; -} - -export default new TL(); - -interface response { - data: Data; -} - -interface Data { - projects?: Projects; - project?: Project; - chapter?: DataChapter; -} - -interface DataChapter { - text: Text; -} - -interface Text { - text: string; -} - -interface Project { - title: string; - translationStatus: string; - fullUrl: string; - covers: Cover[]; - persons: Person[]; - genres: Genre[]; - tags: Genre[]; - annotation: Text; - subprojects: Subprojects; -} - -interface Cover { - url: string; -} - -interface Genre { - nameRu: string; - nameEng: string; -} - -interface Person { - role: string; - name: Name; -} - -interface Name { - firstName: string; - lastName: string; -} - -interface Subprojects { - content: SubprojectsContent[]; -} - -interface SubprojectsContent { - title: null | string; - volumes: Volumes; -} - -interface Volumes { - content: VolumesContent[]; -} - -interface VolumesContent { - shortName: string; - chapters: ChapterElement[]; -} - -interface ChapterElement { - title: string; - publishDate: Date; - fullUrl: string; - published: boolean; -} - -interface Projects { - content: ProjectsContent[]; -} - -interface ProjectsContent { - title: string; - fullUrl: string; - covers: Cover[]; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { defaultCover } from "@libs/defaultCover"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +class TL implements Plugin.PluginBase { + id = "TL"; + name = "NovelTL"; + site = "https://novel.tl"; + version = "1.0.0"; + icon = "src/ru/noveltl/icon.png"; + + async popularNovels( + page: number, + { filters }: Plugin.PopularNovelsOptions, + ): Promise { + const result = await fetchApi(this.site + "/api/site/v2/graphql", { + method: "post", + headers: { + Accept: "application/json, text/plain, */*", + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Content-Type": "application/json", + }, + referrer: this.site, + body: JSON.stringify({ + operationName: "Projects", + query: + "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", + variables: { + filter: { + tags: filters?.tags?.value || [], + genres: filters?.genres?.value || [], + }, + hostname: "novel.tl", + limit: 40, + page, + }, + }), + }); + + const json = (await result.json()) as response; + const novels: Plugin.NovelItem[] = []; + + json.data?.projects?.content?.forEach((novel) => + novels.push({ + name: novel.title, + url: "https://" + novel.fullUrl, + cover: novel?.covers?.[0]?.url + ? this.site + novel.covers[0].url + : defaultCover, + }), + ); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const result = await fetchApi(this.site + "/api/site/v2/graphql", { + method: "post", + headers: { + Accept: "application/json, text/plain, */*", + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Content-Type": "application/json", + }, + referrer: this.site, + body: JSON.stringify({ + operationName: "Book", + query: + 'query Book($url:String){project(project:{fullUrl:$url}){title translationStatus fullUrl covers{url}persons(langs:["ru","en","*"],roles:["author","illustrator"]){role name{firstName lastName}}genres{nameRu nameEng}tags{nameRu nameEng}annotation{text}subprojects{content{title volumes{content{shortName chapters{title publishDate fullUrl published}}}}}}}', + variables: { + url: novelUrl, + }, + }), + }); + const json = (await result.json()) as response; + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: json.data.project?.title, + cover: json.data.project?.covers?.[0]?.url + ? this.site + json.data.project.covers[0].url + : defaultCover, + summary: json.data.project?.annotation?.text, + status: + json.data.project?.translationStatus === "active" + ? NovelStatus.Ongoing + : NovelStatus.Completed, + }; + + const genres = [json.data.project?.tags, json.data.project?.genres] + .flat() + .map((item) => item?.nameRu || item?.nameEng) + .filter((item) => item); + + if (genres?.length) { + novel.genres = genres.join(", "); + } + + json.data.project?.persons?.forEach((person) => { + if (person.role == "author" && person.name.firstName) { + novel.author = + person.name.firstName + " " + (person.name?.lastName || ""); + } + if (person.role == "illustrator" && person.name.firstName) { + novel.artist = + person.name.firstName + " " + (person.name?.lastName || ""); + } + }); + + const chapters: Plugin.ChapterItem[] = []; + + json.data.project?.subprojects?.content?.forEach((work) => + work.volumes.content.forEach((volume, volumeIndex) => + volume.chapters.forEach((chapter, chapterIndex) => { + if (chapter.published) { + chapters.push({ + name: + (volume.shortName || "Том " + (volumeIndex + 1)) + " " + + (chapter.title || "Глава " + (chapterIndex + 1)), + url: "https://" + chapter.fullUrl, + releaseTime: dayjs(chapter.publishDate).format("LLL"), + chapterNumber: chapters.length + 1, + }); + } + }), + ), + ); + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(this.site + "/api/site/v2/graphql", { + method: "post", + headers: { + Accept: "application/json, text/plain, */*", + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Content-Type": "application/json", + }, + referrer: this.site, + body: JSON.stringify({ + query: + "query($url:String){chapter(chapter:{fullUrl:$url}){text{text}}}", + variables: { + url: decodeURI(chapterUrl), + }, + }), + }); + const json = (await result.json()) as response; + + const loadedCheerio = parseHTML(json.data.chapter?.text?.text || ""); + loadedCheerio("p > a[href]").each((index, element) => { + let src = loadedCheerio(element).attr("href") || ""; + if (!src.startsWith("http")) { + src = this.site + src; + } + loadedCheerio(element).find("picture").remove(); + loadedCheerio(element).removeAttr("href"); + loadedCheerio(``).appendTo(element); + }); + + const chapterText = loadedCheerio.html(); + return chapterText; + } + + async searchNovels( + searchTerm: string, + page: number | undefined = 1, + ): Promise { + const result = await fetchApi(this.site + "/api/site/v2/graphql", { + method: "post", + headers: { + Accept: "application/json, text/plain, */*", + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Content-Type": "application/json", + }, + referrer: this.site, + body: JSON.stringify({ + operationName: "Projects", + query: + "query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title fullUrl covers{url}}}}", + variables: { + filter: { + query: searchTerm, + }, + hostname: "novel.tl", + limit: 40, + page, + }, + }), + }); + const json = (await result.json()) as response; + const novels: Plugin.NovelItem[] = []; + + json?.data?.projects?.content?.forEach((novel) => + novels.push({ + name: novel.title, + url: "https://" + novel.fullUrl, + cover: novel?.covers?.[0]?.url + ? this.site + novel.covers[0].url + : defaultCover, + }), + ); + + return novels; + } + + fetchImage = fetchFile; + + filters = { + tags: { + label: "Тэги", + value: [], + options: [ + { label: "Автоматы", value: "64" }, + { label: "Агрессивные персонажи", value: "26" }, + { label: "Ад", value: "338" }, + { label: "Адаптация манги", value: "8" }, + { label: "Академия", value: "5" }, + { label: "Актёрское искусство", value: "7" }, + { label: "Актеры озвучки", value: "746" }, + { label: "Алхимия", value: "27" }, + { label: "Альтернативная реальность", value: "30" }, + { label: "Амнезия", value: "31" }, + { label: "Анабиоз", value: "170" }, + { label: "Анал", value: "33" }, + { label: "Ангелы", value: "38" }, + { label: "Андроиды", value: "37" }, + { label: "Анти-рост персонажа", value: "25" }, + { label: "Антигерой", value: "43" }, + { label: "Антикварный магазин", value: "44" }, + { label: "Антимагия", value: "41" }, + { label: "Антиутопия", value: "225" }, + { label: "Апатичный главный герой", value: "46" }, + { label: "Апокалипсис", value: "47" }, + { label: "Аристократия", value: "51" }, + { label: "Армия", value: "53" }, + { label: "Артефакты", value: "58" }, + { label: "Асоциальный главный герой", value: "42" }, + { label: "Ассасины", value: "61" }, + { label: "Атмосфера Европы", value: "245" }, + { label: "Банды", value: "302" }, + { label: "БДСМ", value: "77" }, + { label: "Бедный главный герой", value: "541" }, + { label: "Бездушный главный герой", value: "143" }, + { label: "Беззаботный герой", value: "115" }, + { label: "Безответная любовь", value: "213" }, + { label: "Безответная любовь", value: "740" }, + { label: "Безработные", value: "377" }, + { label: "Беременность", value: "551" }, + { label: "Бескорыстная любовь", value: "733" }, + { label: "Бессмертные", value: "359" }, + { label: "Бесстрашный главный герой", value: "274" }, + { label: "Библиотека", value: "393" }, + { label: "Биография", value: "86" }, + { label: "Близнецы", value: "729" }, + { label: "Богачи", value: "753" }, + { label: "Боги", value: "318" }, + { label: "Богини", value: "316" }, + { label: "Богоподобный протагонист", value: "314" }, + { label: "Боевая академия", value: "75" }, + { label: "Боевая парочка", value: "547" }, + { label: "Божественная защита", value: "208" }, + { label: "Божественная сила", value: "317" }, + { label: "Болеющие персонажи", value: "648" }, + { label: "Борьба за власть", value: "548" }, + { label: "Брак по расчету", value: "55" }, + { label: "Братство", value: "106" }, + { label: "Братья или сёстры", value: "646" }, + { label: "Брошенные дети", value: "1" }, + { label: "Бывший герой", value: "290" }, + { label: "Вампиры", value: "742" }, + { label: "Ваншот", value: "496" }, + { label: "Вдали от родителей", value: "3" }, + { label: "Ведьмы", value: "756" }, + { label: "Везучий главный герой", value: "411" }, + { label: "Верные подданные", value: "410" }, + { label: "Вероломные герои/плетение интриг", value: "424" }, + { label: "Взросление персонажа", value: "24" }, + { label: "Видит то, чего остальной люд не в силах", value: "617" }, + { label: "Виртуальная реальность", value: "744" }, + { label: "Владелец магазина", value: "677" }, + { label: "Владелец уникального оружия", value: "736" }, + { label: "Властные персонажи", value: "545" }, + { label: "Влияние прошлого", value: "517" }, + { label: "Внезапное обогащение", value: "691" }, + { label: "Внезапное обретение силы", value: "690" }, + { label: "Военные хроники", value: "749" }, + { label: "Возвращение в родной мир", value: "587" }, + { label: "Война", value: "750" }, + { label: "Вокалоид", value: "745" }, + { label: "Волшебные твари", value: "413" }, + { label: "Воскрешение", value: "586" }, + { label: "Воспитанный главный герой", value: "537" }, + { label: "Воспоминания прошлого", value: "283" }, + { label: "Враги становятся союзниками", value: "238" }, + { label: "Врата в иной мир", value: "303" }, + { label: "Временной парадокс", value: "711" }, + { label: "Вторжение на Землю", value: "228" }, + { label: "Второй шанс", value: "608" }, + { label: "Выживание", value: "695" }, + { label: "Вынужденные условия проживания", value: "287" }, + { label: "Высокомерный герой", value: "56" }, + { label: "Гадание", value: "207" }, + { label: "Галлюцинации", value: "189" }, + { label: "Гарем рабов", value: "656" }, + { label: "Геймеры", value: "301" }, + { label: "Генетические модификации", value: "306" }, + { label: "Герои", value: "341" }, + { label: "Герои непонятного пола", value: "36" }, + { label: "Героиня девушка-сорванец", value: "715" }, + { label: "Героиня красавица", value: "81" }, + { label: "Герой влюбляется первым", value: "561" }, + { label: "Герой использует щит", value: "636" }, + { label: "Герой красавец", value: "329" }, + { label: "Герой со множеством тел", value: "564" }, + { label: "Герой-бесстыдник", value: "632" }, + { label: "Герой-извращенец", value: "521" }, + { label: "Герой-трудяга", value: "330" }, + { label: "Герой-яндере", value: "421" }, + { label: "Гетерохромия", value: "342" }, + { label: "Гильдии", value: "324" }, + { label: "Гиперопека", value: "509" }, + { label: "Главная героиня — женщина", value: "277" }, + { label: "Главный герой - гений", value: "308" }, + { label: "Главный герой - Моб", value: "446" }, + { label: "Главный герой — знаменитость", value: "263" }, + { label: "Главный герой — мужчина", value: "419" }, + { label: "Главный герой в поисках гарема", value: "331" }, + { label: "Главный герой заранее готовится", value: "557" }, + { label: "Главный герой не человек", value: "488" }, + { label: "Главный герой приёмный", value: "20" }, + { label: "Главный герой сразу силён", value: "563" }, + { label: "Гладиаторы", value: "310" }, + { label: "Глухой к любви герой", value: "194" }, + { label: "Гоблины", value: "313" }, + { label: "Големы", value: "319" }, + { label: "Гомункул", value: "347" }, + { label: "Горничные", value: "418" }, + { label: "Государственные интриги", value: "212" }, + { label: "Гринд", value: "322" }, + { label: "Давняя травма", value: "518" }, + { label: "Двойник", value: "97" }, + { label: "Дворецкие", value: "111" }, + { label: "Дворфы", value: "224" }, + { label: "Дворяне", value: "487" }, + { label: "Двоюродные братья или сёстры", value: "162" }, + { label: "Девочки-волшебницы", value: "415" }, + { label: "Демоны", value: "193" }, + { label: "Депрессия", value: "196" }, + { label: "Детектив", value: "198" }, + { label: "Детективное расследование", value: "473" }, + { label: "Детское насилие", value: "125" }, + { label: "Детское обещание", value: "130" }, + { label: "Дискриминация", value: "203" }, + { label: "Длительный разрыв отношений", value: "400" }, + { label: "Домашняя жизнь", value: "45" }, + { label: "Драконы", value: "218" }, + { label: "Древний Китай", value: "34" }, + { label: "Дружба", value: "293" }, + { label: "Друзья детства", value: "128" }, + { label: "Друзья становятся врагами", value: "292" }, + { label: "Духи", value: "673" }, + { label: "Духовная сила", value: "665" }, + { label: "Духовный наставник", value: "671" }, + { label: "Душещипательная история", value: "335" }, + { label: "Души", value: "666" }, + { label: "Дьявольский путь культивации", value: "192" }, + { label: "Ёкай", value: "763" }, + { label: "Есть аниме-адаптация", value: "10" }, + { label: "Есть видеоигра", value: "13" }, + { label: "Есть дорама-адаптация", value: "11" }, + { label: "Есть манга-адаптация", value: "14" }, + { label: "Есть манхва-адаптация", value: "16" }, + { label: "Есть маньхуа-адаптация", value: "15" }, + { label: "Есть фильм", value: "17" }, + { label: "Есть CD дорама-адаптация", value: "12" }, + { label: "Жёсткий главный герой", value: "597" }, + { label: "Жестокие персонажи", value: "4" }, + { label: "Жёстокие персонажи", value: "169" }, + { label: "Животное-спутник", value: "78" }, + { label: "Жизнь в одиночку", value: "396" }, + { label: "Жрецы", value: "555" }, + { label: "Жрицы", value: "554" }, + { label: "Забота о детях", value: "127" }, + { label: "Заботливый главный герой", value: "116" }, + { label: "Загадочное заболевание", value: "471" }, + { label: "Загадочное прошлое родителей", value: "470" }, + { label: "Заговоры", value: "154" }, + { label: "Закалка тела", value: "96" }, + { label: "Закон джунглей", value: "682" }, + { label: "Закулисная борба", value: "603" }, + { label: "Замкнутый главный герой", value: "371" }, + { label: "Запечатанная сила", value: "607" }, + { label: "Затворник", value: "346" }, + { label: "Звери", value: "80" }, + { label: "Зверолюди", value: "39" }, + { label: "Звероподобные", value: "79" }, + { label: "Земледелие", value: "268" }, + { label: "Злобные благородные девы", value: "743" }, + { label: "Зловещие организации", value: "247" }, + { label: "Злой главный герой", value: "248" }, + { label: "Злые боги", value: "246" }, + { label: "Злые религии", value: "249" }, + { label: "Знаменитости", value: "118" }, + { label: "Знания из прошлой жизни", value: "553" }, + { label: "Зомби", value: "767" }, + { label: "Игра на выживание", value: "696" }, + { label: "Игровая рейтинговая система", value: "300" }, + { label: "Из грязи в князи", value: "542" }, + { label: "Известные родители", value: "262" }, + { label: "Изменение внешнего вида", value: "48" }, + { label: "Изнасилование", value: "574" }, + { label: "Инвалидность", value: "202" }, + { label: "Индустриализация", value: "364" }, + { label: "Инженер", value: "241" }, + { label: "Инцест", value: "361" }, + { label: "Искажённая личность", value: "730" }, + { label: "Искусственный интеллект", value: "59" }, + { label: "Исполнение желаний", value: "755" }, + { label: "Каннибализм", value: "113" }, + { label: "Карточные игры", value: "114" }, + { label: "Кладбищенский смотритель", value: "321" }, + { label: "Классика", value: "134" }, + { label: "Книги", value: "99" }, + { label: "Книги навыков", value: "654" }, + { label: "Книжный червь", value: "100" }, + { label: "Коллеги", value: "140" }, + { label: "Колледж/Университет", value: "145" }, + { label: "Командная работа", value: "701" }, + { label: "Комедийный подтекст", value: "147" }, + { label: "Комплекс брата", value: "105" }, + { label: "Комплекс неполноценности", value: "365" }, + { label: "Контракты", value: "155" }, + { label: "Контроль разума", value: "441" }, + { label: "Конфликт в семье", value: "261" }, + { label: "Конфликт верности", value: "153" }, + { label: "Копейщик", value: "668" }, + { label: "Королевская особа", value: "596" }, + { label: "Королевства", value: "382" }, + { label: "Короткий рассказ", value: "638" }, + { label: "Коррупция", value: "157" }, + { label: "Космические Войны", value: "158" }, + { label: "Космос", value: "507" }, + { label: "Косплей", value: "159" }, + { label: "Кража способностей", value: "2" }, + { label: "Крафтинг", value: "164" }, + { label: "Кризис личности", value: "357" }, + { label: "Кровь", value: "320" }, + { label: "Кружки, клубы", value: "138" }, + { label: "Кудэрэ", value: "384" }, + { label: "Кузнец", value: "90" }, + { label: "Кукловоды", value: "567" }, + { label: "Куклы/Марионетки", value: "211" }, + { label: "Кулинария", value: "156" }, + { label: "Культивация", value: "171" }, + { label: "Куннилингус", value: "172" }, + { label: "Легенды", value: "391" }, + { label: "Легкая жизнь", value: "229" }, + { label: "Лекари", value: "334" }, + { label: "Ленивый главный герой", value: "389" }, + { label: "Лидерство", value: "390" }, + { label: "Любит персонажа младше себя", value: "765" }, + { label: "Любит персонажа старше себя", value: "494" }, + { label: "Любовное соперничество", value: "406" }, + { label: "Любовные треугольники", value: "407" }, + { label: "Любовь детства", value: "129" }, + { label: "Любовь с первого взгляда", value: "404" }, + { label: "Любящие родители", value: "215" }, + { label: "Маги", value: "757" }, + { label: "Магические технологии", value: "417" }, + { label: "Магия", value: "412" }, + { label: "Магия призыва", value: "694" }, + { label: "Маленькие девочки", value: "397" }, + { label: "Мангака", value: "423" }, + { label: "Маниакальная любовь", value: "492" }, + { label: "Марти Сью", value: "508" }, + { label: "Мастер подземелий", value: "222" }, + { label: "Мастурбация", value: "432" }, + { label: "Матриархат", value: "433" }, + { label: "Межпространственные путешествия", value: "370" }, + { label: "Менеджмент", value: "422" }, + { label: "Месть", value: "588" }, + { label: "Мечи и магия", value: "697" }, + { label: "Мечники", value: "698" }, + { label: "Миленькие дети", value: "176" }, + { label: "Милитаризм", value: "439" }, + { label: "Миловидная история", value: "178" }, + { label: "Милый главный герой", value: "177" }, + { label: "Минет", value: "275" }, + { label: "Мировое древо", value: "760" }, + { label: "Миролюбивый главный герой", value: "510" }, + { label: "Мифология", value: "475" }, + { label: "Младшие сёстры", value: "766" }, + { label: "ММОРПГ", value: "445" }, + { label: "Множество временных линий", value: "463" }, + { label: "Модели", value: "447" }, + { label: "Молод не по годам", value: "49" }, + { label: "Монстры", value: "454" }, + { label: "Мрачность", value: "183" }, + { label: "Музыка", value: "466" }, + { label: "Музыкальные группы", value: "68" }, + { label: "Мутации", value: "468" }, + { label: "На волосок от смерти", value: "479" }, + { label: "На все руки мастер", value: "374" }, + { label: "Навыки имеют стоимость", value: "150" }, + { label: "Нагота", value: "490" }, + { label: "Наездники на драконах", value: "216" }, + { label: "Наёмники", value: "437" }, + { label: "Наивный главный герой", value: "476" }, + { label: "Наследие", value: "366" }, + { label: "Настоящая любовь", value: "200" }, + { label: "Настоящий гарем", value: "540" }, + { label: "Небесное испытание", value: "337" }, + { label: "Невезучий главный герой", value: "738" }, + { label: "Недоверчивый протагонист", value: "206" }, + { label: "Недооцененный главный герой", value: "734" }, + { label: "Недопонимание", value: "444" }, + { label: "Некромант", value: "480" }, + { label: "Нелинейное повествование", value: "489" }, + { label: "Неловкий главный герой", value: "67" }, + { label: "Нелюбимый протагонист", value: "333" }, + { label: "Немой персонаж", value: "469" }, + { label: "Ненадежный рассказчик", value: "739" }, + { label: "Непримечательный герой", value: "65" }, + { label: "Нерешительный протагонист", value: "363" }, + { label: "Несгибаемый главный герой", value: "676" }, + { label: "Несколько главных героев", value: "460" }, + { label: "Несколько миров", value: "461" }, + { label: "Несколько перерожденцев", value: "462" }, + { label: "Несколько попаданцев", value: "464" }, + { label: "Несравненная скорость культивации", value: "269" }, + { label: "Нехватка/отсутствие здравого смысла", value: "385" }, + { label: "Нечестный протагонист", value: "205" }, + { label: "НИИТ", value: "481" }, + { label: "Ниндзя", value: "486" }, + { label: "Обмен телами", value: "95" }, + { label: "Оборотни", value: "754" }, + { label: "Объект любви влюбился первым", value: "405" }, + { label: "Объект любви популярен", value: "543" }, + { label: "Огнестрельное оружие", value: "280" }, + { label: "Ограничение на время жизни", value: "394" }, + { label: "Одержимость", value: "544" }, + { label: "Один родитель", value: "651" }, + { label: "Одинокий главный герой", value: "399" }, + { label: "Одиночество", value: "398" }, + { label: "Одно тело на двоих", value: "634" }, + { label: "Око силы", value: "253" }, + { label: "Оммёдзи", value: "498" }, + { label: "Организованная преступность", value: "500" }, + { label: "Оргия", value: "501" }, + { label: "Орки", value: "499" }, + { label: "Основано на аниме", value: "74" }, + { label: "Основано на видеоигре", value: "72" }, + { label: "Основано на визуальной новелле", value: "73" }, + { label: "Основано на песне", value: "70" }, + { label: "Основано на фильме", value: "69" }, + { label: "Осторожный главный герой", value: "117" }, + { label: "От ненависти до любви один шаг", value: "239" }, + { label: "От сильного с сильнейшему", value: "684" }, + { label: "От слабого к сильному", value: "752" }, + { label: "Отаку", value: "503" }, + { label: "Отзывчивая любовь", value: "380" }, + { label: "Отзывчивый главный герой", value: "339" }, + { label: "Отношение учитель-ученик", value: "430" }, + { label: "Отношения бог-человек", value: "315" }, + { label: "Отношения между учителем и учеником", value: "687" }, + { label: "Отношения начальник-подчинённый", value: "101" }, + { label: "Отношения против воли", value: "286" }, + { label: "Отношения с нечеловеком", value: "353" }, + { label: "Отношения сэмпай-кохай", value: "621" }, + { label: "Отношения хозяин-слуга", value: "431" }, + { label: "Отомэ-игры", value: "504" }, + { label: "ОТП", value: "562" }, + { label: "Отшельники", value: "505" }, + { label: "Офисный работник", value: "600" }, + { label: "Официанты", value: "748" }, + { label: "Охотники", value: "355" }, + { label: "Падшие ангелы", value: "255" }, + { label: "Падшие дворяне", value: "256" }, + { label: "Пайзури", value: "511" }, + { label: "Паразиты", value: "513" }, + { label: "Параллельные миры", value: "512" }, + { label: "Парк развлечений", value: "32" }, + { label: "Пародия", value: "515" }, + { label: "Перемещение между мирами", value: "758" }, + { label: "Переодевание", value: "167" }, + { label: "Переплавка пилюль", value: "529" }, + { label: "Перерождение в девушку", value: "420" }, + { label: "Перерождение в другом мире", value: "580" }, + { label: "Перерождение в другом мире", value: "720" }, + { label: "Перерождение в игровом мире", value: "579" }, + { label: "Перерождение в монстра", value: "577" }, + { label: "Персонажи с мазохистскими наклонностями", value: "429" }, + { label: "Персонажи с садистскими наклонностями", value: "598" }, + { label: "Петля времени", value: "709" }, + { label: "Петтинг", value: "328" }, + { label: "Писатели", value: "761" }, + { label: "Питомцы", value: "522" }, + { label: "Племенное общество", value: "726" }, + { label: "Повелитель демонов", value: "191" }, + { label: "Повествование от нескольких лиц", value: "459" }, + { label: "Поглощение навыков", value: "653" }, + { label: "Подземелья", value: "223" }, + { label: "Поздно начинающаяся романтическая линия", value: "387" }, + { label: "Политика", value: "538" }, + { label: "Полулюди", value: "190" }, + { label: "Помолвка", value: "240" }, + { label: "Попаданец в другой мир", value: "723" }, + { label: "Попаданец в игровой мир", value: "722" }, + { label: "Постапокалипсис", value: "546" }, + { label: "Постижение Дао", value: "181" }, + { label: "Потеря девственности", value: "282" }, + { label: "Потустороннее пространство", value: "416" }, + { label: "Похищения", value: "379" }, + { label: "Прагматичный главный герой", value: "549" }, + { label: "Предательство", value: "83" }, + { label: "Предвидение", value: "550" }, + { label: "Преследователи", value: "674" }, + { label: "Преступление", value: "165" }, + { label: "Преступность", value: "166" }, + { label: "Приёмные дети", value: "19" }, + { label: "Призванный герой", value: "693" }, + { label: "Призраки", value: "309" }, + { label: "Приключения", value: "22" }, + { label: "Принуждение", value: "108" }, + { label: "Приручатель", value: "453" }, + { label: "Прислуга", value: "625" }, + { label: "Приставучий любовник", value: "136" }, + { label: "Притворная любовь", value: "552" }, + { label: "Пришельцы", value: "28" }, + { label: "Программист", value: "558" }, + { label: "Произведение - обладатель наград", value: "66" }, + { label: "Проклятия", value: "175" }, + { label: "Промывка мозгов", value: "102" }, + { label: "Пропуск времени", value: "712" }, + { label: "Пророчества", value: "559" }, + { label: "Протагонист в очках", value: "312" }, + { label: "Протагонист раб", value: "657" }, + { label: "Психокинез", value: "565" }, + { label: "Психопаты", value: "566" }, + { label: "Путешествия", value: "759" }, + { label: "Путешествия во времени", value: "713" }, + { label: "Пытки", value: "716" }, + { label: "Рабы", value: "658" }, + { label: "Развитие отношений", value: "160" }, + { label: "Развитие персонажа", value: "119" }, + { label: "Раздвоение личности", value: "458" }, + { label: "Размеренная романтика", value: "661" }, + { label: "Разница в статусе", value: "201" }, + { label: "Разорванная помолвка", value: "104" }, + { label: "Разумные предметы", value: "622" }, + { label: "Рай", value: "336" }, + { label: "Раняя романтика", value: "227" }, + { label: "Расизм", value: "573" }, + { label: "Расследования", value: "372" }, + { label: "Ребенок — главный герой", value: "126" }, + { label: "Реверс-гарем", value: "589" }, + { label: "Реверс-изнасилование", value: "590" }, + { label: "Резкая смена характера", value: "520" }, + { label: "Реинкарнация", value: "581" }, + { label: "Религии", value: "582" }, + { label: "Ресторан", value: "585" }, + { label: "Решительный главный герой", value: "199" }, + { label: "Робкий протагонист", value: "714" }, + { label: "Родительсткий комплекс", value: "514" }, + { label: "Родные не связанные кровью", value: "647" }, + { label: "Родословные", value: "94" }, + { label: "РПГ-система", value: "392" }, + { label: "Рыцари", value: "383" }, + { label: "Самовлюбленный главный герой", value: "477" }, + { label: "Самоубийства", value: "692" }, + { label: "Самураи", value: "601" }, + { label: "Сборник коротких историй", value: "144" }, + { label: "Свадьба", value: "426" }, + { label: "Связанные сюжетные линии", value: "369" }, + { label: "Святые", value: "599" }, + { label: "Секреты", value: "614" }, + { label: "Секс втроём", value: "707" }, + { label: "Секс-рабыня", value: "629" }, + { label: "Семейная любовь", value: "257" }, + { label: "Семь добродетелей", value: "627" }, + { label: "Семь смертных грехов", value: "626" }, + { label: "Серийные убийцы", value: "624" }, + { label: "Сикигами", value: "637" }, + { label: "Сильная любовь от старших", value: "214" }, + { label: "Синдром восьмиклассника", value: "132" }, + { label: "Синдром сестры", value: "652" }, + { label: "Сироты", value: "502" }, + { label: "Системный администратор", value: "699" }, + { label: "Скромный главный герой", value: "409" }, + { label: "Скрытые романтические отношения", value: "23" }, + { label: "Скрытые способности", value: "343" }, + { label: "Скряга", value: "450" }, + { label: "Скульпторы", value: "606" }, + { label: "Слабая романтика", value: "688" }, + { label: "Слабый главный герой", value: "751" }, + { label: "Сложные семейные отношения", value: "149" }, + { label: "Смена расы", value: "572" }, + { label: "Смертельное заболевание", value: "704" }, + { label: "Смерть", value: "185" }, + { label: "Смерть любимых", value: "186" }, + { label: "Современность", value: "448" }, + { label: "Современные знания в слаборазвитых мирах", value: "449" }, + { label: "Сожительство", value: "141" }, + { label: "Создание артефактов", value: "57" }, + { label: "Создание клана", value: "133" }, + { label: "Создание королевства", value: "381" }, + { label: "Создание навыков", value: "655" }, + { label: "Сокрытие истинных способностей", value: "344" }, + { label: "Сокрытие личности", value: "345" }, + { label: "Солдаты", value: "664" }, + { label: "Сон", value: "659" }, + { label: "Соседи по комнате", value: "595" }, + { label: "Социальные изгои", value: "663" }, + { label: "Спасение мира", value: "602" }, + { label: "Спорящая пара", value: "84" }, + { label: "Способность перевоплощения", value: "719" }, + { label: "Средневековье", value: "436" }, + { label: "Стеснительные персонажи", value: "643" }, + { label: "Стокгольмский синдром", value: "575" }, + { label: "Стокгольмский синдром", value: "675" }, + { label: "Стратег", value: "681" }, + { label: "Стратегические битвы", value: "680" }, + { label: "Стрелки", value: "325" }, + { label: "Стрельба из лука", value: "50" }, + { label: "Студенческий совет", value: "686" }, + { label: "Судьба", value: "197" }, + { label: "Суккубы", value: "689" }, + { label: "Суперспособности", value: "669" }, + { label: "Суровая тренировка", value: "332" }, + { label: "Сцены насилия", value: "195" }, + { label: "Таинственное прошлое", value: "472" }, + { label: "Тайная личность", value: "610" }, + { label: "Тайные организации", value: "611" }, + { label: "Телохранители", value: "98" }, + { label: "Тентакли", value: "703" }, + { label: "Террористы", value: "705" }, + { label: "Технологический разрыв", value: "702" }, + { label: "Тихие герои", value: "568" }, + { label: "Толстый протагонист", value: "271" }, + { label: "Торговцы", value: "438" }, + { label: "Травник", value: "340" }, + { label: "Трагичное прошлое", value: "718" }, + { label: "Трап", value: "725" }, + { label: "Триллер", value: "708" }, + { label: "Турнир", value: "76" }, + { label: "Тюрьма", value: "556" }, + { label: "Убийства", value: "465" }, + { label: "Уверенный в себе главный герой", value: "151" }, + { label: "Умная пара", value: "662" }, + { label: "Умный главный герой", value: "135" }, + { label: "Уникальная техника культивации", value: "735" }, + { label: "Уникальные оружия", value: "737" }, + { label: "Управление бизнесом", value: "109" }, + { label: "Управление временем", value: "710" }, + { label: "Управление пространством", value: "667" }, + { label: "Ускоренный рост", value: "6" }, + { label: "Учёные", value: "605" }, + { label: "Учителя", value: "700" }, + { label: "Фамильяры", value: "258" }, + { label: "Фанатизм", value: "264" }, + { label: "Фармацевт", value: "523" }, + { label: "Феи", value: "254" }, + { label: "Фениксы", value: "526" }, + { label: "Фетиш на грудь", value: "103" }, + { label: "Фетиш на очки", value: "311" }, + { label: "Философия", value: "524" }, + { label: "Фобии/Страхи", value: "525" }, + { label: "Фольклор", value: "285" }, + { label: "Формирование армии", value: "54" }, + { label: "Футанари", value: "295" }, + { label: "Футуристический мир", value: "296" }, + { label: "Фэнтези", value: "267" }, + { label: "Фэнтезийные существа", value: "266" }, + { label: "Хакеры", value: "326" }, + { label: "Харизматичный протагонист", value: "120" }, + { label: "Хитрый главный герой", value: "173" }, + { label: "Хладнокровный главный герой", value: "112" }, + { label: "Художники", value: "60" }, + { label: "Хулиганы", value: "188" }, + { label: "Цундере", value: "728" }, + { label: "Чат", value: "122" }, + { label: "Человек-оружие", value: "352" }, + { label: "Человекоподобный главный герой", value: "354" }, + { label: "Честный главный герой", value: "348" }, + { label: "Четкие любовные убеждения", value: "683" }, + { label: "Читы", value: "123" }, + { label: "Чудаковатые герои", value: "569" }, + { label: "Чужие воспоминания", value: "721" }, + { label: "Шантаж", value: "89" }, + { label: "Шеф-повар", value: "124" }, + { label: "Школа для девочек", value: "29" }, + { label: "Шоу-бизнес", value: "642" }, + { label: "Шпионы", value: "670" }, + { label: "Эволюция", value: "250" }, + { label: "Эгоистичный главный герой", value: "618" }, + { label: "Экзорцизм", value: "252" }, + { label: "Экономика", value: "230" }, + { label: "Эксгибиционизм", value: "251" }, + { label: "Эксперименты на людях", value: "351" }, + { label: "Элементальная магия", value: "234" }, + { label: "Элементы игрового мира", value: "299" }, + { label: "Элементы романтики", value: "594" }, + { label: "Элементы юри", value: "640" }, + { label: "Элементы яоя", value: "641" }, + { label: "Эльфы", value: "235" }, + { label: "Эпизодичность", value: "243" }, + { label: "Язвительные персонажи", value: "635" }, + { label: "Языковой барьер", value: "386" }, + { label: "Яндере", value: "762" }, + { label: "Яойщица", value: "294" }, + { label: "Японские силы самообороны", value: "378" }, + { label: "R-15", value: "570" }, + { label: "R-18", value: "571" }, + ], + type: FilterTypes.CheckboxGroup, + }, + genres: { + label: "Жанры", + value: [], + options: [ + { label: "16+", value: "1" }, + { label: "18+", value: "2" }, + { label: "Боевик", value: "3" }, + { label: "Боевые искусства", value: "4" }, + { label: "Вампиры", value: "47" }, + { label: "Военное", value: "44" }, + { label: "Гарем", value: "5" }, + { label: "Демоны", value: "48" }, + { label: "Детектив", value: "6" }, + { label: "Дзёсей", value: "50" }, + { label: "Драма", value: "7" }, + { label: "Игры", value: "45" }, + { label: "Историческое", value: "8" }, + { label: "Киберпанк", value: "9" }, + { label: "Комедия", value: "10" }, + { label: "Космос", value: "46" }, + { label: "Магия", value: "42" }, + { label: "Махо-сёдзё", value: "12" }, + { label: "Меха", value: "13" }, + { label: "Мистика", value: "14" }, + { label: "Музыка", value: "49" }, + { label: "Научная фантастика", value: "15" }, + { label: "Пародия", value: "16" }, + { label: "Повседневность", value: "17" }, + { label: "Приключения", value: "18" }, + { label: "Психологическое", value: "19" }, + { label: "Романтика", value: "20" }, + { label: "Сверхъестественное", value: "21" }, + { label: "Сёдзё", value: "22" }, + { label: "Сёдзё-ай", value: "23" }, + { label: "Сёнэн", value: "24" }, + { label: "Сёнэн-ай", value: "25" }, + { label: "Смена пола", value: "26" }, + { label: "Современность", value: "27" }, + { label: "Спорт", value: "28" }, + { label: "Супер сила", value: "43" }, + { label: "Сэйнэн", value: "29" }, + { label: "Трагедия", value: "32" }, + { label: "Триллер", value: "33" }, + { label: "Ужасы", value: "34" }, + { label: "Уся", value: "35" }, + { label: "Фэнтези", value: "36" }, + { label: "Школьная жизнь", value: "37" }, + { label: "Этти", value: "38" }, + { label: "Юри", value: "39" }, + { label: "Яой", value: "40" }, + { label: "LitRPG", value: "41" }, + ], + type: FilterTypes.CheckboxGroup, + }, + } satisfies Filters; +} + +export default new TL(); + +interface response { + data: Data; +} + +interface Data { + projects?: Projects; + project?: Project; + chapter?: DataChapter; +} + +interface DataChapter { + text: Text; +} + +interface Text { + text: string; +} + +interface Project { + title: string; + translationStatus: string; + fullUrl: string; + covers: Cover[]; + persons: Person[]; + genres: Genre[]; + tags: Genre[]; + annotation: Text; + subprojects: Subprojects; +} + +interface Cover { + url: string; +} + +interface Genre { + nameRu: string; + nameEng: string; +} + +interface Person { + role: string; + name: Name; +} + +interface Name { + firstName: string; + lastName: string; +} + +interface Subprojects { + content: SubprojectsContent[]; +} + +interface SubprojectsContent { + title: null | string; + volumes: Volumes; +} + +interface Volumes { + content: VolumesContent[]; +} + +interface VolumesContent { + shortName: null | string; + chapters: ChapterElement[]; +} + +interface ChapterElement { + title: null | string; + publishDate: Date; + fullUrl: string; + published: boolean; +} + +interface Projects { + content: ProjectsContent[]; +} + +interface ProjectsContent { + title: string; + fullUrl: string; + covers: Cover[]; +} diff --git a/plugins/russian/ranobehub.ts b/plugins/russian/ranobehub.ts index 1e19016..4c6a79c 100644 --- a/plugins/russian/ranobehub.ts +++ b/plugins/russian/ranobehub.ts @@ -1,1284 +1,1269 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -class RNBH implements Plugin.PluginBase { - id = "RNBH.org"; - name = "RanobeHub"; - version = "1.0.0"; - site = "https://ranobehub.org/"; - icon = "src/ru/ranobehub/icon.png"; - - - async popularNovels( - pageNo: number, - { - showLatestNovels, - filters, - }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + `api/search?page=${pageNo}&sort=`; - url += showLatestNovels - ? "last_chapter_at" - : filters?.sort || "computed_rating"; - url += "&status=" + (filters?.status?.value ? filters?.status?.value : "0"); - - if (filters) { - if (filters.country?.value?.length) { - url += "&country=" + filters.country.value.join(","); - } - if ( - filters.tags?.value?.include?.length || - filters.events?.value?.include?.length - ) { - const tagsPositive = [ - filters.tags.value?.include, - filters.events.value?.include, - ] - .flat() - .filter((t) => t); - url += "&tags:positive=" + tagsPositive.join(","); - } - if ( - filters?.tags?.value?.exclude?.length || - filters?.events?.value?.exclude?.length - ) { - const tagsNegative = [ - filters.tags.value?.exclude, - filters.events.value?.exclude, - ] - .flat() - .filter((t) => t); - url += "&tags:negative=" + tagsNegative.join(","); - } - } - - url += "&take=40"; - const result = await fetchApi(url); - const body = (await result.json()) as { resource: responseNovels[] }; - - const novels: Plugin.NovelItem[] = []; - body.resource.forEach((novel) => - novels.push({ - name: novel.names?.rus || novel.names.eng, - cover: novel.poster.medium, - url: novel.url, - }), - ); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const novelId = novelUrl - .substring("https://ranobehub.org/ranobe/".length) - .split("-")[0]; - const result = await fetchApi(`${this.site}api/ranobe/${novelId}`); - const json = (await result.json()) as { data: responseNovel }; - - const novel: Plugin.SourceNovel = { - url: json.data.url, - name: json.data.names?.rus || json.data.names.eng, - cover: json.data.posters.medium, - summary: json.data.description, - author: json.data?.authors?.[0]?.name_eng || "", - status: json.data.status.title.includes("процессе") - ? NovelStatus.Ongoing - : NovelStatus.Completed, - }; - - const tags = [json.data.tags.events, json.data.tags.genres] - .flat() - .map((tags) => tags?.names?.rus || tags?.names?.eng || tags?.title) - .filter((tags) => tags); - - if (tags.length) { - novel.genres = tags.join(", "); - } - - const chapters: Plugin.ChapterItem[] = []; - const fetchChaptersUrl = `${this.site}api/ranobe/${novelId}/contents`; - - const chaptersRaw = await fetchApi(fetchChaptersUrl); - const chaptersJSON = (await chaptersRaw.json()) as { - volumes: VolumesEntity[]; - }; - - chaptersJSON.volumes.forEach( - (volume) => - volume.chapters?.forEach((chapter) => - chapters.push({ - name: chapter.name, - url: chapter.url, - releaseTime: dayjs(parseInt(chapter.changed_at, 10) * 1000).format( - "LLL", - ), - }), - ), - ); - - novel.chapters = chapters; - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(chapterUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - loadedCheerio(".chapter-hoticons").remove(); - const baseUrl = this.site; - loadedCheerio("div.text:nth-child(1) img").each(function () { - if (!loadedCheerio(this).attr("src")?.startsWith("http")) { - const dataMediaId = loadedCheerio(this).attr("data-media-id"); - loadedCheerio(this).attr("src", baseUrl + "api/media/" + dataMediaId); - } - }); - - let chapterText: string = - loadedCheerio("div.text:nth-child(1)").html() || ""; - - // Remove script tags - chapterText = chapterText?.replace( - /<\s*script[^>]*>[\s\S]*?<\/script>/gim, - "", - ); - return chapterText; - } - - async searchNovels( - searchTerm: string, - //pageNo: number | undefined = 1, - ): Promise { - const url = `${this.site}api/fulltext/global?query=${searchTerm}&take=10`; - - const result = await fetchApi(url); - const data = (await result.json()) as responseSearch[]; - - const novels: Plugin.NovelItem[] = []; - - data - ?.find((item) => item?.meta?.key === "ranobe") - ?.data?.forEach((novel) => - novels.push({ - name: novel?.names?.rus || novel?.names?.eng || novel?.name || "", - url: - "https://ranobehub.org/ranobe/" + - novel?.url?.match( - /https:\/\/ranobehub\.org\/ranobe\/(.*?)\?utm_source=search_name&utm_medium=search&utm_campaign=search_using/, - )?.[1], - cover: novel?.image?.replace("/small", "/medium"), - }), - ); - - return novels; - } - - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "по рейтингу", value: "computed_rating" }, - { label: "по дате обновления", value: "last_chapter_at" }, - { label: "по дате добавления", value: "created_at" }, - { label: "по названию", value: "name_rus" }, - { label: "по просмотрам", value: "views" }, - { label: "по количеству глав", value: "count_chapters" }, - { label: "по объему перевода", value: "count_of_symbols" }, - ], - type: FilterTypes.Picker, - }, - status: { - label: "Статус перевода", - value: "", - options: [ - { label: "Любой", value: "" }, - { label: "В процессе", value: "1" }, - { label: "Завершено", value: "2" }, - { label: "Заморожено", value: "3" }, - { label: "Неизвестно", value: "4" }, - ], - type: FilterTypes.Picker, - }, - country: { - label: "Тип", - value: [], - options: [ - { label: "Китай", value: "2" }, - { label: "Корея", value: "3" }, - { label: "США", value: "4" }, - { label: "Япония", value: "1" }, - ], - type: FilterTypes.CheckboxGroup, - }, - events: { - label: "События", - value: { include: [], exclude: [] }, - options: [ - { label: "[Награжденная работа]", value: "611" }, - { label: "18+", value: "338" }, - { label: "Авантюристы", value: "353" }, - { label: "Автоматоны", value: "538" }, - { label: "Агрессивные персонажи", value: "434" }, - { label: "Ад", value: "509" }, - { label: "Адаптация в радиопостановку", value: "522" }, - { label: "Академия", value: "25" }, - { label: "Актеры озвучки", value: "578" }, - { label: "Активный главный герой", value: "132" }, - { label: "Алхимия", value: "116" }, - { label: "Альтернативный мир", value: "28" }, - { label: "Амнезия/Потеря памяти", value: "247" }, - { label: "Анабиоз", value: "657" }, - { label: "Ангелы", value: "218" }, - { label: "Андрогинные персонажи", value: "217" }, - { label: "Андроиды", value: "82" }, - { label: "Анти-магия", value: "471" }, - { label: "Антигерой", value: "346" }, - { label: "Антикварный магазин", value: "572" }, - { label: "Антисоциальный главный герой", value: "562" }, - { label: "Антиутопия", value: "663" }, - { label: "Апатичный протагонист", value: "29" }, - { label: "Апокалипсис", value: "314" }, - { label: "Аранжированный брак", value: "285" }, - { label: "Армия", value: "598" }, - { label: "Артефакты", value: "117" }, - { label: "Артисты", value: "460" }, - { label: "Банды", value: "581" }, - { label: "БДСМ", value: "676" }, - { label: "Бедный главный герой", value: "309" }, - { label: "Безжалостный главный герой", value: "144" }, - { label: "Беззаботный главный герой", value: "355" }, - { label: "Безусловная любовь", value: "650" }, - { label: "Беременность", value: "131" }, - { label: "Бесполый главный герой", value: "222" }, - { label: "Бессмертные", value: "275" }, - { label: "Бесстрашный протагонист", value: "619" }, - { label: "Бесстыдный главный герой", value: "256" }, - { label: "Бесчестный главный герой", value: "699" }, - { label: "Библиотека", value: "342" }, - { label: "Бизнесмен ", value: "813" }, - { label: "Биочип", value: "120" }, - { label: "Бисексуальный главный герой", value: "822" }, - { label: "Близнецы", value: "148" }, - { label: "Боги", value: "211" }, - { label: "Богини", value: "356" }, - { label: "Боевая академия", value: "369" }, - { label: "Боевые духи", value: "347" }, - { label: "Боевые соревнования", value: "422" }, - { label: "Божественная защита", value: "336" }, - { label: "Божественные силы", value: "224" }, - { label: "Большая разница в возрасте между героем и его любовным интересом", value: "348" }, - { label: "Борьба за власть", value: "544" }, - { label: "Брак", value: "363" }, - { label: "Брак по расчету", value: "65" }, - { label: "Братский комплекс", value: "31" }, - { label: "Братство", value: "413" }, - { label: "Братья и сестры", value: "518" }, - { label: "Буддизм", value: "742" }, - { label: "Быстрая культивация", value: "273" }, - { label: "Быстрообучаемый", value: "221" }, - { label: "Валькирии", value: "667" }, - { label: "Вампиры", value: "266" }, - { label: "Ваншот", value: "679" }, - { label: "Ведьмы", value: "169" }, - { label: "Вежливый главный герой", value: "289" }, - { label: "Верные подчиненные", value: "225" }, - { label: "Взрослый главный герой", value: "183" }, - { label: "Видит то, чего не видят другие", value: "636" }, - { label: "Виртуальная реальность", value: "313" }, - { label: "Владелец магазина", value: "653" }, - { label: "Внезапная сила", value: "376" }, - { label: "Внезапное богатство", value: "802" }, - { label: "Внешний вид отличается от фактического возраста", value: "334" }, - { label: "Военные Летописи", value: "740" }, - { label: "Возвращение из другого мира", value: "673" }, - { label: "Войны", value: "58" }, - { label: "Вокалоид", value: "678" }, - { label: "Волшебники/Волшебницы", value: "477" }, - { label: "Волшебные звери", value: "201" }, - { label: "Воображаемый друг", value: "614" }, - { label: "Воры", value: "326" }, - { label: "Воскрешение", value: "78" }, - { label: "Враги становятся возлюбленными", value: "428" }, - { label: "Враги становятся союзниками", value: "502" }, - { label: "Врата в другой мир", value: "558" }, - { label: "Врачи", value: "286" }, - { label: "Временной парадокс", value: "163" }, - { label: "Всемогущий главный герой", value: "42" }, - { label: "Вторжение на землю", value: "77" }, - { label: "Второй шанс", value: "112" }, - { label: "Вуайеризм", value: "851" }, - { label: "Выживание", value: "290" }, - { label: "Высокомерные персонажи", value: "268" }, - { label: "Гадание", value: "540" }, - { label: "Гарем рабов", value: "828" }, - { label: "Геймеры", value: "302" }, - { label: "Генералы", value: "223" }, - { label: "Генетические модификации", value: "620" }, - { label: "Гениальный главный герой", value: "566" }, - { label: "Герои", value: "173" }, - { label: "Героиня — сорванец", value: "525" }, - { label: "Герой влюбляется первым", value: "64" }, - { label: "Гетерохромия", value: "510" }, - { label: "Гильдии", value: "323" }, - { label: "Гипнотизм", value: "768" }, - { label: "Главный герой — бог", value: "486" }, - { label: "Главный герой — гуманоид", value: "595" }, - { label: "Главный герой — женщина", value: "63" }, - { label: "Главный герой — мужчина", value: "39" }, - { label: "Главный герой — наполовину человек", value: "362" }, - { label: "Главный герой — отец", value: "859" }, - { label: "Главный герой — раб", value: "832" }, - { label: "Главный герой — ребенок", value: "415" }, - { label: "Главный герой — рубака", value: "400" }, - { label: "Главный герой — собиратель гарема", value: "439" }, - { label: "Главный герой влюбляется первым", value: "655" }, - { label: "Главный герой играет роль", value: "396" }, - { label: "Главный герой носит очки", value: "637" }, - { label: "Главный герой пацифист", value: "675" }, - { label: "Главный герой с несколькими телами", value: "628" }, - { label: "Главный герой силен с самого начала", value: "45" }, - { label: "Гладиаторы", value: "549" }, - { label: "Глуповатый главный герой", value: "295" }, - { label: "Гоблины", value: "529" }, - { label: "Големы", value: "569" }, - { label: "Гомункул", value: "850" }, - { label: "Горничные", value: "380" }, - { label: "Госпиталь", value: "1043" }, - { label: "Готовка", value: "193" }, - { label: "Гриндинг", value: "303" }, - { label: "Дао Компаньон", value: "384" }, - { label: "Даосизм", value: "792" }, - { label: "Дарк", value: "151" }, - { label: "Дварфы", value: "220" }, - { label: "Двойная личность", value: "601" }, - { label: "Двойник", value: "547" }, - { label: "Дворецкий", value: "623" }, - { label: "Дворяне", value: "41" }, - { label: "Дворянство/Аристократия", value: "354" }, - { label: "Девушки-монстры", value: "634" }, - { label: "Демоническая техника культивации", value: "706" }, - { label: "Демоны", value: "6" }, - { label: "Денежный долг", value: "841" }, - { label: "Депрессия", value: "494" }, - { label: "Детективы", value: "561" }, - { label: "Дискриминация", value: "34" }, - { label: "Добыча денег одно из основных стремлений главного героя", value: "307" }, - { label: "Долгая разлука", value: "200" }, - { label: "Домашние дела", value: "178" }, - { label: "Домогательство", value: "394" }, - { label: "Драконы", value: "195" }, - { label: "Драконьи всадники", value: "555" }, - { label: "Древние времена", value: "102" }, - { label: "Древний Китай", value: "284" }, - { label: "Дружба", value: "97" }, - { label: "Друзья детства", value: "170" }, - { label: "Друзья становятся врагами", value: "507" }, - { label: "Друиды", value: "427" }, - { label: "Дух лисы", value: "842" }, - { label: "Духи/Призраки", value: "46" }, - { label: "Духовный советник", value: "351" }, - { label: "Душевность", value: "587" }, - { label: "Души", value: "136" }, - { label: "Европейская атмосфера", value: "457" }, - { label: "Ёкаи", value: "516" }, - { label: "Есть аниме-адаптация", value: "26" }, - { label: "Есть видеоигра по мотивам", value: "491" }, - { label: "Есть манга-адаптация", value: "27" }, - { label: "Есть манхва-адаптация", value: "453" }, - { label: "Есть маньхуа-адаптация", value: "298" }, - { label: "Есть сериал-адаптация", value: "421" }, - { label: "Есть фильм по мотивам", value: "47" }, - { label: "Женища-наставник", value: "438" }, - { label: "Жертва изнасилования влюбляется в насильника", value: "414" }, - { label: "Жесткая, двуличная личность", value: "249" }, - { label: "Жестокие персонажи", value: "436" }, - { label: "Жестокое обращение с ребенком", value: "617" }, - { label: "Жестокость", value: "127" }, - { label: "Животноводство", value: "765" }, - { label: "Животные черты", value: "466" }, - { label: "Жизнь в квартире", value: "554" }, - { label: "Жрицы", value: "564" }, - { label: "Заботливый главный герой", value: "176" }, - { label: "Забывчивый главный герой", value: "579" }, - { label: "Заговоры", value: "177" }, - { label: "Закалка тела", value: "269" }, - { label: "Законники", value: "769" }, - { label: "Замкнутый главный герой", value: "533" }, - { label: "Запечатанная сила", value: "344" }, - { label: "Застенчивые персонажи", value: "443" }, - { label: "Звери", value: "119" }, - { label: "Звери-компаньоны", value: "192" }, - { label: "Злой протагонист", value: "125" }, - { label: "Злые боги", value: "437" }, - { label: "Злые организации", value: "503" }, - { label: "Злые религии", value: "725" }, - { label: "Знаменитости", value: "397" }, - { label: "Знаменитый главный герой", value: "469" }, - { label: "Знания современного мира", value: "185" }, - { label: "Зомби", value: "321" }, - { label: "Игра на выживание", value: "162" }, - { label: "Игривый протагонист", value: "700" }, - { label: "Игровая система рейтинга", value: "301" }, - { label: "Игровые элементы", value: "152" }, - { label: "Игрушки (18+)", value: "644" }, - { label: "Из грязи в князи", value: "330" }, - { label: "Из женщины в мужчину ", value: "688" }, - { label: "Из мужчины в женщину", value: "698" }, - { label: "Из полного в худого", value: "809" }, - { label: "Из слабого в сильного", value: "81" }, - { label: "Из страшно(го/й) в красиво(го/ю)", value: "810" }, - { label: "Извращенный главный герой", value: "349" }, - { label: "Изгои", value: "472" }, - { label: "Изменение расы", value: "627" }, - { label: "Изменения внешнего вида", value: "191" }, - { label: "Изменения личности", value: "99" }, - { label: "Изнасилование", value: "110" }, - { label: "Изображения жестокости", value: "260" }, - { label: "Империи", value: "749" }, - { label: "Инвалидность", value: "656" }, - { label: "Индустриализация", value: "180" }, - { label: "Инженер", value: "35" }, - { label: "Инцест", value: "463" }, - { label: "Искусственный интеллект", value: "118" }, - { label: "Исследования", value: "635" }, - { label: "Каннибализм", value: "377" }, - { label: "Карточные игры", value: "654" }, - { label: "Киберспорт", value: "658" }, - { label: "Кланы", value: "950" }, - { label: "Класс безработного [Игровой класс в игре]", value: "727" }, - { label: "Клоны", value: "365" }, - { label: "Клубы", value: "96" }, - { label: "Книги", value: "341" }, - { label: "Книги навыков", value: "312" }, - { label: "Книжный червь", value: "455" }, - { label: "Коварство", value: "111" }, - { label: "Коллеги", value: "683" }, - { label: "Колледж/Университет", value: "712" }, - { label: "Кома", value: "826" }, - { label: "Командная работа", value: "426" }, - { label: "Комедийный оттенок", value: "523" }, - { label: "Комплекс неполноценности", value: "489" }, - { label: "Комплекс семейных отношений", value: "104" }, - { label: "Конкуренция", value: "746" }, - { label: "Контракты", value: "483" }, - { label: "Контроль разума/сознания", value: "262" }, - { label: "Копейщик", value: "339" }, - { label: "Королевская битва", value: "1025" }, - { label: "Королевская власть", value: "53" }, - { label: "Королевства", value: "141" }, - { label: "Коррупция", value: "378" }, - { label: "Космические войны", value: "674" }, - { label: "Красивый герой", value: "107" }, - { label: "Крафт", value: "287" }, - { label: "Кризис личности", value: "599" }, - { label: "Кругосветное путешествие", value: "257" }, - { label: "Кудере", value: "440" }, - { label: "Кузены", value: "701" }, - { label: "Кузнец", value: "454" }, - { label: "Кукловоды", value: "431" }, - { label: "Куклы/марионетки", value: "573" }, - { label: "Культивация", value: "123" }, - { label: "Куннилингус", value: "632" }, - { label: "Легенды", value: "430" }, - { label: "Легкая жизнь", value: "604" }, - { label: "Ленивый главный герой", value: "570" }, - { label: "Лидерство", value: "424" }, - { label: "Лоли", value: "92" }, - { label: "Лотерея", value: "401" }, - { label: "Любовный интерес влюбляется первым", value: "647" }, - { label: "Любовный интерес главного героя носит очки", value: "576" }, - { label: "Любовный треугольник", value: "98" }, - { label: "Любовь детства", value: "500" }, - { label: "Любовь с первого взгляда", value: "730" }, - { label: "Магические надписи", value: "373" }, - { label: "Магические печати", value: "277" }, - { label: "Магические технологии", value: "357" }, - { label: "Магическое пространство/измерение, доступное не всем персонажам", value: "244" }, - { label: "Магия", value: "38" }, - { label: "Магия призыва", value: "333" }, - { label: "Мазохистские персонажи", value: "660" }, - { label: "Манипулятивные персонажи", value: "130" }, - { label: "Мания", value: "91" }, - { label: "Мастер на все руки", value: "390" }, - { label: "Мастурбация", value: "846" }, - { label: "Махо-сёдзё", value: "496" }, - { label: "Медицинские знания", value: "441" }, - { label: "Медленная романтическая линия", value: "113" }, - { label: "Медленное развитие на старте ", value: "670" }, - { label: "Межпространственные путешествия", value: "316" }, - { label: "Менеджмент", value: "182" }, - { label: "Мертвый главный герой", value: "794" }, - { label: "Месть", value: "88" }, - { label: "Метаморфы", value: "234" }, - { label: "Меч и магия", value: "55" }, - { label: "Мечник", value: "607" }, - { label: "Мечты", value: "733" }, - { label: "Милая история", value: "709" }, - { label: "Милое дитя", value: "596" }, - { label: "Милый главный герой", value: "697" }, - { label: "Мировое дерево", value: "385" }, - { label: "Мистический ореол вокруг семьи", value: "409" }, - { label: "Мифические звери", value: "418" }, - { label: "Мифология", value: "468" }, - { label: "Младшие братья", value: "843" }, - { label: "Младшие сестры", value: "465" }, - { label: "ММОРПГ (ЛитРПГ)", value: "306" }, - { label: "Множество перемещенных людей", value: "488" }, - { label: "Множество реальностей", value: "278" }, - { label: "Множество реинкарнированных людей", value: "227" }, - { label: "Модели", value: "649" }, - { label: "Молчаливый персонаж", value: "705" }, - { label: "Монстры", value: "69" }, - { label: "Мужская гей-пара", value: "685" }, - { label: "Мужчина-яндере", value: "155" }, - { label: "Музыка", value: "589" }, - { label: "Музыкальные группы", value: "588" }, - { label: "Мутации", value: "668" }, - { label: "Мутированные существа", value: "317" }, - { label: "Навык кражи", value: "626" }, - { label: "Навязчивая любовь", value: "85" }, - { label: "Наемники", value: "324" }, - { label: "Назойливый возлюбленный", value: "501" }, - { label: "Наивный главный герой", value: "66" }, - { label: "Наркотики", value: "661" }, - { label: "Нарциссический главный герой", value: "470" }, - { label: "Насилие сексуального характера", value: "824" }, - { label: "Наследование", value: "372" }, - { label: "Национализм", value: "318" }, - { label: "Не блещущий внешне главный герой", value: "328" }, - { label: "Не родные братья и сестры", value: "464" }, - { label: "Небеса", value: "508" }, - { label: "Небесное испытание", value: "274" }, - { label: "Негуманоидный главный герой", value: "622" }, - { label: "Недоверчивый главный герой", value: "485" }, - { label: "Недооцененный главный герой", value: "140" }, - { label: "Недоразумения", value: "202" }, - { label: "Неизлечимая болезнь", value: "75" }, - { label: "Некромант", value: "308" }, - { label: "Нелинейная история", value: "157" }, - { label: "Ненавистный главный герой", value: "487" }, - { label: "Ненадежный рассказчик", value: "165" }, - { label: "Нерезиденты", value: "821" }, - { label: "Нерешительный главный герой", value: "741" }, - { label: "Несерьезный главный герой", value: "294" }, - { label: "Несколько временных линий", value: "517" }, - { label: "Несколько главных героев", value: "475" }, - { label: "Несколько идентичностей", value: "615" }, - { label: "Несколько личностей", value: "474" }, - { label: "Нетораре", value: "721" }, - { label: "Нетори", value: "450" }, - { label: "Неудачливый главный герой", value: "567" }, - { label: "Ниндзя", value: "358" }, - { label: "Обещание из детства", value: "738" }, - { label: "Обманщик", value: "411" }, - { label: "Обмен телами", value: "94" }, - { label: "Обнаженка", value: "417" }, - { label: "Обольщение", value: "718" }, - { label: "Оборотни", value: "624" }, - { label: "Обратный гарем", value: "255" }, - { label: "Общество монстров", value: "226" }, - { label: "Обязательство", value: "548" }, - { label: "Огнестрельное оружие", value: "179" }, - { label: "Ограниченная продолжительность жизни", value: "73" }, - { label: "Одержимость", value: "447" }, - { label: "Одинокий главный герой", value: "304" }, - { label: "Одиночество", value: "199" }, - { label: "Одиночное проживание", value: "207" }, - { label: "Околосмертные переживания", value: "773" }, - { label: "Оммёдзи", value: "542" }, - { label: "Омоложение", value: "237" }, - { label: "Организованная преступность", value: "478" }, - { label: "Оргия", value: "825" }, - { label: "Орки", value: "228" }, - { label: "Освоение навыков", value: "235" }, - { label: "Основано на аниме", value: "553" }, - { label: "Основано на видео игре", value: "704" }, - { label: "Основано на визуальной новелле ", value: "861" }, - { label: "Основано на песне", value: "677" }, - { label: "Основано на фильме", value: "552" }, - { label: "Осторожный главный герой", value: "122" }, - { label: "Отаку", value: "512" }, - { label: "Открытый космос", value: "150" }, - { label: "Отношения в сети", value: "713" }, - { label: "Отношения между богом и человеком", value: "603" }, - { label: "Отношения между людьми и нелюдьми", value: "205" }, - { label: "Отношения на расстоянии", value: "852" }, - { label: "Отношения начальник-подчиненный", value: "590" }, - { label: "Отношения Сенпай-Коухай", value: "513" }, - { label: "Отношения ученика и учителя", value: "451" }, - { label: "Отношения учитель-ученик", value: "343" }, - { label: "Отношения хозяин-слуга", value: "206" }, - { label: "Отомэ игра", value: "723" }, - { label: "Отсутствие здравого смысла", value: "605" }, - { label: "Отсутствие родителей", value: "575" }, - { label: "Офисный роман", value: "686" }, - { label: "Официанты", value: "681" }, - { label: "Охотники", value: "288" }, - { label: "Очаровательный главный герой", value: "659" }, - { label: "Падшее дворянство", value: "618" }, - { label: "Падшие ангелы", value: "505" }, - { label: "Пайзури", value: "630" }, - { label: "Паразиты", value: "535" }, - { label: "Параллельные миры", value: "86" }, - { label: "Парк развлечений", value: "586" }, - { label: "Пародия", value: "319" }, - { label: "Певцы/Певицы", value: "734" }, - { label: "Первая любовь", value: "716" }, - { label: "Первоисточник новеллы — манга", value: "560" }, - { label: "Первый раз", value: "845" }, - { label: "Перемещение в другой мир, имея при себе современные достижения", value: "732" }, - { label: "Перемещение в игровой мир", value: "532" }, - { label: "Перемещение в иной мир", value: "754" }, - { label: "Перерождение в ином мире", value: "755" }, - { label: "Переселение души/Трансмиграция", value: "139" }, - { label: "Персонаж использует щит", value: "631" }, - { label: "Петля времени", value: "79" }, - { label: "Пираты", value: "817" }, - { label: "Писатели", value: "408" }, - { label: "Питомцы", value: "253" }, - { label: "Племенное общество", value: "291" }, - { label: "Повелитель демонов", value: "171" }, - { label: "Повествование от нескольких лиц/Несколько точек зрения", value: "156" }, - { label: "Подземелья", value: "219" }, - { label: "Пожелания", value: "166" }, - { label: "Познание Дао", value: "360" }, - { label: "Покинутое дитя", value: "534" }, - { label: "Полигамия", value: "296" }, - { label: "Политика", value: "43" }, - { label: "Полиция", value: "801" }, - { label: "Полулюди", value: "335" }, - { label: "Пользователь уникального оружия", value: "432" }, - { label: "Популярный любовный интерес", value: "241" }, - { label: "Постапокалиптика", value: "60" }, - { label: "Потерянные цивилизации", value: "751" }, - { label: "Похищения людей", value: "707" }, - { label: "Поэзия", value: "404" }, - { label: "Правонарушители", value: "694" }, - { label: "Прагматичный главный герой", value: "536" }, - { label: "Преданный любовный интерес", value: "106" }, - { label: "Предательство", value: "103" }, - { label: "Предвидение", value: "52" }, - { label: "Прекрасная героиня", value: "30" }, - { label: "Преступники", value: "728" }, - { label: "Преступность", value: "83" }, - { label: "Призванный герой", value: "147" }, - { label: "Призраки", value: "51" }, - { label: "Принуждение к отношениям", value: "602" }, - { label: "Принцессы", value: "933" }, - { label: "Притворная пара", value: "600" }, - { label: "Причудливые персонажи", value: "297" }, - { label: "Пришельцы/Инопланетяне", value: "76" }, - { label: "Программист", value: "666" }, - { label: "Проклятия", value: "48" }, - { label: "Промывание мозгов", value: "519" }, - { label: "Пропуск времени", value: "138" }, - { label: "Пророчества", value: "429" }, - { label: "Проститутки", value: "844" }, - { label: "Пространственное манипулирование", value: "375" }, - { label: "Прошлое играет большую роль", value: "215" }, - { label: "Прыжки между мирами", value: "737" }, - { label: "Психические силы", value: "265" }, - { label: "Психопаты", value: "158" }, - { label: "Путешествие во времени", value: "80" }, - { label: "Пытка", value: "168" }, - { label: "Рабы", value: "829" }, - { label: "Развод", value: "771" }, - { label: "Разумные предметы", value: "174" }, - { label: "Расизм", value: "320" }, - { label: "Рассказ", value: "61" }, - { label: "Расторжения помолвки", value: "243" }, - { label: "Расы зооморфов", value: "209" }, - { label: "Ревность", value: "717" }, - { label: "Редакторы", value: "684" }, - { label: "Реинкарнация", value: "281" }, - { label: "Реинкарнация в монстра", value: "204" }, - { label: "Реинкарнация в объект", value: "692" }, - { label: "Религии", value: "565" }, - { label: "Репортеры", value: "837" }, - { label: "Ресторан", value: "652" }, - { label: "Решительный главный герой", value: "124" }, - { label: "Робкий главный герой", value: "800" }, - { label: "Родитель одиночка", value: "687" }, - { label: "Родительский комплекс", value: "531" }, - { label: "Родословная", value: "121" }, - { label: "Романтический подсюжет ", value: "159" }, - { label: "Рост персонажа", value: "95" }, - { label: "Рыцари", value: "142" }, - { label: "Садистские персонажи", value: "642" }, - { label: "Самоотверженный главный герой", value: "748" }, - { label: "Самоубийства", value: "616" }, - { label: "Самурай", value: "646" }, - { label: "Сборник коротких историй", value: "456" }, - { label: "Связанные сюжетные линии", value: "473" }, - { label: "Святые", value: "761" }, - { label: "Священники", value: "325" }, - { label: "Сдержанный главный герой", value: "799" }, - { label: "Секретные организации", value: "331" }, - { label: "Секреты", value: "577" }, - { label: "Секс рабы", value: "830" }, - { label: "Семейный конфликт", value: "770" }, - { label: "Семь добродетелей", value: "233" }, - { label: "Семь смертных грехов", value: "134" }, - { label: "Семья", value: "251" }, - { label: "Сёнэн-ай подсюжет ", value: "664" }, - { label: "Серийные убийцы", value: "497" }, - { label: "Сестринский комплекс", value: "498" }, - { label: "Сила духа", value: "282" }, - { label: "Сила, требующая платы за пользование", value: "520" }, - { label: "Сильная пара", value: "109" }, - { label: "Сильный в сильнейшего", value: "359" }, - { label: "Сильный любовный интерес", value: "161" }, - { label: "Синдром восьмиклассника", value: "90" }, - { label: "Сироты", value: "214" }, - { label: "Система уровней", value: "198" }, - { label: "Системный администратор", value: "476" }, - { label: "Скрытие истинной личности", value: "371" }, - { label: "Скрытие истинных способностей", value: "252" }, - { label: "Скрытный главный герой", value: "133" }, - { label: "Скрытые способности", value: "128" }, - { label: "Скульпторы", value: "366" }, - { label: "Слабо выраженная романтическая линия", value: "213" }, - { label: "Слабый главный герой", value: "188" }, - { label: "Слепой главный герой", value: "864" }, - { label: "Слуги", value: "232" }, - { label: "Смерть", value: "49" }, - { label: "Смерть близких", value: "361" }, - { label: "Собственнические персонажи", value: "108" }, - { label: "Современность", value: "40" }, - { label: "Сожительство", value: "482" }, - { label: "Создание армии", value: "175" }, - { label: "Создание артефактов", value: "292" }, - { label: "Создание клана", value: "448" }, - { label: "Создание королевства", value: "181" }, - { label: "Создание навыков", value: "236" }, - { label: "Создание секты", value: "393" }, - { label: "Солдаты/Военные", value: "71" }, - { label: "Сон", value: "571" }, - { label: "Состоятельные персонажи", value: "67" }, - { label: "Социальная иерархия на основе силы", value: "137" }, - { label: "Социальные изгои", value: "480" }, - { label: "Спасение мира", value: "597" }, - { label: "Специальные способности", value: "54" }, - { label: "Спокойный главный герой", value: "32" }, - { label: "Справедливый главный герой", value: "702" }, - { label: "Средневековье", value: "184" }, - { label: "Ссорящаяся пара", value: "293" }, - { label: "Сталкеры", value: "689" }, - { label: "Старение", value: "190" }, - { label: "Стоические персонажи", value: "444" }, - { label: "Стокгольмский синдром", value: "643" }, - { label: "Стратег", value: "425" }, - { label: "Стратегические битвы", value: "160" }, - { label: "Стратегия", value: "1038" }, - { label: "Стрелки", value: "458" }, - { label: "Стрельба из лука", value: "383" }, - { label: "Студенческий совет", value: "490" }, - { label: "Судьба", value: "271" }, - { label: "Суккубы", value: "484" }, - { label: "Супер герои", value: "1039" }, - { label: "Суровая подготовка", value: "261" }, - { label: "Таинственная болезнь", value: "74" }, - { label: "Таинственное прошлое", value: "263" }, - { label: "Тайная личность", value: "310" }, - { label: "Тайные отношения", value: "812" }, - { label: "Танцоры", value: "840" }, - { label: "Телохранители", value: "452" }, - { label: "Тентакли", value: "693" }, - { label: "Террористы", value: "515" }, - { label: "Технологический разрыв", value: "621" }, - { label: "Тихие персонажи", value: "546" }, - { label: "Толстый главный герой", value: "299" }, - { label: "Торговцы", value: "416" }, - { label: "Травля/Буллинг", value: "89" }, - { label: "Травник", value: "708" }, - { label: "Трагическое прошлое", value: "164" }, - { label: "Трансплантация воспоминаний", value: "367" }, - { label: "Трап (Путаница с гендером персонажа)", value: "582" }, - { label: "Трудолюбивый главный герой", value: "37" }, - { label: "Тюрьма", value: "479" }, - { label: "Убийства", value: "84" }, - { label: "Убийцы", value: "248" }, - { label: "Убийцы драконов", value: "606" }, - { label: "Уверенный главный герой", value: "270" }, - { label: "Удачливый главный герой", value: "402" }, - { label: "Укротитель монстров", value: "337" }, - { label: "Умения из прошлой жизни", value: "280" }, - { label: "Умная пара", value: "493" }, - { label: "Умный главный герой", value: "33" }, - { label: "Уникальная техника Культивации", value: "254" }, - { label: "Уникальное оружие", value: "340" }, - { label: "Управление бизнесом", value: "315" }, - { label: "Управление временем", value: "167" }, - { label: "Управление кровью", value: "764" }, - { label: "Упрямый главный герой", value: "672" }, - { label: "Уродливый главный герой", value: "803" }, - { label: "Ускоренный рост", value: "300" }, - { label: "Усыновленные дети", value: "481" }, - { label: "Усыновленный главный герой", value: "412" }, - { label: "Уход за детьми", value: "398" }, - { label: "Учителя", value: "345" }, - { label: "Фамильяры", value: "541" }, - { label: "Фанатизм", value: "613" }, - { label: "Фантастические существа", value: "322" }, - { label: "Фанфикшн", value: "388" }, - { label: "Фармацевт", value: "715" }, - { label: "Фарминг", value: "379" }, - { label: "Феи", value: "210" }, - { label: "Фелляция", value: "584" }, - { label: "Фениксы", value: "374" }, - { label: "Фетиш груди", value: "499" }, - { label: "Философия", value: "87" }, - { label: "Фильмы", value: "403" }, - { label: "Флэшбэки", value: "528" }, - { label: "Фобии", value: "100" }, - { label: "Фольклор", value: "467" }, - { label: "Футанари", value: "568" }, - { label: "Футуристический сеттинг", value: "382" }, - { label: "Фэнтези мир", value: "126" }, - { label: "Хакеры", value: "399" }, - { label: "Харизматический герой", value: "391" }, - { label: "Хикикомори/Затворники", value: "462" }, - { label: "Хитроумный главный герой", value: "105" }, - { label: "Хозяин подземелий", value: "557" }, - { label: "Холодный главный герой", value: "259" }, - { label: "Хорошие отношения с семьей", value: "506" }, - { label: "Хранители могил", value: "68" }, - { label: "Целители", value: "389" }, - { label: "Цзянши", value: "735" }, - { label: "Цундэрэ", value: "445" }, - { label: "Чаты", value: "580" }, - { label: "Человеческое оружие", value: "521" }, - { label: "Честный главный герой", value: "240" }, - { label: "Читы", value: "238" }, - { label: "Шантаж", value: "526" }, - { label: "Шеф-повар", value: "239" }, - { label: "Шикигами", value: "543" }, - { label: "Школа только для девочек", value: "633" }, - { label: "Шота", value: "514" }, - { label: "Шоу-бизнес", value: "407" }, - { label: "Шпионы", value: "563" }, - { label: "Эволюция", value: "196" }, - { label: "Эгоистичный главный герой", value: "539" }, - { label: "Эйдетическая память", value: "392" }, - { label: "Экзорсизм", value: "504" }, - { label: "Экономика", value: "492" }, - { label: "Эксгибиционизм", value: "639" }, - { label: "Эксперименты с людьми", value: "129" }, - { label: "Элементальная магия", value: "395" }, - { label: "Эльфы", value: "172" }, - { label: "Эмоционально слабый главный герой", value: "816" }, - { label: "Эпизодический", value: "612" }, - { label: "Юный любовный интерес", value: "446" }, - { label: "Яды", value: "410" }, - { label: "Языкастые персонажи", value: "406" }, - { label: "Языковой барьер", value: "59" }, - { label: "Яндере", value: "208" }, - { label: "Японские силы самообороны", value: "559" }, - { label: "Ярко выраженная романтическая линия", value: "272" }, - { label: "Abusive Characters", value: "625" }, - { label: "Adapted to Visual Novel", value: "1046" }, - { label: "Adopted-lead", value: "886" }, - { label: "Adultery", value: "866" }, - { label: "Affair", value: "645" }, - { label: "Age-gap", value: "923" }, - { label: "Almost-human-lead", value: "975" }, - { label: "An*l", value: "780" }, - { label: "Androgynous-male-lead", value: "1002" }, - { label: "Anti-hero-lead", value: "976" }, - { label: "Apathetic-lead", value: "967" }, - { label: "Arms Dealers", value: "839" }, - { label: "Army-commander", value: "1003" }, - { label: "Artifact-refining", value: "924" }, - { label: "Autism", value: "855" }, - { label: "Awkward Protagonist", value: "669" }, - { label: "Awkward-lead", value: "892" }, - { label: "Bestiality", value: "796" }, - { label: "Big-breasts", value: "908" }, - { label: "Birth-of-a-nation", value: "1004" }, - { label: "Bisexual-lead", value: "1027" }, - { label: "Body-refining", value: "947" }, - { label: "Body-swap/s", value: "1036" }, - { label: "Boss-subordinate-relationship", value: "876" }, - { label: "Bride-kidnapping", value: "948" }, - { label: "Caring-lead", value: "879" }, - { label: "Cautious-lead", value: "1032" }, - { label: "Changed-man", value: "925" }, - { label: "Charismatic-lead", value: "1005" }, - { label: "Child-lead", value: "936" }, - { label: "Clever-lead", value: "880" }, - { label: "Clumsy Love Interests", value: "815" }, - { label: "Cold Love Interests", value: "651" }, - { label: "Coming of Age", value: "860" }, - { label: "Confident-lead", value: "894" }, - { label: "Confident-male-lead", value: "951" }, - { label: "Confinement", value: "767" }, - { label: "Conflicting Loyalties", value: "793" }, - { label: "Couple Growth", value: "690" }, - { label: "Court Official", value: "863" }, - { label: "Cowardly Protagonist", value: "703" }, - { label: "Cowardly-lead", value: "1000" }, - { label: "Cross-dressing", value: "250" }, - { label: "Cunnilingus", value: "867" }, - { label: "Cunning-lead", value: "952" }, - { label: "Cunning-male-lead", value: "953" }, - { label: "Curious Protagonist", value: "849" }, - { label: "Cute-lead", value: "887" }, - { label: "Dense-lead", value: "868" }, - { label: "Determined-lead", value: "972" }, - { label: "Developing-technology", value: "1006" }, - { label: "Devil/s", value: "1007" }, - { label: "Different Social Status", value: "758" }, - { label: "Disfigurement", value: "838" }, - { label: "Doting Love Interests", value: "665" }, - { label: "Doting Older Siblings", value: "609" }, - { label: "Doting Parents", value: "530" }, - { label: "Dungeon/s-exploring", value: "990" }, - { label: "Elderly Protagonist", value: "774" }, - { label: "Enlightenment", value: "729" }, - { label: "Eunuch", value: "1047" }, - { label: "Eye Powers", value: "386" }, - { label: "Family Business", value: "785" }, - { label: "Famous Parents", value: "790" }, - { label: "Famous-lead", value: "897" }, - { label: "Fanfic", value: "942" }, - { label: "Fated Lovers", value: "797" }, - { label: "Fellatio", value: "870" }, - { label: "Female-lead", value: "888" }, - { label: "First-time-intercourse", value: "871" }, - { label: "Fleet Battles", value: "836" }, - { label: "Forced Living Arrangements", value: "808" }, - { label: "Forced Marriage", value: "835" }, - { label: "Former Hero", value: "752" }, - { label: "Fujoshi", value: "1045" }, - { label: "Galge", value: "848" }, - { label: "Gambling", value: "1031" }, - { label: "Gamelit", value: "994" }, - { label: "Genderless-lead", value: "1008" }, - { label: "Glasses-wearing-lead", value: "995" }, - { label: "Guardian Relationship", value: "197" }, - { label: "H*ndjob", value: "629" }, - { label: "Half-human-lead", value: "956" }, - { label: "Hard-working-lead", value: "957" }, - { label: "Hard-working-male-lead", value: "958" }, - { label: "Hard-working-protagonist/s", value: "1030" }, - { label: "Harem-seeking-lead", value: "929" }, - { label: "Harem-subtext", value: "909" }, - { label: "Helpful Protagonist", value: "760" }, - { label: "Helpful-lead", value: "882" }, - { label: "Hidden-gem", value: "998" }, - { label: "High-fantasy", value: "991" }, - { label: "Human-becomes-demon/monster", value: "1009" }, - { label: "Human-nonhuman-relationship", value: "914" }, - { label: "Humanoid-lead", value: "915" }, - { label: "Imperial Harem", value: "805" }, - { label: "Incubus", value: "1049" }, - { label: "Insects", value: "831" }, - { label: "Interspatial-storage", value: "959" }, - { label: "Kind Love Interests", value: "757" }, - { label: "Large-number-of-skills", value: "1010" }, - { label: "Legendary-hero", value: "1011" }, - { label: "Litrpg", value: "977" }, - { label: "Love Rivals", value: "788" }, - { label: "Lovers Reunited", value: "853" }, - { label: "Low-fantasy", value: "1037" }, - { label: "Master-disciple-relationship", value: "899" }, - { label: "Matriarchy", value: "807" }, - { label: "Mature-lead", value: "900" }, - { label: "Mind Break", value: "862" }, - { label: "Mismatched Couple", value: "695" }, - { label: "Mob Protagonist", value: "648" }, - { label: "Mob-lead", value: "902" }, - { label: "Modern", value: "988" }, - { label: "Monster-pov", value: "1012" }, - { label: "Mpreg", value: "856" }, - { label: "Multiple-povs", value: "1013" }, - { label: "Mystery Solving", value: "710" }, - { label: "Naive-lead", value: "1014" }, - { label: "Near-death-experience", value: "996" }, - { label: "Neet", value: "495" }, - { label: "Nightmares", value: "833" }, - { label: "Nobility", value: "1015" }, - { label: "Non-human-lead", value: "978" }, - { label: "Non-humanoid-lead", value: "1016" }, - { label: "Not-so-secret-identity", value: "979" }, - { label: "Omegaverse", value: "857" }, - { label: "Online-game", value: "910" }, - { label: "Online-gaming", value: "911" }, - { label: "Outdoor Interc**rse", value: "847" }, - { label: "Outdoor-intercourse", value: "903" }, - { label: "Overprotective Siblings", value: "610" }, - { label: "Part-Time Job", value: "865" }, - { label: "Past Trauma", value: "726" }, - { label: "Past-memories", value: "1017" }, - { label: "Persistent Love Interests", value: "714" }, - { label: "Perverted-lead", value: "932" }, - { label: "Photography", value: "798" }, - { label: "Pill Based Cultivation", value: "279" }, - { label: "Pill Concocting", value: "245" }, - { label: "Pilots", value: "820" }, - { label: "Playboys", value: "795" }, - { label: "Playful-lead", value: "989" }, - { label: "Polyandry", value: "811" }, - { label: "Portal-fantasy-/-isekai", value: "992" }, - { label: "Pragmatic-lead", value: "884" }, - { label: "Profanity", value: "980" }, - { label: "Protagonist-loyal-to-love-interest", value: "905" }, - { label: "R-15 (Японское возрастное ограничение)", value: "230" }, - { label: "Rebellion", value: "834" }, - { label: "Reincarnated in a Game World", value: "804" }, - { label: "Reluctant Protagonist", value: "696" }, - { label: "Reverse R*pe", value: "776" }, - { label: "Reversible Couple", value: "854" }, - { label: "Ruling-class", value: "943" }, - { label: "S*x Friends", value: "750" }, - { label: "S*xual Cultivation Technique", value: "823" }, - { label: "Salaryman", value: "1035" }, - { label: "Satire", value: "981" }, - { label: "Schemes And Conspiracies", value: "745" }, - { label: "Scientist/s", value: "997" }, - { label: "Scientists", value: "1029" }, - { label: "Secret Crush", value: "827" }, - { label: "Seme Protagonist", value: "1034" }, - { label: "Seme-lead", value: "1028" }, - { label: "Sentimental Protagonist", value: "1048" }, - { label: "Seven-heavenly-virtues", value: "1018" }, - { label: "Sexual Cultivation Technique", value: "350" }, - { label: "Sexual-content", value: "982" }, - { label: "Sexuality", value: "983" }, - { label: "Sharing A Body", value: "814" }, - { label: "Shotacon", value: "858" }, - { label: "Shoujo-Ai Subplot", value: "777" }, - { label: "Sibling Rivalry", value: "766" }, - { label: "Sibling's Care", value: "1042" }, - { label: "Sickly Characters", value: "787" }, - { label: "Skills", value: "1019" }, - { label: "Slave-harem", value: "1001" }, - { label: "Slime", value: "1020" }, - { label: "Smart-male-lead", value: "963" }, - { label: "Spirit Users", value: "739" }, - { label: "Straight Seme", value: "819" }, - { label: "Straight Uke", value: "818" }, - { label: "Strength-based-social-hierarchy", value: "974" }, - { label: "Strong-lead", value: "944" }, - { label: "Strong-male-lead", value: "964" }, - { label: "Student-teacher-relationship", value: "1026" }, - { label: "Suspense", value: "987" }, - { label: "Sword-and-sorcery", value: "875" }, - { label: "Threesome", value: "574" }, - { label: "Transformation Ability", value: "736" }, - { label: "Traumatising-content", value: "1040" }, - { label: "Underestimated-lead", value: "919" }, - { label: "Underestimated-male-lead", value: "966" }, - { label: "Unique-abilities", value: "1021" }, - { label: "Unique-skill", value: "1022" }, - { label: "Unique-skills", value: "1023" }, - { label: "Unlimited Flow", value: "1044" }, - { label: "Unrequited Love", value: "806" }, - { label: "Urban-fantasy", value: "1041" }, - { label: "Villainess Noble Girls", value: "719" }, - { label: "Weak-lead", value: "885" }, - { label: "Web-novel", value: "1024" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - tags: { - label: "Жанры", - value: { include: [], exclude: [] }, - options: [ - { label: "Боевые искусства", value: "22" }, - { label: "Гарем", value: "114" }, - { label: "Гендер бендер", value: "246" }, - { label: "Дзёсэй", value: "216" }, - { label: "Для взрослых", value: "115" }, - { label: "Для взрослых", value: "258" }, - { label: "Драма", value: "7" }, - { label: "Исторический", value: "101" }, - { label: "Комедия", value: "17" }, - { label: "Лоликон", value: "638" }, - { label: "Магический реализм", value: "922" }, - { label: "Меха", value: "24" }, - { label: "Милитари", value: "12" }, - { label: "Мистика", value: "2" }, - { label: "Научная фантастика", value: "13" }, - { label: "Непристойность", value: "747" }, - { label: "Повседневность", value: "93" }, - { label: "Приключение", value: "11" }, - { label: "Психология", value: "18" }, - { label: "Романтика", value: "9" }, - { label: "Сверхъестественное", value: "20" }, - { label: "Сёдзё", value: "15" }, - { label: "Сёдзё-ай", value: "23" }, - { label: "Сёнэн", value: "189" }, - { label: "Сёнэн-ай", value: "680" }, - { label: "Спорт", value: "420" }, - { label: "Сэйнэн", value: "5" }, - { label: "Сюаньхуа", value: "242" }, - { label: "Сянься", value: "364" }, - { label: "Трагедия", value: "19" }, - { label: "Триллер", value: "3" }, - { label: "Ужасы", value: "1" }, - { label: "Уся", value: "720" }, - { label: "Фэнтези", value: "8" }, - { label: "Школьная жизнь", value: "21" }, - { label: "Экшн", value: "14" }, - { label: "Эччи", value: "327" }, - { label: "Юри", value: "691" }, - { label: "Яой", value: "682" }, - { label: "Eastern fantasy", value: "907" }, - { label: "Isekai", value: "999" }, - { label: "Video games", value: "993" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - } satisfies Filters; -} - -export default new RNBH(); - -interface responseNovels { - id: number; - names: Names; - rating: number; - synopsis: string; - url: string; - poster: Poster; - created_at: number; - status: string; - user?: User; - counts: Counts; -} -interface Names { - eng: string; - rus?: string; - original?: string; -} -interface Poster { - medium: string; - small: string; - color: string; -} -interface User { - status?: null; - liked: boolean; -} -interface Counts { - volumes: string; - chapters: string; -} - -interface responseNovel { - id: number; - names: Names; - rating: number; - year: number; - synopsis: string; - url: string; - posters: Posters; - isSpecial: boolean; - liked: boolean; - authors?: AuthorsEntity[] | null; - translators?: TranslatorsEntity[] | null; - description: string; - status: Status; - start_reading_url: string; - html: string; - tags: Tags; -} -interface Posters { - big: string; - medium: string; - small: string; - tiny: string; - color: string; -} -interface AuthorsEntity { - name_eng: string; - pivot: Pivot; -} -interface Pivot { - ranobe_id: number; - author_id?: number; - translator_id?: number; -} -interface TranslatorsEntity { - name: string; - pivot: Pivot; -} -interface Status { - id: number; - title: string; -} -interface Tags { - events?: GenresOrEntity[] | null; - genres?: GenresOrEntity[] | null; -} -interface GenresOrEntity { - id: number; - names: Names; - url: string; - title: string; - description?: string | null; -} - -interface responseChapters { - marked_chapters_ids?: null[] | null; - volumes?: VolumesEntity[] | null; -} -interface VolumesEntity { - id: number; - num: number; - name: string; - status: Status; - chapters?: ChaptersEntity[] | null; -} -interface Status { - id: number; - name: string; -} -interface ChaptersEntity { - id: number; - name: string; - num: number; - url: string; - is_new: boolean; - has_images: boolean; - changed_at: string; - comments_count: string; -} - -interface responseSearch { - meta: Meta; - collections?: DataEntity[] | null; - data?: DataEntity[] | null; -} -interface Meta { - key: string; - title: string; -} -interface DataEntity { - id: number; - names?: Names | null; - description?: string | null; - url: string; - image?: string | null; - name?: string | null; - level?: number | null; - evolution_scheme?: null; - roles?: null[] | null; - avatar?: Avatar | null; - has_plus?: boolean | null; -} -interface Avatar { - big: string; - color: string; - thumb: string; - is_default: boolean; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +class RNBH implements Plugin.PluginBase { + id = "RNBH.org"; + name = "RanobeHub"; + version = "1.0.0"; + site = "https://ranobehub.org"; + icon = "src/ru/ranobehub/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/api/search?page=" + pageNo + "&sort="; + url += showLatestNovels + ? "last_chapter_at" + : filters?.sort?.value || "computed_rating"; + url += "&status=" + (filters?.status?.value ? filters?.status?.value : "0"); + + if (filters) { + if (filters.country?.value?.length) { + url += "&country=" + filters.country.value.join(","); + } + + const includeTags = [ + filters.tags?.value?.include, + filters.events?.value?.include, + ].flat().filter((t) => t); + + if (includeTags.length) { + url += "&tags:positive=" + includeTags.join(","); + } + + const excludeTags = [ + filters.tags?.value?.exclude, + filters.events?.value?.exclude, + ].flat().filter((t) => t); + + if (excludeTags.length) { + url += "&tags:negative=" + excludeTags.join(","); + } + } + url += "&take=40"; + const result = await fetchApi(url); + const body = (await result.json()) as { resource: responseNovels[] }; + + const novels: Plugin.NovelItem[] = []; + body.resource.forEach((novel) => + novels.push({ + name: novel.names.rus || novel.names.eng || novel.names.original, + cover: novel.poster.medium, + url: novel.url, + }), + ); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const novelId = novelUrl + .substring("https://ranobehub.org/ranobe/".length) + .split("-")[0]; + const result = await fetchApi(this.site + "/api/ranobe/" + novelId); + const json = (await result.json()) as { data: responseNovel }; + + const novel: Plugin.SourceNovel = { + url: json.data.url, + name: json.data.names?.rus || json.data.names.eng, + cover: json.data.posters.medium, + summary: json.data.description, + author: json.data?.authors?.[0]?.name_eng || "", + status: json.data.status.title.includes("процессе") + ? NovelStatus.Ongoing + : NovelStatus.Completed, + }; + + const tags = [json.data.tags.events, json.data.tags.genres] + .flat() + .map((tags) => tags?.names?.rus || tags?.names?.eng || tags?.title) + .filter((tags) => tags); + + if (tags.length) { + novel.genres = tags.join(", "); + } + + const chapters: Plugin.ChapterItem[] = []; + const chaptersRaw = await fetchApi(`${this.site}/api/ranobe/${novelId}/contents`); + const chaptersJSON = (await chaptersRaw.json()) as { + volumes: VolumesEntity[]; + }; + + chaptersJSON.volumes.forEach((volume) => + volume.chapters?.forEach((chapter) => { + chapters.push({ + name: chapter.name, + url: chapter.url, + releaseTime: dayjs(parseInt(chapter.changed_at, 10) * 1000).format("LLL"), + chapterNumber: chapters.length + 1, + }); + }), + ); + + novel.chapters = chapters; + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(chapterUrl); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + loadedCheerio(".chapter-hoticons").remove(); + loadedCheerio("div.text:nth-child(1) img").each((index, element) => { + if (!loadedCheerio(element).attr("src")?.startsWith("http")) { + const dataMediaId = loadedCheerio(element).attr("data-media-id"); + loadedCheerio(element).attr("src", this.site + "/api/media/" + dataMediaId); + } + }); + + let chapterText = loadedCheerio("div.text:nth-child(1)").html() || ""; + + // Remove script tags + chapterText = chapterText?.replace( + /<\s*script[^>]*>[\s\S]*?<\/script>/gim, + "", + ); + return chapterText; + } + + async searchNovels( + searchTerm: string, + //pageNo: number | undefined = 1, + ): Promise { + const url = `${this.site}/api/fulltext/global?query=${searchTerm}&take=10`; + const result = await fetchApi(url); + const data = (await result.json()) as responseSearch[]; + const novels: Plugin.NovelItem[] = []; + + data + ?.find((item) => item?.meta?.key === "ranobe") + ?.data?.forEach((novel) => + novels.push({ + name: + novel?.names?.rus || + novel?.names?.eng || + novel.name || + novel?.names?.original || + "", + url: + "https://ranobehub.org/ranobe/" + + novel?.url?.match( + /https:\/\/ranobehub\.org\/ranobe\/(.*?)\?utm_source=search_name&utm_medium=search&utm_campaign=search_using/, + )?.[1], + cover: novel?.image?.replace("/small", "/medium"), + }), + ); + + return novels; + } + + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "computed_rating", + options: [ + { label: "по рейтингу", value: "computed_rating" }, + { label: "по дате обновления", value: "last_chapter_at" }, + { label: "по дате добавления", value: "created_at" }, + { label: "по названию", value: "name_rus" }, + { label: "по просмотрам", value: "views" }, + { label: "по количеству глав", value: "count_chapters" }, + { label: "по объему перевода", value: "count_of_symbols" }, + ], + type: FilterTypes.Picker, + }, + status: { + label: "Статус перевода", + value: "", + options: [ + { label: "Любой", value: "" }, + { label: "В процессе", value: "1" }, + { label: "Завершено", value: "2" }, + { label: "Заморожено", value: "3" }, + { label: "Неизвестно", value: "4" }, + ], + type: FilterTypes.Picker, + }, + country: { + label: "Тип", + value: [], + options: [ + { label: "Китай", value: "2" }, + { label: "Корея", value: "3" }, + { label: "США", value: "4" }, + { label: "Япония", value: "1" }, + ], + type: FilterTypes.CheckboxGroup, + }, + events: { + label: "События", + value: { include: [], exclude: [] }, + options: [ + { label: "[Награжденная работа]", value: "611" }, + { label: "18+", value: "338" }, + { label: "Авантюристы", value: "353" }, + { label: "Автоматоны", value: "538" }, + { label: "Агрессивные персонажи", value: "434" }, + { label: "Ад", value: "509" }, + { label: "Адаптация в радиопостановку", value: "522" }, + { label: "Академия", value: "25" }, + { label: "Актеры озвучки", value: "578" }, + { label: "Активный главный герой", value: "132" }, + { label: "Алхимия", value: "116" }, + { label: "Альтернативный мир", value: "28" }, + { label: "Амнезия/Потеря памяти", value: "247" }, + { label: "Анабиоз", value: "657" }, + { label: "Ангелы", value: "218" }, + { label: "Андрогинные персонажи", value: "217" }, + { label: "Андроиды", value: "82" }, + { label: "Анти-магия", value: "471" }, + { label: "Антигерой", value: "346" }, + { label: "Антикварный магазин", value: "572" }, + { label: "Антисоциальный главный герой", value: "562" }, + { label: "Антиутопия", value: "663" }, + { label: "Апатичный протагонист", value: "29" }, + { label: "Апокалипсис", value: "314" }, + { label: "Аранжированный брак", value: "285" }, + { label: "Армия", value: "598" }, + { label: "Артефакты", value: "117" }, + { label: "Артисты", value: "460" }, + { label: "Банды", value: "581" }, + { label: "БДСМ", value: "676" }, + { label: "Бедный главный герой", value: "309" }, + { label: "Безжалостный главный герой", value: "144" }, + { label: "Беззаботный главный герой", value: "355" }, + { label: "Безусловная любовь", value: "650" }, + { label: "Беременность", value: "131" }, + { label: "Бесполый главный герой", value: "222" }, + { label: "Бессмертные", value: "275" }, + { label: "Бесстрашный протагонист", value: "619" }, + { label: "Бесстыдный главный герой", value: "256" }, + { label: "Бесчестный главный герой", value: "699" }, + { label: "Библиотека", value: "342" }, + { label: "Бизнесмен ", value: "813" }, + { label: "Биочип", value: "120" }, + { label: "Бисексуальный главный герой", value: "822" }, + { label: "Близнецы", value: "148" }, + { label: "Боги", value: "211" }, + { label: "Богини", value: "356" }, + { label: "Боевая академия", value: "369" }, + { label: "Боевые духи", value: "347" }, + { label: "Боевые соревнования", value: "422" }, + { label: "Божественная защита", value: "336" }, + { label: "Божественные силы", value: "224" }, + { label: "Большая разница в возрасте между героем и его любовным интересом", value: "348" }, + { label: "Борьба за власть", value: "544" }, + { label: "Брак", value: "363" }, + { label: "Брак по расчету", value: "65" }, + { label: "Братский комплекс", value: "31" }, + { label: "Братство", value: "413" }, + { label: "Братья и сестры", value: "518" }, + { label: "Буддизм", value: "742" }, + { label: "Быстрая культивация", value: "273" }, + { label: "Быстрообучаемый", value: "221" }, + { label: "Валькирии", value: "667" }, + { label: "Вампиры", value: "266" }, + { label: "Ваншот", value: "679" }, + { label: "Ведьмы", value: "169" }, + { label: "Вежливый главный герой", value: "289" }, + { label: "Верные подчиненные", value: "225" }, + { label: "Взрослый главный герой", value: "183" }, + { label: "Видит то, чего не видят другие", value: "636" }, + { label: "Виртуальная реальность", value: "313" }, + { label: "Владелец магазина", value: "653" }, + { label: "Внезапная сила", value: "376" }, + { label: "Внезапное богатство", value: "802" }, + { label: "Внешний вид отличается от фактического возраста", value: "334" }, + { label: "Военные Летописи", value: "740" }, + { label: "Возвращение из другого мира", value: "673" }, + { label: "Войны", value: "58" }, + { label: "Вокалоид", value: "678" }, + { label: "Волшебники/Волшебницы", value: "477" }, + { label: "Волшебные звери", value: "201" }, + { label: "Воображаемый друг", value: "614" }, + { label: "Воры", value: "326" }, + { label: "Воскрешение", value: "78" }, + { label: "Враги становятся возлюбленными", value: "428" }, + { label: "Враги становятся союзниками", value: "502" }, + { label: "Врата в другой мир", value: "558" }, + { label: "Врачи", value: "286" }, + { label: "Временной парадокс", value: "163" }, + { label: "Всемогущий главный герой", value: "42" }, + { label: "Вторжение на землю", value: "77" }, + { label: "Второй шанс", value: "112" }, + { label: "Вуайеризм", value: "851" }, + { label: "Выживание", value: "290" }, + { label: "Высокомерные персонажи", value: "268" }, + { label: "Гадание", value: "540" }, + { label: "Гарем рабов", value: "828" }, + { label: "Геймеры", value: "302" }, + { label: "Генералы", value: "223" }, + { label: "Генетические модификации", value: "620" }, + { label: "Гениальный главный герой", value: "566" }, + { label: "Герои", value: "173" }, + { label: "Героиня — сорванец", value: "525" }, + { label: "Герой влюбляется первым", value: "64" }, + { label: "Гетерохромия", value: "510" }, + { label: "Гильдии", value: "323" }, + { label: "Гипнотизм", value: "768" }, + { label: "Главный герой — бог", value: "486" }, + { label: "Главный герой — гуманоид", value: "595" }, + { label: "Главный герой — женщина", value: "63" }, + { label: "Главный герой — мужчина", value: "39" }, + { label: "Главный герой — наполовину человек", value: "362" }, + { label: "Главный герой — отец", value: "859" }, + { label: "Главный герой — раб", value: "832" }, + { label: "Главный герой — ребенок", value: "415" }, + { label: "Главный герой — рубака", value: "400" }, + { label: "Главный герой — собиратель гарема", value: "439" }, + { label: "Главный герой влюбляется первым", value: "655" }, + { label: "Главный герой играет роль", value: "396" }, + { label: "Главный герой носит очки", value: "637" }, + { label: "Главный герой пацифист", value: "675" }, + { label: "Главный герой с несколькими телами", value: "628" }, + { label: "Главный герой силен с самого начала", value: "45" }, + { label: "Гладиаторы", value: "549" }, + { label: "Глуповатый главный герой", value: "295" }, + { label: "Гоблины", value: "529" }, + { label: "Големы", value: "569" }, + { label: "Гомункул", value: "850" }, + { label: "Горничные", value: "380" }, + { label: "Госпиталь", value: "1043" }, + { label: "Готовка", value: "193" }, + { label: "Гриндинг", value: "303" }, + { label: "Дао Компаньон", value: "384" }, + { label: "Даосизм", value: "792" }, + { label: "Дарк", value: "151" }, + { label: "Дварфы", value: "220" }, + { label: "Двойная личность", value: "601" }, + { label: "Двойник", value: "547" }, + { label: "Дворецкий", value: "623" }, + { label: "Дворяне", value: "41" }, + { label: "Дворянство/Аристократия", value: "354" }, + { label: "Девушки-монстры", value: "634" }, + { label: "Демоническая техника культивации", value: "706" }, + { label: "Демоны", value: "6" }, + { label: "Денежный долг", value: "841" }, + { label: "Депрессия", value: "494" }, + { label: "Детективы", value: "561" }, + { label: "Дискриминация", value: "34" }, + { label: "Добыча денег одно из основных стремлений главного героя", value: "307" }, + { label: "Долгая разлука", value: "200" }, + { label: "Домашние дела", value: "178" }, + { label: "Домогательство", value: "394" }, + { label: "Драконы", value: "195" }, + { label: "Драконьи всадники", value: "555" }, + { label: "Древние времена", value: "102" }, + { label: "Древний Китай", value: "284" }, + { label: "Дружба", value: "97" }, + { label: "Друзья детства", value: "170" }, + { label: "Друзья становятся врагами", value: "507" }, + { label: "Друиды", value: "427" }, + { label: "Дух лисы", value: "842" }, + { label: "Духи/Призраки", value: "46" }, + { label: "Духовный советник", value: "351" }, + { label: "Душевность", value: "587" }, + { label: "Души", value: "136" }, + { label: "Европейская атмосфера", value: "457" }, + { label: "Ёкаи", value: "516" }, + { label: "Есть аниме-адаптация", value: "26" }, + { label: "Есть видеоигра по мотивам", value: "491" }, + { label: "Есть манга-адаптация", value: "27" }, + { label: "Есть манхва-адаптация", value: "453" }, + { label: "Есть маньхуа-адаптация", value: "298" }, + { label: "Есть сериал-адаптация", value: "421" }, + { label: "Есть фильм по мотивам", value: "47" }, + { label: "Женища-наставник", value: "438" }, + { label: "Жертва изнасилования влюбляется в насильника", value: "414" }, + { label: "Жесткая, двуличная личность", value: "249" }, + { label: "Жестокие персонажи", value: "436" }, + { label: "Жестокое обращение с ребенком", value: "617" }, + { label: "Жестокость", value: "127" }, + { label: "Животноводство", value: "765" }, + { label: "Животные черты", value: "466" }, + { label: "Жизнь в квартире", value: "554" }, + { label: "Жрицы", value: "564" }, + { label: "Заботливый главный герой", value: "176" }, + { label: "Забывчивый главный герой", value: "579" }, + { label: "Заговоры", value: "177" }, + { label: "Закалка тела", value: "269" }, + { label: "Законники", value: "769" }, + { label: "Замкнутый главный герой", value: "533" }, + { label: "Запечатанная сила", value: "344" }, + { label: "Застенчивые персонажи", value: "443" }, + { label: "Звери", value: "119" }, + { label: "Звери-компаньоны", value: "192" }, + { label: "Злой протагонист", value: "125" }, + { label: "Злые боги", value: "437" }, + { label: "Злые организации", value: "503" }, + { label: "Злые религии", value: "725" }, + { label: "Знаменитости", value: "397" }, + { label: "Знаменитый главный герой", value: "469" }, + { label: "Знания современного мира", value: "185" }, + { label: "Зомби", value: "321" }, + { label: "Игра на выживание", value: "162" }, + { label: "Игривый протагонист", value: "700" }, + { label: "Игровая система рейтинга", value: "301" }, + { label: "Игровые элементы", value: "152" }, + { label: "Игрушки (18+)", value: "644" }, + { label: "Из грязи в князи", value: "330" }, + { label: "Из женщины в мужчину ", value: "688" }, + { label: "Из мужчины в женщину", value: "698" }, + { label: "Из полного в худого", value: "809" }, + { label: "Из слабого в сильного", value: "81" }, + { label: "Из страшно(го/й) в красиво(го/ю)", value: "810" }, + { label: "Извращенный главный герой", value: "349" }, + { label: "Изгои", value: "472" }, + { label: "Изменение расы", value: "627" }, + { label: "Изменения внешнего вида", value: "191" }, + { label: "Изменения личности", value: "99" }, + { label: "Изнасилование", value: "110" }, + { label: "Изображения жестокости", value: "260" }, + { label: "Империи", value: "749" }, + { label: "Инвалидность", value: "656" }, + { label: "Индустриализация", value: "180" }, + { label: "Инженер", value: "35" }, + { label: "Инцест", value: "463" }, + { label: "Искусственный интеллект", value: "118" }, + { label: "Исследования", value: "635" }, + { label: "Каннибализм", value: "377" }, + { label: "Карточные игры", value: "654" }, + { label: "Киберспорт", value: "658" }, + { label: "Кланы", value: "950" }, + { label: "Класс безработного [Игровой класс в игре]", value: "727" }, + { label: "Клоны", value: "365" }, + { label: "Клубы", value: "96" }, + { label: "Книги", value: "341" }, + { label: "Книги навыков", value: "312" }, + { label: "Книжный червь", value: "455" }, + { label: "Коварство", value: "111" }, + { label: "Коллеги", value: "683" }, + { label: "Колледж/Университет", value: "712" }, + { label: "Кома", value: "826" }, + { label: "Командная работа", value: "426" }, + { label: "Комедийный оттенок", value: "523" }, + { label: "Комплекс неполноценности", value: "489" }, + { label: "Комплекс семейных отношений", value: "104" }, + { label: "Конкуренция", value: "746" }, + { label: "Контракты", value: "483" }, + { label: "Контроль разума/сознания", value: "262" }, + { label: "Копейщик", value: "339" }, + { label: "Королевская битва", value: "1025" }, + { label: "Королевская власть", value: "53" }, + { label: "Королевства", value: "141" }, + { label: "Коррупция", value: "378" }, + { label: "Космические войны", value: "674" }, + { label: "Красивый герой", value: "107" }, + { label: "Крафт", value: "287" }, + { label: "Кризис личности", value: "599" }, + { label: "Кругосветное путешествие", value: "257" }, + { label: "Кудере", value: "440" }, + { label: "Кузены", value: "701" }, + { label: "Кузнец", value: "454" }, + { label: "Кукловоды", value: "431" }, + { label: "Куклы/марионетки", value: "573" }, + { label: "Культивация", value: "123" }, + { label: "Куннилингус", value: "632" }, + { label: "Легенды", value: "430" }, + { label: "Легкая жизнь", value: "604" }, + { label: "Ленивый главный герой", value: "570" }, + { label: "Лидерство", value: "424" }, + { label: "Лоли", value: "92" }, + { label: "Лотерея", value: "401" }, + { label: "Любовный интерес влюбляется первым", value: "647" }, + { label: "Любовный интерес главного героя носит очки", value: "576" }, + { label: "Любовный треугольник", value: "98" }, + { label: "Любовь детства", value: "500" }, + { label: "Любовь с первого взгляда", value: "730" }, + { label: "Магические надписи", value: "373" }, + { label: "Магические печати", value: "277" }, + { label: "Магические технологии", value: "357" }, + { label: "Магическое пространство/измерение, доступное не всем персонажам", value: "244" }, + { label: "Магия", value: "38" }, + { label: "Магия призыва", value: "333" }, + { label: "Мазохистские персонажи", value: "660" }, + { label: "Манипулятивные персонажи", value: "130" }, + { label: "Мания", value: "91" }, + { label: "Мастер на все руки", value: "390" }, + { label: "Мастурбация", value: "846" }, + { label: "Махо-сёдзё", value: "496" }, + { label: "Медицинские знания", value: "441" }, + { label: "Медленная романтическая линия", value: "113" }, + { label: "Медленное развитие на старте ", value: "670" }, + { label: "Межпространственные путешествия", value: "316" }, + { label: "Менеджмент", value: "182" }, + { label: "Мертвый главный герой", value: "794" }, + { label: "Месть", value: "88" }, + { label: "Метаморфы", value: "234" }, + { label: "Меч и магия", value: "55" }, + { label: "Мечник", value: "607" }, + { label: "Мечты", value: "733" }, + { label: "Милая история", value: "709" }, + { label: "Милое дитя", value: "596" }, + { label: "Милый главный герой", value: "697" }, + { label: "Мировое дерево", value: "385" }, + { label: "Мистический ореол вокруг семьи", value: "409" }, + { label: "Мифические звери", value: "418" }, + { label: "Мифология", value: "468" }, + { label: "Младшие братья", value: "843" }, + { label: "Младшие сестры", value: "465" }, + { label: "ММОРПГ (ЛитРПГ)", value: "306" }, + { label: "Множество перемещенных людей", value: "488" }, + { label: "Множество реальностей", value: "278" }, + { label: "Множество реинкарнированных людей", value: "227" }, + { label: "Модели", value: "649" }, + { label: "Молчаливый персонаж", value: "705" }, + { label: "Монстры", value: "69" }, + { label: "Мужская гей-пара", value: "685" }, + { label: "Мужчина-яндере", value: "155" }, + { label: "Музыка", value: "589" }, + { label: "Музыкальные группы", value: "588" }, + { label: "Мутации", value: "668" }, + { label: "Мутированные существа", value: "317" }, + { label: "Навык кражи", value: "626" }, + { label: "Навязчивая любовь", value: "85" }, + { label: "Наемники", value: "324" }, + { label: "Назойливый возлюбленный", value: "501" }, + { label: "Наивный главный герой", value: "66" }, + { label: "Наркотики", value: "661" }, + { label: "Нарциссический главный герой", value: "470" }, + { label: "Насилие сексуального характера", value: "824" }, + { label: "Наследование", value: "372" }, + { label: "Национализм", value: "318" }, + { label: "Не блещущий внешне главный герой", value: "328" }, + { label: "Не родные братья и сестры", value: "464" }, + { label: "Небеса", value: "508" }, + { label: "Небесное испытание", value: "274" }, + { label: "Негуманоидный главный герой", value: "622" }, + { label: "Недоверчивый главный герой", value: "485" }, + { label: "Недооцененный главный герой", value: "140" }, + { label: "Недоразумения", value: "202" }, + { label: "Неизлечимая болезнь", value: "75" }, + { label: "Некромант", value: "308" }, + { label: "Нелинейная история", value: "157" }, + { label: "Ненавистный главный герой", value: "487" }, + { label: "Ненадежный рассказчик", value: "165" }, + { label: "Нерезиденты", value: "821" }, + { label: "Нерешительный главный герой", value: "741" }, + { label: "Несерьезный главный герой", value: "294" }, + { label: "Несколько временных линий", value: "517" }, + { label: "Несколько главных героев", value: "475" }, + { label: "Несколько идентичностей", value: "615" }, + { label: "Несколько личностей", value: "474" }, + { label: "Нетораре", value: "721" }, + { label: "Нетори", value: "450" }, + { label: "Неудачливый главный герой", value: "567" }, + { label: "Ниндзя", value: "358" }, + { label: "Обещание из детства", value: "738" }, + { label: "Обманщик", value: "411" }, + { label: "Обмен телами", value: "94" }, + { label: "Обнаженка", value: "417" }, + { label: "Обольщение", value: "718" }, + { label: "Оборотни", value: "624" }, + { label: "Обратный гарем", value: "255" }, + { label: "Общество монстров", value: "226" }, + { label: "Обязательство", value: "548" }, + { label: "Огнестрельное оружие", value: "179" }, + { label: "Ограниченная продолжительность жизни", value: "73" }, + { label: "Одержимость", value: "447" }, + { label: "Одинокий главный герой", value: "304" }, + { label: "Одиночество", value: "199" }, + { label: "Одиночное проживание", value: "207" }, + { label: "Околосмертные переживания", value: "773" }, + { label: "Оммёдзи", value: "542" }, + { label: "Омоложение", value: "237" }, + { label: "Организованная преступность", value: "478" }, + { label: "Оргия", value: "825" }, + { label: "Орки", value: "228" }, + { label: "Освоение навыков", value: "235" }, + { label: "Основано на аниме", value: "553" }, + { label: "Основано на видео игре", value: "704" }, + { label: "Основано на визуальной новелле ", value: "861" }, + { label: "Основано на песне", value: "677" }, + { label: "Основано на фильме", value: "552" }, + { label: "Осторожный главный герой", value: "122" }, + { label: "Отаку", value: "512" }, + { label: "Открытый космос", value: "150" }, + { label: "Отношения в сети", value: "713" }, + { label: "Отношения между богом и человеком", value: "603" }, + { label: "Отношения между людьми и нелюдьми", value: "205" }, + { label: "Отношения на расстоянии", value: "852" }, + { label: "Отношения начальник-подчиненный", value: "590" }, + { label: "Отношения Сенпай-Коухай", value: "513" }, + { label: "Отношения ученика и учителя", value: "451" }, + { label: "Отношения учитель-ученик", value: "343" }, + { label: "Отношения хозяин-слуга", value: "206" }, + { label: "Отомэ игра", value: "723" }, + { label: "Отсутствие здравого смысла", value: "605" }, + { label: "Отсутствие родителей", value: "575" }, + { label: "Офисный роман", value: "686" }, + { label: "Официанты", value: "681" }, + { label: "Охотники", value: "288" }, + { label: "Очаровательный главный герой", value: "659" }, + { label: "Падшее дворянство", value: "618" }, + { label: "Падшие ангелы", value: "505" }, + { label: "Пайзури", value: "630" }, + { label: "Паразиты", value: "535" }, + { label: "Параллельные миры", value: "86" }, + { label: "Парк развлечений", value: "586" }, + { label: "Пародия", value: "319" }, + { label: "Певцы/Певицы", value: "734" }, + { label: "Первая любовь", value: "716" }, + { label: "Первоисточник новеллы — манга", value: "560" }, + { label: "Первый раз", value: "845" }, + { label: "Перемещение в другой мир, имея при себе современные достижения", value: "732" }, + { label: "Перемещение в игровой мир", value: "532" }, + { label: "Перемещение в иной мир", value: "754" }, + { label: "Перерождение в ином мире", value: "755" }, + { label: "Переселение души/Трансмиграция", value: "139" }, + { label: "Персонаж использует щит", value: "631" }, + { label: "Петля времени", value: "79" }, + { label: "Пираты", value: "817" }, + { label: "Писатели", value: "408" }, + { label: "Питомцы", value: "253" }, + { label: "Племенное общество", value: "291" }, + { label: "Повелитель демонов", value: "171" }, + { label: "Повествование от нескольких лиц/Несколько точек зрения", value: "156" }, + { label: "Подземелья", value: "219" }, + { label: "Пожелания", value: "166" }, + { label: "Познание Дао", value: "360" }, + { label: "Покинутое дитя", value: "534" }, + { label: "Полигамия", value: "296" }, + { label: "Политика", value: "43" }, + { label: "Полиция", value: "801" }, + { label: "Полулюди", value: "335" }, + { label: "Пользователь уникального оружия", value: "432" }, + { label: "Популярный любовный интерес", value: "241" }, + { label: "Постапокалиптика", value: "60" }, + { label: "Потерянные цивилизации", value: "751" }, + { label: "Похищения людей", value: "707" }, + { label: "Поэзия", value: "404" }, + { label: "Правонарушители", value: "694" }, + { label: "Прагматичный главный герой", value: "536" }, + { label: "Преданный любовный интерес", value: "106" }, + { label: "Предательство", value: "103" }, + { label: "Предвидение", value: "52" }, + { label: "Прекрасная героиня", value: "30" }, + { label: "Преступники", value: "728" }, + { label: "Преступность", value: "83" }, + { label: "Призванный герой", value: "147" }, + { label: "Призраки", value: "51" }, + { label: "Принуждение к отношениям", value: "602" }, + { label: "Принцессы", value: "933" }, + { label: "Притворная пара", value: "600" }, + { label: "Причудливые персонажи", value: "297" }, + { label: "Пришельцы/Инопланетяне", value: "76" }, + { label: "Программист", value: "666" }, + { label: "Проклятия", value: "48" }, + { label: "Промывание мозгов", value: "519" }, + { label: "Пропуск времени", value: "138" }, + { label: "Пророчества", value: "429" }, + { label: "Проститутки", value: "844" }, + { label: "Пространственное манипулирование", value: "375" }, + { label: "Прошлое играет большую роль", value: "215" }, + { label: "Прыжки между мирами", value: "737" }, + { label: "Психические силы", value: "265" }, + { label: "Психопаты", value: "158" }, + { label: "Путешествие во времени", value: "80" }, + { label: "Пытка", value: "168" }, + { label: "Рабы", value: "829" }, + { label: "Развод", value: "771" }, + { label: "Разумные предметы", value: "174" }, + { label: "Расизм", value: "320" }, + { label: "Рассказ", value: "61" }, + { label: "Расторжения помолвки", value: "243" }, + { label: "Расы зооморфов", value: "209" }, + { label: "Ревность", value: "717" }, + { label: "Редакторы", value: "684" }, + { label: "Реинкарнация", value: "281" }, + { label: "Реинкарнация в монстра", value: "204" }, + { label: "Реинкарнация в объект", value: "692" }, + { label: "Религии", value: "565" }, + { label: "Репортеры", value: "837" }, + { label: "Ресторан", value: "652" }, + { label: "Решительный главный герой", value: "124" }, + { label: "Робкий главный герой", value: "800" }, + { label: "Родитель одиночка", value: "687" }, + { label: "Родительский комплекс", value: "531" }, + { label: "Родословная", value: "121" }, + { label: "Романтический подсюжет ", value: "159" }, + { label: "Рост персонажа", value: "95" }, + { label: "Рыцари", value: "142" }, + { label: "Садистские персонажи", value: "642" }, + { label: "Самоотверженный главный герой", value: "748" }, + { label: "Самоубийства", value: "616" }, + { label: "Самурай", value: "646" }, + { label: "Сборник коротких историй", value: "456" }, + { label: "Связанные сюжетные линии", value: "473" }, + { label: "Святые", value: "761" }, + { label: "Священники", value: "325" }, + { label: "Сдержанный главный герой", value: "799" }, + { label: "Секретные организации", value: "331" }, + { label: "Секреты", value: "577" }, + { label: "Секс рабы", value: "830" }, + { label: "Семейный конфликт", value: "770" }, + { label: "Семь добродетелей", value: "233" }, + { label: "Семь смертных грехов", value: "134" }, + { label: "Семья", value: "251" }, + { label: "Сёнэн-ай подсюжет ", value: "664" }, + { label: "Серийные убийцы", value: "497" }, + { label: "Сестринский комплекс", value: "498" }, + { label: "Сила духа", value: "282" }, + { label: "Сила, требующая платы за пользование", value: "520" }, + { label: "Сильная пара", value: "109" }, + { label: "Сильный в сильнейшего", value: "359" }, + { label: "Сильный любовный интерес", value: "161" }, + { label: "Синдром восьмиклассника", value: "90" }, + { label: "Сироты", value: "214" }, + { label: "Система уровней", value: "198" }, + { label: "Системный администратор", value: "476" }, + { label: "Скрытие истинной личности", value: "371" }, + { label: "Скрытие истинных способностей", value: "252" }, + { label: "Скрытный главный герой", value: "133" }, + { label: "Скрытые способности", value: "128" }, + { label: "Скульпторы", value: "366" }, + { label: "Слабо выраженная романтическая линия", value: "213" }, + { label: "Слабый главный герой", value: "188" }, + { label: "Слепой главный герой", value: "864" }, + { label: "Слуги", value: "232" }, + { label: "Смерть", value: "49" }, + { label: "Смерть близких", value: "361" }, + { label: "Собственнические персонажи", value: "108" }, + { label: "Современность", value: "40" }, + { label: "Сожительство", value: "482" }, + { label: "Создание армии", value: "175" }, + { label: "Создание артефактов", value: "292" }, + { label: "Создание клана", value: "448" }, + { label: "Создание королевства", value: "181" }, + { label: "Создание навыков", value: "236" }, + { label: "Создание секты", value: "393" }, + { label: "Солдаты/Военные", value: "71" }, + { label: "Сон", value: "571" }, + { label: "Состоятельные персонажи", value: "67" }, + { label: "Социальная иерархия на основе силы", value: "137" }, + { label: "Социальные изгои", value: "480" }, + { label: "Спасение мира", value: "597" }, + { label: "Специальные способности", value: "54" }, + { label: "Спокойный главный герой", value: "32" }, + { label: "Справедливый главный герой", value: "702" }, + { label: "Средневековье", value: "184" }, + { label: "Ссорящаяся пара", value: "293" }, + { label: "Сталкеры", value: "689" }, + { label: "Старение", value: "190" }, + { label: "Стоические персонажи", value: "444" }, + { label: "Стокгольмский синдром", value: "643" }, + { label: "Стратег", value: "425" }, + { label: "Стратегические битвы", value: "160" }, + { label: "Стратегия", value: "1038" }, + { label: "Стрелки", value: "458" }, + { label: "Стрельба из лука", value: "383" }, + { label: "Студенческий совет", value: "490" }, + { label: "Судьба", value: "271" }, + { label: "Суккубы", value: "484" }, + { label: "Супер герои", value: "1039" }, + { label: "Суровая подготовка", value: "261" }, + { label: "Таинственная болезнь", value: "74" }, + { label: "Таинственное прошлое", value: "263" }, + { label: "Тайная личность", value: "310" }, + { label: "Тайные отношения", value: "812" }, + { label: "Танцоры", value: "840" }, + { label: "Телохранители", value: "452" }, + { label: "Тентакли", value: "693" }, + { label: "Террористы", value: "515" }, + { label: "Технологический разрыв", value: "621" }, + { label: "Тихие персонажи", value: "546" }, + { label: "Толстый главный герой", value: "299" }, + { label: "Торговцы", value: "416" }, + { label: "Травля/Буллинг", value: "89" }, + { label: "Травник", value: "708" }, + { label: "Трагическое прошлое", value: "164" }, + { label: "Трансплантация воспоминаний", value: "367" }, + { label: "Трап (Путаница с гендером персонажа)", value: "582" }, + { label: "Трудолюбивый главный герой", value: "37" }, + { label: "Тюрьма", value: "479" }, + { label: "Убийства", value: "84" }, + { label: "Убийцы", value: "248" }, + { label: "Убийцы драконов", value: "606" }, + { label: "Уверенный главный герой", value: "270" }, + { label: "Удачливый главный герой", value: "402" }, + { label: "Укротитель монстров", value: "337" }, + { label: "Умения из прошлой жизни", value: "280" }, + { label: "Умная пара", value: "493" }, + { label: "Умный главный герой", value: "33" }, + { label: "Уникальная техника Культивации", value: "254" }, + { label: "Уникальное оружие", value: "340" }, + { label: "Управление бизнесом", value: "315" }, + { label: "Управление временем", value: "167" }, + { label: "Управление кровью", value: "764" }, + { label: "Упрямый главный герой", value: "672" }, + { label: "Уродливый главный герой", value: "803" }, + { label: "Ускоренный рост", value: "300" }, + { label: "Усыновленные дети", value: "481" }, + { label: "Усыновленный главный герой", value: "412" }, + { label: "Уход за детьми", value: "398" }, + { label: "Учителя", value: "345" }, + { label: "Фамильяры", value: "541" }, + { label: "Фанатизм", value: "613" }, + { label: "Фантастические существа", value: "322" }, + { label: "Фанфикшн", value: "388" }, + { label: "Фармацевт", value: "715" }, + { label: "Фарминг", value: "379" }, + { label: "Феи", value: "210" }, + { label: "Фелляция", value: "584" }, + { label: "Фениксы", value: "374" }, + { label: "Фетиш груди", value: "499" }, + { label: "Философия", value: "87" }, + { label: "Фильмы", value: "403" }, + { label: "Флэшбэки", value: "528" }, + { label: "Фобии", value: "100" }, + { label: "Фольклор", value: "467" }, + { label: "Футанари", value: "568" }, + { label: "Футуристический сеттинг", value: "382" }, + { label: "Фэнтези мир", value: "126" }, + { label: "Хакеры", value: "399" }, + { label: "Харизматический герой", value: "391" }, + { label: "Хикикомори/Затворники", value: "462" }, + { label: "Хитроумный главный герой", value: "105" }, + { label: "Хозяин подземелий", value: "557" }, + { label: "Холодный главный герой", value: "259" }, + { label: "Хорошие отношения с семьей", value: "506" }, + { label: "Хранители могил", value: "68" }, + { label: "Целители", value: "389" }, + { label: "Цзянши", value: "735" }, + { label: "Цундэрэ", value: "445" }, + { label: "Чаты", value: "580" }, + { label: "Человеческое оружие", value: "521" }, + { label: "Честный главный герой", value: "240" }, + { label: "Читы", value: "238" }, + { label: "Шантаж", value: "526" }, + { label: "Шеф-повар", value: "239" }, + { label: "Шикигами", value: "543" }, + { label: "Школа только для девочек", value: "633" }, + { label: "Шота", value: "514" }, + { label: "Шоу-бизнес", value: "407" }, + { label: "Шпионы", value: "563" }, + { label: "Эволюция", value: "196" }, + { label: "Эгоистичный главный герой", value: "539" }, + { label: "Эйдетическая память", value: "392" }, + { label: "Экзорсизм", value: "504" }, + { label: "Экономика", value: "492" }, + { label: "Эксгибиционизм", value: "639" }, + { label: "Эксперименты с людьми", value: "129" }, + { label: "Элементальная магия", value: "395" }, + { label: "Эльфы", value: "172" }, + { label: "Эмоционально слабый главный герой", value: "816" }, + { label: "Эпизодический", value: "612" }, + { label: "Юный любовный интерес", value: "446" }, + { label: "Яды", value: "410" }, + { label: "Языкастые персонажи", value: "406" }, + { label: "Языковой барьер", value: "59" }, + { label: "Яндере", value: "208" }, + { label: "Японские силы самообороны", value: "559" }, + { label: "Ярко выраженная романтическая линия", value: "272" }, + { label: "Abusive Characters", value: "625" }, + { label: "Adapted to Visual Novel", value: "1046" }, + { label: "Adopted-lead", value: "886" }, + { label: "Adultery", value: "866" }, + { label: "Affair", value: "645" }, + { label: "Age-gap", value: "923" }, + { label: "Almost-human-lead", value: "975" }, + { label: "An*l", value: "780" }, + { label: "Androgynous-male-lead", value: "1002" }, + { label: "Anti-hero-lead", value: "976" }, + { label: "Apathetic-lead", value: "967" }, + { label: "Arms Dealers", value: "839" }, + { label: "Army-commander", value: "1003" }, + { label: "Artifact-refining", value: "924" }, + { label: "Autism", value: "855" }, + { label: "Awkward Protagonist", value: "669" }, + { label: "Awkward-lead", value: "892" }, + { label: "Bestiality", value: "796" }, + { label: "Big-breasts", value: "908" }, + { label: "Birth-of-a-nation", value: "1004" }, + { label: "Bisexual-lead", value: "1027" }, + { label: "Body-refining", value: "947" }, + { label: "Body-swap/s", value: "1036" }, + { label: "Boss-subordinate-relationship", value: "876" }, + { label: "Bride-kidnapping", value: "948" }, + { label: "Caring-lead", value: "879" }, + { label: "Cautious-lead", value: "1032" }, + { label: "Changed-man", value: "925" }, + { label: "Charismatic-lead", value: "1005" }, + { label: "Child-lead", value: "936" }, + { label: "Clever-lead", value: "880" }, + { label: "Clumsy Love Interests", value: "815" }, + { label: "Cold Love Interests", value: "651" }, + { label: "Coming of Age", value: "860" }, + { label: "Confident-lead", value: "894" }, + { label: "Confident-male-lead", value: "951" }, + { label: "Confinement", value: "767" }, + { label: "Conflicting Loyalties", value: "793" }, + { label: "Couple Growth", value: "690" }, + { label: "Court Official", value: "863" }, + { label: "Cowardly Protagonist", value: "703" }, + { label: "Cowardly-lead", value: "1000" }, + { label: "Cross-dressing", value: "250" }, + { label: "Cunnilingus", value: "867" }, + { label: "Cunning-lead", value: "952" }, + { label: "Cunning-male-lead", value: "953" }, + { label: "Curious Protagonist", value: "849" }, + { label: "Cute-lead", value: "887" }, + { label: "Dense-lead", value: "868" }, + { label: "Determined-lead", value: "972" }, + { label: "Developing-technology", value: "1006" }, + { label: "Devil/s", value: "1007" }, + { label: "Different Social Status", value: "758" }, + { label: "Disfigurement", value: "838" }, + { label: "Doting Love Interests", value: "665" }, + { label: "Doting Older Siblings", value: "609" }, + { label: "Doting Parents", value: "530" }, + { label: "Dungeon/s-exploring", value: "990" }, + { label: "Elderly Protagonist", value: "774" }, + { label: "Enlightenment", value: "729" }, + { label: "Eunuch", value: "1047" }, + { label: "Eye Powers", value: "386" }, + { label: "Family Business", value: "785" }, + { label: "Famous Parents", value: "790" }, + { label: "Famous-lead", value: "897" }, + { label: "Fanfic", value: "942" }, + { label: "Fated Lovers", value: "797" }, + { label: "Fellatio", value: "870" }, + { label: "Female-lead", value: "888" }, + { label: "First-time-intercourse", value: "871" }, + { label: "Fleet Battles", value: "836" }, + { label: "Forced Living Arrangements", value: "808" }, + { label: "Forced Marriage", value: "835" }, + { label: "Former Hero", value: "752" }, + { label: "Fujoshi", value: "1045" }, + { label: "Galge", value: "848" }, + { label: "Gambling", value: "1031" }, + { label: "Gamelit", value: "994" }, + { label: "Genderless-lead", value: "1008" }, + { label: "Glasses-wearing-lead", value: "995" }, + { label: "Guardian Relationship", value: "197" }, + { label: "H*ndjob", value: "629" }, + { label: "Half-human-lead", value: "956" }, + { label: "Hard-working-lead", value: "957" }, + { label: "Hard-working-male-lead", value: "958" }, + { label: "Hard-working-protagonist/s", value: "1030" }, + { label: "Harem-seeking-lead", value: "929" }, + { label: "Harem-subtext", value: "909" }, + { label: "Helpful Protagonist", value: "760" }, + { label: "Helpful-lead", value: "882" }, + { label: "Hidden-gem", value: "998" }, + { label: "High-fantasy", value: "991" }, + { label: "Human-becomes-demon/monster", value: "1009" }, + { label: "Human-nonhuman-relationship", value: "914" }, + { label: "Humanoid-lead", value: "915" }, + { label: "Imperial Harem", value: "805" }, + { label: "Incubus", value: "1049" }, + { label: "Insects", value: "831" }, + { label: "Interspatial-storage", value: "959" }, + { label: "Kind Love Interests", value: "757" }, + { label: "Large-number-of-skills", value: "1010" }, + { label: "Legendary-hero", value: "1011" }, + { label: "Litrpg", value: "977" }, + { label: "Love Rivals", value: "788" }, + { label: "Lovers Reunited", value: "853" }, + { label: "Low-fantasy", value: "1037" }, + { label: "Master-disciple-relationship", value: "899" }, + { label: "Matriarchy", value: "807" }, + { label: "Mature-lead", value: "900" }, + { label: "Mind Break", value: "862" }, + { label: "Mismatched Couple", value: "695" }, + { label: "Mob Protagonist", value: "648" }, + { label: "Mob-lead", value: "902" }, + { label: "Modern", value: "988" }, + { label: "Monster-pov", value: "1012" }, + { label: "Mpreg", value: "856" }, + { label: "Multiple-povs", value: "1013" }, + { label: "Mystery Solving", value: "710" }, + { label: "Naive-lead", value: "1014" }, + { label: "Near-death-experience", value: "996" }, + { label: "Neet", value: "495" }, + { label: "Nightmares", value: "833" }, + { label: "Nobility", value: "1015" }, + { label: "Non-human-lead", value: "978" }, + { label: "Non-humanoid-lead", value: "1016" }, + { label: "Not-so-secret-identity", value: "979" }, + { label: "Omegaverse", value: "857" }, + { label: "Online-game", value: "910" }, + { label: "Online-gaming", value: "911" }, + { label: "Outdoor Interc**rse", value: "847" }, + { label: "Outdoor-intercourse", value: "903" }, + { label: "Overprotective Siblings", value: "610" }, + { label: "Part-Time Job", value: "865" }, + { label: "Past Trauma", value: "726" }, + { label: "Past-memories", value: "1017" }, + { label: "Persistent Love Interests", value: "714" }, + { label: "Perverted-lead", value: "932" }, + { label: "Photography", value: "798" }, + { label: "Pill Based Cultivation", value: "279" }, + { label: "Pill Concocting", value: "245" }, + { label: "Pilots", value: "820" }, + { label: "Playboys", value: "795" }, + { label: "Playful-lead", value: "989" }, + { label: "Polyandry", value: "811" }, + { label: "Portal-fantasy-/-isekai", value: "992" }, + { label: "Pragmatic-lead", value: "884" }, + { label: "Profanity", value: "980" }, + { label: "Protagonist-loyal-to-love-interest", value: "905" }, + { label: "R-15 (Японское возрастное ограничение)", value: "230" }, + { label: "Rebellion", value: "834" }, + { label: "Reincarnated in a Game World", value: "804" }, + { label: "Reluctant Protagonist", value: "696" }, + { label: "Reverse R*pe", value: "776" }, + { label: "Reversible Couple", value: "854" }, + { label: "Ruling-class", value: "943" }, + { label: "S*x Friends", value: "750" }, + { label: "S*xual Cultivation Technique", value: "823" }, + { label: "Salaryman", value: "1035" }, + { label: "Satire", value: "981" }, + { label: "Schemes And Conspiracies", value: "745" }, + { label: "Scientist/s", value: "997" }, + { label: "Scientists", value: "1029" }, + { label: "Secret Crush", value: "827" }, + { label: "Seme Protagonist", value: "1034" }, + { label: "Seme-lead", value: "1028" }, + { label: "Sentimental Protagonist", value: "1048" }, + { label: "Seven-heavenly-virtues", value: "1018" }, + { label: "Sexual Cultivation Technique", value: "350" }, + { label: "Sexual-content", value: "982" }, + { label: "Sexuality", value: "983" }, + { label: "Sharing A Body", value: "814" }, + { label: "Shotacon", value: "858" }, + { label: "Shoujo-Ai Subplot", value: "777" }, + { label: "Sibling Rivalry", value: "766" }, + { label: "Sibling's Care", value: "1042" }, + { label: "Sickly Characters", value: "787" }, + { label: "Skills", value: "1019" }, + { label: "Slave-harem", value: "1001" }, + { label: "Slime", value: "1020" }, + { label: "Smart-male-lead", value: "963" }, + { label: "Spirit Users", value: "739" }, + { label: "Straight Seme", value: "819" }, + { label: "Straight Uke", value: "818" }, + { label: "Strength-based-social-hierarchy", value: "974" }, + { label: "Strong-lead", value: "944" }, + { label: "Strong-male-lead", value: "964" }, + { label: "Student-teacher-relationship", value: "1026" }, + { label: "Suspense", value: "987" }, + { label: "Sword-and-sorcery", value: "875" }, + { label: "Threesome", value: "574" }, + { label: "Transformation Ability", value: "736" }, + { label: "Traumatising-content", value: "1040" }, + { label: "Underestimated-lead", value: "919" }, + { label: "Underestimated-male-lead", value: "966" }, + { label: "Unique-abilities", value: "1021" }, + { label: "Unique-skill", value: "1022" }, + { label: "Unique-skills", value: "1023" }, + { label: "Unlimited Flow", value: "1044" }, + { label: "Unrequited Love", value: "806" }, + { label: "Urban-fantasy", value: "1041" }, + { label: "Villainess Noble Girls", value: "719" }, + { label: "Weak-lead", value: "885" }, + { label: "Web-novel", value: "1024" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + tags: { + label: "Жанры", + value: { include: [], exclude: [] }, + options: [ + { label: "Боевые искусства", value: "22" }, + { label: "Гарем", value: "114" }, + { label: "Гендер бендер", value: "246" }, + { label: "Дзёсэй", value: "216" }, + { label: "Для взрослых", value: "115" }, + { label: "Для взрослых", value: "258" }, + { label: "Драма", value: "7" }, + { label: "Исторический", value: "101" }, + { label: "Комедия", value: "17" }, + { label: "Лоликон", value: "638" }, + { label: "Магический реализм", value: "922" }, + { label: "Меха", value: "24" }, + { label: "Милитари", value: "12" }, + { label: "Мистика", value: "2" }, + { label: "Научная фантастика", value: "13" }, + { label: "Непристойность", value: "747" }, + { label: "Повседневность", value: "93" }, + { label: "Приключение", value: "11" }, + { label: "Психология", value: "18" }, + { label: "Романтика", value: "9" }, + { label: "Сверхъестественное", value: "20" }, + { label: "Сёдзё", value: "15" }, + { label: "Сёдзё-ай", value: "23" }, + { label: "Сёнэн", value: "189" }, + { label: "Сёнэн-ай", value: "680" }, + { label: "Спорт", value: "420" }, + { label: "Сэйнэн", value: "5" }, + { label: "Сюаньхуа", value: "242" }, + { label: "Сянься", value: "364" }, + { label: "Трагедия", value: "19" }, + { label: "Триллер", value: "3" }, + { label: "Ужасы", value: "1" }, + { label: "Уся", value: "720" }, + { label: "Фэнтези", value: "8" }, + { label: "Школьная жизнь", value: "21" }, + { label: "Экшн", value: "14" }, + { label: "Эччи", value: "327" }, + { label: "Юри", value: "691" }, + { label: "Яой", value: "682" }, + { label: "Eastern fantasy", value: "907" }, + { label: "Isekai", value: "999" }, + { label: "Video games", value: "993" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + } satisfies Filters; +} + +export default new RNBH(); + +interface responseNovels { + id: number; + names: Names; + rating: number; + synopsis: string; + url: string; + poster: Poster; + created_at: number; + status: string; + user?: User; + counts: Counts; +} +interface Names { + eng?: string; + rus?: string; + original: string; +} +interface Poster { + medium: string; + small: string; + color: string; +} +interface User { + status?: null; + liked: boolean; +} +interface Counts { + volumes: string; + chapters: string; +} + +interface responseNovel { + id: number; + names: Names; + rating: number; + year: number; + synopsis: string; + url: string; + posters: Posters; + isSpecial: boolean; + liked: boolean; + authors?: AuthorsEntity[] | null; + translators?: TranslatorsEntity[] | null; + description: string; + status: Status; + start_reading_url: string; + html: string; + tags: Tags; +} +interface Posters { + big: string; + medium: string; + small: string; + tiny: string; + color: string; +} +interface AuthorsEntity { + name_eng: string; + pivot: Pivot; +} +interface Pivot { + ranobe_id: number; + author_id?: number; + translator_id?: number; +} +interface TranslatorsEntity { + name: string; + pivot: Pivot; +} +interface Status { + id: number; + title: string; +} +interface Tags { + events?: GenresOrEntity[] | null; + genres?: GenresOrEntity[] | null; +} +interface GenresOrEntity { + id: number; + names: Names; + url: string; + title: string; + description?: string | null; +} + +interface responseChapters { + marked_chapters_ids?: null[] | null; + volumes?: VolumesEntity[] | null; +} +interface VolumesEntity { + id: number; + num: number; + name: string; + status: Status; + chapters?: ChaptersEntity[] | null; +} +interface Status { + id: number; + name: string; +} +interface ChaptersEntity { + id: number; + name: string; + num: number; + url: string; + is_new: boolean; + has_images: boolean; + changed_at: string; + comments_count: string; +} + +interface responseSearch { + meta: Meta; + collections?: DataEntity[] | null; + data?: DataEntity[] | null; +} +interface Meta { + key: string; + title: string; +} +interface DataEntity { + id: number; + names?: Names | null; + description?: string | null; + url: string; + image?: string | null; + name?: string | null; + level?: number | null; + evolution_scheme?: null; + roles?: null[] | null; + avatar?: Avatar | null; + has_plus?: boolean | null; +} +interface Avatar { + big: string; + color: string; + thumb: string; + is_default: boolean; +} diff --git a/plugins/russian/ranobelib.ts b/plugins/russian/ranobelib.ts index d566916..e64374e 100644 --- a/plugins/russian/ranobelib.ts +++ b/plugins/russian/ranobelib.ts @@ -1,512 +1,484 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -class RLIB implements Plugin.PluginBase { - id = "RLIB"; - name = "RanobeLib"; - site = "https://ranobelib.me"; - version = "1.0.0"; - icon = "src/ru/ranobelib/icon.png"; - ui: string | number | undefined = undefined; - - - async popularNovels( - pageNo: number, - { - showLatestNovels, - filters, - }: Plugin.PopularNovelsOptions, - ): Promise { - let url = `${this.site}/manga-list?sort=`; - url += showLatestNovels - ? "last_chapter_at" - : filters?.sort?.value || "rate"; - url += "&dir=" + (filters?.order?.value || "desc"); - - if (filters.type?.value?.length) { - url += filters.type.value.map((i) => "&types[]=" + i).join(""); - } - - if (filters.format?.value?.include?.length) { - url += filters.format.value.include - .map((i) => "&format[include][]=" + i).join(""); - } - - if (filters.format?.value?.exclude?.length) { - url += filters.format.value.exclude - .map((i) => "&format[exclude][]=" + i).join(""); - } - - if (filters.status?.value?.length) { - url += filters.status.value.map((i) => "&status[]=" + i).join(""); - } - - if (filters.statuss?.value?.length) { - url += filters.statuss.value.map((i) => "&manga_status[]=" + i).join(""); - } - - if (filters.genres?.value?.include?.length) { - url += filters.genres.value.include - .map((i) => "&genres[include][]=" + i).join(""); - } - - if (filters.genres?.value?.exclude?.length) { - url += filters.genres.value.exclude - .map((i) => "&genres[exclude][]=" + i).join(""); - } - - if (filters.tags?.value?.include?.length) { - url += filters.tags.value.include - .map((i) => "&tags[include][]=" + i).join(""); - } - - if (filters.tags?.value?.exclude?.length) { - url += filters.tags.value.exclude - .map((i) => "&tags[exclude][]=" + i).join(""); - } - - url += "&page=" + pageNo; - - const result = await fetchApi(url); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - this.ui = loadedCheerio("a.header-right-menu__item") - .attr("href") - ?.replace?.(/[^0-9]/g, ""); - - const novels: Plugin.NovelItem[] = []; - loadedCheerio(".media-card-wrap").each(function () { - const name = loadedCheerio(this).find(".media-card__title").text(); - const cover = loadedCheerio(this).find("a.media-card").attr("data-src"); - const url = loadedCheerio(this).find("a.media-card").attr("href"); - if (!url) return; - novels.push({ name, cover, url }); - }); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const result = await fetchApi(novelUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url: novelUrl, - }; - - novel.name = loadedCheerio(".media-name__main").text().trim(); - - novel.cover = loadedCheerio(".media-sidebar__cover img").attr("src"); - - novel.summary = loadedCheerio(".media-description__text").text().trim(); - - novel.genres = loadedCheerio('div[class="media-tags"]') - .text() - .trim() - .replace(/[\n\r]+/g, ", ") - .replace(/ /g, ""); - - loadedCheerio( - 'div[class="media-info-list paper"] > [class="media-info-list__item"]', - ).each(function () { - let name = loadedCheerio(this) - .find('div[class="media-info-list__title"]') - .text(); - - if (name === "Статус перевода") { - novel.status = - loadedCheerio(this).find("div:nth-child(2)").text().trim() === - "Продолжается" - ? NovelStatus.Ongoing - : NovelStatus.Completed; - } else if (name === "Автор") { - novel.author = loadedCheerio(this) - .find("div:nth-child(2)") - .text() - .trim(); - } - }); - - const chapters: Plugin.ChapterItem[] = []; - - let chaptersRaw: any = body.match( - /window.__DATA__ = [\s\S]*?window._SITE_COLOR_/gm, - ); - - chaptersRaw = chaptersRaw?.[0] - ?.replace("window.__DATA__ = ", "") - ?.replace("window._SITE_COLOR_", "") - ?.trim() - ?.slice(0, -1); - - let chaptersJson: responseBook = JSON.parse(chaptersRaw); - this.ui = chaptersJson?.user?.id; - - chaptersJson.chapters?.list?.forEach((chapter) => - chapters.push({ - name: `Том ${chapter.chapter_volume} Глава ${chapter.chapter_number} ${chapter.chapter_name}`?.trim(), - releaseTime: dayjs(chapter.chapter_created_at).format("LLL"), - url: - `${this.site}/${chaptersJson.manga.slug}/v${chapter.chapter_volume}/c${chapter.chapter_number}?bid=` + - (chapter?.branch_id || ""), - }), - ); - - novel.chapters = chapters.reverse(); - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi( - chapterUrl + (this.ui ? "&ui=" + this.ui : ""), - ); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const baseUrl = this.site; - loadedCheerio(".reader-container img").each(function () { - const src = - loadedCheerio(this).attr("data-src") || loadedCheerio(this).attr("src"); - if (!src?.startsWith("http")) { - loadedCheerio(this).attr("src", baseUrl + src); - } else { - loadedCheerio(this).attr("src", src); - } - loadedCheerio(this).removeAttr("data-src"); - }); - - const chapterText = loadedCheerio(".reader-container").html(); - - return chapterText || ""; - } - - async searchNovels( - searchTerm: string, - //pageNo: number | undefined = 1, - ): Promise { - const result = await fetchApi( - `${this.site}/search?q=${searchTerm}&type=manga`, - ); - const body = (await result.json()) as Manga[]; - const novels: Plugin.NovelItem[] = []; - - body.forEach((novel) => - novels.push({ - name: novel?.rus_name || novel.name, - cover: novel?.coverImage, - url: novel?.href || this.site + "/" + novel.slug, - }), - ); - - return novels; - } - - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "Рейтинг", value: "rate" }, - { label: "Имя", value: "name" }, - { label: "Просмотры", value: "views" }, - { label: "Дате добавления", value: "created_at" }, - { label: "Дате обновления", value: "last_chapter_at" }, - { label: "Количество глав", value: "chap_count" }, - ], - type: FilterTypes.Picker, - }, - order: { - label: "Порядок", - value: "", - options: [ - { label: "По убыванию", value: "desc" }, - { label: "По возрастанию", value: "asc" }, - ], - type: FilterTypes.Picker, - }, - type: { - label: "Тип", - value: [], - options: [ - { label: "Авторский", value: "14" }, - { label: "Английский", value: "13" }, - { label: "Китай", value: "12" }, - { label: "Корея", value: "11" }, - { label: "Фанфик", value: "15" }, - { label: "Япония", value: "10" }, - ], - type: FilterTypes.CheckboxGroup, - }, - format: { - label: "Формат выпуска", - value: { include: [], exclude: [] }, - options: [ - { label: "4-кома (Ёнкома)", value: "1" }, - { label: "В цвете", value: "4" }, - { label: "Веб", value: "6" }, - { label: "Вебтун", value: "7" }, - { label: "Додзинси", value: "3" }, - { label: "Сборник", value: "2" }, - { label: "Сингл", value: "5" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - status: { - label: "Статус перевода", - value: [], - options: [ - { label: "Продолжается", value: "1" }, - { label: "Завершен", value: "2" }, - { label: "Заморожен", value: "3" }, - { label: "Заброшен", value: "4" }, - ], - type: FilterTypes.CheckboxGroup, - }, - statuss: { - label: "Статус тайтла", - value: [], - options: [ - { label: "Онгоинг", value: "1" }, - { label: "Завершён", value: "2" }, - { label: "Анонс", value: "3" }, - { label: "Приостановлен", value: "4" }, - { label: "Выпуск прекращён", value: "5" }, - ], - type: FilterTypes.CheckboxGroup, - }, - genres: { - label: "Жанры", - value: { include: [], exclude: [] }, - options: [ - { label: "Арт", value: "32" }, - { label: "Безумие", value: "91" }, - { label: "Боевик", value: "34" }, - { label: "Боевые искусства", value: "35" }, - { label: "Вампиры", value: "36" }, - { label: "Военное", value: "89" }, - { label: "Гарем", value: "37" }, - { label: "Гендерная интрига", value: "38" }, - { label: "Героическое фэнтези", value: "39" }, - { label: "Демоны", value: "81" }, - { label: "Детектив", value: "40" }, - { label: "Детское", value: "88" }, - { label: "Дзёсэй", value: "41" }, - { label: "Драма", value: "43" }, - { label: "Игра", value: "44" }, - { label: "Исекай", value: "79" }, - { label: "История", value: "45" }, - { label: "Киберпанк", value: "46" }, - { label: "Кодомо", value: "76" }, - { label: "Комедия", value: "47" }, - { label: "Космос", value: "83" }, - { label: "Магия", value: "85" }, - { label: "Махо-сёдзё", value: "48" }, - { label: "Машины", value: "90" }, - { label: "Меха", value: "49" }, - { label: "Мистика", value: "50" }, - { label: "Музыка", value: "80" }, - { label: "Научная фантастика", value: "51" }, - { label: "Омегаверс", value: "77" }, - { label: "Пародия", value: "86" }, - { label: "Повседневность", value: "52" }, - { label: "Полиция", value: "82" }, - { label: "Постапокалиптика", value: "53" }, - { label: "Приключения", value: "54" }, - { label: "Психология", value: "55" }, - { label: "Романтика", value: "56" }, - { label: "Самурайский боевик", value: "57" }, - { label: "Сверхъестественное", value: "58" }, - { label: "Сёдзё", value: "59" }, - { label: "Сёдзё-ай", value: "60" }, - { label: "Сёнэн", value: "61" }, - { label: "Сёнэн-ай", value: "62" }, - { label: "Спорт", value: "63" }, - { label: "Супер сила", value: "87" }, - { label: "Сэйнэн", value: "64" }, - { label: "Трагедия", value: "65" }, - { label: "Триллер", value: "66" }, - { label: "Ужасы", value: "67" }, - { label: "Фантастика", value: "68" }, - { label: "Фэнтези", value: "69" }, - { label: "Школа", value: "70" }, - { label: "Эротика", value: "71" }, - { label: "Этти", value: "72" }, - { label: "Юри", value: "73" }, - { label: "Яой", value: "74" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - tags: { - label: "Теги", - value: { include: [], exclude: [] }, - options: [ - { label: "Авантюристы", value: "328" }, - { label: "Антигерой", value: "176" }, - { label: "Бессмертные", value: "333" }, - { label: "Боги", value: "218" }, - { label: "Борьба за власть", value: "309" }, - { label: "Брат и сестра", value: "360" }, - { label: "Ведьма", value: "339" }, - { label: "Видеоигры", value: "204" }, - { label: "Виртуальная реальность", value: "214" }, - { label: "Владыка демонов", value: "349" }, - { label: "Военные", value: "198" }, - { label: "Воспоминания из другого мира", value: "310" }, - { label: "Выживание", value: "212" }, - { label: "ГГ женщина", value: "294" }, - { label: "ГГ имба", value: "292" }, - { label: "ГГ мужчина", value: "295" }, - { label: "ГГ не ояш", value: "325" }, - { label: "ГГ не человек", value: "331" }, - { label: "ГГ ояш", value: "326" }, - { label: "Главный герой бог", value: "324" }, - { label: "Глупый ГГ", value: "298" }, - { label: "Горничные", value: "171" }, - { label: "Гуро", value: "306" }, - { label: "Гяру", value: "197" }, - { label: "Демоны", value: "157" }, - { label: "Драконы", value: "313" }, - { label: "Древний мир", value: "317" }, - { label: "Зверолюди", value: "163" }, - { label: "Зомби", value: "155" }, - { label: "Исторические фигуры", value: "323" }, - { label: "Кулинария", value: "158" }, - { label: "Культивация", value: "161" }, - { label: "ЛГБТ", value: "344" }, - { label: "ЛитРПГ", value: "319" }, - { label: "Лоли", value: "206" }, - { label: "Магия", value: "170" }, - { label: "Машинный перевод", value: "345" }, - { label: "Медицина", value: "159" }, - { label: "Межгалактическая война", value: "330" }, - { label: "Монстр Девушки", value: "207" }, - { label: "Монстры", value: "208" }, - { label: "Мрачный мир", value: "316" }, - { label: "Музыка", value: "358" }, - { label: "Музыка", value: "209" }, - { label: "Ниндзя", value: "199" }, - { label: "Обратный Гарем", value: "210" }, - { label: "Офисные Работники", value: "200" }, - { label: "Пираты", value: "341" }, - { label: "Подземелья", value: "314" }, - { label: "Политика", value: "311" }, - { label: "Полиция", value: "201" }, - { label: "Преступники / Криминал", value: "205" }, - { label: "Призраки / Духи", value: "196" }, - { label: "Призыватели", value: "329" }, - { label: "Прыжки между мирами", value: "321" }, - { label: "Путешествие в другой мир", value: "318" }, - { label: "Путешествие во времени", value: "213" }, - { label: "Рабы", value: "355" }, - { label: "Ранги силы", value: "312" }, - { label: "Реинкарнация", value: "154" }, - { label: "Самураи", value: "202" }, - { label: "Скрытие личности", value: "315" }, - { label: "Средневековье", value: "174" }, - { label: "Традиционные игры", value: "203" }, - { label: "Умный ГГ", value: "303" }, - { label: "Характерный рост", value: "332" }, - { label: "Хикикомори", value: "167" }, - { label: "Эволюция", value: "322" }, - { label: "Элементы РПГ", value: "327" }, - { label: "Эльфы", value: "217" }, - { label: "Якудза", value: "165" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - } satisfies Filters; -} - -export default new RLIB(); - -interface responseBook { - hasStickyPermission: boolean; - bookmark?: null; - auth: boolean; - comments_version: string; - manga: Manga; - chapters: Chapters; - user?: User; -} -interface Manga { - id: number; - name: string; - rusName?: string; - rus_name?: string; - engName?: string; - slug: string; - status: number; - chapters_count: number; - altNames?: string[] | null; - coverImage?: string; - href?: string; -} -interface Chapters { - list?: ListEntity[] | null; - teams?: TeamsEntity[] | null; - branches?: BranchesEntity[] | null; - is_paid?: null[] | null; -} -interface ListEntity { - chapter_id: number; - chapter_slug: string; - chapter_name: string; - chapter_number: string; - chapter_volume: number; - chapter_moderated: number; - chapter_user_id: number; - chapter_expired_at: string; - chapter_scanlator_id: number; - chapter_created_at: string; - status?: null; - price: number; - branch_id: number; - username: string; -} -interface TeamsEntity { - name: string; - alt_name: string; - cover: string; - slug: string; - id: number; - branch_id: number; - sale: number; - href: string; - pivot: Pivot; -} -interface Pivot { - manga_id: number; - team_id: number; -} -interface BranchesEntity { - id: number; - manga_id: number; - name: string; - teams?: TeamsEntity1[] | null; - is_subscribed: boolean; -} -interface TeamsEntity1 { - id: number; - name: string; - slug: string; - cover: string; - branch_id: number; - is_active: number; -} -interface User { - id: number; - avatar: string; - access: boolean; - isAdmin: boolean; - paid: boolean; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +const statusKey = [ + NovelStatus.Ongoing, + NovelStatus.Completed, + NovelStatus.OnHiatus, + NovelStatus.Cancelled, +]; + +class RLIB implements Plugin.PluginBase { + id = "RLIB"; + name = "RanobeLib"; + site = "https://ranobelib.me"; + version = "1.0.0"; + icon = "src/ru/ranobelib/icon.png"; + ui: string | undefined = undefined; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/manga-list?sort="; + url += showLatestNovels ? "last_chapter_at" : filters?.sort?.value || "rate"; + url += "&dir=" + (filters?.order?.value || "desc"); + + Object.entries(filters || {}).forEach(([type, { value }]: any) => { + if (value instanceof Array && value.length) { + url += "&" + type + "[]=" + value.join("&" + type + "[]="); + } + if (value?.include instanceof Array && value.include.length) { + url += "&" + type + "[include][]=" + + value.include.join("&" + type + "[include][]="); + } + if (value?.exclude instanceof Array && value.exclude.length) { + url += "&" + type + "[exclude][]=" + + value.exclude.join("&" + type + "[exclude][]="); + } + }); + + url += "&page=" + pageNo; + + const result = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + this.ui = loadedCheerio("a.header-right-menu__item") + .attr("href") + ?.replace?.(/[^0-9]/g, ""); + + const novels: Plugin.NovelItem[] = []; + loadedCheerio(".media-card-wrap").each(function () { + const name = loadedCheerio(this).find(".media-card__title").text(); + const cover = loadedCheerio(this).find("a.media-card").attr("data-src"); + const url = loadedCheerio(this).find("a.media-card").attr("href"); + if (!url) return; + novels.push({ name, cover, url }); + }); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const body = await fetchApi(novelUrl).then((res) => res.text()); + const loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { + url: novelUrl, + }; + + novel.name = loadedCheerio(".media-name__main").text().trim(); + + novel.cover = loadedCheerio(".container_responsive img").attr("src"); + + novel.summary = loadedCheerio(".media-description__text").text().trim(); + + novel.genres = loadedCheerio('div[class="media-tags"]') + .text() + .trim() + .replace(/[\n\r]+/g, ", ") + .replace(/ /g, ""); + + loadedCheerio( + 'div[class="media-info-list paper"] > [class="media-info-list__item"]', + ).each(function () { + let name = loadedCheerio(this) + .find('div[class="media-info-list__title"]') + .text(); + + if (name === "Автор") { + novel.author = loadedCheerio(this) + .find('div[class="media-info-list__value"]') + .text() + .trim(); + } else if (name === "Художник") { + novel.artist = loadedCheerio(this) + .find('div[class="media-info-list__value"]') + .text() + .trim(); + } + }); + + const chapters: Plugin.ChapterItem[] = []; + + let chaptersRaw: any = body.match( + /window.__DATA__ = [\s\S]*?window._SITE_COLOR_/gm, + ); + + chaptersRaw = chaptersRaw?.[0] + ?.replace("window.__DATA__ = ", "") + ?.replace("window._SITE_COLOR_", "") + ?.trim() + ?.slice(0, -1); + + const chaptersJson: responseBook = JSON.parse(chaptersRaw); + const totalChapters = chaptersJson.chapters.list?.length || 0; + novel.status = statusKey[chaptersJson.manga.status - 1] || NovelStatus.Unknown; + this.ui = chaptersJson?.user?.id; + + chaptersJson.chapters?.list?.forEach((chapter, chapterIndex) => + chapters.push({ + name: + "Том " + chapter.chapter_volume + + " Глава " + chapter.chapter_number + + (chapter.chapter_name ? " " + chapter.chapter_name.trim() : ""), + url: + this.site + "/" + chaptersJson.manga.slug + + "/v" + chapter.chapter_volume + "/c" + chapter.chapter_number + + "?bid=" + (chapter.branch_id || ""), + releaseTime: dayjs(chapter.chapter_created_at).format("LLL"), + chapterNumber: totalChapters - chapterIndex, + }), + ); + + novel.chapters = chapters.reverse(); + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi( + chapterUrl + (this.ui ? "&ui=" + this.ui : ""), + ).then((res) => res.text()); + + const loadedCheerio = parseHTML(result); + loadedCheerio(".reader-container img").each((index, element) => { + const src = + loadedCheerio(element).attr("data-src") || + loadedCheerio(element).attr("src"); + if (!src?.startsWith("http")) { + loadedCheerio(element).attr("src", this.site + src); + } else { + loadedCheerio(element).attr("src", src); + } + loadedCheerio(element).removeAttr("data-src"); + }); + + const chapterText = loadedCheerio(".reader-container").html(); + return chapterText || ""; + } + + async searchNovels( + searchTerm: string, + //pageNo: number | undefined = 1, + ): Promise { + const result = await fetchApi( + `${this.site}/search?q=${searchTerm}&type=manga`, + ); + const body = (await result.json()) as Manga[]; + const novels: Plugin.NovelItem[] = []; + + body.forEach((novel) => + novels.push({ + name: novel?.rus_name || novel.name, + cover: novel?.coverImage, + url: novel?.href || this.site + "/" + novel.slug, + }), + ); + + return novels; + } + + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "rate", + options: [ + { label: "Рейтинг", value: "rate" }, + { label: "Имя", value: "name" }, + { label: "Просмотры", value: "views" }, + { label: "Дате добавления", value: "created_at" }, + { label: "Дате обновления", value: "last_chapter_at" }, + { label: "Количество глав", value: "chap_count" }, + ], + type: FilterTypes.Picker, + }, + order: { + label: "Порядок", + value: "desc", + options: [ + { label: "По убыванию", value: "desc" }, + { label: "По возрастанию", value: "asc" }, + ], + type: FilterTypes.Picker, + }, + type: { + label: "Тип", + value: [], + options: [ + { label: "Авторский", value: "14" }, + { label: "Английский", value: "13" }, + { label: "Китай", value: "12" }, + { label: "Корея", value: "11" }, + { label: "Фанфик", value: "15" }, + { label: "Япония", value: "10" }, + ], + type: FilterTypes.CheckboxGroup, + }, + format: { + label: "Формат выпуска", + value: { include: [], exclude: [] }, + options: [ + { label: "4-кома (Ёнкома)", value: "1" }, + { label: "В цвете", value: "4" }, + { label: "Веб", value: "6" }, + { label: "Вебтун", value: "7" }, + { label: "Додзинси", value: "3" }, + { label: "Сборник", value: "2" }, + { label: "Сингл", value: "5" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + status: { + label: "Статус перевода", + value: [], + options: [ + { label: "Продолжается", value: "1" }, + { label: "Завершен", value: "2" }, + { label: "Заморожен", value: "3" }, + { label: "Заброшен", value: "4" }, + ], + type: FilterTypes.CheckboxGroup, + }, + manga_status: { + label: "Статус тайтла", + value: [], + options: [ + { label: "Онгоинг", value: "1" }, + { label: "Завершён", value: "2" }, + { label: "Анонс", value: "3" }, + { label: "Приостановлен", value: "4" }, + { label: "Выпуск прекращён", value: "5" }, + ], + type: FilterTypes.CheckboxGroup, + }, + genres: { + label: "Жанры", + value: { include: [], exclude: [] }, + options: [ + { label: "Арт", value: "32" }, + { label: "Безумие", value: "91" }, + { label: "Боевик", value: "34" }, + { label: "Боевые искусства", value: "35" }, + { label: "Вампиры", value: "36" }, + { label: "Военное", value: "89" }, + { label: "Гарем", value: "37" }, + { label: "Гендерная интрига", value: "38" }, + { label: "Героическое фэнтези", value: "39" }, + { label: "Демоны", value: "81" }, + { label: "Детектив", value: "40" }, + { label: "Детское", value: "88" }, + { label: "Дзёсэй", value: "41" }, + { label: "Драма", value: "43" }, + { label: "Игра", value: "44" }, + { label: "Исекай", value: "79" }, + { label: "История", value: "45" }, + { label: "Киберпанк", value: "46" }, + { label: "Кодомо", value: "76" }, + { label: "Комедия", value: "47" }, + { label: "Космос", value: "83" }, + { label: "Магия", value: "85" }, + { label: "Махо-сёдзё", value: "48" }, + { label: "Машины", value: "90" }, + { label: "Меха", value: "49" }, + { label: "Мистика", value: "50" }, + { label: "Музыка", value: "80" }, + { label: "Научная фантастика", value: "51" }, + { label: "Омегаверс", value: "77" }, + { label: "Пародия", value: "86" }, + { label: "Повседневность", value: "52" }, + { label: "Полиция", value: "82" }, + { label: "Постапокалиптика", value: "53" }, + { label: "Приключения", value: "54" }, + { label: "Психология", value: "55" }, + { label: "Романтика", value: "56" }, + { label: "Самурайский боевик", value: "57" }, + { label: "Сверхъестественное", value: "58" }, + { label: "Сёдзё", value: "59" }, + { label: "Сёдзё-ай", value: "60" }, + { label: "Сёнэн", value: "61" }, + { label: "Сёнэн-ай", value: "62" }, + { label: "Спорт", value: "63" }, + { label: "Супер сила", value: "87" }, + { label: "Сэйнэн", value: "64" }, + { label: "Трагедия", value: "65" }, + { label: "Триллер", value: "66" }, + { label: "Ужасы", value: "67" }, + { label: "Фантастика", value: "68" }, + { label: "Фэнтези", value: "69" }, + { label: "Школа", value: "70" }, + { label: "Эротика", value: "71" }, + { label: "Этти", value: "72" }, + { label: "Юри", value: "73" }, + { label: "Яой", value: "74" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + tags: { + label: "Теги", + value: { include: [], exclude: [] }, + options: [ + { label: "Авантюристы", value: "328" }, + { label: "Антигерой", value: "176" }, + { label: "Бессмертные", value: "333" }, + { label: "Боги", value: "218" }, + { label: "Борьба за власть", value: "309" }, + { label: "Брат и сестра", value: "360" }, + { label: "Ведьма", value: "339" }, + { label: "Видеоигры", value: "204" }, + { label: "Виртуальная реальность", value: "214" }, + { label: "Владыка демонов", value: "349" }, + { label: "Военные", value: "198" }, + { label: "Воспоминания из другого мира", value: "310" }, + { label: "Выживание", value: "212" }, + { label: "ГГ женщина", value: "294" }, + { label: "ГГ имба", value: "292" }, + { label: "ГГ мужчина", value: "295" }, + { label: "ГГ не ояш", value: "325" }, + { label: "ГГ не человек", value: "331" }, + { label: "ГГ ояш", value: "326" }, + { label: "Главный герой бог", value: "324" }, + { label: "Глупый ГГ", value: "298" }, + { label: "Горничные", value: "171" }, + { label: "Гуро", value: "306" }, + { label: "Гяру", value: "197" }, + { label: "Демоны", value: "157" }, + { label: "Драконы", value: "313" }, + { label: "Древний мир", value: "317" }, + { label: "Зверолюди", value: "163" }, + { label: "Зомби", value: "155" }, + { label: "Исторические фигуры", value: "323" }, + { label: "Кулинария", value: "158" }, + { label: "Культивация", value: "161" }, + { label: "ЛГБТ", value: "344" }, + { label: "ЛитРПГ", value: "319" }, + { label: "Лоли", value: "206" }, + { label: "Магия", value: "170" }, + { label: "Машинный перевод", value: "345" }, + { label: "Медицина", value: "159" }, + { label: "Межгалактическая война", value: "330" }, + { label: "Монстр Девушки", value: "207" }, + { label: "Монстры", value: "208" }, + { label: "Мрачный мир", value: "316" }, + { label: "Музыка", value: "358" }, + { label: "Музыка", value: "209" }, + { label: "Ниндзя", value: "199" }, + { label: "Обратный Гарем", value: "210" }, + { label: "Офисные Работники", value: "200" }, + { label: "Пираты", value: "341" }, + { label: "Подземелья", value: "314" }, + { label: "Политика", value: "311" }, + { label: "Полиция", value: "201" }, + { label: "Преступники / Криминал", value: "205" }, + { label: "Призраки / Духи", value: "196" }, + { label: "Призыватели", value: "329" }, + { label: "Прыжки между мирами", value: "321" }, + { label: "Путешествие в другой мир", value: "318" }, + { label: "Путешествие во времени", value: "213" }, + { label: "Рабы", value: "355" }, + { label: "Ранги силы", value: "312" }, + { label: "Реинкарнация", value: "154" }, + { label: "Самураи", value: "202" }, + { label: "Скрытие личности", value: "315" }, + { label: "Средневековье", value: "174" }, + { label: "Традиционные игры", value: "203" }, + { label: "Умный ГГ", value: "303" }, + { label: "Характерный рост", value: "332" }, + { label: "Хикикомори", value: "167" }, + { label: "Эволюция", value: "322" }, + { label: "Элементы РПГ", value: "327" }, + { label: "Эльфы", value: "217" }, + { label: "Якудза", value: "165" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + } satisfies Filters; +} + +export default new RLIB(); + +interface responseBook { + hasStickyPermission: boolean; + bookmark?: null; + auth: boolean; + comments_version: string; + manga: Manga; + chapters: Chapters; + user?: User; +} +interface Manga { + id: number; + name: string; + rusName?: string; + rus_name?: string; + engName?: string; + slug: string; + status: number; + chapters_count: number; + altNames?: string[] | null; + coverImage?: string; + href?: string; +} +interface Chapters { + list?: ListEntity[] | null; + teams?: TeamsEntity[] | null; + branches?: BranchesEntity[] | null; + is_paid?: null[] | null; +} +interface ListEntity { + chapter_id: number; + chapter_slug: string; + chapter_name: string; + chapter_number: string; + chapter_volume: number; + chapter_moderated: number; + chapter_user_id: number; + chapter_expired_at: string; + chapter_scanlator_id: number; + chapter_created_at: string; + status?: null; + price: number; + branch_id?: number; + username: string; +} +interface TeamsEntity { + name: string; + alt_name: string; + cover: string; + slug: string; + id: number; + branch_id: number; + sale: number; + href: string; + pivot: Pivot; +} +interface Pivot { + manga_id: number; + team_id: number; +} +interface BranchesEntity { + id: number; + manga_id: number; + name: string; + teams?: TeamsEntity1[] | null; + is_subscribed: boolean; +} +interface TeamsEntity1 { + id: number; + name: string; + slug: string; + cover: string; + branch_id: number; + is_active: number; +} +interface User { + id: string; + avatar: string; + access: boolean; + isAdmin: boolean; + paid: boolean; +} diff --git a/plugins/russian/ranoberf.ts b/plugins/russian/ranoberf.ts index 3380e94..494ff75 100644 --- a/plugins/russian/ranoberf.ts +++ b/plugins/russian/ranoberf.ts @@ -1,408 +1,406 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { defaultCover } from "@libs/defaultCover"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import { load as parseHTML } from "cheerio"; -import dayjs from "dayjs"; - -class RNRF implements Plugin.PluginBase { - id = "RNRF"; - name = "РанобэРФ"; - site = "https://ранобэ.рф"; - version = "1.0.0"; - icon = "src/ru/ranoberf/icon.png"; - - - async popularNovels( - pageNo: number, - { showLatestNovels, filters }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + "/books?order="; - url += showLatestNovels - ? "lastPublishedChapter" - : filters?.sort?.value || "popular"; - url += "&page=" + pageNo; - - const result = await fetchApi(url); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); - const json: response = JSON.parse(jsonRaw || "{}"); - - const novels: Plugin.NovelItem[] = []; - json.props.pageProps?.totalData?.items?.forEach((novel) => - novels.push({ - name: novel.title, - cover: novel?.verticalImage?.url - ? this.site + novel.verticalImage.url - : defaultCover, - url: this.site + "/" + novel.slug, - }), - ); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const result = await fetchApi(novelUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); - const book = (JSON.parse(jsonRaw || "{}") as response).props.pageProps.book; - - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: book?.title, - cover: book?.verticalImage?.url - ? this.site + book.verticalImage.url - : defaultCover, - summary: book?.description, - author: book?.author || "", - genres: book?.genres.map((item) => item.title).join(", "), - status: book?.additionalInfo.includes("Активен") - ? NovelStatus.Ongoing - : NovelStatus.Completed, - }; - - const chapters: Plugin.ChapterItem[] = []; - - book?.chapters?.forEach((chapter) => { - if (!chapter.isDonate || chapter.isUserPaid) { - chapters.push({ - name: chapter.title, - releaseTime: dayjs(chapter.publishedAt).format("LLL"), - url: this.site + chapter.url, - }); - } - }); - - novel.chapters = chapters.reverse(); - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const result = await fetchApi(chapterUrl); - const body = await result.text(); - - let loadedCheerio = parseHTML(body); - const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); - const json: response = JSON.parse(jsonRaw || "{}"); - - loadedCheerio = parseHTML( - json.props.pageProps?.chapter?.content?.text || "", - ); - - const baseUrl = this.site; - loadedCheerio("img").each(function () { - if (!loadedCheerio(this).attr("src")?.startsWith("http")) { - const src = loadedCheerio(this).attr("src"); - loadedCheerio(this).attr("src", baseUrl + src); - } - }); - - const chapterText = loadedCheerio.html(); - return chapterText; - } - - async searchNovels( - searchTerm: string, - //pageNo: number | undefined = 1, - ): Promise { - const url = `${this.site}/v3/books?filter[or][0][title][like]=${searchTerm}&filter[or][1][titleEn][like]=${searchTerm}&filter[or][2][fullTitle][like]=${searchTerm}&filter[status][]=active&filter[status][]=abandoned&filter[status][]=completed&expand=verticalImage`; - const result = await fetchApi(url); - const body = (await result.json()) as { items: Item[] }; - const novels: Plugin.NovelItem[] = []; - - body.items.forEach((novel) => - novels.push({ - name: novel.title, - cover: novel?.verticalImage?.url - ? this.site + novel.verticalImage.url - : defaultCover, - url: this.site + "/" + novel.slug, - }), - ); - - return novels; - } - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "Рейтинг", value: "popular" }, - { label: "Дате добавления", value: "new" }, - { label: "Дате обновления", value: "lastPublishedChapter" }, - { label: "Законченные", value: "completed" }, - ], - type: FilterTypes.Picker, - }, - } satisfies Filters; -} -export default new RNRF(); - -interface response { - props: Props; - page: string; - query: Query; - buildId: string; - isFallback: boolean; - gssp: boolean; - appGip: boolean; - dynamicIds?: string[]; -} - -interface Props { - pageProps: PageProps; - isMobile: boolean; - theme: string; - __N_SSP: boolean; -} - -interface PageProps { - initialReduxState: InitialReduxState; - book?: PagePropsBook; - totalData?: TotalData; - layoutViewCookies?: string; - displayBanner?: boolean; - chapter?: PagePropsChapter; -} - -interface PagePropsBook { - id: number; - countryId: number; - creatorId: number; - lastChapterId: number; - sourceId: number; - imgVerticalId: number; - imgHorizontalId: number; - imgSquareId: number; - imageVerticalId: number; - imageHorizontalId: number; - title: string; - titleEn: string; - fullTitle: string; - fullTitleEn: string; - description: string; - slug: string; - author: string; - additionalInfo: string; - importantInfo: string; - status: string; - views: number; - likes: number; - dislikes: number; - intervalSec: number; - intervalForNextFreeChapterSec: number; - chapterCost: number; - chapterPrice: number; - chapterPriceCollected: number; - maxSubscriptionChapters: number; - maxDonateChapters: number; - isDisplayOnMainPage: boolean; - withoutSchedule: boolean; - nextFreeChapterPublishedAt: null; - createdAt: Date; - updatedAt: Date; - userRating: null; - userBookmark: null; - country: Country; - genres: Genre[]; - timer: Timer; - chapters: ChapterElement[]; - verticalImage: Image; - horizontalImage: Image; - squareImage: Image; -} - -interface ChapterElement { - id: number; - bookId: number; - title: string; - url: string; - numberChapter: string; - tom: number | null; - chapterShortNumber: number | null; - isDonate: boolean; - isSponsored: boolean; - isSubscription: boolean; - isEdited: boolean; - publishedAt: Date; - price: number; - views: number; - isUserPaid?: boolean; -} - -interface Country { - id: number; - title: string; - code: string; -} - -interface Genre { - id: number; - title: string; - slug: string; -} - -interface Image { - id: number; - alt: string; - path: string; - name: string; - url: string; -} - -interface Timer { - value: null; - for: null; - message: string; -} - -interface PagePropsChapter { - id: number; - bookId: number; - editorId: null; - translatorId: number; - parserChapterId: null; - title: string; - slug: string; - status: string; - tom: null; - views: number; - isSponsored: boolean; - isSubscription: boolean; - isDonate: boolean; - isIndexing: boolean; - publishedAt: Date; - changeAvailabilityAt: null; - createdAt: Date; - updatedAt: Date; - numberChapter: string; - price: number; - content: Content; - book: ChapterBook; - userBookmark: null; - isUserPaid: boolean; - nextChapter: null; - previousChapter: PreviousChapter; - corrections: null; -} - -interface ChapterBook { - id: number; - title: string; - titleEn: string; - url: string; -} - -interface Content { - id: number; - text: string; - symbolsCount: number; -} - -interface PreviousChapter { - id: number; - title: string; - views: number; - publishedAt: Date; - url: string; - numberChapter: string; -} - -interface InitialReduxState { - data?: Data; - auth: Auth; - banners?: Banners; - corrections?: Corrections; - readerSettings?: ReaderSettings; -} - -interface Auth { - isAuth: boolean; - user: null; -} - -interface Banners { - displaySale: boolean; -} - -interface Corrections { - items: null; - data: null; -} - -interface Data { - bookPage: BookPage | null; - chapterPage: ChapterPage | null; -} - -interface BookPage { - bookId: number; - bookmark: null; -} - -interface ChapterPage { - chapterId: number; - bookId: number; - bookmark: null; -} - -interface ReaderSettings { - fontSize: number; - lineHeight: number; - textIndent: number; - sidebarHide: number; - textAlign: string; -} - -interface TotalData { - items: Item[]; - _links: Links; - pagesData: PagesData; -} - -interface Links { - self: First; - first: First; - last: First; - next: First; -} - -interface First { - href: string; -} - -interface Item { - id: number; - title: string; - description: string; - slug: string; - url: string; - status: string; - dislikes: number; - likes: number; - userRating: null; - lastChapter: ChapterElement; - verticalImage: Image; - horizontalImage: Image; - squareImage: Image; -} - -interface PagesData { - totalCount: number; - pageCount: number; - currentPage: number; - perPage: number; -} - -interface Query { - book?: string; - chapter?: string; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { defaultCover } from "@libs/defaultCover"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import { load as parseHTML } from "cheerio"; +import dayjs from "dayjs"; + +class RNRF implements Plugin.PluginBase { + id = "RNRF"; + name = "РанобэРФ"; + site = "https://ранобэ.рф"; + version = "1.0.0"; + icon = "src/ru/ranoberf/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/books?order="; + url += showLatestNovels + ? "lastPublishedChapter" + : filters?.sort?.value || "popular"; + url += "&page=" + pageNo; + + const result = await fetchApi(url); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); + const json: response = JSON.parse(jsonRaw || "{}"); + + const novels: Plugin.NovelItem[] = []; + json.props.pageProps?.totalData?.items?.forEach((novel) => + novels.push({ + name: novel.title, + cover: novel?.verticalImage?.url + ? this.site + novel.verticalImage.url + : defaultCover, + url: this.site + "/" + novel.slug, + }), + ); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const result = await fetchApi(novelUrl); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); + const book = (JSON.parse(jsonRaw || "{}") as response).props.pageProps.book; + + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: book?.title, + cover: book?.verticalImage?.url + ? this.site + book.verticalImage.url + : defaultCover, + summary: book?.description, + author: book?.author || "", + genres: book?.genres.map((item) => item.title).join(", "), + status: book?.additionalInfo.includes("Активен") + ? NovelStatus.Ongoing + : NovelStatus.Completed, + }; + + const chapters: Plugin.ChapterItem[] = []; + + book?.chapters.forEach((chapter, chapterIndex) => { + if (!chapter.isDonate || chapter.isUserPaid) { + chapters.push({ + name: chapter.title, + url: this.site + chapter.url, + releaseTime: dayjs(chapter.publishedAt).format("LLL"), + chapterNumber: book.chapters.length - chapterIndex, + }); + } + }); + + novel.chapters = chapters.reverse(); + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(chapterUrl).then((res) => res.text()); + + let loadedCheerio = parseHTML(result); + const jsonRaw = loadedCheerio("#__NEXT_DATA__").html(); + const json: response = JSON.parse(jsonRaw || "{}"); + + loadedCheerio = parseHTML( + json.props.pageProps?.chapter?.content?.text || "", + ); + + loadedCheerio("img").each((index, element) => { + if (!loadedCheerio(element).attr("src")?.startsWith("http")) { + const src = loadedCheerio(element).attr("src"); + loadedCheerio(element).attr("src", this.site + src); + } + }); + + const chapterText = loadedCheerio.html(); + return chapterText; + } + + async searchNovels( + searchTerm: string, + //pageNo: number | undefined = 1, + ): Promise { + const url = `${this.site}/v3/books?filter[or][0][title][like]=${searchTerm}&filter[or][1][titleEn][like]=${searchTerm}&filter[or][2][fullTitle][like]=${searchTerm}&filter[status][]=active&filter[status][]=abandoned&filter[status][]=completed&expand=verticalImage`; + const result = await fetchApi(url); + const body = (await result.json()) as { items: Item[] }; + const novels: Plugin.NovelItem[] = []; + + body.items.forEach((novel) => + novels.push({ + name: novel.title, + cover: novel?.verticalImage?.url + ? this.site + novel.verticalImage.url + : defaultCover, + url: this.site + "/" + novel.slug, + }), + ); + + return novels; + } + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "popular", + options: [ + { label: "Рейтинг", value: "popular" }, + { label: "Дате добавления", value: "new" }, + { label: "Дате обновления", value: "lastPublishedChapter" }, + { label: "Законченные", value: "completed" }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} +export default new RNRF(); + +interface response { + props: Props; + page: string; + query: Query; + buildId: string; + isFallback: boolean; + gssp: boolean; + appGip: boolean; + dynamicIds?: string[]; +} + +interface Props { + pageProps: PageProps; + isMobile: boolean; + theme: string; + __N_SSP: boolean; +} + +interface PageProps { + initialReduxState: InitialReduxState; + book?: PagePropsBook; + totalData?: TotalData; + layoutViewCookies?: string; + displayBanner?: boolean; + chapter?: PagePropsChapter; +} + +interface PagePropsBook { + id: number; + countryId: number; + creatorId: number; + lastChapterId: number; + sourceId: number; + imgVerticalId: number; + imgHorizontalId: number; + imgSquareId: number; + imageVerticalId: number; + imageHorizontalId: number; + title: string; + titleEn: string; + fullTitle: string; + fullTitleEn: string; + description: string; + slug: string; + author: string; + additionalInfo: string; + importantInfo: string; + status: string; + views: number; + likes: number; + dislikes: number; + intervalSec: number; + intervalForNextFreeChapterSec: number; + chapterCost: number; + chapterPrice: number; + chapterPriceCollected: number; + maxSubscriptionChapters: number; + maxDonateChapters: number; + isDisplayOnMainPage: boolean; + withoutSchedule: boolean; + nextFreeChapterPublishedAt: null; + createdAt: Date; + updatedAt: Date; + userRating: null; + userBookmark: null; + country: Country; + genres: Genre[]; + timer: Timer; + chapters: ChapterElement[]; + verticalImage: Image; + horizontalImage: Image; + squareImage: Image; +} + +interface ChapterElement { + id: number; + bookId: number; + title: string; + url: string; + numberChapter: string; + tom: number | null; + chapterShortNumber: number | null; + isDonate: boolean; + isSponsored: boolean; + isSubscription: boolean; + isEdited: boolean; + publishedAt: Date; + price: number; + views: number; + isUserPaid?: boolean; +} + +interface Country { + id: number; + title: string; + code: string; +} + +interface Genre { + id: number; + title: string; + slug: string; +} + +interface Image { + id: number; + alt: string; + path: string; + name: string; + url: string; +} + +interface Timer { + value: null; + for: null; + message: string; +} + +interface PagePropsChapter { + id: number; + bookId: number; + editorId: null; + translatorId: number; + parserChapterId: null; + title: string; + slug: string; + status: string; + tom: null; + views: number; + isSponsored: boolean; + isSubscription: boolean; + isDonate: boolean; + isIndexing: boolean; + publishedAt: Date; + changeAvailabilityAt: null; + createdAt: Date; + updatedAt: Date; + numberChapter: string; + price: number; + content: Content; + book: ChapterBook; + userBookmark: null; + isUserPaid: boolean; + nextChapter: null; + previousChapter: PreviousChapter; + corrections: null; +} + +interface ChapterBook { + id: number; + title: string; + titleEn: string; + url: string; +} + +interface Content { + id: number; + text: string; + symbolsCount: number; +} + +interface PreviousChapter { + id: number; + title: string; + views: number; + publishedAt: Date; + url: string; + numberChapter: string; +} + +interface InitialReduxState { + data?: Data; + auth: Auth; + banners?: Banners; + corrections?: Corrections; + readerSettings?: ReaderSettings; +} + +interface Auth { + isAuth: boolean; + user: null; +} + +interface Banners { + displaySale: boolean; +} + +interface Corrections { + items: null; + data: null; +} + +interface Data { + bookPage: BookPage | null; + chapterPage: ChapterPage | null; +} + +interface BookPage { + bookId: number; + bookmark: null; +} + +interface ChapterPage { + chapterId: number; + bookId: number; + bookmark: null; +} + +interface ReaderSettings { + fontSize: number; + lineHeight: number; + textIndent: number; + sidebarHide: number; + textAlign: string; +} + +interface TotalData { + items: Item[]; + _links: Links; + pagesData: PagesData; +} + +interface Links { + self: First; + first: First; + last: First; + next: First; +} + +interface First { + href: string; +} + +interface Item { + id: number; + title: string; + description: string; + slug: string; + url: string; + status: string; + dislikes: number; + likes: number; + userRating: null; + lastChapter: ChapterElement; + verticalImage: Image; + horizontalImage: Image; + squareImage: Image; +} + +interface PagesData { + totalCount: number; + pageCount: number; + currentPage: number; + perPage: number; +} + +interface Query { + book?: string; + chapter?: string; +} diff --git a/plugins/russian/renovels.ts b/plugins/russian/renovels.ts index f707acc..8363309 100644 --- a/plugins/russian/renovels.ts +++ b/plugins/russian/renovels.ts @@ -1,1105 +1,1081 @@ -import { Plugin } from "@typings/plugin"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { NovelStatus } from "@libs/novelStatus"; -import dayjs from "dayjs"; - -class ReN implements Plugin.PluginBase { - id = "ReN"; - name = "Renovels"; - site = "https://renovels.org"; - version = "1.0.0"; - icon = "src/ru/renovels/icon.png"; - - - async popularNovels( - pageNo: number, - { - showLatestNovels, - filters, - }: Plugin.PopularNovelsOptions, - ): Promise { - let url = this.site + "/api/search/catalog/?count=30&ordering="; - url += filters?.order?.value - ? (filters.order.value as string).replace("+", "") - : "-"; - url += showLatestNovels ? "chapter_date" : filters?.sort?.value || "rating"; - - if (filters?.genres?.value?.include?.length) { - url += filters.genres.value.include.map((i) => "&genres=" + i).join(""); - } - - if (filters?.genres?.value?.exclude?.length) { - url += filters.genres.value.exclude - .map((i) => "&exclude_genres=" + i).join(""); - } - - if (filters?.status?.value?.length) { - url += filters.status.value.map((i) => "&status=" + i).join(""); - } - - if (filters?.types?.value?.length) { - url += filters.types.value.map((i) => "&types=" + i).join(""); - } - - if (filters?.categories?.value?.include?.length) { - url += filters.categories.value.include - .map((i) => "&categories=" + i).join(""); - } - - if (filters?.categories?.value?.exclude?.length) { - url += filters.categories.value.exclude - .map((i) => "&exclude_categories=" + i).join(""); - } - - if (filters?.age_limit?.value?.length) { - url += filters.age_limit.value.map((i) => "&age_limit=" + i).join(""); - } - - url += "&page=" + pageNo; - - const result = await fetchApi(url); - const body = (await result.json()) as { content: responseNovels[] }; - - const novels: Plugin.NovelItem[] = []; - - body.content.forEach((novel) => - novels.push({ - name: novel.main_name || novel.secondary_name, - cover: this.site + (novel.img?.high || novel.img?.mid || novel.img.low), - url: this.site + "/novel/" + novel.dir, - }), - ); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const novelID = novelUrl.split("/")[4]; - const result = await fetchApi(this.site + "/api/titles/" + novelID); - const body = (await result.json()) as { content: responseNovel }; - - const novel: Plugin.SourceNovel = { - url: novelUrl, - name: body.content.main_name || body.content.secondary_name, - summary: body.content.description, - cover: - this.site + - (body.content.img?.high || - body.content.img?.mid || - body.content.img.low), - status: - body.content.status.name === "Продолжается" - ? NovelStatus.Ongoing - : NovelStatus.Completed, - }; - - const tags = [body.content?.genres, body.content?.categories] - .flat() - .map((tags) => tags?.name) - .filter((tags) => tags); - - if (tags.length) { - novel.genres = tags.join(","); - } - - const all = Math.floor(body.content.count_chapters / 100 + 1); - const branch_id = body.content.branches?.[0]?.id || body.content.id; - const chapters: Plugin.ChapterItem[] = []; - - for (let i = 0; i < all; i++) { - const chapterResult = await fetchApi( - this.site + - "/api/titles/chapters/?branch_id=" + - branch_id + - "&count=100&page=" + - (i + 1), - ); - const volumes = (await chapterResult.json()) as { - content: responseСhapters[]; - }; - - volumes.content.forEach((chapter) => { - if (!chapter.is_paid || chapter.is_bought) { - chapters.push({ - name: `Том ${chapter.tome} Глава ${chapter.chapter} ${chapter.name}`?.trim(), - releaseTime: dayjs(chapter.upload_date).format("LLL"), - url: `${this.site}/novel/${novelID}/${chapter.id}/`, - }); - } - }); - } - - novel.chapters = chapters.reverse(); - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const url = this.site + "/api/titles/chapters/" + chapterUrl.split("/")[5]; - const result = await fetchApi(url); - const body = (await result.json()) as { content: responseСhapter }; - - return body.content.content; - } - - async searchNovels( - searchTerm: string, - pageNo: number | undefined = 1, - ): Promise { - const url = `${this.site}/api/search/?query=${searchTerm}&count=100&field=titles&page=${pageNo}`; - const result = await fetchApi(url); - const body = (await result.json()) as { content: responseNovels[] }; - const novels: Plugin.NovelItem[] = []; - - body.content.forEach((novel) => - novels.push({ - name: novel.main_name || novel.secondary_name, - cover: this.site + (novel.img?.high || novel.img?.mid || novel.img.low), - url: this.site + "/novel/" + novel.dir, - }), - ); - - return novels; - } - - fetchImage = fetchFile; - - filters = { - sort: { - label: "Сортировка", - value: "", - options: [ - { label: "Рейтинг", value: "rating" }, - { label: "Просмотры", value: "views" }, - { label: "Лайкам", value: "votes" }, - { label: "Дате добавления", value: "id" }, - { label: "Дате обновления", value: "chapter_date" }, - { label: "Количество глав", value: "count_chapters" }, - ], - type: FilterTypes.Picker, - }, - order: { - label: "Порядок", - value: "", - options: [ - { label: "По убыванию", value: "-" }, - { label: "По возрастанию", value: "+" }, - ], - type: FilterTypes.Picker, - }, - genres: { - label: "Жанры:", - value: { include: [], exclude: [] }, - options: [ - { label: "Боевик", value: "112" }, - { label: "Война", value: "123" }, - { label: "Детектив", value: "114" }, - { label: "Драма", value: "125" }, - { label: "Историческая проза", value: "115" }, - { label: "ЛитРПГ", value: "109" }, - { label: "Любовные романы", value: "116" }, - { label: "Мистика", value: "103" }, - { label: "Научная фантастика", value: "121" }, - { label: "Повседневность", value: "128" }, - { label: "Подростковая проза", value: "113" }, - { label: "Политический роман", value: "119" }, - { label: "Попаданцы", value: "108" }, - { label: "Поэзия", value: "105" }, - { label: "Разное", value: "111" }, - { label: "РеалРПГ", value: "117" }, - { label: "Романтика", value: "126" }, - { label: "Современная проза", value: "102" }, - { label: "Современная фантастика", value: "127" }, - { label: "Спорт", value: "122" }, - { label: "Трагедия", value: "129" }, - { label: "Триллер", value: "110" }, - { label: "Триллер и саспенс", value: "124" }, - { label: "Ужасы", value: "106" }, - { label: "Фантастика", value: "101" }, - { label: "Фанфик", value: "107" }, - { label: "Фьюжн роман", value: "120" }, - { label: "Фэнтези", value: "100" }, - { label: "Эротика", value: "118" }, - { label: "Юмор", value: "104" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - categories: { - label: "Тэги:", - value: { include: [], exclude: [] }, - options: [ - { label: "[Награжденная работа]", value: "648" }, - { label: "18+", value: "423" }, - { label: "Абьюзеры", value: "663" }, - { label: "Авантюристы", value: "436" }, - { label: "Автоматоны", value: "593" }, - { label: "Агрессивные персонажи", value: "502" }, - { label: "Ад", value: "569" }, - { label: "Адаптация в радиопостановку", value: "581" }, - { label: "Академия", value: "153" }, - { label: "Актеры озвучки", value: "627" }, - { label: "Активный главный герой", value: "251" }, - { label: "Алхимия", value: "233" }, - { label: "Альтернативная история", value: "147" }, - { label: "Альтернативный мир", value: "156" }, - { label: "Амнезия/Потеря памяти", value: "344" }, - { label: "Анабиоз", value: "685" }, - { label: "Ангелы", value: "183" }, - { label: "Андрогинные персонажи", value: "321" }, - { label: "Андроиды", value: "203" }, - { label: "Анти-магия", value: "533" }, - { label: "Антигерой", value: "432" }, - { label: "Антикварный магазин", value: "623" }, - { label: "Антисоциальный главный герой", value: "613" }, - { label: "Антиутопия", value: "142" }, - { label: "Апатичный протагонист", value: "157" }, - { label: "Апокалипсис", value: "402" }, - { label: "Аранжированный брак", value: "375" }, - { label: "Армия", value: "639" }, - { label: "Артефакты", value: "234" }, - { label: "Артисты", value: "523" }, - { label: "Банды", value: "630" }, - { label: "БДСМ", value: "699" }, - { label: "Бедный главный герой", value: "398" }, - { label: "Безжалостный главный герой", value: "261" }, - { label: "Беззаботный главный герой", value: "438" }, - { label: "Безусловная любовь", value: "679" }, - { label: "Беременность", value: "250" }, - { label: "Бесполый главный герой", value: "325" }, - { label: "Бессмертные", value: "368" }, - { label: "Бесстрашный протагонист", value: "656" }, - { label: "Бесстыдный главный герой", value: "352" }, - { label: "Бесчестный главный герой", value: "716" }, - { label: "Библиотека", value: "428" }, - { label: "Бизнес-литература", value: "121" }, - { label: "Бизнесмен", value: "769" }, - { label: "Биочип", value: "238" }, - { label: "Бисексуальный главный герой", value: "773" }, - { label: "Близнецы", value: "263" }, - { label: "Боги", value: "317" }, - { label: "Богини", value: "439" }, - { label: "Боевая академия", value: "450" }, - { label: "Боевая фантастика", value: "149" }, - { label: "Боевое фэнтези", value: "104" }, - { label: "Боевые духи", value: "433" }, - { label: "Боевые соревнования", value: "493" }, - { label: "Божественная защита", value: "421" }, - { label: "Божественные силы", value: "327" }, - { label: "Борьба за власть", value: "599" }, - { label: "Брак", value: "446" }, - { label: "Брак по расчету", value: "188" }, - { label: "Братский комплекс", value: "159" }, - { label: "Братство", value: "487" }, - { label: "Братья и сестры", value: "577" }, - { label: "Буддизм", value: "745" }, - { label: "Быстрая культивация", value: "366" }, - { label: "Быстрообучаемый", value: "324" }, - { label: "Валькирии", value: "692" }, - { label: "Вампиры", value: "360" }, - { label: "Ваншот", value: "702" }, - { label: "Ведьмы", value: "281" }, - { label: "Вежливый главный герой", value: "379" }, - { label: "Верные подчиненные", value: "328" }, - { label: "Взрослый главный герой", value: "295" }, - { label: "Видит то, чего не видят другие", value: "671" }, - { label: "Виртуальная реальность", value: "401" }, - { label: "Владелец магазина", value: "681" }, - { label: "Внезапная сила", value: "455" }, - { label: "Внезапное богатство", value: "765" }, - { label: "Внешний вид отличается от факт", value: "419" }, - { label: "Военные Летописи", value: "743" }, - { label: "Возвращение из другого мира", value: "696" }, - { label: "Войны", value: "181" }, - { label: "Вокалоид", value: "701" }, - { label: "Волшебники/Волшебницы", value: "539" }, - { label: "Волшебные звери", value: "308" }, - { label: "Воображаемый друг", value: "651" }, - { label: "Воры", value: "414" }, - { label: "Воскрешение", value: "199" }, - { label: "Враги становятся возлюбленными", value: "498" }, - { label: "Враги становятся союзниками", value: "562" }, - { label: "Врата в другой мир", value: "609" }, - { label: "Врачи", value: "376" }, - { label: "Временной парадокс", value: "275" }, - { label: "Всемогущий главный герой", value: "169" }, - { label: "Вторжение на землю", value: "198" }, - { label: "Второй шанс", value: "231" }, - { label: "Вуайеризм", value: "790" }, - { label: "Выживание", value: "380" }, - { label: "Высокомерные персонажи", value: "361" }, - { label: "Гадание", value: "595" }, - { label: "Гарем рабов", value: "777" }, - { label: "Гг - женщина", value: "186" }, - { label: "Гг - мужчина", value: "166" }, - { label: "Гг силен с самого начала", value: "171" }, - { label: "Геймеры", value: "392" }, - { label: "Генералы", value: "326" }, - { label: "Генетические модификации", value: "657" }, - { label: "Гениальный главный герой", value: "617" }, - { label: "Герои", value: "285" }, - { label: "Героиня — сорванец", value: "583" }, - { label: "Героическая фантастика", value: "140" }, - { label: "Героическое фэнтези", value: "107" }, - { label: "Герой влюбляется первым", value: "187" }, - { label: "Гетерохромия", value: "570" }, - { label: "Гильдии", value: "411" }, - { label: "Гипнотизм", value: "755" }, - { label: "Главный герой — бог", value: "547" }, - { label: "Главный герой — гуманоид", value: "636" }, - { label: "Главный герой — наполовину чел", value: "445" }, - { label: "Главный герой — отец", value: "792" }, - { label: "Главный герой — раб", value: "780" }, - { label: "Главный герой — ребенок", value: "488" }, - { label: "Главный герой — рубака", value: "476" }, - { label: "Главный герой влюбляется первы", value: "683" }, - { label: "Главный герой играет роль", value: "472" }, - { label: "Главный герой носит очки", value: "672" }, - { label: "Главный герой пацифист", value: "698" }, - { label: "Гладиаторы", value: "603" }, - { label: "Глуповатый главный герой", value: "385" }, - { label: "Гоблины", value: "586" }, - { label: "Големы", value: "620" }, - { label: "Гомункул", value: "789" }, - { label: "Горничные", value: "459" }, - { label: "Городское фэнтези", value: "105" }, - { label: "Госпиталь", value: "800" }, - { label: "Готовка", value: "302" }, - { label: "Гриндинг", value: "393" }, - { label: "Дао Компаньон", value: "462" }, - { label: "Даосизм", value: "760" }, - { label: "Дварфы", value: "323" }, - { label: "Двойная личность", value: "642" }, - { label: "Двойник", value: "601" }, - { label: "Дворецкий", value: "660" }, - { label: "Дворяне", value: "168" }, - { label: "Дворянство/Аристократия", value: "437" }, - { label: "Девушки-монстры", value: "669" }, - { label: "Демоническая техника культивац", value: "722" }, - { label: "Демоны", value: "152" }, - { label: "Денежный долг", value: "783" }, - { label: "Депрессия", value: "555" }, - { label: "Детектив", value: "116" }, - { label: "Детективы", value: "612" }, - { label: "Детская литература", value: "123" }, - { label: "Дискриминация", value: "162" }, - { label: "Добыча денег в приоритете", value: "396" }, - { label: "Документальная проза", value: "122" }, - { label: "Долгая разлука", value: "307" }, - { label: "Домашние дела", value: "290" }, - { label: "Домогательство", value: "470" }, - { label: "Драконы", value: "303" }, - { label: "Драконьи всадники", value: "607" }, - { label: "Древние времена", value: "221" }, - { label: "Древний Китай", value: "374" }, - { label: "Дружба", value: "217" }, - { label: "Друзья детства", value: "282" }, - { label: "Друзья становятся врагами", value: "567" }, - { label: "Друиды", value: "497" }, - { label: "Дух лисы", value: "784" }, - { label: "Духи/призраки", value: "172" }, - { label: "Духовный советник", value: "435" }, - { label: "Душевность", value: "633" }, - { label: "Души", value: "254" }, - { label: "Европейская атмосфера", value: "521" }, - { label: "Ёкаи", value: "575" }, - { label: "Есть аниме-адаптация", value: "154" }, - { label: "Есть видеоигра по мотивам", value: "552" }, - { label: "Есть манга", value: "155" }, - { label: "Есть манхва-адаптация", value: "517" }, - { label: "Есть маньхуа-адаптация", value: "388" }, - { label: "Есть сериал-адаптация", value: "492" }, - { label: "Есть фильм", value: "173" }, - { label: "Женища-наставник", value: "505" }, - { label: "Жесткая, двуличная личность", value: "346" }, - { label: "Жестокие персонажи", value: "503" }, - { label: "Жестокое обращение с ребенком", value: "654" }, - { label: "Жестокость", value: "245" }, - { label: "Животноводство", value: "754" }, - { label: "Животные черты", value: "528" }, - { label: "Жизнь в квартире", value: "606" }, - { label: "Жрицы", value: "615" }, - { label: "Заботливый главный герой", value: "288" }, - { label: "Забывчивый главный герой", value: "628" }, - { label: "Заговоры", value: "289" }, - { label: "Закалка тела", value: "362" }, - { label: "Законники", value: "756" }, - { label: "Замкнутый главный герой", value: "589" }, - { label: "Запечатанная сила", value: "430" }, - { label: "Застенчивые персонажи", value: "508" }, - { label: "Звери", value: "237" }, - { label: "Звери-компаньоны", value: "301" }, - { label: "Злой протагонист", value: "243" }, - { label: "Злые боги", value: "504" }, - { label: "Злые организации", value: "563" }, - { label: "Злые религии", value: "734" }, - { label: "Знаменитости", value: "473" }, - { label: "Знаменитый главный герой", value: "531" }, - { label: "Знания современного мира", value: "297" }, - { label: "Зомби", value: "409" }, - { label: "Игра на выживание", value: "274" }, - { label: "Игривый протагонист", value: "717" }, - { label: "Игровая система рейтинга", value: "391" }, - { label: "Игровые элементы", value: "266" }, - { label: "Игрушки (18+)", value: "676" }, - { label: "Из грязи в князи", value: "416" }, - { label: "Из женщины в мужчину", value: "709" }, - { label: "Из мужчины в женщину", value: "715" }, - { label: "Из полного в худого", value: "767" }, - { label: "Из слабого в сильного", value: "202" }, - { label: "Извращенный главный герой", value: "434" }, - { label: "Изгои", value: "534" }, - { label: "Изменение расы", value: "664" }, - { label: "Изменения внешнего вида", value: "300" }, - { label: "Изменения личности", value: "219" }, - { label: "Изнасилование", value: "229" }, - { label: "Изображения жестокости", value: "355" }, - { label: "ИИ", value: "235" }, - { label: "Империи", value: "748" }, - { label: "Инвалидность", value: "684" }, - { label: "Индустриализация", value: "292" }, - { label: "Инженер", value: "163" }, - { label: "Инцест", value: "525" }, - { label: "Искусственный интеллект", value: "236" }, - { label: "Исследования", value: "670" }, - { label: "Историческая проза", value: "119" }, - { label: "Исторические приключения", value: "120" }, - { label: "Исторический детектив", value: "117" }, - { label: "Исторический любовный роман", value: "138" }, - { label: "Историческое фэнтези", value: "110" }, - { label: "Каннибализм", value: "456" }, - { label: "Карточные игры", value: "682" }, - { label: "Киберпанк", value: "141" }, - { label: "Киберспорт", value: "686" }, - { label: "Кланы", value: "796" }, - { label: "Класс безработного", value: "735" }, - { label: "Клоны", value: "447" }, - { label: "Клубы", value: "216" }, - { label: "Книги", value: "427" }, - { label: "Книги навыков", value: "400" }, - { label: "Книжный червь", value: "519" }, - { label: "Коварство", value: "230" }, - { label: "Коллеги", value: "704" }, - { label: "Колледж/Университет", value: "726" }, - { label: "Кома", value: "776" }, - { label: "Командная работа", value: "496" }, - { label: "Комедийный оттенок", value: "582" }, - { label: "Комплекс неполноценности", value: "550" }, - { label: "Комплекс семейных отношений", value: "223" }, - { label: "Конкуренция", value: "746" }, - { label: "Контроль разума/сознания", value: "357" }, - { label: "Копейщик", value: "425" }, - { label: "Королевская битва", value: "797" }, - { label: "Королевская власть", value: "178" }, - { label: "Королевства", value: "259" }, - { label: "Короткий любовный роман", value: "136" }, - { label: "Коррупция", value: "457" }, - { label: "Космическая фантастика", value: "146" }, - { label: "Космические войны", value: "697" }, - { label: "Красивый герой", value: "226" }, - { label: "Крафт", value: "377" }, - { label: "Кризис личности", value: "640" }, - { label: "Кругосветное путешествие", value: "353" }, - { label: "Кудере", value: "506" }, - { label: "Кузены", value: "718" }, - { label: "Кузнец", value: "518" }, - { label: "Кукловоды", value: "501" }, - { label: "Куклы/марионетки", value: "624" }, - { label: "Культивация", value: "241" }, - { label: "Куннилингус", value: "667" }, - { label: "Легенды", value: "500" }, - { label: "Легкая жизнь", value: "644" }, - { label: "Ленивый главный герой", value: "621" }, - { label: "Лидерство", value: "494" }, - { label: "Лоли", value: "213" }, - { label: "Лотерея", value: "477" }, - { label: "Любовное фэнтези", value: "135" }, - { label: "Любовный треугольник", value: "218" }, - { label: "Любовь детства", value: "560" }, - { label: "Любовь с первого взгляда", value: "737" }, - { label: "Магические надписи", value: "453" }, - { label: "Магические печати", value: "369" }, - { label: "Магические технологии", value: "440" }, - { label: "Магия", value: "165" }, - { label: "Магия призыва", value: "418" }, - { label: "Мазохистские персонажи", value: "688" }, - { label: "Манипулятивные персонажи", value: "249" }, - { label: "Мания", value: "212" }, - { label: "Мастер на все руки", value: "466" }, - { label: "Мастурбация", value: "788" }, - { label: "Махо-сёдзё", value: "556" }, - { label: "Медицинские знания", value: "507" }, - { label: "Медленная романтическая линия", value: "232" }, - { label: "Медленное развитие на старте", value: "694" }, - { label: "Межпространственные путешестви", value: "404" }, - { label: "Менеджмент", value: "294" }, - { label: "Мертвый главный герой", value: "761" }, - { label: "Месть", value: "209" }, - { label: "Метаморфы", value: "335" }, - { label: "Меч и магия", value: "180" }, - { label: "Мечник", value: "647" }, - { label: "Мечты", value: "738" }, - { label: "Милая история", value: "725" }, - { label: "Милое дитя", value: "637" }, - { label: "Милый главный герой", value: "714" }, - { label: "Мировое дерево", value: "463" }, - { label: "Мистика", value: "151" }, - { label: "Мистический ореол вокруг семьи", value: "483" }, - { label: "Мифические звери", value: "491" }, - { label: "Мифология", value: "530" }, - { label: "Младшие братья", value: "785" }, - { label: "Младшие сестры", value: "527" }, - { label: "ММОРПГ (ЛитРПГ)", value: "395" }, - { label: "Множество перемещенных людей", value: "549" }, - { label: "Множество реальностей", value: "370" }, - { label: "Множество реинкарнированных лю", value: "330" }, - { label: "Модели", value: "678" }, - { label: "Молчаливый персонаж", value: "721" }, - { label: "Монстры", value: "192" }, - { label: "Мужская гей-пара", value: "706" }, - { label: "Мужчина-яндере", value: "267" }, - { label: "Музыка", value: "635" }, - { label: "Музыкальные группы", value: "634" }, - { label: "Мутации", value: "693" }, - { label: "Мутированные существа", value: "405" }, - { label: "Навык кражи", value: "662" }, - { label: "Навязчивая любовь", value: "206" }, - { label: "Наемники", value: "412" }, - { label: "Назойливый возлюбленный", value: "561" }, - { label: "Наивный главный герой", value: "189" }, - { label: "Наркотики", value: "689" }, - { label: "Нарциссический главный герой", value: "532" }, - { label: "Насилие сексуального характера", value: "774" }, - { label: "Наследование", value: "452" }, - { label: "Научная фантастика", value: "144" }, - { label: "Национализм", value: "406" }, - { label: "Не блещущий внешне главный гер", value: "415" }, - { label: "Не родные братья и сестры", value: "526" }, - { label: "Небеса", value: "568" }, - { label: "Небесное испытание", value: "367" }, - { label: "Негуманоидный главный герой", value: "659" }, - { label: "Недоверчивый главный герой", value: "546" }, - { label: "Недооцененный главный герой", value: "258" }, - { label: "Недоразумения", value: "309" }, - { label: "Неизлечимая болезнь", value: "196" }, - { label: "Некромант", value: "397" }, - { label: "Нелинейная история", value: "269" }, - { label: "Ненавистный главный герой", value: "548" }, - { label: "Ненадежный рассказчик", value: "277" }, - { label: "Нерезиденты", value: "772" }, - { label: "Нерешительный главный герой", value: "744" }, - { label: "Несерьезный главный герой", value: "384" }, - { label: "Несколько временных линий", value: "576" }, - { label: "Несколько гг", value: "268" }, - { label: "Несколько главных героев", value: "537" }, - { label: "Несколько идентичностей", value: "652" }, - { label: "Несколько личностей", value: "536" }, - { label: "Нетораре", value: "732" }, - { label: "Нетори", value: "514" }, - { label: "Неудачливый главный герой", value: "618" }, - { label: "Ниндзя", value: "441" }, - { label: "Новелла", value: "103" }, - { label: "Обещание из детства", value: "742" }, - { label: "Обманщик", value: "485" }, - { label: "Обмен телами", value: "214" }, - { label: "Обнаженка", value: "490" }, - { label: "Обольщение", value: "731" }, - { label: "Оборотни", value: "661" }, - { label: "Обратный гарем", value: "351" }, - { label: "Общество монстров", value: "329" }, - { label: "Обязательство", value: "602" }, - { label: "Огнестрельное оружие", value: "291" }, - { label: "Ограниченное время жизни", value: "194" }, - { label: "Одержимость", value: "512" }, - { label: "Одинокий главный герой", value: "394" }, - { label: "Одиночество", value: "306" }, - { label: "Одиночное проживание", value: "313" }, - { label: "Околосмертные переживания", value: "759" }, - { label: "Оммёдзи", value: "597" }, - { label: "Омоложение", value: "338" }, - { label: "Организованная преступность", value: "540" }, - { label: "Оргия", value: "775" }, - { label: "Орки", value: "331" }, - { label: "Освоение навыков", value: "336" }, - { label: "Основано на аниме", value: "605" }, - { label: "Основано на видео игре", value: "720" }, - { label: "Основано на визуальной новелле", value: "793" }, - { label: "Основано на песне", value: "700" }, - { label: "Основано на фильме", value: "604" }, - { label: "Осторожный главный герой", value: "240" }, - { label: "Отаку", value: "571" }, - { label: "Открытый космос", value: "264" }, - { label: "Отношения в сети", value: "727" }, - { label: "Отношения между людьми и нелюд", value: "311" }, - { label: "Отношения на расстоянии", value: "791" }, - { label: "Отношения Сенпай-Коухай", value: "572" }, - { label: "Отношения ученика и учителя", value: "515" }, - { label: "Отношения учитель-ученик", value: "429" }, - { label: "Отношения хозяин-слуга", value: "312" }, - { label: "Отомэ игра", value: "733" }, - { label: "Отсутствие здравого смысла", value: "645" }, - { label: "Отсутствие родителей", value: "625" }, - { label: "Офисный роман", value: "707" }, - { label: "Официанты", value: "703" }, - { label: "Охотники", value: "378" }, - { label: "Очаровательный главный герой", value: "687" }, - { label: "Падшее дворянство", value: "655" }, - { label: "Падшие ангелы", value: "565" }, - { label: "Пайзури", value: "665" }, - { label: "Паразиты", value: "591" }, - { label: "Параллельные миры", value: "207" }, - { label: "Парк", value: "265" }, - { label: "Парк развлечений", value: "632" }, - { label: "Пародия", value: "407" }, - { label: "Певцы/Певицы", value: "739" }, - { label: "Первая любовь", value: "729" }, - { label: "Первоисточник новеллы — манга", value: "611" }, - { label: "Первый раз", value: "787" }, - { label: "Перемещение в игровой мир", value: "588" }, - { label: "Перемещение в иной мир", value: "750" }, - { label: "Перерождение в ином мире", value: "751" }, - { label: "Переселение души/трансмиграция", value: "257" }, - { label: "Персонаж использует щит", value: "666" }, - { label: "Петля времени", value: "200" }, - { label: "Пираты", value: "771" }, - { label: "Писатели", value: "482" }, - { label: "Питомцы", value: "349" }, - { label: "Племенное общество", value: "381" }, - { label: "Повелитель демонов", value: "283" }, - { label: "Подземелья", value: "322" }, - { label: "Подростковая проза", value: "114" }, - { label: "Пожелания", value: "278" }, - { label: "Познание Дао", value: "443" }, - { label: "Покинутое дитя", value: "590" }, - { label: "Полигамия", value: "386" }, - { label: "Политика", value: "170" }, - { label: "Политический роман", value: "133" }, - { label: "Полиция", value: "764" }, - { label: "Полулюди", value: "420" }, - { label: "Популярный любовный интерес", value: "342" }, - { label: "Постапокалипсис", value: "145" }, - { label: "Постапокалиптика", value: "184" }, - { label: "Потерянные цивилизации", value: "749" }, - { label: "Похищения людей", value: "723" }, - { label: "Поэзия", value: "111" }, - { label: "Правонарушители", value: "713" }, - { label: "Прагматичный главный герой", value: "592" }, - { label: "Преданный любовный интерес", value: "225" }, - { label: "Предательство", value: "222" }, - { label: "Предвидение", value: "177" }, - { label: "Прекрасная героиня", value: "158" }, - { label: "Преступники", value: "736" }, - { label: "Преступность", value: "204" }, - { label: "Призванный герой", value: "262" }, - { label: "Призраки", value: "176" }, - { label: "Принуждение к отношениям", value: "643" }, - { label: "Принцессы", value: "795" }, - { label: "Притворная пара", value: "641" }, - { label: "Причудливые персонажи", value: "387" }, - { label: "Пришельцы/инопланетяне", value: "197" }, - { label: "Программист", value: "691" }, - { label: "Проклятия", value: "174" }, - { label: "Промывание мозгов", value: "578" }, - { label: "Пропуск времени", value: "256" }, - { label: "Пророчества", value: "499" }, - { label: "Проститутки", value: "786" }, - { label: "Прошлое играет большую роль", value: "320" }, - { label: "Прыжки между мирами", value: "741" }, - { label: "Психические силы", value: "359" }, - { label: "Психопаты", value: "270" }, - { label: "Публицистика", value: "124" }, - { label: "Путешествие во времени", value: "201" }, - { label: "Пытка", value: "280" }, - { label: "Рабы", value: "778" }, - { label: "Развитие личности", value: "125" }, - { label: "Развод", value: "758" }, - { label: "Разумные предметы", value: "286" }, - { label: "Расизм", value: "408" }, - { label: "Рассказ", value: "185" }, - { label: "Расторжения помолвки", value: "343" }, - { label: "Расы зооморфов", value: "315" }, - { label: "Реализм", value: "246" }, - { label: "Ревность", value: "730" }, - { label: "Редакторы", value: "705" }, - { label: "Реинкарнация", value: "372" }, - { label: "Реинкарнация в монстра", value: "310" }, - { label: "Реинкарнация в объект", value: "711" }, - { label: "Религии", value: "616" }, - { label: "Репортеры", value: "781" }, - { label: "Ресторан", value: "680" }, - { label: "Решительный главный герой", value: "242" }, - { label: "Робкий главный герой", value: "763" }, - { label: "Родитель одиночка", value: "708" }, - { label: "Родительский комплекс", value: "587" }, - { label: "Родословная", value: "239" }, - { label: "Романтическая эротика", value: "132" }, - { label: "Романтический подсюжет", value: "271" }, - { label: "Рост персонажа", value: "215" }, - { label: "Рыцари", value: "260" }, - { label: "Садистские персонажи", value: "674" }, - { label: "Самоотверженный главный герой", value: "747" }, - { label: "Самурай", value: "677" }, - { label: "Сборник коротких историй", value: "520" }, - { label: "Связанные сюжетные линии", value: "535" }, - { label: "Святые", value: "752" }, - { label: "Священники", value: "413" }, - { label: "Сдержанный главный герой", value: "762" }, - { label: "Секретные организации", value: "417" }, - { label: "Секреты", value: "626" }, - { label: "Секс рабы", value: "779" }, - { label: "Семейный конфликт", value: "757" }, - { label: "Семь добродетелей", value: "334" }, - { label: "Семь смертных грехов", value: "253" }, - { label: "Семья", value: "347" }, - { label: "Сёнэн-ай подсюжет", value: "690" }, - { label: "Серийные убийцы", value: "557" }, - { label: "Сестринский комплекс", value: "558" }, - { label: "Сила духа", value: "373" }, - { label: "Сила, требующая платы за польз", value: "579" }, - { label: "Сильная пара", value: "228" }, - { label: "Сильный в сильнейшего", value: "442" }, - { label: "Сильный любовный интерес", value: "273" }, - { label: "Синдром восьмиклассника", value: "211" }, - { label: "Сироты", value: "319" }, - { label: "Система уровней", value: "305" }, - { label: "Системный администратор", value: "538" }, - { label: "Сказка", value: "126" }, - { label: "Скрытие истинной личности", value: "451" }, - { label: "Скрытие истинных способностей", value: "348" }, - { label: "Скрытный главный герой", value: "252" }, - { label: "Скрытые способности", value: "247" }, - { label: "Скульпторы", value: "448" }, - { label: "Слабо выраженная романтическая", value: "318" }, - { label: "Слабый главный герой", value: "298" }, - { label: "Слепой главный герой", value: "794" }, - { label: "Слуги", value: "333" }, - { label: "Слэш", value: "131" }, - { label: "Смерть", value: "175" }, - { label: "Смерть близких", value: "444" }, - { label: "Собственнические персонажи", value: "227" }, - { label: "Современная проза", value: "150" }, - { label: "Современность", value: "167" }, - { label: "Современный любовный роман", value: "137" }, - { label: "Сожительство", value: "544" }, - { label: "Создание армии", value: "287" }, - { label: "Создание артефактов", value: "382" }, - { label: "Создание клана", value: "513" }, - { label: "Создание королевства", value: "293" }, - { label: "Создание навыков", value: "337" }, - { label: "Создание секты", value: "469" }, - { label: "Солдаты/военные", value: "193" }, - { label: "Сон", value: "622" }, - { label: "Состоятельные персонажи", value: "190" }, - { label: "Социальная иерархия по силе", value: "255" }, - { label: "Социальная фантастика", value: "148" }, - { label: "Социальные изгои", value: "542" }, - { label: "Спасение мира", value: "638" }, - { label: "Специальные способности", value: "179" }, - { label: "Спокойный главный герой", value: "160" }, - { label: "Справедливый главный герой", value: "719" }, - { label: "Средневековье", value: "296" }, - { label: "Ссорящаяся пара", value: "383" }, - { label: "Сталкеры", value: "710" }, - { label: "Старение", value: "299" }, - { label: "Стимпанк", value: "139" }, - { label: "Стоические персонажи", value: "509" }, - { label: "Стокгольмский синдром", value: "675" }, - { label: "Стратег", value: "495" }, - { label: "Стратегические битвы", value: "272" }, - { label: "Стратегия", value: "798" }, - { label: "Стрелки", value: "522" }, - { label: "Стрельба из лука", value: "461" }, - { label: "Студенческий совет", value: "551" }, - { label: "Судьба", value: "364" }, - { label: "Суккубы", value: "545" }, - { label: "Супер герои", value: "799" }, - { label: "Суровая подготовка", value: "356" }, - { label: "Таинственная болезнь", value: "195" }, - { label: "Таинственное прошлое", value: "358" }, - { label: "Тайная личность", value: "399" }, - { label: "Тайные отношения", value: "768" }, - { label: "Танцоры", value: "782" }, - { label: "Телохранители", value: "516" }, - { label: "Темное фэнтези", value: "106" }, - { label: "Тентакли", value: "712" }, - { label: "Террористы", value: "574" }, - { label: "Технологический разрыв", value: "658" }, - { label: "Тихие персонажи", value: "600" }, - { label: "Толстый главный герой", value: "389" }, - { label: "Торговцы", value: "489" }, - { label: "Травля/буллинг", value: "210" }, - { label: "Травник", value: "724" }, - { label: "Трагическое прошлое", value: "276" }, - { label: "Трансплантация воспоминаний", value: "449" }, - { label: "Триллер", value: "134" }, - { label: "Трудолюбивый главный герой", value: "164" }, - { label: "Тюрьма", value: "541" }, - { label: "Убийства", value: "205" }, - { label: "Убийцы", value: "345" }, - { label: "Убийцы драконов", value: "646" }, - { label: "Уверенный главный герой", value: "363" }, - { label: "Удачливый главный герой", value: "478" }, - { label: "Ужасы", value: "112" }, - { label: "Укротитель монстров", value: "422" }, - { label: "Умения из прошлой жизни", value: "371" }, - { label: "Умная пара", value: "554" }, - { label: "Умный главный герой", value: "161" }, - { label: "Уникальная техника Культивации", value: "350" }, - { label: "Уникальное оружие", value: "426" }, - { label: "Управление бизнесом", value: "403" }, - { label: "Управление временем", value: "279" }, - { label: "Управление кровью", value: "753" }, - { label: "Упрямый главный герой", value: "695" }, - { label: "Уродливый главный герой", value: "766" }, - { label: "Ускоренный рост", value: "390" }, - { label: "Усыновленные дети", value: "543" }, - { label: "Усыновленный главный герой", value: "486" }, - { label: "Уход за детьми", value: "474" }, - { label: "Учителя", value: "431" }, - { label: "Фамильяры", value: "596" }, - { label: "Фанатизм", value: "650" }, - { label: "Фантастические существа", value: "410" }, - { label: "Фантастический детектив", value: "115" }, - { label: "Фанфик", value: "113" }, - { label: "Фанфикшн", value: "464" }, - { label: "Фармацевт", value: "728" }, - { label: "Фарминг", value: "458" }, - { label: "Феи", value: "316" }, - { label: "Фелляция", value: "631" }, - { label: "Фемслэш", value: "127" }, - { label: "Фениксы", value: "454" }, - { label: "Фетиш груди", value: "559" }, - { label: "Философия", value: "208" }, - { label: "Фильмы", value: "479" }, - { label: "Флэшбэки", value: "585" }, - { label: "Фобии", value: "220" }, - { label: "Фольклор", value: "529" }, - { label: "Футанари", value: "619" }, - { label: "Футуристический сеттинг", value: "460" }, - { label: "Фэнтези мир", value: "244" }, - { label: "Хакеры", value: "475" }, - { label: "Харизматический герой", value: "467" }, - { label: "Хикикомори/Затворники", value: "524" }, - { label: "Хитроумный главный герой", value: "224" }, - { label: "Хозяин подземелий", value: "608" }, - { label: "Холодный главный герой", value: "354" }, - { label: "Хорошие отношения с семьей", value: "566" }, - { label: "Хранители могил", value: "191" }, - { label: "Целители", value: "465" }, - { label: "Цзянши", value: "740" }, - { label: "Цундэрэ", value: "510" }, - { label: "Чаты", value: "629" }, - { label: "Человеческое оружие", value: "580" }, - { label: "Честный главный герой", value: "341" }, - { label: "Читы", value: "339" }, - { label: "Шантаж", value: "584" }, - { label: "Шеф-повар", value: "340" }, - { label: "Шикигами", value: "598" }, - { label: "Школа только для девочек", value: "668" }, - { label: "Шота", value: "573" }, - { label: "Шоу-бизнес", value: "481" }, - { label: "Шпионский детектив", value: "118" }, - { label: "Шпионы", value: "614" }, - { label: "Эволюция", value: "304" }, - { label: "Эгоистичный главный герой", value: "594" }, - { label: "Эйдетическая память", value: "468" }, - { label: "Экзорсизм", value: "564" }, - { label: "Экономика", value: "553" }, - { label: "Эксгибиционизм", value: "673" }, - { label: "Эксперименты с людьми", value: "248" }, - { label: "Элементальная магия", value: "471" }, - { label: "Эльфы", value: "284" }, - { label: "Эмоционально слабый гг", value: "770" }, - { label: "Эпизодический", value: "649" }, - { label: "Эпическое фэнтези", value: "109" }, - { label: "Эротическая фантастика", value: "129" }, - { label: "Эротический фанфик", value: "128" }, - { label: "Эротическое фэнтези", value: "130" }, - { label: "Юмористическая фантастика", value: "143" }, - { label: "Юмористическое фэнтези", value: "108" }, - { label: "Юный любовный интерес", value: "511" }, - { label: "Яды", value: "484" }, - { label: "Языкастые персонажи", value: "480" }, - { label: "Языковой барьер", value: "182" }, - { label: "Яндере", value: "314" }, - { label: "Японские силы самообороны", value: "610" }, - { label: "Ярко выраженная романтика", value: "365" }, - { label: "R-15 Японское возрастное огр.", value: "332" }, - { label: "R-18", value: "424" }, - ], - type: FilterTypes.ExcludableCheckboxGroup, - }, - types: { - label: "Типы:", - value: [], - options: [ - { label: "Авторское", value: "1" }, - { label: "Другое", value: "7" }, - { label: "Запад", value: "5" }, - { label: "Китай", value: "4" }, - { label: "Корея", value: "3" }, - { label: "Фанфики", value: "6" }, - { label: "Япония", value: "2" }, - ], - type: FilterTypes.CheckboxGroup, - }, - status: { - label: "Статус проекта:", - value: [], - options: [ - { label: "Анонс", value: "4" }, - { label: "Закончен", value: "0" }, - { label: "Заморожен", value: "2" }, - { label: "Лицензировано", value: "5" }, - { label: "Нет переводчика", value: "3" }, - { label: "Продолжается", value: "1" }, - ], - type: FilterTypes.CheckboxGroup, - }, - age_limit: { - label: "Возрастной рейтинг:", - value: [], - options: [ - { label: "16+", value: "1" }, - { label: "18+", value: "2" }, - { label: "Для всех", value: "0" }, - ], - type: FilterTypes.CheckboxGroup, - }, - } satisfies Filters; -} - -export default new ReN(); - -interface responseNovels { - id: number; - secondary_name: string; - main_name: string; - dir: string; - is_licensed: boolean; - issue_year: number; - avg_rating: string; - admin_rating: string; - type: string; - total_views: number; - total_votes: number; - cover_high: string; - cover_mid: string; - cover_low: string; - is_yaoi: boolean; - is_erotic: boolean; - bookmark_type?: null; - genres?: ItemEntity[] | null; - img: Img; - categories?: ItemEntity[] | null; - rus_name?: string; - en_name?: string; -} - -interface Img { - high?: string; - mid?: string; - low: string; -} - -interface responseNovel { - id: number; - img: Img; - secondary_name: string; - main_name: string; - another_name: string; - dir: string; - description: string; - issue_year: number; - avg_rating: string; - admin_rating: string; - count_rating: number; - age_limit: number; - status: ItemEntity; - count_bookmarks: number; - total_votes: number; - total_views: number; - type: ItemEntity; - genres?: ItemEntity[] | null; - categories?: ItemEntity[] | null; - publishers?: PublishersEntity[] | null; - bookmark_type?: null; - branches?: BranchesEntity[] | null; - count_chapters: number; - first_chapter: FirstChapter; - continue_reading?: null; - is_licensed: boolean; - newlate_id?: null; - newlate_title?: null; - related?: null; - uploaded: number; - can_post_comments: boolean; - adaptation: Adaptation | null; -} - -interface Adaptation { - main_name: string; - secondary_name: string; - dir: string; - img: string; -} - -interface ItemEntity { - id: number; - name: string; -} -interface PublishersEntity { - id: number; - name: string; - img: string; - dir: string; - tagline: string; - type: string; -} -interface BranchesEntity { - id: number; - img: string; - publishers?: PublishersEntity[] | null; - subscribed: boolean; - total_votes: number; - count_chapters: number; -} -interface FirstChapter { - id: number; - tome: number; - chapter: string; -} - -interface responseСhapters { - id: number; - rated?: null; - viewed?: null; - is_bought?: boolean | null; - publishers?: PublishersEntity[] | null; - tome: number; - index: number; - chapter: string; - name: string; - price?: null | number; - score: number; - pub_date?: null; - upload_date: string; - is_paid: boolean; -} - -interface responseСhapter { - id: number; - chapter: string; - name: string; - content: string; - score: number; - upload_date: string; - is_paid: boolean; - title_id: number; - volume_id: number; - branch_id: number; - price?: null; - pub_date?: null; - index: number; - publishers?: PublishersEntity[] | null; - tome: number; -} +import { Plugin } from "@typings/plugin"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { NovelStatus } from "@libs/novelStatus"; +import dayjs from "dayjs"; + +class ReN implements Plugin.PluginBase { + id = "ReN"; + name = "Renovels"; + site = "https://renovels.org"; + version = "1.0.0"; + icon = "src/ru/renovels/icon.png"; + + async popularNovels( + pageNo: number, + { showLatestNovels, filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = this.site + "/api/search/catalog/?count=30&ordering="; + url += filters?.order?.value ? "-" : ""; + url += showLatestNovels ? "chapter_date" : filters?.sort?.value || "rating"; + + Object.entries(filters || {}).forEach(([type, { value }]: any) => { + if (value instanceof Array && value.length) { + url += "&" + type + "=" + + value.join("&" + type + "="); + } + if (value?.include instanceof Array && value.include.length) { + url += "&" + type + "=" + + value.include.join("&" + type + "="); + } + if (value?.exclude instanceof Array && value.exclude.length) { + url += "&exclude_" + type + "=" + + value.exclude.join("&exclude_" + type + "="); + } + }); + + url += "&page=" + pageNo; + + const result = await fetchApi(url); + const body = (await result.json()) as { content: responseNovels[] }; + + const novels: Plugin.NovelItem[] = body.content.map((novel) => ({ + name: novel.main_name || novel.secondary_name, + cover: this.site + (novel.img.high || novel.img.mid || novel.img.low), + url: this.site + "/novel/" + novel.dir, + })); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const novelID = novelUrl.split("/")[4]; + const result = await fetchApi(this.site + "/api/titles/" + novelID); + const body = (await result.json()) as { content: responseNovel }; + + const novel: Plugin.SourceNovel = { + url: novelUrl, + name: body.content.main_name || body.content.secondary_name || body.content.another_name, + summary: body.content.description, + cover: + this.site + + (body.content.img.high || + body.content.img.mid || + body.content.img.low), + status: + body.content.status.name === "Продолжается" + ? NovelStatus.Ongoing + : NovelStatus.Completed, + }; + + const tags = [body.content?.genres, body.content?.categories] + .flat() + .map((tags) => tags?.name) + .filter((tags) => tags); + + if (tags.length) { + novel.genres = tags.join(","); + } + + const all = body.content.count_chapters / 100 + 1; + const branch_id = body.content.branches?.[0]?.id || body.content.id; + const chapters: Plugin.ChapterItem[] = []; + + for (let i = 0; i < all; i++) { + const chapterResult = await fetchApi( + this.site + + "/api/titles/chapters/?branch_id=" + branch_id + + "&count=100&page=" + (i + 1), + ); + const volumes = (await chapterResult.json()) as { + content: responseСhapters[]; + }; + + volumes.content.forEach((chapter) => { + if (!chapter.is_paid || chapter.is_bought) { + chapters.push({ + name: + "Том " + chapter.tome + + " Глава " + chapter.chapter + + (chapter.name ? " " + chapter.name.trim() : ""), + url: `${this.site}/novel/${novelID}/${chapter.id}/`, + releaseTime: dayjs(chapter.upload_date).format("LLL"), + chapterNumber: chapter.index, + }); + } + }); + } + + novel.chapters = chapters.reverse(); + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const url = this.site + "/api/titles/chapters/" + chapterUrl.split("/")[5]; + const result = await fetchApi(url); + const body = (await result.json()) as { content: responseСhapter }; + + return body.content.content; + } + + async searchNovels( + searchTerm: string, + pageNo: number | undefined = 1, + ): Promise { + const url = `${this.site}/api/search/?query=${searchTerm}&count=100&field=titles&page=${pageNo}`; + const result = await fetchApi(url); + const body = (await result.json()) as { content: responseNovels[] }; + const novels: Plugin.NovelItem[] = []; + + body.content.forEach((novel) => + novels.push({ + name: novel.main_name || novel.secondary_name, + cover: this.site + (novel.img.high || novel.img.mid || novel.img.low), + url: this.site + "/novel/" + novel.dir, + }), + ); + + return novels; + } + + fetchImage = fetchFile; + + filters = { + sort: { + label: "Сортировка", + value: "rating", + options: [ + { label: "Рейтинг", value: "rating" }, + { label: "Просмотры", value: "views" }, + { label: "Лайкам", value: "votes" }, + { label: "Дате добавления", value: "id" }, + { label: "Дате обновления", value: "chapter_date" }, + { label: "Количество глав", value: "count_chapters" }, + ], + type: FilterTypes.Picker, + }, + order: { + label: "Порядок", + value: "", + options: [ + { label: "По убыванию", value: "-" }, + { label: "По возрастанию", value: "" }, + ], + type: FilterTypes.Picker, + }, + genres: { + label: "Жанры:", + value: { include: [], exclude: [] }, + options: [ + { label: "Боевик", value: "112" }, + { label: "Война", value: "123" }, + { label: "Детектив", value: "114" }, + { label: "Драма", value: "125" }, + { label: "Историческая проза", value: "115" }, + { label: "ЛитРПГ", value: "109" }, + { label: "Любовные романы", value: "116" }, + { label: "Мистика", value: "103" }, + { label: "Научная фантастика", value: "121" }, + { label: "Повседневность", value: "128" }, + { label: "Подростковая проза", value: "113" }, + { label: "Политический роман", value: "119" }, + { label: "Попаданцы", value: "108" }, + { label: "Поэзия", value: "105" }, + { label: "Разное", value: "111" }, + { label: "РеалРПГ", value: "117" }, + { label: "Романтика", value: "126" }, + { label: "Современная проза", value: "102" }, + { label: "Современная фантастика", value: "127" }, + { label: "Спорт", value: "122" }, + { label: "Трагедия", value: "129" }, + { label: "Триллер", value: "110" }, + { label: "Триллер и саспенс", value: "124" }, + { label: "Ужасы", value: "106" }, + { label: "Фантастика", value: "101" }, + { label: "Фанфик", value: "107" }, + { label: "Фьюжн роман", value: "120" }, + { label: "Фэнтези", value: "100" }, + { label: "Эротика", value: "118" }, + { label: "Юмор", value: "104" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + categories: { + label: "Тэги:", + value: { include: [], exclude: [] }, + options: [ + { label: "[Награжденная работа]", value: "648" }, + { label: "18+", value: "423" }, + { label: "Абьюзеры", value: "663" }, + { label: "Авантюристы", value: "436" }, + { label: "Автоматоны", value: "593" }, + { label: "Агрессивные персонажи", value: "502" }, + { label: "Ад", value: "569" }, + { label: "Адаптация в радиопостановку", value: "581" }, + { label: "Академия", value: "153" }, + { label: "Актеры озвучки", value: "627" }, + { label: "Активный главный герой", value: "251" }, + { label: "Алхимия", value: "233" }, + { label: "Альтернативная история", value: "147" }, + { label: "Альтернативный мир", value: "156" }, + { label: "Амнезия/Потеря памяти", value: "344" }, + { label: "Анабиоз", value: "685" }, + { label: "Ангелы", value: "183" }, + { label: "Андрогинные персонажи", value: "321" }, + { label: "Андроиды", value: "203" }, + { label: "Анти-магия", value: "533" }, + { label: "Антигерой", value: "432" }, + { label: "Антикварный магазин", value: "623" }, + { label: "Антисоциальный главный герой", value: "613" }, + { label: "Антиутопия", value: "142" }, + { label: "Апатичный протагонист", value: "157" }, + { label: "Апокалипсис", value: "402" }, + { label: "Аранжированный брак", value: "375" }, + { label: "Армия", value: "639" }, + { label: "Артефакты", value: "234" }, + { label: "Артисты", value: "523" }, + { label: "Банды", value: "630" }, + { label: "БДСМ", value: "699" }, + { label: "Бедный главный герой", value: "398" }, + { label: "Безжалостный главный герой", value: "261" }, + { label: "Беззаботный главный герой", value: "438" }, + { label: "Безусловная любовь", value: "679" }, + { label: "Беременность", value: "250" }, + { label: "Бесполый главный герой", value: "325" }, + { label: "Бессмертные", value: "368" }, + { label: "Бесстрашный протагонист", value: "656" }, + { label: "Бесстыдный главный герой", value: "352" }, + { label: "Бесчестный главный герой", value: "716" }, + { label: "Библиотека", value: "428" }, + { label: "Бизнес-литература", value: "121" }, + { label: "Бизнесмен", value: "769" }, + { label: "Биочип", value: "238" }, + { label: "Бисексуальный главный герой", value: "773" }, + { label: "Близнецы", value: "263" }, + { label: "Боги", value: "317" }, + { label: "Богини", value: "439" }, + { label: "Боевая академия", value: "450" }, + { label: "Боевая фантастика", value: "149" }, + { label: "Боевое фэнтези", value: "104" }, + { label: "Боевые духи", value: "433" }, + { label: "Боевые соревнования", value: "493" }, + { label: "Божественная защита", value: "421" }, + { label: "Божественные силы", value: "327" }, + { label: "Борьба за власть", value: "599" }, + { label: "Брак", value: "446" }, + { label: "Брак по расчету", value: "188" }, + { label: "Братский комплекс", value: "159" }, + { label: "Братство", value: "487" }, + { label: "Братья и сестры", value: "577" }, + { label: "Буддизм", value: "745" }, + { label: "Быстрая культивация", value: "366" }, + { label: "Быстрообучаемый", value: "324" }, + { label: "Валькирии", value: "692" }, + { label: "Вампиры", value: "360" }, + { label: "Ваншот", value: "702" }, + { label: "Ведьмы", value: "281" }, + { label: "Вежливый главный герой", value: "379" }, + { label: "Верные подчиненные", value: "328" }, + { label: "Взрослый главный герой", value: "295" }, + { label: "Видит то, чего не видят другие", value: "671" }, + { label: "Виртуальная реальность", value: "401" }, + { label: "Владелец магазина", value: "681" }, + { label: "Внезапная сила", value: "455" }, + { label: "Внезапное богатство", value: "765" }, + { label: "Внешний вид отличается от факт", value: "419" }, + { label: "Военные Летописи", value: "743" }, + { label: "Возвращение из другого мира", value: "696" }, + { label: "Войны", value: "181" }, + { label: "Вокалоид", value: "701" }, + { label: "Волшебники/Волшебницы", value: "539" }, + { label: "Волшебные звери", value: "308" }, + { label: "Воображаемый друг", value: "651" }, + { label: "Воры", value: "414" }, + { label: "Воскрешение", value: "199" }, + { label: "Враги становятся возлюбленными", value: "498" }, + { label: "Враги становятся союзниками", value: "562" }, + { label: "Врата в другой мир", value: "609" }, + { label: "Врачи", value: "376" }, + { label: "Временной парадокс", value: "275" }, + { label: "Всемогущий главный герой", value: "169" }, + { label: "Вторжение на землю", value: "198" }, + { label: "Второй шанс", value: "231" }, + { label: "Вуайеризм", value: "790" }, + { label: "Выживание", value: "380" }, + { label: "Высокомерные персонажи", value: "361" }, + { label: "Гадание", value: "595" }, + { label: "Гарем рабов", value: "777" }, + { label: "Гг - женщина", value: "186" }, + { label: "Гг - мужчина", value: "166" }, + { label: "Гг силен с самого начала", value: "171" }, + { label: "Геймеры", value: "392" }, + { label: "Генералы", value: "326" }, + { label: "Генетические модификации", value: "657" }, + { label: "Гениальный главный герой", value: "617" }, + { label: "Герои", value: "285" }, + { label: "Героиня — сорванец", value: "583" }, + { label: "Героическая фантастика", value: "140" }, + { label: "Героическое фэнтези", value: "107" }, + { label: "Герой влюбляется первым", value: "187" }, + { label: "Гетерохромия", value: "570" }, + { label: "Гильдии", value: "411" }, + { label: "Гипнотизм", value: "755" }, + { label: "Главный герой — бог", value: "547" }, + { label: "Главный герой — гуманоид", value: "636" }, + { label: "Главный герой — наполовину чел", value: "445" }, + { label: "Главный герой — отец", value: "792" }, + { label: "Главный герой — раб", value: "780" }, + { label: "Главный герой — ребенок", value: "488" }, + { label: "Главный герой — рубака", value: "476" }, + { label: "Главный герой влюбляется первы", value: "683" }, + { label: "Главный герой играет роль", value: "472" }, + { label: "Главный герой носит очки", value: "672" }, + { label: "Главный герой пацифист", value: "698" }, + { label: "Гладиаторы", value: "603" }, + { label: "Глуповатый главный герой", value: "385" }, + { label: "Гоблины", value: "586" }, + { label: "Големы", value: "620" }, + { label: "Гомункул", value: "789" }, + { label: "Горничные", value: "459" }, + { label: "Городское фэнтези", value: "105" }, + { label: "Госпиталь", value: "800" }, + { label: "Готовка", value: "302" }, + { label: "Гриндинг", value: "393" }, + { label: "Дао Компаньон", value: "462" }, + { label: "Даосизм", value: "760" }, + { label: "Дварфы", value: "323" }, + { label: "Двойная личность", value: "642" }, + { label: "Двойник", value: "601" }, + { label: "Дворецкий", value: "660" }, + { label: "Дворяне", value: "168" }, + { label: "Дворянство/Аристократия", value: "437" }, + { label: "Девушки-монстры", value: "669" }, + { label: "Демоническая техника культивац", value: "722" }, + { label: "Демоны", value: "152" }, + { label: "Денежный долг", value: "783" }, + { label: "Депрессия", value: "555" }, + { label: "Детектив", value: "116" }, + { label: "Детективы", value: "612" }, + { label: "Детская литература", value: "123" }, + { label: "Дискриминация", value: "162" }, + { label: "Добыча денег в приоритете", value: "396" }, + { label: "Документальная проза", value: "122" }, + { label: "Долгая разлука", value: "307" }, + { label: "Домашние дела", value: "290" }, + { label: "Домогательство", value: "470" }, + { label: "Драконы", value: "303" }, + { label: "Драконьи всадники", value: "607" }, + { label: "Древние времена", value: "221" }, + { label: "Древний Китай", value: "374" }, + { label: "Дружба", value: "217" }, + { label: "Друзья детства", value: "282" }, + { label: "Друзья становятся врагами", value: "567" }, + { label: "Друиды", value: "497" }, + { label: "Дух лисы", value: "784" }, + { label: "Духи/призраки", value: "172" }, + { label: "Духовный советник", value: "435" }, + { label: "Душевность", value: "633" }, + { label: "Души", value: "254" }, + { label: "Европейская атмосфера", value: "521" }, + { label: "Ёкаи", value: "575" }, + { label: "Есть аниме-адаптация", value: "154" }, + { label: "Есть видеоигра по мотивам", value: "552" }, + { label: "Есть манга", value: "155" }, + { label: "Есть манхва-адаптация", value: "517" }, + { label: "Есть маньхуа-адаптация", value: "388" }, + { label: "Есть сериал-адаптация", value: "492" }, + { label: "Есть фильм", value: "173" }, + { label: "Женища-наставник", value: "505" }, + { label: "Жесткая, двуличная личность", value: "346" }, + { label: "Жестокие персонажи", value: "503" }, + { label: "Жестокое обращение с ребенком", value: "654" }, + { label: "Жестокость", value: "245" }, + { label: "Животноводство", value: "754" }, + { label: "Животные черты", value: "528" }, + { label: "Жизнь в квартире", value: "606" }, + { label: "Жрицы", value: "615" }, + { label: "Заботливый главный герой", value: "288" }, + { label: "Забывчивый главный герой", value: "628" }, + { label: "Заговоры", value: "289" }, + { label: "Закалка тела", value: "362" }, + { label: "Законники", value: "756" }, + { label: "Замкнутый главный герой", value: "589" }, + { label: "Запечатанная сила", value: "430" }, + { label: "Застенчивые персонажи", value: "508" }, + { label: "Звери", value: "237" }, + { label: "Звери-компаньоны", value: "301" }, + { label: "Злой протагонист", value: "243" }, + { label: "Злые боги", value: "504" }, + { label: "Злые организации", value: "563" }, + { label: "Злые религии", value: "734" }, + { label: "Знаменитости", value: "473" }, + { label: "Знаменитый главный герой", value: "531" }, + { label: "Знания современного мира", value: "297" }, + { label: "Зомби", value: "409" }, + { label: "Игра на выживание", value: "274" }, + { label: "Игривый протагонист", value: "717" }, + { label: "Игровая система рейтинга", value: "391" }, + { label: "Игровые элементы", value: "266" }, + { label: "Игрушки (18+)", value: "676" }, + { label: "Из грязи в князи", value: "416" }, + { label: "Из женщины в мужчину", value: "709" }, + { label: "Из мужчины в женщину", value: "715" }, + { label: "Из полного в худого", value: "767" }, + { label: "Из слабого в сильного", value: "202" }, + { label: "Извращенный главный герой", value: "434" }, + { label: "Изгои", value: "534" }, + { label: "Изменение расы", value: "664" }, + { label: "Изменения внешнего вида", value: "300" }, + { label: "Изменения личности", value: "219" }, + { label: "Изнасилование", value: "229" }, + { label: "Изображения жестокости", value: "355" }, + { label: "ИИ", value: "235" }, + { label: "Империи", value: "748" }, + { label: "Инвалидность", value: "684" }, + { label: "Индустриализация", value: "292" }, + { label: "Инженер", value: "163" }, + { label: "Инцест", value: "525" }, + { label: "Искусственный интеллект", value: "236" }, + { label: "Исследования", value: "670" }, + { label: "Историческая проза", value: "119" }, + { label: "Исторические приключения", value: "120" }, + { label: "Исторический детектив", value: "117" }, + { label: "Исторический любовный роман", value: "138" }, + { label: "Историческое фэнтези", value: "110" }, + { label: "Каннибализм", value: "456" }, + { label: "Карточные игры", value: "682" }, + { label: "Киберпанк", value: "141" }, + { label: "Киберспорт", value: "686" }, + { label: "Кланы", value: "796" }, + { label: "Класс безработного", value: "735" }, + { label: "Клоны", value: "447" }, + { label: "Клубы", value: "216" }, + { label: "Книги", value: "427" }, + { label: "Книги навыков", value: "400" }, + { label: "Книжный червь", value: "519" }, + { label: "Коварство", value: "230" }, + { label: "Коллеги", value: "704" }, + { label: "Колледж/Университет", value: "726" }, + { label: "Кома", value: "776" }, + { label: "Командная работа", value: "496" }, + { label: "Комедийный оттенок", value: "582" }, + { label: "Комплекс неполноценности", value: "550" }, + { label: "Комплекс семейных отношений", value: "223" }, + { label: "Конкуренция", value: "746" }, + { label: "Контроль разума/сознания", value: "357" }, + { label: "Копейщик", value: "425" }, + { label: "Королевская битва", value: "797" }, + { label: "Королевская власть", value: "178" }, + { label: "Королевства", value: "259" }, + { label: "Короткий любовный роман", value: "136" }, + { label: "Коррупция", value: "457" }, + { label: "Космическая фантастика", value: "146" }, + { label: "Космические войны", value: "697" }, + { label: "Красивый герой", value: "226" }, + { label: "Крафт", value: "377" }, + { label: "Кризис личности", value: "640" }, + { label: "Кругосветное путешествие", value: "353" }, + { label: "Кудере", value: "506" }, + { label: "Кузены", value: "718" }, + { label: "Кузнец", value: "518" }, + { label: "Кукловоды", value: "501" }, + { label: "Куклы/марионетки", value: "624" }, + { label: "Культивация", value: "241" }, + { label: "Куннилингус", value: "667" }, + { label: "Легенды", value: "500" }, + { label: "Легкая жизнь", value: "644" }, + { label: "Ленивый главный герой", value: "621" }, + { label: "Лидерство", value: "494" }, + { label: "Лоли", value: "213" }, + { label: "Лотерея", value: "477" }, + { label: "Любовное фэнтези", value: "135" }, + { label: "Любовный треугольник", value: "218" }, + { label: "Любовь детства", value: "560" }, + { label: "Любовь с первого взгляда", value: "737" }, + { label: "Магические надписи", value: "453" }, + { label: "Магические печати", value: "369" }, + { label: "Магические технологии", value: "440" }, + { label: "Магия", value: "165" }, + { label: "Магия призыва", value: "418" }, + { label: "Мазохистские персонажи", value: "688" }, + { label: "Манипулятивные персонажи", value: "249" }, + { label: "Мания", value: "212" }, + { label: "Мастер на все руки", value: "466" }, + { label: "Мастурбация", value: "788" }, + { label: "Махо-сёдзё", value: "556" }, + { label: "Медицинские знания", value: "507" }, + { label: "Медленная романтическая линия", value: "232" }, + { label: "Медленное развитие на старте", value: "694" }, + { label: "Межпространственные путешестви", value: "404" }, + { label: "Менеджмент", value: "294" }, + { label: "Мертвый главный герой", value: "761" }, + { label: "Месть", value: "209" }, + { label: "Метаморфы", value: "335" }, + { label: "Меч и магия", value: "180" }, + { label: "Мечник", value: "647" }, + { label: "Мечты", value: "738" }, + { label: "Милая история", value: "725" }, + { label: "Милое дитя", value: "637" }, + { label: "Милый главный герой", value: "714" }, + { label: "Мировое дерево", value: "463" }, + { label: "Мистика", value: "151" }, + { label: "Мистический ореол вокруг семьи", value: "483" }, + { label: "Мифические звери", value: "491" }, + { label: "Мифология", value: "530" }, + { label: "Младшие братья", value: "785" }, + { label: "Младшие сестры", value: "527" }, + { label: "ММОРПГ (ЛитРПГ)", value: "395" }, + { label: "Множество перемещенных людей", value: "549" }, + { label: "Множество реальностей", value: "370" }, + { label: "Множество реинкарнированных лю", value: "330" }, + { label: "Модели", value: "678" }, + { label: "Молчаливый персонаж", value: "721" }, + { label: "Монстры", value: "192" }, + { label: "Мужская гей-пара", value: "706" }, + { label: "Мужчина-яндере", value: "267" }, + { label: "Музыка", value: "635" }, + { label: "Музыкальные группы", value: "634" }, + { label: "Мутации", value: "693" }, + { label: "Мутированные существа", value: "405" }, + { label: "Навык кражи", value: "662" }, + { label: "Навязчивая любовь", value: "206" }, + { label: "Наемники", value: "412" }, + { label: "Назойливый возлюбленный", value: "561" }, + { label: "Наивный главный герой", value: "189" }, + { label: "Наркотики", value: "689" }, + { label: "Нарциссический главный герой", value: "532" }, + { label: "Насилие сексуального характера", value: "774" }, + { label: "Наследование", value: "452" }, + { label: "Научная фантастика", value: "144" }, + { label: "Национализм", value: "406" }, + { label: "Не блещущий внешне главный гер", value: "415" }, + { label: "Не родные братья и сестры", value: "526" }, + { label: "Небеса", value: "568" }, + { label: "Небесное испытание", value: "367" }, + { label: "Негуманоидный главный герой", value: "659" }, + { label: "Недоверчивый главный герой", value: "546" }, + { label: "Недооцененный главный герой", value: "258" }, + { label: "Недоразумения", value: "309" }, + { label: "Неизлечимая болезнь", value: "196" }, + { label: "Некромант", value: "397" }, + { label: "Нелинейная история", value: "269" }, + { label: "Ненавистный главный герой", value: "548" }, + { label: "Ненадежный рассказчик", value: "277" }, + { label: "Нерезиденты", value: "772" }, + { label: "Нерешительный главный герой", value: "744" }, + { label: "Несерьезный главный герой", value: "384" }, + { label: "Несколько временных линий", value: "576" }, + { label: "Несколько гг", value: "268" }, + { label: "Несколько главных героев", value: "537" }, + { label: "Несколько идентичностей", value: "652" }, + { label: "Несколько личностей", value: "536" }, + { label: "Нетораре", value: "732" }, + { label: "Нетори", value: "514" }, + { label: "Неудачливый главный герой", value: "618" }, + { label: "Ниндзя", value: "441" }, + { label: "Новелла", value: "103" }, + { label: "Обещание из детства", value: "742" }, + { label: "Обманщик", value: "485" }, + { label: "Обмен телами", value: "214" }, + { label: "Обнаженка", value: "490" }, + { label: "Обольщение", value: "731" }, + { label: "Оборотни", value: "661" }, + { label: "Обратный гарем", value: "351" }, + { label: "Общество монстров", value: "329" }, + { label: "Обязательство", value: "602" }, + { label: "Огнестрельное оружие", value: "291" }, + { label: "Ограниченное время жизни", value: "194" }, + { label: "Одержимость", value: "512" }, + { label: "Одинокий главный герой", value: "394" }, + { label: "Одиночество", value: "306" }, + { label: "Одиночное проживание", value: "313" }, + { label: "Околосмертные переживания", value: "759" }, + { label: "Оммёдзи", value: "597" }, + { label: "Омоложение", value: "338" }, + { label: "Организованная преступность", value: "540" }, + { label: "Оргия", value: "775" }, + { label: "Орки", value: "331" }, + { label: "Освоение навыков", value: "336" }, + { label: "Основано на аниме", value: "605" }, + { label: "Основано на видео игре", value: "720" }, + { label: "Основано на визуальной новелле", value: "793" }, + { label: "Основано на песне", value: "700" }, + { label: "Основано на фильме", value: "604" }, + { label: "Осторожный главный герой", value: "240" }, + { label: "Отаку", value: "571" }, + { label: "Открытый космос", value: "264" }, + { label: "Отношения в сети", value: "727" }, + { label: "Отношения между людьми и нелюд", value: "311" }, + { label: "Отношения на расстоянии", value: "791" }, + { label: "Отношения Сенпай-Коухай", value: "572" }, + { label: "Отношения ученика и учителя", value: "515" }, + { label: "Отношения учитель-ученик", value: "429" }, + { label: "Отношения хозяин-слуга", value: "312" }, + { label: "Отомэ игра", value: "733" }, + { label: "Отсутствие здравого смысла", value: "645" }, + { label: "Отсутствие родителей", value: "625" }, + { label: "Офисный роман", value: "707" }, + { label: "Официанты", value: "703" }, + { label: "Охотники", value: "378" }, + { label: "Очаровательный главный герой", value: "687" }, + { label: "Падшее дворянство", value: "655" }, + { label: "Падшие ангелы", value: "565" }, + { label: "Пайзури", value: "665" }, + { label: "Паразиты", value: "591" }, + { label: "Параллельные миры", value: "207" }, + { label: "Парк", value: "265" }, + { label: "Парк развлечений", value: "632" }, + { label: "Пародия", value: "407" }, + { label: "Певцы/Певицы", value: "739" }, + { label: "Первая любовь", value: "729" }, + { label: "Первоисточник новеллы — манга", value: "611" }, + { label: "Первый раз", value: "787" }, + { label: "Перемещение в игровой мир", value: "588" }, + { label: "Перемещение в иной мир", value: "750" }, + { label: "Перерождение в ином мире", value: "751" }, + { label: "Переселение души/трансмиграция", value: "257" }, + { label: "Персонаж использует щит", value: "666" }, + { label: "Петля времени", value: "200" }, + { label: "Пираты", value: "771" }, + { label: "Писатели", value: "482" }, + { label: "Питомцы", value: "349" }, + { label: "Племенное общество", value: "381" }, + { label: "Повелитель демонов", value: "283" }, + { label: "Подземелья", value: "322" }, + { label: "Подростковая проза", value: "114" }, + { label: "Пожелания", value: "278" }, + { label: "Познание Дао", value: "443" }, + { label: "Покинутое дитя", value: "590" }, + { label: "Полигамия", value: "386" }, + { label: "Политика", value: "170" }, + { label: "Политический роман", value: "133" }, + { label: "Полиция", value: "764" }, + { label: "Полулюди", value: "420" }, + { label: "Популярный любовный интерес", value: "342" }, + { label: "Постапокалипсис", value: "145" }, + { label: "Постапокалиптика", value: "184" }, + { label: "Потерянные цивилизации", value: "749" }, + { label: "Похищения людей", value: "723" }, + { label: "Поэзия", value: "111" }, + { label: "Правонарушители", value: "713" }, + { label: "Прагматичный главный герой", value: "592" }, + { label: "Преданный любовный интерес", value: "225" }, + { label: "Предательство", value: "222" }, + { label: "Предвидение", value: "177" }, + { label: "Прекрасная героиня", value: "158" }, + { label: "Преступники", value: "736" }, + { label: "Преступность", value: "204" }, + { label: "Призванный герой", value: "262" }, + { label: "Призраки", value: "176" }, + { label: "Принуждение к отношениям", value: "643" }, + { label: "Принцессы", value: "795" }, + { label: "Притворная пара", value: "641" }, + { label: "Причудливые персонажи", value: "387" }, + { label: "Пришельцы/инопланетяне", value: "197" }, + { label: "Программист", value: "691" }, + { label: "Проклятия", value: "174" }, + { label: "Промывание мозгов", value: "578" }, + { label: "Пропуск времени", value: "256" }, + { label: "Пророчества", value: "499" }, + { label: "Проститутки", value: "786" }, + { label: "Прошлое играет большую роль", value: "320" }, + { label: "Прыжки между мирами", value: "741" }, + { label: "Психические силы", value: "359" }, + { label: "Психопаты", value: "270" }, + { label: "Публицистика", value: "124" }, + { label: "Путешествие во времени", value: "201" }, + { label: "Пытка", value: "280" }, + { label: "Рабы", value: "778" }, + { label: "Развитие личности", value: "125" }, + { label: "Развод", value: "758" }, + { label: "Разумные предметы", value: "286" }, + { label: "Расизм", value: "408" }, + { label: "Рассказ", value: "185" }, + { label: "Расторжения помолвки", value: "343" }, + { label: "Расы зооморфов", value: "315" }, + { label: "Реализм", value: "246" }, + { label: "Ревность", value: "730" }, + { label: "Редакторы", value: "705" }, + { label: "Реинкарнация", value: "372" }, + { label: "Реинкарнация в монстра", value: "310" }, + { label: "Реинкарнация в объект", value: "711" }, + { label: "Религии", value: "616" }, + { label: "Репортеры", value: "781" }, + { label: "Ресторан", value: "680" }, + { label: "Решительный главный герой", value: "242" }, + { label: "Робкий главный герой", value: "763" }, + { label: "Родитель одиночка", value: "708" }, + { label: "Родительский комплекс", value: "587" }, + { label: "Родословная", value: "239" }, + { label: "Романтическая эротика", value: "132" }, + { label: "Романтический подсюжет", value: "271" }, + { label: "Рост персонажа", value: "215" }, + { label: "Рыцари", value: "260" }, + { label: "Садистские персонажи", value: "674" }, + { label: "Самоотверженный главный герой", value: "747" }, + { label: "Самурай", value: "677" }, + { label: "Сборник коротких историй", value: "520" }, + { label: "Связанные сюжетные линии", value: "535" }, + { label: "Святые", value: "752" }, + { label: "Священники", value: "413" }, + { label: "Сдержанный главный герой", value: "762" }, + { label: "Секретные организации", value: "417" }, + { label: "Секреты", value: "626" }, + { label: "Секс рабы", value: "779" }, + { label: "Семейный конфликт", value: "757" }, + { label: "Семь добродетелей", value: "334" }, + { label: "Семь смертных грехов", value: "253" }, + { label: "Семья", value: "347" }, + { label: "Сёнэн-ай подсюжет", value: "690" }, + { label: "Серийные убийцы", value: "557" }, + { label: "Сестринский комплекс", value: "558" }, + { label: "Сила духа", value: "373" }, + { label: "Сила, требующая платы за польз", value: "579" }, + { label: "Сильная пара", value: "228" }, + { label: "Сильный в сильнейшего", value: "442" }, + { label: "Сильный любовный интерес", value: "273" }, + { label: "Синдром восьмиклассника", value: "211" }, + { label: "Сироты", value: "319" }, + { label: "Система уровней", value: "305" }, + { label: "Системный администратор", value: "538" }, + { label: "Сказка", value: "126" }, + { label: "Скрытие истинной личности", value: "451" }, + { label: "Скрытие истинных способностей", value: "348" }, + { label: "Скрытный главный герой", value: "252" }, + { label: "Скрытые способности", value: "247" }, + { label: "Скульпторы", value: "448" }, + { label: "Слабо выраженная романтическая", value: "318" }, + { label: "Слабый главный герой", value: "298" }, + { label: "Слепой главный герой", value: "794" }, + { label: "Слуги", value: "333" }, + { label: "Слэш", value: "131" }, + { label: "Смерть", value: "175" }, + { label: "Смерть близких", value: "444" }, + { label: "Собственнические персонажи", value: "227" }, + { label: "Современная проза", value: "150" }, + { label: "Современность", value: "167" }, + { label: "Современный любовный роман", value: "137" }, + { label: "Сожительство", value: "544" }, + { label: "Создание армии", value: "287" }, + { label: "Создание артефактов", value: "382" }, + { label: "Создание клана", value: "513" }, + { label: "Создание королевства", value: "293" }, + { label: "Создание навыков", value: "337" }, + { label: "Создание секты", value: "469" }, + { label: "Солдаты/военные", value: "193" }, + { label: "Сон", value: "622" }, + { label: "Состоятельные персонажи", value: "190" }, + { label: "Социальная иерархия по силе", value: "255" }, + { label: "Социальная фантастика", value: "148" }, + { label: "Социальные изгои", value: "542" }, + { label: "Спасение мира", value: "638" }, + { label: "Специальные способности", value: "179" }, + { label: "Спокойный главный герой", value: "160" }, + { label: "Справедливый главный герой", value: "719" }, + { label: "Средневековье", value: "296" }, + { label: "Ссорящаяся пара", value: "383" }, + { label: "Сталкеры", value: "710" }, + { label: "Старение", value: "299" }, + { label: "Стимпанк", value: "139" }, + { label: "Стоические персонажи", value: "509" }, + { label: "Стокгольмский синдром", value: "675" }, + { label: "Стратег", value: "495" }, + { label: "Стратегические битвы", value: "272" }, + { label: "Стратегия", value: "798" }, + { label: "Стрелки", value: "522" }, + { label: "Стрельба из лука", value: "461" }, + { label: "Студенческий совет", value: "551" }, + { label: "Судьба", value: "364" }, + { label: "Суккубы", value: "545" }, + { label: "Супер герои", value: "799" }, + { label: "Суровая подготовка", value: "356" }, + { label: "Таинственная болезнь", value: "195" }, + { label: "Таинственное прошлое", value: "358" }, + { label: "Тайная личность", value: "399" }, + { label: "Тайные отношения", value: "768" }, + { label: "Танцоры", value: "782" }, + { label: "Телохранители", value: "516" }, + { label: "Темное фэнтези", value: "106" }, + { label: "Тентакли", value: "712" }, + { label: "Террористы", value: "574" }, + { label: "Технологический разрыв", value: "658" }, + { label: "Тихие персонажи", value: "600" }, + { label: "Толстый главный герой", value: "389" }, + { label: "Торговцы", value: "489" }, + { label: "Травля/буллинг", value: "210" }, + { label: "Травник", value: "724" }, + { label: "Трагическое прошлое", value: "276" }, + { label: "Трансплантация воспоминаний", value: "449" }, + { label: "Триллер", value: "134" }, + { label: "Трудолюбивый главный герой", value: "164" }, + { label: "Тюрьма", value: "541" }, + { label: "Убийства", value: "205" }, + { label: "Убийцы", value: "345" }, + { label: "Убийцы драконов", value: "646" }, + { label: "Уверенный главный герой", value: "363" }, + { label: "Удачливый главный герой", value: "478" }, + { label: "Ужасы", value: "112" }, + { label: "Укротитель монстров", value: "422" }, + { label: "Умения из прошлой жизни", value: "371" }, + { label: "Умная пара", value: "554" }, + { label: "Умный главный герой", value: "161" }, + { label: "Уникальная техника Культивации", value: "350" }, + { label: "Уникальное оружие", value: "426" }, + { label: "Управление бизнесом", value: "403" }, + { label: "Управление временем", value: "279" }, + { label: "Управление кровью", value: "753" }, + { label: "Упрямый главный герой", value: "695" }, + { label: "Уродливый главный герой", value: "766" }, + { label: "Ускоренный рост", value: "390" }, + { label: "Усыновленные дети", value: "543" }, + { label: "Усыновленный главный герой", value: "486" }, + { label: "Уход за детьми", value: "474" }, + { label: "Учителя", value: "431" }, + { label: "Фамильяры", value: "596" }, + { label: "Фанатизм", value: "650" }, + { label: "Фантастические существа", value: "410" }, + { label: "Фантастический детектив", value: "115" }, + { label: "Фанфик", value: "113" }, + { label: "Фанфикшн", value: "464" }, + { label: "Фармацевт", value: "728" }, + { label: "Фарминг", value: "458" }, + { label: "Феи", value: "316" }, + { label: "Фелляция", value: "631" }, + { label: "Фемслэш", value: "127" }, + { label: "Фениксы", value: "454" }, + { label: "Фетиш груди", value: "559" }, + { label: "Философия", value: "208" }, + { label: "Фильмы", value: "479" }, + { label: "Флэшбэки", value: "585" }, + { label: "Фобии", value: "220" }, + { label: "Фольклор", value: "529" }, + { label: "Футанари", value: "619" }, + { label: "Футуристический сеттинг", value: "460" }, + { label: "Фэнтези мир", value: "244" }, + { label: "Хакеры", value: "475" }, + { label: "Харизматический герой", value: "467" }, + { label: "Хикикомори/Затворники", value: "524" }, + { label: "Хитроумный главный герой", value: "224" }, + { label: "Хозяин подземелий", value: "608" }, + { label: "Холодный главный герой", value: "354" }, + { label: "Хорошие отношения с семьей", value: "566" }, + { label: "Хранители могил", value: "191" }, + { label: "Целители", value: "465" }, + { label: "Цзянши", value: "740" }, + { label: "Цундэрэ", value: "510" }, + { label: "Чаты", value: "629" }, + { label: "Человеческое оружие", value: "580" }, + { label: "Честный главный герой", value: "341" }, + { label: "Читы", value: "339" }, + { label: "Шантаж", value: "584" }, + { label: "Шеф-повар", value: "340" }, + { label: "Шикигами", value: "598" }, + { label: "Школа только для девочек", value: "668" }, + { label: "Шота", value: "573" }, + { label: "Шоу-бизнес", value: "481" }, + { label: "Шпионский детектив", value: "118" }, + { label: "Шпионы", value: "614" }, + { label: "Эволюция", value: "304" }, + { label: "Эгоистичный главный герой", value: "594" }, + { label: "Эйдетическая память", value: "468" }, + { label: "Экзорсизм", value: "564" }, + { label: "Экономика", value: "553" }, + { label: "Эксгибиционизм", value: "673" }, + { label: "Эксперименты с людьми", value: "248" }, + { label: "Элементальная магия", value: "471" }, + { label: "Эльфы", value: "284" }, + { label: "Эмоционально слабый гг", value: "770" }, + { label: "Эпизодический", value: "649" }, + { label: "Эпическое фэнтези", value: "109" }, + { label: "Эротическая фантастика", value: "129" }, + { label: "Эротический фанфик", value: "128" }, + { label: "Эротическое фэнтези", value: "130" }, + { label: "Юмористическая фантастика", value: "143" }, + { label: "Юмористическое фэнтези", value: "108" }, + { label: "Юный любовный интерес", value: "511" }, + { label: "Яды", value: "484" }, + { label: "Языкастые персонажи", value: "480" }, + { label: "Языковой барьер", value: "182" }, + { label: "Яндере", value: "314" }, + { label: "Японские силы самообороны", value: "610" }, + { label: "Ярко выраженная романтика", value: "365" }, + { label: "R-15 Японское возрастное огр.", value: "332" }, + { label: "R-18", value: "424" }, + ], + type: FilterTypes.ExcludableCheckboxGroup, + }, + types: { + label: "Типы:", + value: [], + options: [ + { label: "Авторское", value: "1" }, + { label: "Другое", value: "7" }, + { label: "Запад", value: "5" }, + { label: "Китай", value: "4" }, + { label: "Корея", value: "3" }, + { label: "Фанфики", value: "6" }, + { label: "Япония", value: "2" }, + ], + type: FilterTypes.CheckboxGroup, + }, + status: { + label: "Статус проекта:", + value: [], + options: [ + { label: "Анонс", value: "4" }, + { label: "Закончен", value: "0" }, + { label: "Заморожен", value: "2" }, + { label: "Лицензировано", value: "5" }, + { label: "Нет переводчика", value: "3" }, + { label: "Продолжается", value: "1" }, + ], + type: FilterTypes.CheckboxGroup, + }, + age_limit: { + label: "Возрастной рейтинг:", + value: [], + options: [ + { label: "16+", value: "1" }, + { label: "18+", value: "2" }, + { label: "Для всех", value: "0" }, + ], + type: FilterTypes.CheckboxGroup, + }, + } satisfies Filters; +} + +export default new ReN(); + +interface responseNovels { + id: number; + secondary_name: string; + main_name: string; + dir: string; + is_licensed: boolean; + issue_year: number; + avg_rating: string; + admin_rating: string; + type: string; + total_views: number; + total_votes: number; + cover_high: string; + cover_mid: string; + cover_low: string; + is_yaoi: boolean; + is_erotic: boolean; + bookmark_type?: null; + genres?: ItemEntity[] | null; + img: Img; + categories?: ItemEntity[] | null; + rus_name?: string; + en_name?: string; +} + +interface Img { + high?: string; + mid?: string; + low: string; +} + +interface responseNovel { + id: number; + img: Img; + secondary_name: string; + main_name: string; + another_name: string; + dir: string; + description: string; + issue_year: number; + avg_rating: string; + admin_rating: string; + count_rating: number; + age_limit: number; + status: ItemEntity; + count_bookmarks: number; + total_votes: number; + total_views: number; + type: ItemEntity; + genres?: ItemEntity[] | null; + categories?: ItemEntity[] | null; + publishers?: PublishersEntity[] | null; + bookmark_type?: null; + branches?: BranchesEntity[] | null; + count_chapters: number; + first_chapter: FirstChapter; + continue_reading?: null; + is_licensed: boolean; + newlate_id?: null; + newlate_title?: null; + related?: null; + uploaded: number; + can_post_comments: boolean; + adaptation: Adaptation | null; +} + +interface Adaptation { + main_name: string; + secondary_name: string; + dir: string; + img: string; +} + +interface ItemEntity { + id: number; + name: string; +} +interface PublishersEntity { + id: number; + name: string; + img: string; + dir: string; + tagline: string; + type: string; +} +interface BranchesEntity { + id: number; + img: string; + publishers?: PublishersEntity[] | null; + subscribed: boolean; + total_votes: number; + count_chapters: number; +} +interface FirstChapter { + id: number; + tome: number; + chapter: string; +} + +interface responseСhapters { + id: number; + rated?: null; + viewed?: null; + is_bought?: boolean | null; + publishers?: PublishersEntity[] | null; + tome: number; + index: number; + chapter: string; + name: string; + price?: null | number; + score: number; + pub_date?: null; + upload_date: string; + is_paid: boolean; +} + +interface responseСhapter { + id: number; + chapter: string; + name: string; + content: string; + score: number; + upload_date: string; + is_paid: boolean; + title_id: number; + volume_id: number; + branch_id: number; + price?: null; + pub_date?: null; + index: number; + publishers?: PublishersEntity[] | null; + tome: number; +} diff --git a/plugins/spanish/tunovelaligera.ts b/plugins/spanish/tunovelaligera.ts index 97e37b8..48f2508 100644 --- a/plugins/spanish/tunovelaligera.ts +++ b/plugins/spanish/tunovelaligera.ts @@ -1,371 +1,286 @@ -import { load as parseHTML } from "cheerio"; -import { fetchApi, fetchFile } from "@libs/fetch"; -import { FilterTypes, Filters } from "@libs/filterInputs"; -import { Plugin } from "@typings/plugin"; -import { defaultCover } from "@libs/defaultCover"; -import { NovelStatus } from "@libs/novelStatus"; - -class TuNovelaLigera implements Plugin.PluginBase { - id = "tunovelaligera"; - name = "TuNovelaLigera"; - icon = "src/es/tunovelaligera/icon.png"; - site = "https://tunovelaligera.com/"; - version = "1.0.0"; - - - - async popularNovels( - pageNo: number, - { filters }: Plugin.PopularNovelsOptions - ): Promise { - let link = `${this.site}`; - - link += filters.genres.value ? `genero/` + filters.genres.value : "novelas"; - - link += `/page/${pageNo}`; - - link += filters.order.value; - - const headers = new Headers(); - const result = await fetchApi(link, { headers }); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - - loadedCheerio(".page-item-detail").each((i, el) => { - const novelName = loadedCheerio(el).find(".h5 > a").text(); - const novelCover = loadedCheerio(el).find("img").attr("src"); - const novelUrl = loadedCheerio(el).find(".h5 > a").attr("href"); - - if (!novelUrl) return; - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - - return novels; - } - - async parseNovelAndChapters(novelUrl: string): Promise { - const url = novelUrl; - const headers = new Headers(); - const result = await fetchApi(url, { headers }); - const body = await result.text(); - - let loadedCheerio = parseHTML(body); - - const novel: Plugin.SourceNovel = { - url, - chapters: [], - }; - - loadedCheerio(".manga-title-badges").remove(); - - novel.name = loadedCheerio(".post-title > h1").text().trim(); - - let novelCover = loadedCheerio(".summary_image > a > img"); - - novel.cover = - novelCover.attr("data-src") || - novelCover.attr("src") || - novelCover.attr("data-cfsrc") || - defaultCover; - - loadedCheerio(".post-content_item").each(function () { - const detailName = loadedCheerio(this) - .find(".summary-heading > h5") - .text() - .trim(); - const detail = loadedCheerio(this) - .find(".summary-content") - .text() - .trim(); - - switch (detailName) { - case "Generos": - novel.genres = detail.replace(/, /g, ","); - break; - case "Autores": - novel.author = detail; - break; - case "Estado": - novel.status = - detail.includes("OnGoing") || - detail.includes("Updating") - ? NovelStatus.Ongoing - : NovelStatus.Completed; - break; - } - }); - - novel.summary = loadedCheerio("div.summary__content > p").text().trim(); - - let chapter: Plugin.ChapterItem[] = []; - - const delay = (ms: number) => new Promise((res) => setTimeout(res, ms)); - let lastPage = 1; - lastPage = +loadedCheerio(".lcp_paginator li:last").prev().text(); - - const getChapters = async () => { - const n = url.split("/"); - const novelName = n[4]; - const formData = new FormData(); - formData.append("action", "madara_load_more"); - formData.append("page", "0"); - formData.append("template", "html/loop/content"); - formData.append("vars[category_name]", novelName); - formData.append("vars[posts_per_page]", "10000"); - - const result = await fetchApi( - `${this.site}wp-admin/admin-ajax.php`, - { - method: "POST", - body: formData, - headers, - } - ); - const text = await result.text(); - - loadedCheerio = parseHTML(text); - - loadedCheerio(".heading").each((i, el) => { - const chapterName = loadedCheerio(el) - .text() - .replace(/[\t\n]/g, "") - .trim(); - const releaseDate = null; - const chapterUrl = - loadedCheerio(el).find("a").attr("href") || ""; - - chapter.push({ - name: chapterName, - url: chapterUrl, - releaseTime: releaseDate, - }); - }); - return chapter.reverse(); - }; - - const getPageChapters = async () => { - for (let i = 1; i <= lastPage; i++) { - const chaptersUrl = `${novelUrl}?lcp_page0=${i}`; - const result = await fetchApi(chaptersUrl, { headers }); - const chaptersHTML = await result.text(); - - let chapterCheerio = parseHTML(chaptersHTML); - - chapterCheerio(".lcp_catlist li").each((i, el) => { - const chapterName = chapterCheerio(el) - .find("a") - .text() - .replace(/[\t\n]/g, "") - .trim(); - - const releaseDate = chapterCheerio(el) - .find("span") - .text() - .trim(); - - const chapterUrl = - chapterCheerio(el).find("a").attr("href") || ""; - - chapter.push({ - name: chapterName, - releaseTime: releaseDate, - url: chapterUrl, - }); - }); - await delay(1000); - } - return chapter.reverse(); - }; - - novel.chapters = await getChapters(); - - if (!novel.chapters.length) { - await delay(1000); - novel.chapters = await getPageChapters(); - } - - return novel; - } - - async parseChapter(chapterUrl: string): Promise { - const headers = new Headers(); - const result = await fetchApi(chapterUrl); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - loadedCheerio("#hola_siguiente").next().find("div").remove(); - const chapterText = - loadedCheerio("#hola_siguiente").next().html() || ""; - - return chapterText; - } - - async searchNovels( - searchTerm: string, - pageNo?: number | undefined - ): Promise { - const url = `${this.site}?s=${searchTerm}&post_type=wp-manga`; - - const result = await fetchApi(url); - const body = await result.text(); - - const loadedCheerio = parseHTML(body); - - const novels: Plugin.NovelItem[] = []; - - loadedCheerio(".c-tabs-item__content").each((i, el) => { - const novelName = loadedCheerio(el).find(".h4 > a").text(); - const novelCover = loadedCheerio(el).find("img").attr("src"); - const novelUrl = loadedCheerio(el).find(".h4 > a").attr("href"); - if (!novelUrl) return; - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - }); - - return novels; - } - - async fetchImage(url: string): Promise { - return await fetchFile(url); - } - - filters = { - order: { - value: "?m_orderby=rating", - label: "Ordenado por", - options: [ - { label: "Lo mas reciente", value: "?m_orderby=latest" }, - - { label: "A-Z", value: "?m_orderby=alphabet" }, - - { label: "Clasificación", value: "?m_orderby=rating" }, - - { label: "Trending", value: "?m_orderby=trending" }, - - { label: "Mas visto", value: "?m_orderby=views" }, - - { label: "Nuevo", value: "?m_orderby=new-manga" }, - ], - type: FilterTypes.Picker, - }, - genres: { - value: "", - label: "Generos", - options: [ - { label: "None", value: "" }, - { label: "Acción", value: "accion" }, - - { label: "Adulto", value: "adulto" }, - - { label: "Artes Marciales", value: "artes-marciales" }, - - { label: "Aventura", value: "aventura" }, - - { label: "Ciencia Ficción", value: "ciencia-ficcion" }, - - { label: "Comedia", value: "comedia" }, - - { label: "Deportes", value: "deportes" }, - - { label: "Drama", value: "drama" }, - - { label: "Eastern Fantasy", value: "eastern-fantasy" }, - - { label: "Ecchi", value: "ecchi" }, - - { label: "FanFiction", value: "fan-fiction" }, - - { label: "Fantasía", value: "fantasia" }, - - { label: "Fantasía oriental", value: "fantasia-oriental" }, - - { label: "Ficción Romántica", value: "ficcion-romantica" }, - - { label: "Gender Bender", value: "gender-bender" }, - - { label: "Harem", value: "harem" }, - - { label: "Histórico", value: "historico" }, - - { label: "Horror", value: "horror" }, - - { label: "Josei", value: "josei" }, - - { label: "Maduro", value: "maduro" }, - - { label: "Mecha", value: "mecha" }, - - { label: "Misterio", value: "misterio" }, - - { label: "Novela China", value: "novela-china" }, - - { label: "Novela FanFiction", value: "novela-fanfiction" }, - - { label: "Novela Japonesa", value: "novela-japonesa" }, - - { label: "Novela Koreana", value: "novela-koreana" }, - - { label: "Novela ligera", value: "novela-ligera" }, - - { label: "Novela original", value: "novela-original" }, - - { label: "Novela Web", value: "web-novel" }, - - { label: "Psicológico", value: "psicologico" }, - - { label: "Realismo Mágico", value: "realismo-magico" }, - - { label: "Recuento de vida", value: "recuento-de-vida" }, - - { label: "Romance", value: "romance" }, - - { - label: "Romance contemporáneo", - value: "romance-contemporaneo", - }, - - { label: "Romance Moderno", value: "romance-moderno" }, - - { label: "Seinen", value: "seinen" }, - - { label: "Shoujo", value: "shoujo" }, - - { label: "Shounen", value: "shounen" }, - - { label: "Sobrenatural", value: "sobrenatural" }, - - { label: "Tragedia", value: "tragedia" }, - - { label: "Vampiros", value: "vampiros" }, - - { label: "Vida Escolar", value: "vida-escolar" }, - - { label: "Western Fantasy", value: "western-fantasy" }, - - { label: "Wuxia", value: "wuxia" }, - - { label: "Xianxia", value: "xianxia" }, - - { label: "Xuanhuan", value: "xuanhuan" }, - - { label: "Yaoi", value: "yaoi" }, - ], - type: FilterTypes.Picker, - }, - } satisfies Filters; -} - -export default new TuNovelaLigera(); +import { load as parseHTML } from "cheerio"; +import { fetchApi, fetchFile } from "@libs/fetch"; +import { FilterTypes, Filters } from "@libs/filterInputs"; +import { Plugin } from "@typings/plugin"; +import { defaultCover } from "@libs/defaultCover"; +import { NovelStatus } from "@libs/novelStatus"; + +class TuNovelaLigera implements Plugin.PluginBase { + id = "tunovelaligera"; + name = "TuNovelaLigera"; + icon = "src/es/tunovelaligera/icon.png"; + site = "https://tunovelaligera.com"; + version = "1.0.0"; + + async popularNovels( + pageNo: number, + { + showLatestNovels, + filters, + }: Plugin.PopularNovelsOptions, + ): Promise { + let link = this.site + + link += filters?.genres?.value ? "/genero" + filters.genres.value : "/novelas"; + link += `/page/${pageNo}?m_orderby=`; + link += (showLatestNovels ? "latest" : filters?.order?.value || "rating"); + + const result = await fetchApi(link).then((res) => res.text()); + const loadedCheerio = parseHTML(result); + + const novels: Plugin.NovelItem[] = []; + + loadedCheerio(".page-item-detail").each((i, el) => { + const name = loadedCheerio(el).find(".h5 > a").text(); + const cover = loadedCheerio(el).find("img").attr("src"); + const url = loadedCheerio(el).find(".h5 > a").attr("href"); + if (!url) return; + + novels.push({ name, cover, url }); + }); + + return novels; + } + + async parseNovelAndChapters(novelUrl: string): Promise { + const result = await fetchApi(novelUrl); + const body = await result.text(); + + let loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { + url: novelUrl, + chapters: [], + }; + + loadedCheerio(".manga-title-badges").remove(); + + novel.name = loadedCheerio(".post-title > h1").text().trim(); + + let novelCover = loadedCheerio(".summary_image > a > img"); + + novel.cover = + novelCover.attr("data-src") || + novelCover.attr("src") || + novelCover.attr("data-cfsrc") || + defaultCover; + + loadedCheerio(".post-content_item").each(function () { + const detailName = loadedCheerio(this) + .find(".summary-heading > h5") + .text() + .trim(); + const detail = loadedCheerio(this).find(".summary-content").text().trim(); + + switch (detailName) { + case "Género(s)": + novel.genres = detail.replace(/, /g, ","); + break; + case "Autor(es)": + novel.author = detail; + break; + case "Estado": + novel.status = + detail.includes("OnGoing") || detail.includes("Updating") + ? NovelStatus.Ongoing + : NovelStatus.Completed; + break; + } + }); + + novel.summary = loadedCheerio("div.summary__content > p").text().trim(); + + let chapter: Plugin.ChapterItem[] = []; + + const delay = (ms: number) => new Promise((res) => setTimeout(res, ms)); + let lastPage = 1; + lastPage = +loadedCheerio(".lcp_paginator li:last").prev().text(); + + const getChapters = async () => { + const n = novelUrl.split("/"); + const novelName = n[4]; + const formData = new FormData(); + formData.append("action", "madara_load_more"); + formData.append("page", "0"); + formData.append("template", "html/loop/content"); + formData.append("vars[category_name]", novelName); + formData.append("vars[posts_per_page]", "10000"); + + const result = await fetchApi(this.site + '/wp-admin/admin-ajax.php', { + method: "POST", + body: formData, + }); + const text = await result.text(); + + loadedCheerio = parseHTML(text); + + loadedCheerio(".heading").each((i, el) => { + const chapterName = loadedCheerio(el) + .text() + .replace(/[\t\n]/g, "") + .trim(); + const releaseDate = null; + const chapterUrl = loadedCheerio(el).find("a").attr("href") || ""; + + chapter.push({ + name: chapterName, + url: chapterUrl, + releaseTime: releaseDate, + }); + }); + return chapter.reverse(); + }; + + const getPageChapters = async () => { + for (let i = 1; i <= lastPage; i++) { + const chaptersUrl = `${novelUrl}?lcp_page0=${i}`; + const result = await fetchApi(chaptersUrl); + const chaptersHTML = await result.text(); + + let chapterCheerio = parseHTML(chaptersHTML); + + chapterCheerio("#lcp_instance_0 li").each((i, el) => { + const chapterName = chapterCheerio(el) + .find("a") + .text() + .replace(/[\t\n]/g, "") + .trim(); + + const releaseDate = chapterCheerio(el).find("span").text().trim(); + + const chapterUrl = chapterCheerio(el).find("a").attr("href") || ""; + + chapter.push({ + name: chapterName, + releaseTime: releaseDate, + url: chapterUrl, + }); + }); + await delay(1000); + } + return chapter.reverse(); + }; + + novel.chapters = await getChapters(); + + if (!novel.chapters.length) { + await delay(1000); + novel.chapters = await getPageChapters(); + } + + return novel; + } + + async parseChapter(chapterUrl: string): Promise { + const result = await fetchApi(chapterUrl); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + + loadedCheerio("#hola_siguiente").next().find("div").remove(); + const chapterText = loadedCheerio("#hola_siguiente").next().html() || ""; + + return chapterText; + } + + async searchNovels( + searchTerm: string, + ): Promise { + const url = `${this.site}/?s=${searchTerm}&post_type=wp-manga`; + + const result = await fetchApi(url); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + + const novels: Plugin.NovelItem[] = []; + + loadedCheerio(".c-tabs-item__content").each((i, el) => { + const name = loadedCheerio(el).find(".h4 > a").text(); + const cover = loadedCheerio(el).find("img").attr("src"); + const url = loadedCheerio(el).find(".h4 > a").attr("href"); + if (!url) return; + + novels.push({ name, cover, url }); + }); + + return novels; + } + + async fetchImage(url: string): Promise { + return await fetchFile(url); + } + + filters = { + order: { + value: "rating", + label: "Ordenado por", + options: [ + { label: "Lo mas reciente", value: "latest" }, + { label: "A-Z", value: "alphabet" }, + { label: "Clasificación", value: "rating" }, + { label: "Trending", value: "trending" }, + { label: "Mas visto", value: "views" }, + { label: "Nuevo", value: "new-manga" }, + ], + type: FilterTypes.Picker, + }, + genres: { + value: "", + label: "Generos", + options: [ + { label: "None", value: "" }, + { label: "Acción", value: "accion" }, + { label: "Adulto", value: "adulto" }, + { label: "Artes Marciales", value: "artes-marciales" }, + { label: "Aventura", value: "aventura" }, + { label: "Ciencia Ficción", value: "ciencia-ficcion" }, + { label: "Comedia", value: "comedia" }, + { label: "Deportes", value: "deportes" }, + { label: "Drama", value: "drama" }, + { label: "Eastern Fantasy", value: "eastern-fantasy" }, + { label: "Ecchi", value: "ecchi" }, + { label: "FanFiction", value: "fan-fiction" }, + { label: "Fantasía", value: "fantasia" }, + { label: "Fantasía oriental", value: "fantasia-oriental" }, + { label: "Ficción Romántica", value: "ficcion-romantica" }, + { label: "Gender Bender", value: "gender-bender" }, + { label: "Harem", value: "harem" }, + { label: "Histórico", value: "historico" }, + { label: "Horror", value: "horror" }, + { label: "Josei", value: "josei" }, + { label: "Maduro", value: "maduro" }, + { label: "Mecha", value: "mecha" }, + { label: "Misterio", value: "misterio" }, + { label: "Novela China", value: "novela-china" }, + { label: "Novela FanFiction", value: "novela-fanfiction" }, + { label: "Novela Japonesa", value: "novela-japonesa" }, + { label: "Novela Koreana", value: "novela-koreana" }, + { label: "Novela ligera", value: "novela-ligera" }, + { label: "Novela original", value: "novela-original" }, + { label: "Novela Web", value: "web-novel" }, + { label: "Psicológico", value: "psicologico" }, + { label: "Realismo Mágico", value: "realismo-magico" }, + { label: "Recuento de vida", value: "recuento-de-vida" }, + { label: "Romance", value: "romance" }, + { label: "Romance contemporáneo", value: "romance-contemporaneo" }, + { label: "Romance Moderno", value: "romance-moderno" }, + { label: "Seinen", value: "seinen" }, + { label: "Shoujo", value: "shoujo" }, + { label: "Shounen", value: "shounen" }, + { label: "Sobrenatural", value: "sobrenatural" }, + { label: "Tragedia", value: "tragedia" }, + { label: "Vampiros", value: "vampiros" }, + { label: "Vida Escolar", value: "vida-escolar" }, + { label: "Western Fantasy", value: "western-fantasy" }, + { label: "Wuxia", value: "wuxia" }, + { label: "Xianxia", value: "xianxia" }, + { label: "Xuanhuan", value: "xuanhuan" }, + { label: "Yaoi", value: "yaoi" }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} + +export default new TuNovelaLigera(); diff --git a/scripts/multisrc/ifreedom/template.ts b/scripts/multisrc/ifreedom/template.ts index dabf415..5a13658 100644 --- a/scripts/multisrc/ifreedom/template.ts +++ b/scripts/multisrc/ifreedom/template.ts @@ -22,7 +22,7 @@ class IfreedomPlugin implements Plugin.PluginBase { constructor(metadata: IfreedomMetadata) { this.id = metadata.id; - this.name = metadata.sourceName + "[ifreedom]"; + this.name = metadata.sourceName; this.icon = `multisrc/ifreedom/icons/${metadata.id}.png`; this.site = metadata.sourceSite; this.version = "1.0.0"; @@ -31,20 +31,17 @@ class IfreedomPlugin implements Plugin.PluginBase { async popularNovels( page: number, - { filters, showLatestNovels }: Plugin.PopularNovelsOptions, + { filters, showLatestNovels }: Plugin.PopularNovelsOptions, ): Promise { let url = this.site + "/vse-knigi/?sort=" + (showLatestNovels ? "По дате обновления" : filters?.sort?.value || "По рейтингу"); - if (filters?.status?.value instanceof Array) { - url += filters.status.value.map((i) => "&status[]=" + i).join(""); - } - if (filters?.lang?.value instanceof Array) { - url += filters.lang.value.map((i) => "&lang[]=" + i).join(""); - } - if (filters?.genre?.value instanceof Array) { - url += filters.genre.value.map((i) => "&genre[]=" + i).join(""); - } + Object.entries(filters || {}).forEach(([type, { value }]) => { + if (value instanceof Array && value.length) { + url += "&" + type + "[]=" + value.join("&" + type + "[]="); + } + }); + url += "&bpage=" + page; const body = await fetchApi(url).then((res) => res.text()); @@ -102,14 +99,14 @@ class IfreedomPlugin implements Plugin.PluginBase { if (novel.author == "Не указан") delete novel.author; const chapters: Plugin.ChapterItem[] = []; - loadedCheerio("div.li-ranobe").each(function () { - const name = loadedCheerio(this).find("a").text(); - const url = loadedCheerio(this).find("a").attr("href"); - if (!loadedCheerio(this).find("label.buy-ranobe").length && name && url) { - const releaseTime = loadedCheerio(this) - .find("div.li-col2-ranobe").text().trim(); + const totalChapters = loadedCheerio("div.li-ranobe").length; - chapters.push({ name, releaseTime, url }); + loadedCheerio("div.li-ranobe").each((chapterIndex, element) => { + const name = loadedCheerio(element).find("a").text(); + const url = loadedCheerio(element).find("a").attr("href"); + if (!loadedCheerio(element).find("label.buy-ranobe").length && name && url) { + const releaseTime = loadedCheerio(element).find("div.li-col2-ranobe").text().trim(); + chapters.push({ name, url, releaseTime, chapterNumber: totalChapters - chapterIndex }); } }); @@ -121,11 +118,14 @@ class IfreedomPlugin implements Plugin.PluginBase { const body = await fetchApi(chapterUrl).then((res) => res.text()); const loadedCheerio = parseHTML(body); - loadedCheerio(".entry-content img").each(function () { - const srcset = loadedCheerio(this).attr("srcset")?.split?.(" "); + loadedCheerio(".entry-content img").each((index, element) => { + const srcset = loadedCheerio(element).attr("srcset")?.split?.(" "); if (srcset?.length) { - const bestlink = srcset.filter((url) => url.startsWith("http")).unshift(); - if (typeof bestlink == 'string') loadedCheerio(this).attr("src", bestlink); + loadedCheerio(element).removeAttr("srcset"); + const bestlink: string[] = srcset.filter((url) => url.startsWith("http")); + if (bestlink[bestlink.length - 1]) { + loadedCheerio(element).attr("src", bestlink[bestlink.length - 1]); + } } }); diff --git a/scripts/multisrc/madara/generator.ts b/scripts/multisrc/madara/generator.ts index 43dd610..c02f8ea 100644 --- a/scripts/multisrc/madara/generator.ts +++ b/scripts/multisrc/madara/generator.ts @@ -11,6 +11,9 @@ export const generateAll: ScrpitGeneratorFunction = function (name) { /* This map is changing `type` from string to FilterTypes */ .map((p) => { let d = false; + if (p?.filters?.genres?.options?.length) { + p.filters.genres.options.unshift({ label: "NONE", value: "" }) + } const filters: Filters = {}; for (const k in p.filters) { const f = p.filters[k as keyof typeof p.filters]; diff --git a/scripts/multisrc/madara/sources.json b/scripts/multisrc/madara/sources.json index 36ad156..660eed2 100644 --- a/scripts/multisrc/madara/sources.json +++ b/scripts/multisrc/madara/sources.json @@ -1,5533 +1,5385 @@ [ - { - "id": "boxnovel", - "sourceSite": "https://boxnovel.com/", - "sourceName": "BoxNovel", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "genres": "manga-genre" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } + { + "id": "boxnovel", + "sourceSite": "https://boxnovel.com/", + "sourceName": "BoxNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Eastern", + "value": "eastern" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + } + ], + "type": "Picker" + } }, - { - "id": "zinnovel", - "sourceSite": "https://zinnovel.com/", - "sourceName": "ZinnNovel", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Anime", - "value": "anime" - }, - { - "label": "Cartoon", - "value": "cartoon" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Comic", - "value": "comic" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Doujinshi", - "value": "doujinshi" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Lolicon", - "value": "lolicon" - }, - { - "label": "Magical Realism", - "value": "magical-realism" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Reincarnation", - "value": "reincarnation" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Soft Yaoi", - "value": "soft-yaoi" - }, - { - "label": "Soft Yuri", - "value": "soft-yuri" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Video Games", - "value": "video-games" - }, - { - "label": "Webtoon", - "value": "webtoon" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "manga", - "novel": "manga", - "chapter": "manga", - "genres": "manga-genre" - }, - "lang": "English" - } - }, - { - "id": "novelTL", - "sourceSite": "https://noveltranslate.com/", - "sourceName": "NovelTranslate", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Bleach", - "value": "bleach" - }, - { - "label": "Chinese", - "value": "chinese" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Conan", - "value": "conan" - }, - { - "label": "cooking", - "value": "cooking" - }, - { - "label": "Dragon Ball", - "value": "dragon-ball" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Erciyuan", - "value": "erciyuan" - }, - { - "label": "Fairy Tail", - "value": "fairy-tail" - }, - { - "label": "Faloo", - "value": "faloo" - }, - { - "label": "Fan-Fiction", - "value": "fan-fiction" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "FoodWars!", - "value": "foodwars" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Hunter x Hunter", - "value": "hunter-x-hunter" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Japanese", - "value": "japanese" - }, - { - "label": "Jojo", - "value": "jojo" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Korean", - "value": "korean" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Marvel", - "value": "marvel" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Military", - "value": "military" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Naruto", - "value": "naruto" - }, - { - "label": "One piece", - "value": "one-piece" - }, - { - "label": "Pokemon", - "value": "pokemon" - }, - { - "label": "Political", - "value": "political" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sport", - "value": "sport" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "System", - "value": "system" - }, - { - "label": "Toriko", - "value": "toriko" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Urban", - "value": "urban" - }, - { - "label": "Urban Life", - "value": "urban-life" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "all-novels", - "novel": "manga", - "chapter": "manga", - "genres": "manga-genre" - }, - "lang": "English" - } - }, - { - "id": "lunarletters", - "sourceSite": "https://www.lunarletters.com/", - "sourceName": "LunarLetters", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "series", - "novel": "series", - "chapter": "series" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "sleeptTLS", - "sourceSite": "https://sleepytranslations.com/", - "sourceName": "SleepyTranslations", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "series", - "novel": "series", - "chapter": "series" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "freenovel.me", - "sourceSite": "https://freenovel.me/", - "sourceName": "FreeNovelMe", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Cartoon", - "value": "cartoon" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "History", - "value": "history" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Martial", - "value": "martial" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Premium", - "value": "premium" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Reincarnation", - "value": "reincarnation" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "lang": "English" - } - }, - { - "id": "1stkissnovel", - "sourceSite": "https://1stkissnovel.org/", - "sourceName": "FirstKissNovel", - "filters": { - "sort": { - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Anime", - "value": "anime" - }, - { - "label": "Apocalypse", - "value": "apocalypse" - }, - { - "label": "Boy's Love", - "value": "boys-love" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Completed", - "value": "completed" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Demons", - "value": "demons" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fan-Fiction", - "value": "fan-fiction" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Food", - "value": "food" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Girls Love", - "value": "girls-love" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Humor", - "value": "humor" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Magic", - "value": "magic" - }, - { - "label": "Magical", - "value": "magical" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Medical", - "value": "medical" - }, - { - "label": "Military", - "value": "military" - }, - { - "label": "Moder", - "value": "moder" - }, - { - "label": "Modern", - "value": "modern" - }, - { - "label": "Murim", - "value": "murim" - }, - { - "label": "Music", - "value": "music" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Reverse", - "value": "reverse" - }, - { - "label": "Reverse harem", - "value": "reverse-harem" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Super power", - "value": "super-power" - }, - { - "label": "Superhero", - "value": "superhero" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Thriller", - "value": "thriller" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Urban Life", - "value": "urban-life" - }, - { - "label": "Vampire", - "value": "vampire" - }, - { - "label": "Webtoons", - "value": "webtoons" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "daonovel", - "sourceSite": "https://daonovel.com/", - "sourceName": "DaoNovel", - "filters": { - "sort": { - "value": "", - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "novels-list", - "novel": "novels", - "chapter": "novels" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "mostnovel", - "sourceSite": "https://mostnovel.com/", - "sourceName": "MostNovel", - "filters": { - "sort": { - "value": "", - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "value": "", - "label": "GENRES", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "ACG", - "value": "acg" - }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "AGA", - "value": "aga" - }, - { - "label": "Anime", - "value": "anime" - }, - { - "label": "Anime & Comics", - "value": "anime-comics" - }, - { - "label": "Bender", - "value": "bender" - }, - { - "label": "BL", - "value": "bl" - }, - { - "label": "Cartoon", - "value": "cartoon" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Comic", - "value": "comic" - }, - { - "label": "Contemporary Romance", - "value": "contemporary-romance" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Cultivation", - "value": "cultivation" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Doujinshi", - "value": "doujinshi" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Eastern Fantasy", - "value": "eastern-fantasy" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Horror&Thriller", - "value": "horrorthriller" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Magical Realism", - "value": "magical-realism" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Modern", - "value": "modern" - }, - { - "label": "Movies", - "value": "movies" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smart MC", - "value": "smart-mc" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Soft Yaoi", - "value": "soft-yaoi" - }, - { - "label": "Soft Yuri", - "value": "soft-yuri" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Urban Life", - "value": "urban-life" - }, - { - "label": "Video Games", - "value": "video-games" - }, - { - "label": "Webtoon", - "value": "webtoon" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "manga", - "novel": "manga", - "chapter": "manga", - "genres": "manga-genre" - }, - "lang": "English" - } - }, - { - "id": "novelmultiverse", - "sourceSite": "https://www.novelmultiverse.com/", - "sourceName": "NovelMultiverse", - "filters": { - "sort": { - "value": "", - "label": "Order by", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Anime", - "value": "anime" - }, - { - "label": "Cartoon", - "value": "cartoon" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Comic", - "value": "comic" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Doujinshi", - "value": "doujinshi" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Original", - "value": "original" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Soft Yaoi", - "value": "soft-yaoi" - }, - { - "label": "Soft Yuri", - "value": "soft-yuri" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Translation", - "value": "translation" - }, - { - "label": "Webtoon", - "value": "webtoon" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "English" - } - }, - { - "id": "lnheaven", - "sourceSite": "https://lightnovelheaven.com/", - "sourceName": "LightNovelHeaven", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "series", - "novel": "series", - "chapter": "series" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "arnovel", - "sourceSite": "https://arnovel.me/", - "sourceName": "ArNovel", - "filters": { - "sort": { - "label": "الترتيب حسب", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "الآخير", - "value": "latest" - }, - { - "label": "الأكثر مشاهدة", - "value": "views" - }, - { - "label": "التقييم", - "value": "rating" - }, - { - "label": "جديد", - "value": "new-manga" - }, - { - "label": "شائع", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "التصنيفات", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "أكشن", - "value": "%d8%a3%d9%83%d8%b4%d9%86" - }, - { - "label": "إتشي", - "value": "%d8%a5%d8%aa%d8%b4%d9%80%d9%8a" - }, - { - "label": "بالغ", - "value": "%d8%a8%d8%a7%d9%84%d8%ba" - }, - { - "label": "تاريخي", - "value": "%d8%aa%d8%a7%d8%b1%d9%8a%d8%ae%d9%8a" - }, - { - "label": "تراجدي", - "value": "%d8%aa%d8%b1%d8%a7%d8%ac%d8%af%d9%8a" - }, - { - "label": "جوسي", - "value": "%d8%ac%d9%88%d8%b3%d9%8a" - }, - { - "label": "حريم", - "value": "%d8%ad%d8%b1%d9%8a%d9%85" - }, - { - "label": "حياة مدرسية", - "value": "%d8%ad%d9%8a%d8%a7%d8%a9-%d9%85%d8%af%d8%b1%d8%b3%d9%8a%d8%a9" - }, - { - "label": "خارق لطبيعية", - "value": "%d8%ae%d8%a7%d8%b1%d9%82-%d9%84%d8%b7%d8%a8%d9%8a%d8%b9%d9%8a%d8%a9" - }, - { - "label": "خيال", - "value": "%d8%ae%d9%8a%d8%a7%d9%84" - }, - { - "label": "خيال علمي", - "value": "%d8%ae%d9%8a%d8%a7%d9%84-%d8%b9%d9%84%d9%85%d9%8a" - }, - { - "label": "دراما", - "value": "%d8%af%d8%b1%d8%a7%d9%85%d8%a7" - }, - { - "label": "راشد", - "value": "%d8%b1%d8%a7%d8%b4%d8%af" - }, - { - "label": "رعب", - "value": "%d8%b1%d8%b9%d8%a8" - }, - { - "label": "رومنسي", - "value": "%d8%b1%d9%88%d9%85%d9%86%d8%b3%d9%8a" - }, - { - "label": "رياضي", - "value": "%d8%b1%d9%8a%d8%a7%d8%b6%d9%8a" - }, - { - "label": "سينين", - "value": "%d8%b3%d9%8a%d9%86%d9%8a%d9%86" - }, - { - "label": "شريحة من الحياة", - "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d9%85%d9%86-%d8%a7%d9%84%d8%ad%d9%8a%d8%a7%d8%a9" - }, - { - "label": "شوجو", - "value": "%d8%b4%d9%88%d8%ac%d9%88" - }, - { - "label": "شونين", - "value": "%d8%b4%d9%88%d9%86%d9%8a%d9%86" - }, - { - "label": "غموض", - "value": "%d8%ba%d9%85%d9%88%d8%b6" - }, - { - "label": "فنون قتال", - "value": "%d9%81%d9%86%d9%88%d9%86-%d9%82%d8%aa%d8%a7%d9%84" - }, - { - "label": "كوميديا", - "value": "%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7" - }, - { - "label": "مغامرات", - "value": "%d9%85%d8%ba%d8%a7%d9%85%d8%b1%d8%a7%d8%aa" - }, - { - "label": "منتهية", - "value": "%d9%85%d9%86%d8%aa%d9%87%d9%8a%d8%a9" - }, - { - "label": "ميكا", - "value": "%d9%85%d9%8a%d9%83%d8%a7" - }, - { - "label": "نفسي", - "value": "%d9%86%d9%81%d8%b3%d9%8a" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "genres": "home/novel-genre" - }, - "useNewChapterEndpoint": true, - "lang": "Arabic" - } - }, - { - "id": "meionovel", - "sourceSite": "https://meionovel.id/", - "sourceName": "MeioNovel", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fanfiction", - "value": "fanfiction" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Magic", - "value": "magic" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Reverse Harem", - "value": "reverse-harem" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Virtual Reality", - "value": "virtual-reality" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "Indonesian" - } - }, - { - "id": "webnovelover", - "sourceSite": "https://www.webnovelover.com/", - "sourceName": "WebNovelLover", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adapted into drama", - "value": "adapted-into-drama" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Completed", - "value": "completed" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "English Novel", - "value": "english-novel" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Indo Novel", - "value": "indo-novel" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Rebirth", - "value": "rebirth" - }, - { - "label": "Reincarnation", - "value": "reincarnation" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Spiritual", - "value": "spiritual" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Transmigration", - "value": "transmigration" - }, - { - "label": "University", - "value": "university" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Youth", - "value": "youth" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "English" - } - }, - { - "id": "cratenovel", - "sourceSite": "https://cratenovel.com/", - "sourceName": "CrateNovel", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "clicknovel", - "sourceSite": "https://clicknovel.net/", - "sourceName": "ClickNovel", - "filters": {}, - "options": { - "lang": "English" - } - }, - { - "id": "readwebnovels", - "sourceSite": "https://readwebnovels.net/", - "sourceName": "ReadWebNovels", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "English" - } - }, - { - "id": "wbnovel", - "sourceSite": "https://wbnovel.com/", - "sourceName": "WBNovel", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Alchemy", - "value": "alchemy" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Crafting", - "value": "crafting" - }, - { - "label": "Cultivation", - "value": "cultivation" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Dungeon Crawling", - "value": "dungeon-crawling" - }, - { - "label": "Eci", - "value": "eci" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Kingdom Building", - "value": "kingdom-building" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Modern Setting", - "value": "modern-setting" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Pets", - "value": "pets" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Reincarnator", - "value": "reincarnator" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Transmigration", - "value": "transmigration" - }, - { - "label": "Virtual Reality", - "value": "virtual-reality" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "Indonesian" - } - }, - { - "id": "wuxiaworld.site", - "sourceSite": "https://wuxiaworld.site/", - "sourceName": "WuxiaWorld.Site", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "mysticalmerries", - "sourceSite": "https://mysticalmerries.com/", - "sourceName": "MysticalSeries", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adaptation", - "value": "adaptation" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "bilibili", - "value": "bilibili" - }, - { - "label": "Chinese Novel", - "value": "chinese-novel" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Crossdressing", - "value": "crossdressing" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Dropped", - "value": "dropped" - }, - { - "label": "Family", - "value": "family" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Korean Novel", - "value": "korean-novell" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Modern Romance", - "value": "modern-romance" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Office Workers", - "value": "office-workers" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Pilot Novel", - "value": "pilot-novel" - }, - { - "label": "R15", - "value": "r15" - }, - { - "label": "R19", - "value": "r19" - }, - { - "label": "Regression", - "value": "regression" - }, - { - "label": "Reincarnation", - "value": "reincarnation" - }, - { - "label": "Reverse Harem", - "value": "reverse-harem" - }, - { - "label": "Romance Fantasy", - "value": "romance-fantasy" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Violence", - "value": "violence" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "series", - "novel": "series", - "chapter": "series", - "genres": "genre" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "morenovel", - "sourceSite": "https://morenovel.net/", - "sourceName": "MoreNovel", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "Indonesian" - } - }, - { - "id": "onlymtl", - "sourceSite": "https://www.onlymtl.com/", - "sourceName": "OnlyMTL", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "hizomanga", - "sourceSite": "https://hizomanga.com/", - "sourceName": "HizoManga", - "filters": { - "sort": { - "label": "ترتيب حسب", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "الأحدث", - "value": "latest" - }, - { - "label": "الأكثر مشاهدة", - "value": "views" - }, - { - "label": "التقييم", - "value": "rating" - }, - { - "label": "الرائج", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "التصنيفات", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "آلات", - "value": "mechanisms" - }, - { - "label": "أكشن", - "value": "action" - }, - { - "label": "إثارة", - "value": "excitement" - }, - { - "label": "إيسكاي", - "value": "%d8%a5%d9%8a%d8%b3%d9%83%d8%a7%d9%8a" - }, - { - "label": "الحياة اليومية", - "value": "slice-of-life" - }, - { - "label": "الحياة مدرسية", - "value": "school-life" - }, - { - "label": "تاريخي", - "value": "historical" - }, - { - "label": "تراجيدي", - "value": "tragic" - }, - { - "label": "جريمة", - "value": "%d8%ac%d8%b1%d9%8a%d9%85%d8%a9" - }, - { - "label": "جندر بندر", - "value": "%d8%ac%d9%86%d8%af%d8%b1-%d8%a8%d9%86%d8%af%d8%b1" - }, - { - "label": "جوسي", - "value": "josei" - }, - { - "label": "حريم", - "value": "harem" - }, - { - "label": "خارق للطبيعة", - "value": "supernatural" - }, - { - "label": "خيال", - "value": "fantasy" - }, - { - "label": "خيال علمي", - "value": "sci-fi" - }, - { - "label": "دراما", - "value": "drama" - }, - { - "label": "دموي", - "value": "%d8%af%d9%85%d9%88%d9%8a" - }, - { - "label": "راشد", - "value": "mature" - }, - { - "label": "رعب", - "value": "horror" - }, - { - "label": "رومانسي", - "value": "romance" - }, - { - "label": "رياضة", - "value": "sports" - }, - { - "label": "زمنكاني", - "value": "my-time" - }, - { - "label": "زومبي", - "value": "%d8%b2%d9%88%d9%85%d8%a8%d9%8a" - }, - { - "label": "سينين", - "value": "seinen" - }, - { - "label": "شريحة من الحياة", - "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d9%85%d9%86-%d8%a7%d9%84%d8%ad%d9%8a%d8%a7%d8%a9" - }, - { - "label": "شوجو", - "value": "shoujo" - }, - { - "label": "شونين", - "value": "shounen" - }, - { - "label": "طبي", - "value": "%d8%b7%d8%a8%d9%8a" - }, - { - "label": "غموض", - "value": "ambiguity" - }, - { - "label": "فنون قتالية", - "value": "martial-arts" - }, - { - "label": "قوة خارقة", - "value": "superpower" - }, - { - "label": "كوميدي", - "value": "comedy" - }, - { - "label": "مغامرات", - "value": "adventure" - }, - { - "label": "نفسي", - "value": "psychological" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "serie", - "novel": "serie", - "chapter": "serie", - "genres": "manga-genre" - }, - "useNewChapterEndpoint": true, - "lang": "Arabic" - } - }, - { - "id": "ar-mtl", - "sourceSite": "https://ar-mtl.club/", - "sourceName": "ArMTL", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "Arabic" - } - }, - { - "id": "novel4up", - "sourceSite": "https://novel4up.com/", - "sourceName": "Novel4Up", - "filters": { - "sort": { - "label": "ترتيب حسب:", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "أ-ي", - "value": "alphabet" - }, - { - "label": "الأحدث", - "value": "latest" - }, - { - "label": "الأكثر مشاهدة", - "value": "views" - }, - { - "label": "التقييم", - "value": "rating" - }, - { - "label": "الجديد", - "value": "new-manga" - }, - { - "label": "الشائع", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "التصنيفات", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "أكشن", - "value": "action" - }, - { - "label": "الخارق للطبيعة", - "value": "supernatural" - }, - { - "label": "تاريخي", - "value": "historical" - }, - { - "label": "تحقيق", - "value": "detective" - }, - { - "label": "تراجيديا", - "value": "tragedy" - }, - { - "label": "حريم", - "value": "harem" - }, - { - "label": "حياة مدرسية", - "value": "school-life" - }, - { - "label": "خيال علمي", - "value": "sci-fi" - }, - { - "label": "دراما", - "value": "drama" - }, - { - "label": "رعب", - "value": "horror" - }, - { - "label": "رومانسي", - "value": "romance" - }, - { - "label": "رياضة", - "value": "sports" - }, - { - "label": "سحر", - "value": "magic" - }, - { - "label": "شريحة من الحياة", - "value": "slice-of-life" - }, - { - "label": "شوانهوا", - "value": "xuanhuan" - }, - { - "label": "شوجو", - "value": "shoujo" - }, - { - "label": "شونين", - "value": "shounen" - }, - { - "label": "غموض", - "value": "mystery" - }, - { - "label": "فانتازيا", - "value": "fantasy" - }, - { - "label": "فنون قتال", - "value": "martial-arts" - }, - { - "label": "كوميديا", - "value": "comedy" - }, - { - "label": "مغامرة", - "value": "adventure" - }, - { - "label": "ميكا", - "value": "mecha" - }, - { - "label": "نفسي", - "value": "psychological" - }, - { - "label": "ون شوت", - "value": "one-shot" - }, - { - "label": "ووشيا", - "value": "wuxia" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "Arabic" - } - }, - { - "id": "teamxnovel", - "sourceSite": "https://teamxnovel.com/", - "sourceName": "TeamXNovel", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "Arabic" - } - }, - { - "id": "turkcelightnovels", - "sourceSite": "https://turkcelightnovels.com/", - "sourceName": "TurkceLightNovels", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "light-novel", - "novel": "light-novel", - "chapter": "light-novel" - }, - "lang": "Turkish" - } - }, - { - "id": "sonicmtl", - "sourceSite": "https://www.sonicmtl.com/", - "sourceName": "SonicMTL", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Doujinshi", - "value": "doujinshi" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fan-Fiction", - "value": "fan-fiction" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Soft Yaoi", - "value": "soft-yaoi" - }, - { - "label": "Soft Yuri", - "value": "soft-yuri" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Urban Life", - "value": "urban-life" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "mtlnovel.club", - "sourceSite": "https://mtlnovel.club/", - "sourceName": "MTLNovel.Club", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "noobchanTL", - "sourceSite": "https://noobchan.xyz/", - "sourceName": "Noobchan Translation", - "filters": {}, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "guavaread", - "sourceSite": "https://guavaread.com/", - "sourceName": "Guavaread", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Complete", - "value": "complete" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Dropped", - "value": "dropped" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Original Story", - "value": "original-story" - }, - { - "label": "Pilot", - "value": "pilot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "R-15", - "value": "r-15" - }, - { - "label": "R-19", - "value": "r-19" - }, - { - "label": "Reverse Harem", - "value": "reverse-harem" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "sweetEscapeTL", - "sourceSite": "https://sweetescapetranslations.com/", - "sourceName": "Sweet Escape Translations", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Modern", - "value": "modern" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "R-15", - "value": "r-15" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "manga", - "novel": "manga", - "chapter": "manga", - "genres": "manga-genre" - }, - "useNewChapterEndpoint": false, - "lang": "English" - } - }, - { - "id": "fanTLS", - "sourceSite": "https://fanstranslations.com/", - "sourceName": "Fans Translations", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "riwyat", - "sourceSite": "https://riwyat.com/", - "sourceName": "Riwyat", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "أكشن", - "value": "%d8%a3%d9%83%d8%b4%d9%86" - }, - { - "label": "أيتشي", - "value": "%d8%a3%d9%8a%d8%aa%d8%b4%d9%8a" - }, - { - "label": "استراتجي", - "value": "%d8%a7%d8%b3%d8%aa%d8%b1%d8%a7%d8%aa%d8%ac%d9%8a" - }, - { - "label": "العصر الحديث", - "value": "%d8%a7%d9%84%d8%b9%d8%b5%d8%b1-%d8%a7%d9%84%d8%ad%d8%af%d9%8a%d8%ab" - }, - { - "label": "انتقام", - "value": "%d8%a7%d9%86%d8%aa%d9%82%d8%a7%d9%85" - }, - { - "label": "بالغ", - "value": "%d8%a8%d8%a7%d9%84%d8%ba" - }, - { - "label": "بناء مملكة", - "value": "%d8%a8%d9%86%d8%a7%d8%a1-%d9%85%d9%85%d9%84%d9%83%d8%a9" - }, - { - "label": "بوليسي", - "value": "%d8%a8%d9%88%d9%84%d9%8a%d8%b3%d9%8a" - }, - { - "label": "تاريخي", - "value": "%d8%aa%d8%a7%d8%b1%d9%8a%d8%ae%d9%8a" - }, - { - "label": "جوسي", - "value": "%d8%ac%d9%88%d8%b3%d9%8a" - }, - { - "label": "حريم", - "value": "%d8%ad%d8%b1%d9%8a%d9%85" - }, - { - "label": "حياة يومية", - "value": "%d8%ad%d9%8a%d8%a7%d8%a9-%d9%8a%d9%88%d9%85%d9%8a%d8%a9" - }, - { - "label": "خيال", - "value": "%d8%ae%d9%8a%d8%a7%d9%84" - }, - { - "label": "خيال علمي", - "value": "%d8%ae%d9%8a%d8%a7%d9%84-%d8%b9%d9%84%d9%85%d9%8a" - }, - { - "label": "دراما", - "value": "%d8%af%d8%b1%d8%a7%d9%85%d8%a7" - }, - { - "label": "رعب", - "value": "%d8%b1%d8%b9%d8%a8" - }, - { - "label": "رومانسية", - "value": "%d8%b1%d9%88%d9%85%d8%a7%d9%86%d8%b3%d9%8a%d8%a9" - }, - { - "label": "رياضي", - "value": "%d8%b1%d9%8a%d8%a7%d8%b6%d9%8a" - }, - { - "label": "زيانشيا", - "value": "xianxia" - }, - { - "label": "سنين", - "value": "%d8%b3%d9%86%d9%8a%d9%86" - }, - { - "label": "شريحة حياة", - "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d8%ad%d9%8a%d8%a7%d8%a9" - }, - { - "label": "شوانهوان", - "value": "xuanhuan" - }, - { - "label": "شوجو", - "value": "%d8%b4%d9%88%d8%ac%d9%88" - }, - { - "label": "شونين", - "value": "%d8%b4%d9%88%d9%86%d9%8a%d9%86" - }, - { - "label": "شيانشيا", - "value": "%d8%b4%d9%8a%d8%a7%d9%86%d8%b4%d9%8a%d8%a7" - }, - { - "label": "عسكري", - "value": "%d8%b9%d8%b3%d9%83%d8%b1%d9%8a" - }, - { - "label": "غموض", - "value": "%d8%ba%d9%85%d9%88%d8%b6" - }, - { - "label": "فانتازيا", - "value": "%d9%81%d8%a7%d9%86%d8%aa%d8%a7%d8%b2%d9%8a%d8%a7" - }, - { - "label": "فنون قتالية", - "value": "%d9%81%d9%86%d9%88%d9%86-%d9%82%d8%aa%d8%a7%d9%84%d9%8a%d8%a9" - }, - { - "label": "قوى خارقة", - "value": "%d9%82%d9%88%d9%89-%d8%ae%d8%a7%d8%b1%d9%82%d8%a9" - }, - { - "label": "كوميديا", - "value": "%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7" - }, - { - "label": "كوميك", - "value": "%d9%83%d9%88%d9%85%d9%8a%d9%83" - }, - { - "label": "للكبار", - "value": "%d9%84%d9%84%d9%83%d8%a8%d8%a7%d8%b1" - }, - { - "label": "مأساة", - "value": "%d9%85%d8%a3%d8%b3%d8%a7%d8%a9" - }, - { - "label": "مانجا", - "value": "%d9%85%d8%a7%d9%86%d8%ac%d8%a7" - }, - { - "label": "مانها", - "value": "%d9%85%d8%a7%d9%86%d9%87%d8%a7" - }, - { - "label": "مانهوا", - "value": "%d9%85%d8%a7%d9%86%d9%87%d9%88%d8%a7" - }, - { - "label": "مدرسي", - "value": "%d9%85%d8%af%d8%b1%d8%b3%d9%8a" - }, - { - "label": "مصاصي دماء", - "value": "%d9%85%d8%b5%d8%a7%d8%b5%d9%8a-%d8%af%d9%85%d8%a7%d8%a1" - }, - { - "label": "مغامرة", - "value": "%d9%85%d8%ba%d8%a7%d9%85%d8%b1%d8%a9" - }, - { - "label": "مكتملة", - "value": "%d9%85%d9%83%d8%aa%d9%85%d9%84%d8%a9" - }, - { - "label": "نفسي", - "value": "%d9%86%d9%81%d8%b3%d9%8a" - }, - { - "label": "نهاية العالم", - "value": "%d9%86%d9%87%d8%a7%d9%8a%d8%a9-%d8%a7%d9%84%d8%b9%d8%a7%d9%84%d9%85" - }, - { - "label": "واب تون", - "value": "%d9%88%d8%a7%d8%a8-%d8%aa%d9%88%d9%86" - }, - { - "label": "وان شوت", - "value": "%d9%88%d8%a7%d9%86-%d8%b4%d9%88%d8%aa" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "Arabic" - } - }, - { - "id": "novelstic", - "sourceSite": "https://novelstic.com/", - "sourceName": "Novelstic", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "neosekaiTLS", - "sourceSite": "https://www.neosekaitranslations.com/", - "sourceName": "NeoSekai Translations", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-Fi", - "value": "sci-fi" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "English" - } - }, - { - "id": "mtl-novel", - "sourceSite": "https://mtl-novel.com/", - "sourceName": "MTL-Novel", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Chinese", - "value": "chinese" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Conan", - "value": "conan" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Erciyuan", - "value": "erciyuan" - }, - { - "label": "Fairy Tail", - "value": "fairy-tail" - }, - { - "label": "Faloo", - "value": "faloo" - }, - { - "label": "Fan-Fiction", - "value": "fan-fiction" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "FoodWars!", - "value": "foodwars" - }, - { - "label": "Game", - "value": "game" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Hunter x Hunter", - "value": "hunter-x-hunter" - }, - { - "label": "Japanese", - "value": "japanese" - }, - { - "label": "Jojo", - "value": "jojo" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Korean", - "value": "korean" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Marvel", - "value": "marvel" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Military", - "value": "military" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "Naruto", - "value": "naruto" - }, - { - "label": "One piece", - "value": "one-piece" - }, - { - "label": "Pokemon", - "value": "pokemon" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Sport", - "value": "sport" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "System", - "value": "system" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Urban", - "value": "urban" - }, - { - "label": "Urban Life", - "value": "urban-life" - }, - { - "label": "Wuxia", - "value": "wuxia" - }, - { - "label": "Xianxia", - "value": "xianxia" - }, - { - "label": "Xuanhuan", - "value": "xuanhuan" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "genres": "manga-genre" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "zetroTL", - "sourceSite": "https://zetrotranslation.com/", - "sourceName": "Zetro Translation", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Dark Elf", - "value": "dark-elf" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Isekai", - "value": "isekai" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "NTR", - "value": "ntr" - }, - { - "label": "Original Works", - "value": "original-works" - }, - { - "label": "Rom-Com", - "value": "rom-com" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School", - "value": "school" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Villain", - "value": "villain" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "genres": "genre" - }, - "lang": "English" - } - }, - { - "id": "nocturneTLS", - "sourceSite": "https://nocturnetls.net/", - "sourceName": "Nocturne Translations", - "filters": { - "sort": { - "label": "Order by", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "New", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - }, - "genres": { - "label": "GENRES", - "value": "", - "options": [ - { "label": "NONE", "value": "" }, - { - "label": "Action", - "value": "action" - }, - { - "label": "Adult", - "value": "adult" - }, - { - "label": "Adventure", - "value": "adventure" - }, - { - "label": "Anime", - "value": "anime" - }, - { - "label": "Cartoon", - "value": "cartoon" - }, - { - "label": "Comedy", - "value": "comedy" - }, - { - "label": "Comic", - "value": "comic" - }, - { - "label": "Cooking", - "value": "cooking" - }, - { - "label": "Detective", - "value": "detective" - }, - { - "label": "Doujinshi", - "value": "doujinshi" - }, - { - "label": "Drama", - "value": "drama" - }, - { - "label": "Ecchi", - "value": "ecchi" - }, - { - "label": "Fantasy", - "value": "fantasy" - }, - { - "label": "Gender Bender", - "value": "gender-bender" - }, - { - "label": "Harem", - "value": "harem" - }, - { - "label": "Historical", - "value": "historical" - }, - { - "label": "Horror", - "value": "horror" - }, - { - "label": "Josei", - "value": "josei" - }, - { - "label": "Live action", - "value": "live-action" - }, - { - "label": "Manga", - "value": "manga" - }, - { - "label": "Manhua", - "value": "manhua" - }, - { - "label": "Manhwa", - "value": "manhwa" - }, - { - "label": "Martial Arts", - "value": "martial-arts" - }, - { - "label": "Mature", - "value": "mature" - }, - { - "label": "Mecha", - "value": "mecha" - }, - { - "label": "Mystery", - "value": "mystery" - }, - { - "label": "One shot", - "value": "one-shot" - }, - { - "label": "Psychological", - "value": "psychological" - }, - { - "label": "Romance", - "value": "romance" - }, - { - "label": "School Life", - "value": "school-life" - }, - { - "label": "Sci-fi", - "value": "sci-fi" - }, - { - "label": "Seinen", - "value": "seinen" - }, - { - "label": "Shoujo", - "value": "shoujo" - }, - { - "label": "Shoujo Ai", - "value": "shoujo-ai" - }, - { - "label": "Shounen", - "value": "shounen" - }, - { - "label": "Shounen Ai", - "value": "shounen-ai" - }, - { - "label": "Slice of Life", - "value": "slice-of-life" - }, - { - "label": "Smut", - "value": "smut" - }, - { - "label": "Soft Yaoi", - "value": "soft-yaoi" - }, - { - "label": "Soft Yuri", - "value": "soft-yuri" - }, - { - "label": "Sports", - "value": "sports" - }, - { - "label": "Supernatural", - "value": "supernatural" - }, - { - "label": "Tragedy", - "value": "tragedy" - }, - { - "label": "Webtoon", - "value": "webtoon" - }, - { - "label": "Yaoi", - "value": "yaoi" - }, - { - "label": "Yuri", - "value": "yuri" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "novels", - "novel": "novels", - "chapter": "novels", - "genres": "manga-genre" - }, - "lang": "English" - } - }, - { - "id": "sugarbbscan", - "sourceSite": "https://sugarbbscan.com/", - "sourceName": "Sugar Babies", - "filters": {}, - "options": { - "path": { - "novels": "series", - "novel": "series", - "chapter": "series" - }, - "lang": "English" - } - }, - { - "id": "novelroom", - "sourceSite": "https://novelroom.net/", - "sourceName": "Novelroom.net", - "filters": {}, - "options": { - "path": { - "novels": "manga", - "novel": "manga", - "chapter": "manga" - }, - "lang": "English" - } - }, - { - "id": "novelr18", - "sourceSite": "https://novelr18.com/", - "sourceName": "NovelR18", - "filters": { - "sort": { - "label": "Sort by :", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "Rating", - "value": "rating" - }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Latest Update", - "value": "latest" - }, - { - "label": "Most Views", - "value": "views" - }, - { - "label": "Newly Added Novels", - "value": "new-manga" - }, - { - "label": "Trending", - "value": "trending" - } - ], - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "novel", - "novel": "manga", - "chapter": "manga" - }, - "useNewChapterEndpoint": true, - "lang": "English" - } - }, - { - "id": "webnoveloku", - "sourceSite": "https://www.webnoveloku.com/", - "sourceName": "WebNovelOku ", - "filters": { - "sort": { - "label": "Sırala", - "value": "", - "options": [ - { "label": "Default", "value": "" }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "En Son", - "value": "latest" - }, - { - "label": "Görüntülenme", - "value": "views" - }, - { - "label": "Popülarite", - "value": "trending" - }, - { - "label": "Reyting", - "value": "rating" - }, - { - "label": "Yeni", - "value": "new-manga" - } - ], - "type": "Picker" - } - }, - "options": { - "lang": "Turkish" - } - }, - { - "id": "kiniga", - "sourceSite": "https://kiniga.com/", - "sourceName": "Kiniga", - "filters": { - "sort": { - "label": "Orden por", - "options": [ - { "label": "Relevância", "value": "" }, - { - "label": "A-Z", - "value": "alphabet" - }, - { - "label": "Mais Antigo", - "value": "latest" - }, - { - "label": "Mais vistos", - "value": "views" - }, - { - "label": "Tendência", - "value": "trending" - }, - { - "label": "Avaliação", - "value": "rating" - }, - { - "label": "Novo", - "value": "new-manga" - } - ], - "value": "", - "type": "Picker" - }, - "genres": { - "label": "Generos", - "options": [ - { "label": "Sem Filtro", "value": "" }, - { "label": "Ação", "value": "action" }, - { "label": "Artes Marciais", "value": "artes-marciais" }, - { "label": "Aventura", "value": "aventura" }, - { "label": "Comédia", "value": "comedia" }, - { "label": "Contemporâneo", "value": "contemporaneo" }, - { "label": "Contos Originais", "value": "contos-originais" }, - { "label": "Crime", "value": "crime" }, - { "label": "Cyberpunk", "value": "cyberpunk" }, - { "label": "Destaque", "value": "destaque" }, - { "label": "Distopia", "value": "distopia" }, - { "label": "Drama", "value": "drama" }, - { "label": "Ecchi", "value": "ecchi" }, - { "label": "Espacial", "value": "espacial" }, - { "label": "Esportes", "value": "esportes" }, - { "label": "Fanfic", "value": "fanfic" }, - { "label": "Fantasia", "value": "fantasia" }, - { "label": "Ficção Científica", "value": "ficcao-cientifica" }, - { "label": "Gastronomia", "value": "gastronomia" }, - { "label": "Harem", "value": "harem" }, - { "label": "Histórico", "value": "historico" }, - { "label": "Horror", "value": "horror" }, - { "label": "Infantil", "value": "infantil" }, - { "label": "Isekai", "value": "isekai" }, - { "label": "Jogos", "value": "jogos" }, - { "label": "LGBT+", "value": "lgbt" }, - { "label": "Magia", "value": "magia" }, - { "label": "Mecha", "value": "mecha" }, - { "label": "Medieval", "value": "medieval" }, - { "label": "Militar", "value": "militar" }, - { "label": "Mistério", "value": "misterio" }, - { "label": "Mitologia", "value": "mitologia" }, - { "label": "Moderno", "value": "moderno" }, - { "label": "Pós-Apocalíptico", "value": "pos-apocaliptico" }, - { "label": "Psicológico", "value": "psicologico" }, - { "label": "Realidade Virtual", "value": "realidade-virtual" }, - { "label": "Recomendado", "value": "recomendado" }, - { "label": "Romance", "value": "romance" }, - { "label": "RPG", "value": "rpg" }, - { "label": "Ficção Científica", "value": "sci-fi" }, - { "label": "Seinen", "value": "seinen" }, - { "label": "Shounen", "value": "shounen" }, - { "label": "Sistema de Jogo", "value": "sistema-de-jogo" }, - { "label": "Slice of Life", "value": "slice-of-life" }, - { "label": "SNKHome", "value": "snkhome" }, - { "label": "Sobrenatural", "value": "sobrenatural" }, - { "label": "Somente na Kiniga", "value": "somente-na-kiniga" }, - { "label": "Suspense", "value": "suspense" }, - { "label": "Terror", "value": "terror" }, - { "label": "Terror Psicológico", "value": "terror-psicologico" }, - { "label": "Traduções", "value": "traducoes" }, - { "label": "Tragédia", "value": "tragedia" }, - { "label": "Urbano", "value": "urbano" }, - { "label": "Vida Escolar", "value": "vida-escolar" } - ], - "value": "", - "type": "Picker" - } - }, - "options": { - "path": { - "novels": "projetos", - "novel": "projeto", - "chapter": "capitulo", - "genres": "genero" - }, - "lang": "Portuguese" - } + "options": { + "path": { + "genres": "manga-genre" + }, + "useNewChapterEndpoint": true } + }, + { + "id": "zinnovel", + "sourceSite": "https://zinnovel.com/", + "sourceName": "ZinnNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Anime", + "value": "anime" + }, + { + "label": "Cartoon", + "value": "cartoon" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Comic", + "value": "comic" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Doujinshi", + "value": "doujinshi" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Humor", + "value": "humor" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Lolicon", + "value": "lolicon" + }, + { + "label": "Magic", + "value": "magic" + }, + { + "label": "Magical Realism", + "value": "magical-realism" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Soft Yaoi", + "value": "soft-yaoi" + }, + { + "label": "Soft Yuri", + "value": "soft-yuri" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Video Games", + "value": "video-games" + }, + { + "label": "Webtoon", + "value": "webtoon" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "manga", + "novel": "manga", + "chapter": "manga", + "genres": "manga-genre" + } + } + }, + { + "id": "novelTL", + "sourceSite": "https://noveltranslate.com/", + "sourceName": "NovelTranslate", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Bleach", + "value": "bleach" + }, + { + "label": "Chinese", + "value": "chinese" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Conan", + "value": "conan" + }, + { + "label": "cooking", + "value": "cooking" + }, + { + "label": "Dragon Ball", + "value": "dragon-ball" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Erciyuan", + "value": "erciyuan" + }, + { + "label": "Fairy Tail", + "value": "fairy-tail" + }, + { + "label": "Faloo", + "value": "faloo" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "FoodWars!", + "value": "foodwars" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Hunter x Hunter", + "value": "hunter-x-hunter" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Japanese", + "value": "japanese" + }, + { + "label": "Jojo", + "value": "jojo" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Korean", + "value": "korean" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Marvel", + "value": "marvel" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Military", + "value": "military" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Naruto", + "value": "naruto" + }, + { + "label": "One piece", + "value": "one-piece" + }, + { + "label": "Pokemon", + "value": "pokemon" + }, + { + "label": "Political", + "value": "political" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sport", + "value": "sport" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "System", + "value": "system" + }, + { + "label": "Toriko", + "value": "toriko" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Urban", + "value": "urban" + }, + { + "label": "Urban Life", + "value": "urban-life" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "all-novels", + "novel": "manga", + "chapter": "manga", + "genres": "manga-genre" + } + } + }, + { + "id": "lunarletters", + "sourceSite": "https://www.lunarletters.com/", + "sourceName": "LunarLetters", + "options": { + "path": { + "novels": "series", + "novel": "series", + "chapter": "series" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "sleeptTLS", + "sourceSite": "https://sleepytranslations.com/", + "sourceName": "SleepyTranslations", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "series", + "novel": "series", + "chapter": "series" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "freenovel.me", + "sourceSite": "https://freenovel.me/", + "sourceName": "FreeNovelMe", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Cartoon", + "value": "cartoon" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "History", + "value": "history" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Martial", + "value": "martial" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Premium", + "value": "premium" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + } + ], + "type": "Picker" + } + } + }, + { + "id": "1stkissnovel", + "sourceSite": "https://1stkissnovel.org/", + "sourceName": "FirstKissNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Anime", + "value": "anime" + }, + { + "label": "Apocalypse", + "value": "apocalypse" + }, + { + "label": "Boy's Love", + "value": "boys-love" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Completed", + "value": "completed" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Demons", + "value": "demons" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Food", + "value": "food" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Girls Love", + "value": "girls-love" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Humor", + "value": "humor" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Magic", + "value": "magic" + }, + { + "label": "Magical", + "value": "magical" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Medical", + "value": "medical" + }, + { + "label": "Military", + "value": "military" + }, + { + "label": "Moder", + "value": "moder" + }, + { + "label": "Modern", + "value": "modern" + }, + { + "label": "Murim", + "value": "murim" + }, + { + "label": "Music", + "value": "music" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Reverse", + "value": "reverse" + }, + { + "label": "Reverse harem", + "value": "reverse-harem" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Super power", + "value": "super-power" + }, + { + "label": "Superhero", + "value": "superhero" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Thriller", + "value": "thriller" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Urban Life", + "value": "urban-life" + }, + { + "label": "Vampire", + "value": "vampire" + }, + { + "label": "Webtoons", + "value": "webtoons" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "daonovel", + "sourceSite": "https://www.daonovel.com/", + "sourceName": "DaoNovel", + "options": { + "path": { + "novels": "novels-list", + "novel": "novels", + "chapter": "novels" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "mostnovel", + "sourceSite": "https://mostnovel.com/", + "sourceName": "MostNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "ACG", + "value": "acg" + }, + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "AGA", + "value": "aga" + }, + { + "label": "Anime", + "value": "anime" + }, + { + "label": "Anime & Comics", + "value": "anime-comics" + }, + { + "label": "Bender", + "value": "bender" + }, + { + "label": "BL", + "value": "bl" + }, + { + "label": "Cartoon", + "value": "cartoon" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Comic", + "value": "comic" + }, + { + "label": "Contemporary Romance", + "value": "contemporary-romance" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Cultivation", + "value": "cultivation" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Doujinshi", + "value": "doujinshi" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Eastern Fantasy", + "value": "eastern-fantasy" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "General", + "value": "general" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Horror&Thriller", + "value": "horrorthriller" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Magical Realism", + "value": "magical-realism" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Modern", + "value": "modern" + }, + { + "label": "Movies", + "value": "movies" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smart MC", + "value": "smart-mc" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Soft Yaoi", + "value": "soft-yaoi" + }, + { + "label": "Soft Yuri", + "value": "soft-yuri" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Urban Life", + "value": "urban-life" + }, + { + "label": "Video Games", + "value": "video-games" + }, + { + "label": "Webtoon", + "value": "webtoon" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "manga", + "novel": "manga", + "chapter": "manga", + "genres": "manga-genre" + } + } + }, + { + "id": "novelmultiverse", + "sourceSite": "https://www.novelmultiverse.com/", + "sourceName": "NovelMultiverse", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Anime", + "value": "anime" + }, + { + "label": "Cartoon", + "value": "cartoon" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Comic", + "value": "comic" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Doujinshi", + "value": "doujinshi" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Original", + "value": "original" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Soft Yaoi", + "value": "soft-yaoi" + }, + { + "label": "Soft Yuri", + "value": "soft-yuri" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Translation", + "value": "translation" + }, + { + "label": "Webtoon", + "value": "webtoon" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + } + }, + { + "id": "lnheaven", + "sourceSite": "https://lightnovelheaven.com/", + "sourceName": "LightNovelHeaven", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "series", + "novel": "series", + "chapter": "series" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "arnovel", + "sourceSite": "https://arnovel.me/", + "sourceName": "ArNovel", + "filters": { + "sort": { + "label": "الترتيب حسب", + "value": "", + "options": [ + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "الآخير", + "value": "latest" + }, + { + "label": "الأكثر مشاهدة", + "value": "views" + }, + { + "label": "التقييم", + "value": "rating" + }, + { + "label": "جديد", + "value": "new-manga" + }, + { + "label": "شائع", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "التصنيفات", + "value": "", + "options": [ + { + "label": "أكشن", + "value": "%d8%a3%d9%83%d8%b4%d9%86" + }, + { + "label": "إتشي", + "value": "%d8%a5%d8%aa%d8%b4%d9%80%d9%8a" + }, + { + "label": "بالغ", + "value": "%d8%a8%d8%a7%d9%84%d8%ba" + }, + { + "label": "تاريخي", + "value": "%d8%aa%d8%a7%d8%b1%d9%8a%d8%ae%d9%8a" + }, + { + "label": "تراجدي", + "value": "%d8%aa%d8%b1%d8%a7%d8%ac%d8%af%d9%8a" + }, + { + "label": "جوسي", + "value": "%d8%ac%d9%88%d8%b3%d9%8a" + }, + { + "label": "حريم", + "value": "%d8%ad%d8%b1%d9%8a%d9%85" + }, + { + "label": "حياة مدرسية", + "value": "%d8%ad%d9%8a%d8%a7%d8%a9-%d9%85%d8%af%d8%b1%d8%b3%d9%8a%d8%a9" + }, + { + "label": "خارق لطبيعية", + "value": "%d8%ae%d8%a7%d8%b1%d9%82-%d9%84%d8%b7%d8%a8%d9%8a%d8%b9%d9%8a%d8%a9" + }, + { + "label": "خيال", + "value": "%d8%ae%d9%8a%d8%a7%d9%84" + }, + { + "label": "خيال علمي", + "value": "%d8%ae%d9%8a%d8%a7%d9%84-%d8%b9%d9%84%d9%85%d9%8a" + }, + { + "label": "دراما", + "value": "%d8%af%d8%b1%d8%a7%d9%85%d8%a7" + }, + { + "label": "راشد", + "value": "%d8%b1%d8%a7%d8%b4%d8%af" + }, + { + "label": "رعب", + "value": "%d8%b1%d8%b9%d8%a8" + }, + { + "label": "رومنسي", + "value": "%d8%b1%d9%88%d9%85%d9%86%d8%b3%d9%8a" + }, + { + "label": "رياضي", + "value": "%d8%b1%d9%8a%d8%a7%d8%b6%d9%8a" + }, + { + "label": "سينين", + "value": "%d8%b3%d9%8a%d9%86%d9%8a%d9%86" + }, + { + "label": "شريحة من الحياة", + "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d9%85%d9%86-%d8%a7%d9%84%d8%ad%d9%8a%d8%a7%d8%a9" + }, + { + "label": "شوجو", + "value": "%d8%b4%d9%88%d8%ac%d9%88" + }, + { + "label": "شونين", + "value": "%d8%b4%d9%88%d9%86%d9%8a%d9%86" + }, + { + "label": "غموض", + "value": "%d8%ba%d9%85%d9%88%d8%b6" + }, + { + "label": "فنون قتال", + "value": "%d9%81%d9%86%d9%88%d9%86-%d9%82%d8%aa%d8%a7%d9%84" + }, + { + "label": "كوميديا", + "value": "%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7" + }, + { + "label": "مغامرات", + "value": "%d9%85%d8%ba%d8%a7%d9%85%d8%b1%d8%a7%d8%aa" + }, + { + "label": "منتهية", + "value": "%d9%85%d9%86%d8%aa%d9%87%d9%8a%d8%a9" + }, + { + "label": "ميكا", + "value": "%d9%85%d9%8a%d9%83%d8%a7" + }, + { + "label": "نفسي", + "value": "%d9%86%d9%81%d8%b3%d9%8a" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "genres": "home/novel-genre" + }, + "useNewChapterEndpoint": true, + "lang": "Arabic" + } + }, + { + "id": "meionovel", + "sourceSite": "https://meionovel.id/", + "sourceName": "MeioNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fanfiction", + "value": "fanfiction" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Magic", + "value": "magic" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Reverse Harem", + "value": "reverse-harem" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Virtual Reality", + "value": "virtual-reality" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true, + "lang": "Indonesian" + } + }, + { + "id": "webnovelover", + "sourceSite": "https://www.webnovelover.com/", + "sourceName": "WebNovelLover", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adapted into drama", + "value": "adapted-into-drama" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Completed", + "value": "completed" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "English Novel", + "value": "english-novel" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Indo Novel", + "value": "indo-novel" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Rebirth", + "value": "rebirth" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Spiritual", + "value": "spiritual" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Transmigration", + "value": "transmigration" + }, + { + "label": "University", + "value": "university" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Youth", + "value": "youth" + } + ], + "type": "Picker" + } + } + }, + { + "id": "readwebnovels", + "sourceSite": "https://readwebnovels.net/", + "sourceName": "ReadWebNovels" + }, + { + "id": "wbnovel", + "sourceSite": "https://wbnovel.com/", + "sourceName": "WBNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Alchemy", + "value": "alchemy" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Crafting", + "value": "crafting" + }, + { + "label": "Cultivation", + "value": "cultivation" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Dungeon Crawling", + "value": "dungeon-crawling" + }, + { + "label": "Eci", + "value": "eci" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Kingdom Building", + "value": "kingdom-building" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Modern Setting", + "value": "modern-setting" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Pets", + "value": "pets" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Reincarnator", + "value": "reincarnator" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Transmigration", + "value": "transmigration" + }, + { + "label": "Virtual Reality", + "value": "virtual-reality" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + } + ], + "type": "Picker" + } + }, + "options": { + "lang": "Indonesian" + } + }, + { + "id": "wuxiaworld.site", + "sourceSite": "https://wuxiaworld.site/", + "sourceName": "WuxiaWorld.Site", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "mysticalmerries", + "sourceSite": "https://mysticalmerries.com/", + "sourceName": "MysticalSeries", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adaptation", + "value": "adaptation" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "bilibili", + "value": "bilibili" + }, + { + "label": "Chinese Novel", + "value": "chinese-novel" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Crossdressing", + "value": "crossdressing" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Dropped", + "value": "dropped" + }, + { + "label": "Family", + "value": "family" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Korean Novel", + "value": "korean-novell" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Modern Romance", + "value": "modern-romance" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Office Workers", + "value": "office-workers" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Pilot Novel", + "value": "pilot-novel" + }, + { + "label": "R15", + "value": "r15" + }, + { + "label": "R19", + "value": "r19" + }, + { + "label": "Regression", + "value": "regression" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Reverse Harem", + "value": "reverse-harem" + }, + { + "label": "Romance Fantasy", + "value": "romance-fantasy" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Violence", + "value": "violence" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "series", + "novel": "series", + "chapter": "series", + "genres": "genre" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "morenovel", + "sourceSite": "https://morenovel.net/", + "sourceName": "MoreNovel", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true, + "lang": "Indonesian" + } + }, + { + "id": "onlymtl", + "sourceSite": "https://www.onlymtl.com/", + "sourceName": "OnlyMTL", + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "hizomanga", + "sourceSite": "https://hizomanga.com/", + "sourceName": "HizoManga", + "filters": { + "sort": { + "label": "ترتيب حسب", + "value": "", + "options": [ + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "الأحدث", + "value": "latest" + }, + { + "label": "الأكثر مشاهدة", + "value": "views" + }, + { + "label": "التقييم", + "value": "rating" + }, + { + "label": "الرائج", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "التصنيفات", + "value": "", + "options": [ + { + "label": "آلات", + "value": "mechanisms" + }, + { + "label": "أكشن", + "value": "action" + }, + { + "label": "إثارة", + "value": "excitement" + }, + { + "label": "إيسكاي", + "value": "%d8%a5%d9%8a%d8%b3%d9%83%d8%a7%d9%8a" + }, + { + "label": "الحياة اليومية", + "value": "slice-of-life" + }, + { + "label": "الحياة مدرسية", + "value": "school-life" + }, + { + "label": "تاريخي", + "value": "historical" + }, + { + "label": "تراجيدي", + "value": "tragic" + }, + { + "label": "جريمة", + "value": "%d8%ac%d8%b1%d9%8a%d9%85%d8%a9" + }, + { + "label": "جندر بندر", + "value": "%d8%ac%d9%86%d8%af%d8%b1-%d8%a8%d9%86%d8%af%d8%b1" + }, + { + "label": "جوسي", + "value": "josei" + }, + { + "label": "حريم", + "value": "harem" + }, + { + "label": "خارق للطبيعة", + "value": "supernatural" + }, + { + "label": "خيال", + "value": "fantasy" + }, + { + "label": "خيال علمي", + "value": "sci-fi" + }, + { + "label": "دراما", + "value": "drama" + }, + { + "label": "دموي", + "value": "%d8%af%d9%85%d9%88%d9%8a" + }, + { + "label": "راشد", + "value": "mature" + }, + { + "label": "رعب", + "value": "horror" + }, + { + "label": "رومانسي", + "value": "romance" + }, + { + "label": "رياضة", + "value": "sports" + }, + { + "label": "زمنكاني", + "value": "my-time" + }, + { + "label": "زومبي", + "value": "%d8%b2%d9%88%d9%85%d8%a8%d9%8a" + }, + { + "label": "سينين", + "value": "seinen" + }, + { + "label": "شريحة من الحياة", + "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d9%85%d9%86-%d8%a7%d9%84%d8%ad%d9%8a%d8%a7%d8%a9" + }, + { + "label": "شوجو", + "value": "shoujo" + }, + { + "label": "شونين", + "value": "shounen" + }, + { + "label": "طبي", + "value": "%d8%b7%d8%a8%d9%8a" + }, + { + "label": "غموض", + "value": "ambiguity" + }, + { + "label": "فنون قتالية", + "value": "martial-arts" + }, + { + "label": "قوة خارقة", + "value": "superpower" + }, + { + "label": "كوميدي", + "value": "comedy" + }, + { + "label": "مغامرات", + "value": "adventure" + }, + { + "label": "نفسي", + "value": "psychological" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "serie", + "novel": "serie", + "chapter": "serie", + "genres": "manga-genre" + }, + "useNewChapterEndpoint": true, + "lang": "Arabic" + } + }, + { + "id": "ar-mtl", + "sourceSite": "https://ar-mtl.club/", + "sourceName": "ArMTL", + "options": { + "useNewChapterEndpoint": true, + "lang": "Arabic" + } + }, + { + "id": "novel4up", + "sourceSite": "https://novel4up.com/", + "sourceName": "Novel4Up", + "filters": { + "sort": { + "label": "ترتيب حسب:", + "value": "", + "options": [ + { + "label": "أ-ي", + "value": "alphabet" + }, + { + "label": "الأحدث", + "value": "latest" + }, + { + "label": "الأكثر مشاهدة", + "value": "views" + }, + { + "label": "التقييم", + "value": "rating" + }, + { + "label": "الجديد", + "value": "new-manga" + }, + { + "label": "الشائع", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "التصنيفات", + "value": "", + "options": [ + { + "label": "أكشن", + "value": "action" + }, + { + "label": "الخارق للطبيعة", + "value": "supernatural" + }, + { + "label": "تاريخي", + "value": "historical" + }, + { + "label": "تحقيق", + "value": "detective" + }, + { + "label": "تراجيديا", + "value": "tragedy" + }, + { + "label": "حريم", + "value": "harem" + }, + { + "label": "حياة مدرسية", + "value": "school-life" + }, + { + "label": "خيال علمي", + "value": "sci-fi" + }, + { + "label": "دراما", + "value": "drama" + }, + { + "label": "رعب", + "value": "horror" + }, + { + "label": "رومانسي", + "value": "romance" + }, + { + "label": "رياضة", + "value": "sports" + }, + { + "label": "سحر", + "value": "magic" + }, + { + "label": "شريحة من الحياة", + "value": "slice-of-life" + }, + { + "label": "شوانهوا", + "value": "xuanhuan" + }, + { + "label": "شوجو", + "value": "shoujo" + }, + { + "label": "شونين", + "value": "shounen" + }, + { + "label": "غموض", + "value": "mystery" + }, + { + "label": "فانتازيا", + "value": "fantasy" + }, + { + "label": "فنون قتال", + "value": "martial-arts" + }, + { + "label": "كوميديا", + "value": "comedy" + }, + { + "label": "مغامرة", + "value": "adventure" + }, + { + "label": "ميكا", + "value": "mecha" + }, + { + "label": "نفسي", + "value": "psychological" + }, + { + "label": "ون شوت", + "value": "one-shot" + }, + { + "label": "ووشيا", + "value": "wuxia" + } + ], + "type": "Picker" + } + }, + "options": { + "lang": "Arabic" + } + }, + { + "id": "teamxnovel", + "sourceSite": "https://teamxnovel.com/", + "sourceName": "TeamXNovel", + "options": { + "useNewChapterEndpoint": true, + "lang": "Arabic" + } + }, + { + "id": "turkcelightnovels", + "sourceSite": "https://turkcelightnovels.com/", + "sourceName": "TurkceLightNovels", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "light-novel", + "novel": "light-novel", + "chapter": "light-novel" + }, + "lang": "Turkish" + } + }, + { + "id": "sonicmtl", + "sourceSite": "https://www.sonicmtl.com/", + "sourceName": "SonicMTL", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Doujinshi", + "value": "doujinshi" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Soft Yaoi", + "value": "soft-yaoi" + }, + { + "label": "Soft Yuri", + "value": "soft-yuri" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Urban Life", + "value": "urban-life" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "mtlnovel.club", + "sourceSite": "https://mtlnovel.club/", + "sourceName": "MTLNovel.Club", + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "guavaread", + "sourceSite": "https://guavaread.com/", + "sourceName": "Guavaread", + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "sweetEscapeTL", + "sourceSite": "https://sweetescapetranslations.com/", + "sourceName": "Sweet Escape Translations", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Modern", + "value": "modern" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "R-15", + "value": "r-15" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "manga", + "novel": "manga", + "chapter": "manga", + "genres": "manga-genre" + }, + "useNewChapterEndpoint": false + } + }, + { + "id": "fanTLS", + "sourceSite": "https://fanstranslations.com/", + "sourceName": "Fans Translations", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "riwyat", + "sourceSite": "https://riwyat.com/", + "sourceName": "Riwyat", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "أكشن", + "value": "%d8%a3%d9%83%d8%b4%d9%86" + }, + { + "label": "أيتشي", + "value": "%d8%a3%d9%8a%d8%aa%d8%b4%d9%8a" + }, + { + "label": "استراتجي", + "value": "%d8%a7%d8%b3%d8%aa%d8%b1%d8%a7%d8%aa%d8%ac%d9%8a" + }, + { + "label": "العصر الحديث", + "value": "%d8%a7%d9%84%d8%b9%d8%b5%d8%b1-%d8%a7%d9%84%d8%ad%d8%af%d9%8a%d8%ab" + }, + { + "label": "انتقام", + "value": "%d8%a7%d9%86%d8%aa%d9%82%d8%a7%d9%85" + }, + { + "label": "بالغ", + "value": "%d8%a8%d8%a7%d9%84%d8%ba" + }, + { + "label": "بناء مملكة", + "value": "%d8%a8%d9%86%d8%a7%d8%a1-%d9%85%d9%85%d9%84%d9%83%d8%a9" + }, + { + "label": "بوليسي", + "value": "%d8%a8%d9%88%d9%84%d9%8a%d8%b3%d9%8a" + }, + { + "label": "تاريخي", + "value": "%d8%aa%d8%a7%d8%b1%d9%8a%d8%ae%d9%8a" + }, + { + "label": "جوسي", + "value": "%d8%ac%d9%88%d8%b3%d9%8a" + }, + { + "label": "حريم", + "value": "%d8%ad%d8%b1%d9%8a%d9%85" + }, + { + "label": "حياة يومية", + "value": "%d8%ad%d9%8a%d8%a7%d8%a9-%d9%8a%d9%88%d9%85%d9%8a%d8%a9" + }, + { + "label": "خيال", + "value": "%d8%ae%d9%8a%d8%a7%d9%84" + }, + { + "label": "خيال علمي", + "value": "%d8%ae%d9%8a%d8%a7%d9%84-%d8%b9%d9%84%d9%85%d9%8a" + }, + { + "label": "دراما", + "value": "%d8%af%d8%b1%d8%a7%d9%85%d8%a7" + }, + { + "label": "رعب", + "value": "%d8%b1%d8%b9%d8%a8" + }, + { + "label": "رومانسية", + "value": "%d8%b1%d9%88%d9%85%d8%a7%d9%86%d8%b3%d9%8a%d8%a9" + }, + { + "label": "رياضي", + "value": "%d8%b1%d9%8a%d8%a7%d8%b6%d9%8a" + }, + { + "label": "زيانشيا", + "value": "xianxia" + }, + { + "label": "سنين", + "value": "%d8%b3%d9%86%d9%8a%d9%86" + }, + { + "label": "شريحة حياة", + "value": "%d8%b4%d8%b1%d9%8a%d8%ad%d8%a9-%d8%ad%d9%8a%d8%a7%d8%a9" + }, + { + "label": "شوانهوان", + "value": "xuanhuan" + }, + { + "label": "شوجو", + "value": "%d8%b4%d9%88%d8%ac%d9%88" + }, + { + "label": "شونين", + "value": "%d8%b4%d9%88%d9%86%d9%8a%d9%86" + }, + { + "label": "شيانشيا", + "value": "%d8%b4%d9%8a%d8%a7%d9%86%d8%b4%d9%8a%d8%a7" + }, + { + "label": "عسكري", + "value": "%d8%b9%d8%b3%d9%83%d8%b1%d9%8a" + }, + { + "label": "غموض", + "value": "%d8%ba%d9%85%d9%88%d8%b6" + }, + { + "label": "فانتازيا", + "value": "%d9%81%d8%a7%d9%86%d8%aa%d8%a7%d8%b2%d9%8a%d8%a7" + }, + { + "label": "فنون قتالية", + "value": "%d9%81%d9%86%d9%88%d9%86-%d9%82%d8%aa%d8%a7%d9%84%d9%8a%d8%a9" + }, + { + "label": "قوى خارقة", + "value": "%d9%82%d9%88%d9%89-%d8%ae%d8%a7%d8%b1%d9%82%d8%a9" + }, + { + "label": "كوميديا", + "value": "%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7" + }, + { + "label": "كوميك", + "value": "%d9%83%d9%88%d9%85%d9%8a%d9%83" + }, + { + "label": "للكبار", + "value": "%d9%84%d9%84%d9%83%d8%a8%d8%a7%d8%b1" + }, + { + "label": "مأساة", + "value": "%d9%85%d8%a3%d8%b3%d8%a7%d8%a9" + }, + { + "label": "مانجا", + "value": "%d9%85%d8%a7%d9%86%d8%ac%d8%a7" + }, + { + "label": "مانها", + "value": "%d9%85%d8%a7%d9%86%d9%87%d8%a7" + }, + { + "label": "مانهوا", + "value": "%d9%85%d8%a7%d9%86%d9%87%d9%88%d8%a7" + }, + { + "label": "مدرسي", + "value": "%d9%85%d8%af%d8%b1%d8%b3%d9%8a" + }, + { + "label": "مصاصي دماء", + "value": "%d9%85%d8%b5%d8%a7%d8%b5%d9%8a-%d8%af%d9%85%d8%a7%d8%a1" + }, + { + "label": "مغامرة", + "value": "%d9%85%d8%ba%d8%a7%d9%85%d8%b1%d8%a9" + }, + { + "label": "مكتملة", + "value": "%d9%85%d9%83%d8%aa%d9%85%d9%84%d8%a9" + }, + { + "label": "نفسي", + "value": "%d9%86%d9%81%d8%b3%d9%8a" + }, + { + "label": "نهاية العالم", + "value": "%d9%86%d9%87%d8%a7%d9%8a%d8%a9-%d8%a7%d9%84%d8%b9%d8%a7%d9%84%d9%85" + }, + { + "label": "واب تون", + "value": "%d9%88%d8%a7%d8%a8-%d8%aa%d9%88%d9%86" + }, + { + "label": "وان شوت", + "value": "%d9%88%d8%a7%d9%86-%d8%b4%d9%88%d8%aa" + } + ], + "type": "Picker" + } + }, + "options": { + "useNewChapterEndpoint": true, + "lang": "Arabic" + } + }, + { + "id": "novelstic", + "sourceSite": "https://novelstic.com/", + "sourceName": "Novelstic", + "options": { + "useNewChapterEndpoint": true + } + }, + { + "id": "neosekaiTLS", + "sourceSite": "https://www.neosekaitranslations.com/", + "sourceName": "NeoSekai Translations", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-Fi", + "value": "sci-fi" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + } + ], + "type": "Picker" + } + } + }, + { + "id": "mtl-novel", + "sourceSite": "https://mtl-novel.com/", + "sourceName": "MTL-Novel", + "options": { + "path": { + "genres": "manga-genre" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "zetroTL", + "sourceSite": "https://zetrotranslation.com/", + "sourceName": "Zetro Translation", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Dark Elf", + "value": "dark-elf" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "NTR", + "value": "ntr" + }, + { + "label": "Original Works", + "value": "original-works" + }, + { + "label": "Rom-Com", + "value": "rom-com" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School", + "value": "school" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Villain", + "value": "villain" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "genres": "genre" + } + } + }, + { + "id": "nocturneTLS", + "sourceSite": "https://nocturnetls.net/", + "sourceName": "Nocturne Translations", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adult", + "value": "adult" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Anime", + "value": "anime" + }, + { + "label": "Cartoon", + "value": "cartoon" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Comic", + "value": "comic" + }, + { + "label": "Cooking", + "value": "cooking" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Doujinshi", + "value": "doujinshi" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Live action", + "value": "live-action" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "One shot", + "value": "one-shot" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Soft Yaoi", + "value": "soft-yaoi" + }, + { + "label": "Soft Yuri", + "value": "soft-yuri" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Webtoon", + "value": "webtoon" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "novels", + "novel": "novels", + "chapter": "novels", + "genres": "manga-genre" + } + } + }, + { + "id": "novelroom", + "sourceSite": "https://novelroom.net/", + "sourceName": "Novelroom.net", + "options": { + "path": { + "novels": "manga", + "novel": "manga", + "chapter": "manga" + } + } + }, + { + "id": "novelr18", + "sourceSite": "https://novelr18.com/", + "sourceName": "NovelR18", + "options": { + "path": { + "novel": "manga", + "chapter": "manga" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "webnoveloku", + "sourceSite": "https://www.webnoveloku.com/", + "sourceName": "WebNovelOku", + "filters": { + "sort": { + "label": "Sırala", + "value": "", + "options": [ + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "En Son", + "value": "latest" + }, + { + "label": "Görüntülenme", + "value": "views" + }, + { + "label": "Popülarite", + "value": "trending" + }, + { + "label": "Reyting", + "value": "rating" + }, + { + "label": "Yeni", + "value": "new-manga" + } + ], + "type": "Picker" + } + }, + "options": { + "lang": "Turkish" + } + }, + { + "id": "LightNovelUpdates", + "sourceSite": "https://www.lightnovelupdates.com/", + "sourceName": "Light Novel Updates", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Chinese", + "value": "chinese" + }, + { + "label": "Chinese Novel", + "value": "chinese-novel" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Filipino", + "value": "filipino" + }, + { + "label": "Filipino Novel", + "value": "filipino-novel" + }, + { + "label": "Gender Bender", + "value": "gender-bender" + }, + { + "label": "Genre", + "value": "genre" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Indonesia", + "value": "indonesia" + }, + { + "label": "Indonesia Novel", + "value": "indonesia-novel" + }, + { + "label": "Japanese", + "value": "japanese" + }, + { + "label": "Josei", + "value": "josei" + }, + { + "label": "Khmer", + "value": "khmer" + }, + { + "label": "Korean", + "value": "korean" + }, + { + "label": "Korean Novel", + "value": "korean-novel" + }, + { + "label": "Language", + "value": "language" + }, + { + "label": "Light Novel", + "value": "light-novel" + }, + { + "label": "Lolicon", + "value": "lolicon" + }, + { + "label": "Malaysian", + "value": "malaysian" + }, + { + "label": "Malaysian Novel", + "value": "malaysian-novel" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "N/A", + "value": "n-a" + }, + { + "label": "Novel Type", + "value": "novel-type" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shotacon", + "value": "shotacon" + }, + { + "label": "Shoujo", + "value": "shoujo" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Shounen Ai", + "value": "shounen-ai" + }, + { + "label": "Slice of Life", + "value": "slice-of-life-3" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "Thai", + "value": "thai" + }, + { + "label": "Thai Novel", + "value": "thai-novel" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Vietnamese", + "value": "vietnamese" + }, + { + "label": "Vietnamese Novel", + "value": "vietnamese-novel" + }, + { + "label": "Web Novel", + "value": "web-novel" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Xianxia", + "value": "xianxia" + }, + { + "label": "Xuanhuan", + "value": "xuanhuan" + }, + { + "label": "Yaoi", + "value": "yaoi" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "type": "Picker" + } + } + }, + { + "id": "foxaholic", + "sourceSite": "https://www.foxaholic.com/", + "sourceName": "Foxaholic" + }, + { + "id": "nitromanga", + "sourceSite": "https://nitromanga.com/", + "sourceName": "Nitro Manga", + "filters": { + "sort": { + "label": "Order by", + "value": "", + "options": [ + { + "label": "Rating", + "value": "rating" + }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Latest", + "value": "latest" + }, + { + "label": "Most Views", + "value": "views" + }, + { + "label": "New", + "value": "new-manga" + }, + { + "label": "Trending", + "value": "trending" + } + ], + "type": "Picker" + }, + "genres": { + "label": "GENRES", + "value": "", + "options": [ + { + "label": "Action", + "value": "action" + }, + { + "label": "Adventure", + "value": "adventure" + }, + { + "label": "Apocalyptic", + "value": "apocalyptic" + }, + { + "label": "Beasts", + "value": "beasts" + }, + { + "label": "Cheat Systems", + "value": "cheat-systems" + }, + { + "label": "Comedy", + "value": "comedy" + }, + { + "label": "Completed", + "value": "completed" + }, + { + "label": "Crime", + "value": "crime" + }, + { + "label": "Cultivation", + "value": "cultivation" + }, + { + "label": "Demons", + "value": "demons" + }, + { + "label": "Drama", + "value": "drama" + }, + { + "label": "Dungeons", + "value": "dungeons" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Fantasy", + "value": "fantasy" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "Genius MC", + "value": "genius-mc" + }, + { + "label": "Ghosts", + "value": "ghosts" + }, + { + "label": "Harem", + "value": "harem" + }, + { + "label": "Historical", + "value": "historical" + }, + { + "label": "Horror", + "value": "horror" + }, + { + "label": "Hunter", + "value": "hunter" + }, + { + "label": "Isekai", + "value": "isekai" + }, + { + "label": "Magic", + "value": "magic" + }, + { + "label": "Manga", + "value": "manga" + }, + { + "label": "Manhua", + "value": "manhua" + }, + { + "label": "Manhwa", + "value": "manhwa" + }, + { + "label": "Martial Arts", + "value": "martial-arts" + }, + { + "label": "Mature", + "value": "mature" + }, + { + "label": "Mecha", + "value": "mecha" + }, + { + "label": "Medical", + "value": "medical" + }, + { + "label": "Monsters", + "value": "monsters" + }, + { + "label": "Murim", + "value": "murim" + }, + { + "label": "Mystery", + "value": "mystery" + }, + { + "label": "Novel", + "value": "novel" + }, + { + "label": "Overpowered", + "value": "overpowered" + }, + { + "label": "Psychological", + "value": "psychological" + }, + { + "label": "Rebirth", + "value": "rebirth" + }, + { + "label": "Regression", + "value": "regression" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Revenge", + "value": "revenge" + }, + { + "label": "Romance", + "value": "romance" + }, + { + "label": "School Life", + "value": "school-life" + }, + { + "label": "Sci-fi", + "value": "sci-fi" + }, + { + "label": "Seinen", + "value": "seinen" + }, + { + "label": "Shounen", + "value": "shounen" + }, + { + "label": "Slice of Life", + "value": "slice-of-life" + }, + { + "label": "Sports", + "value": "sports" + }, + { + "label": "Super Power", + "value": "super-power" + }, + { + "label": "Supernatural", + "value": "supernatural" + }, + { + "label": "System", + "value": "system" + }, + { + "label": "Time Travel", + "value": "time-travel" + }, + { + "label": "Tragedy", + "value": "tragedy" + }, + { + "label": "Video Games", + "value": "video-games" + }, + { + "label": "Webtoon", + "value": "webtoon" + }, + { + "label": "Wuxia", + "value": "wuxia" + }, + { + "label": "Zombie", + "value": "zombie" + } + ], + "type": "Picker" + } + }, + "options": { + "path": { + "genres": "mangas-genre", + "novels": "mangas-genre/novel" + }, + "useNewChapterEndpoint": true + } + }, + { + "id": "kiniga", + "sourceSite": "https://kiniga.com/", + "sourceName": "Kiniga", + "filters": { + "sort": { + "label": "Orden por", + "options": [ + { "label": "Relevância", "value": "" }, + { + "label": "A-Z", + "value": "alphabet" + }, + { + "label": "Mais Antigo", + "value": "latest" + }, + { + "label": "Mais vistos", + "value": "views" + }, + { + "label": "Tendência", + "value": "trending" + }, + { + "label": "Avaliação", + "value": "rating" + }, + { + "label": "Novo", + "value": "new-manga" + } + ], + "value": "", + "type": "Picker" + }, + "genres": { + "label": "Generos", + "options": [ + { "label": "Sem Filtro", "value": "" }, + { "label": "Ação", "value": "action" }, + { "label": "Artes Marciais", "value": "artes-marciais" }, + { "label": "Aventura", "value": "aventura" }, + { "label": "Comédia", "value": "comedia" }, + { "label": "Contemporâneo", "value": "contemporaneo" }, + { "label": "Contos Originais", "value": "contos-originais" }, + { "label": "Crime", "value": "crime" }, + { "label": "Cyberpunk", "value": "cyberpunk" }, + { "label": "Destaque", "value": "destaque" }, + { "label": "Distopia", "value": "distopia" }, + { "label": "Drama", "value": "drama" }, + { "label": "Ecchi", "value": "ecchi" }, + { "label": "Espacial", "value": "espacial" }, + { "label": "Esportes", "value": "esportes" }, + { "label": "Fanfic", "value": "fanfic" }, + { "label": "Fantasia", "value": "fantasia" }, + { "label": "Ficção Científica", "value": "ficcao-cientifica" }, + { "label": "Gastronomia", "value": "gastronomia" }, + { "label": "Harem", "value": "harem" }, + { "label": "Histórico", "value": "historico" }, + { "label": "Horror", "value": "horror" }, + { "label": "Infantil", "value": "infantil" }, + { "label": "Isekai", "value": "isekai" }, + { "label": "Jogos", "value": "jogos" }, + { "label": "LGBT+", "value": "lgbt" }, + { "label": "Magia", "value": "magia" }, + { "label": "Mecha", "value": "mecha" }, + { "label": "Medieval", "value": "medieval" }, + { "label": "Militar", "value": "militar" }, + { "label": "Mistério", "value": "misterio" }, + { "label": "Mitologia", "value": "mitologia" }, + { "label": "Moderno", "value": "moderno" }, + { "label": "Pós-Apocalíptico", "value": "pos-apocaliptico" }, + { "label": "Psicológico", "value": "psicologico" }, + { "label": "Realidade Virtual", "value": "realidade-virtual" }, + { "label": "Recomendado", "value": "recomendado" }, + { "label": "Romance", "value": "romance" }, + { "label": "RPG", "value": "rpg" }, + { "label": "Ficção Científica", "value": "sci-fi" }, + { "label": "Seinen", "value": "seinen" }, + { "label": "Shounen", "value": "shounen" }, + { "label": "Sistema de Jogo", "value": "sistema-de-jogo" }, + { "label": "Slice of Life", "value": "slice-of-life" }, + { "label": "SNKHome", "value": "snkhome" }, + { "label": "Sobrenatural", "value": "sobrenatural" }, + { "label": "Somente na Kiniga", "value": "somente-na-kiniga" }, + { "label": "Suspense", "value": "suspense" }, + { "label": "Terror", "value": "terror" }, + { "label": "Terror Psicológico", "value": "terror-psicologico" }, + { "label": "Traduções", "value": "traducoes" }, + { "label": "Tragédia", "value": "tragedia" }, + { "label": "Urbano", "value": "urbano" }, + { "label": "Vida Escolar", "value": "vida-escolar" } + ], + "value": "", + "type": "Picker" + } + }, + "options": { + "path": { + "novels": "projetos", + "novel": "projeto", + "chapter": "capitulo", + "genres": "genero" + }, + "lang": "Portuguese" + } + } ] - diff --git a/scripts/multisrc/madara/template.ts b/scripts/multisrc/madara/template.ts index d721f11..5c08ba7 100644 --- a/scripts/multisrc/madara/template.ts +++ b/scripts/multisrc/madara/template.ts @@ -4,275 +4,321 @@ import { Plugin } from "@typings/plugin"; import { load as parseHTML } from "cheerio"; import { defaultCover } from "@libs/defaultCover"; import { NovelStatus } from "@libs/novelStatus"; -import { parseMadaraDate } from "@libs/parseMadaraDate"; import dayjs from "dayjs"; +const delay = (ms: number) => new Promise((res) => setTimeout(res, ms)); +const includesAny = (str: string, keywords: string[]) => + new RegExp(keywords.join("|")).test(str); + interface MadaraOptionPath { - genres?: string; - novels?: string; - novel?: string; - chapter?: string; + genres?: string; + novels?: string; + novel?: string; + chapter?: string; } const MadaraDefaultPath = { - genres: "novel-genre", - novels: "novel", - novel: "novel", - chapter: "novel", + genres: "novel-genre", + novels: "novel", + novel: "novel", + chapter: "novel", }; interface MadaraOptions { - useNewChapterEndpoint?: boolean; - path?: MadaraOptionPath; - lang?: string; - orderBy?: string; + useNewChapterEndpoint?: boolean; + path?: MadaraOptionPath; + lang?: string; + orderBy?: string; } export interface MadaraMetadata { - id: string; - sourceSite: string; - sourceName: string; - options?: MadaraOptions; - filters?: Filters; + id: string; + sourceSite: string; + sourceName: string; + options?: MadaraOptions; + filters?: Filters; } class MadaraPlugin implements Plugin.PluginBase { - id: string; - name: string; - icon: string; - site: string; - version: string; - options?: MadaraOptions; - filters?: Filters | undefined; + id: string; + name: string; + icon: string; + site: string; + version: string; + options?: MadaraOptions; + filters?: Filters | undefined; - constructor(metadata: MadaraMetadata) { - this.id = metadata.id; - this.name = metadata.sourceName + "[madara]"; - const iconFileName = metadata.sourceName - .replace(/\s+/g, "") - .toLowerCase(); - this.icon = `multisrc/madara/icons/${iconFileName}.png`; - this.site = metadata.sourceSite; - this.version = "1.0.0"; - this.options = metadata.options; - this.filters = metadata.filters; + constructor(metadata: MadaraMetadata) { + this.id = metadata.id; + this.name = metadata.sourceName; + const iconFileName = metadata.sourceName.replace(/\s+/g, "").toLowerCase(); + this.icon = `multisrc/madara/icons/${iconFileName}.png`; + this.site = metadata.sourceSite; + this.version = "1.0.0"; + this.options = metadata.options; + this.filters = metadata.filters; + } + async popularNovels( + pageNo: number, + { + filters, + showLatestNovels, + }: Plugin.PopularNovelsOptions, + ): Promise { + const novels: Plugin.NovelItem[] = []; + + let url = this.site; + if (filters?.genres?.value) { + url += + (this.options?.path?.genres || MadaraDefaultPath.genres) + + "/" + filters.genres.value; + } else { + url += this.options?.path?.novels || MadaraDefaultPath.novels; } - async popularNovels( - pageNo: number, - { - filters, - showLatestNovels, - }: Plugin.PopularNovelsOptions - ): Promise { - const novels: Plugin.NovelItem[] = []; - let url = this.site; - if (filters?.genres?.value) { - url += (this.options?.path?.genres || MadaraDefaultPath.genres) + - "/" + - filters.genres.value; - } else { - url += this.options?.path?.novels || MadaraDefaultPath.novels; - } + url += "/page/" + pageNo + "/?m_orderby=" + + (showLatestNovels ? "latest" : filters?.sort?.value || "rating"); - url += - "/page/" + - pageNo + - "/" + - "?m_orderby=" + - (showLatestNovels ? "latest" : filters?.sort?.value || "rating"); + const body = await fetchApi(url).then((res) => res.text()); + const loadedCheerio = parseHTML(body); - const body = await fetchApi(url).then((res) => res.text()); + loadedCheerio(".manga-title-badges").remove(); - const loadedCheerio = parseHTML(body); + loadedCheerio(".page-item-detail").each(function () { + const novelName = loadedCheerio(this).find(".post-title").text().trim(); + const image = loadedCheerio(this).find("img"); + const novelCover = image.attr("data-src") || image.attr("src"); + const novelUrl = + loadedCheerio(this).find(".post-title").find("a").attr("href") || ""; + if (!novelName || !novelUrl) return; - loadedCheerio(".manga-title-badges").remove(); + const novel: Plugin.NovelItem = { + name: novelName, + cover: novelCover, + url: novelUrl, + }; - loadedCheerio(".page-item-detail").each(function () { - const novelName = loadedCheerio(this) - .find(".post-title") - .text() - .trim(); - let image = loadedCheerio(this).find("img"); - const novelCover = image.attr("data-src") || image.attr("src"); + novels.push(novel); + }); - let novelUrl = - loadedCheerio(this) - .find(".post-title") - .find("a") - .attr("href") || ""; - const novel: Plugin.NovelItem = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; + return novels; + } + async parseNovelAndChapters(novelUrl: string): Promise { + const novel: Plugin.SourceNovel = { + url: novelUrl, + }; - novels.push(novel); - }); + const body = await fetchApi(novelUrl).then((res) => res.text()); - return novels; + let loadedCheerio = parseHTML(body); + + loadedCheerio(".manga-title-badges, #manga-title span").remove(); + novel.name = + loadedCheerio(".post-title h1").text().trim() || + loadedCheerio("#manga-title h1").text(); + + novel.cover = + loadedCheerio(".summary_image > a > img").attr("data-lazy-src") || + loadedCheerio(".summary_image > a > img").attr("data-src") || + loadedCheerio(".summary_image > a > img").attr("src") || + loadedCheerio(".summary_image > a > img").attr("src") || + defaultCover; + + loadedCheerio(".post-content_item, .post-content").each(function () { + const detailName = loadedCheerio(this).find("h5").text().trim(); + const detail = loadedCheerio(this).find(".summary-content").text().trim(); + + switch (detailName) { + case "Genre(s)": + case "Género(s)": + case "التصنيفات": + novel.genres = detail; + break; + case "Author(s)": + case "Autor(es)": + case "المؤلف": + case "المؤلف (ين)": + novel.author = detail; + break; + case "Status": + case "Estado": + novel.status = + detail.includes("OnGoing") || detail.includes("مستمرة") + ? NovelStatus.Ongoing + : NovelStatus.Completed; + break; + } + }); + + loadedCheerio("div.summary__content .code-block,script").remove(); + novel.summary = + loadedCheerio("div.summary__content").text().trim() || + loadedCheerio("#tab-manga-about").text().trim() || + loadedCheerio('.post-content_item h5:contains("Summary")') + .next() + .text() + .trim(); + const chapters: Plugin.ChapterItem[] = []; + let html = ""; + + if (this.options?.useNewChapterEndpoint) { + html = await fetchApi(novelUrl + "ajax/chapters/", { + method: "POST", + }).then((res) => res.text()); + } else { + const novelId = + loadedCheerio(".rating-post-id").attr("value") || + loadedCheerio("#manga-chapters-holder").attr("data-id") || + ""; + + const formData = new FormData(); + formData.append("action", "manga_get_chapters"); + formData.append("manga", novelId); + + html = await fetchApi(this.site + "wp-admin/admin-ajax.php", { + method: "POST", + body: formData, + }).then((res) => res.text()); } - async parseNovelAndChapters(novelUrl: string): Promise { - const novel: Plugin.SourceNovel = { - url: novelUrl, - }; - const body = await fetchApi(novelUrl).then((res) => res.text()); - - let loadedCheerio = parseHTML(body); - - loadedCheerio(".manga-title-badges, #manga-title span").remove(); - novel.name = - loadedCheerio(".post-title h1").text().trim() || - loadedCheerio("#manga-title h1").text(); - - novel.cover = - loadedCheerio(".summary_image > a > img").attr("data-lazy-src") || - loadedCheerio(".summary_image > a > img").attr("data-src") || - loadedCheerio(".summary_image > a > img").attr("src") || - defaultCover; - - loadedCheerio(".post-content_item, .post-content").each(function () { - const detailName = loadedCheerio(this).find("h5").text().trim(); - const detail = loadedCheerio(this) - .find(".summary-content") - .text() - .trim(); - - switch (detailName) { - case "Genre(s)": - case "التصنيفات": - novel.genres = detail.replace(/[\\t\\n]/g, ","); - break; - case "Author(s)": - case "المؤلف": - case "المؤلف (ين)": - novel.author = detail; - break; - case "Status": - case "الحالة": - novel.status = - detail.includes("OnGoing") || detail.includes("مستمرة") - ? NovelStatus.Ongoing - : NovelStatus.Completed; - break; - } - }); - - loadedCheerio("div.summary__content .code-block,script").remove(); - novel.summary = - loadedCheerio("div.summary__content").text().trim() || - loadedCheerio("#tab-manga-about").text().trim() || - loadedCheerio('.post-content_item h5:contains("Summary")') - .next() - .text() - .trim(); - - let html; - - if (this.options?.useNewChapterEndpoint !== true) { - const novelId = - loadedCheerio(".rating-post-id").attr("value") || - loadedCheerio("#manga-chapters-holder").attr("data-id") || - ""; - - const formData = new FormData(); - formData.append("action", "manga_get_chapters"); - formData.append("manga", novelId); - - html = await fetchApi(this.site + "wp-admin/admin-ajax.php", { - method: "POST", - body: formData, - }).then((res) => res.text()); - } else { - html = await fetchApi(novelUrl + "ajax/chapters/", { - method: "POST", - }).then((res) => res.text()); - } - - if (html !== "0") { - loadedCheerio = parseHTML(html); - } - - const chapters: Plugin.ChapterItem[] = []; - loadedCheerio(".wp-manga-chapter").each(function () { - const chapterName = loadedCheerio(this).find("a").text().trim(); - - let releaseDate = null; - releaseDate = loadedCheerio(this) - .find("span.chapter-release-date") - .text() - .trim(); - - if (releaseDate) { - releaseDate = parseMadaraDate(releaseDate); - } else { - /** - * Insert current date - */ - - releaseDate = dayjs().format("LL"); - } - - let chapterUrl = loadedCheerio(this).find("a").attr("href") || ""; - - chapters.push({ - name: chapterName, - releaseTime: releaseDate, - url: chapterUrl, - }); - }); - - novel.chapters = chapters.reverse(); - return novel; + if (html !== "0") { + loadedCheerio = parseHTML(html); } - async parseChapter(chapterUrl: string): Promise { - const body = await fetchApi(chapterUrl).then((res) => res.text()); - const loadedCheerio = parseHTML(body); - const chapterText = - loadedCheerio(".text-left").html() || - loadedCheerio(".text-right").html() || - loadedCheerio(".entry-content").html() || - ""; + const totalChapters = loadedCheerio(".wp-manga-chapter").length; + loadedCheerio(".wp-manga-chapter").each((chapterIndex, element) => { + const chapterName = loadedCheerio(element).find("a").text().trim(); - return chapterText; + let releaseDate = loadedCheerio(element) + .find("span.chapter-release-date") + .text() + .trim(); + + if (releaseDate) { + releaseDate = this.parseData(releaseDate); + } else { + releaseDate = dayjs().format("LL"); + } + + let chapterUrl = loadedCheerio(element).find("a").attr("href") || ""; + + chapters.push({ + name: chapterName, + url: chapterUrl, + releaseTime: releaseDate || null, + chapterNumber: totalChapters - chapterIndex, + }); + }); + + novel.chapters = chapters.reverse(); + return novel; + } + async parseChapter(chapterUrl: string): Promise { + const body = await fetchApi(chapterUrl).then((res) => res.text()); + + const loadedCheerio = parseHTML(body); + const chapterText = + loadedCheerio(".text-left").html() || + loadedCheerio(".text-right").html() || + loadedCheerio(".entry-content").html() || + loadedCheerio(".c-blog-post > div > div:nth-child(2)").html() || + ""; + + return chapterText; + } + async searchNovels( + searchTerm: string, + pageNo?: number | undefined, + ): Promise { + const novels: Plugin.NovelItem[] = []; + const url = this.site + "?s=" + searchTerm + "&post_type=wp-manga"; + + const body = await fetchApi(url).then((res) => res.text()); + + const loadedCheerio = parseHTML(body); + + loadedCheerio(".c-tabs-item__content").each(function () { + const novelName = loadedCheerio(this).find(".post-title").text().trim(); + + let image = loadedCheerio(this).find("img"); + const novelCover = image.attr("data-src") || image.attr("src"); + + let novelUrl = + loadedCheerio(this).find(".post-title").find("a").attr("href") || ""; + const novel = { + name: novelName, + cover: novelCover, + url: novelUrl, + }; + + novels.push(novel); + }); + return novels; + } + + fetchImage = fetchFile; + + parseData = (date: string) => { + const dayJSDate = dayjs(); // today + const timeAgo = date.match(/\d+/)?.[0] || ""; + const timeAgoInt = parseInt(timeAgo, 10); + + if (!timeAgo) return date; // there is no number! + + if (includesAny(date, ["detik", "segundo", "second", "วินาที"])) { + dayJSDate.subtract(timeAgoInt, "second"); // go back N seconds + } else if ( + includesAny(date, [ + "menit", + "dakika", + "min", + "minute", + "minuto", + "นาที", + "دقائق", + ]) + ) { + dayJSDate.subtract(timeAgoInt, "minute"); // go back N minute + } else if ( + includesAny(date, [ + "jam", + "saat", + "heure", + "hora", + "hour", + "ชั่วโมง", + "giờ", + "ore", + "ساعة", + "小时", + ]) + ) { + dayJSDate.subtract(timeAgoInt, "hours"); // go back N hours + } else if ( + includesAny(date, [ + "hari", + "gün", + "jour", + "día", + "dia", + "day", + "วัน", + "ngày", + "giorni", + "أيام", + "天", + ]) + ) { + dayJSDate.subtract(timeAgoInt, "days"); // go back N days + } else if (includesAny(date, ["week", "semana"])) { + dayJSDate.subtract(timeAgoInt, "week"); // go back N a week + } else if (includesAny(date, ["month", "mes"])) { + dayJSDate.subtract(timeAgoInt, "month"); // go back N months + } else if (includesAny(date, ["year", "año"])) { + dayJSDate.subtract(timeAgoInt, "year"); // go back N years + } else { + return date; } - async searchNovels( - searchTerm: string, - pageNo?: number | undefined - ): Promise { - const novels: Plugin.NovelItem[] = []; - const url = this.site + "?s=" + searchTerm + "&post_type=wp-manga"; - const body = await fetchApi(url).then((res) => res.text()); - - const loadedCheerio = parseHTML(body); - - loadedCheerio(".c-tabs-item__content").each(function () { - const novelName = loadedCheerio(this) - .find(".post-title") - .text() - .trim(); - - let image = loadedCheerio(this).find("img"); - const novelCover = image.attr("data-src") || image.attr("src"); - - let novelUrl = - loadedCheerio(this) - .find(".post-title") - .find("a") - .attr("href") || ""; - const novel = { - name: novelName, - cover: novelCover, - url: novelUrl, - }; - - novels.push(novel); - }); - return novels; - } - async fetchImage(url: string): Promise { - return await fetchFile(url, {}); - } + return dayJSDate.format("LL"); + }; } diff --git a/scripts/multisrc/readwn/settings.json b/scripts/multisrc/readwn/settings.json index 5057f55..ef4480f 100644 --- a/scripts/multisrc/readwn/settings.json +++ b/scripts/multisrc/readwn/settings.json @@ -76,10 +76,6 @@ "label": "Fantasy Romance", "value": "fantasy-romance" }, - { - "label": "Game", - "value": "game" - }, { "label": "Gender Bender", "value": "gender-bender" diff --git a/scripts/multisrc/readwn/sources.json b/scripts/multisrc/readwn/sources.json index 0b46816..63a1ab3 100644 --- a/scripts/multisrc/readwn/sources.json +++ b/scripts/multisrc/readwn/sources.json @@ -23,6 +23,10 @@ "label": "Fan-Fiction", "value": "fan-fiction" }, + { + "label": "Game", + "value": "game" + }, { "label": "Hentai", "value": "hentai" @@ -198,6 +202,10 @@ "label": "Academy", "value": "50" }, + { + "label": "Academystr", + "value": "6155" + }, { "label": "Acane", "value": "5993" @@ -362,6 +370,10 @@ "label": "Adventurer", "value": "4342" }, + { + "label": "Aesthetic", + "value": "6163" + }, { "label": "Affair", "value": "670" @@ -554,6 +566,10 @@ "label": "Alien", "value": "3111" }, + { + "label": "Alienbeast", + "value": "6186" + }, { "label": "Aliens", "value": "243" @@ -1902,6 +1918,10 @@ "label": "bewitching", "value": "2828" }, + { + "label": "Bgfellow", + "value": "6162" + }, { "label": "BickeringC", "value": "79" @@ -3530,6 +3550,10 @@ "label": "chromatics", "value": "5155" }, + { + "label": "Chronicles", + "value": "6169" + }, { "label": "Chronology", "value": "1451" @@ -3586,6 +3610,10 @@ "label": "CitySky1", "value": "4819" }, + { + "label": "Cityurban", + "value": "6159" + }, { "label": "city​​ya", "value": "2738" @@ -3614,6 +3642,10 @@ "label": "CivilServa", "value": "1491" }, + { + "label": "ciweimao", + "value": "6168" + }, { "label": "ClanBuildi", "value": "327" @@ -4034,6 +4066,10 @@ "label": "Comprehens", "value": "3119" }, + { + "label": "Comprehens", + "value": "6172" + }, { "label": "Comprehens", "value": "3071" @@ -7346,6 +7382,10 @@ "label": "FightingCo", "value": "2450" }, + { + "label": "Fightingfo", + "value": "6164" + }, { "label": "Fightingpi", "value": "5687" @@ -7574,6 +7614,10 @@ "label": "flowerdust", "value": "4400" }, + { + "label": "Flowerprot", + "value": "6171" + }, { "label": "Flowersblo", "value": "5952" @@ -7818,6 +7862,10 @@ "label": "FoxSpirits", "value": "256" }, + { + "label": "fqloo", + "value": "6183" + }, { "label": "Fragmentof", "value": "4696" @@ -8042,6 +8090,10 @@ "label": "gamealienV", "value": "2966" }, + { + "label": "Gamealienw", + "value": "6154" + }, { "label": "gameelemen", "value": "1627" @@ -9586,6 +9638,10 @@ "label": "hornreverb", "value": "4691" }, + { + "label": "Horor", + "value": "6160" + }, { "label": "horror", "value": "818" @@ -10754,6 +10810,14 @@ "label": "Jiaqi", "value": "4173" }, + { + "label": "JiDaoliu", + "value": "6170" + }, + { + "label": "Jin", + "value": "6176" + }, { "label": "JinglongTa", "value": "2763" @@ -13070,6 +13134,10 @@ "label": "Martialart", "value": "130" }, + { + "label": "Martialart", + "value": "6181" + }, { "label": "Martialart", "value": "5710" @@ -14734,6 +14802,10 @@ "label": "Noble", "value": "1600" }, + { + "label": "nobledaugh", + "value": "6190" + }, { "label": "Noblenessi", "value": "4832" @@ -14974,6 +15046,10 @@ "label": "NotYaoi", "value": "1032" }, + { + "label": "Novel", + "value": "6184" + }, { "label": "Nowadays", "value": "2604" @@ -15266,6 +15342,10 @@ "label": "Onlinegame", "value": "3168" }, + { + "label": "Onlinegame", + "value": "6193" + }, { "label": "OnlineGame", "value": "762" @@ -15542,6 +15622,10 @@ "label": "Overlord", "value": "1184" }, + { + "label": "overpower", + "value": "6156" + }, { "label": "Overpowerd", "value": "821" @@ -15606,6 +15690,10 @@ "label": "palace", "value": "5048" }, + { + "label": "Palacefigh", + "value": "6174" + }, { "label": "palacemaid", "value": "3452" @@ -16502,6 +16590,10 @@ "label": "Profession", "value": "3201" }, + { + "label": "Profession", + "value": "6153" + }, { "label": "Profession", "value": "4202" @@ -17046,6 +17138,10 @@ "label": "rakepig", "value": "5398" }, + { + "label": "RanchFarmi", + "value": "6182" + }, { "label": "randomstre", "value": "5631" @@ -17410,6 +17506,10 @@ "label": "rejoice", "value": "3228" }, + { + "label": "rejoiceine", + "value": "6188" + }, { "label": "Rejoiceint", "value": "4446" @@ -17526,6 +17626,10 @@ "label": "Reunion", "value": "1487" }, + { + "label": "Reunionaft", + "value": "6191" + }, { "label": "revenge", "value": "1398" @@ -18190,6 +18294,10 @@ "label": "sciencefic", "value": "1046" }, + { + "label": "Sciencefic", + "value": "6161" + }, { "label": "Scientist", "value": "1523" @@ -18342,6 +18450,10 @@ "label": "Sect", "value": "3547" }, + { + "label": "Sectbuildi", + "value": "6158" + }, { "label": "SectDevelo", "value": "692" @@ -19370,6 +19482,10 @@ "label": "Son-in-law", "value": "1461" }, + { + "label": "Son-in-law", + "value": "6166" + }, { "label": "Song", "value": "5695" @@ -20306,6 +20422,10 @@ "label": "supplier", "value": "3602" }, + { + "label": "Supporting", + "value": "6189" + }, { "label": "Supporting", "value": "5682" @@ -21578,6 +21698,10 @@ "label": "Time-Trave", "value": "1940" }, + { + "label": "timeandspa", + "value": "6173" + }, { "label": "TimeandSpa", "value": "1499" @@ -22434,6 +22558,14 @@ "label": "UrbanMilit", "value": "2505" }, + { + "label": "Urbanroman", + "value": "6157" + }, + { + "label": "UrbanRoman", + "value": "6187" + }, { "label": "urbanshark", "value": "2256" @@ -22798,6 +22930,10 @@ "label": "Wasteland", "value": "898" }, + { + "label": "wastestrea", + "value": "6185" + }, { "label": "WasteWoodA", "value": "2167" @@ -24142,6 +24278,10 @@ "label": "ZhangLuo", "value": "4703" }, + { + "label": "Zhangmenli", + "value": "6165" + }, { "label": "ZhangShuan", "value": "3669" @@ -24326,6 +24466,10 @@ "label": "半弦", "value": "3873" }, + { + "label": "双洁", + "value": "6178" + }, { "label": "夜独", "value": "6009" @@ -24334,6 +24478,10 @@ "label": "天律", "value": "6032" }, + { + "label": "女强", + "value": "6175" + }, { "label": "女神", "value": "3212" @@ -24346,6 +24494,10 @@ "label": "婚姻", "value": "5123" }, + { + "label": "嫡女", + "value": "6177" + }, { "label": "宋朝", "value": "3124" @@ -24434,6 +24586,10 @@ "label": "空间", "value": "3103" }, + { + "label": "群穿", + "value": "6192" + }, { "label": "肆灵", "value": "6123" @@ -24446,6 +24602,10 @@ "label": "蝉眠", "value": "5514" }, + { + "label": "西幻", + "value": "6167" + }, { "label": "谢邀", "value": "1904" @@ -24454,10 +24614,18 @@ "label": "财女", "value": "5989" }, + { + "label": "贵女", + "value": "6180" + }, { "label": "越泽", "value": "5963" }, + { + "label": "追妻", + "value": "6179" + }, { "label": "酣歌", "value": "2182" @@ -24540,6 +24708,10 @@ "label": "Farming", "value": "farming" }, + { + "label": "Game", + "value": "game" + }, { "label": "Games", "value": "games" @@ -24815,6 +24987,10 @@ "label": "Adventurer", "value": "1012" }, + { + "label": "Aesthetic", + "value": "3299" + }, { "label": "Affair", "value": "605" @@ -25663,6 +25839,10 @@ "label": "bewitching", "value": "2890" }, + { + "label": "Bgfellow", + "value": "3298" + }, { "label": "BickeringC", "value": "467" @@ -26619,6 +26799,10 @@ "label": "CityGod", "value": "2323" }, + { + "label": "Cityurban", + "value": "3293" + }, { "label": "city​​ya", "value": "2800" @@ -26639,6 +26823,10 @@ "label": "CivilServa", "value": "1527" }, + { + "label": "ciweimao", + "value": "3300" + }, { "label": "ClanBuildi", "value": "343" @@ -29031,6 +29219,10 @@ "label": "FoxSpirits", "value": "325" }, + { + "label": "fqloo", + "value": "3303" + }, { "label": "France", "value": "1533" @@ -29995,6 +30187,10 @@ "label": "HonkaiImpa", "value": "1425" }, + { + "label": "Horor", + "value": "3294" + }, { "label": "horror", "value": "825" @@ -31619,6 +31815,10 @@ "label": "Martialart", "value": "954" }, + { + "label": "Martialart", + "value": "3302" + }, { "label": "MartialArt", "value": "1508" @@ -32631,6 +32831,10 @@ "label": "notscary", "value": "2521" }, + { + "label": "Novel", + "value": "3305" + }, { "label": "Nowadays", "value": "2665" @@ -32675,6 +32879,10 @@ "label": "Official", "value": "3067" }, + { + "label": "Officialwo", + "value": "3304" + }, { "label": "ohmygod", "value": "2488" @@ -32807,6 +33015,10 @@ "label": "Onlinegame", "value": "3269" }, + { + "label": "Onlinegame", + "value": "3307" + }, { "label": "OnlineGame", "value": "776" @@ -32979,6 +33191,10 @@ "label": "Overlord", "value": "1231" }, + { + "label": "overpower", + "value": "3296" + }, { "label": "overpowere", "value": "1443" @@ -33839,6 +34055,10 @@ "label": "raisedache", "value": "2655" }, + { + "label": "RanchFarmi", + "value": "3301" + }, { "label": "RankingLis", "value": "1786" @@ -34443,6 +34663,10 @@ "label": "Sciencefic", "value": "1706" }, + { + "label": "Sciencefic", + "value": "3297" + }, { "label": "Scientist", "value": "1560" @@ -34539,6 +34763,10 @@ "label": "Sect", "value": "3018" }, + { + "label": "Sectbuildi", + "value": "3295" + }, { "label": "SectDevelo", "value": "507" @@ -36855,6 +37083,10 @@ "label": "urbanroman", "value": "3282" }, + { + "label": "UrbanRoman", + "value": "3306" + }, { "label": "urbanshark", "value": "2295" @@ -37722,7 +37954,7 @@ } }, { - "id": "Ltnovel.com", + "id": "ltnovel", "sourceSite": "https://www.ltnovel.com", "sourceName": "Ltnovel", "filters": { @@ -37737,6 +37969,10 @@ "label": "Ecchi", "value": "ecchi" }, + { + "label": "Game", + "value": "game" + }, { "label": "Mature", "value": "mature" @@ -41665,5 +41901,19807 @@ "type": "Picker" } } + }, + { + "id": "wuxiamtl", + "sourceSite": "https://www.wuxiamtl.com", + "sourceName": "WuxiaMTL", + "filters": { + "genres": { + "label": "Genre / Category", + "options": [ + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Faloo", + "value": "faloo" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Korean", + "value": "korean" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Urban", + "value": "urban" + }, + { + "label": "Virtual Reality", + "value": "virtual-reality" + } + ], + "value": "", + "type": "Picker" + }, + "tags": { + "label": "Tags", + "options": [ + { + "label": "A.I", + "value": "2941" + }, + { + "label": "Aaron&0", + "value": "1912" + }, + { + "label": "Abandoned", + "value": "3037" + }, + { + "label": "AbandonedC", + "value": "395" + }, + { + "label": "AbandonedC", + "value": "1198" + }, + { + "label": "Abandoning", + "value": "3174" + }, + { + "label": "Abilities", + "value": "1279" + }, + { + "label": "Ability", + "value": "819" + }, + { + "label": "AbilitySte", + "value": "97" + }, + { + "label": "ABO", + "value": "780" + }, + { + "label": "ABO(AlphaB", + "value": "1531" + }, + { + "label": "Abortion", + "value": "1284" + }, + { + "label": "AbsentPare", + "value": "255" + }, + { + "label": "absolutely", + "value": "2112" + }, + { + "label": "Abuse", + "value": "1269" + }, + { + "label": "AbusiveCha", + "value": "1" + }, + { + "label": "AbusiveCha", + "value": "1475" + }, + { + "label": "Abusivelov", + "value": "3009" + }, + { + "label": "Abyss", + "value": "2878" + }, + { + "label": "Academy", + "value": "8" + }, + { + "label": "AcasualPaw", + "value": "1290" + }, + { + "label": "Accelerate", + "value": "59" + }, + { + "label": "AcceptingD", + "value": "1096" + }, + { + "label": "ACGN", + "value": "1252" + }, + { + "label": "Acting", + "value": "52" + }, + { + "label": "Actingweak", + "value": "3141" + }, + { + "label": "Action", + "value": "118" + }, + { + "label": "Actor", + "value": "2990" + }, + { + "label": "Actors", + "value": "893" + }, + { + "label": "Actress", + "value": "1118" + }, + { + "label": "AdaptedtoA", + "value": "367" + }, + { + "label": "AdaptedtoD", + "value": "237" + }, + { + "label": "AdaptedtoD", + "value": "510" + }, + { + "label": "AdaptedtoG", + "value": "106" + }, + { + "label": "AdaptedtoM", + "value": "164" + }, + { + "label": "AdaptedtoM", + "value": "88" + }, + { + "label": "AdaptedtoM", + "value": "471" + }, + { + "label": "AdaptedtoM", + "value": "1437" + }, + { + "label": "AdaptedtoV", + "value": "1042" + }, + { + "label": "ADeadBody", + "value": "3014" + }, + { + "label": "Adopted", + "value": "844" + }, + { + "label": "AdoptedChi", + "value": "396" + }, + { + "label": "AdoptedPro", + "value": "431" + }, + { + "label": "Adoption", + "value": "1285" + }, + { + "label": "Adrogynous", + "value": "923" + }, + { + "label": "Adult", + "value": "1012" + }, + { + "label": "Adultery", + "value": "292" + }, + { + "label": "AdvancedKn", + "value": "1164" + }, + { + "label": "Advancedte", + "value": "3152" + }, + { + "label": "adventerer", + "value": "2811" + }, + { + "label": "Adventur", + "value": "3163" + }, + { + "label": "Adventure", + "value": "933" + }, + { + "label": "Adventurer", + "value": "165" + }, + { + "label": "Adventurer", + "value": "2913" + }, + { + "label": "Aesthetic", + "value": "3232" + }, + { + "label": "Affair", + "value": "579" + }, + { + "label": "AfricanEmi", + "value": "1740" + }, + { + "label": "Aftertheso", + "value": "1668" + }, + { + "label": "Age-gap", + "value": "1794" + }, + { + "label": "AgeDiffere", + "value": "1580" + }, + { + "label": "AgeGap", + "value": "1246" + }, + { + "label": "Agent", + "value": "3035" + }, + { + "label": "AgeofGods", + "value": "1748" + }, + { + "label": "AgeProgres", + "value": "333" + }, + { + "label": "AgeRegress", + "value": "457" + }, + { + "label": "AggresiveC", + "value": "809" + }, + { + "label": "Aggressive", + "value": "416" + }, + { + "label": "Aggressive", + "value": "1053" + }, + { + "label": "agrass", + "value": "1743" + }, + { + "label": "ahveryfish", + "value": "1732" + }, + { + "label": "AI", + "value": "628" + }, + { + "label": "AI-chip", + "value": "902" + }, + { + "label": "Alchemist", + "value": "1278" + }, + { + "label": "Alchemy", + "value": "16" + }, + { + "label": "AlienInvas", + "value": "1526" + }, + { + "label": "Aliens", + "value": "40" + }, + { + "label": "Aliverday", + "value": "2533" + }, + { + "label": "allenzhang", + "value": "1867" + }, + { + "label": "AllHeavens", + "value": "2204" + }, + { + "label": "Alljobs", + "value": "3143" + }, + { + "label": "AlmightyCo", + "value": "2661" + }, + { + "label": "Almightypl", + "value": "2663" + }, + { + "label": "Alone", + "value": "2489" + }, + { + "label": "alpha", + "value": "2910" + }, + { + "label": "AlterateHi", + "value": "2761" + }, + { + "label": "AlternateH", + "value": "784" + }, + { + "label": "AlternateW", + "value": "274" + }, + { + "label": "Alternativ", + "value": "2857" + }, + { + "label": "Amagicpill", + "value": "2298" + }, + { + "label": "America", + "value": "2846" + }, + { + "label": "AmericanCo", + "value": "2757" + }, + { + "label": "Americas", + "value": "2762" + }, + { + "label": "Amnesia", + "value": "144" + }, + { + "label": "AmusementP", + "value": "1408" + }, + { + "label": "Anal", + "value": "60" + }, + { + "label": "Anautumnra", + "value": "2451" + }, + { + "label": "Ancient", + "value": "1142" + }, + { + "label": "AncientBus", + "value": "785" + }, + { + "label": "AncientChi", + "value": "145" + }, + { + "label": "AncientChi", + "value": "322" + }, + { + "label": "AncientChi", + "value": "2751" + }, + { + "label": "AncientRea", + "value": "1055" + }, + { + "label": "ancientset", + "value": "1032" + }, + { + "label": "ancienttim", + "value": "1586" + }, + { + "label": "AncientTim", + "value": "146" + }, + { + "label": "AncientWea", + "value": "1338" + }, + { + "label": "Androgynou", + "value": "895" + }, + { + "label": "Androgynou", + "value": "3115" + }, + { + "label": "Androids", + "value": "598" + }, + { + "label": "Angel", + "value": "1190" + }, + { + "label": "Angels", + "value": "353" + }, + { + "label": "angryhouse", + "value": "2196" + }, + { + "label": "AnimalChar", + "value": "334" + }, + { + "label": "AnimalRear", + "value": "493" + }, + { + "label": "animals", + "value": "1282" + }, + { + "label": "Animation", + "value": "2890" + }, + { + "label": "AnimationD", + "value": "2891" + }, + { + "label": "Animator", + "value": "1305" + }, + { + "label": "Anime", + "value": "1060" + }, + { + "label": "animenewco", + "value": "2065" + }, + { + "label": "Anl", + "value": "293" + }, + { + "label": "AnlanInvin", + "value": "2721" + }, + { + "label": "anoldman", + "value": "2126" + }, + { + "label": "AnotherWor", + "value": "921" + }, + { + "label": "AnotherWor", + "value": "1149" + }, + { + "label": "Antagonist", + "value": "3042" + }, + { + "label": "Anti-HeroL", + "value": "621" + }, + { + "label": "Anti-heroP", + "value": "1509" + }, + { + "label": "Anti-Magic", + "value": "499" + }, + { + "label": "Anti-MC", + "value": "2775" + }, + { + "label": "Anti-socia", + "value": "532" + }, + { + "label": "antihero", + "value": "1399" + }, + { + "label": "AntiheroPr", + "value": "323" + }, + { + "label": "AntiqueSho", + "value": "1386" + }, + { + "label": "ApartmentL", + "value": "994" + }, + { + "label": "ApatheticP", + "value": "393" + }, + { + "label": "Apocalypse", + "value": "201" + }, + { + "label": "Apocalypse", + "value": "1612" + }, + { + "label": "Apocalypti", + "value": "1065" + }, + { + "label": "Appearance", + "value": "61" + }, + { + "label": "Appearance", + "value": "275" + }, + { + "label": "Apple", + "value": "1818" + }, + { + "label": "Appraisal", + "value": "898" + }, + { + "label": "Apprentice", + "value": "977" + }, + { + "label": "arayofsuns", + "value": "1979" + }, + { + "label": "Archer", + "value": "2474" + }, + { + "label": "Archery", + "value": "215" + }, + { + "label": "Aristocrac", + "value": "387" + }, + { + "label": "Aristocrat", + "value": "724" + }, + { + "label": "Aristrocac", + "value": "1201" + }, + { + "label": "Arknights", + "value": "1135" + }, + { + "label": "armoredcit", + "value": "2830" + }, + { + "label": "ArmsDealer", + "value": "398" + }, + { + "label": "ArmsDealer", + "value": "2766" + }, + { + "label": "ArmsTrade", + "value": "1000" + }, + { + "label": "Army", + "value": "41" + }, + { + "label": "Army-build", + "value": "970" + }, + { + "label": "ArmyBuildi", + "value": "107" + }, + { + "label": "ArrangedMa", + "value": "163" + }, + { + "label": "ArrogantCh", + "value": "62" + }, + { + "label": "Artifact", + "value": "1506" + }, + { + "label": "ArtifactCr", + "value": "147" + }, + { + "label": "Artifacts", + "value": "89" + }, + { + "label": "ArtifactsB", + "value": "148" + }, + { + "label": "ArtifactsC", + "value": "63" + }, + { + "label": "artificer", + "value": "1373" + }, + { + "label": "Artificial", + "value": "206" + }, + { + "label": "Artificial", + "value": "2777" + }, + { + "label": "Artis", + "value": "1500" + }, + { + "label": "Artist", + "value": "1468" + }, + { + "label": "Artists", + "value": "494" + }, + { + "label": "Ashknightw", + "value": "3043" + }, + { + "label": "askTaichi", + "value": "2181" + }, + { + "label": "assasin", + "value": "1387" + }, + { + "label": "Assasins", + "value": "1525" + }, + { + "label": "Assassin", + "value": "1161" + }, + { + "label": "Assassins", + "value": "149" + }, + { + "label": "Astrologer", + "value": "880" + }, + { + "label": "atravellin", + "value": "1684" + }, + { + "label": "Auspicious", + "value": "2146" + }, + { + "label": "Authoroffa", + "value": "1870" + }, + { + "label": "Autism", + "value": "841" + }, + { + "label": "AutomaticU", + "value": "1243" + }, + { + "label": "AutomaticU", + "value": "655" + }, + { + "label": "Automatons", + "value": "1419" + }, + { + "label": "autumnautu", + "value": "1685" + }, + { + "label": "Avatar", + "value": "2912" + }, + { + "label": "Average-lo", + "value": "378" + }, + { + "label": "AverageLoo", + "value": "1001" + }, + { + "label": "avigorous", + "value": "2341" + }, + { + "label": "Award-winn", + "value": "2778" + }, + { + "label": "AwkwardPro", + "value": "568" + }, + { + "label": "Ayanokoji", + "value": "1914" + }, + { + "label": "AZanpakut", + "value": "2512" + }, + { + "label": "Azeroth", + "value": "1303" + }, + { + "label": "AzurLane", + "value": "1594" + }, + { + "label": "Babies", + "value": "750" + }, + { + "label": "Baby", + "value": "3045" + }, + { + "label": "backstabbi", + "value": "3139" + }, + { + "label": "Badassprot", + "value": "1283" + }, + { + "label": "Badboy", + "value": "2999" + }, + { + "label": "BaiXiaowei", + "value": "2698" + }, + { + "label": "baldman", + "value": "2248" + }, + { + "label": "baldnessat", + "value": "2173" + }, + { + "label": "balduncle", + "value": "2710" + }, + { + "label": "Band", + "value": "1529" + }, + { + "label": "Bandit", + "value": "2796" + }, + { + "label": "Banking", + "value": "1538" + }, + { + "label": "BarrenEmpe", + "value": "2117" + }, + { + "label": "Baseball", + "value": "460" + }, + { + "label": "BasedonaMo", + "value": "382" + }, + { + "label": "BasedonaTV", + "value": "593" + }, + { + "label": "Basket", + "value": "1209" + }, + { + "label": "Basketball", + "value": "243" + }, + { + "label": "BattleAcad", + "value": "226" + }, + { + "label": "BattleComp", + "value": "189" + }, + { + "label": "BattleThro", + "value": "685" + }, + { + "label": "BDSM", + "value": "1082" + }, + { + "label": "beaming", + "value": "2384" + }, + { + "label": "Beansandgr", + "value": "2667" + }, + { + "label": "Bearcat", + "value": "1999" + }, + { + "label": "BearChild", + "value": "2821" + }, + { + "label": "Bearchildl", + "value": "2085" + }, + { + "label": "bearcocoa", + "value": "2529" + }, + { + "label": "Beast", + "value": "788" + }, + { + "label": "Beastamer", + "value": "3052" + }, + { + "label": "BeastCompa", + "value": "35" + }, + { + "label": "BeastCompa", + "value": "1139" + }, + { + "label": "Beastkin", + "value": "476" + }, + { + "label": "beastman", + "value": "1301" + }, + { + "label": "Beastmen", + "value": "968" + }, + { + "label": "beastprota", + "value": "2165" + }, + { + "label": "Beasts", + "value": "64" + }, + { + "label": "BeastTamer", + "value": "660" + }, + { + "label": "Beasttamin", + "value": "2983" + }, + { + "label": "Beatthefem", + "value": "2994" + }, + { + "label": "Beatthemal", + "value": "2993" + }, + { + "label": "beatyourse", + "value": "2061" + }, + { + "label": "Beauties", + "value": "3119" + }, + { + "label": "beautifula", + "value": "2568" + }, + { + "label": "Beautifulc", + "value": "3066" + }, + { + "label": "beautifulf", + "value": "1361" + }, + { + "label": "Beautifulf", + "value": "1021" + }, + { + "label": "BeautifulF", + "value": "50" + }, + { + "label": "BeautifulF", + "value": "1363" + }, + { + "label": "beautifulh", + "value": "65" + }, + { + "label": "BeautifulH", + "value": "3153" + }, + { + "label": "Beautifull", + "value": "1104" + }, + { + "label": "BeautifulP", + "value": "871" + }, + { + "label": "Beauty", + "value": "3021" + }, + { + "label": "becausesoh", + "value": "2524" + }, + { + "label": "Becomefamo", + "value": "1773" + }, + { + "label": "BecomeLove", + "value": "3129" + }, + { + "label": "beggingfor", + "value": "2584" + }, + { + "label": "BehindtheS", + "value": "1247" + }, + { + "label": "BehindtheS", + "value": "1093" + }, + { + "label": "Belltouche", + "value": "2257" + }, + { + "label": "belovedbab", + "value": "1843" + }, + { + "label": "Bestiality", + "value": "920" + }, + { + "label": "Betrayal", + "value": "150" + }, + { + "label": "Betrayed", + "value": "3147" + }, + { + "label": "bewitching", + "value": "2709" + }, + { + "label": "Bgfellow", + "value": "3231" + }, + { + "label": "BickeringC", + "value": "53" + }, + { + "label": "bickeringl", + "value": "2954" + }, + { + "label": "BigBroHasD", + "value": "612" + }, + { + "label": "bigcitysma", + "value": "2220" + }, + { + "label": "Bigcockcut", + "value": "2471" + }, + { + "label": "Bigdog", + "value": "1895" + }, + { + "label": "bighippo", + "value": "2567" + }, + { + "label": "bigorangew", + "value": "2168" + }, + { + "label": "bigpicture", + "value": "1648" + }, + { + "label": "Bigplayers", + "value": "1733" + }, + { + "label": "Bigshot", + "value": "3151" + }, + { + "label": "BigSkeleto", + "value": "2091" + }, + { + "label": "bigtent", + "value": "2483" + }, + { + "label": "bigwhitewh", + "value": "1762" + }, + { + "label": "Billionair", + "value": "1022" + }, + { + "label": "billionpeo", + "value": "2444" + }, + { + "label": "BingtangHu", + "value": "1992" + }, + { + "label": "Biochip", + "value": "388" + }, + { + "label": "Biomass", + "value": "1307" + }, + { + "label": "Biotechnol", + "value": "1549" + }, + { + "label": "Biscuits", + "value": "1690" + }, + { + "label": "BisexualPr", + "value": "1326" + }, + { + "label": "bitefire", + "value": "2070" + }, + { + "label": "BL", + "value": "1501" + }, + { + "label": "Black-bell", + "value": "815" + }, + { + "label": "Black-bell", + "value": "1573" + }, + { + "label": "blackandim", + "value": "2077" + }, + { + "label": "blackandwh", + "value": "1722" + }, + { + "label": "blackandwh", + "value": "2677" + }, + { + "label": "Blackbelli", + "value": "1156" + }, + { + "label": "BlackBelly", + "value": "151" + }, + { + "label": "BlackBelly", + "value": "1590" + }, + { + "label": "blackcatis", + "value": "2589" + }, + { + "label": "BlackDrago", + "value": "2601" + }, + { + "label": "Blackening", + "value": "2926" + }, + { + "label": "blackice", + "value": "2808" + }, + { + "label": "Blacklight", + "value": "1308" + }, + { + "label": "Blackmail", + "value": "294" + }, + { + "label": "Blacksmith", + "value": "368" + }, + { + "label": "blacksoil", + "value": "1998" + }, + { + "label": "BlackTechn", + "value": "1515" + }, + { + "label": "Bleach", + "value": "659" + }, + { + "label": "Blind", + "value": "734" + }, + { + "label": "BlindDates", + "value": "1249" + }, + { + "label": "BlindProta", + "value": "575" + }, + { + "label": "Bloodborne", + "value": "1136" + }, + { + "label": "blooddemon", + "value": "1951" + }, + { + "label": "Bloodline", + "value": "913" + }, + { + "label": "Bloodlines", + "value": "17" + }, + { + "label": "BloodManip", + "value": "306" + }, + { + "label": "BloodMoonG", + "value": "2089" + }, + { + "label": "BloodofAni", + "value": "1671" + }, + { + "label": "Bloodpumpi", + "value": "2985" + }, + { + "label": "bloomingon", + "value": "1802" + }, + { + "label": "blueshirts", + "value": "2047" + }, + { + "label": "bluesilk", + "value": "2712" + }, + { + "label": "bluesilksu", + "value": "2559" + }, + { + "label": "bluestone", + "value": "2063" + }, + { + "label": "Bodhicitta", + "value": "2382" + }, + { + "label": "Bodyguards", + "value": "261" + }, + { + "label": "BodySwap", + "value": "54" + }, + { + "label": "BodyTemper", + "value": "90" + }, + { + "label": "Boiled", + "value": "2674" + }, + { + "label": "BookDustSp", + "value": "2267" + }, + { + "label": "Books", + "value": "488" + }, + { + "label": "bookslikeu", + "value": "489" + }, + { + "label": "BookstoreS", + "value": "1994" + }, + { + "label": "BookTransm", + "value": "1575" + }, + { + "label": "BookWearer", + "value": "861" + }, + { + "label": "Bookworm", + "value": "450" + }, + { + "label": "Boss", + "value": "2768" + }, + { + "label": "Boss-Subor", + "value": "34" + }, + { + "label": "Boundlessf", + "value": "1841" + }, + { + "label": "BoXiaowen", + "value": "2252" + }, + { + "label": "Boxing", + "value": "1446" + }, + { + "label": "boycold", + "value": "2499" + }, + { + "label": "BoyxBoy", + "value": "2885" + }, + { + "label": "Brainwashi", + "value": "421" + }, + { + "label": "BraisedPai", + "value": "1991" + }, + { + "label": "Breakingth", + "value": "2441" + }, + { + "label": "breaktheke", + "value": "2123" + }, + { + "label": "Breakup", + "value": "931" + }, + { + "label": "Breeze", + "value": "1958" + }, + { + "label": "breezesilv", + "value": "1892" + }, + { + "label": "Brightmoon", + "value": "1926" + }, + { + "label": "Bringaknif", + "value": "2515" + }, + { + "label": "BritishEmp", + "value": "1070" + }, + { + "label": "broalwaysg", + "value": "2353" + }, + { + "label": "BrokenEnga", + "value": "152" + }, + { + "label": "BrortherCo", + "value": "1523" + }, + { + "label": "BrotherChe", + "value": "2035" + }, + { + "label": "BrotherCom", + "value": "302" + }, + { + "label": "Brotherhoo", + "value": "369" + }, + { + "label": "BrotherInL", + "value": "2920" + }, + { + "label": "BrotherZhu", + "value": "2092" + }, + { + "label": "Brownsugar", + "value": "1717" + }, + { + "label": "BTTH", + "value": "833" + }, + { + "label": "BuddhaofNi", + "value": "2807" + }, + { + "label": "Buddhism", + "value": "259" + }, + { + "label": "building", + "value": "3216" + }, + { + "label": "buildingki", + "value": "1388" + }, + { + "label": "BuildKingd", + "value": "1134" + }, + { + "label": "Buildthewo", + "value": "2452" + }, + { + "label": "Bulldozer", + "value": "1218" + }, + { + "label": "Bully", + "value": "620" + }, + { + "label": "Bullying", + "value": "549" + }, + { + "label": "BuLofan", + "value": "1916" + }, + { + "label": "BungouStra", + "value": "1400" + }, + { + "label": "BunguoStra", + "value": "985" + }, + { + "label": "Burningmou", + "value": "2581" + }, + { + "label": "burnout", + "value": "2574" + }, + { + "label": "Business", + "value": "625" + }, + { + "label": "BusinessDe", + "value": "1587" + }, + { + "label": "BusinessEm", + "value": "1469" + }, + { + "label": "Businessma", + "value": "850" + }, + { + "label": "BusinessMa", + "value": "66" + }, + { + "label": "Businessme", + "value": "238" + }, + { + "label": "businessor", + "value": "1577" + }, + { + "label": "BusinessRi", + "value": "1664" + }, + { + "label": "Businesswo", + "value": "3022" + }, + { + "label": "Bussinesma", + "value": "1102" + }, + { + "label": "Bussiness", + "value": "1015" + }, + { + "label": "Butlers", + "value": "597" + }, + { + "label": "ButterflyD", + "value": "1830" + }, + { + "label": "Caicolorsh", + "value": "2516" + }, + { + "label": "callthebea", + "value": "2278" + }, + { + "label": "Calm", + "value": "2822" + }, + { + "label": "Calmdown", + "value": "2931" + }, + { + "label": "CalmMalePr", + "value": "1488" + }, + { + "label": "CalmProtag", + "value": "18" + }, + { + "label": "camera", + "value": "1856" + }, + { + "label": "Campus", + "value": "1271" + }, + { + "label": "CampusLife", + "value": "816" + }, + { + "label": "CampusLove", + "value": "375" + }, + { + "label": "CampusRoma", + "value": "2738" + }, + { + "label": "Can&039", + "value": "2268" + }, + { + "label": "Can&039", + "value": "2506" + }, + { + "label": "Cancat", + "value": "2147" + }, + { + "label": "canfly", + "value": "1864" + }, + { + "label": "CangxueFei", + "value": "2786" + }, + { + "label": "Cannibalis", + "value": "472" + }, + { + "label": "Canolaflow", + "value": "1828" + }, + { + "label": "Cantaloupe", + "value": "2662" + }, + { + "label": "Canteendry", + "value": "2082" + }, + { + "label": "Capitalism", + "value": "1071" + }, + { + "label": "Capitalist", + "value": "1516" + }, + { + "label": "CarambolaJ", + "value": "2582" + }, + { + "label": "Card", + "value": "981" + }, + { + "label": "CardGames", + "value": "782" + }, + { + "label": "Cards", + "value": "350" + }, + { + "label": "CareerOrie", + "value": "1595" + }, + { + "label": "CarefreePr", + "value": "295" + }, + { + "label": "CaringMale", + "value": "1152" + }, + { + "label": "CaringProt", + "value": "435" + }, + { + "label": "carpenter", + "value": "3221" + }, + { + "label": "cartoonwil", + "value": "2023" + }, + { + "label": "Casinos", + "value": "1539" + }, + { + "label": "Castlecult", + "value": "3125" + }, + { + "label": "CatchaGhos", + "value": "3016" + }, + { + "label": "Catchtheca", + "value": "1996" + }, + { + "label": "catdaylist", + "value": "1756" + }, + { + "label": "cateatingp", + "value": "2669" + }, + { + "label": "catgod", + "value": "2318" + }, + { + "label": "catisrisin", + "value": "2446" + }, + { + "label": "catloveson", + "value": "2415" + }, + { + "label": "catpowerfi", + "value": "2505" + }, + { + "label": "Catswithfi", + "value": "2130" + }, + { + "label": "catthatwan", + "value": "1876" + }, + { + "label": "catthousan", + "value": "2183" + }, + { + "label": "CautiousMc", + "value": "904" + }, + { + "label": "CautiousPr", + "value": "108" + }, + { + "label": "caviar", + "value": "1982" + }, + { + "label": "Celebritie", + "value": "55" + }, + { + "label": "Celebrity", + "value": "979" + }, + { + "label": "CelestialC", + "value": "1986" + }, + { + "label": "Celestials", + "value": "1294" + }, + { + "label": "Ceo", + "value": "2976" + }, + { + "label": "ChainsawMa", + "value": "2747" + }, + { + "label": "championge", + "value": "2228" + }, + { + "label": "Champions", + "value": "3130" + }, + { + "label": "ChanelNo.1", + "value": "1849" + }, + { + "label": "Changeever", + "value": "2087" + }, + { + "label": "Chaos", + "value": "957" + }, + { + "label": "chaoticwor", + "value": "1730" + }, + { + "label": "CharacterD", + "value": "119" + }, + { + "label": "CharacterG", + "value": "67" + }, + { + "label": "Charismati", + "value": "363" + }, + { + "label": "CharmingPr", + "value": "347" + }, + { + "label": "chasingthe", + "value": "2656" + }, + { + "label": "chat", + "value": "1377" + }, + { + "label": "chat-room", + "value": "798" + }, + { + "label": "ChatGroup", + "value": "673" + }, + { + "label": "ChatRooms", + "value": "267" + }, + { + "label": "Cheat", + "value": "705" + }, + { + "label": "Cheats", + "value": "36" + }, + { + "label": "Chef", + "value": "1480" + }, + { + "label": "chef&03", + "value": "1943" + }, + { + "label": "Chefs", + "value": "314" + }, + { + "label": "ChefSurviv", + "value": "2031" + }, + { + "label": "ChenChangf", + "value": "2199" + }, + { + "label": "ChenHegao", + "value": "1309" + }, + { + "label": "ChenTwelve", + "value": "1980" + }, + { + "label": "CherryBlos", + "value": "1811" + }, + { + "label": "ChiDongdon", + "value": "1813" + }, + { + "label": "child", + "value": "2883" + }, + { + "label": "ChildAbuse", + "value": "470" + }, + { + "label": "Childbirth", + "value": "949" + }, + { + "label": "Childcare", + "value": "44" + }, + { + "label": "ChildhoodE", + "value": "1229" + }, + { + "label": "Childhoodf", + "value": "2805" + }, + { + "label": "ChildhoodF", + "value": "370" + }, + { + "label": "ChildhoodL", + "value": "430" + }, + { + "label": "ChildhoodP", + "value": "475" + }, + { + "label": "ChildhoodS", + "value": "376" + }, + { + "label": "ChildhoodS", + "value": "863" + }, + { + "label": "ChildishPr", + "value": "418" + }, + { + "label": "ChildProta", + "value": "268" + }, + { + "label": "ChinaNamba", + "value": "1306" + }, + { + "label": "ChinaRefor", + "value": "950" + }, + { + "label": "Chinese", + "value": "1342" + }, + { + "label": "ChineseAnc", + "value": "1280" + }, + { + "label": "Chinesenov", + "value": "2886" + }, + { + "label": "ChinesePre", + "value": "639" + }, + { + "label": "Chirika", + "value": "1696" + }, + { + "label": "ChocolateI", + "value": "1777" + }, + { + "label": "ChoiceSele", + "value": "647" + }, + { + "label": "Chosen12", + "value": "2410" + }, + { + "label": "Chronology", + "value": "1014" + }, + { + "label": "ChuningMC", + "value": "1002" + }, + { + "label": "Church", + "value": "954" + }, + { + "label": "Chuunibyou", + "value": "522" + }, + { + "label": "Cicadasand", + "value": "2195" + }, + { + "label": "City", + "value": "3083" + }, + { + "label": "CityGod", + "value": "2138" + }, + { + "label": "Cityurban", + "value": "3225" + }, + { + "label": "city​​ya", + "value": "2607" + }, + { + "label": "civetcatat", + "value": "2437" + }, + { + "label": "Civilizati", + "value": "1215" + }, + { + "label": "Civilizati", + "value": "1550" + }, + { + "label": "CivilServa", + "value": "1072" + }, + { + "label": "ciweimao", + "value": "3233" + }, + { + "label": "ClanBuildi", + "value": "19" + }, + { + "label": "ClanSectDe", + "value": "662" + }, + { + "label": "ClassroomO", + "value": "3213" + }, + { + "label": "CleverProt", + "value": "9" + }, + { + "label": "CleverProt", + "value": "523" + }, + { + "label": "ClingyLove", + "value": "277" + }, + { + "label": "Clones", + "value": "448" + }, + { + "label": "cloudmadeo", + "value": "2654" + }, + { + "label": "Cloudseest", + "value": "1904" + }, + { + "label": "CloudSummi", + "value": "1850" + }, + { + "label": "Cloudtopfi", + "value": "1944" + }, + { + "label": "Cloudtop丨", + "value": "2062" + }, + { + "label": "CloudTop丨", + "value": "1799" + }, + { + "label": "CloudTop丨", + "value": "1989" + }, + { + "label": "cloudysky", + "value": "1776" + }, + { + "label": "Club", + "value": "1184" + }, + { + "label": "Clubs", + "value": "1126" + }, + { + "label": "Cluelessly", + "value": "667" + }, + { + "label": "CluelessPr", + "value": "963" + }, + { + "label": "ClumsyLove", + "value": "473" + }, + { + "label": "cluthullu", + "value": "1264" + }, + { + "label": "Co-Workers", + "value": "454" + }, + { + "label": "cockroache", + "value": "2604" + }, + { + "label": "codegeass", + "value": "1398" + }, + { + "label": "Codeuntilt", + "value": "2626" + }, + { + "label": "codewordge", + "value": "2572" + }, + { + "label": "coffeefatc", + "value": "1900" + }, + { + "label": "coffeeinst", + "value": "2400" + }, + { + "label": "coffeewith", + "value": "1656" + }, + { + "label": "Cohabitati", + "value": "474" + }, + { + "label": "CokeII", + "value": "2329" + }, + { + "label": "coldcolddo", + "value": "2326" + }, + { + "label": "ColdLoveIn", + "value": "56" + }, + { + "label": "ColdLoveIn", + "value": "1365" + }, + { + "label": "ColdMaleLe", + "value": "1567" + }, + { + "label": "ColdMistre", + "value": "3036" + }, + { + "label": "ColdNightL", + "value": "2695" + }, + { + "label": "ColdProtag", + "value": "37" + }, + { + "label": "coldrivers", + "value": "1956" + }, + { + "label": "ColdStar&a", + "value": "1724" + }, + { + "label": "Collection", + "value": "873" + }, + { + "label": "College", + "value": "1018" + }, + { + "label": "CollegeUni", + "value": "192" + }, + { + "label": "ColonialEr", + "value": "1556" + }, + { + "label": "Colonializ", + "value": "915" + }, + { + "label": "Colonizati", + "value": "1494" + }, + { + "label": "Colony", + "value": "1557" + }, + { + "label": "Coma", + "value": "779" + }, + { + "label": "Comed", + "value": "3167" + }, + { + "label": "ComedicUnd", + "value": "91" + }, + { + "label": "ComedicUnd", + "value": "1568" + }, + { + "label": "comedy", + "value": "829" + }, + { + "label": "Comeon", + "value": "1961" + }, + { + "label": "Comic", + "value": "1167" + }, + { + "label": "ComingofAg", + "value": "1147" + }, + { + "label": "Commandand", + "value": "1472" + }, + { + "label": "CommonerLi", + "value": "1317" + }, + { + "label": "Companies", + "value": "824" + }, + { + "label": "Competitio", + "value": "1210" + }, + { + "label": "Complete", + "value": "3140" + }, + { + "label": "ComplexFam", + "value": "153" + }, + { + "label": "ComplexFam", + "value": "1583" + }, + { + "label": "Complicate", + "value": "836" + }, + { + "label": "Comprehens", + "value": "2093" + }, + { + "label": "Conditiona", + "value": "413" + }, + { + "label": "ConfidentP", + "value": "346" + }, + { + "label": "Confinemen", + "value": "912" + }, + { + "label": "Conflictin", + "value": "796" + }, + { + "label": "Conquer", + "value": "2987" + }, + { + "label": "Conspiracy", + "value": "2816" + }, + { + "label": "Conspirati", + "value": "1103" + }, + { + "label": "Constructi", + "value": "1624" + }, + { + "label": "Contagonis", + "value": "1310" + }, + { + "label": "contempora", + "value": "3138" + }, + { + "label": "Contract", + "value": "891" + }, + { + "label": "ContractLo", + "value": "1581" + }, + { + "label": "Contractma", + "value": "3072" + }, + { + "label": "Contracts", + "value": "379" + }, + { + "label": "Cooking", + "value": "315" + }, + { + "label": "Coolguy", + "value": "3190" + }, + { + "label": "CoolText", + "value": "736" + }, + { + "label": "cornjuice", + "value": "2706" + }, + { + "label": "CorpseFrag", + "value": "2543" + }, + { + "label": "Corruption", + "value": "550" + }, + { + "label": "CosmicHorr", + "value": "757" + }, + { + "label": "CosmicWars", + "value": "219" + }, + { + "label": "Cosplay", + "value": "1460" + }, + { + "label": "Counteratt", + "value": "1225" + }, + { + "label": "CountrySid", + "value": "2917" + }, + { + "label": "CoupleGrow", + "value": "526" + }, + { + "label": "CourtOffic", + "value": "485" + }, + { + "label": "Cousins", + "value": "519" + }, + { + "label": "coverthesu", + "value": "1688" + }, + { + "label": "CowardlyPr", + "value": "100" + }, + { + "label": "coyote", + "value": "1837" + }, + { + "label": "Crafting", + "value": "327" + }, + { + "label": "Crazyforam", + "value": "2083" + }, + { + "label": "CrazyProta", + "value": "758" + }, + { + "label": "Crazystory", + "value": "2260" + }, + { + "label": "Creation", + "value": "837" + }, + { + "label": "Creator", + "value": "1148" + }, + { + "label": "Creatures", + "value": "307" + }, + { + "label": "Crime", + "value": "556" + }, + { + "label": "Crimes", + "value": "1527" + }, + { + "label": "crimesolvi", + "value": "2841" + }, + { + "label": "Criminals", + "value": "290" + }, + { + "label": "Criminolog", + "value": "1476" + }, + { + "label": "crookeddoo", + "value": "2659" + }, + { + "label": "Cross-dres", + "value": "210" + }, + { + "label": "Crossdress", + "value": "756" + }, + { + "label": "Crossing", + "value": "2760" + }, + { + "label": "Crossover", + "value": "269" + }, + { + "label": "Cruel", + "value": "2779" + }, + { + "label": "CruelChara", + "value": "68" + }, + { + "label": "Crush", + "value": "3047" + }, + { + "label": "Cryostasis", + "value": "1447" + }, + { + "label": "Cthulhu", + "value": "1137" + }, + { + "label": "CubRaising", + "value": "1565" + }, + { + "label": "CucumberHa", + "value": "1765" + }, + { + "label": "Culinary", + "value": "3076" + }, + { + "label": "Cultivatin", + "value": "3145" + }, + { + "label": "Cultivatio", + "value": "20" + }, + { + "label": "Cultivatio", + "value": "2812" + }, + { + "label": "Cultivatio", + "value": "2849" + }, + { + "label": "Cultivatio", + "value": "3093" + }, + { + "label": "Cultivatio", + "value": "3117" + }, + { + "label": "Cultivator", + "value": "958" + }, + { + "label": "Cunnilingu", + "value": "1455" + }, + { + "label": "cunning", + "value": "2755" + }, + { + "label": "cunningfem", + "value": "795" + }, + { + "label": "cunningmc", + "value": "1380" + }, + { + "label": "CunningPro", + "value": "195" + }, + { + "label": "CunningPro", + "value": "1168" + }, + { + "label": "Cupola", + "value": "2683" + }, + { + "label": "curechildr", + "value": "2848" + }, + { + "label": "CuriousPro", + "value": "1275" + }, + { + "label": "Curse", + "value": "1299" + }, + { + "label": "Curses", + "value": "516" + }, + { + "label": "Cute", + "value": "1258" + }, + { + "label": "Cuteadorab", + "value": "3116" + }, + { + "label": "CuteChild", + "value": "1016" + }, + { + "label": "CuteChildr", + "value": "239" + }, + { + "label": "cutegrapef", + "value": "2004" + }, + { + "label": "cutelovein", + "value": "2733" + }, + { + "label": "CuteMaleLe", + "value": "1113" + }, + { + "label": "CutePet", + "value": "1339" + }, + { + "label": "cutepomelo", + "value": "2646" + }, + { + "label": "CuteProtag", + "value": "452" + }, + { + "label": "CuteProtag", + "value": "1105" + }, + { + "label": "cuteshadow", + "value": "1816" + }, + { + "label": "CuteStory", + "value": "380" + }, + { + "label": "Daddywants", + "value": "2291" + }, + { + "label": "dagougou", + "value": "2387" + }, + { + "label": "Dahunjun", + "value": "2201" + }, + { + "label": "DamingYong", + "value": "2019" + }, + { + "label": "Dancers", + "value": "1445" + }, + { + "label": "dancetofig", + "value": "1803" + }, + { + "label": "Danmei", + "value": "580" + }, + { + "label": "DaoCompani", + "value": "521" + }, + { + "label": "DaoCompreh", + "value": "92" + }, + { + "label": "Daoism", + "value": "93" + }, + { + "label": "DaoyanShen", + "value": "2043" + }, + { + "label": "DaqingXiao", + "value": "2095" + }, + { + "label": "Dark", + "value": "328" + }, + { + "label": "DarkDeatho", + "value": "561" + }, + { + "label": "DarkFantas", + "value": "759" + }, + { + "label": "DarkForest", + "value": "3090" + }, + { + "label": "darknight", + "value": "1731" + }, + { + "label": "darkpirate", + "value": "1666" + }, + { + "label": "DarkPower", + "value": "961" + }, + { + "label": "Dashuaihen", + "value": "2279" + }, + { + "label": "DatangDaqi", + "value": "1787" + }, + { + "label": "DatangDaqi", + "value": "2225" + }, + { + "label": "DatangErwu", + "value": "1836" + }, + { + "label": "Datangpota", + "value": "2728" + }, + { + "label": "Datangsupe", + "value": "1854" + }, + { + "label": "daughterco", + "value": "1934" + }, + { + "label": "Daybyday", + "value": "2418" + }, + { + "label": "DC", + "value": "669" + }, + { + "label": "deadfatfas", + "value": "2179" + }, + { + "label": "DeadProtag", + "value": "541" + }, + { + "label": "Death", + "value": "542" + }, + { + "label": "DeathofLov", + "value": "38" + }, + { + "label": "Debts", + "value": "524" + }, + { + "label": "Decadeligh", + "value": "1812" + }, + { + "label": "Decisive", + "value": "2794" + }, + { + "label": "DecisiveMc", + "value": "2905" + }, + { + "label": "deepbluese", + "value": "1821" + }, + { + "label": "DeepLTrans", + "value": "969" + }, + { + "label": "Deityhero", + "value": "3118" + }, + { + "label": "Delinquent", + "value": "605" + }, + { + "label": "Delusions", + "value": "1422" + }, + { + "label": "Demi-Human", + "value": "571" + }, + { + "label": "Demon", + "value": "748" + }, + { + "label": "Demondomai", + "value": "2266" + }, + { + "label": "DemonicCul", + "value": "232" + }, + { + "label": "DemonInvas", + "value": "2081" + }, + { + "label": "DemonKing", + "value": "2565" + }, + { + "label": "DemonLord", + "value": "154" + }, + { + "label": "DemonPower", + "value": "2832" + }, + { + "label": "Demons", + "value": "209" + }, + { + "label": "DemonsFami", + "value": "1617" + }, + { + "label": "DemonSlaye", + "value": "695" + }, + { + "label": "DenseProta", + "value": "10" + }, + { + "label": "Depictions", + "value": "329" + }, + { + "label": "Depictions", + "value": "729" + }, + { + "label": "Depression", + "value": "906" + }, + { + "label": "Desperate", + "value": "3061" + }, + { + "label": "Desperatel", + "value": "2209" + }, + { + "label": "DestinedLo", + "value": "1124" + }, + { + "label": "Destiny", + "value": "120" + }, + { + "label": "Destroyerf", + "value": "2170" + }, + { + "label": "Detailed", + "value": "3024" + }, + { + "label": "Detective", + "value": "774" + }, + { + "label": "DetectiveC", + "value": "927" + }, + { + "label": "Detectives", + "value": "557" + }, + { + "label": "Determined", + "value": "227" + }, + { + "label": "Devil", + "value": "3078" + }, + { + "label": "DevilPosse", + "value": "1555" + }, + { + "label": "Devils", + "value": "638" + }, + { + "label": "Devilveget", + "value": "2148" + }, + { + "label": "DevotedCou", + "value": "1628" + }, + { + "label": "Devotedlov", + "value": "1346" + }, + { + "label": "DevotedLov", + "value": "155" + }, + { + "label": "DevotedLov", + "value": "1514" + }, + { + "label": "Devourande", + "value": "3180" + }, + { + "label": "Devouringt", + "value": "3142" + }, + { + "label": "DifferentS", + "value": "381" + }, + { + "label": "differentw", + "value": "965" + }, + { + "label": "Diga", + "value": "2430" + }, + { + "label": "Diggingtos", + "value": "3135" + }, + { + "label": "Digimon", + "value": "1392" + }, + { + "label": "digitalold", + "value": "1872" + }, + { + "label": "digthreefe", + "value": "2472" + }, + { + "label": "Dikabenka", + "value": "2422" + }, + { + "label": "dimensiona", + "value": "2737" + }, + { + "label": "Dinosaurs", + "value": "878" + }, + { + "label": "Diplomacy", + "value": "2967" + }, + { + "label": "Diplomats", + "value": "1073" + }, + { + "label": "Director", + "value": "760" + }, + { + "label": "Directors", + "value": "1554" + }, + { + "label": "dirtylittl", + "value": "2610" + }, + { + "label": "Disabiliti", + "value": "603" + }, + { + "label": "disability", + "value": "2944" + }, + { + "label": "DisabledPr", + "value": "1281" + }, + { + "label": "DiscipleLo", + "value": "978" + }, + { + "label": "DiscipleTr", + "value": "664" + }, + { + "label": "Discrimina", + "value": "286" + }, + { + "label": "Disfigurem", + "value": "1110" + }, + { + "label": "DishonestP", + "value": "1405" + }, + { + "label": "Disobedien", + "value": "1237" + }, + { + "label": "Distrustfu", + "value": "1438" + }, + { + "label": "Divination", + "value": "308" + }, + { + "label": "Divination", + "value": "1466" + }, + { + "label": "Divineacti", + "value": "3121" + }, + { + "label": "DivineBook", + "value": "2350" + }, + { + "label": "Divinechoo", + "value": "3155" + }, + { + "label": "DivineProt", + "value": "1487" + }, + { + "label": "divinesign", + "value": "1653" + }, + { + "label": "Divorce", + "value": "257" + }, + { + "label": "Doctor", + "value": "749" + }, + { + "label": "DoctorData", + "value": "2538" + }, + { + "label": "Doctors", + "value": "169" + }, + { + "label": "Dog", + "value": "1364" + }, + { + "label": "dogeggsold", + "value": "2321" + }, + { + "label": "DoingBusin", + "value": "1318" + }, + { + "label": "Dollsister", + "value": "2110" + }, + { + "label": "DollsPuppe", + "value": "196" + }, + { + "label": "DomesticAf", + "value": "429" + }, + { + "label": "Dominator", + "value": "1090" + }, + { + "label": "Domineerin", + "value": "2769" + }, + { + "label": "don&039", + "value": "1823" + }, + { + "label": "don&039", + "value": "1911" + }, + { + "label": "Don&039", + "value": "2361" + }, + { + "label": "Donaldtrum", + "value": "3084" + }, + { + "label": "Donotbecon", + "value": "2440" + }, + { + "label": "Donotforge", + "value": "2445" + }, + { + "label": "Doomdays", + "value": "1125" + }, + { + "label": "Doomsday", + "value": "877" + }, + { + "label": "Doomsdaywa", + "value": "2519" + }, + { + "label": "Doraemon", + "value": "2748" + }, + { + "label": "dotingfami", + "value": "973" + }, + { + "label": "dotinglove", + "value": "974" + }, + { + "label": "DotingLove", + "value": "156" + }, + { + "label": "Dotingmale", + "value": "3171" + }, + { + "label": "DotingOlde", + "value": "432" + }, + { + "label": "DotingPare", + "value": "316" + }, + { + "label": "DotingPare", + "value": "1265" + }, + { + "label": "DotingSibl", + "value": "1266" + }, + { + "label": "DoubleLife", + "value": "905" + }, + { + "label": "DoubleRebi", + "value": "737" + }, + { + "label": "Doujin", + "value": "820" + }, + { + "label": "Douluo", + "value": "1553" + }, + { + "label": "DouluoDalu", + "value": "85" + }, + { + "label": "Doupo", + "value": "834" + }, + { + "label": "DoupoBTTH", + "value": "719" + }, + { + "label": "DouTuKing", + "value": "1908" + }, + { + "label": "doyoueator", + "value": "2153" + }, + { + "label": "doyouwantc", + "value": "2364" + }, + { + "label": "Dragon", + "value": "939" + }, + { + "label": "dragon-eat", + "value": "2254" + }, + { + "label": "DragonandL", + "value": "2554" + }, + { + "label": "DragonBall", + "value": "648" + }, + { + "label": "DragonBall", + "value": "2150" + }, + { + "label": "Dragoncult", + "value": "3126" + }, + { + "label": "DragonPala", + "value": "1857" + }, + { + "label": "DragonPowe", + "value": "2833" + }, + { + "label": "DragonRide", + "value": "793" + }, + { + "label": "Dragons", + "value": "233" + }, + { + "label": "DragonSlay", + "value": "586" + }, + { + "label": "dragracing", + "value": "1784" + }, + { + "label": "Drama", + "value": "723" + }, + { + "label": "Dramatic", + "value": "3069" + }, + { + "label": "Dream", + "value": "859" + }, + { + "label": "dreamblizz", + "value": "2691" + }, + { + "label": "dreamcatch", + "value": "2348" + }, + { + "label": "dreamintot", + "value": "2272" + }, + { + "label": "dreamleave", + "value": "1646" + }, + { + "label": "Dreamofthe", + "value": "2012" + }, + { + "label": "Dreams", + "value": "284" + }, + { + "label": "DriftwoodD", + "value": "2390" + }, + { + "label": "Drugs", + "value": "934" + }, + { + "label": "Druids", + "value": "842" + }, + { + "label": "Drunklifed", + "value": "2720" + }, + { + "label": "DualCultiv", + "value": "3208" + }, + { + "label": "DumbProtag", + "value": "1603" + }, + { + "label": "dungeon", + "value": "944" + }, + { + "label": "DungeonMas", + "value": "600" + }, + { + "label": "Dungeons", + "value": "469" + }, + { + "label": "Dwarf", + "value": "1159" + }, + { + "label": "Dwarfs", + "value": "132" + }, + { + "label": "Dwarves", + "value": "610" + }, + { + "label": "Dynasty", + "value": "2817" + }, + { + "label": "Dystopia", + "value": "1439" + }, + { + "label": "Dystopian", + "value": "3002" + }, + { + "label": "e-Sports", + "value": "513" + }, + { + "label": "EarlyRoman", + "value": "2" + }, + { + "label": "EarthInvas", + "value": "554" + }, + { + "label": "eartwarmin", + "value": "2834" + }, + { + "label": "Eastern", + "value": "3104" + }, + { + "label": "easternfan", + "value": "534" + }, + { + "label": "Easternmys", + "value": "3077" + }, + { + "label": "EasyGoingL", + "value": "287" + }, + { + "label": "Easygoingp", + "value": "1157" + }, + { + "label": "EatingBroa", + "value": "1238" + }, + { + "label": "Eccentricp", + "value": "1196" + }, + { + "label": "Ecchi", + "value": "2974" + }, + { + "label": "Economics", + "value": "288" + }, + { + "label": "EconomicsE", + "value": "157" + }, + { + "label": "Editors", + "value": "946" + }, + { + "label": "Education", + "value": "1504" + }, + { + "label": "Eggpie", + "value": "2045" + }, + { + "label": "Eggplantan", + "value": "2673" + }, + { + "label": "Egoism", + "value": "3124" + }, + { + "label": "Egoist", + "value": "3075" + }, + { + "label": "EideticMem", + "value": "234" + }, + { + "label": "Eighteence", + "value": "2781" + }, + { + "label": "eincarnate", + "value": "616" + }, + { + "label": "EldestSist", + "value": "1508" + }, + { + "label": "electricia", + "value": "1394" + }, + { + "label": "electricmo", + "value": "2495" + }, + { + "label": "elemental", + "value": "2921" + }, + { + "label": "ElementalM", + "value": "309" + }, + { + "label": "Elements", + "value": "3105" + }, + { + "label": "Elf", + "value": "838" + }, + { + "label": "Elfcold", + "value": "1758" + }, + { + "label": "Elite", + "value": "817" + }, + { + "label": "Elves", + "value": "133" + }, + { + "label": "Emotional", + "value": "2894" + }, + { + "label": "Emotionall", + "value": "338" + }, + { + "label": "Emperialpo", + "value": "1101" + }, + { + "label": "Emperor", + "value": "2844" + }, + { + "label": "EmperorCha", + "value": "2363" + }, + { + "label": "EmperorYao", + "value": "1789" + }, + { + "label": "Empire", + "value": "916" + }, + { + "label": "EmpireBuil", + "value": "1495" + }, + { + "label": "Empires", + "value": "517" + }, + { + "label": "empressfem", + "value": "2947" + }, + { + "label": "emptymonol", + "value": "2261" + }, + { + "label": "Encryption", + "value": "3102" + }, + { + "label": "EndoftheWo", + "value": "2378" + }, + { + "label": "Enemies", + "value": "3128" + }, + { + "label": "EnemiesBec", + "value": "324" + }, + { + "label": "EnemiesBec", + "value": "198" + }, + { + "label": "enemiestol", + "value": "1397" + }, + { + "label": "EnemytoLov", + "value": "1230" + }, + { + "label": "EnemytoLov", + "value": "864" + }, + { + "label": "engageinba", + "value": "2545" + }, + { + "label": "Engagement", + "value": "158" + }, + { + "label": "Engineer", + "value": "581" + }, + { + "label": "Enlightenm", + "value": "606" + }, + { + "label": "Entertaime", + "value": "892" + }, + { + "label": "Entertaini", + "value": "2313" + }, + { + "label": "entertainm", + "value": "1300" + }, + { + "label": "entertainm", + "value": "2477" + }, + { + "label": "entertainm", + "value": "2664" + }, + { + "label": "Entertainm", + "value": "187" + }, + { + "label": "Entertainm", + "value": "738" + }, + { + "label": "Entertainm", + "value": "752" + }, + { + "label": "Entertainm", + "value": "1521" + }, + { + "label": "Episodic", + "value": "438" + }, + { + "label": "Erwazi", + "value": "2658" + }, + { + "label": "Esper", + "value": "3223" + }, + { + "label": "eternityor", + "value": "2312" + }, + { + "label": "Eunuch", + "value": "121" + }, + { + "label": "EunuchJinr", + "value": "1681" + }, + { + "label": "Europe", + "value": "2916" + }, + { + "label": "EuropeanAm", + "value": "851" + }, + { + "label": "EuropeanAm", + "value": "1052" + }, + { + "label": "evenge", + "value": "2969" + }, + { + "label": "Evergrande", + "value": "2592" + }, + { + "label": "Evergrande", + "value": "2210" + }, + { + "label": "everlastin", + "value": "2550" + }, + { + "label": "everydayfi", + "value": "2383" + }, + { + "label": "Evil", + "value": "1289" + }, + { + "label": "Evil-prota", + "value": "1056" + }, + { + "label": "EvilAuthor", + "value": "3095" + }, + { + "label": "EvilCharac", + "value": "761" + }, + { + "label": "EvilGod", + "value": "955" + }, + { + "label": "EvilGods", + "value": "134" + }, + { + "label": "Evilmc", + "value": "3186" + }, + { + "label": "EvilOrgani", + "value": "69" + }, + { + "label": "EvilOrgani", + "value": "991" + }, + { + "label": "EvilProtag", + "value": "336" + }, + { + "label": "EvilReligi", + "value": "495" + }, + { + "label": "EvilSpirit", + "value": "3015" + }, + { + "label": "EvilSprits", + "value": "1313" + }, + { + "label": "Evolution", + "value": "202" + }, + { + "label": "Ex", + "value": "3030" + }, + { + "label": "Ex-girlfri", + "value": "1128" + }, + { + "label": "Excessivel", + "value": "3034" + }, + { + "label": "exercise", + "value": "3122" + }, + { + "label": "exes", + "value": "1368" + }, + { + "label": "Exhaustion", + "value": "2868" + }, + { + "label": "Exorcism", + "value": "481" + }, + { + "label": "Exorcist", + "value": "908" + }, + { + "label": "Experience", + "value": "686" + }, + { + "label": "Exploratio", + "value": "3131" + }, + { + "label": "Extraordin", + "value": "1206" + }, + { + "label": "Extremelyi", + "value": "2100" + }, + { + "label": "eyepower", + "value": "987" + }, + { + "label": "EyePowers", + "value": "170" + }, + { + "label": "Faceslap", + "value": "1226" + }, + { + "label": "FaceSlappi", + "value": "739" + }, + { + "label": "FahaiInvin", + "value": "2537" + }, + { + "label": "Fahaiunder", + "value": "2105" + }, + { + "label": "Fairies", + "value": "726" + }, + { + "label": "Fairy", + "value": "2823" + }, + { + "label": "fairygirlf", + "value": "2327" + }, + { + "label": "FairySword", + "value": "1822" + }, + { + "label": "FairyTail", + "value": "646" + }, + { + "label": "Fairy丨Pin", + "value": "1673" + }, + { + "label": "Fakeandrea", + "value": "3032" + }, + { + "label": "fakegod", + "value": "2432" + }, + { + "label": "FaketoReal", + "value": "1582" + }, + { + "label": "FallenAnge", + "value": "1441" + }, + { + "label": "Fallenleav", + "value": "1959" + }, + { + "label": "FallenNobi", + "value": "297" + }, + { + "label": "FallenWing", + "value": "2644" + }, + { + "label": "FallingRai", + "value": "1798" + }, + { + "label": "fallintoth", + "value": "2690" + }, + { + "label": "Faloo", + "value": "640" + }, + { + "label": "FamilialLo", + "value": "101" + }, + { + "label": "Familiars", + "value": "1443" + }, + { + "label": "FamillialL", + "value": "917" + }, + { + "label": "Family", + "value": "228" + }, + { + "label": "FamilyBuil", + "value": "1592" + }, + { + "label": "FamilyBusi", + "value": "248" + }, + { + "label": "FamilyConf", + "value": "548" + }, + { + "label": "familylife", + "value": "1192" + }, + { + "label": "FamilyLove", + "value": "1270" + }, + { + "label": "Familyreun", + "value": "3008" + }, + { + "label": "Famous", + "value": "1522" + }, + { + "label": "famouscoup", + "value": "1263" + }, + { + "label": "Famousdete", + "value": "1769" + }, + { + "label": "FamousPare", + "value": "335" + }, + { + "label": "FamousProt", + "value": "249" + }, + { + "label": "Fan-fictio", + "value": "115" + }, + { + "label": "Fanaticism", + "value": "576" + }, + { + "label": "Fanfic", + "value": "718" + }, + { + "label": "Fanfiction", + "value": "86" + }, + { + "label": "FanFicton", + "value": "1144" + }, + { + "label": "FangQingya", + "value": "2233" + }, + { + "label": "FanJiu", + "value": "2128" + }, + { + "label": "fanofstar", + "value": "2599" + }, + { + "label": "fanqienove", + "value": "2942" + }, + { + "label": "FantaCola", + "value": "2122" + }, + { + "label": "Fantasia", + "value": "3056" + }, + { + "label": "Fantasy", + "value": "240" + }, + { + "label": "Fantasybos", + "value": "2373" + }, + { + "label": "FantasyCre", + "value": "374" + }, + { + "label": "FantasyCre", + "value": "2915" + }, + { + "label": "Fantasyfut", + "value": "1369" + }, + { + "label": "FantasyMag", + "value": "310" + }, + { + "label": "Fantasyrom", + "value": "3106" + }, + { + "label": "FantasyWor", + "value": "47" + }, + { + "label": "Farm", + "value": "1254" + }, + { + "label": "Farming", + "value": "102" + }, + { + "label": "FarmingTex", + "value": "928" + }, + { + "label": "FastCultiv", + "value": "70" + }, + { + "label": "FastGrowth", + "value": "1219" + }, + { + "label": "FastLearne", + "value": "71" + }, + { + "label": "Fastpace", + "value": "3191" + }, + { + "label": "Fastpaced", + "value": "3094" + }, + { + "label": "fasttravel", + "value": "2927" + }, + { + "label": "FastWearin", + "value": "1035" + }, + { + "label": "FatDiddy", + "value": "2467" + }, + { + "label": "Fatedlove", + "value": "3006" + }, + { + "label": "FatedLover", + "value": "442" + }, + { + "label": "FateSeries", + "value": "1186" + }, + { + "label": "fatmanoffa", + "value": "1901" + }, + { + "label": "FatProtago", + "value": "998" + }, + { + "label": "FattoFit", + "value": "582" + }, + { + "label": "Faucet", + "value": "2588" + }, + { + "label": "Favoritebl", + "value": "1965" + }, + { + "label": "Favoriteco", + "value": "2642" + }, + { + "label": "FearlessPr", + "value": "434" + }, + { + "label": "Feelgood", + "value": "2998" + }, + { + "label": "FeiLuEdiso", + "value": "1796" + }, + { + "label": "Fellatio", + "value": "433" + }, + { + "label": "FemaleEmpe", + "value": "2880" + }, + { + "label": "FemaleFigh", + "value": "1187" + }, + { + "label": "FemaleLead", + "value": "678" + }, + { + "label": "FemaleMast", + "value": "588" + }, + { + "label": "FemaleMast", + "value": "339" + }, + { + "label": "FemaleMC", + "value": "1003" + }, + { + "label": "FemalePart", + "value": "2925" + }, + { + "label": "FemalePres", + "value": "1023" + }, + { + "label": "Femaleprot", + "value": "744" + }, + { + "label": "FemaleProt", + "value": "45" + }, + { + "label": "FemaleProt", + "value": "2770" + }, + { + "label": "Femaleside", + "value": "2970" + }, + { + "label": "FemaleSpie", + "value": "1074" + }, + { + "label": "FemalesPro", + "value": "900" + }, + { + "label": "FemaletoMa", + "value": "1329" + }, + { + "label": "Fengqing", + "value": "2282" + }, + { + "label": "FengShui", + "value": "420" + }, + { + "label": "FengziXiao", + "value": "1925" + }, + { + "label": "FerrariEnz", + "value": "1779" + }, + { + "label": "Fetish", + "value": "3207" + }, + { + "label": "Fiction", + "value": "3220" + }, + { + "label": "fierce", + "value": "1984" + }, + { + "label": "Fifi&03", + "value": "2689" + }, + { + "label": "FifthEmper", + "value": "2306" + }, + { + "label": "Fightforhe", + "value": "2929" + }, + { + "label": "FightingCo", + "value": "2311" + }, + { + "label": "Finance", + "value": "1540" + }, + { + "label": "Firearms", + "value": "330" + }, + { + "label": "Fireinthes", + "value": "1891" + }, + { + "label": "fireonfire", + "value": "2476" + }, + { + "label": "Firethief", + "value": "1655" + }, + { + "label": "FireWinged", + "value": "2241" + }, + { + "label": "First-time", + "value": "747" + }, + { + "label": "First-time", + "value": "491" + }, + { + "label": "firstgreen", + "value": "2409" + }, + { + "label": "FirstLove", + "value": "504" + }, + { + "label": "firstperso", + "value": "1832" + }, + { + "label": "fishandraf", + "value": "2336" + }, + { + "label": "fisheatpan", + "value": "2443" + }, + { + "label": "fishfishda", + "value": "1927" + }, + { + "label": "Fishheadis", + "value": "2696" + }, + { + "label": "fishinflam", + "value": "2632" + }, + { + "label": "Fishing", + "value": "1085" + }, + { + "label": "fishswimmi", + "value": "2657" + }, + { + "label": "Fistfights", + "value": "1541" + }, + { + "label": "flamingfla", + "value": "1693" + }, + { + "label": "Flashbacks", + "value": "1079" + }, + { + "label": "FleetBattl", + "value": "569" + }, + { + "label": "Floatingli", + "value": "2427" + }, + { + "label": "flowersoft", + "value": "2685" + }, + { + "label": "flyingcow", + "value": "2424" + }, + { + "label": "flyingfish", + "value": "2003" + }, + { + "label": "flyinglitt", + "value": "2398" + }, + { + "label": "FlyingLuTi", + "value": "2158" + }, + { + "label": "flyingshar", + "value": "2618" + }, + { + "label": "flyingsqui", + "value": "2227" + }, + { + "label": "Flyingwhit", + "value": "2553" + }, + { + "label": "flyinthelo", + "value": "2492" + }, + { + "label": "Folklore", + "value": "1417" + }, + { + "label": "Followthew", + "value": "1941" + }, + { + "label": "Food", + "value": "972" + }, + { + "label": "FoodWars!", + "value": "663" + }, + { + "label": "Football", + "value": "266" + }, + { + "label": "Forbiddenl", + "value": "3023" + }, + { + "label": "Forcedinto", + "value": "1424" + }, + { + "label": "ForcedLivi", + "value": "1141" + }, + { + "label": "ForcedMarr", + "value": "573" + }, + { + "label": "forest", + "value": "1988" + }, + { + "label": "ForgetfulP", + "value": "467" + }, + { + "label": "Forgiveyou", + "value": "2068" + }, + { + "label": "Formation", + "value": "2884" + }, + { + "label": "Formations", + "value": "926" + }, + { + "label": "FormerHero", + "value": "1470" + }, + { + "label": "formworksk", + "value": "2701" + }, + { + "label": "Fourkeys", + "value": "2310" + }, + { + "label": "Foursome", + "value": "3201" + }, + { + "label": "FourthDisa", + "value": "801" + }, + { + "label": "FoxdemonXi", + "value": "2226" + }, + { + "label": "foxlisteni", + "value": "1680" + }, + { + "label": "FoxSpirits", + "value": "712" + }, + { + "label": "fqloo", + "value": "3236" + }, + { + "label": "France", + "value": "1080" + }, + { + "label": "Friction", + "value": "1569" + }, + { + "label": "Friday", + "value": "1744" + }, + { + "label": "FriendsBec", + "value": "562" + }, + { + "label": "Friendship", + "value": "392" + }, + { + "label": "Friendstol", + "value": "3025" + }, + { + "label": "Fujoshi", + "value": "72" + }, + { + "label": "Fullcolor", + "value": "2862" + }, + { + "label": "fullmeal", + "value": "2030" + }, + { + "label": "Funny", + "value": "2901" + }, + { + "label": "furioussna", + "value": "2188" + }, + { + "label": "Fusión", + "value": "810" + }, + { + "label": "Futanari", + "value": "922" + }, + { + "label": "Future", + "value": "1287" + }, + { + "label": "FutureCivi", + "value": "135" + }, + { + "label": "FutureCivi", + "value": "771" + }, + { + "label": "futuredyst", + "value": "2949" + }, + { + "label": "futureworl", + "value": "2773" + }, + { + "label": "Futuristic", + "value": "199" + }, + { + "label": "Futuristic", + "value": "1087" + }, + { + "label": "gacha", + "value": "3218" + }, + { + "label": "galacticli", + "value": "1043" + }, + { + "label": "Galacticos", + "value": "1771" + }, + { + "label": "Galaxyboy", + "value": "2107" + }, + { + "label": "Galge", + "value": "1618" + }, + { + "label": "Gambling", + "value": "461" + }, + { + "label": "Game", + "value": "937" + }, + { + "label": "gameelemen", + "value": "1234" + }, + { + "label": "GameElemen", + "value": "73" + }, + { + "label": "GameElemen", + "value": "843" + }, + { + "label": "GameOnline", + "value": "1013" + }, + { + "label": "GameRangki", + "value": "982" + }, + { + "label": "GameRankin", + "value": "241" + }, + { + "label": "Gamers", + "value": "160" + }, + { + "label": "GameSystem", + "value": "1524" + }, + { + "label": "gameworld", + "value": "953" + }, + { + "label": "Gaming", + "value": "1121" + }, + { + "label": "GamingE-Sp", + "value": "496" + }, + { + "label": "Gangs", + "value": "299" + }, + { + "label": "Gangsters", + "value": "1295" + }, + { + "label": "GaoYuanyao", + "value": "2541" + }, + { + "label": "GatetoAnot", + "value": "109" + }, + { + "label": "Geass", + "value": "1191" + }, + { + "label": "Genderbend", + "value": "1512" + }, + { + "label": "GenderBend", + "value": "872" + }, + { + "label": "Genderless", + "value": "361" + }, + { + "label": "Genderless", + "value": "1239" + }, + { + "label": "Genderneut", + "value": "3114" + }, + { + "label": "GenderRole", + "value": "1510" + }, + { + "label": "GeneModifi", + "value": "661" + }, + { + "label": "Generals", + "value": "256" + }, + { + "label": "GeneralXie", + "value": "2653" + }, + { + "label": "Genetic", + "value": "3098" + }, + { + "label": "GeneticMod", + "value": "422" + }, + { + "label": "Genies", + "value": "200" + }, + { + "label": "genius", + "value": "1343" + }, + { + "label": "GeniusFema", + "value": "3168" + }, + { + "label": "GeniusProt", + "value": "159" + }, + { + "label": "Genshin", + "value": "1099" + }, + { + "label": "GenshinImp", + "value": "668" + }, + { + "label": "GentleLove", + "value": "1366" + }, + { + "label": "gentleman", + "value": "1834" + }, + { + "label": "GentleProt", + "value": "1324" + }, + { + "label": "GetRich", + "value": "1319" + }, + { + "label": "Gettingbac", + "value": "3029" + }, + { + "label": "Ghost", + "value": "813" + }, + { + "label": "Ghostexter", + "value": "2560" + }, + { + "label": "Ghosts", + "value": "311" + }, + { + "label": "Ghostsinre", + "value": "2263" + }, + { + "label": "Giantdrago", + "value": "3164" + }, + { + "label": "giantpanda", + "value": "2719" + }, + { + "label": "Giants", + "value": "1288" + }, + { + "label": "Gilf", + "value": "3203" + }, + { + "label": "GingerLemo", + "value": "2803" + }, + { + "label": "giveyoutim", + "value": "1913" + }, + { + "label": "Glasses-we", + "value": "1341" + }, + { + "label": "Glasses-we", + "value": "1453" + }, + { + "label": "GLL", + "value": "2185" + }, + { + "label": "Global", + "value": "3162" + }, + { + "label": "Go", + "value": "1793" + }, + { + "label": "goallist", + "value": "2544" + }, + { + "label": "Goblins", + "value": "627" + }, + { + "label": "God", + "value": "839" + }, + { + "label": "God-humanR", + "value": "465" + }, + { + "label": "God&039", + "value": "2027" + }, + { + "label": "GodandDevi", + "value": "1097" + }, + { + "label": "Goddess", + "value": "1177" + }, + { + "label": "goddessbos", + "value": "2238" + }, + { + "label": "Goddesses", + "value": "166" + }, + { + "label": "Goddidnotg", + "value": "2271" + }, + { + "label": "GodLikeMC", + "value": "1006" + }, + { + "label": "GodlyPower", + "value": "137" + }, + { + "label": "GodlyPower", + "value": "1183" + }, + { + "label": "GodlyProta", + "value": "1591" + }, + { + "label": "godofduel", + "value": "1760" + }, + { + "label": "GodofForti", + "value": "1848" + }, + { + "label": "Godofwings", + "value": "2186" + }, + { + "label": "GodProtago", + "value": "136" + }, + { + "label": "Gods", + "value": "167" + }, + { + "label": "godsaltedf", + "value": "2463" + }, + { + "label": "Godzilla", + "value": "1311" + }, + { + "label": "Golden", + "value": "2504" + }, + { + "label": "GoldenFing", + "value": "769" + }, + { + "label": "goldenfore", + "value": "2630" + }, + { + "label": "goldfinger", + "value": "1792" + }, + { + "label": "goldrush", + "value": "2893" + }, + { + "label": "Golems", + "value": "1291" + }, + { + "label": "GoneStrawb", + "value": "1928" + }, + { + "label": "gongregret", + "value": "2871" + }, + { + "label": "good-natur", + "value": "2528" + }, + { + "label": "goodpotdre", + "value": "1721" + }, + { + "label": "Goodvibes", + "value": "3040" + }, + { + "label": "Gooifyouca", + "value": "2349" + }, + { + "label": "Gore", + "value": "303" + }, + { + "label": "goslowbro", + "value": "1712" + }, + { + "label": "gossip", + "value": "1906" + }, + { + "label": "Gotaki", + "value": "1942" + }, + { + "label": "Gourmet", + "value": "1150" + }, + { + "label": "Government", + "value": "1222" + }, + { + "label": "GradeXNUMX", + "value": "1649" + }, + { + "label": "GreatCeles", + "value": "2174" + }, + { + "label": "GreatSage", + "value": "1880" + }, + { + "label": "GreedyProt", + "value": "714" + }, + { + "label": "greentea", + "value": "1629" + }, + { + "label": "Grimdark", + "value": "631" + }, + { + "label": "Grinding", + "value": "331" + }, + { + "label": "GroupChat", + "value": "799" + }, + { + "label": "Grouppampe", + "value": "3031" + }, + { + "label": "GroupPet", + "value": "2771" + }, + { + "label": "Groupspoil", + "value": "3007" + }, + { + "label": "Growth", + "value": "1066" + }, + { + "label": "Grupchat", + "value": "1054" + }, + { + "label": "GuardianRe", + "value": "1272" + }, + { + "label": "Guideverse", + "value": "2946" + }, + { + "label": "Guilds", + "value": "482" + }, + { + "label": "GuiltyScis", + "value": "2455" + }, + { + "label": "Gundam", + "value": "1353" + }, + { + "label": "Gunfighter", + "value": "559" + }, + { + "label": "Guns", + "value": "1542" + }, + { + "label": "GuShaoxia", + "value": "1707" + }, + { + "label": "H11H", + "value": "2613" + }, + { + "label": "Hacker", + "value": "1091" + }, + { + "label": "Hackers", + "value": "188" + }, + { + "label": "Haikyuu", + "value": "1393" + }, + { + "label": "HakoniwaSe", + "value": "2255" + }, + { + "label": "Half-human", + "value": "1406" + }, + { + "label": "halfanoran", + "value": "2491" + }, + { + "label": "halfstepge", + "value": "2345" + }, + { + "label": "Halo", + "value": "1473" + }, + { + "label": "Haminstant", + "value": "2563" + }, + { + "label": "Handjob", + "value": "539" + }, + { + "label": "Handsomegu", + "value": "2671" + }, + { + "label": "HandsomeMa", + "value": "11" + }, + { + "label": "HandsomeMa", + "value": "1256" + }, + { + "label": "HandsomeMC", + "value": "3209" + }, + { + "label": "handsomeon", + "value": "2487" + }, + { + "label": "HandsomePr", + "value": "762" + }, + { + "label": "handtearin", + "value": "2223" + }, + { + "label": "HaotianExt", + "value": "2219" + }, + { + "label": "HaoyuYingx", + "value": "2804" + }, + { + "label": "Happy", + "value": "865" + }, + { + "label": "HappyBeanl", + "value": "2032" + }, + { + "label": "HappyEndin", + "value": "1477" + }, + { + "label": "HappyFlow", + "value": "2702" + }, + { + "label": "Hard-Worki", + "value": "103" + }, + { + "label": "Hardworkin", + "value": "881" + }, + { + "label": "Harem", + "value": "21" + }, + { + "label": "Harem-seek", + "value": "138" + }, + { + "label": "Haremismta", + "value": "2401" + }, + { + "label": "HaremSeeki", + "value": "1176" + }, + { + "label": "HarryPotte", + "value": "436" + }, + { + "label": "HarshTrain", + "value": "952" + }, + { + "label": "Hashihime", + "value": "1948" + }, + { + "label": "HatedProta", + "value": "1407" + }, + { + "label": "Hawkeye", + "value": "2189" + }, + { + "label": "Healers", + "value": "577" + }, + { + "label": "Healing", + "value": "1049" + }, + { + "label": "Healthewor", + "value": "2182" + }, + { + "label": "heartandey", + "value": "2494" + }, + { + "label": "HeartBreak", + "value": "2895" + }, + { + "label": "HeartHunte", + "value": "2556" + }, + { + "label": "Heartthrob", + "value": "3038" + }, + { + "label": "Heartwarmi", + "value": "57" + }, + { + "label": "Heaven", + "value": "938" + }, + { + "label": "heavenclea", + "value": "2405" + }, + { + "label": "HeavenlyTr", + "value": "87" + }, + { + "label": "heavensong", + "value": "2420" + }, + { + "label": "Hegemony", + "value": "2763" + }, + { + "label": "Hell", + "value": "543" + }, + { + "label": "HelpfulPro", + "value": "503" + }, + { + "label": "Hentai", + "value": "3192" + }, + { + "label": "Herbalist", + "value": "1459" + }, + { + "label": "Hero", + "value": "624" + }, + { + "label": "Heroes", + "value": "462" + }, + { + "label": "Heroesofth", + "value": "1808" + }, + { + "label": "heroine", + "value": "1630" + }, + { + "label": "Heterochro", + "value": "1262" + }, + { + "label": "hey", + "value": "1950" + }, + { + "label": "hi", + "value": "1844" + }, + { + "label": "HiddenAbil", + "value": "190" + }, + { + "label": "HiddenBoss", + "value": "1063" + }, + { + "label": "HiddenGem", + "value": "2971" + }, + { + "label": "HiddenIden", + "value": "1180" + }, + { + "label": "HiddenIden", + "value": "696" + }, + { + "label": "Hiddenmarr", + "value": "3010" + }, + { + "label": "HiddenTrue", + "value": "745" + }, + { + "label": "HiddenWeap", + "value": "3097" + }, + { + "label": "HidingAbil", + "value": "1471" + }, + { + "label": "HidingTrue", + "value": "191" + }, + { + "label": "HidingTrue", + "value": "39" + }, + { + "label": "HidingTrue", + "value": "855" + }, + { + "label": "HidingTrue", + "value": "1584" + }, + { + "label": "Highiq", + "value": "2981" + }, + { + "label": "Highschool", + "value": "3194" + }, + { + "label": "HighSchool", + "value": "879" + }, + { + "label": "Higu", + "value": "1963" + }, + { + "label": "HisMajesty", + "value": "2283" + }, + { + "label": "Historical", + "value": "641" + }, + { + "label": "Historical", + "value": "2966" + }, + { + "label": "Historical", + "value": "3064" + }, + { + "label": "History", + "value": "1496" + }, + { + "label": "hitten", + "value": "2791" + }, + { + "label": "Hogwarts", + "value": "1211" + }, + { + "label": "Hokage", + "value": "1490" + }, + { + "label": "Hollywood", + "value": "909" + }, + { + "label": "holyangel", + "value": "1861" + }, + { + "label": "HolyKingRa", + "value": "1676" + }, + { + "label": "HomeAttrib", + "value": "2234" + }, + { + "label": "HonestandR", + "value": "2507" + }, + { + "label": "HonestProt", + "value": "903" + }, + { + "label": "HongfeiQin", + "value": "2480" + }, + { + "label": "HonghuangN", + "value": "2392" + }, + { + "label": "Honghuangs", + "value": "2073" + }, + { + "label": "HongmengSh", + "value": "1634" + }, + { + "label": "HongTang", + "value": "1735" + }, + { + "label": "HonkaiImpa", + "value": "976" + }, + { + "label": "Horor", + "value": "3226" + }, + { + "label": "horror", + "value": "699" + }, + { + "label": "horrorgod", + "value": "2247" + }, + { + "label": "Hospital", + "value": "439" + }, + { + "label": "Hot-bloode", + "value": "426" + }, + { + "label": "HotBlood", + "value": "2795" + }, + { + "label": "hotpot", + "value": "2611" + }, + { + "label": "houseprope", + "value": "2275" + }, + { + "label": "howlingpig", + "value": "2164" + }, + { + "label": "howlingwin", + "value": "2655" + }, + { + "label": "HuanHuanHu", + "value": "1909" + }, + { + "label": "Huijingund", + "value": "2102" + }, + { + "label": "HuiMochou", + "value": "1847" + }, + { + "label": "Human-Nonh", + "value": "321" + }, + { + "label": "HumanExper", + "value": "312" + }, + { + "label": "HumanExper", + "value": "1004" + }, + { + "label": "HumanoidPr", + "value": "528" + }, + { + "label": "HumanWeapo", + "value": "427" + }, + { + "label": "Humiliatio", + "value": "3206" + }, + { + "label": "humla", + "value": "2075" + }, + { + "label": "Humour", + "value": "3109" + }, + { + "label": "Hunter", + "value": "2837" + }, + { + "label": "Hunter×Hu", + "value": "2780" + }, + { + "label": "hunterkill", + "value": "1734" + }, + { + "label": "Hunters", + "value": "500" + }, + { + "label": "HunterxHun", + "value": "692" + }, + { + "label": "HuTiandi", + "value": "2235" + }, + { + "label": "HxH", + "value": "956" + }, + { + "label": "hyperknigh", + "value": "1778" + }, + { + "label": "Hypnotism", + "value": "860" + }, + { + "label": "I&039ma", + "value": "2041" + }, + { + "label": "I&039mo", + "value": "2208" + }, + { + "label": "Iamapirate", + "value": "2175" + }, + { + "label": "Iamarealdi", + "value": "2166" + }, + { + "label": "IamAsi", + "value": "2625" + }, + { + "label": "iamatravel", + "value": "1781" + }, + { + "label": "Iamfifth", + "value": "2172" + }, + { + "label": "IamGuanxi", + "value": "2286" + }, + { + "label": "Iamhell", + "value": "2300" + }, + { + "label": "IamHisMaje", + "value": "2151" + }, + { + "label": "Iamnotaloc", + "value": "1865" + }, + { + "label": "Iamolderth", + "value": "2125" + }, + { + "label": "Iamoldwolf", + "value": "2575" + }, + { + "label": "Iamthemurd", + "value": "2652" + }, + { + "label": "Iamtheseak", + "value": "1751" + }, + { + "label": "Iamtheseco", + "value": "2527" + }, + { + "label": "Iamtwenty-", + "value": "2479" + }, + { + "label": "Iateeightc", + "value": "2787" + }, + { + "label": "Ibuprofen", + "value": "2456" + }, + { + "label": "icalledthe", + "value": "1888" + }, + { + "label": "IcedDurian", + "value": "2707" + }, + { + "label": "icewalk", + "value": "1824" + }, + { + "label": "IdentityCr", + "value": "122" + }, + { + "label": "Idol", + "value": "845" + }, + { + "label": "idon&03", + "value": "2049" + }, + { + "label": "idropbaby", + "value": "1686" + }, + { + "label": "ieatgrass", + "value": "2485" + }, + { + "label": "Ifyoucango", + "value": "1973" + }, + { + "label": "ihavethere", + "value": "2650" + }, + { + "label": "Ijustwantt", + "value": "1757" + }, + { + "label": "Iliveupsta", + "value": "1863" + }, + { + "label": "Illigitima", + "value": "1315" + }, + { + "label": "Ilo", + "value": "1639" + }, + { + "label": "ilovewoo", + "value": "2585" + }, + { + "label": "Immortal", + "value": "1045" + }, + { + "label": "ImmortalBi", + "value": "2534" + }, + { + "label": "ImmortalMa", + "value": "2660" + }, + { + "label": "Immortals", + "value": "260" + }, + { + "label": "imperialco", + "value": "1048" + }, + { + "label": "ImperialEx", + "value": "2818" + }, + { + "label": "ImperialFa", + "value": "1609" + }, + { + "label": "ImperialHa", + "value": "344" + }, + { + "label": "Imposter", + "value": "2980" + }, + { + "label": "Incest", + "value": "453" + }, + { + "label": "Incubus", + "value": "2810" + }, + { + "label": "Indecisive", + "value": "359" + }, + { + "label": "industrial", + "value": "2835" + }, + { + "label": "Industrial", + "value": "560" + }, + { + "label": "Industry", + "value": "818" + }, + { + "label": "industryel", + "value": "2953" + }, + { + "label": "Inferior", + "value": "2896" + }, + { + "label": "Inferiorit", + "value": "262" + }, + { + "label": "Infernalco", + "value": "1924" + }, + { + "label": "infinite", + "value": "966" + }, + { + "label": "InfiniteBu", + "value": "2053" + }, + { + "label": "InfiniteFl", + "value": "822" + }, + { + "label": "Infiniteme", + "value": "1883" + }, + { + "label": "infinitesu", + "value": "2412" + }, + { + "label": "infrastrac", + "value": "975" + }, + { + "label": "Infrastruc", + "value": "989" + }, + { + "label": "Inheritanc", + "value": "229" + }, + { + "label": "Ink", + "value": "2681" + }, + { + "label": "InnerVoice", + "value": "1242" + }, + { + "label": "Inscriptio", + "value": "1413" + }, + { + "label": "Insects", + "value": "244" + }, + { + "label": "insitu", + "value": "2693" + }, + { + "label": "Intelligen", + "value": "1534" + }, + { + "label": "Intercept0", + "value": "1842" + }, + { + "label": "Intercept0", + "value": "2684" + }, + { + "label": "Interconne", + "value": "1360" + }, + { + "label": "Interdimen", + "value": "423" + }, + { + "label": "Interestel", + "value": "698" + }, + { + "label": "Interstell", + "value": "710" + }, + { + "label": "Introverte", + "value": "511" + }, + { + "label": "Inuyasha", + "value": "2749" + }, + { + "label": "Investigat", + "value": "1154" + }, + { + "label": "Investigat", + "value": "885" + }, + { + "label": "Investigat", + "value": "1513" + }, + { + "label": "Invincibil", + "value": "3148" + }, + { + "label": "Invincible", + "value": "3074" + }, + { + "label": "Invincible", + "value": "1660" + }, + { + "label": "Invincible", + "value": "1723" + }, + { + "label": "Invincible", + "value": "1742" + }, + { + "label": "Invincible", + "value": "1810" + }, + { + "label": "IronMaiden", + "value": "2784" + }, + { + "label": "ironpillar", + "value": "2187" + }, + { + "label": "IronThanos", + "value": "2547" + }, + { + "label": "Isekai", + "value": "983" + }, + { + "label": "isitnecess", + "value": "1921" + }, + { + "label": "Issekai", + "value": "3182" + }, + { + "label": "Isuckbrown", + "value": "1949" + }, + { + "label": "IsumiLily", + "value": "2347" + }, + { + "label": "It&039s", + "value": "2039" + }, + { + "label": "Itsdaybrea", + "value": "1962" + }, + { + "label": "iwantmoney", + "value": "2315" + }, + { + "label": "Iwanttobea", + "value": "2360" + }, + { + "label": "Iwanttobeo", + "value": "2402" + }, + { + "label": "iwanttoeat", + "value": "2697" + }, + { + "label": "iwanttogot", + "value": "2514" + }, + { + "label": "Iwishyouat", + "value": "1972" + }, + { + "label": "JackieChan", + "value": "2750" + }, + { + "label": "JackofAllT", + "value": "75" + }, + { + "label": "jadeeveryy", + "value": "2198" + }, + { + "label": "JangSeok-g", + "value": "1642" + }, + { + "label": "Japan", + "value": "853" + }, + { + "label": "Jazz", + "value": "2564" + }, + { + "label": "Jealousy", + "value": "551" + }, + { + "label": "jellyjelly", + "value": "2365" + }, + { + "label": "Jianghu", + "value": "786" + }, + { + "label": "Jiangshi", + "value": "406" + }, + { + "label": "Jianjiamix", + "value": "2249" + }, + { + "label": "JinglongTa", + "value": "2643" + }, + { + "label": "Jiutianyu", + "value": "2029" + }, + { + "label": "John117", + "value": "2508" + }, + { + "label": "JoJo", + "value": "2740" + }, + { + "label": "JoJo&03", + "value": "2741" + }, + { + "label": "JOJOWE", + "value": "1806" + }, + { + "label": "Josei", + "value": "876" + }, + { + "label": "Journeytot", + "value": "677" + }, + { + "label": "joydrummer", + "value": "1866" + }, + { + "label": "Judge", + "value": "3063" + }, + { + "label": "JujutsuKai", + "value": "675" + }, + { + "label": "Juliet", + "value": "1658" + }, + { + "label": "JunCaiXing", + "value": "2670" + }, + { + "label": "JuniorSist", + "value": "2037" + }, + { + "label": "Jurassic", + "value": "3158" + }, + { + "label": "justshout", + "value": "2676" + }, + { + "label": "K-popIdols", + "value": "1620" + }, + { + "label": "Kafkajumpi", + "value": "1887" + }, + { + "label": "Kakashi", + "value": "1491" + }, + { + "label": "keytocome", + "value": "2323" + }, + { + "label": "Kidnapping", + "value": "552" + }, + { + "label": "Killer", + "value": "2982" + }, + { + "label": "Killthewor", + "value": "2056" + }, + { + "label": "Kindergart", + "value": "1370" + }, + { + "label": "KindLoveIn", + "value": "544" + }, + { + "label": "KindomBuil", + "value": "1027" + }, + { + "label": "KindProtag", + "value": "1031" + }, + { + "label": "King", + "value": "1745" + }, + { + "label": "KingAsura", + "value": "2242" + }, + { + "label": "Kingdom", + "value": "1236" + }, + { + "label": "Kingdom-bu", + "value": "971" + }, + { + "label": "KingdomBui", + "value": "245" + }, + { + "label": "KingdomBui", + "value": "1293" + }, + { + "label": "Kingdoms", + "value": "139" + }, + { + "label": "KingdomsKn", + "value": "317" + }, + { + "label": "KingKonggo", + "value": "2509" + }, + { + "label": "kingofdeat", + "value": "2468" + }, + { + "label": "KingofDest", + "value": "1674" + }, + { + "label": "KingofMons", + "value": "2295" + }, + { + "label": "kingpirate", + "value": "2044" + }, + { + "label": "Kiritani", + "value": "2395" + }, + { + "label": "Kneelingan", + "value": "2678" + }, + { + "label": "Kneelingth", + "value": "2161" + }, + { + "label": "KnifePromi", + "value": "1852" + }, + { + "label": "Knight", + "value": "1559" + }, + { + "label": "Knights", + "value": "389" + }, + { + "label": "Knightsand", + "value": "3067" + }, + { + "label": "KnightsLev", + "value": "417" + }, + { + "label": "Knowtheric", + "value": "2335" + }, + { + "label": "Koi", + "value": "1181" + }, + { + "label": "Kojin", + "value": "2072" + }, + { + "label": "KonohaVoll", + "value": "2403" + }, + { + "label": "Korean", + "value": "3103" + }, + { + "label": "KoreanNove", + "value": "652" + }, + { + "label": "KpopIdols", + "value": "1337" + }, + { + "label": "KurongTemp", + "value": "1858" + }, + { + "label": "Kuudere", + "value": "1371" + }, + { + "label": "KwunTong", + "value": "1898" + }, + { + "label": "laborhonor", + "value": "2399" + }, + { + "label": "lackofboat", + "value": "2120" + }, + { + "label": "LackofComm", + "value": "340" + }, + { + "label": "LacquerNig", + "value": "1955" + }, + { + "label": "LaidBack", + "value": "2850" + }, + { + "label": "LameHaoisa", + "value": "2162" + }, + { + "label": "langyalist", + "value": "2292" + }, + { + "label": "LaoLaoXu", + "value": "1922" + }, + { + "label": "LateRomanc", + "value": "168" + }, + { + "label": "laurel", + "value": "2058" + }, + { + "label": "Lawyers", + "value": "545" + }, + { + "label": "lazy", + "value": "2827" + }, + { + "label": "lazydevil", + "value": "1976" + }, + { + "label": "LazyProtag", + "value": "104" + }, + { + "label": "Ldg", + "value": "3044" + }, + { + "label": "Leadership", + "value": "419" + }, + { + "label": "LeagueofLe", + "value": "1489" + }, + { + "label": "Leapeveryd", + "value": "2197" + }, + { + "label": "Legend", + "value": "1451" + }, + { + "label": "Legends", + "value": "140" + }, + { + "label": "LeiJiedoes", + "value": "1782" + }, + { + "label": "Leisurelys", + "value": "2289" + }, + { + "label": "LeiXunqing", + "value": "2798" + }, + { + "label": "lemonandsi", + "value": "2149" + }, + { + "label": "lendmefive", + "value": "2718" + }, + { + "label": "lesstime", + "value": "1691" + }, + { + "label": "Levelingup", + "value": "3088" + }, + { + "label": "LevelSyste", + "value": "123" + }, + { + "label": "Levelup", + "value": "2961" + }, + { + "label": "Liar", + "value": "888" + }, + { + "label": "Library", + "value": "1464" + }, + { + "label": "Life", + "value": "2897" + }, + { + "label": "LifeScript", + "value": "1323" + }, + { + "label": "Lightnings", + "value": "2020" + }, + { + "label": "Lightnovel", + "value": "2959" + }, + { + "label": "LiJunhao", + "value": "2636" + }, + { + "label": "LikeaDrago", + "value": "1752" + }, + { + "label": "LikeaDrago", + "value": "1755" + }, + { + "label": "LikeMeiAox", + "value": "2459" + }, + { + "label": "Lillie", + "value": "2520" + }, + { + "label": "LimitedLif", + "value": "285" + }, + { + "label": "LimitlessF", + "value": "615" + }, + { + "label": "LiMumu", + "value": "2155" + }, + { + "label": "LinBei", + "value": "2620" + }, + { + "label": "Lindentree", + "value": "2628" + }, + { + "label": "Lingran", + "value": "1939" + }, + { + "label": "LingshanIs", + "value": "2532" + }, + { + "label": "LinXiufigh", + "value": "2539" + }, + { + "label": "LinZhengyi", + "value": "2450" + }, + { + "label": "ListAdvent", + "value": "2863" + }, + { + "label": "ListCreati", + "value": "687" + }, + { + "label": "listentoth", + "value": "2590" + }, + { + "label": "literature", + "value": "632" + }, + { + "label": "LitRPG", + "value": "3112" + }, + { + "label": "littleahxi", + "value": "2054" + }, + { + "label": "littlebrot", + "value": "2145" + }, + { + "label": "Littlebun", + "value": "3073" + }, + { + "label": "littlecray", + "value": "2703" + }, + { + "label": "littledemo", + "value": "1990" + }, + { + "label": "littledete", + "value": "2687" + }, + { + "label": "littledevi", + "value": "2211" + }, + { + "label": "littlefing", + "value": "2239" + }, + { + "label": "littlefox", + "value": "2007" + }, + { + "label": "littlehson", + "value": "1851" + }, + { + "label": "littlemoon", + "value": "1893" + }, + { + "label": "littlesuns", + "value": "2176" + }, + { + "label": "littlewate", + "value": "2727" + }, + { + "label": "LittleWhit", + "value": "2836" + }, + { + "label": "littlewind", + "value": "2429" + }, + { + "label": "littlezlov", + "value": "1884" + }, + { + "label": "LiuYujun", + "value": "2280" + }, + { + "label": "LiveBroadc", + "value": "650" + }, + { + "label": "LiveBroadc", + "value": "1578" + }, + { + "label": "LiverPigeo", + "value": "1877" + }, + { + "label": "Livestream", + "value": "700" + }, + { + "label": "LiveStream", + "value": "1207" + }, + { + "label": "LivingAlon", + "value": "399" + }, + { + "label": "LiWudi", + "value": "1725" + }, + { + "label": "Loli", + "value": "1483" + }, + { + "label": "Lolicon", + "value": "313" + }, + { + "label": "LoliProtag", + "value": "1106" + }, + { + "label": "LoneCloudP", + "value": "2094" + }, + { + "label": "lonelyboy", + "value": "2359" + }, + { + "label": "LonelyCity", + "value": "1859" + }, + { + "label": "Lonelynota", + "value": "1838" + }, + { + "label": "LonerProta", + "value": "364" + }, + { + "label": "Long-dista", + "value": "1461" + }, + { + "label": "longlivedm", + "value": "2735" + }, + { + "label": "longlivemy", + "value": "2316" + }, + { + "label": "Longlivesa", + "value": "2435" + }, + { + "label": "Longliveth", + "value": "2297" + }, + { + "label": "Longliveth", + "value": "2531" + }, + { + "label": "LongMengme", + "value": "2140" + }, + { + "label": "Longpigeon", + "value": "2245" + }, + { + "label": "LongSepara", + "value": "223" + }, + { + "label": "LongStrip", + "value": "2864" + }, + { + "label": "Lord", + "value": "1536" + }, + { + "label": "LordAbilit", + "value": "1328" + }, + { + "label": "LordGodSpa", + "value": "1189" + }, + { + "label": "LordoftheM", + "value": "1112" + }, + { + "label": "LordoftheS", + "value": "1829" + }, + { + "label": "LordTiansh", + "value": "2488" + }, + { + "label": "LordZhangj", + "value": "2190" + }, + { + "label": "Loseafewpo", + "value": "1775" + }, + { + "label": "LostCivili", + "value": "42" + }, + { + "label": "Lottery", + "value": "572" + }, + { + "label": "Love", + "value": "1083" + }, + { + "label": "Loveafterm", + "value": "2977" + }, + { + "label": "LoveandMar", + "value": "990" + }, + { + "label": "LoveatFirs", + "value": "527" + }, + { + "label": "Lovecomedy", + "value": "2940" + }, + { + "label": "LoveContra", + "value": "1178" + }, + { + "label": "LoveGrowth", + "value": "1532" + }, + { + "label": "LoveIntere", + "value": "12" + }, + { + "label": "LoveIntere", + "value": "1231" + }, + { + "label": "LoveIntere", + "value": "1260" + }, + { + "label": "LoveRivals", + "value": "948" + }, + { + "label": "LoversReun", + "value": "443" + }, + { + "label": "Lovesnacks", + "value": "2042" + }, + { + "label": "lovetease", + "value": "2666" + }, + { + "label": "Lovetriang", + "value": "3027" + }, + { + "label": "LoveTriang", + "value": "848" + }, + { + "label": "Low-keylux", + "value": "2699" + }, + { + "label": "Low-keyPro", + "value": "22" + }, + { + "label": "LowKeyMc", + "value": "1615" + }, + { + "label": "LowkeyProt", + "value": "960" + }, + { + "label": "LoyalProta", + "value": "831" + }, + { + "label": "LoyalSubor", + "value": "341" + }, + { + "label": "LoyalSubor", + "value": "2814" + }, + { + "label": "LoyalSurbo", + "value": "1202" + }, + { + "label": "lu11034363", + "value": "2612" + }, + { + "label": "Luck", + "value": "1182" + }, + { + "label": "LuckPlunde", + "value": "1322" + }, + { + "label": "Lucky", + "value": "2873" + }, + { + "label": "LuckyProta", + "value": "207" + }, + { + "label": "LuDehua", + "value": "1985" + }, + { + "label": "LuoTianyi", + "value": "1716" + }, + { + "label": "LuoWei", + "value": "1846" + }, + { + "label": "LuoXIV", + "value": "2407" + }, + { + "label": "LuoYuqianq", + "value": "2633" + }, + { + "label": "LY", + "value": "2324" + }, + { + "label": "machine", + "value": "2922" + }, + { + "label": "Mafia", + "value": "1533" + }, + { + "label": "Mag", + "value": "3157" + }, + { + "label": "Mage", + "value": "763" + }, + { + "label": "Magic", + "value": "141" + }, + { + "label": "MagicalAbi", + "value": "1017" + }, + { + "label": "MagicalBat", + "value": "1188" + }, + { + "label": "magicalgir", + "value": "1358" + }, + { + "label": "MagicalSpa", + "value": "79" + }, + { + "label": "MagicalTec", + "value": "400" + }, + { + "label": "MagicBeast", + "value": "242" + }, + { + "label": "MagicDrago", + "value": "3091" + }, + { + "label": "MagicForma", + "value": "77" + }, + { + "label": "MagicOne", + "value": "2478" + }, + { + "label": "MagicTides", + "value": "2244" + }, + { + "label": "MagicWorld", + "value": "1625" + }, + { + "label": "Maid", + "value": "1160" + }, + { + "label": "Maids", + "value": "531" + }, + { + "label": "Makeafortu", + "value": "2517" + }, + { + "label": "makeamirac", + "value": "2109" + }, + { + "label": "Male-Lead", + "value": "940" + }, + { + "label": "Male-Prota", + "value": "980" + }, + { + "label": "MaleLead", + "value": "790" + }, + { + "label": "MaleMain-l", + "value": "722" + }, + { + "label": "Malemainch", + "value": "2736" + }, + { + "label": "MaleMc", + "value": "1199" + }, + { + "label": "Maleprotag", + "value": "825" + }, + { + "label": "MaleProtag", + "value": "23" + }, + { + "label": "MaleProtag", + "value": "2759" + }, + { + "label": "MaleProtag", + "value": "988" + }, + { + "label": "MaleProtag", + "value": "1507" + }, + { + "label": "MaletoFema", + "value": "563" + }, + { + "label": "MaleYander", + "value": "515" + }, + { + "label": "mambafight", + "value": "2597" + }, + { + "label": "man", + "value": "2048" + }, + { + "label": "Management", + "value": "464" + }, + { + "label": "Mangaka", + "value": "1374" + }, + { + "label": "MangoKK", + "value": "2293" + }, + { + "label": "Manhua", + "value": "2865" + }, + { + "label": "maninnarut", + "value": "2337" + }, + { + "label": "Manipulati", + "value": "607" + }, + { + "label": "Manipulati", + "value": "1057" + }, + { + "label": "ManlyGayCo", + "value": "995" + }, + { + "label": "mapleleafb", + "value": "2354" + }, + { + "label": "MarquisofB", + "value": "1805" + }, + { + "label": "Marriage", + "value": "46" + }, + { + "label": "MarriageCo", + "value": "1138" + }, + { + "label": "Marriageof", + "value": "401" + }, + { + "label": "Married", + "value": "735" + }, + { + "label": "MarriedCou", + "value": "1367" + }, + { + "label": "Martialart", + "value": "51" + }, + { + "label": "Martialart", + "value": "3235" + }, + { + "label": "MartialArt", + "value": "1046" + }, + { + "label": "MartialSpi", + "value": "231" + }, + { + "label": "MartialSpi", + "value": "962" + }, + { + "label": "Marvel", + "value": "342" + }, + { + "label": "MarvelKing", + "value": "1960" + }, + { + "label": "MarvelPudd", + "value": "2416" + }, + { + "label": "MarvelUniv", + "value": "343" + }, + { + "label": "marvelworl", + "value": "1631" + }, + { + "label": "Marysue", + "value": "3033" + }, + { + "label": "MaskedAce", + "value": "1715" + }, + { + "label": "MaskedArmo", + "value": "2548" + }, + { + "label": "Masochisti", + "value": "365" + }, + { + "label": "Masquerade", + "value": "2103" + }, + { + "label": "Massive", + "value": "1606" + }, + { + "label": "MassiveHar", + "value": "1561" + }, + { + "label": "Master-App", + "value": "740" + }, + { + "label": "Master-Dis", + "value": "24" + }, + { + "label": "Master-Ser", + "value": "518" + }, + { + "label": "Masterball", + "value": "2134" + }, + { + "label": "MasterofSi", + "value": "2688" + }, + { + "label": "Masturbati", + "value": "366" + }, + { + "label": "Matchmadei", + "value": "1347" + }, + { + "label": "math", + "value": "1633" + }, + { + "label": "Matriarchy", + "value": "715" + }, + { + "label": "Mature", + "value": "2824" + }, + { + "label": "MatureProt", + "value": "383" + }, + { + "label": "MCStrongFr", + "value": "1098" + }, + { + "label": "Mecha", + "value": "618" + }, + { + "label": "MechDesign", + "value": "2963" + }, + { + "label": "Mechs", + "value": "2962" + }, + { + "label": "Medical", + "value": "2881" + }, + { + "label": "medicalfem", + "value": "2950" + }, + { + "label": "MedicalKno", + "value": "114" + }, + { + "label": "MedicalKno", + "value": "1622" + }, + { + "label": "Medicine", + "value": "614" + }, + { + "label": "medicineme", + "value": "2571" + }, + { + "label": "Medieval", + "value": "590" + }, + { + "label": "meetthebea", + "value": "2013" + }, + { + "label": "MemoryLoss", + "value": "1107" + }, + { + "label": "MemoryReve", + "value": "1352" + }, + { + "label": "MentalIlln", + "value": "1665" + }, + { + "label": "Meowingbig", + "value": "1938" + }, + { + "label": "meowmeow", + "value": "1932" + }, + { + "label": "Mercenarie", + "value": "211" + }, + { + "label": "Mercenary", + "value": "629" + }, + { + "label": "Merchant", + "value": "2744" + }, + { + "label": "Merchants", + "value": "1411" + }, + { + "label": "Merging", + "value": "3071" + }, + { + "label": "mermaid", + "value": "2734" + }, + { + "label": "Middleage", + "value": "1011" + }, + { + "label": "MiddleAges", + "value": "3211" + }, + { + "label": "Milf", + "value": "3202" + }, + { + "label": "Military", + "value": "13" + }, + { + "label": "Milkgather", + "value": "2713" + }, + { + "label": "milkgrandm", + "value": "2154" + }, + { + "label": "Millionair", + "value": "1024" + }, + { + "label": "millionord", + "value": "2231" + }, + { + "label": "Miluo", + "value": "2124" + }, + { + "label": "Mimicry", + "value": "1312" + }, + { + "label": "MindBreak", + "value": "1403" + }, + { + "label": "MindContro", + "value": "221" + }, + { + "label": "MindReader", + "value": "1064" + }, + { + "label": "mindreadin", + "value": "2730" + }, + { + "label": "MingDynast", + "value": "2845" + }, + { + "label": "Mingjiao", + "value": "1797" + }, + { + "label": "MingjiaoTi", + "value": "1879" + }, + { + "label": "Ministryof", + "value": "1212" + }, + { + "label": "Miracledoc", + "value": "2956" + }, + { + "label": "Mismatched", + "value": "847" + }, + { + "label": "Mistresspl", + "value": "2015" + }, + { + "label": "MistyFlyin", + "value": "2057" + }, + { + "label": "Misunderst", + "value": "1009" + }, + { + "label": "Misunderst", + "value": "80" + }, + { + "label": "Misunderst", + "value": "1165" + }, + { + "label": "Misunderst", + "value": "1604" + }, + { + "label": "mixedintwo", + "value": "2481" + }, + { + "label": "MMORPG", + "value": "337" + }, + { + "label": "Mob", + "value": "1185" + }, + { + "label": "MobProtago", + "value": "409" + }, + { + "label": "Models", + "value": "444" + }, + { + "label": "ModerDays", + "value": "967" + }, + { + "label": "Modern", + "value": "414" + }, + { + "label": "ModernDay", + "value": "3" + }, + { + "label": "ModernDays", + "value": "797" + }, + { + "label": "modernfant", + "value": "2852" + }, + { + "label": "Modernhist", + "value": "1543" + }, + { + "label": "ModernKnow", + "value": "48" + }, + { + "label": "ModernLife", + "value": "2767" + }, + { + "label": "modernlove", + "value": "1632" + }, + { + "label": "ModernRoma", + "value": "1378" + }, + { + "label": "ModernWorl", + "value": "276" + }, + { + "label": "Moe", + "value": "3003" + }, + { + "label": "Moedye", + "value": "2672" + }, + { + "label": "MoeShinkaw", + "value": "2788" + }, + { + "label": "Mofamily", + "value": "2498" + }, + { + "label": "MojiaAeros", + "value": "2253" + }, + { + "label": "MojiaHills", + "value": "2214" + }, + { + "label": "Mojunsheep", + "value": "1677" + }, + { + "label": "MoneyGrubb", + "value": "230" + }, + { + "label": "MoneyGrumb", + "value": "907" + }, + { + "label": "Moneylaund", + "value": "1544" + }, + { + "label": "Monogamy", + "value": "910" + }, + { + "label": "Monster", + "value": "935" + }, + { + "label": "MonsterCat", + "value": "3159" + }, + { + "label": "MonsterGir", + "value": "357" + }, + { + "label": "Monstergro", + "value": "3108" + }, + { + "label": "Monsters", + "value": "161" + }, + { + "label": "MonsterTam", + "value": "81" + }, + { + "label": "MonsterTar", + "value": "1276" + }, + { + "label": "moonbug", + "value": "1783" + }, + { + "label": "MoonlightS", + "value": "2535" + }, + { + "label": "Moonlikeah", + "value": "2325" + }, + { + "label": "Moonsea", + "value": "1774" + }, + { + "label": "Moonwing", + "value": "1640" + }, + { + "label": "Morallessp", + "value": "1350" + }, + { + "label": "MorallyAmb", + "value": "1075" + }, + { + "label": "moreandmor", + "value": "2080" + }, + { + "label": "Mostertami", + "value": "3133" + }, + { + "label": "Motherland", + "value": "2792" + }, + { + "label": "Motivation", + "value": "2957" + }, + { + "label": "Mountainsa", + "value": "1709" + }, + { + "label": "Mountainsa", + "value": "2002" + }, + { + "label": "MovieDirec", + "value": "1517" + }, + { + "label": "Movies", + "value": "250" + }, + { + "label": "movingbean", + "value": "1987" + }, + { + "label": "MoXueqing", + "value": "1882" + }, + { + "label": "Moyangison", + "value": "2447" + }, + { + "label": "Mpreg", + "value": "402" + }, + { + "label": "Mr.EasyPro", + "value": "1831" + }, + { + "label": "Mr.Huo", + "value": "2421" + }, + { + "label": "MrMo", + "value": "1652" + }, + { + "label": "MrSly", + "value": "1213" + }, + { + "label": "MsPerfect", + "value": "1214" + }, + { + "label": "mudbodhisa", + "value": "2078" + }, + { + "label": "Mukbang", + "value": "1240" + }, + { + "label": "MultipleBo", + "value": "1005" + }, + { + "label": "MultipleBo", + "value": "3062" + }, + { + "label": "MultipleCP", + "value": "766" + }, + { + "label": "MultipleHi", + "value": "911" + }, + { + "label": "Multipleid", + "value": "1335" + }, + { + "label": "MultipleId", + "value": "412" + }, + { + "label": "Multiplele", + "value": "3111" + }, + { + "label": "Multiplele", + "value": "3085" + }, + { + "label": "MultipleMo", + "value": "882" + }, + { + "label": "MultiplePe", + "value": "743" + }, + { + "label": "MultiplePo", + "value": "802" + }, + { + "label": "MultiplePO", + "value": "171" + }, + { + "label": "MultiplePr", + "value": "490" + }, + { + "label": "multiplere", + "value": "1257" + }, + { + "label": "MultipleRe", + "value": "94" + }, + { + "label": "MultipleRe", + "value": "508" + }, + { + "label": "MultipleTi", + "value": "411" + }, + { + "label": "MultipleTr", + "value": "509" + }, + { + "label": "MultipleTr", + "value": "764" + }, + { + "label": "MultipleVe", + "value": "1040" + }, + { + "label": "MultipleWo", + "value": "858" + }, + { + "label": "MultipleWo", + "value": "1223" + }, + { + "label": "Multiverse", + "value": "1111" + }, + { + "label": "Multiworld", + "value": "3113" + }, + { + "label": "Munchkin", + "value": "3219" + }, + { + "label": "Murder", + "value": "124" + }, + { + "label": "Murders", + "value": "595" + }, + { + "label": "Music", + "value": "251" + }, + { + "label": "musicwilll", + "value": "1767" + }, + { + "label": "mustdo", + "value": "2060" + }, + { + "label": "Mutan", + "value": "1174" + }, + { + "label": "MutantPowe", + "value": "929" + }, + { + "label": "Mutatedbea", + "value": "3181" + }, + { + "label": "MutatedCre", + "value": "533" + }, + { + "label": "Mutation", + "value": "856" + }, + { + "label": "Mutations", + "value": "216" + }, + { + "label": "MuteCharac", + "value": "1410" + }, + { + "label": "Mutualcrus", + "value": "874" + }, + { + "label": "MxM", + "value": "2887" + }, + { + "label": "MyHeroAcad", + "value": "693" + }, + { + "label": "mylittlesi", + "value": "2079" + }, + { + "label": "MyLubanThi", + "value": "2503" + }, + { + "label": "MynameisDa", + "value": "1929" + }, + { + "label": "mynameista", + "value": "2127" + }, + { + "label": "mysteries", + "value": "2840" + }, + { + "label": "Mysterious", + "value": "332" + }, + { + "label": "Mysterious", + "value": "1357" + }, + { + "label": "Mysterious", + "value": "176" + }, + { + "label": "Mysterious", + "value": "1621" + }, + { + "label": "Mystery", + "value": "701" + }, + { + "label": "MysterySol", + "value": "424" + }, + { + "label": "Mystical", + "value": "1458" + }, + { + "label": "Myth", + "value": "3054" + }, + { + "label": "Mythical", + "value": "592" + }, + { + "label": "MythicalBe", + "value": "142" + }, + { + "label": "mythicalfi", + "value": "2454" + }, + { + "label": "mythicalma", + "value": "2296" + }, + { + "label": "Mythology", + "value": "143" + }, + { + "label": "mythunpara", + "value": "2264" + }, + { + "label": "mywife", + "value": "2303" + }, + { + "label": "mywifeisya", + "value": "2635" + }, + { + "label": "NA", + "value": "613" + }, + { + "label": "NaiveProta", + "value": "82" + }, + { + "label": "NangongHan", + "value": "1975" + }, + { + "label": "Nanshen", + "value": "2163" + }, + { + "label": "Napoleon", + "value": "1081" + }, + { + "label": "Narcissist", + "value": "565" + }, + { + "label": "Naruto", + "value": "116" + }, + { + "label": "narutoceda", + "value": "2334" + }, + { + "label": "NarutoClou", + "value": "2330" + }, + { + "label": "NarutoQuiz", + "value": "2340" + }, + { + "label": "NarutoxRea", + "value": "2460" + }, + { + "label": "Nationalis", + "value": "110" + }, + { + "label": "NationBuil", + "value": "1626" + }, + { + "label": "Navy", + "value": "1359" + }, + { + "label": "NBA", + "value": "459" + }, + { + "label": "Near-Death", + "value": "83" + }, + { + "label": "Necromance", + "value": "574" + }, + { + "label": "Necromancy", + "value": "2939" + }, + { + "label": "Neet", + "value": "1433" + }, + { + "label": "Nerd", + "value": "1518" + }, + { + "label": "Netorare", + "value": "360" + }, + { + "label": "Netori", + "value": "84" + }, + { + "label": "neverfail", + "value": "2442" + }, + { + "label": "NiangkouSa", + "value": "2202" + }, + { + "label": "Nidouzi", + "value": "2462" + }, + { + "label": "nightdance", + "value": "2602" + }, + { + "label": "nightfire", + "value": "1714" + }, + { + "label": "Nightmare", + "value": "125" + }, + { + "label": "Nightmares", + "value": "890" + }, + { + "label": "nightsilen", + "value": "1738" + }, + { + "label": "Nine-color", + "value": "2288" + }, + { + "label": "Nine-Taile", + "value": "2038" + }, + { + "label": "NinefoldSe", + "value": "1809" + }, + { + "label": "NineWarsof", + "value": "1931" + }, + { + "label": "ninja", + "value": "1375" + }, + { + "label": "Ninjapirat", + "value": "1718" + }, + { + "label": "Ninjas", + "value": "247" + }, + { + "label": "NiuBao", + "value": "1936" + }, + { + "label": "No-Harem", + "value": "3079" + }, + { + "label": "no-misunde", + "value": "3137" + }, + { + "label": "Nobility", + "value": "1537" + }, + { + "label": "Noble", + "value": "1203" + }, + { + "label": "Nobles", + "value": "172" + }, + { + "label": "NoblesPoli", + "value": "2933" + }, + { + "label": "Nocheats", + "value": "3172" + }, + { + "label": "NoCp", + "value": "1208" + }, + { + "label": "NoGoldFing", + "value": "2918" + }, + { + "label": "NoHarem", + "value": "832" + }, + { + "label": "Noless", + "value": "2576" + }, + { + "label": "Non-HumanM", + "value": "2937" + }, + { + "label": "Non-humano", + "value": "281" + }, + { + "label": "Non-humanP", + "value": "1382" + }, + { + "label": "Non-System", + "value": "654" + }, + { + "label": "noncat", + "value": "2461" + }, + { + "label": "NonHuman", + "value": "1623" + }, + { + "label": "NonHumanPr", + "value": "1132" + }, + { + "label": "NoPairing", + "value": "803" + }, + { + "label": "NoRomance", + "value": "672" + }, + { + "label": "Nosnacks", + "value": "1933" + }, + { + "label": "NoSystem", + "value": "1131" + }, + { + "label": "notlevelth", + "value": "2439" + }, + { + "label": "notscary", + "value": "2342" + }, + { + "label": "Novel", + "value": "3238" + }, + { + "label": "Nowadays", + "value": "2482" + }, + { + "label": "Npc", + "value": "3165" + }, + { + "label": "NSFW", + "value": "3200" + }, + { + "label": "NTL", + "value": "2936" + }, + { + "label": "Nurses", + "value": "440" + }, + { + "label": "Obanbrothe", + "value": "2009" + }, + { + "label": "Obsession", + "value": "2851" + }, + { + "label": "ObsessiveL", + "value": "468" + }, + { + "label": "offical", + "value": "2756" + }, + { + "label": "OfficeRoma", + "value": "578" + }, + { + "label": "Official", + "value": "2874" + }, + { + "label": "Officialdo", + "value": "1545" + }, + { + "label": "Officialwo", + "value": "3237" + }, + { + "label": "ohmygod", + "value": "2307" + }, + { + "label": "oldage", + "value": "1761" + }, + { + "label": "olddemon", + "value": "1983" + }, + { + "label": "Olderlovei", + "value": "2900" + }, + { + "label": "OlderLoveI", + "value": "177" + }, + { + "label": "oldfaceunc", + "value": "2579" + }, + { + "label": "oldfisheat", + "value": "1899" + }, + { + "label": "Oldghostsm", + "value": "2319" + }, + { + "label": "OldQinpeop", + "value": "1853" + }, + { + "label": "oldtombrob", + "value": "2343" + }, + { + "label": "omega", + "value": "2911" + }, + { + "label": "Omegaverse", + "value": "14" + }, + { + "label": "On-HookSys", + "value": "1220" + }, + { + "label": "One-Piece", + "value": "2732" + }, + { + "label": "Oneflower", + "value": "2593" + }, + { + "label": "OneLeafRed", + "value": "2375" + }, + { + "label": "onemelonri", + "value": "2595" + }, + { + "label": "onemeterst", + "value": "2675" + }, + { + "label": "Onenightst", + "value": "3046" + }, + { + "label": "OnePiece", + "value": "117" + }, + { + "label": "Onepunch", + "value": "1596" + }, + { + "label": "OnePunchMa", + "value": "680" + }, + { + "label": "Onepunchmo", + "value": "2370" + }, + { + "label": "Onepunchto", + "value": "2616" + }, + { + "label": "OneSwordFl", + "value": "1890" + }, + { + "label": "Onethousan", + "value": "1935" + }, + { + "label": "onetree", + "value": "2594" + }, + { + "label": "Oneyearold", + "value": "2603" + }, + { + "label": "Onlinegame", + "value": "3240" + }, + { + "label": "OnlineGame", + "value": "936" + }, + { + "label": "Onlinegami", + "value": "3070" + }, + { + "label": "OnlineRoma", + "value": "536" + }, + { + "label": "onlyloveyo", + "value": "1804" + }, + { + "label": "onlyyouth", + "value": "2609" + }, + { + "label": "onparadise", + "value": "2142" + }, + { + "label": "oooobe", + "value": "2251" + }, + { + "label": "openasmall", + "value": "1659" + }, + { + "label": "Openyourey", + "value": "2191" + }, + { + "label": "Operation", + "value": "2754" + }, + { + "label": "OpFemalePr", + "value": "2914" + }, + { + "label": "OPheroine", + "value": "1039" + }, + { + "label": "OPMC", + "value": "862" + }, + { + "label": "OPProtagon", + "value": "787" + }, + { + "label": "orangeappl", + "value": "2104" + }, + { + "label": "Orc", + "value": "840" + }, + { + "label": "Orcs", + "value": "537" + }, + { + "label": "Orcsworld", + "value": "1589" + }, + { + "label": "Ordinary", + "value": "3132" + }, + { + "label": "Organizati", + "value": "1114" + }, + { + "label": "OrganizedC", + "value": "529" + }, + { + "label": "Orientalfa", + "value": "1448" + }, + { + "label": "Orientalmy", + "value": "3110" + }, + { + "label": "Original", + "value": "3059" + }, + { + "label": "OriginalUn", + "value": "2178" + }, + { + "label": "OriginalYe", + "value": "2587" + }, + { + "label": "Origuchi", + "value": "2623" + }, + { + "label": "Orphan", + "value": "777" + }, + { + "label": "Orphaned", + "value": "1535" + }, + { + "label": "OrphanMC", + "value": "1570" + }, + { + "label": "Orphans", + "value": "358" + }, + { + "label": "Otaku", + "value": "478" + }, + { + "label": "Otezetta", + "value": "1971" + }, + { + "label": "Otherworld", + "value": "1530" + }, + { + "label": "Otherworld", + "value": "3099" + }, + { + "label": "OTTGroupCh", + "value": "2332" + }, + { + "label": "Outdoors", + "value": "3205" + }, + { + "label": "OuterSpace", + "value": "220" + }, + { + "label": "Over-Power", + "value": "2902" + }, + { + "label": "OverheadHi", + "value": "2764" + }, + { + "label": "Overlord", + "value": "2997" + }, + { + "label": "overpower", + "value": "3229" + }, + { + "label": "Overpowere", + "value": "2955" + }, + { + "label": "Overpowere", + "value": "1058" + }, + { + "label": "Overpowere", + "value": "25" + }, + { + "label": "Overpowere", + "value": "3185" + }, + { + "label": "Overprotec", + "value": "697" + }, + { + "label": "Painting", + "value": "741" + }, + { + "label": "Paizuri", + "value": "1429" + }, + { + "label": "palace", + "value": "2948" + }, + { + "label": "paleandwhi", + "value": "2118" + }, + { + "label": "Pamper", + "value": "3041" + }, + { + "label": "PamperingR", + "value": "377" + }, + { + "label": "panic", + "value": "2026" + }, + { + "label": "Papaisvery", + "value": "2521" + }, + { + "label": "ParalelWor", + "value": "1479" + }, + { + "label": "Parallelsp", + "value": "3120" + }, + { + "label": "ParallelWo", + "value": "252" + }, + { + "label": "ParallelWo", + "value": "852" + }, + { + "label": "Paranoid", + "value": "887" + }, + { + "label": "Parasite", + "value": "1153" + }, + { + "label": "Parasites", + "value": "43" + }, + { + "label": "ParentComp", + "value": "446" + }, + { + "label": "Parody", + "value": "919" + }, + { + "label": "Part-TimeJ", + "value": "1434" + }, + { + "label": "part-timeo", + "value": "1875" + }, + { + "label": "Partnerofa", + "value": "964" + }, + { + "label": "Passiveski", + "value": "3136" + }, + { + "label": "PastPlaysa", + "value": "371" + }, + { + "label": "PastPlaysa", + "value": "932" + }, + { + "label": "PastTrauma", + "value": "583" + }, + { + "label": "Patriarch", + "value": "1593" + }, + { + "label": "Payback", + "value": "3166" + }, + { + "label": "Peasant", + "value": "2797" + }, + { + "label": "Peerlessso", + "value": "1647" + }, + { + "label": "PeerlessSw", + "value": "1643" + }, + { + "label": "pendragon", + "value": "2708" + }, + { + "label": "pendreamst", + "value": "1947" + }, + { + "label": "Peoplenear", + "value": "2510" + }, + { + "label": "perfectmag", + "value": "1651" + }, + { + "label": "PerfectWor", + "value": "684" + }, + { + "label": "Persistent", + "value": "271" + }, + { + "label": "Personalit", + "value": "1327" + }, + { + "label": "PervertedP", + "value": "173" + }, + { + "label": "Pet", + "value": "789" + }, + { + "label": "Petbeasts", + "value": "3080" + }, + { + "label": "Pets", + "value": "105" + }, + { + "label": "petsurviva", + "value": "2389" + }, + { + "label": "PhantomThi", + "value": "2801" + }, + { + "label": "Pharmacist", + "value": "501" + }, + { + "label": "Philosophi", + "value": "608" + }, + { + "label": "Phoenixes", + "value": "1420" + }, + { + "label": "Photograph", + "value": "1449" + }, + { + "label": "Photograph", + "value": "2828" + }, + { + "label": "pigeonnext", + "value": "2469" + }, + { + "label": "PillBasedC", + "value": "26" + }, + { + "label": "PillConcoc", + "value": "235" + }, + { + "label": "PillConcot", + "value": "626" + }, + { + "label": "Pills", + "value": "1520" + }, + { + "label": "Pilots", + "value": "1331" + }, + { + "label": "Pipifish", + "value": "2088" + }, + { + "label": "Pirate", + "value": "1376" + }, + { + "label": "Pirateacto", + "value": "2346" + }, + { + "label": "PirateCour", + "value": "2372" + }, + { + "label": "PirateDaQi", + "value": "1702" + }, + { + "label": "PirateGrea", + "value": "2010" + }, + { + "label": "Piratehaha", + "value": "1766" + }, + { + "label": "Pirates", + "value": "390" + }, + { + "label": "PiratesofH", + "value": "2629" + }, + { + "label": "PirateWars", + "value": "2367" + }, + { + "label": "PiratexFai", + "value": "2434" + }, + { + "label": "Piscesinth", + "value": "2566" + }, + { + "label": "PlaneWars", + "value": "2879" + }, + { + "label": "PlayBlueMo", + "value": "1919" + }, + { + "label": "Playboymal", + "value": "814" + }, + { + "label": "Playboys", + "value": "1435" + }, + { + "label": "Player", + "value": "1162" + }, + { + "label": "PlayerKill", + "value": "1277" + }, + { + "label": "Players", + "value": "767" + }, + { + "label": "PlayfulPro", + "value": "589" + }, + { + "label": "PlayingGho", + "value": "1062" + }, + { + "label": "pleasantin", + "value": "1896" + }, + { + "label": "Pleaseforg", + "value": "2785" + }, + { + "label": "plumthirte", + "value": "2005" + }, + { + "label": "poems", + "value": "633" + }, + { + "label": "Poetry", + "value": "609" + }, + { + "label": "PoisonMout", + "value": "1605" + }, + { + "label": "Poisons", + "value": "447" + }, + { + "label": "Pokemon", + "value": "555" + }, + { + "label": "PokémonGo", + "value": "2640" + }, + { + "label": "PokémonTi", + "value": "2369" + }, + { + "label": "PokémonVo", + "value": "2014" + }, + { + "label": "Police", + "value": "558" + }, + { + "label": "PoliteProt", + "value": "1415" + }, + { + "label": "PoliticalI", + "value": "1574" + }, + { + "label": "PoliticalS", + "value": "804" + }, + { + "label": "Politics", + "value": "289" + }, + { + "label": "Polyandry", + "value": "530" + }, + { + "label": "Polygamy", + "value": "174" + }, + { + "label": "Poor", + "value": "2930" + }, + { + "label": "Poorcrazy", + "value": "1637" + }, + { + "label": "PoorProtag", + "value": "451" + }, + { + "label": "PoorRoRich", + "value": "1129" + }, + { + "label": "PoortoRich", + "value": "27" + }, + { + "label": "PopeBibiDo", + "value": "2371" + }, + { + "label": "Popular", + "value": "3017" + }, + { + "label": "PopularLov", + "value": "547" + }, + { + "label": "PortableSp", + "value": "930" + }, + { + "label": "Positive", + "value": "2968" + }, + { + "label": "Positiveel", + "value": "1954" + }, + { + "label": "PositiveLe", + "value": "1019" + }, + { + "label": "Possession", + "value": "410" + }, + { + "label": "Possessive", + "value": "4" + }, + { + "label": "Possessive", + "value": "2888" + }, + { + "label": "Possessive", + "value": "716" + }, + { + "label": "Post-apoca", + "value": "217" + }, + { + "label": "potatogirl", + "value": "2606" + }, + { + "label": "PovertyAll", + "value": "805" + }, + { + "label": "PowerCoupl", + "value": "193" + }, + { + "label": "Powerfulco", + "value": "945" + }, + { + "label": "PowersTran", + "value": "1600" + }, + { + "label": "PowerStrug", + "value": "587" + }, + { + "label": "PragmaticP", + "value": "428" + }, + { + "label": "Precogniti", + "value": "1427" + }, + { + "label": "Pregnancy", + "value": "384" + }, + { + "label": "Prehistori", + "value": "942" + }, + { + "label": "Prehistori", + "value": "959" + }, + { + "label": "PresentDay", + "value": "1340" + }, + { + "label": "President", + "value": "1316" + }, + { + "label": "PretendLov", + "value": "1197" + }, + { + "label": "PrettyGirl", + "value": "3018" + }, + { + "label": "Preview", + "value": "3005" + }, + { + "label": "PreviousLi", + "value": "224" + }, + { + "label": "PreviousLi", + "value": "325" + }, + { + "label": "Priestesse", + "value": "1503" + }, + { + "label": "Priests", + "value": "794" + }, + { + "label": "PrimitiveT", + "value": "2906" + }, + { + "label": "Primitivew", + "value": "1061" + }, + { + "label": "Prince", + "value": "2935" + }, + { + "label": "Princeandp", + "value": "3065" + }, + { + "label": "PrinceofHe", + "value": "2729" + }, + { + "label": "PrinceofTe", + "value": "649" + }, + { + "label": "PrinceQing", + "value": "2502" + }, + { + "label": "Princess", + "value": "1119" + }, + { + "label": "Prison", + "value": "584" + }, + { + "label": "ProactiveP", + "value": "854" + }, + { + "label": "Professor", + "value": "1571" + }, + { + "label": "Programmer", + "value": "208" + }, + { + "label": "Programmin", + "value": "2869" + }, + { + "label": "Prophecies", + "value": "525" + }, + { + "label": "Prostitute", + "value": "1409" + }, + { + "label": "Protagonis", + "value": "1245" + }, + { + "label": "Protagonis", + "value": "175" + }, + { + "label": "Protagonis", + "value": "318" + }, + { + "label": "Protagonis", + "value": "403" + }, + { + "label": "Protagonis", + "value": "644" + }, + { + "label": "Protagonis", + "value": "694" + }, + { + "label": "Protagonis", + "value": "1117" + }, + { + "label": "Protagonis", + "value": "2739" + }, + { + "label": "PseudoHolo", + "value": "806" + }, + { + "label": "PseudoReli", + "value": "807" + }, + { + "label": "psionic", + "value": "2774" + }, + { + "label": "Psychic", + "value": "1601" + }, + { + "label": "PsychicPow", + "value": "918" + }, + { + "label": "Psychologi", + "value": "1611" + }, + { + "label": "Psychology", + "value": "1140" + }, + { + "label": "Psychopath", + "value": "480" + }, + { + "label": "Punch", + "value": "1814" + }, + { + "label": "pureimpuls", + "value": "2414" + }, + { + "label": "purekitten", + "value": "2339" + }, + { + "label": "PureLove", + "value": "2858" + }, + { + "label": "Putin", + "value": "3086" + }, + { + "label": "Puzzles", + "value": "1122" + }, + { + "label": "QianshanTw", + "value": "2600" + }, + { + "label": "qidian", + "value": "2943" + }, + { + "label": "QiLuck", + "value": "1244" + }, + { + "label": "qimao", + "value": "3214" + }, + { + "label": "QinBichu", + "value": "1706" + }, + { + "label": "Qingfeng1D", + "value": "1701" + }, + { + "label": "QingheTaoi", + "value": "1885" + }, + { + "label": "Qingliansw", + "value": "1819" + }, + { + "label": "qingyu", + "value": "2215" + }, + { + "label": "QiXuan", + "value": "1969" + }, + { + "label": "QT", + "value": "1379" + }, + { + "label": "Quasi-GodS", + "value": "1768" + }, + { + "label": "QueenofBla", + "value": "2302" + }, + { + "label": "Question&a", + "value": "1334" + }, + { + "label": "QuickPass", + "value": "1227" + }, + { + "label": "QuickTrans", + "value": "449" + }, + { + "label": "QuickTrans", + "value": "1259" + }, + { + "label": "QuickTrans", + "value": "1602" + }, + { + "label": "Quickwear", + "value": "1143" + }, + { + "label": "QuietChara", + "value": "1372" + }, + { + "label": "quietflowe", + "value": "1698" + }, + { + "label": "QuirkyChar", + "value": "1402" + }, + { + "label": "quitesharp", + "value": "1952" + }, + { + "label": "Quququ", + "value": "2496" + }, + { + "label": "R-15", + "value": "617" + }, + { + "label": "R-18", + "value": "553" + }, + { + "label": "R18", + "value": "1095" + }, + { + "label": "RabbitToot", + "value": "2411" + }, + { + "label": "RaceChange", + "value": "407" + }, + { + "label": "Races", + "value": "3096" + }, + { + "label": "Racism", + "value": "111" + }, + { + "label": "rainandsno", + "value": "2111" + }, + { + "label": "rainboweig", + "value": "2558" + }, + { + "label": "rainydaywi", + "value": "2668" + }, + { + "label": "Raiseaghos", + "value": "2486" + }, + { + "label": "raisedache", + "value": "2473" + }, + { + "label": "RanchFarmi", + "value": "3234" + }, + { + "label": "RankingLis", + "value": "1356" + }, + { + "label": "Rape", + "value": "236" + }, + { + "label": "Rapeseedra", + "value": "2016" + }, + { + "label": "RapeVictim", + "value": "6" + }, + { + "label": "RapeVictim", + "value": "1481" + }, + { + "label": "Rarebloodl", + "value": "2988" + }, + { + "label": "Ras", + "value": "1274" + }, + { + "label": "reallyking", + "value": "2137" + }, + { + "label": "Realmmonst", + "value": "2692" + }, + { + "label": "reasoning", + "value": "3224" + }, + { + "label": "Rebellion", + "value": "1432" + }, + { + "label": "Rebirth", + "value": "28" + }, + { + "label": "RebirthedP", + "value": "643" + }, + { + "label": "Reborn", + "value": "899" + }, + { + "label": "recreation", + "value": "2180" + }, + { + "label": "Redalert", + "value": "1552" + }, + { + "label": "RedAlert2", + "value": "1474" + }, + { + "label": "RedDustDru", + "value": "2617" + }, + { + "label": "Redemption", + "value": "2859" + }, + { + "label": "Regression", + "value": "2856" + }, + { + "label": "Regressor", + "value": "1163" + }, + { + "label": "Regret", + "value": "2853" + }, + { + "label": "Reiki", + "value": "2870" + }, + { + "label": "ReikiRecov", + "value": "1389" + }, + { + "label": "Reikyrecov", + "value": "713" + }, + { + "label": "reincarnat", + "value": "1348" + }, + { + "label": "Reincarnat", + "value": "95" + }, + { + "label": "Reincarnat", + "value": "354" + }, + { + "label": "Reincarnat", + "value": "408" + }, + { + "label": "Reincarnat", + "value": "502" + }, + { + "label": "Reincarnat", + "value": "1007" + }, + { + "label": "Reincarnat", + "value": "1452" + }, + { + "label": "Reincarnat", + "value": "1563" + }, + { + "label": "Reincarnat", + "value": "2932" + }, + { + "label": "relaxed", + "value": "1384" + }, + { + "label": "Religions", + "value": "591" + }, + { + "label": "ReligiousO", + "value": "1599" + }, + { + "label": "ReligousOr", + "value": "1572" + }, + { + "label": "Reporters", + "value": "1462" + }, + { + "label": "Researcher", + "value": "1302" + }, + { + "label": "Residencen", + "value": "2256" + }, + { + "label": "Residentev", + "value": "2745" + }, + { + "label": "restaurant", + "value": "2143" + }, + { + "label": "Restaurant", + "value": "896" + }, + { + "label": "Resurrecti", + "value": "222" + }, + { + "label": "Resurrecti", + "value": "2580" + }, + { + "label": "Return", + "value": "3222" + }, + { + "label": "Returningf", + "value": "355" + }, + { + "label": "Reunion", + "value": "1067" + }, + { + "label": "Revenge", + "value": "126" + }, + { + "label": "Reversal", + "value": "3215" + }, + { + "label": "Reverse", + "value": "2934" + }, + { + "label": "ReverseHar", + "value": "212" + }, + { + "label": "ReverseRap", + "value": "1412" + }, + { + "label": "ReverseRpe", + "value": "1286" + }, + { + "label": "reversesmo", + "value": "1903" + }, + { + "label": "Reversible", + "value": "1436" + }, + { + "label": "Rich", + "value": "827" + }, + { + "label": "Richdaught", + "value": "2979" + }, + { + "label": "richeveryy", + "value": "2388" + }, + { + "label": "Richfamily", + "value": "999" + }, + { + "label": "RichProtag", + "value": "875" + }, + { + "label": "RichtoPoor", + "value": "889" + }, + { + "label": "Rideawhale", + "value": "1670" + }, + { + "label": "Righteous", + "value": "2973" + }, + { + "label": "Righteousn", + "value": "3134" + }, + { + "label": "RighteousP", + "value": "778" + }, + { + "label": "RimuruTemp", + "value": "1193" + }, + { + "label": "RinYueqing", + "value": "1644" + }, + { + "label": "Rise", + "value": "3146" + }, + { + "label": "RiseofGras", + "value": "2819" + }, + { + "label": "Rivalry", + "value": "884" + }, + { + "label": "riversande", + "value": "1862" + }, + { + "label": "robots", + "value": "1044" + }, + { + "label": "Role-Playi", + "value": "1558" + }, + { + "label": "Romance", + "value": "689" + }, + { + "label": "Romancecom", + "value": "3048" + }, + { + "label": "RomanceFan", + "value": "2854" + }, + { + "label": "Romanticlo", + "value": "2975" + }, + { + "label": "RomanticPr", + "value": "1486" + }, + { + "label": "RomanticSu", + "value": "225" + }, + { + "label": "RomanticSu", + "value": "868" + }, + { + "label": "RookieProt", + "value": "951" + }, + { + "label": "Roommates", + "value": "996" + }, + { + "label": "Roon", + "value": "2431" + }, + { + "label": "Rotaryhotp", + "value": "2513" + }, + { + "label": "Royalfamil", + "value": "2995" + }, + { + "label": "RoyalSabur", + "value": "1807" + }, + { + "label": "Royalty", + "value": "15" + }, + { + "label": "Rpe", + "value": "5" + }, + { + "label": "RpeVictimB", + "value": "1354" + }, + { + "label": "RPG", + "value": "2892" + }, + { + "label": "RPGSystem", + "value": "3179" + }, + { + "label": "runawayant", + "value": "1692" + }, + { + "label": "runawaycit", + "value": "1663" + }, + { + "label": "Rune", + "value": "754" + }, + { + "label": "Ruoshuithr", + "value": "2096" + }, + { + "label": "Russia", + "value": "1546" + }, + { + "label": "Russian", + "value": "1390" + }, + { + "label": "Ruthless", + "value": "1298" + }, + { + "label": "RuthlessMc", + "value": "1033" + }, + { + "label": "RuthlessPr", + "value": "203" + }, + { + "label": "SacrificeX", + "value": "2619" + }, + { + "label": "SadisticCh", + "value": "456" + }, + { + "label": "Sadreminde", + "value": "1788" + }, + { + "label": "sadsadness", + "value": "1937" + }, + { + "label": "sadsword", + "value": "1695" + }, + { + "label": "SaikiK", + "value": "1336" + }, + { + "label": "SaikiK.", + "value": "986" + }, + { + "label": "Sailing", + "value": "1345" + }, + { + "label": "Saint", + "value": "924" + }, + { + "label": "Saints", + "value": "394" + }, + { + "label": "SaintSeiya", + "value": "1608" + }, + { + "label": "Sakurajima", + "value": "2518" + }, + { + "label": "SakuraMoon", + "value": "2064" + }, + { + "label": "Saltedfish", + "value": "2262" + }, + { + "label": "SaltedFish", + "value": "1610" + }, + { + "label": "SaltedFish", + "value": "1699" + }, + { + "label": "SaltedFish", + "value": "2156" + }, + { + "label": "SaltedFish", + "value": "2557" + }, + { + "label": "Salvation", + "value": "2867" + }, + { + "label": "SameSexMar", + "value": "886" + }, + { + "label": "sandrivere", + "value": "1964" + }, + { + "label": "SanmitheGr", + "value": "2259" + }, + { + "label": "SavingtheW", + "value": "492" + }, + { + "label": "Scalesofth", + "value": "1675" + }, + { + "label": "Scary", + "value": "3089" + }, + { + "label": "Scavengers", + "value": "637" + }, + { + "label": "schemeandc", + "value": "1355" + }, + { + "label": "Schemes", + "value": "1025" + }, + { + "label": "Schemesand", + "value": "883" + }, + { + "label": "SchemesAnd", + "value": "29" + }, + { + "label": "Scheming", + "value": "3189" + }, + { + "label": "SchemingPr", + "value": "808" + }, + { + "label": "Schizophre", + "value": "3000" + }, + { + "label": "School", + "value": "3081" + }, + { + "label": "SchoolLife", + "value": "707" + }, + { + "label": "SchoolSett", + "value": "1273" + }, + { + "label": "Sci-fi", + "value": "755" + }, + { + "label": "science", + "value": "634" + }, + { + "label": "Science-fi", + "value": "2731" + }, + { + "label": "Sciencefic", + "value": "1268" + }, + { + "label": "Sciencefic", + "value": "3230" + }, + { + "label": "Scientist", + "value": "1115" + }, + { + "label": "Scientists", + "value": "477" + }, + { + "label": "Scifi", + "value": "3068" + }, + { + "label": "Scourge", + "value": "1833" + }, + { + "label": "SCP", + "value": "792" + }, + { + "label": "Scriptwrit", + "value": "1519" + }, + { + "label": "scumteache", + "value": "2171" + }, + { + "label": "Sea", + "value": "1170" + }, + { + "label": "SeaExplora", + "value": "1627" + }, + { + "label": "SealedPowe", + "value": "178" + }, + { + "label": "SecondChan", + "value": "30" + }, + { + "label": "SecondChan", + "value": "1267" + }, + { + "label": "SecondChan", + "value": "636" + }, + { + "label": "secondpira", + "value": "2285" + }, + { + "label": "secretary", + "value": "1344" + }, + { + "label": "SecretCrus", + "value": "753" + }, + { + "label": "SecretIden", + "value": "179" + }, + { + "label": "Secretive", + "value": "3011" + }, + { + "label": "SecretiveP", + "value": "326" + }, + { + "label": "Secretobse", + "value": "2338" + }, + { + "label": "SecretOrga", + "value": "992" + }, + { + "label": "SecretOrga", + "value": "596" + }, + { + "label": "SecretRela", + "value": "1228" + }, + { + "label": "Secrets", + "value": "180" + }, + { + "label": "Sect", + "value": "2825" + }, + { + "label": "Sectbuildi", + "value": "3227" + }, + { + "label": "SectDevelo", + "value": "31" + }, + { + "label": "Sects", + "value": "867" + }, + { + "label": "Seduction", + "value": "1383" + }, + { + "label": "Seductive", + "value": "3144" + }, + { + "label": "SeeingThin", + "value": "702" + }, + { + "label": "Seinen", + "value": "3241" + }, + { + "label": "Sekai", + "value": "3177" + }, + { + "label": "self-disci", + "value": "2237" + }, + { + "label": "Self-disci", + "value": "2898" + }, + { + "label": "SelfDiscip", + "value": "2826" + }, + { + "label": "SelfishPro", + "value": "538" + }, + { + "label": "SelflessPr", + "value": "351" + }, + { + "label": "SemeProtag", + "value": "564" + }, + { + "label": "Senbeiboy", + "value": "2799" + }, + { + "label": "Sencha", + "value": "2540" + }, + { + "label": "SentientOb", + "value": "703" + }, + { + "label": "SentientSk", + "value": "656" + }, + { + "label": "Sentimenta", + "value": "849" + }, + { + "label": "Sequel", + "value": "901" + }, + { + "label": "SerialKill", + "value": "486" + }, + { + "label": "Serious", + "value": "3092" + }, + { + "label": "ServantofZ", + "value": "1667" + }, + { + "label": "Servants", + "value": "1418" + }, + { + "label": "SevenDeadl", + "value": "1440" + }, + { + "label": "Sevengener", + "value": "2067" + }, + { + "label": "sevenpigeo", + "value": "1729" + }, + { + "label": "SexSlaves", + "value": "1465" + }, + { + "label": "SexualAbus", + "value": "505" + }, + { + "label": "SexualCult", + "value": "914" + }, + { + "label": "shadowfall", + "value": "2680" + }, + { + "label": "shadowghos", + "value": "2159" + }, + { + "label": "Shadowless", + "value": "2789" + }, + { + "label": "Shallowsea", + "value": "1657" + }, + { + "label": "ShamelessM", + "value": "3187" + }, + { + "label": "ShamelessP", + "value": "96" + }, + { + "label": "Shapeshift", + "value": "1619" + }, + { + "label": "Shapeshift", + "value": "1416" + }, + { + "label": "Sharp-tong", + "value": "1450" + }, + { + "label": "Shelter", + "value": "1094" + }, + { + "label": "ShenhaoMec", + "value": "2436" + }, + { + "label": "ShenhuoxoR", + "value": "1923" + }, + { + "label": "ShenJin", + "value": "2419" + }, + { + "label": "ShenLuo", + "value": "1845" + }, + { + "label": "ShortStory", + "value": "352" + }, + { + "label": "Shota", + "value": "270" + }, + { + "label": "Shotacon", + "value": "1425" + }, + { + "label": "Shoujo-AiS", + "value": "455" + }, + { + "label": "ShoujoAi", + "value": "708" + }, + { + "label": "Shouldhand", + "value": "1710" + }, + { + "label": "Shounen", + "value": "1127" + }, + { + "label": "Shounen-Ai", + "value": "720" + }, + { + "label": "shounenai", + "value": "1321" + }, + { + "label": "ShouProtag", + "value": "1036" + }, + { + "label": "Show-biz", + "value": "2746" + }, + { + "label": "Showbiz", + "value": "58" + }, + { + "label": "showstory", + "value": "1902" + }, + { + "label": "shrimpinth", + "value": "1669" + }, + { + "label": "Shuangwen", + "value": "1261" + }, + { + "label": "shudder", + "value": "1679" + }, + { + "label": "ShuYuChenX", + "value": "2203" + }, + { + "label": "ShyCharact", + "value": "599" + }, + { + "label": "Si-fi", + "value": "1616" + }, + { + "label": "Sibling&am", + "value": "1426" + }, + { + "label": "SiblingRiv", + "value": "1457" + }, + { + "label": "Siblings", + "value": "520" + }, + { + "label": "SiblingsNo", + "value": "272" + }, + { + "label": "SicklyChar", + "value": "540" + }, + { + "label": "Sign-in", + "value": "826" + }, + { + "label": "Sign-InChe", + "value": "653" + }, + { + "label": "signin", + "value": "997" + }, + { + "label": "SigninChec", + "value": "683" + }, + { + "label": "signinsalt", + "value": "2222" + }, + { + "label": "SiheyuanDe", + "value": "2133" + }, + { + "label": "Siheyuanfl", + "value": "2033" + }, + { + "label": "SiheyuanGo", + "value": "2097" + }, + { + "label": "Silencehim", + "value": "2200" + }, + { + "label": "silentkill", + "value": "1910" + }, + { + "label": "sillycatse", + "value": "1759" + }, + { + "label": "SillyColum", + "value": "2217" + }, + { + "label": "silver", + "value": "2694" + }, + { + "label": "Simpleone", + "value": "2243" + }, + { + "label": "Simulation", + "value": "1251" + }, + { + "label": "Simulator", + "value": "1008" + }, + { + "label": "singer", + "value": "1396" + }, + { + "label": "Singers", + "value": "253" + }, + { + "label": "Singlefema", + "value": "2972" + }, + { + "label": "SingleHero", + "value": "1169" + }, + { + "label": "SinglePare", + "value": "594" + }, + { + "label": "singlesalt", + "value": "2448" + }, + { + "label": "Siscon", + "value": "1332" + }, + { + "label": "SisterComp", + "value": "356" + }, + { + "label": "sistercook", + "value": "2428" + }, + { + "label": "sisterisbe", + "value": "2246" + }, + { + "label": "Sisters", + "value": "1511" + }, + { + "label": "six-twochi", + "value": "1764" + }, + { + "label": "SixPathsof", + "value": "2305" + }, + { + "label": "Sixty-six", + "value": "1905" + }, + { + "label": "SkillAssim", + "value": "385" + }, + { + "label": "SkillBooks", + "value": "441" + }, + { + "label": "SkillCreat", + "value": "386" + }, + { + "label": "SkillSteal", + "value": "943" + }, + { + "label": "SkinButler", + "value": "2184" + }, + { + "label": "skycity", + "value": "2923" + }, + { + "label": "SlapstickC", + "value": "1166" + }, + { + "label": "Slave", + "value": "1028" + }, + { + "label": "SlaveHarem", + "value": "1463" + }, + { + "label": "SlaveProta", + "value": "570" + }, + { + "label": "Slaves", + "value": "181" + }, + { + "label": "SlaveSyste", + "value": "1482" + }, + { + "label": "sleepingsa", + "value": "1855" + }, + { + "label": "sleeplesst", + "value": "2344" + }, + { + "label": "sleepslate", + "value": "1827" + }, + { + "label": "Slice-of-l", + "value": "1020" + }, + { + "label": "Sliceoflif", + "value": "3196" + }, + { + "label": "SliceofLif", + "value": "765" + }, + { + "label": "Slim", + "value": "3183" + }, + { + "label": "SlowGrowth", + "value": "282" + }, + { + "label": "SlowLife", + "value": "1059" + }, + { + "label": "SlowPaced", + "value": "3101" + }, + { + "label": "SlowRomanc", + "value": "194" + }, + { + "label": "Slvery", + "value": "2907" + }, + { + "label": "Smallmushr", + "value": "2423" + }, + { + "label": "smallninel", + "value": "1746" + }, + { + "label": "Smart", + "value": "2829" + }, + { + "label": "SmartCoupl", + "value": "415" + }, + { + "label": "Smartfemal", + "value": "3170" + }, + { + "label": "SmartMC", + "value": "1034" + }, + { + "label": "smartprota", + "value": "721" + }, + { + "label": "Smokebambo", + "value": "2522" + }, + { + "label": "SmokeCloud", + "value": "1650" + }, + { + "label": "smokeinthe", + "value": "1641" + }, + { + "label": "Smuggling", + "value": "1547" + }, + { + "label": "Smut", + "value": "2984" + }, + { + "label": "snorkeling", + "value": "1889" + }, + { + "label": "Sobrenatur", + "value": "3057" + }, + { + "label": "Soccer", + "value": "405" + }, + { + "label": "SocialOutc", + "value": "1454" + }, + { + "label": "softorange", + "value": "2634" + }, + { + "label": "Softyander", + "value": "2861" + }, + { + "label": "Soldiers", + "value": "263" + }, + { + "label": "Son-in-law", + "value": "1026" + }, + { + "label": "SongoftheG", + "value": "2380" + }, + { + "label": "SonInLaw", + "value": "2776" + }, + { + "label": "sopoor", + "value": "2621" + }, + { + "label": "Sorcery", + "value": "3149" + }, + { + "label": "soulanddre", + "value": "2281" + }, + { + "label": "SoulCelest", + "value": "2270" + }, + { + "label": "SoulChef", + "value": "2106" + }, + { + "label": "soulmemory", + "value": "2391" + }, + { + "label": "SoulPower", + "value": "566" + }, + { + "label": "Souls", + "value": "546" + }, + { + "label": "SouthKefei", + "value": "2651" + }, + { + "label": "Space", + "value": "830" + }, + { + "label": "SpaceOpera", + "value": "619" + }, + { + "label": "Spaceship", + "value": "283" + }, + { + "label": "SpatialMan", + "value": "1444" + }, + { + "label": "SpearWield", + "value": "585" + }, + { + "label": "SpecialAbi", + "value": "183" + }, + { + "label": "SpecialAbi", + "value": "127" + }, + { + "label": "SpecialAbi", + "value": "1158" + }, + { + "label": "specialage", + "value": "3123" + }, + { + "label": "SpecialFor", + "value": "679" + }, + { + "label": "SpecialLik", + "value": "1068" + }, + { + "label": "SpecialLov", + "value": "869" + }, + { + "label": "specialpow", + "value": "2951" + }, + { + "label": "specialwar", + "value": "2216" + }, + { + "label": "speechless", + "value": "2570" + }, + { + "label": "spendthewo", + "value": "1894" + }, + { + "label": "Spies", + "value": "1421" + }, + { + "label": "SpiritAdvi", + "value": "98" + }, + { + "label": "SpiritAnal", + "value": "775" + }, + { + "label": "Spirits", + "value": "484" + }, + { + "label": "SpiritualQ", + "value": "651" + }, + { + "label": "SpiritualR", + "value": "732" + }, + { + "label": "SpiritUser", + "value": "483" + }, + { + "label": "Spoiling", + "value": "2991" + }, + { + "label": "Sports", + "value": "674" + }, + { + "label": "stablefort", + "value": "2385" + }, + { + "label": "stallion", + "value": "2882" + }, + { + "label": "Stand", + "value": "2742" + }, + { + "label": "Star", + "value": "846" + }, + { + "label": "stardarkni", + "value": "2229" + }, + { + "label": "starfish", + "value": "2546" + }, + { + "label": "Starships", + "value": "2964" + }, + { + "label": "startofthe", + "value": "2116" + }, + { + "label": "startwriti", + "value": "1978" + }, + { + "label": "Starwars", + "value": "2815" + }, + { + "label": "Stealth", + "value": "3100" + }, + { + "label": "steamponk", + "value": "2831" + }, + { + "label": "Steampunk", + "value": "3156" + }, + { + "label": "Steamy", + "value": "3169" + }, + { + "label": "Stepmom", + "value": "3039" + }, + { + "label": "Stepmother", + "value": "1233" + }, + { + "label": "Sterile", + "value": "1713" + }, + { + "label": "stevec", + "value": "2320" + }, + { + "label": "StewedChic", + "value": "2328" + }, + { + "label": "StinkBeanS", + "value": "2192" + }, + { + "label": "StockholmS", + "value": "506" + }, + { + "label": "StoicChara", + "value": "1078" + }, + { + "label": "Stomachhur", + "value": "2368" + }, + { + "label": "stonemored", + "value": "2386" + }, + { + "label": "stopatfirs", + "value": "2679" + }, + { + "label": "StoreOwner", + "value": "74" + }, + { + "label": "straightma", + "value": "2752" + }, + { + "label": "Straightme", + "value": "2404" + }, + { + "label": "StraightSe", + "value": "1404" + }, + { + "label": "StraightUk", + "value": "727" + }, + { + "label": "StrategicB", + "value": "298" + }, + { + "label": "Strategist", + "value": "604" + }, + { + "label": "Strategy", + "value": "2820" + }, + { + "label": "streamerbl", + "value": "2639" + }, + { + "label": "Strength-b", + "value": "213" + }, + { + "label": "StrongBack", + "value": "671" + }, + { + "label": "StrongCoup", + "value": "984" + }, + { + "label": "StrongestP", + "value": "1108" + }, + { + "label": "strongfema", + "value": "1362" + }, + { + "label": "Strongfema", + "value": "3026" + }, + { + "label": "StrongFema", + "value": "1041" + }, + { + "label": "StrongFema", + "value": "717" + }, + { + "label": "Strongfl", + "value": "2996" + }, + { + "label": "Strongfrom", + "value": "197" + }, + { + "label": "Strongfrom", + "value": "1502" + }, + { + "label": "StrongLove", + "value": "214" + }, + { + "label": "StrongLove", + "value": "751" + }, + { + "label": "StrongMC", + "value": "746" + }, + { + "label": "StrongOpFe", + "value": "1597" + }, + { + "label": "StrongPowe", + "value": "1564" + }, + { + "label": "StrongProt", + "value": "657" + }, + { + "label": "Strongsubo", + "value": "1497" + }, + { + "label": "StrongSubo", + "value": "1484" + }, + { + "label": "StrongtoSt", + "value": "264" + }, + { + "label": "strongwoma", + "value": "2928" + }, + { + "label": "StubbornPr", + "value": "479" + }, + { + "label": "Student", + "value": "1505" + }, + { + "label": "Student-Te", + "value": "184" + }, + { + "label": "Studenttea", + "value": "3107" + }, + { + "label": "StudentUni", + "value": "2212" + }, + { + "label": "stupidfox", + "value": "1873" + }, + { + "label": "submissive", + "value": "1381" + }, + { + "label": "Succubus", + "value": "1200" + }, + { + "label": "Suddenmarr", + "value": "2989" + }, + { + "label": "SuddenStre", + "value": "1086" + }, + { + "label": "SuddenWeal", + "value": "458" + }, + { + "label": "Sugary", + "value": "2809" + }, + { + "label": "suicidalpr", + "value": "1401" + }, + { + "label": "Suicides", + "value": "823" + }, + { + "label": "summernow", + "value": "2453" + }, + { + "label": "summertree", + "value": "1736" + }, + { + "label": "summertrip", + "value": "1737" + }, + { + "label": "summon", + "value": "611" + }, + { + "label": "SummonedHe", + "value": "397" + }, + { + "label": "Summoner", + "value": "711" + }, + { + "label": "Summonerpr", + "value": "3195" + }, + { + "label": "Summoning", + "value": "1613" + }, + { + "label": "SummoningM", + "value": "246" + }, + { + "label": "Summons", + "value": "1050" + }, + { + "label": "sundaysun", + "value": "1720" + }, + { + "label": "sunsetover", + "value": "2638" + }, + { + "label": "SuperAbili", + "value": "3012" + }, + { + "label": "Superfire", + "value": "2366" + }, + { + "label": "SuperGodGr", + "value": "1869" + }, + { + "label": "SuperGodNo", + "value": "2352" + }, + { + "label": "Superheroe", + "value": "1145" + }, + { + "label": "Superman", + "value": "2793" + }, + { + "label": "Supernatur", + "value": "772" + }, + { + "label": "Supernatur", + "value": "2250" + }, + { + "label": "supernovab", + "value": "2608" + }, + { + "label": "SuperPiran", + "value": "2129" + }, + { + "label": "Superpower", + "value": "463" + }, + { + "label": "Superpower", + "value": "791" + }, + { + "label": "SuperSemin", + "value": "1485" + }, + { + "label": "Superstar", + "value": "1395" + }, + { + "label": "SuperTechn", + "value": "645" + }, + { + "label": "Supporting", + "value": "3217" + }, + { + "label": "Supportive", + "value": "1116" + }, + { + "label": "Survival", + "value": "112" + }, + { + "label": "SurvivalGa", + "value": "362" + }, + { + "label": "SuShaoqing", + "value": "1747" + }, + { + "label": "Suspense", + "value": "704" + }, + { + "label": "SuWei", + "value": "2232" + }, + { + "label": "SuYechen", + "value": "1726" + }, + { + "label": "SuZiyouyou", + "value": "2108" + }, + { + "label": "SwallowedS", + "value": "688" + }, + { + "label": "swearnotto", + "value": "2551" + }, + { + "label": "Sweet", + "value": "866" + }, + { + "label": "Sweetandso", + "value": "2119" + }, + { + "label": "sweetjelly", + "value": "1689" + }, + { + "label": "Sweetlove", + "value": "2958" + }, + { + "label": "Sweetpampe", + "value": "3055" + }, + { + "label": "sweetroman", + "value": "1069" + }, + { + "label": "SweetText", + "value": "781" + }, + { + "label": "SweetYaoi", + "value": "1576" + }, + { + "label": "Swimmingfi", + "value": "2562" + }, + { + "label": "SwingingDe", + "value": "2614" + }, + { + "label": "Swodandmag", + "value": "3004" + }, + { + "label": "SwordAndMa", + "value": "182" + }, + { + "label": "SwordArtOn", + "value": "666" + }, + { + "label": "Swordblood", + "value": "1697" + }, + { + "label": "Swordgod", + "value": "2457" + }, + { + "label": "SwordImmor", + "value": "1749" + }, + { + "label": "swordrepai", + "value": "2493" + }, + { + "label": "Swordsandm", + "value": "3127" + }, + { + "label": "Swordsman", + "value": "622" + }, + { + "label": "SwordWield", + "value": "99" + }, + { + "label": "Sword丨Lea", + "value": "2086" + }, + { + "label": "SxSlaves", + "value": "1478" + }, + { + "label": "SxualAbuse", + "value": "2758" + }, + { + "label": "Sysetm", + "value": "1088" + }, + { + "label": "System", + "value": "204" + }, + { + "label": "SystemAdmi", + "value": "76" + }, + { + "label": "SystemFlow", + "value": "1248" + }, + { + "label": "systemmale", + "value": "2842" + }, + { + "label": "SystemNo.3", + "value": "2132" + }, + { + "label": "systemowne", + "value": "768" + }, + { + "label": "SystemTran", + "value": "682" + }, + { + "label": "SystemTran", + "value": "1037" + }, + { + "label": "TableTenni", + "value": "300" + }, + { + "label": "Tailsman", + "value": "1314" + }, + { + "label": "Takeaplane", + "value": "2314" + }, + { + "label": "takeoffboy", + "value": "2511" + }, + { + "label": "takeoverth", + "value": "2269" + }, + { + "label": "takestock", + "value": "2028" + }, + { + "label": "Talent", + "value": "1442" + }, + { + "label": "Talents", + "value": "658" + }, + { + "label": "TalentShow", + "value": "1109" + }, + { + "label": "Talismans", + "value": "894" + }, + { + "label": "TangJichen", + "value": "1704" + }, + { + "label": "TangShaoqi", + "value": "2076" + }, + { + "label": "TangThirty", + "value": "2725" + }, + { + "label": "Taoist", + "value": "1047" + }, + { + "label": "Tasker", + "value": "1235" + }, + { + "label": "TaurenIron", + "value": "1780" + }, + { + "label": "teacher", + "value": "635" + }, + { + "label": "teacher-st", + "value": "2839" + }, + { + "label": "teachermal", + "value": "2952" + }, + { + "label": "Teachers", + "value": "185" + }, + { + "label": "team", + "value": "941" + }, + { + "label": "Teamwork", + "value": "113" + }, + { + "label": "Technologi", + "value": "498" + }, + { + "label": "Technology", + "value": "1029" + }, + { + "label": "Technology", + "value": "828" + }, + { + "label": "Technology", + "value": "1820" + }, + { + "label": "TeckTyrann", + "value": "1957" + }, + { + "label": "Teemotofly", + "value": "2299" + }, + { + "label": "Teen", + "value": "2986" + }, + { + "label": "TeenageXia", + "value": "2665" + }, + { + "label": "TempleThir", + "value": "1800" + }, + { + "label": "TenCommand", + "value": "2021" + }, + { + "label": "Tennis", + "value": "301" + }, + { + "label": "Tensura", + "value": "1194" + }, + { + "label": "Tenthousan", + "value": "1790" + }, + { + "label": "TenThousan", + "value": "2501" + }, + { + "label": "TerminalIl", + "value": "445" + }, + { + "label": "TerritoryC", + "value": "681" + }, + { + "label": "TerritoryM", + "value": "1330" + }, + { + "label": "Terrori", + "value": "3013" + }, + { + "label": "Terrorists", + "value": "1430" + }, + { + "label": "Thankyoufo", + "value": "2438" + }, + { + "label": "thaw", + "value": "1967" + }, + { + "label": "Theancesto", + "value": "2114" + }, + { + "label": "Theashesar", + "value": "2277" + }, + { + "label": "Thebigdevi", + "value": "1871" + }, + { + "label": "Thebiggest", + "value": "1868" + }, + { + "label": "Thecatisgo", + "value": "2322" + }, + { + "label": "TheDevil", + "value": "3020" + }, + { + "label": "Thefishmar", + "value": "2357" + }, + { + "label": "Theflowero", + "value": "1662" + }, + { + "label": "Thegloryof", + "value": "2542" + }, + { + "label": "TheGodfath", + "value": "2018" + }, + { + "label": "thegodofde", + "value": "1839" + }, + { + "label": "TheGospelo", + "value": "1711" + }, + { + "label": "Thelightof", + "value": "1770" + }, + { + "label": "Thelistdep", + "value": "2627" + }, + { + "label": "Thelistisi", + "value": "2240" + }, + { + "label": "TheMainCha", + "value": "3019" + }, + { + "label": "Thenewbact", + "value": "1917" + }, + { + "label": "Theoceando", + "value": "1966" + }, + { + "label": "Theoldfive", + "value": "2207" + }, + { + "label": "Thepowerof", + "value": "2413" + }, + { + "label": "Thequeenis", + "value": "2157" + }, + { + "label": "therearefi", + "value": "2000" + }, + { + "label": "Thestronga", + "value": "2960" + }, + { + "label": "Thestronge", + "value": "1953" + }, + { + "label": "Thesunsett", + "value": "1661" + }, + { + "label": "TheThreeKi", + "value": "1719" + }, + { + "label": "Thetopofth", + "value": "2724" + }, + { + "label": "Thetruegod", + "value": "2160" + }, + { + "label": "Thewayofth", + "value": "2641" + }, + { + "label": "thewindisb", + "value": "1930" + }, + { + "label": "Theworld&a", + "value": "2055" + }, + { + "label": "Thieves", + "value": "770" + }, + { + "label": "Thiller", + "value": "2889" + }, + { + "label": "Thinkingof", + "value": "2046" + }, + { + "label": "Thirty-two", + "value": "2177" + }, + { + "label": "Thisissure", + "value": "2647" + }, + { + "label": "thisyear", + "value": "1886" + }, + { + "label": "Thousandso", + "value": "2377" + }, + { + "label": "ThousandTe", + "value": "2258" + }, + { + "label": "Three-flav", + "value": "1763" + }, + { + "label": "Threedaysa", + "value": "1705" + }, + { + "label": "ThreeDotIn", + "value": "2591" + }, + { + "label": "ThreeKingd", + "value": "947" + }, + { + "label": "threelittl", + "value": "2059" + }, + { + "label": "ThreeLives", + "value": "1920" + }, + { + "label": "ThreeLives", + "value": "2376" + }, + { + "label": "Threesome", + "value": "507" + }, + { + "label": "threeteeth", + "value": "2230" + }, + { + "label": "ThreshingG", + "value": "1801" + }, + { + "label": "Thriller", + "value": "601" + }, + { + "label": "Thunderous", + "value": "1826" + }, + { + "label": "Tianbang78", + "value": "1636" + }, + { + "label": "TianbangDi", + "value": "2800" + }, + { + "label": "Tianbanggr", + "value": "2622" + }, + { + "label": "TianbangHu", + "value": "2475" + }, + { + "label": "Tianbangol", + "value": "2074" + }, + { + "label": "Tianbangth", + "value": "2006" + }, + { + "label": "TianbangYa", + "value": "2169" + }, + { + "label": "Tianshitak", + "value": "2194" + }, + { + "label": "TianYiding", + "value": "2167" + }, + { + "label": "Tiger", + "value": "3087" + }, + { + "label": "Tigerteeth", + "value": "2396" + }, + { + "label": "Time-Trave", + "value": "1791" + }, + { + "label": "TimeandSpa", + "value": "1084" + }, + { + "label": "TimeKingJO", + "value": "2433" + }, + { + "label": "Timelimit", + "value": "2855" + }, + { + "label": "TimeLoop", + "value": "567" + }, + { + "label": "TimeManipu", + "value": "466" + }, + { + "label": "TimeSkip", + "value": "254" + }, + { + "label": "TimeTravel", + "value": "296" + }, + { + "label": "TimidProta", + "value": "278" + }, + { + "label": "TingFengZh", + "value": "1739" + }, + { + "label": "Titans", + "value": "925" + }, + { + "label": "tobacco", + "value": "2036" + }, + { + "label": "Today&0", + "value": "2578" + }, + { + "label": "Toilet", + "value": "2605" + }, + { + "label": "Tokyo", + "value": "1010" + }, + { + "label": "TokyoGhoul", + "value": "1351" + }, + { + "label": "TomboyishF", + "value": "258" + }, + { + "label": "TombRaider", + "value": "2069" + }, + { + "label": "TombRaider", + "value": "2205" + }, + { + "label": "TombRaider", + "value": "2284" + }, + { + "label": "TombRaider", + "value": "2301" + }, + { + "label": "tomorrowwi", + "value": "1741" + }, + { + "label": "ToneMasaya", + "value": "1860" + }, + { + "label": "TopMC", + "value": "1255" + }, + { + "label": "TopoftheCl", + "value": "1878" + }, + { + "label": "TopoftheCl", + "value": "1946" + }, + { + "label": "TopoftheCl", + "value": "2615" + }, + { + "label": "TopoftheFo", + "value": "2274" + }, + { + "label": "Toriko", + "value": "690" + }, + { + "label": "Torture", + "value": "870" + }, + { + "label": "towashthed", + "value": "2536" + }, + { + "label": "TowerDefen", + "value": "897" + }, + { + "label": "Trade", + "value": "1498" + }, + { + "label": "Tragedy", + "value": "730" + }, + { + "label": "TragicPast", + "value": "128" + }, + { + "label": "Tramsmigra", + "value": "1204" + }, + { + "label": "Tranformer", + "value": "1493" + }, + { + "label": "Transforma", + "value": "602" + }, + { + "label": "Transmigat", + "value": "1221" + }, + { + "label": "Transmigat", + "value": "3051" + }, + { + "label": "Transmigra", + "value": "49" + }, + { + "label": "Transmigra", + "value": "1100" + }, + { + "label": "Transmigra", + "value": "1217" + }, + { + "label": "Transmigra", + "value": "1548" + }, + { + "label": "Transmigra", + "value": "642" + }, + { + "label": "Transmigra", + "value": "1528" + }, + { + "label": "Transmigra", + "value": "1585" + }, + { + "label": "Transplant", + "value": "319" + }, + { + "label": "Transporte", + "value": "279" + }, + { + "label": "Transporte", + "value": "320" + }, + { + "label": "Transporte", + "value": "349" + }, + { + "label": "Transporte", + "value": "630" + }, + { + "label": "Transporte", + "value": "1492" + }, + { + "label": "Trap", + "value": "129" + }, + { + "label": "Trauma", + "value": "3193" + }, + { + "label": "travel", + "value": "2924" + }, + { + "label": "Traveling", + "value": "1171" + }, + { + "label": "TravelingT", + "value": "835" + }, + { + "label": "traveller", + "value": "1232" + }, + { + "label": "Traverse", + "value": "821" + }, + { + "label": "TreasureHu", + "value": "776" + }, + { + "label": "TreasureHu", + "value": "1579" + }, + { + "label": "TreasureHu", + "value": "1588" + }, + { + "label": "treeofenli", + "value": "2686" + }, + { + "label": "Trialmarri", + "value": "3001" + }, + { + "label": "TribalSoci", + "value": "280" + }, + { + "label": "Trickster", + "value": "3058" + }, + { + "label": "Trnasmigra", + "value": "1151" + }, + { + "label": "TroubledWo", + "value": "2408" + }, + { + "label": "TrueorFake", + "value": "2772" + }, + { + "label": "TrumanLive", + "value": "2309" + }, + { + "label": "TS", + "value": "2904" + }, + { + "label": "TsukibaAki", + "value": "1993" + }, + { + "label": "Tsundere", + "value": "130" + }, + { + "label": "TsundereLo", + "value": "1325" + }, + { + "label": "Tsundereml", + "value": "3050" + }, + { + "label": "Tsunderesc", + "value": "2333" + }, + { + "label": "Tsuru", + "value": "1292" + }, + { + "label": "Turtle", + "value": "2877" + }, + { + "label": "TwentyFame", + "value": "2236" + }, + { + "label": "twilight", + "value": "1817" + }, + { + "label": "twilightdr", + "value": "2649" + }, + { + "label": "Twilightis", + "value": "1708" + }, + { + "label": "twingods", + "value": "2648" + }, + { + "label": "Twins", + "value": "372" + }, + { + "label": "Twistbroth", + "value": "2525" + }, + { + "label": "Twisted", + "value": "3028" + }, + { + "label": "TwistedPer", + "value": "731" + }, + { + "label": "Two-dimens", + "value": "2224" + }, + { + "label": "Two-dimens", + "value": "2287" + }, + { + "label": "Two-dimens", + "value": "2490" + }, + { + "label": "two-wayred", + "value": "2843" + }, + { + "label": "Twopeopleb", + "value": "2598" + }, + { + "label": "Twopoundso", + "value": "2552" + }, + { + "label": "TypeMoon", + "value": "1195" + }, + { + "label": "Tyrant", + "value": "1385" + }, + { + "label": "Ugly", + "value": "2899" + }, + { + "label": "UglyProtag", + "value": "1414" + }, + { + "label": "UglytoBeau", + "value": "305" + }, + { + "label": "UltramanPo", + "value": "1785" + }, + { + "label": "unbearable", + "value": "1897" + }, + { + "label": "Unconditio", + "value": "725" + }, + { + "label": "Undead", + "value": "2919" + }, + { + "label": "undeadfish", + "value": "1977" + }, + { + "label": "Undead丨Kn", + "value": "2071" + }, + { + "label": "Undefeated", + "value": "2358" + }, + { + "label": "Underestim", + "value": "373" + }, + { + "label": "underlolic", + "value": "2583" + }, + { + "label": "undersilve", + "value": "2290" + }, + { + "label": "understate", + "value": "2715" + }, + { + "label": "Undocument", + "value": "1654" + }, + { + "label": "Unintentio", + "value": "2704" + }, + { + "label": "Unique", + "value": "2866" + }, + { + "label": "UniqueCult", + "value": "78" + }, + { + "label": "UniqueWeap", + "value": "1428" + }, + { + "label": "UniqueWeap", + "value": "1456" + }, + { + "label": "unknown", + "value": "2394" + }, + { + "label": "UnknownTao", + "value": "2276" + }, + { + "label": "Unknowntea", + "value": "1683" + }, + { + "label": "Unlimitedc", + "value": "2723" + }, + { + "label": "UnlimitedF", + "value": "1123" + }, + { + "label": "Unlucky", + "value": "2875" + }, + { + "label": "UnluckyPro", + "value": "345" + }, + { + "label": "Unprincipl", + "value": "3053" + }, + { + "label": "Unreliable", + "value": "265" + }, + { + "label": "Unrequited", + "value": "535" + }, + { + "label": "Upgrade", + "value": "3154" + }, + { + "label": "Upsetting", + "value": "2040" + }, + { + "label": "Urban", + "value": "131" + }, + { + "label": "UrbanDatan", + "value": "1728" + }, + { + "label": "UrbanLife", + "value": "733" + }, + { + "label": "UrbanMilit", + "value": "2379" + }, + { + "label": "Urbanroman", + "value": "3228" + }, + { + "label": "UrbanRoman", + "value": "3239" + }, + { + "label": "urbanshark", + "value": "2113" + }, + { + "label": "urbanstar", + "value": "2066" + }, + { + "label": "Urbanyearn", + "value": "2726" + }, + { + "label": "Urbanyouth", + "value": "1333" + }, + { + "label": "Vampire", + "value": "1253" + }, + { + "label": "vampiredri", + "value": "2374" + }, + { + "label": "Vampires", + "value": "186" + }, + { + "label": "VarietySho", + "value": "1250" + }, + { + "label": "Vest", + "value": "1092" + }, + { + "label": "VictorianE", + "value": "1551" + }, + { + "label": "Video-Game", + "value": "3161" + }, + { + "label": "Videogame", + "value": "3060" + }, + { + "label": "videogames", + "value": "2909" + }, + { + "label": "Viewofthec", + "value": "1825" + }, + { + "label": "VikaBaka", + "value": "2802" + }, + { + "label": "Villain", + "value": "512" + }, + { + "label": "Villainess", + "value": "811" + }, + { + "label": "Villainess", + "value": "1224" + }, + { + "label": "VillainEvi", + "value": "670" + }, + { + "label": "Villainher", + "value": "3198" + }, + { + "label": "Villainmc", + "value": "3197" + }, + { + "label": "Villainous", + "value": "3184" + }, + { + "label": "VillainPro", + "value": "1241" + }, + { + "label": "Villains", + "value": "1146" + }, + { + "label": "VillIain", + "value": "1089" + }, + { + "label": "Violence", + "value": "2908" + }, + { + "label": "VirtualRea", + "value": "162" + }, + { + "label": "VoiceActor", + "value": "1423" + }, + { + "label": "VoicePack", + "value": "665" + }, + { + "label": "Vrmmo", + "value": "3176" + }, + { + "label": "Vrmmorpg", + "value": "3175" + }, + { + "label": "Walkinthec", + "value": "2152" + }, + { + "label": "Wanderer", + "value": "1940" + }, + { + "label": "wanderings", + "value": "1815" + }, + { + "label": "WangEr", + "value": "2317" + }, + { + "label": "WangJiu", + "value": "1694" + }, + { + "label": "WangXiaomi", + "value": "2213" + }, + { + "label": "wanttocome", + "value": "2356" + }, + { + "label": "wanttoeatg", + "value": "2381" + }, + { + "label": "War", + "value": "1076" + }, + { + "label": "Warcraft", + "value": "2938" + }, + { + "label": "Warhammer4", + "value": "1296" + }, + { + "label": "Warlock", + "value": "2813" + }, + { + "label": "Warlocks", + "value": "1297" + }, + { + "label": "warmtime", + "value": "2484" + }, + { + "label": "WarofCivil", + "value": "2765" + }, + { + "label": "Wars", + "value": "291" + }, + { + "label": "Warship", + "value": "1172" + }, + { + "label": "WarsWeakto", + "value": "514" + }, + { + "label": "wastefish", + "value": "2308" + }, + { + "label": "Wasteland", + "value": "1030" + }, + { + "label": "WasteWoodA", + "value": "2025" + }, + { + "label": "watermelon", + "value": "2024" + }, + { + "label": "watertown", + "value": "2470" + }, + { + "label": "Weak-to-st", + "value": "3178" + }, + { + "label": "WeakProtag", + "value": "497" + }, + { + "label": "Weakstrong", + "value": "3049" + }, + { + "label": "Weakstrong", + "value": "3199" + }, + { + "label": "WeaktoClan", + "value": "676" + }, + { + "label": "WeaktoStro", + "value": "32" + }, + { + "label": "WeaktoStro", + "value": "3210" + }, + { + "label": "Wealth", + "value": "1130" + }, + { + "label": "WealthChar", + "value": "1205" + }, + { + "label": "Wealthy", + "value": "1598" + }, + { + "label": "WealthyCha", + "value": "7" + }, + { + "label": "WealthyCha", + "value": "1173" + }, + { + "label": "wealthyfam", + "value": "2945" + }, + { + "label": "Wearabook", + "value": "1216" + }, + { + "label": "WearBook", + "value": "742" + }, + { + "label": "wearingabo", + "value": "1320" + }, + { + "label": "weektoStro", + "value": "1607" + }, + { + "label": "WenGuang", + "value": "2417" + }, + { + "label": "WenXuanyu", + "value": "1995" + }, + { + "label": "Werebeasts", + "value": "857" + }, + { + "label": "Werewolf", + "value": "2978" + }, + { + "label": "WesternFan", + "value": "993" + }, + { + "label": "Westerngod", + "value": "3150" + }, + { + "label": "Westernrai", + "value": "1970" + }, + { + "label": "What&03", + "value": "1874" + }, + { + "label": "Whitehorse", + "value": "2206" + }, + { + "label": "whitekeybo", + "value": "2101" + }, + { + "label": "whiteshirt", + "value": "2682" + }, + { + "label": "Wholesome", + "value": "2860" + }, + { + "label": "Whoringmak", + "value": "2596" + }, + { + "label": "wife-chasi", + "value": "2872" + }, + { + "label": "WifeistheD", + "value": "2464" + }, + { + "label": "Wilderness", + "value": "1562" + }, + { + "label": "willowcand", + "value": "2304" + }, + { + "label": "windandmap", + "value": "2497" + }, + { + "label": "windingpat", + "value": "1974" + }, + { + "label": "WindSpirit", + "value": "1786" + }, + { + "label": "Winningthe", + "value": "2144" + }, + { + "label": "Wisdom", + "value": "3212" + }, + { + "label": "wishardtow", + "value": "1672" + }, + { + "label": "Wishes", + "value": "348" + }, + { + "label": "Witch", + "value": "2847" + }, + { + "label": "Witches", + "value": "437" + }, + { + "label": "witchfan", + "value": "2001" + }, + { + "label": "witheredpr", + "value": "2273" + }, + { + "label": "Wizard", + "value": "706" + }, + { + "label": "Wizards", + "value": "391" + }, + { + "label": "World-hopp", + "value": "812" + }, + { + "label": "Worldbuild", + "value": "2965" + }, + { + "label": "WorldEmpir", + "value": "691" + }, + { + "label": "WorldHoppi", + "value": "273" + }, + { + "label": "Worldofchu", + "value": "3082" + }, + { + "label": "WorldofWar", + "value": "1304" + }, + { + "label": "Worlds", + "value": "2992" + }, + { + "label": "Worldtrave", + "value": "3160" + }, + { + "label": "WorldTrave", + "value": "218" + }, + { + "label": "WorldTree", + "value": "1467" + }, + { + "label": "WorldWar2", + "value": "1077" + }, + { + "label": "WOW", + "value": "2753" + }, + { + "label": "writeonlyz", + "value": "1687" + }, + { + "label": "Writer", + "value": "1499" + }, + { + "label": "Writers", + "value": "404" + }, + { + "label": "Wuhutookof", + "value": "2294" + }, + { + "label": "Wuxia", + "value": "425" + }, + { + "label": "Wuxicheng", + "value": "1703" + }, + { + "label": "WW2", + "value": "2838" + }, + { + "label": "Xianxia", + "value": "709" + }, + { + "label": "XiaomiStar", + "value": "2523" + }, + { + "label": "Xiaonianbl", + "value": "2406" + }, + { + "label": "XiaonianXu", + "value": "2500" + }, + { + "label": "Xiaosaid", + "value": "2573" + }, + { + "label": "Xiaothreey", + "value": "2351" + }, + { + "label": "XiaoxiangP", + "value": "2714" + }, + { + "label": "Xiaoxin", + "value": "1795" + }, + { + "label": "XieDaoheng", + "value": "2393" + }, + { + "label": "XiuXiuXiuX", + "value": "1700" + }, + { + "label": "Xuanhuan", + "value": "487" + }, + { + "label": "XuebaIII", + "value": "2098" + }, + { + "label": "Xuebaisinv", + "value": "2135" + }, + { + "label": "Xueqiunder", + "value": "1918" + }, + { + "label": "Xufamilyel", + "value": "2099" + }, + { + "label": "XuIintheTa", + "value": "2331" + }, + { + "label": "Yakult", + "value": "2139" + }, + { + "label": "Yamen", + "value": "2876" + }, + { + "label": "Yandere", + "value": "304" + }, + { + "label": "YangXiaoA", + "value": "1915" + }, + { + "label": "Yaoi", + "value": "1349" + }, + { + "label": "Yaoyue", + "value": "2355" + }, + { + "label": "yearaftery", + "value": "2705" + }, + { + "label": "yearningfo", + "value": "2084" + }, + { + "label": "yearningfo", + "value": "2426" + }, + { + "label": "yearningfo", + "value": "2624" + }, + { + "label": "Yearningfo", + "value": "2050" + }, + { + "label": "Yearningfo", + "value": "2218" + }, + { + "label": "Yearningto", + "value": "2782" + }, + { + "label": "YeGongzi", + "value": "2561" + }, + { + "label": "YeGucheng", + "value": "2526" + }, + { + "label": "YellowSpri", + "value": "1638" + }, + { + "label": "YeluChengj", + "value": "1678" + }, + { + "label": "YeQianqiu", + "value": "2645" + }, + { + "label": "YeXiaobai", + "value": "2141" + }, + { + "label": "YeYe", + "value": "2790" + }, + { + "label": "Ying&03", + "value": "2131" + }, + { + "label": "YingXiaofe", + "value": "1881" + }, + { + "label": "YinLiisins", + "value": "1772" + }, + { + "label": "Yongchuang", + "value": "1835" + }, + { + "label": "youaretoow", + "value": "1750" + }, + { + "label": "Young", + "value": "3204" + }, + { + "label": "YoungerBro", + "value": "1431" + }, + { + "label": "YoungerLov", + "value": "728" + }, + { + "label": "YoungerSis", + "value": "33" + }, + { + "label": "YoungGirl", + "value": "3173" + }, + { + "label": "younglovei", + "value": "2903" + }, + { + "label": "YoungMaste", + "value": "2555" + }, + { + "label": "YoungMaste", + "value": "2637" + }, + { + "label": "Youth", + "value": "1560" + }, + { + "label": "Ystem", + "value": "3188" + }, + { + "label": "Yu-Gi-Oh", + "value": "1614" + }, + { + "label": "YuboTiandi", + "value": "2136" + }, + { + "label": "Yugioh", + "value": "1391" + }, + { + "label": "Yunmu", + "value": "2090" + }, + { + "label": "YunZhongju", + "value": "2717" + }, + { + "label": "Yuri", + "value": "773" + }, + { + "label": "YuTsingYi", + "value": "2397" + }, + { + "label": "YuXiaoqi", + "value": "1997" + }, + { + "label": "YuYuyu", + "value": "2569" + }, + { + "label": "z-man", + "value": "623" + }, + { + "label": "Zerg", + "value": "1051" + }, + { + "label": "Zergs", + "value": "800" + }, + { + "label": "ZhangErgou", + "value": "2530" + }, + { + "label": "ZhangFeiin", + "value": "2449" + }, + { + "label": "ZhangJuli", + "value": "2425" + }, + { + "label": "ZhangTianb", + "value": "2193" + }, + { + "label": "zhishen", + "value": "2577" + }, + { + "label": "ZhuDabald", + "value": "2362" + }, + { + "label": "ZhugeDali&", + "value": "2458" + }, + { + "label": "ZhugeIrona", + "value": "2022" + }, + { + "label": "Zhugeiscra", + "value": "2466" + }, + { + "label": "ZhuZhiyue", + "value": "1981" + }, + { + "label": "Zippo", + "value": "2586" + }, + { + "label": "ZiXuanXuan", + "value": "1753" + }, + { + "label": "Zombie", + "value": "1175" + }, + { + "label": "zombiefish", + "value": "2115" + }, + { + "label": "ZombieGod", + "value": "2008" + }, + { + "label": "ZombieQuee", + "value": "1179" + }, + { + "label": "Zombies", + "value": "205" + }, + { + "label": "ZombieSumo", + "value": "2806" + }, + { + "label": "Zoo", + "value": "1566" + }, + { + "label": "Zuge", + "value": "2011" + }, + { + "label": "Zulongstil", + "value": "2121" + }, + { + "label": "ZuwuGonggo", + "value": "2549" + }, + { + "label": "仕辰", + "value": "1727" + }, + { + "label": "小封", + "value": "2052" + }, + { + "label": "慕阳", + "value": "1907" + }, + { + "label": "森罗", + "value": "2221" + }, + { + "label": "清裁", + "value": "2722" + }, + { + "label": "萌图", + "value": "2700" + }, + { + "label": "谢邀", + "value": "1754" + }, + { + "label": "酣歌", + "value": "2034" + }, + { + "label": "铁帅", + "value": "1945" + }, + { + "label": "零充", + "value": "2783" + }, + { + "label": "饕牛", + "value": "1682" + } + ], + "value": "", + "type": "Picker" + } + } + }, + { + "id": "fannovel", + "sourceSite": "https://www.fannovel.com", + "sourceName": "FanNovel", + "filters": { + "genres": { + "label": "Genre / Category", + "options": [ + { + "label": "Anime", + "value": "anime" + }, + { + "label": "BG", + "value": "bg" + }, + { + "label": "Billionaire", + "value": "billionaire" + }, + { + "label": "BL", + "value": "bl" + }, + { + "label": "Competitive Sports", + "value": "competitive-sports" + }, + { + "label": "Crossing", + "value": "crossing" + }, + { + "label": "Derivative Fanfic", + "value": "derivative-fanfic" + }, + { + "label": "Detective", + "value": "detective" + }, + { + "label": "Douluo", + "value": "douluo" + }, + { + "label": "Dragon Ball", + "value": "dragon-ball" + }, + { + "label": "Ecchi", + "value": "ecchi" + }, + { + "label": "Elf", + "value": "elf" + }, + { + "label": "Faloo", + "value": "faloo" + }, + { + "label": "Fan-Fiction", + "value": "fan-fiction" + }, + { + "label": "Football", + "value": "football" + }, + { + "label": "Game", + "value": "game" + }, + { + "label": "GL", + "value": "gl" + }, + { + "label": "Historical Romance", + "value": "historical-romance" + }, + { + "label": "Hogwarts", + "value": "hogwarts" + }, + { + "label": "Hot", + "value": "hot" + }, + { + "label": "Korean", + "value": "korean" + }, + { + "label": "LGBT", + "value": "lgbt" + }, + { + "label": "Magic", + "value": "magic" + }, + { + "label": "Marvel", + "value": "marvel" + }, + { + "label": "Military", + "value": "military" + }, + { + "label": "Modern Life", + "value": "modern-life" + }, + { + "label": "Movies", + "value": "movies" + }, + { + "label": "Naruto", + "value": "naruto" + }, + { + "label": "NBA", + "value": "nba" + }, + { + "label": "One Piece", + "value": "one-piece" + }, + { + "label": "Other", + "value": "other" + }, + { + "label": "Pokemon", + "value": "pokemon" + }, + { + "label": "Realistic Fiction", + "value": "realistic-fiction" + }, + { + "label": "Rebirth", + "value": "rebirth" + }, + { + "label": "Reincarnation", + "value": "reincarnation" + }, + { + "label": "Science fiction", + "value": "science-fiction" + }, + { + "label": "Secret", + "value": "secret" + }, + { + "label": "Shoujo Ai", + "value": "shoujo-ai" + }, + { + "label": "Sign in", + "value": "sign-in" + }, + { + "label": "Smut", + "value": "smut" + }, + { + "label": "Suspense", + "value": "suspense" + }, + { + "label": "System", + "value": "system" + }, + { + "label": "Systemflow", + "value": "systemflow" + }, + { + "label": "Terror", + "value": "terror" + }, + { + "label": "Travel Through Time", + "value": "travel-through-time" + }, + { + "label": "Urban Life", + "value": "urban-life" + }, + { + "label": "Villain", + "value": "villain" + }, + { + "label": "War", + "value": "war" + }, + { + "label": "Yuri", + "value": "yuri" + } + ], + "value": "", + "type": "Picker" + }, + "tags": { + "label": "Tags", + "options": [ + { + "label": "Abandoned", + "value": "400" + }, + { + "label": "AbandonedC", + "value": "3708" + }, + { + "label": "Ability", + "value": "2734" + }, + { + "label": "AbilitySte", + "value": "954" + }, + { + "label": "AbsentPare", + "value": "3644" + }, + { + "label": "abuse", + "value": "3312" + }, + { + "label": "AbusiveCha", + "value": "3653" + }, + { + "label": "AbusiveCha", + "value": "3874" + }, + { + "label": "Abyss", + "value": "4727" + }, + { + "label": "Academy", + "value": "58" + }, + { + "label": "Accelerate", + "value": "3717" + }, + { + "label": "ACGN", + "value": "4121" + }, + { + "label": "Acting", + "value": "250" + }, + { + "label": "Action", + "value": "10" + }, + { + "label": "Actors", + "value": "3999" + }, + { + "label": "AdaptedtoA", + "value": "4177" + }, + { + "label": "AdaptedtoD", + "value": "4581" + }, + { + "label": "AdaptedtoD", + "value": "4646" + }, + { + "label": "AdaptedtoG", + "value": "3975" + }, + { + "label": "AdaptedtoM", + "value": "4580" + }, + { + "label": "AdaptedtoM", + "value": "3955" + }, + { + "label": "AdaptedtoM", + "value": "4595" + }, + { + "label": "AdaptedtoM", + "value": "4719" + }, + { + "label": "AdoptedChi", + "value": "3869" + }, + { + "label": "AdoptedPro", + "value": "3720" + }, + { + "label": "Adult", + "value": "924" + }, + { + "label": "Adultery", + "value": "1003" + }, + { + "label": "Advancedte", + "value": "793" + }, + { + "label": "Adventure", + "value": "27" + }, + { + "label": "Adventurer", + "value": "551" + }, + { + "label": "Adventurer", + "value": "4741" + }, + { + "label": "Aesthetic", + "value": "4761" + }, + { + "label": "Affair", + "value": "4653" + }, + { + "label": "Afterthesh", + "value": "4416" + }, + { + "label": "Afunnyguy", + "value": "4408" + }, + { + "label": "Agedistrib", + "value": "4447" + }, + { + "label": "Agent", + "value": "3360" + }, + { + "label": "AgeProgres", + "value": "3707" + }, + { + "label": "AgeRegress", + "value": "4126" + }, + { + "label": "Aggressive", + "value": "3808" + }, + { + "label": "airflow", + "value": "4378" + }, + { + "label": "Alchemy", + "value": "105" + }, + { + "label": "Alien", + "value": "2943" + }, + { + "label": "Aliens", + "value": "328" + }, + { + "label": "Almighty", + "value": "3237" + }, + { + "label": "Alpha", + "value": "172" + }, + { + "label": "AlternateH", + "value": "4325" + }, + { + "label": "AlternateW", + "value": "3684" + }, + { + "label": "Alternativ", + "value": "1317" + }, + { + "label": "Amatchmade", + "value": "4528" + }, + { + "label": "ambiguous", + "value": "4547" + }, + { + "label": "America", + "value": "3182" + }, + { + "label": "Americaiss", + "value": "4516" + }, + { + "label": "Americas", + "value": "4744" + }, + { + "label": "Amnesia", + "value": "154" + }, + { + "label": "Anal", + "value": "926" + }, + { + "label": "AncientChi", + "value": "3648" + }, + { + "label": "AncientChi", + "value": "3768" + }, + { + "label": "ancienthis", + "value": "4445" + }, + { + "label": "AncientSpi", + "value": "4224" + }, + { + "label": "AncientTim", + "value": "3649" + }, + { + "label": "ancientwil", + "value": "4375" + }, + { + "label": "Androgynou", + "value": "3836" + }, + { + "label": "Androids", + "value": "4709" + }, + { + "label": "Angel", + "value": "792" + }, + { + "label": "Angels", + "value": "1060" + }, + { + "label": "AnimalChar", + "value": "3778" + }, + { + "label": "AnimalRear", + "value": "3994" + }, + { + "label": "Animation", + "value": "4731" + }, + { + "label": "AnimationD", + "value": "4732" + }, + { + "label": "Anime", + "value": "905" + }, + { + "label": "Anotherwor", + "value": "773" + }, + { + "label": "Anti-heroP", + "value": "3995" + }, + { + "label": "Anti-Japan", + "value": "4289" + }, + { + "label": "Anti-Magic", + "value": "3986" + }, + { + "label": "Anti-MC", + "value": "4178" + }, + { + "label": "Anti-routi", + "value": "2807" + }, + { + "label": "Anti-socia", + "value": "3699" + }, + { + "label": "Antihero", + "value": "25" + }, + { + "label": "AntiheroPr", + "value": "3700" + }, + { + "label": "ApartmentL", + "value": "3937" + }, + { + "label": "ApatheticP", + "value": "3738" + }, + { + "label": "Apocalypse", + "value": "187" + }, + { + "label": "Appearance", + "value": "3709" + }, + { + "label": "Appearance", + "value": "3837" + }, + { + "label": "Apprentice", + "value": "4681" + }, + { + "label": "archeology", + "value": "4329" + }, + { + "label": "Archery", + "value": "743" + }, + { + "label": "Aresstream", + "value": "4542" + }, + { + "label": "Aristocrac", + "value": "232" + }, + { + "label": "Aristocrat", + "value": "4673" + }, + { + "label": "Arknights", + "value": "4073" + }, + { + "label": "armoredcit", + "value": "4720" + }, + { + "label": "ArmsDealer", + "value": "3654" + }, + { + "label": "Army", + "value": "542" + }, + { + "label": "ArmyBuildi", + "value": "3638" + }, + { + "label": "ArrangedMa", + "value": "87" + }, + { + "label": "ArrayMage", + "value": "4537" + }, + { + "label": "ArrogantCh", + "value": "3675" + }, + { + "label": "ArtifactCr", + "value": "3872" + }, + { + "label": "Artifacts", + "value": "162" + }, + { + "label": "ArtifactsB", + "value": "3829" + }, + { + "label": "ArtifactsC", + "value": "3725" + }, + { + "label": "artificer", + "value": "4162" + }, + { + "label": "Artificial", + "value": "3732" + }, + { + "label": "Artists", + "value": "4591" + }, + { + "label": "Assasins", + "value": "3905" + }, + { + "label": "Assassin", + "value": "4705" + }, + { + "label": "Assassins", + "value": "627" + }, + { + "label": "athlete", + "value": "3050" + }, + { + "label": "Autism", + "value": "253" + }, + { + "label": "Average-lo", + "value": "3923" + }, + { + "label": "Award-winn", + "value": "4702" + }, + { + "label": "AwkwardPro", + "value": "4648" + }, + { + "label": "Azeroth", + "value": "1232" + }, + { + "label": "AzurLane", + "value": "3971" + }, + { + "label": "Baby", + "value": "317" + }, + { + "label": "Badboy", + "value": "254" + }, + { + "label": "Baseball", + "value": "4125" + }, + { + "label": "BasedonaMo", + "value": "3685" + }, + { + "label": "BasedonaTV", + "value": "3767" + }, + { + "label": "Basket", + "value": "4115" + }, + { + "label": "basketball", + "value": "3049" + }, + { + "label": "BattleAcad", + "value": "3751" + }, + { + "label": "BattleComp", + "value": "4022" + }, + { + "label": "battleofwi", + "value": "4541" + }, + { + "label": "Bdsm", + "value": "2736" + }, + { + "label": "BE", + "value": "2913" + }, + { + "label": "Beast", + "value": "4025" + }, + { + "label": "BeastCompa", + "value": "3741" + }, + { + "label": "Beastkin", + "value": "4058" + }, + { + "label": "Beasts", + "value": "501" + }, + { + "label": "BeastTamer", + "value": "1282" + }, + { + "label": "Beasttamin", + "value": "137" + }, + { + "label": "beastworld", + "value": "4348" + }, + { + "label": "BeautifulF", + "value": "3701" + }, + { + "label": "beautifulh", + "value": "3792" + }, + { + "label": "Beautifull", + "value": "4098" + }, + { + "label": "BeautifulP", + "value": "3877" + }, + { + "label": "Beauty", + "value": "373" + }, + { + "label": "Behindthes", + "value": "4269" + }, + { + "label": "Bellyblack", + "value": "4209" + }, + { + "label": "Bestiality", + "value": "4159" + }, + { + "label": "Betrayal", + "value": "45" + }, + { + "label": "BickeringC", + "value": "4019" + }, + { + "label": "bigbrain", + "value": "4229" + }, + { + "label": "Billionair", + "value": "4680" + }, + { + "label": "Biochemist", + "value": "4401" + }, + { + "label": "Biochip", + "value": "3629" + }, + { + "label": "Biomass", + "value": "4130" + }, + { + "label": "Birth", + "value": "2741" + }, + { + "label": "Bl", + "value": "292" + }, + { + "label": "black-bell", + "value": "4536" + }, + { + "label": "Blackbelli", + "value": "4089" + }, + { + "label": "BlackBelly", + "value": "3952" + }, + { + "label": "Blackening", + "value": "3046" + }, + { + "label": "Blacklight", + "value": "4131" + }, + { + "label": "Blacklotus", + "value": "4404" + }, + { + "label": "Blackmail", + "value": "898" + }, + { + "label": "Blacksmith", + "value": "705" + }, + { + "label": "Bleach", + "value": "1114" + }, + { + "label": "Blinddate", + "value": "4509" + }, + { + "label": "BlindDates", + "value": "4142" + }, + { + "label": "BlindProta", + "value": "4611" + }, + { + "label": "Blood", + "value": "2692" + }, + { + "label": "Bloodborne", + "value": "4074" + }, + { + "label": "Bloodlines", + "value": "80" + }, + { + "label": "BloodManip", + "value": "4152" + }, + { + "label": "Bloodpumpi", + "value": "790" + }, + { + "label": "bodyguard", + "value": "3507" + }, + { + "label": "Bodyguards", + "value": "4593" + }, + { + "label": "BodySwap", + "value": "4111" + }, + { + "label": "BodyTemper", + "value": "4169" + }, + { + "label": "Books", + "value": "3772" + }, + { + "label": "Booktransm", + "value": "205" + }, + { + "label": "Bookworm", + "value": "3873" + }, + { + "label": "Boss", + "value": "123" + }, + { + "label": "Boss-Subor", + "value": "3686" + }, + { + "label": "BOSSflow", + "value": "4297" + }, + { + "label": "Boxing", + "value": "4655" + }, + { + "label": "Brainhole", + "value": "4501" + }, + { + "label": "Brainwashi", + "value": "988" + }, + { + "label": "BrokenEnga", + "value": "4589" + }, + { + "label": "Brother", + "value": "3358" + }, + { + "label": "BrotherCom", + "value": "3773" + }, + { + "label": "Brotherhoo", + "value": "353" + }, + { + "label": "BTTH", + "value": "4029" + }, + { + "label": "Buddhism", + "value": "492" + }, + { + "label": "building", + "value": "4752" + }, + { + "label": "Bulldozer", + "value": "4716" + }, + { + "label": "Bullying", + "value": "3810" + }, + { + "label": "BungouStra", + "value": "4165" + }, + { + "label": "BunguoStra", + "value": "4056" + }, + { + "label": "Business", + "value": "3968" + }, + { + "label": "BusinessMa", + "value": "3655" + }, + { + "label": "BusinessMa", + "value": "3969" + }, + { + "label": "Businessme", + "value": "315" + }, + { + "label": "Businesswo", + "value": "340" + }, + { + "label": "Butlers", + "value": "4594" + }, + { + "label": "calm", + "value": "2947" + }, + { + "label": "Calmdown", + "value": "4745" + }, + { + "label": "CalmProtag", + "value": "3726" + }, + { + "label": "Campus", + "value": "438" + }, + { + "label": "CampusLove", + "value": "3938" + }, + { + "label": "Cannibalis", + "value": "3841" + }, + { + "label": "cannonfodd", + "value": "4228" + }, + { + "label": "Capitalist", + "value": "3893" + }, + { + "label": "captain", + "value": "3192" + }, + { + "label": "card", + "value": "2934" + }, + { + "label": "CardGames", + "value": "3815" + }, + { + "label": "CareerOrie", + "value": "3959" + }, + { + "label": "CarefreePr", + "value": "3997" + }, + { + "label": "CaringProt", + "value": "3689" + }, + { + "label": "carpenter", + "value": "4755" + }, + { + "label": "Cat", + "value": "4574" + }, + { + "label": "catchfast", + "value": "4369" + }, + { + "label": "cautious", + "value": "2978" + }, + { + "label": "CautiousPr", + "value": "3710" + }, + { + "label": "Celebritie", + "value": "305" + }, + { + "label": "Celebrity", + "value": "3199" + }, + { + "label": "Ceo", + "value": "111" + }, + { + "label": "ChainsawMa", + "value": "4173" + }, + { + "label": "chanceenco", + "value": "4498" + }, + { + "label": "Chaotang", + "value": "4395" + }, + { + "label": "ChaotangJi", + "value": "4336" + }, + { + "label": "CharacterD", + "value": "3758" + }, + { + "label": "CharacterG", + "value": "3656" + }, + { + "label": "Charismati", + "value": "3770" + }, + { + "label": "CharmingPr", + "value": "3733" + }, + { + "label": "chase", + "value": "3509" + }, + { + "label": "chasingwif", + "value": "4398" + }, + { + "label": "chasingwif", + "value": "4459" + }, + { + "label": "ChatGroup", + "value": "1077" + }, + { + "label": "ChatRooms", + "value": "3752" + }, + { + "label": "Cheat", + "value": "818" + }, + { + "label": "Cheats", + "value": "221" + }, + { + "label": "chef", + "value": "3314" + }, + { + "label": "Chefs", + "value": "4077" + }, + { + "label": "ChenHegao", + "value": "4132" + }, + { + "label": "chief", + "value": "3541" + }, + { + "label": "ChildAbuse", + "value": "3657" + }, + { + "label": "Childcare", + "value": "97" + }, + { + "label": "ChildhoodF", + "value": "3900" + }, + { + "label": "ChildhoodL", + "value": "3793" + }, + { + "label": "ChildhoodP", + "value": "3744" + }, + { + "label": "ChildhoodS", + "value": "3844" + }, + { + "label": "ChildishPr", + "value": "3825" + }, + { + "label": "ChildProta", + "value": "3757" + }, + { + "label": "ChinaEnter", + "value": "4511" + }, + { + "label": "Chinese", + "value": "4578" + }, + { + "label": "Chinesemed", + "value": "4307" + }, + { + "label": "ChinesePre", + "value": "1269" + }, + { + "label": "ChoiceSele", + "value": "1274" + }, + { + "label": "Chronology", + "value": "2766" + }, + { + "label": "ChuningMC", + "value": "4059" + }, + { + "label": "Chuunibyou", + "value": "3935" + }, + { + "label": "city", + "value": "3061" + }, + { + "label": "Cityurban", + "value": "4756" + }, + { + "label": "civilizati", + "value": "4452" + }, + { + "label": "Civilizati", + "value": "4322" + }, + { + "label": "ciweimao", + "value": "4763" + }, + { + "label": "ClanBuildi", + "value": "3809" + }, + { + "label": "ClanSectDe", + "value": "1278" + }, + { + "label": "ClassicXia", + "value": "4278" + }, + { + "label": "clear", + "value": "2717" + }, + { + "label": "clearthink", + "value": "4245" + }, + { + "label": "CleaverPro", + "value": "4181" + }, + { + "label": "CleverProt", + "value": "3753" + }, + { + "label": "CleverProt", + "value": "3918" + }, + { + "label": "ClingyLove", + "value": "4620" + }, + { + "label": "Clones", + "value": "282" + }, + { + "label": "Club", + "value": "4091" + }, + { + "label": "ClumsyLove", + "value": "3855" + }, + { + "label": "coach", + "value": "3051" + }, + { + "label": "codegeass", + "value": "4167" + }, + { + "label": "Cohabitati", + "value": "3745" + }, + { + "label": "ColdLoveIn", + "value": "3886" + }, + { + "label": "ColdProtag", + "value": "3814" + }, + { + "label": "collapse", + "value": "3246" + }, + { + "label": "College", + "value": "4092" + }, + { + "label": "CollegeStr", + "value": "4285" + }, + { + "label": "CollegeUni", + "value": "3833" + }, + { + "label": "Colonializ", + "value": "4008" + }, + { + "label": "ComedicUnd", + "value": "3695" + }, + { + "label": "Comedy", + "value": "82" + }, + { + "label": "Comic", + "value": "4087" + }, + { + "label": "ComingofAg", + "value": "4587" + }, + { + "label": "commander", + "value": "3391" + }, + { + "label": "commonerli", + "value": "4540" + }, + { + "label": "Competitio", + "value": "4116" + }, + { + "label": "ComplexFam", + "value": "3786" + }, + { + "label": "comprehens", + "value": "2845" + }, + { + "label": "Comprehens", + "value": "2701" + }, + { + "label": "Conan", + "value": "2865" + }, + { + "label": "Concubine", + "value": "4421" + }, + { + "label": "Conditiona", + "value": "3830" + }, + { + "label": "ConfidentP", + "value": "3711" + }, + { + "label": "Conflictin", + "value": "3966" + }, + { + "label": "Conquer", + "value": "209" + }, + { + "label": "Contagonis", + "value": "4133" + }, + { + "label": "Contendfor", + "value": "4310" + }, + { + "label": "contract", + "value": "3520" + }, + { + "label": "contractlo", + "value": "4195" + }, + { + "label": "contractma", + "value": "4193" + }, + { + "label": "Contracts", + "value": "413" + }, + { + "label": "Contrastcu", + "value": "4414" + }, + { + "label": "cook", + "value": "4399" + }, + { + "label": "Cooking", + "value": "43" + }, + { + "label": "coolandhan", + "value": "4396" + }, + { + "label": "Corruption", + "value": "3949" + }, + { + "label": "CosmicHorr", + "value": "4079" + }, + { + "label": "CosmicWars", + "value": "3754" + }, + { + "label": "cosplaystr", + "value": "4276" + }, + { + "label": "Counteratt", + "value": "156" + }, + { + "label": "Couple", + "value": "3471" + }, + { + "label": "CoupleGrow", + "value": "3813" + }, + { + "label": "CourtOffic", + "value": "4713" + }, + { + "label": "courtstrug", + "value": "4465" + }, + { + "label": "Courtyardh", + "value": "4512" + }, + { + "label": "Cousins", + "value": "4016" + }, + { + "label": "CowardlyPr", + "value": "3698" + }, + { + "label": "CP", + "value": "4441" + }, + { + "label": "Crafting", + "value": "116" + }, + { + "label": "CrazyProta", + "value": "4146" + }, + { + "label": "Creatures", + "value": "3734" + }, + { + "label": "Crime", + "value": "75" + }, + { + "label": "Criminalin", + "value": "4368" + }, + { + "label": "Criminals", + "value": "3939" + }, + { + "label": "Cross", + "value": "2813" + }, + { + "label": "Cross-dres", + "value": "4606" + }, + { + "label": "Crossdress", + "value": "4695" + }, + { + "label": "crossfarmi", + "value": "4467" + }, + { + "label": "Crossing", + "value": "543" + }, + { + "label": "Crossover", + "value": "943" + }, + { + "label": "Crosstalka", + "value": "4521" + }, + { + "label": "crowmouth", + "value": "4417" + }, + { + "label": "CruelChara", + "value": "3658" + }, + { + "label": "CruelMC", + "value": "4158" + }, + { + "label": "Crush", + "value": "4491" + }, + { + "label": "Cthulhu", + "value": "2951" + }, + { + "label": "Cultivatio", + "value": "31" + }, + { + "label": "Cunnilingu", + "value": "4730" + }, + { + "label": "cunningfem", + "value": "4676" + }, + { + "label": "CunningPro", + "value": "3676" + }, + { + "label": "CunningPro", + "value": "4084" + }, + { + "label": "cure", + "value": "3257" + }, + { + "label": "CuriousPro", + "value": "4639" + }, + { + "label": "Curses", + "value": "3987" + }, + { + "label": "Cute", + "value": "161" + }, + { + "label": "CuteChildr", + "value": "3816" + }, + { + "label": "CuteProtag", + "value": "3846" + }, + { + "label": "CuteStory", + "value": "3847" + }, + { + "label": "Cyberpunk", + "value": "2825" + }, + { + "label": "cynicism", + "value": "4425" + }, + { + "label": "D", + "value": "4560" + }, + { + "label": "Dancers", + "value": "4733" + }, + { + "label": "Dangmei", + "value": "2894" + }, + { + "label": "Danmei", + "value": "4584" + }, + { + "label": "DaoCompani", + "value": "4701" + }, + { + "label": "DaoCompreh", + "value": "4033" + }, + { + "label": "Daoism", + "value": "4034" + }, + { + "label": "Daqin", + "value": "3442" + }, + { + "label": "Dark", + "value": "208" + }, + { + "label": "DarkDeatho", + "value": "3797" + }, + { + "label": "Darkfantas", + "value": "698" + }, + { + "label": "DarkPower", + "value": "4042" + }, + { + "label": "Datang", + "value": "3390" + }, + { + "label": "DC", + "value": "1038" + }, + { + "label": "DeadProtag", + "value": "3848" + }, + { + "label": "Death", + "value": "3755" + }, + { + "label": "DeathofLov", + "value": "3712" + }, + { + "label": "dedicated", + "value": "3537" + }, + { + "label": "DeepLTrans", + "value": "1294" + }, + { + "label": "Delusions", + "value": "3936" + }, + { + "label": "Demi-Human", + "value": "4183" + }, + { + "label": "Demon", + "value": "62" + }, + { + "label": "DemonicCul", + "value": "4017" + }, + { + "label": "DemonLord", + "value": "3659" + }, + { + "label": "DemonPower", + "value": "4179" + }, + { + "label": "Demons", + "value": "36" + }, + { + "label": "DemonSlaye", + "value": "1115" + }, + { + "label": "DenseProta", + "value": "3791" + }, + { + "label": "Depictions", + "value": "3713" + }, + { + "label": "derivative", + "value": "3156" + }, + { + "label": "Destiny", + "value": "3943" + }, + { + "label": "Detective", + "value": "1068" + }, + { + "label": "DetectiveC", + "value": "1145" + }, + { + "label": "Detectiver", + "value": "4332" + }, + { + "label": "Detectives", + "value": "841" + }, + { + "label": "Determined", + "value": "3747" + }, + { + "label": "Develop", + "value": "2900" + }, + { + "label": "Devil", + "value": "608" + }, + { + "label": "DevotedLov", + "value": "3731" + }, + { + "label": "DifferentS", + "value": "4188" + }, + { + "label": "Dining", + "value": "2767" + }, + { + "label": "directdaug", + "value": "4343" + }, + { + "label": "Director", + "value": "4000" + }, + { + "label": "Disabiliti", + "value": "4021" + }, + { + "label": "DiscipleLo", + "value": "4682" + }, + { + "label": "DiscipleTr", + "value": "1293" + }, + { + "label": "Discrimina", + "value": "349" + }, + { + "label": "disguise", + "value": "2785" + }, + { + "label": "Disguiseas", + "value": "4313" + }, + { + "label": "DishonestP", + "value": "3920" + }, + { + "label": "Divination", + "value": "4063" + }, + { + "label": "divorce", + "value": "4494" + }, + { + "label": "DND", + "value": "3428" + }, + { + "label": "Doctor", + "value": "339" + }, + { + "label": "Doctors", + "value": "175" + }, + { + "label": "doctorstre", + "value": "4265" + }, + { + "label": "DollsPuppe", + "value": "3794" + }, + { + "label": "DomesticAf", + "value": "4009" + }, + { + "label": "Dominator", + "value": "4693" + }, + { + "label": "Domineerin", + "value": "4476" + }, + { + "label": "Doomsday", + "value": "768" + }, + { + "label": "Doraemon", + "value": "4174" + }, + { + "label": "DotingLove", + "value": "3746" + }, + { + "label": "DotingOlde", + "value": "4662" + }, + { + "label": "DotingPare", + "value": "3853" + }, + { + "label": "Dotingwife", + "value": "4480" + }, + { + "label": "doublebirt", + "value": "4314" + }, + { + "label": "Doublebusi", + "value": "4237" + }, + { + "label": "Douluo", + "value": "3934" + }, + { + "label": "DouluoCont", + "value": "4548" + }, + { + "label": "DouluoDalu", + "value": "952" + }, + { + "label": "Doupo", + "value": "3889" + }, + { + "label": "DoupoBTTH", + "value": "3856" + }, + { + "label": "DouroConti", + "value": "4345" + }, + { + "label": "Dragon", + "value": "405" + }, + { + "label": "Dragonball", + "value": "1162" + }, + { + "label": "DragonPowe", + "value": "4180" + }, + { + "label": "DragonRide", + "value": "4018" + }, + { + "label": "Dragons", + "value": "418" + }, + { + "label": "DragonSlay", + "value": "3630" + }, + { + "label": "Drama", + "value": "249" + }, + { + "label": "Dramatic", + "value": "510" + }, + { + "label": "Dream", + "value": "4030" + }, + { + "label": "Dreams", + "value": "4066" + }, + { + "label": "Drugs", + "value": "3798" + }, + { + "label": "Druids", + "value": "4754" + }, + { + "label": "DumbProtag", + "value": "3967" + }, + { + "label": "dungeon", + "value": "4041" + }, + { + "label": "Dungeons", + "value": "4023" + }, + { + "label": "Dwarfs", + "value": "537" + }, + { + "label": "Dystopia", + "value": "806" + }, + { + "label": "e-Sports", + "value": "3957" + }, + { + "label": "EarlyRoman", + "value": "3667" + }, + { + "label": "EarthInvas", + "value": "3645" + }, + { + "label": "easternfan", + "value": "3650" + }, + { + "label": "easyandfun", + "value": "4499" + }, + { + "label": "EasyGoingL", + "value": "3748" + }, + { + "label": "Easygoingp", + "value": "4090" + }, + { + "label": "Eat", + "value": "3468" + }, + { + "label": "Eatchicken", + "value": "4268" + }, + { + "label": "Eccentricp", + "value": "4100" + }, + { + "label": "Ecchi", + "value": "847" + }, + { + "label": "Economics", + "value": "3963" + }, + { + "label": "Editors", + "value": "4067" + }, + { + "label": "Education", + "value": "3878" + }, + { + "label": "Effort", + "value": "4477" + }, + { + "label": "Egoist", + "value": "564" + }, + { + "label": "EideticMem", + "value": "3870" + }, + { + "label": "EldestSist", + "value": "3910" + }, + { + "label": "elemental", + "value": "4746" + }, + { + "label": "ElementalM", + "value": "3647" + }, + { + "label": "Elf", + "value": "4711" + }, + { + "label": "Elves", + "value": "466" + }, + { + "label": "Elvish", + "value": "2828" + }, + { + "label": "emotion", + "value": "4496" + }, + { + "label": "Emotionall", + "value": "3739" + }, + { + "label": "emperor", + "value": "3461" + }, + { + "label": "emperorstr", + "value": "4387" + }, + { + "label": "Empire", + "value": "4010" + }, + { + "label": "Empires", + "value": "406" + }, + { + "label": "Empress", + "value": "3066" + }, + { + "label": "EnemiesBec", + "value": "3756" + }, + { + "label": "EnemiesBec", + "value": "3763" + }, + { + "label": "Enemiestol", + "value": "375" + }, + { + "label": "enemy", + "value": "3248" + }, + { + "label": "Engage", + "value": "3300" + }, + { + "label": "Engagement", + "value": "4647" + }, + { + "label": "Engineer", + "value": "4630" + }, + { + "label": "Entertainm", + "value": "803" + }, + { + "label": "Episodic", + "value": "4623" + }, + { + "label": "escapemarr", + "value": "4517" + }, + { + "label": "Eschatolog", + "value": "2723" + }, + { + "label": "Escrow", + "value": "3364" + }, + { + "label": "Esper", + "value": "4571" + }, + { + "label": "Eunuch", + "value": "3413" + }, + { + "label": "Europe", + "value": "3198" + }, + { + "label": "EuropeanAm", + "value": "3915" + }, + { + "label": "everydayla", + "value": "4260" + }, + { + "label": "evildoer", + "value": "3254" + }, + { + "label": "EvilGod", + "value": "3962" + }, + { + "label": "EvilGods", + "value": "3660" + }, + { + "label": "EvilOrgani", + "value": "3631" + }, + { + "label": "EvilOrgani", + "value": "4052" + }, + { + "label": "EvilProtag", + "value": "3632" + }, + { + "label": "EvilReligi", + "value": "3687" + }, + { + "label": "Evolution", + "value": "6" + }, + { + "label": "Exhaustion", + "value": "2886" + }, + { + "label": "Exorcism", + "value": "1020" + }, + { + "label": "Exorcist", + "value": "4001" + }, + { + "label": "Exotic", + "value": "2693" + }, + { + "label": "Experience", + "value": "1270" + }, + { + "label": "Exposurefl", + "value": "4505" + }, + { + "label": "Expressflo", + "value": "4362" + }, + { + "label": "EyePowers", + "value": "3677" + }, + { + "label": "Faceslappi", + "value": "67" + }, + { + "label": "fairies", + "value": "3203" + }, + { + "label": "Fairytail", + "value": "1246" + }, + { + "label": "FallenAnge", + "value": "4123" + }, + { + "label": "FallenNobi", + "value": "3887" + }, + { + "label": "Faloo", + "value": "1267" + }, + { + "label": "FamilialLo", + "value": "3834" + }, + { + "label": "Family", + "value": "381" + }, + { + "label": "FamilyBusi", + "value": "3852" + }, + { + "label": "FamilyConf", + "value": "4614" + }, + { + "label": "familylife", + "value": "4106" + }, + { + "label": "FamousPare", + "value": "3735" + }, + { + "label": "FamousProt", + "value": "3728" + }, + { + "label": "Fan", + "value": "2802" + }, + { + "label": "Fan-fictio", + "value": "939" + }, + { + "label": "Fanaticism", + "value": "958" + }, + { + "label": "Fanfic", + "value": "652" + }, + { + "label": "Fanfiction", + "value": "527" + }, + { + "label": "FanFicton", + "value": "4078" + }, + { + "label": "fanqienove", + "value": "1339" + }, + { + "label": "Fantasy", + "value": "11" + }, + { + "label": "Fantasybra", + "value": "4430" + }, + { + "label": "FantasyCre", + "value": "3736" + }, + { + "label": "FantasyFai", + "value": "4463" + }, + { + "label": "fantasyfan", + "value": "4460" + }, + { + "label": "FantasyMag", + "value": "3702" + }, + { + "label": "fantasyrom", + "value": "4493" + }, + { + "label": "FantasyWor", + "value": "3703" + }, + { + "label": "Farmer", + "value": "3398" + }, + { + "label": "Farming", + "value": "196" + }, + { + "label": "fashionabl", + "value": "2838" + }, + { + "label": "FastCultiv", + "value": "3737" + }, + { + "label": "FastGrowth", + "value": "4696" + }, + { + "label": "FastLearne", + "value": "3749" + }, + { + "label": "Fastpaced", + "value": "619" + }, + { + "label": "fasttravel", + "value": "4738" + }, + { + "label": "fastwear", + "value": "4255" + }, + { + "label": "Fatedlove", + "value": "422" + }, + { + "label": "FateSeries", + "value": "4108" + }, + { + "label": "FattoFit", + "value": "3876" + }, + { + "label": "Fault", + "value": "4524" + }, + { + "label": "FearlessPr", + "value": "3639" + }, + { + "label": "Feelgood", + "value": "291" + }, + { + "label": "Fellatio", + "value": "3804" + }, + { + "label": "FemaleFigh", + "value": "4109" + }, + { + "label": "femalehono", + "value": "4394" + }, + { + "label": "Femalelead", + "value": "216" + }, + { + "label": "FemaleMast", + "value": "3799" + }, + { + "label": "femalematc", + "value": "4270" + }, + { + "label": "FemaleMC", + "value": "4060" + }, + { + "label": "Femalepres", + "value": "4455" + }, + { + "label": "FemaleProt", + "value": "44" + }, + { + "label": "FemaletoMa", + "value": "4182" + }, + { + "label": "fiercewife", + "value": "4486" + }, + { + "label": "Fightagain", + "value": "4340" + }, + { + "label": "fighting", + "value": "4470" + }, + { + "label": "filmandtel", + "value": "4438" + }, + { + "label": "Filmempero", + "value": "4483" + }, + { + "label": "finance", + "value": "1321" + }, + { + "label": "finepoint", + "value": "4407" + }, + { + "label": "Firearms", + "value": "324" + }, + { + "label": "First-time", + "value": "3795" + }, + { + "label": "Firstlove", + "value": "386" + }, + { + "label": "Fishing", + "value": "3184" + }, + { + "label": "FleetBattl", + "value": "3953" + }, + { + "label": "flirtatiou", + "value": "3417" + }, + { + "label": "flood", + "value": "2788" + }, + { + "label": "Flourishin", + "value": "4358" + }, + { + "label": "flowercare", + "value": "4217" + }, + { + "label": "folksuspen", + "value": "4367" + }, + { + "label": "Food", + "value": "4049" + }, + { + "label": "foodie", + "value": "3362" + }, + { + "label": "FoodWars!", + "value": "1263" + }, + { + "label": "Football", + "value": "1340" + }, + { + "label": "Forcedinto", + "value": "4065" + }, + { + "label": "ForcedLivi", + "value": "4605" + }, + { + "label": "ForcedMarr", + "value": "3985" + }, + { + "label": "Forensic", + "value": "4436" + }, + { + "label": "ForgetfulP", + "value": "3964" + }, + { + "label": "fox", + "value": "3265" + }, + { + "label": "FoxSpirits", + "value": "3803" + }, + { + "label": "fqloo", + "value": "4766" + }, + { + "label": "France", + "value": "4692" + }, + { + "label": "FriendsBec", + "value": "4590" + }, + { + "label": "Friendship", + "value": "128" + }, + { + "label": "fullflow", + "value": "4312" + }, + { + "label": "Fumino", + "value": "2760" + }, + { + "label": "Funny", + "value": "2936" + }, + { + "label": "Furutake", + "value": "3183" + }, + { + "label": "Futanari", + "value": "3879" + }, + { + "label": "Future", + "value": "673" + }, + { + "label": "FutureCivi", + "value": "3919" + }, + { + "label": "futureworl", + "value": "4374" + }, + { + "label": "Futuristic", + "value": "3947" + }, + { + "label": "Game", + "value": "607" + }, + { + "label": "gamealien", + "value": "4227" + }, + { + "label": "Gameanchor", + "value": "4522" + }, + { + "label": "gameanime", + "value": "4432" + }, + { + "label": "GameElemen", + "value": "81" + }, + { + "label": "GameElemen", + "value": "3941" + }, + { + "label": "gameplayer", + "value": "4305" + }, + { + "label": "Gameproduc", + "value": "4251" + }, + { + "label": "GameRankin", + "value": "3932" + }, + { + "label": "Gamers", + "value": "159" + }, + { + "label": "Games", + "value": "2855" + }, + { + "label": "Gaming", + "value": "2910" + }, + { + "label": "GamingE-Sp", + "value": "4626" + }, + { + "label": "gangfeud", + "value": "4212" + }, + { + "label": "Gangs", + "value": "4153" + }, + { + "label": "Gangster", + "value": "3030" + }, + { + "label": "Gaowuworld", + "value": "4450" + }, + { + "label": "GatetoAnot", + "value": "3683" + }, + { + "label": "Gatevalve", + "value": "4373" + }, + { + "label": "Geass", + "value": "4107" + }, + { + "label": "Geeky", + "value": "3222" + }, + { + "label": "Genderbend", + "value": "495" + }, + { + "label": "Genderless", + "value": "3921" + }, + { + "label": "GenderRole", + "value": "3911" + }, + { + "label": "gene", + "value": "3330" + }, + { + "label": "GeneModifi", + "value": "1283" + }, + { + "label": "General", + "value": "4563" + }, + { + "label": "Generals", + "value": "4006" + }, + { + "label": "GeneticMod", + "value": "3661" + }, + { + "label": "geneticwar", + "value": "4424" + }, + { + "label": "Genius", + "value": "113" + }, + { + "label": "geniusflow", + "value": "4263" + }, + { + "label": "GeniusProt", + "value": "3714" + }, + { + "label": "Genshinimp", + "value": "4157" + }, + { + "label": "Ghosts", + "value": "285" + }, + { + "label": "Giant", + "value": "3267" + }, + { + "label": "Gintama", + "value": "2703" + }, + { + "label": "girlfriend", + "value": "4664" + }, + { + "label": "Go", + "value": "4573" + }, + { + "label": "Goblins", + "value": "4143" + }, + { + "label": "God", + "value": "4419" + }, + { + "label": "God-humanR", + "value": "3688" + }, + { + "label": "God-levelf", + "value": "4246" + }, + { + "label": "Goddess", + "value": "4096" + }, + { + "label": "Goddesses", + "value": "586" + }, + { + "label": "GodlyPower", + "value": "3669" + }, + { + "label": "GodlyProta", + "value": "3965" + }, + { + "label": "GodofWar", + "value": "4198" + }, + { + "label": "GodProtago", + "value": "3729" + }, + { + "label": "Gods", + "value": "173" + }, + { + "label": "Godzilla", + "value": "4134" + }, + { + "label": "GoldenFing", + "value": "4099" + }, + { + "label": "Goldfinger", + "value": "4238" + }, + { + "label": "Gongdou", + "value": "2718" + }, + { + "label": "Gore", + "value": "4071" + }, + { + "label": "Gotoschool", + "value": "4301" + }, + { + "label": "Grandpa", + "value": "3313" + }, + { + "label": "Grassroots", + "value": "4290" + }, + { + "label": "Greatgod", + "value": "4299" + }, + { + "label": "Greenplum", + "value": "4205" + }, + { + "label": "grimReaper", + "value": "4403" + }, + { + "label": "Grinding", + "value": "4585" + }, + { + "label": "Group", + "value": "3149" + }, + { + "label": "grouppet", + "value": "4349" + }, + { + "label": "Groupspoil", + "value": "140" + }, + { + "label": "groupwear", + "value": "4406" + }, + { + "label": "growingup", + "value": "4550" + }, + { + "label": "grudges", + "value": "2743" + }, + { + "label": "GuardianRe", + "value": "3904" + }, + { + "label": "Guilds", + "value": "4012" + }, + { + "label": "Gundam", + "value": "4144" + }, + { + "label": "Gunfighter", + "value": "706" + }, + { + "label": "Guoshu", + "value": "3354" + }, + { + "label": "hacker", + "value": "3404" + }, + { + "label": "Hackers", + "value": "4024" + }, + { + "label": "Half-human", + "value": "4640" + }, + { + "label": "Handjob", + "value": "3940" + }, + { + "label": "HandsomeMa", + "value": "3704" + }, + { + "label": "HandsomeMa", + "value": "4734" + }, + { + "label": "HandsomePr", + "value": "3912" + }, + { + "label": "happyenemy", + "value": "4201" + }, + { + "label": "Hard-Worki", + "value": "3670" + }, + { + "label": "hardsci-fi", + "value": "4402" + }, + { + "label": "Hardworkin", + "value": "4044" + }, + { + "label": "Harem", + "value": "9" + }, + { + "label": "Harem-seek", + "value": "3678" + }, + { + "label": "HarryPotte", + "value": "945" + }, + { + "label": "HarshTrain", + "value": "3679" + }, + { + "label": "HatedProta", + "value": "3800" + }, + { + "label": "Haveasofts", + "value": "4202" + }, + { + "label": "HE", + "value": "2912" + }, + { + "label": "Head", + "value": "4338" + }, + { + "label": "Healers", + "value": "3838" + }, + { + "label": "Healing", + "value": "387" + }, + { + "label": "Heartwarmi", + "value": "4612" + }, + { + "label": "Heaven", + "value": "3958" + }, + { + "label": "HeavenlyTr", + "value": "3802" + }, + { + "label": "Heavensand", + "value": "4431" + }, + { + "label": "Hell", + "value": "3662" + }, + { + "label": "Hero", + "value": "1318" + }, + { + "label": "Heroes", + "value": "64" + }, + { + "label": "Heroesinvi", + "value": "4241" + }, + { + "label": "heroinecut", + "value": "4449" + }, + { + "label": "HiddenAbil", + "value": "3835" + }, + { + "label": "HiddenIden", + "value": "4093" + }, + { + "label": "hiddenmarr", + "value": "4492" + }, + { + "label": "HiddenTrue", + "value": "4657" + }, + { + "label": "HidingTrue", + "value": "3743" + }, + { + "label": "HidingTrue", + "value": "3742" + }, + { + "label": "HidingTrue", + "value": "4691" + }, + { + "label": "Highcold", + "value": "4259" + }, + { + "label": "Highiq", + "value": "182" + }, + { + "label": "Hikusei", + "value": "2869" + }, + { + "label": "Historical", + "value": "4518" + }, + { + "label": "Historical", + "value": "225" + }, + { + "label": "history", + "value": "3319" + }, + { + "label": "hoardsuppl", + "value": "4514" + }, + { + "label": "Hogwarts", + "value": "3930" + }, + { + "label": "Hollywood", + "value": "4002" + }, + { + "label": "holymonk", + "value": "4554" + }, + { + "label": "HonkaiImpa", + "value": "4048" + }, + { + "label": "Horor", + "value": "4757" + }, + { + "label": "horror", + "value": "1022" + }, + { + "label": "Hot-bloode", + "value": "3777" + }, + { + "label": "Hotblood", + "value": "4225" + }, + { + "label": "housegirl", + "value": "4556" + }, + { + "label": "HP", + "value": "2721" + }, + { + "label": "Human-Nonh", + "value": "3759" + }, + { + "label": "HumanExper", + "value": "3663" + }, + { + "label": "HumanExper", + "value": "4061" + }, + { + "label": "HumanoidPr", + "value": "3842" + }, + { + "label": "HumanWeapo", + "value": "4608" + }, + { + "label": "Humbleboy", + "value": "4381" + }, + { + "label": "Hunter", + "value": "1324" + }, + { + "label": "Hunters", + "value": "955" + }, + { + "label": "HunterXHun", + "value": "1161" + }, + { + "label": "HxH", + "value": "3960" + }, + { + "label": "Hypnotism", + "value": "4149" + }, + { + "label": "IdentityCr", + "value": "4597" + }, + { + "label": "ideologica", + "value": "4294" + }, + { + "label": "Immortal", + "value": "170" + }, + { + "label": "ImmortalEm", + "value": "4525" + }, + { + "label": "Immortals", + "value": "388" + }, + { + "label": "imperialco", + "value": "4687" + }, + { + "label": "Imperialex", + "value": "4361" + }, + { + "label": "ImperialHa", + "value": "3764" + }, + { + "label": "Incest", + "value": "229" + }, + { + "label": "Industrial", + "value": "16" + }, + { + "label": "industry", + "value": "3375" + }, + { + "label": "infatuatio", + "value": "3253" + }, + { + "label": "InfiniteFl", + "value": "4135" + }, + { + "label": "Infrastruc", + "value": "2851" + }, + { + "label": "Infrastruc", + "value": "4376" + }, + { + "label": "Inheritanc", + "value": "4634" + }, + { + "label": "inlove", + "value": "4273" + }, + { + "label": "Inscriptio", + "value": "4724" + }, + { + "label": "Insects", + "value": "3924" + }, + { + "label": "Inspiratio", + "value": "2804" + }, + { + "label": "Interdimen", + "value": "3640" + }, + { + "label": "Interestel", + "value": "4667" + }, + { + "label": "Interstell", + "value": "830" + }, + { + "label": "Inuyasha", + "value": "3982" + }, + { + "label": "Investigat", + "value": "3972" + }, + { + "label": "Investigat", + "value": "4652" + }, + { + "label": "Invincible", + "value": "4219" + }, + { + "label": "Invincible", + "value": "563" + }, + { + "label": "IQOnline", + "value": "4234" + }, + { + "label": "Isekai", + "value": "114" + }, + { + "label": "Island", + "value": "3326" + }, + { + "label": "JackieChan", + "value": "4175" + }, + { + "label": "JackofAllT", + "value": "3750" + }, + { + "label": "Japanese", + "value": "2822" + }, + { + "label": "Jealousy", + "value": "4654" + }, + { + "label": "JianBao", + "value": "4422" + }, + { + "label": "Jianghugri", + "value": "4204" + }, + { + "label": "JinYiwei", + "value": "4389" + }, + { + "label": "JOJO", + "value": "2868" + }, + { + "label": "JoJo&03", + "value": "4170" + }, + { + "label": "JojoBizarr", + "value": "3983" + }, + { + "label": "Josei", + "value": "4688" + }, + { + "label": "Journeytot", + "value": "1301" + }, + { + "label": "JujutsuKai", + "value": "3984" + }, + { + "label": "Junjie", + "value": "2849" + }, + { + "label": "kendo", + "value": "3059" + }, + { + "label": "killdecisi", + "value": "4233" + }, + { + "label": "Killer", + "value": "795" + }, + { + "label": "Kindness", + "value": "3264" + }, + { + "label": "KindProtag", + "value": "4085" + }, + { + "label": "Kingdombui", + "value": "12" + }, + { + "label": "Kingdoms", + "value": "541" + }, + { + "label": "KingdomsKn", + "value": "4068" + }, + { + "label": "KingofSold", + "value": "4221" + }, + { + "label": "knight", + "value": "3180" + }, + { + "label": "Knights", + "value": "674" + }, + { + "label": "KnightsLev", + "value": "4703" + }, + { + "label": "Koi", + "value": "3431" + }, + { + "label": "KoreanNove", + "value": "1289" + }, + { + "label": "LackofComm", + "value": "3787" + }, + { + "label": "lady", + "value": "3496" + }, + { + "label": "lastwear", + "value": "4405" + }, + { + "label": "LateRomanc", + "value": "3651" + }, + { + "label": "lawyer", + "value": "4495" + }, + { + "label": "layoutflow", + "value": "4283" + }, + { + "label": "LazyProtag", + "value": "3765" + }, + { + "label": "Leadership", + "value": "3946" + }, + { + "label": "leadthemai", + "value": "4248" + }, + { + "label": "LeagueofLe", + "value": "3885" + }, + { + "label": "Leftgirl", + "value": "4410" + }, + { + "label": "legend", + "value": "2684" + }, + { + "label": "Legends", + "value": "4005" + }, + { + "label": "LevelSyste", + "value": "3680" + }, + { + "label": "Levelup", + "value": "53" + }, + { + "label": "LiaoZhai", + "value": "4286" + }, + { + "label": "Life", + "value": "3457" + }, + { + "label": "lifeanddea", + "value": "4530" + }, + { + "label": "Lightnovel", + "value": "22" + }, + { + "label": "LimitedLif", + "value": "4644" + }, + { + "label": "ListCreati", + "value": "1271" + }, + { + "label": "LitRPG", + "value": "659" + }, + { + "label": "Littlesold", + "value": "4320" + }, + { + "label": "Livebroadc", + "value": "1209" + }, + { + "label": "livestream", + "value": "2763" + }, + { + "label": "Livetext", + "value": "4230" + }, + { + "label": "LivingAlon", + "value": "3865" + }, + { + "label": "Lol", + "value": "3035" + }, + { + "label": "Loli", + "value": "3372" + }, + { + "label": "Lolicon", + "value": "949" + }, + { + "label": "LonerProta", + "value": "3788" + }, + { + "label": "Long", + "value": "2954" + }, + { + "label": "Longevity", + "value": "4327" + }, + { + "label": "LongSepara", + "value": "4184" + }, + { + "label": "lootflow", + "value": "4243" + }, + { + "label": "LordGod", + "value": "4347" + }, + { + "label": "LordoftheM", + "value": "3989" + }, + { + "label": "LostCivili", + "value": "4020" + }, + { + "label": "Lottery", + "value": "983" + }, + { + "label": "love", + "value": "322" + }, + { + "label": "LoveatFirs", + "value": "640" + }, + { + "label": "lovebefore", + "value": "4192" + }, + { + "label": "Lovecomedy", + "value": "4566" + }, + { + "label": "Loveeachot", + "value": "4354" + }, + { + "label": "LoveIntere", + "value": "3862" + }, + { + "label": "LoveRivals", + "value": "4635" + }, + { + "label": "LoversReun", + "value": "4690" + }, + { + "label": "Lovetriang", + "value": "374" + }, + { + "label": "Low-keyPro", + "value": "4015" + }, + { + "label": "LowKeyProt", + "value": "4706" + }, + { + "label": "loyaldog", + "value": "4344" + }, + { + "label": "LoyalProta", + "value": "4027" + }, + { + "label": "LoyalSubor", + "value": "3681" + }, + { + "label": "LoyalSurbo", + "value": "4699" + }, + { + "label": "luckybag", + "value": "4555" + }, + { + "label": "LuckyProta", + "value": "3730" + }, + { + "label": "machine", + "value": "4747" + }, + { + "label": "Mafia", + "value": "240" + }, + { + "label": "Mage", + "value": "3187" + }, + { + "label": "Magic", + "value": "4" + }, + { + "label": "MagicalBat", + "value": "4110" + }, + { + "label": "magicalgir", + "value": "4151" + }, + { + "label": "MagicalSpa", + "value": "3779" + }, + { + "label": "MagicalTec", + "value": "3922" + }, + { + "label": "MagicBeast", + "value": "3721" + }, + { + "label": "MagicForma", + "value": "4582" + }, + { + "label": "magician", + "value": "3505" + }, + { + "label": "magicschoo", + "value": "4464" + }, + { + "label": "magicweapo", + "value": "4502" + }, + { + "label": "Maid", + "value": "4504" + }, + { + "label": "Maids", + "value": "126" + }, + { + "label": "Makecompla", + "value": "4264" + }, + { + "label": "makefine", + "value": "4239" + }, + { + "label": "Makemoney", + "value": "4302" + }, + { + "label": "Malegod", + "value": "4315" + }, + { + "label": "MaleLead", + "value": "4145" + }, + { + "label": "MaleMain-l", + "value": "4013" + }, + { + "label": "malematch", + "value": "4337" + }, + { + "label": "MaleMc", + "value": "4112" + }, + { + "label": "MaleProtag", + "value": "1" + }, + { + "label": "MaleProtag", + "value": "4721" + }, + { + "label": "MaletoFema", + "value": "3871" + }, + { + "label": "MaleYander", + "value": "3851" + }, + { + "label": "Manage", + "value": "2935" + }, + { + "label": "Management", + "value": "4637" + }, + { + "label": "Manipulati", + "value": "3633" + }, + { + "label": "ManlyGayCo", + "value": "3828" + }, + { + "label": "Manvs.Wild", + "value": "4341" + }, + { + "label": "manyfemale", + "value": "4214" + }, + { + "label": "Marriage", + "value": "56" + }, + { + "label": "Marriageof", + "value": "4189" + }, + { + "label": "marrybycha", + "value": "4490" + }, + { + "label": "Martialart", + "value": "720" + }, + { + "label": "Martialart", + "value": "4765" + }, + { + "label": "MartialSpi", + "value": "3722" + }, + { + "label": "MartialSpi", + "value": "4043" + }, + { + "label": "Marvel", + "value": "901" + }, + { + "label": "MarvelUniv", + "value": "3697" + }, + { + "label": "Marysue", + "value": "332" + }, + { + "label": "Masochisti", + "value": "3831" + }, + { + "label": "Master-Dis", + "value": "3760" + }, + { + "label": "Master-Ser", + "value": "3916" + }, + { + "label": "Masterflow", + "value": "4254" + }, + { + "label": "Masturbati", + "value": "3832" + }, + { + "label": "Matriarchy", + "value": "4128" + }, + { + "label": "Mature", + "value": "576" + }, + { + "label": "MatureProt", + "value": "4037" + }, + { + "label": "Mech", + "value": "2732" + }, + { + "label": "Mecha", + "value": "672" + }, + { + "label": "Medical", + "value": "4186" + }, + { + "label": "MedicalKno", + "value": "4120" + }, + { + "label": "Medieval", + "value": "3917" + }, + { + "label": "MengBao", + "value": "4194" + }, + { + "label": "Mensao", + "value": "3233" + }, + { + "label": "Mentor", + "value": "3386" + }, + { + "label": "Mercenarie", + "value": "3839" + }, + { + "label": "Merchants", + "value": "4651" + }, + { + "label": "metaphysic", + "value": "2797" + }, + { + "label": "MiddleAges", + "value": "4568" + }, + { + "label": "Military", + "value": "148" + }, + { + "label": "Militaryco", + "value": "4534" + }, + { + "label": "militaryma", + "value": "4210" + }, + { + "label": "Millionair", + "value": "4683" + }, + { + "label": "Mimicry", + "value": "4136" + }, + { + "label": "MindBreak", + "value": "4717" + }, + { + "label": "MindContro", + "value": "3634" + }, + { + "label": "Mindreadin", + "value": "4351" + }, + { + "label": "MingDynast", + "value": "4326" + }, + { + "label": "Ministryof", + "value": "4113" + }, + { + "label": "miser", + "value": "4559" + }, + { + "label": "Miss", + "value": "4444" + }, + { + "label": "Misunderst", + "value": "65" + }, + { + "label": "Misunderst", + "value": "34" + }, + { + "label": "MMORPG", + "value": "91" + }, + { + "label": "MobileGame", + "value": "4262" + }, + { + "label": "MobProtago", + "value": "4613" + }, + { + "label": "Modern", + "value": "60" + }, + { + "label": "moderncomp", + "value": "4222" + }, + { + "label": "ModernDay", + "value": "3705" + }, + { + "label": "Modernfant", + "value": "482" + }, + { + "label": "ModernKnow", + "value": "3888" + }, + { + "label": "modernmyst", + "value": "4392" + }, + { + "label": "modernroma", + "value": "4437" + }, + { + "label": "ModernWorl", + "value": "3706" + }, + { + "label": "MoneyGrubb", + "value": "4035" + }, + { + "label": "Monk", + "value": "3352" + }, + { + "label": "Monogamy", + "value": "4003" + }, + { + "label": "Monsters", + "value": "379" + }, + { + "label": "MonsterSoc", + "value": "3671" + }, + { + "label": "MonsterTam", + "value": "3635" + }, + { + "label": "Morallessp", + "value": "4147" + }, + { + "label": "mortalflow", + "value": "4500" + }, + { + "label": "Mother-in-", + "value": "2848" + }, + { + "label": "mouthgun", + "value": "4277" + }, + { + "label": "MovieDirec", + "value": "3894" + }, + { + "label": "Movies", + "value": "3822" + }, + { + "label": "Mozun", + "value": "4553" + }, + { + "label": "Mpreg", + "value": "4601" + }, + { + "label": "MultipleBo", + "value": "4062" + }, + { + "label": "Multipleid", + "value": "57" + }, + { + "label": "MultipleMo", + "value": "3996" + }, + { + "label": "MultiplePe", + "value": "3901" + }, + { + "label": "MultiplePO", + "value": "3664" + }, + { + "label": "MultiplePr", + "value": "4007" + }, + { + "label": "MultipleRe", + "value": "3672" + }, + { + "label": "MultipleRe", + "value": "4643" + }, + { + "label": "MultipleTi", + "value": "3980" + }, + { + "label": "MultipleTr", + "value": "3849" + }, + { + "label": "MultipleTr", + "value": "3990" + }, + { + "label": "MultipleWo", + "value": "4137" + }, + { + "label": "Multiverse", + "value": "4064" + }, + { + "label": "Munchkin", + "value": "4565" + }, + { + "label": "Murder", + "value": "3902" + }, + { + "label": "Murders", + "value": "3880" + }, + { + "label": "Music", + "value": "385" + }, + { + "label": "Mutan", + "value": "4694" + }, + { + "label": "MutatedCre", + "value": "4629" + }, + { + "label": "Mutation", + "value": "737" + }, + { + "label": "Mutations", + "value": "3981" + }, + { + "label": "MyHeroAcad", + "value": "1286" + }, + { + "label": "Mysterious", + "value": "3801" + }, + { + "label": "Mysterious", + "value": "3928" + }, + { + "label": "Mysterious", + "value": "4393" + }, + { + "label": "Mystery", + "value": "112" + }, + { + "label": "MysterySol", + "value": "3863" + }, + { + "label": "Myth", + "value": "488" + }, + { + "label": "Mythical", + "value": "4638" + }, + { + "label": "MythicalBe", + "value": "3780" + }, + { + "label": "Mythology", + "value": "3781" + }, + { + "label": "NaiveProta", + "value": "3718" + }, + { + "label": "Nakaji", + "value": "3494" + }, + { + "label": "Narcissist", + "value": "3696" + }, + { + "label": "Naruto", + "value": "653" + }, + { + "label": "NationalGa", + "value": "4454" + }, + { + "label": "Nationalis", + "value": "451" + }, + { + "label": "Navy", + "value": "4150" + }, + { + "label": "nba", + "value": "1342" + }, + { + "label": "Near-Death", + "value": "3843" + }, + { + "label": "Necromance", + "value": "734" + }, + { + "label": "Necromancy", + "value": "1325" + }, + { + "label": "Need", + "value": "4510" + }, + { + "label": "Nerd", + "value": "3895" + }, + { + "label": "Netorare", + "value": "3820" + }, + { + "label": "Netori", + "value": "609" + }, + { + "label": "Netred", + "value": "4439" + }, + { + "label": "Nightmare", + "value": "4598" + }, + { + "label": "Nightmares", + "value": "4670" + }, + { + "label": "Ninjas", + "value": "982" + }, + { + "label": "No-Harem", + "value": "2879" + }, + { + "label": "Noble", + "value": "4700" + }, + { + "label": "Nobles", + "value": "38" + }, + { + "label": "Nocheats", + "value": "804" + }, + { + "label": "NoCP", + "value": "4300" + }, + { + "label": "Nodiscipli", + "value": "4231" + }, + { + "label": "Nogoldenfi", + "value": "4434" + }, + { + "label": "NoHarem", + "value": "4028" + }, + { + "label": "noheroine", + "value": "4242" + }, + { + "label": "Non-humano", + "value": "3782" + }, + { + "label": "Non-humanP", + "value": "4076" + }, + { + "label": "Non-System", + "value": "1262" + }, + { + "label": "Nonhuman", + "value": "415" + }, + { + "label": "Noromance", + "value": "662" + }, + { + "label": "NoSystem", + "value": "4075" + }, + { + "label": "Novel", + "value": "4768" + }, + { + "label": "Nowsay", + "value": "4533" + }, + { + "label": "Npc", + "value": "798" + }, + { + "label": "Nurses", + "value": "4723" + }, + { + "label": "Obsession", + "value": "1311" + }, + { + "label": "ObsessiveL", + "value": "4668" + }, + { + "label": "Office", + "value": "3294" + }, + { + "label": "OfficeRoma", + "value": "4621" + }, + { + "label": "Officialwo", + "value": "4767" + }, + { + "label": "OlderLoveI", + "value": "4588" + }, + { + "label": "OldMovieso", + "value": "4472" + }, + { + "label": "Omegaverse", + "value": "4649" + }, + { + "label": "On-HookSys", + "value": "4697" + }, + { + "label": "OnePiece", + "value": "942" + }, + { + "label": "Onepunch", + "value": "3961" + }, + { + "label": "onlinegame", + "value": "4257" + }, + { + "label": "Onlinegame", + "value": "4252" + }, + { + "label": "Onlinegame", + "value": "4770" + }, + { + "label": "OnlineGame", + "value": "4172" + }, + { + "label": "Onlinegami", + "value": "535" + }, + { + "label": "OnlineRoma", + "value": "3652" + }, + { + "label": "Onocat", + "value": "4506" + }, + { + "label": "Open", + "value": "3165" + }, + { + "label": "openflow", + "value": "4240" + }, + { + "label": "openingflo", + "value": "4271" + }, + { + "label": "Openupwast", + "value": "4386" + }, + { + "label": "OpFemalePr", + "value": "4742" + }, + { + "label": "OPMC", + "value": "3942" + }, + { + "label": "OPProtagon", + "value": "4102" + }, + { + "label": "Orcs", + "value": "4069" + }, + { + "label": "Ordinary", + "value": "4572" + }, + { + "label": "OrganizedC", + "value": "3950" + }, + { + "label": "Orgy", + "value": "4155" + }, + { + "label": "OrientalFa", + "value": "4443" + }, + { + "label": "originalco", + "value": "4366" + }, + { + "label": "Originalfi", + "value": "4482" + }, + { + "label": "Orphan", + "value": "4050" + }, + { + "label": "Orphans", + "value": "3723" + }, + { + "label": "Ory", + "value": "4154" + }, + { + "label": "Otaku", + "value": "553" + }, + { + "label": "OuterSpace", + "value": "3783" + }, + { + "label": "overbearin", + "value": "3273" + }, + { + "label": "Overhead", + "value": "2883" + }, + { + "label": "overpower", + "value": "4759" + }, + { + "label": "Overpowere", + "value": "103" + }, + { + "label": "Overpowere", + "value": "3884" + }, + { + "label": "Overpowere", + "value": "3641" + }, + { + "label": "Paladin", + "value": "4045" + }, + { + "label": "PamperingR", + "value": "4689" + }, + { + "label": "ParallelWo", + "value": "3790" + }, + { + "label": "ParallelWo", + "value": "3864" + }, + { + "label": "Paranoid", + "value": "3025" + }, + { + "label": "ParentComp", + "value": "4636" + }, + { + "label": "PastandPre", + "value": "4364" + }, + { + "label": "PastPlaysa", + "value": "3673" + }, + { + "label": "PastPlaysa", + "value": "4712" + }, + { + "label": "PastTrauma", + "value": "3903" + }, + { + "label": "Perfectwor", + "value": "4190" + }, + { + "label": "personalco", + "value": "4549" + }, + { + "label": "Personalit", + "value": "4658" + }, + { + "label": "PervertedP", + "value": "3769" + }, + { + "label": "pet", + "value": "2827" + }, + { + "label": "petarticle", + "value": "4206" + }, + { + "label": "Pets", + "value": "276" + }, + { + "label": "physicaled", + "value": "4433" + }, + { + "label": "Physician", + "value": "4413" + }, + { + "label": "PillConcoc", + "value": "4698" + }, + { + "label": "PillConcot", + "value": "4753" + }, + { + "label": "Pilots", + "value": "3850" + }, + { + "label": "Pingbuqing", + "value": "2793" + }, + { + "label": "Pirate", + "value": "3056" + }, + { + "label": "Pirates", + "value": "629" + }, + { + "label": "Plane", + "value": "3214" + }, + { + "label": "PlaneWars", + "value": "4728" + }, + { + "label": "Playboymal", + "value": "4675" + }, + { + "label": "Playboys", + "value": "3823" + }, + { + "label": "Player", + "value": "3447" + }, + { + "label": "PlayfulPro", + "value": "3826" + }, + { + "label": "Playpigeat", + "value": "4527" + }, + { + "label": "poisondoct", + "value": "4558" + }, + { + "label": "Poisonoust", + "value": "4412" + }, + { + "label": "Poisons", + "value": "191" + }, + { + "label": "Pokemon", + "value": "713" + }, + { + "label": "Police", + "value": "76" + }, + { + "label": "Policemen", + "value": "3331" + }, + { + "label": "policyflow", + "value": "4232" + }, + { + "label": "PoliteProt", + "value": "4051" + }, + { + "label": "PoliticalI", + "value": "3956" + }, + { + "label": "Politics", + "value": "3948" + }, + { + "label": "Polyandry", + "value": "4631" + }, + { + "label": "Polygamy", + "value": "86" + }, + { + "label": "Pony", + "value": "4564" + }, + { + "label": "Poor", + "value": "4743" + }, + { + "label": "PoorProtag", + "value": "3896" + }, + { + "label": "PoortoRich", + "value": "198" + }, + { + "label": "PopularLov", + "value": "4622" + }, + { + "label": "Popularsci", + "value": "4448" + }, + { + "label": "Portablesp", + "value": "4462" + }, + { + "label": "Positive", + "value": "23" + }, + { + "label": "positiveen", + "value": "4298" + }, + { + "label": "Possession", + "value": "1312" + }, + { + "label": "Possessive", + "value": "169" + }, + { + "label": "Possessive", + "value": "4586" + }, + { + "label": "Post-apoca", + "value": "4627" + }, + { + "label": "PowerCoupl", + "value": "3690" + }, + { + "label": "Powerfulco", + "value": "171" + }, + { + "label": "Powerhouse", + "value": "3544" + }, + { + "label": "PowersTran", + "value": "3973" + }, + { + "label": "PowerStrug", + "value": "3761" + }, + { + "label": "practice", + "value": "3268" + }, + { + "label": "practicefl", + "value": "4253" + }, + { + "label": "PragmaticP", + "value": "4185" + }, + { + "label": "Pregnancy", + "value": "39" + }, + { + "label": "President", + "value": "2932" + }, + { + "label": "Presidentw", + "value": "4473" + }, + { + "label": "Pretendtob", + "value": "4208" + }, + { + "label": "PreviousLi", + "value": "4053" + }, + { + "label": "PreviousLi", + "value": "4685" + }, + { + "label": "Priest", + "value": "4267" + }, + { + "label": "Prince", + "value": "3426" + }, + { + "label": "PrinceofTe", + "value": "1296" + }, + { + "label": "Princess", + "value": "364" + }, + { + "label": "Prison", + "value": "4156" + }, + { + "label": "ProactiveP", + "value": "4708" + }, + { + "label": "profession", + "value": "4281" + }, + { + "label": "Programmer", + "value": "4715" + }, + { + "label": "Prophecies", + "value": "4616" + }, + { + "label": "Pros", + "value": "3422" + }, + { + "label": "Prostitute", + "value": "3890" + }, + { + "label": "Protagonis", + "value": "1268" + }, + { + "label": "Protagonis", + "value": "3954" + }, + { + "label": "Protagonis", + "value": "3789" + }, + { + "label": "Protagonis", + "value": "4607" + }, + { + "label": "protectsho", + "value": "4379" + }, + { + "label": "Proud", + "value": "3423" + }, + { + "label": "Psychic", + "value": "3974" + }, + { + "label": "PsychicPow", + "value": "4725" + }, + { + "label": "Psychologi", + "value": "870" + }, + { + "label": "Psychology", + "value": "4072" + }, + { + "label": "Psychopath", + "value": "3906" + }, + { + "label": "Puppeteers", + "value": "3977" + }, + { + "label": "puppy", + "value": "3490" + }, + { + "label": "PureLove", + "value": "1315" + }, + { + "label": "qidian", + "value": "4570" + }, + { + "label": "qimao", + "value": "4579" + }, + { + "label": "QinHan", + "value": "4385" + }, + { + "label": "Qishen", + "value": "2759" + }, + { + "label": "Queen", + "value": "4562" + }, + { + "label": "Question&a", + "value": "4141" + }, + { + "label": "QuickTrans", + "value": "3875" + }, + { + "label": "R-15", + "value": "3796" + }, + { + "label": "R-18", + "value": "906" + }, + { + "label": "R18", + "value": "856" + }, + { + "label": "RaceChange", + "value": "3827" + }, + { + "label": "Racingcar", + "value": "4360" + }, + { + "label": "Racism", + "value": "442" + }, + { + "label": "Raiders", + "value": "3229" + }, + { + "label": "rainyseaso", + "value": "4211" + }, + { + "label": "RanchFarmi", + "value": "4764" + }, + { + "label": "randomstre", + "value": "4426" + }, + { + "label": "Rape", + "value": "149" + }, + { + "label": "RapeVictim", + "value": "4032" + }, + { + "label": "RapeVictim", + "value": "3857" + }, + { + "label": "Rarebloodl", + "value": "210" + }, + { + "label": "rawstream", + "value": "4390" + }, + { + "label": "readstream", + "value": "4328" + }, + { + "label": "reasoning", + "value": "4575" + }, + { + "label": "Rebellion", + "value": "3774" + }, + { + "label": "Rebirth", + "value": "224" + }, + { + "label": "RebirthedP", + "value": "1264" + }, + { + "label": "rebirthhou", + "value": "4466" + }, + { + "label": "rebirthrev", + "value": "4526" + }, + { + "label": "rebirthwit", + "value": "4532" + }, + { + "label": "Reborn", + "value": "215" + }, + { + "label": "RedHouse", + "value": "4377" + }, + { + "label": "redpacketf", + "value": "4370" + }, + { + "label": "Refiner", + "value": "3439" + }, + { + "label": "Regression", + "value": "1316" + }, + { + "label": "Regret", + "value": "1314" + }, + { + "label": "ReikiRecov", + "value": "4249" + }, + { + "label": "reincarnat", + "value": "3227" + }, + { + "label": "Reincarnat", + "value": "14" + }, + { + "label": "Reincarnat", + "value": "3646" + }, + { + "label": "Reincarnat", + "value": "3988" + }, + { + "label": "Reincarnat", + "value": "3784" + }, + { + "label": "rejoice", + "value": "3215" + }, + { + "label": "Relaxed", + "value": "2817" + }, + { + "label": "Religions", + "value": "4119" + }, + { + "label": "ReligousOr", + "value": "4046" + }, + { + "label": "Resurrecti", + "value": "4047" + }, + { + "label": "Return", + "value": "4567" + }, + { + "label": "Returningf", + "value": "3766" + }, + { + "label": "Returnofth", + "value": "4213" + }, + { + "label": "Reunion", + "value": "2694" + }, + { + "label": "Revenge", + "value": "40" + }, + { + "label": "Reversal", + "value": "4226" + }, + { + "label": "Reverse", + "value": "3168" + }, + { + "label": "ReverseHar", + "value": "4592" + }, + { + "label": "ReverseRap", + "value": "3913" + }, + { + "label": "reversewea", + "value": "4546" + }, + { + "label": "richandbea", + "value": "4357" + }, + { + "label": "Richdaught", + "value": "157" + }, + { + "label": "Richestman", + "value": "4538" + }, + { + "label": "richpeople", + "value": "4382" + }, + { + "label": "RichProtag", + "value": "3897" + }, + { + "label": "RighteousP", + "value": "3665" + }, + { + "label": "RimuruTemp", + "value": "4103" + }, + { + "label": "rob", + "value": "2861" + }, + { + "label": "Role-Playi", + "value": "3933" + }, + { + "label": "Rollover", + "value": "3415" + }, + { + "label": "Romance", + "value": "8" + }, + { + "label": "RomanceFan", + "value": "1319" + }, + { + "label": "RomanticSu", + "value": "3674" + }, + { + "label": "RomanticSu", + "value": "4038" + }, + { + "label": "Royal", + "value": "3351" + }, + { + "label": "RoyalBeast", + "value": "4287" + }, + { + "label": "Royalfamil", + "value": "398" + }, + { + "label": "Royalty", + "value": "41" + }, + { + "label": "Rpe", + "value": "4031" + }, + { + "label": "RuneMaster", + "value": "4523" + }, + { + "label": "rural", + "value": "4519" + }, + { + "label": "RuthlessPr", + "value": "3727" + }, + { + "label": "SadisticCh", + "value": "3907" + }, + { + "label": "SaikiK", + "value": "4140" + }, + { + "label": "SaikiK.", + "value": "4057" + }, + { + "label": "Saint", + "value": "3691" + }, + { + "label": "Saints", + "value": "4097" + }, + { + "label": "SaintSeiya", + "value": "3976" + }, + { + "label": "Saltedfish", + "value": "4316" + }, + { + "label": "Saltyandsw", + "value": "4400" + }, + { + "label": "Salvation", + "value": "1313" + }, + { + "label": "Sanguanzhe", + "value": "2957" + }, + { + "label": "SavingtheW", + "value": "4624" + }, + { + "label": "Scary", + "value": "635" + }, + { + "label": "Schemes", + "value": "4684" + }, + { + "label": "Schemesand", + "value": "3991" + }, + { + "label": "SchemesAnd", + "value": "3666" + }, + { + "label": "Schoolflow", + "value": "4440" + }, + { + "label": "schoolgras", + "value": "4497" + }, + { + "label": "SchoolLife", + "value": "4117" + }, + { + "label": "Sci-Fi", + "value": "83" + }, + { + "label": "Sciencefic", + "value": "4127" + }, + { + "label": "Sciencefic", + "value": "4760" + }, + { + "label": "Scientists", + "value": "3818" + }, + { + "label": "Scifi", + "value": "745" + }, + { + "label": "SCP", + "value": "4026" + }, + { + "label": "Scriptwrit", + "value": "3898" + }, + { + "label": "scumbag", + "value": "3208" + }, + { + "label": "SD", + "value": "2716" + }, + { + "label": "Sea", + "value": "4081" + }, + { + "label": "SealedPowe", + "value": "4618" + }, + { + "label": "SealGod", + "value": "4293" + }, + { + "label": "SecondChan", + "value": "4124" + }, + { + "label": "SecretIden", + "value": "4054" + }, + { + "label": "SecretiveP", + "value": "4679" + }, + { + "label": "SecretOrga", + "value": "4055" + }, + { + "label": "SecretOrga", + "value": "3775" + }, + { + "label": "Secrets", + "value": "3992" + }, + { + "label": "Sectbuildi", + "value": "4758" + }, + { + "label": "SectDevelo", + "value": "3881" + }, + { + "label": "SectMaster", + "value": "3882" + }, + { + "label": "Sects", + "value": "4660" + }, + { + "label": "Securitygu", + "value": "4218" + }, + { + "label": "Seduction", + "value": "4739" + }, + { + "label": "SeeingThin", + "value": "4094" + }, + { + "label": "seeyouagai", + "value": "4397" + }, + { + "label": "Seinen", + "value": "4771" + }, + { + "label": "Self-disci", + "value": "3022" + }, + { + "label": "self-impro", + "value": "3258" + }, + { + "label": "SelfishPro", + "value": "3719" + }, + { + "label": "SelflessPr", + "value": "4609" + }, + { + "label": "SemeProtag", + "value": "3926" + }, + { + "label": "Senior", + "value": "4543" + }, + { + "label": "SentientSk", + "value": "1277" + }, + { + "label": "SerialKill", + "value": "4129" + }, + { + "label": "SerpentKin", + "value": "4418" + }, + { + "label": "Servants", + "value": "3824" + }, + { + "label": "SexSlaves", + "value": "3929" + }, + { + "label": "SexualAbus", + "value": "3859" + }, + { + "label": "SexualCult", + "value": "4677" + }, + { + "label": "ShamelessP", + "value": "3811" + }, + { + "label": "Shapeshift", + "value": "645" + }, + { + "label": "Sharp-tong", + "value": "4039" + }, + { + "label": "Shenhao", + "value": "3062" + }, + { + "label": "Shijia", + "value": "3269" + }, + { + "label": "shortforpa", + "value": "4372" + }, + { + "label": "Shotacon", + "value": "4101" + }, + { + "label": "Shoujo-AiS", + "value": "3819" + }, + { + "label": "Shounen", + "value": "4118" + }, + { + "label": "Shounen-Ai", + "value": "3927" + }, + { + "label": "Showbiz", + "value": "68" + }, + { + "label": "showdownfl", + "value": "4388" + }, + { + "label": "Shuangjie", + "value": "3231" + }, + { + "label": "Shuangwen", + "value": "2705" + }, + { + "label": "Shurachang", + "value": "2970" + }, + { + "label": "Shushan", + "value": "4279" + }, + { + "label": "ShyCharact", + "value": "3925" + }, + { + "label": "Sibling&am", + "value": "4714" + }, + { + "label": "Siblings", + "value": "4659" + }, + { + "label": "SiblingsNo", + "value": "4160" + }, + { + "label": "sick", + "value": "3026" + }, + { + "label": "SicklyChar", + "value": "4650" + }, + { + "label": "Sign-in", + "value": "4191" + }, + { + "label": "Sign-InChe", + "value": "1266" + }, + { + "label": "Signin", + "value": "833" + }, + { + "label": "SigninChec", + "value": "1292" + }, + { + "label": "sillywhite", + "value": "4427" + }, + { + "label": "Simulation", + "value": "4710" + }, + { + "label": "Simulator", + "value": "4168" + }, + { + "label": "Singers", + "value": "4735" + }, + { + "label": "SingleHero", + "value": "4086" + }, + { + "label": "SinglePare", + "value": "4604" + }, + { + "label": "Siscon", + "value": "4704" + }, + { + "label": "Sisterandb", + "value": "4484" + }, + { + "label": "SisterComp", + "value": "4161" + }, + { + "label": "Sisters", + "value": "3914" + }, + { + "label": "SisterYu", + "value": "4429" + }, + { + "label": "SkillAssim", + "value": "3805" + }, + { + "label": "SkillBooks", + "value": "4596" + }, + { + "label": "SkillCreat", + "value": "3806" + }, + { + "label": "skycity", + "value": "4748" + }, + { + "label": "slackerstu", + "value": "4488" + }, + { + "label": "Slap", + "value": "2728" + }, + { + "label": "Slave", + "value": "4678" + }, + { + "label": "SlaveHarem", + "value": "4641" + }, + { + "label": "SlaveProta", + "value": "3682" + }, + { + "label": "Slaves", + "value": "4602" + }, + { + "label": "SlaveSyste", + "value": "3858" + }, + { + "label": "Sliceoflif", + "value": "248" + }, + { + "label": "SlowGrowth", + "value": "3715" + }, + { + "label": "SlowRomanc", + "value": "3762" + }, + { + "label": "Smalldogs", + "value": "4561" + }, + { + "label": "SmartCoupl", + "value": "3945" + }, + { + "label": "SmartMC", + "value": "3951" + }, + { + "label": "smartprota", + "value": "4674" + }, + { + "label": "Smut", + "value": "858" + }, + { + "label": "Soccer", + "value": "4617" + }, + { + "label": "softricefl", + "value": "4295" + }, + { + "label": "Soldiers", + "value": "4625" + }, + { + "label": "Solitarype", + "value": "4342" + }, + { + "label": "son-in-law", + "value": "3342" + }, + { + "label": "SoulPower", + "value": "3908" + }, + { + "label": "Souls", + "value": "3909" + }, + { + "label": "Space", + "value": "4335" + }, + { + "label": "Space-time", + "value": "4321" + }, + { + "label": "Spaceopera", + "value": "4576" + }, + { + "label": "Spaceship", + "value": "3785" + }, + { + "label": "SpatialMan", + "value": "3642" + }, + { + "label": "SpecialAbi", + "value": "3812" + }, + { + "label": "Specialfor", + "value": "4220" + }, + { + "label": "Spirits", + "value": "4004" + }, + { + "label": "Spoil", + "value": "3464" + }, + { + "label": "spoiler", + "value": "3324" + }, + { + "label": "Spoiling", + "value": "160" + }, + { + "label": "spookygame", + "value": "4508" + }, + { + "label": "Sports", + "value": "685" + }, + { + "label": "Sportscomp", + "value": "4258" + }, + { + "label": "Stalkers", + "value": "4665" + }, + { + "label": "Stand", + "value": "4171" + }, + { + "label": "Stand-alon", + "value": "3551" + }, + { + "label": "Start", + "value": "3065" + }, + { + "label": "Startabusi", + "value": "4365" + }, + { + "label": "Steampunk", + "value": "2972" + }, + { + "label": "StoreOwner", + "value": "4011" + }, + { + "label": "StraightAs", + "value": "4216" + }, + { + "label": "straightma", + "value": "4274" + }, + { + "label": "StraightSe", + "value": "4729" + }, + { + "label": "stranger", + "value": "3224" + }, + { + "label": "StrategicB", + "value": "3636" + }, + { + "label": "Strategist", + "value": "4628" + }, + { + "label": "Strategy", + "value": "3251" + }, + { + "label": "streamofhe", + "value": "4280" + }, + { + "label": "Streamwith", + "value": "4291" + }, + { + "label": "Strength-b", + "value": "3692" + }, + { + "label": "strong", + "value": "2744" + }, + { + "label": "Strongback", + "value": "855" + }, + { + "label": "strongfema", + "value": "4215" + }, + { + "label": "Strongfema", + "value": "54" + }, + { + "label": "Strongfrom", + "value": "3821" + }, + { + "label": "StrongLove", + "value": "4122" + }, + { + "label": "Strongmena", + "value": "4489" + }, + { + "label": "StrongProt", + "value": "1147" + }, + { + "label": "strongstre", + "value": "4323" + }, + { + "label": "StrongSubo", + "value": "3891" + }, + { + "label": "StrongtoSt", + "value": "108" + }, + { + "label": "strongwoma", + "value": "4740" + }, + { + "label": "struggle", + "value": "3345" + }, + { + "label": "Stubborn", + "value": "4736" + }, + { + "label": "Student", + "value": "2953" + }, + { + "label": "Student-Te", + "value": "4114" + }, + { + "label": "subject", + "value": "2889" + }, + { + "label": "substitute", + "value": "3500" + }, + { + "label": "Succubus", + "value": "4642" + }, + { + "label": "SuddenStre", + "value": "3883" + }, + { + "label": "SuddenWeal", + "value": "4040" + }, + { + "label": "SuiandTang", + "value": "4359" + }, + { + "label": "suicidalpr", + "value": "4166" + }, + { + "label": "Suicides", + "value": "4671" + }, + { + "label": "Summoner", + "value": "4339" + }, + { + "label": "Summoningf", + "value": "4247" + }, + { + "label": "SummoningM", + "value": "3817" + }, + { + "label": "Summons", + "value": "420" + }, + { + "label": "SuperA", + "value": "4346" + }, + { + "label": "Supernatur", + "value": "318" + }, + { + "label": "Superpower", + "value": "26" + }, + { + "label": "SuperPower", + "value": "3899" + }, + { + "label": "SuperSemin", + "value": "3892" + }, + { + "label": "SuperTechn", + "value": "1275" + }, + { + "label": "supplier", + "value": "3191" + }, + { + "label": "SupremeStr", + "value": "4380" + }, + { + "label": "Survival", + "value": "52" + }, + { + "label": "Survivalch", + "value": "4391" + }, + { + "label": "SurvivalDo", + "value": "4515" + }, + { + "label": "SurvivalGa", + "value": "516" + }, + { + "label": "Survive", + "value": "3276" + }, + { + "label": "Suspense", + "value": "3366" + }, + { + "label": "suspensebr", + "value": "4453" + }, + { + "label": "Suspensefl", + "value": "4384" + }, + { + "label": "Suspensefu", + "value": "4236" + }, + { + "label": "Sweet", + "value": "421" + }, + { + "label": "Sweetlove", + "value": "66" + }, + { + "label": "sweetpet", + "value": "4196" + }, + { + "label": "sweetpetar", + "value": "4529" + }, + { + "label": "sweettext", + "value": "4458" + }, + { + "label": "SwordAndMa", + "value": "508" + }, + { + "label": "swordrepai", + "value": "4352" + }, + { + "label": "SwordWield", + "value": "3724" + }, + { + "label": "System", + "value": "24" + }, + { + "label": "SystemAdmi", + "value": "3668" + }, + { + "label": "systemflow", + "value": "4223" + }, + { + "label": "Takeaway", + "value": "3334" + }, + { + "label": "takehome", + "value": "4311" + }, + { + "label": "Talent", + "value": "4737" + }, + { + "label": "Talentedgi", + "value": "4428" + }, + { + "label": "Talents", + "value": "1265" + }, + { + "label": "TangDynast", + "value": "4356" + }, + { + "label": "Taoistprie", + "value": "4350" + }, + { + "label": "teacher", + "value": "3213" + }, + { + "label": "Teachers", + "value": "3978" + }, + { + "label": "team", + "value": "4036" + }, + { + "label": "Teamwork", + "value": "4599" + }, + { + "label": "Technologi", + "value": "3771" + }, + { + "label": "technology", + "value": "4250" + }, + { + "label": "technology", + "value": "4334" + }, + { + "label": "Technology", + "value": "3211" + }, + { + "label": "Technology", + "value": "3970" + }, + { + "label": "Technology", + "value": "4363" + }, + { + "label": "Teen", + "value": "857" + }, + { + "label": "Tenderness", + "value": "2791" + }, + { + "label": "tennis", + "value": "2995" + }, + { + "label": "Tensura", + "value": "4104" + }, + { + "label": "Terracenea", + "value": "4435" + }, + { + "label": "TerritoryC", + "value": "1276" + }, + { + "label": "TheFourthC", + "value": "4244" + }, + { + "label": "theInterne", + "value": "4503" + }, + { + "label": "thescienti", + "value": "4324" + }, + { + "label": "Thestronga", + "value": "28" + }, + { + "label": "Thief", + "value": "4317" + }, + { + "label": "ThreeKingd", + "value": "4292" + }, + { + "label": "Threerelig", + "value": "4469" + }, + { + "label": "Threesome", + "value": "3807" + }, + { + "label": "Thriller", + "value": "4666" + }, + { + "label": "thrillersu", + "value": "4468" + }, + { + "label": "thunderbol", + "value": "2755" + }, + { + "label": "Tianshi", + "value": "4479" + }, + { + "label": "TianTingwe", + "value": "4288" + }, + { + "label": "timegate", + "value": "4272" + }, + { + "label": "TimeLoop", + "value": "4645" + }, + { + "label": "TimeManipu", + "value": "4615" + }, + { + "label": "TimeSkip", + "value": "3694" + }, + { + "label": "TimeTravel", + "value": "3637" + }, + { + "label": "Titans", + "value": "3776" + }, + { + "label": "TokyoGhoul", + "value": "4148" + }, + { + "label": "Tomb", + "value": "2719" + }, + { + "label": "TomboyishF", + "value": "4603" + }, + { + "label": "Topstream", + "value": "4420" + }, + { + "label": "Torture", + "value": "4663" + }, + { + "label": "Toughgirl", + "value": "4415" + }, + { + "label": "TowerDefen", + "value": "3998" + }, + { + "label": "trackandfi", + "value": "4330" + }, + { + "label": "TradeWar", + "value": "4275" + }, + { + "label": "Traditiona", + "value": "4451" + }, + { + "label": "Tragedy", + "value": "507" + }, + { + "label": "TragicPast", + "value": "3866" + }, + { + "label": "Transform", + "value": "4552" + }, + { + "label": "Transforma", + "value": "4138" + }, + { + "label": "Transmigat", + "value": "4163" + }, + { + "label": "Transmigra", + "value": "15" + }, + { + "label": "Transmigra", + "value": "4014" + }, + { + "label": "Transmigra", + "value": "3979" + }, + { + "label": "Transmigra", + "value": "4661" + }, + { + "label": "Transplant", + "value": "4750" + }, + { + "label": "Transporte", + "value": "3860" + }, + { + "label": "Transporte", + "value": "3840" + }, + { + "label": "Transporte", + "value": "4187" + }, + { + "label": "Trap", + "value": "4600" + }, + { + "label": "travel", + "value": "4749" + }, + { + "label": "Traveling", + "value": "4082" + }, + { + "label": "Travelthro", + "value": "4551" + }, + { + "label": "TreasureCh", + "value": "4371" + }, + { + "label": "TribalSoci", + "value": "4707" + }, + { + "label": "trickery", + "value": "3292" + }, + { + "label": "Troubledti", + "value": "4318" + }, + { + "label": "Trueandfal", + "value": "4507" + }, + { + "label": "TS", + "value": "4569" + }, + { + "label": "Tsundere", + "value": "139" + }, + { + "label": "Tutor", + "value": "2720" + }, + { + "label": "Twins", + "value": "4718" + }, + { + "label": "TwistedPer", + "value": "4672" + }, + { + "label": "Two-dimens", + "value": "3054" + }, + { + "label": "two-waycru", + "value": "4261" + }, + { + "label": "Type-moon", + "value": "4105" + }, + { + "label": "Ugly", + "value": "4353" + }, + { + "label": "UglyProtag", + "value": "3740" + }, + { + "label": "UglytoBeau", + "value": "4632" + }, + { + "label": "Ultrafan", + "value": "4461" + }, + { + "label": "Uncle", + "value": "3586" + }, + { + "label": "UncleJiu", + "value": "4513" + }, + { + "label": "Unconditio", + "value": "4610" + }, + { + "label": "Undead", + "value": "776" + }, + { + "label": "Undercover", + "value": "3226" + }, + { + "label": "Underestim", + "value": "4619" + }, + { + "label": "UniqueCult", + "value": "4583" + }, + { + "label": "Unknown", + "value": "1789" + }, + { + "label": "UnlimitedF", + "value": "4751" + }, + { + "label": "Unprincipl", + "value": "751" + }, + { + "label": "Unreliable", + "value": "4070" + }, + { + "label": "upgrade", + "value": "3170" + }, + { + "label": "Upgradeand", + "value": "4722" + }, + { + "label": "upgradeflo", + "value": "4282" + }, + { + "label": "Urban", + "value": "104" + }, + { + "label": "UrbanAbili", + "value": "4442" + }, + { + "label": "Urbanbrain", + "value": "4197" + }, + { + "label": "UrbanCulti", + "value": "4199" + }, + { + "label": "Urbanfanta", + "value": "4478" + }, + { + "label": "urbanfarmi", + "value": "4446" + }, + { + "label": "urbanimmor", + "value": "4306" + }, + { + "label": "Urbanlife", + "value": "4207" + }, + { + "label": "urbanroman", + "value": "4539" + }, + { + "label": "UrbanRoman", + "value": "4769" + }, + { + "label": "urbanworkp", + "value": "4531" + }, + { + "label": "urbanyouth", + "value": "4520" + }, + { + "label": "Vampire", + "value": "115" + }, + { + "label": "Vampires", + "value": "5" + }, + { + "label": "Variety", + "value": "3430" + }, + { + "label": "vest", + "value": "2867" + }, + { + "label": "Videogame", + "value": "562" + }, + { + "label": "videostrea", + "value": "4331" + }, + { + "label": "Villain", + "value": "207" + }, + { + "label": "Villainpro", + "value": "649" + }, + { + "label": "VinegarKin", + "value": "4308" + }, + { + "label": "VirtualRea", + "value": "79" + }, + { + "label": "Voice", + "value": "3435" + }, + { + "label": "War", + "value": "601" + }, + { + "label": "Warcraft", + "value": "4481" + }, + { + "label": "Warm", + "value": "3176" + }, + { + "label": "Warmman", + "value": "4423" + }, + { + "label": "Warmpettex", + "value": "4475" + }, + { + "label": "warrior", + "value": "3247" + }, + { + "label": "Wars", + "value": "19" + }, + { + "label": "Warship", + "value": "4083" + }, + { + "label": "WarsWeakto", + "value": "3868" + }, + { + "label": "Wasteland", + "value": "4656" + }, + { + "label": "Wastewoodf", + "value": "4383" + }, + { + "label": "WaterMargi", + "value": "4319" + }, + { + "label": "WeakProtag", + "value": "3716" + }, + { + "label": "WeaktoStro", + "value": "2" + }, + { + "label": "Wealthy", + "value": "2931" + }, + { + "label": "WealthyCha", + "value": "3867" + }, + { + "label": "wealthyfam", + "value": "4203" + }, + { + "label": "wealthypre", + "value": "4200" + }, + { + "label": "wearback", + "value": "4485" + }, + { + "label": "wearbook", + "value": "4303" + }, + { + "label": "WebNovel", + "value": "4577" + }, + { + "label": "Werebeasts", + "value": "4095" + }, + { + "label": "Werewolf", + "value": "164" + }, + { + "label": "Werewolves", + "value": "3993" + }, + { + "label": "Westernfan", + "value": "4355" + }, + { + "label": "WesternRom", + "value": "4471" + }, + { + "label": "WestwardJo", + "value": "4296" + }, + { + "label": "Whimsical", + "value": "2706" + }, + { + "label": "White", + "value": "3296" + }, + { + "label": "whitecolla", + "value": "4457" + }, + { + "label": "whitelotus", + "value": "4309" + }, + { + "label": "Whitemoonl", + "value": "4409" + }, + { + "label": "Wisdom", + "value": "2922" + }, + { + "label": "Witches", + "value": "3845" + }, + { + "label": "Wizard", + "value": "3931" + }, + { + "label": "Wizards", + "value": "136" + }, + { + "label": "wizardstre", + "value": "4266" + }, + { + "label": "Workplace", + "value": "2769" + }, + { + "label": "workplaceb", + "value": "4474" + }, + { + "label": "WorldHoppi", + "value": "426" + }, + { + "label": "WorldofWar", + "value": "4139" + }, + { + "label": "WorldTrave", + "value": "3643" + }, + { + "label": "WOW", + "value": "4176" + }, + { + "label": "Writer", + "value": "3328" + }, + { + "label": "Writers", + "value": "3854" + }, + { + "label": "Wuxia", + "value": "4633" + }, + { + "label": "WW2", + "value": "4726" + }, + { + "label": "Xianjun", + "value": "4557" + }, + { + "label": "Xianxia", + "value": "506" + }, + { + "label": "Xianzun", + "value": "3478" + }, + { + "label": "Xiaosan", + "value": "2857" + }, + { + "label": "Xijing", + "value": "3234" + }, + { + "label": "Xiuwaihuih", + "value": "4411" + }, + { + "label": "Xiuxian", + "value": "3271" + }, + { + "label": "Xuanhuan", + "value": "882" + }, + { + "label": "Yancontrol", + "value": "4235" + }, + { + "label": "Yandere", + "value": "7" + }, + { + "label": "Yaoi", + "value": "247" + }, + { + "label": "YoungerBro", + "value": "3944" + }, + { + "label": "YoungerSis", + "value": "3861" + }, + { + "label": "Youth", + "value": "4762" + }, + { + "label": "Youthcampu", + "value": "4456" + }, + { + "label": "Yugioh", + "value": "4164" + }, + { + "label": "Yuri", + "value": "560" + }, + { + "label": "Zergs", + "value": "4669" + }, + { + "label": "Zhenguan", + "value": "3445" + }, + { + "label": "Zombie", + "value": "3206" + }, + { + "label": "Zombies", + "value": "3693" + }, + { + "label": "Zongmen", + "value": "3402" + }, + { + "label": "女神", + "value": "2818" + }, + { + "label": "妖精", + "value": "3436" + }, + { + "label": "婚姻", + "value": "4535" + }, + { + "label": "宋朝", + "value": "3454" + }, + { + "label": "家族", + "value": "3144" + }, + { + "label": "恐怖", + "value": "2757" + }, + { + "label": "房地产", + "value": "4545" + }, + { + "label": "教授", + "value": "4487" + }, + { + "label": "日常", + "value": "4333" + }, + { + "label": "氪金", + "value": "4284" + }, + { + "label": "王者荣耀", + "value": "4256" + }, + { + "label": "直播", + "value": "3064" + }, + { + "label": "神话", + "value": "3270" + }, + { + "label": "空间", + "value": "2901" + }, + { + "label": "金融", + "value": "3434" + }, + { + "label": "非洲", + "value": "4544" + } + ], + "value": "", + "type": "Picker" + } + } } ] diff --git a/scripts/multisrc/readwn/template.ts b/scripts/multisrc/readwn/template.ts index 383c2e0..fc0f3da 100644 --- a/scripts/multisrc/readwn/template.ts +++ b/scripts/multisrc/readwn/template.ts @@ -3,8 +3,7 @@ import { Filters, FilterTypes } from "@libs/filterInputs"; import { Plugin } from "@typings/plugin"; import { NovelStatus } from "@libs/novelStatus"; import { load as parseHTML } from "cheerio"; -import { parseMadaraDate } from "@libs/parseMadaraDate"; -// import { defaultCover } from "@libs/defaultCover"; +import dayjs from "dayjs"; export interface ReadwnMetadata { id: string; @@ -23,9 +22,8 @@ class ReadwnPlugin implements Plugin.PluginBase { constructor(metadata: ReadwnMetadata) { this.id = metadata.id; - this.name = metadata.sourceName + "[readwn]"; - const iconFileName = metadata.sourceName.replace(/\s+/g, "").toLowerCase(); - this.icon = `multisrc/readwn/icons/${iconFileName}.png`; + this.name = metadata.sourceName; + this.icon = `multisrc/readwn/icons/${metadata.id}.png`; this.site = metadata.sourceSite; this.version = "1.0.0"; this.filters = metadata.filters; @@ -70,7 +68,8 @@ class ReadwnPlugin implements Plugin.PluginBase { novel.name = loadedCheerio("h1.novel-title").text(); novel.author = loadedCheerio("span[itemprop=author]").text(); - novel.cover = this.site + loadedCheerio("figure.cover > img").attr("data-src"); + novel.cover = + this.site + loadedCheerio("figure.cover > img").attr("data-src"); novel.summary = loadedCheerio(".summary") .text() @@ -84,7 +83,10 @@ class ReadwnPlugin implements Plugin.PluginBase { loadedCheerio("div.header-stats > span").each(function () { if (loadedCheerio(this).find("small").text() === "Status") { - novel.status = loadedCheerio(this).find("strong").text(); + novel.status = + loadedCheerio(this).find("strong").text() === "Ongoing" + ? NovelStatus.Ongoing + : NovelStatus.Completed; } }); @@ -97,17 +99,48 @@ class ReadwnPlugin implements Plugin.PluginBase { ); const chapters: Plugin.ChapterItem[] = loadedCheerio(".chapter-list li") - .map((index, element) => { + .map((chapterIndex, element) => { const name = loadedCheerio(element).find("a .chapter-title").text().trim(); const url = loadedCheerio(element).find("a").attr("href")?.trim(); - const releaseTime = loadedCheerio(element).find("a .chapter-update").text().trim(); - if (!name || !url) return null; + let releaseTime = loadedCheerio(element).find("a .chapter-update").text().trim(); + if (releaseTime?.includes?.("ago")) { + const timeAgo = releaseTime.match(/\d+/)?.[0] || "0"; + const timeAgoInt = parseInt(timeAgo, 10); + + if (timeAgoInt) { + const dayJSDate = dayjs(); // today + if ( + releaseTime.includes("hours ago") || + releaseTime.includes("hour ago") + ) { + dayJSDate.subtract(timeAgoInt, "hours"); // go back N hours + } + + if ( + releaseTime.includes("days ago") || + releaseTime.includes("day ago") + ) { + dayJSDate.subtract(timeAgoInt, "days"); // go back N days + } + + if ( + releaseTime.includes("months ago") || + releaseTime.includes("month ago") + ) { + dayJSDate.subtract(timeAgoInt, "months"); // go back N months + } + + releaseTime = dayJSDate.format("LL"); + } + } + return { name, - releaseTime: parseMadaraDate(releaseTime), url: this.site + url, + releaseTime: releaseTime, + chapterNumber: chapterIndex + 1, }; }) .get() @@ -122,8 +155,9 @@ class ReadwnPlugin implements Plugin.PluginBase { for (let i = (lastChapterNo || chapters.length) + 1; i <= latestChapterNo; i++) { chapters.push({ name: "Chapter " + i, - releaseTime: null, url: novelUrl.replace(".html", "_" + i + ".html"), + releaseTime: null, + chapterNumber: i, }); } } @@ -140,22 +174,17 @@ class ReadwnPlugin implements Plugin.PluginBase { return chapterText; } - async searchNovels(keyboard: string): Promise { + async searchNovels(searchTerm: string): Promise { const result = await fetchApi(this.site + "/e/search/index.php", { headers: { "Content-Type": "application/x-www-form-urlencoded", Referer: this.site + "/search.html", Origin: this.site, - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", }, method: "POST", - body: JSON.stringify({ - show: "title", - tempid: 1, - tbname: "news", - keyboard, - }), + body: + "show=title&tempid=1&tbname=news&keyboard=" + + encodeURIComponent(searchTerm), }).then((res) => res.text()); const loadedCheerio = parseHTML(result); diff --git a/scripts/multisrc/rulate/settings.json b/scripts/multisrc/rulate/settings.json index 2b3502b..731f5c8 100644 --- a/scripts/multisrc/rulate/settings.json +++ b/scripts/multisrc/rulate/settings.json @@ -1552,7 +1552,7 @@ ], "type": "Picker" }, - "trash": { + "extra": { "label": "Другое:", "value": [], "options": [ @@ -1612,7 +1612,7 @@ }, "adult": { "label": "Возрастные ограничения:", - "value": "0", + "value": "1", "options": [ { "label": "Все", diff --git a/scripts/multisrc/rulate/sources.json b/scripts/multisrc/rulate/sources.json index 382df23..7501aa6 100644 --- a/scripts/multisrc/rulate/sources.json +++ b/scripts/multisrc/rulate/sources.json @@ -1,6 +1,6 @@ [ { - "id": "tl.rulate", + "id": "rulate", "sourceSite": "https://tl.rulate.ru", "sourceName": "Rulate", "filters": { diff --git a/scripts/multisrc/rulate/template.ts b/scripts/multisrc/rulate/template.ts index 7c37a43..923e45c 100644 --- a/scripts/multisrc/rulate/template.ts +++ b/scripts/multisrc/rulate/template.ts @@ -22,9 +22,8 @@ class RulatePlugin implements Plugin.PluginBase { constructor(metadata: RulateMetadata) { this.id = metadata.id; - this.name = metadata.sourceName + "[rulate]"; - const iconFileName = metadata.sourceName.replace(/\s+/g, "").toLowerCase(); - this.icon = `multisrc/rulate/icons/${iconFileName}.png`; + this.name = metadata.sourceName; + this.icon = `multisrc/rulate/icons/${metadata.id}.png`; this.site = metadata.sourceSite; this.version = "1.0.0"; this.filters = metadata.filters; @@ -35,8 +34,7 @@ class RulatePlugin implements Plugin.PluginBase { { filters, showLatestNovels }: Plugin.PopularNovelsOptions, ): Promise { const novels: Plugin.NovelItem[] = []; - const baseUrl = this.site; - let url = baseUrl + "/search?t="; + let url = this.site + "/search?t="; url += "&cat=" + (filters?.cat?.value || "0"); url += "&s_lang=" + (filters?.s_lang?.value || "0"); url += "&t_lang=" + (filters?.t_lang?.value || "0"); @@ -45,39 +43,13 @@ class RulatePlugin implements Plugin.PluginBase { url += "&atmosphere=" + (filters?.atmosphere?.value || "0"); url += "&adult=" + (filters?.adult?.value || "0"); - if (filters?.genres?.value instanceof Array) { - url += filters.genres.value.map((i) => "&genres[]=" + i).join(""); - } - - //if (filters?.genres?.value?.exclude instanceof Array) { - // url += filters.genres.value.exclude - // ?.map((i) => "&genres_ex[]=" + i) - // .join(""); - //} - - if (filters?.tags?.value instanceof Array) { - url += filters.tags.value.map((i) => "&tags[]=" + i).join(""); - } - - //if (filters?.tags?.value?.exclude instanceof Array) { - // url += filters.tags.value.exclude - // ?.map((i) => "&tags_ex[]=" + i) - // .join(""); - //} - - if (filters?.fandoms?.value instanceof Array) { - url += filters.fandoms.value.map((i) => "&fandoms[]=" + i).join(""); - } - - // if (filters?.fandoms?.value?.exclude instanceof Array) { - // url += filters.fandoms.value.exclude - // .map((i) => "&fandoms_ex[]=" + i) - // .join(""); - // } - - if (filters?.trash?.value instanceof Array) { - url += filters.trash.value.map((i) => "&" + i + "=1").join(""); - } + Object.entries(filters || {}).forEach(([type, { value }]) => { + if (value instanceof Array && value.length) { + url += "&" + value + .map((val) => (type == "extra" ? val + "=1" : type + "[]=" + val)) + .join("&"); + } + }); url += "&Book_page=" + pageNo; @@ -86,21 +58,20 @@ class RulatePlugin implements Plugin.PluginBase { loadedCheerio( 'ul[class="search-results"] > li:not([class="ad_type_catalog"])', - ).each(function () { - loadedCheerio(this).find("p > a").text(); - const name = loadedCheerio(this).find("p > a").text(); - const cover = loadedCheerio(this).find("img").attr("src"); - const url = loadedCheerio(this).find("p > a").attr("href"); + ).each((index, element) => { + loadedCheerio(element).find("p > a").text(); + const name = loadedCheerio(element).find("p > a").text(); + const cover = loadedCheerio(element).find("img").attr("src"); + const url = loadedCheerio(element).find("p > a").attr("href"); if (!name || !url) return; - novels.push({ name, cover: baseUrl + cover, url: baseUrl + url }); + novels.push({ name, cover: this.site + cover, url: this.site + url }); }); return novels; } async parseNovelAndChapters(novelUrl: string): Promise { - const baseUrl = this.site; const novel: Plugin.SourceNovel = { url: novelUrl, }; @@ -129,7 +100,7 @@ class RulatePlugin implements Plugin.PluginBase { novel.name = novel.name.split("[")[0].trim(); } novel.cover = - baseUrl + loadedCheerio('div[class="images"] > div img').attr("src"); + this.site + loadedCheerio('div[class="images"] > div img').attr("src"); novel.summary = loadedCheerio("#Info > div:nth-child(3), .book-description").text().trim(); novel.author = loadedCheerio( @@ -172,27 +143,17 @@ class RulatePlugin implements Plugin.PluginBase { } const chapters: Plugin.ChapterItem[] = []; - loadedCheerio("table > tbody > tr.chapter_row").each(function () { - const chapterName = loadedCheerio(this) - .find('td[class="t"] > a') - .text() - .trim(); - const releaseDate = loadedCheerio(this) - .find("td > span") - .attr("title") - ?.trim(); - const chapterUrl = loadedCheerio(this) - .find('td[class="t"] > a') - .attr("href"); + loadedCheerio("table > tbody > tr.chapter_row").each((chapterIndex, element) => { + const chapterName = loadedCheerio(element).find('td[class="t"] > a').text().trim(); + const releaseDate = loadedCheerio(element).find("td > span").attr("title")?.trim(); + const chapterUrl = loadedCheerio(element).find('td[class="t"] > a').attr("href"); - if ( - !loadedCheerio(this).find('td > span[class="disabled"]').length && - releaseDate - ) { + if (!loadedCheerio(element).find('td > span[class="disabled"]').length && releaseDate) { chapters.push({ name: chapterName, + url: this.site + chapterUrl, releaseTime: releaseDate, - url: baseUrl + chapterUrl, + chapterNumber: chapterIndex + 1, }); } }); @@ -202,7 +163,6 @@ class RulatePlugin implements Plugin.PluginBase { } async parseChapter(chapterUrl: string): Promise { - const baseUrl = this.site; let result = await fetchApi(chapterUrl); if (result.url.includes("mature?path=")) { const formData = new FormData(); @@ -218,10 +178,10 @@ class RulatePlugin implements Plugin.PluginBase { const body = await result.text(); const loadedCheerio = parseHTML(body); - loadedCheerio(".content-text img").each(function () { - if (!loadedCheerio(this).attr("src")?.startsWith("http")) { - const src = loadedCheerio(this).attr("src"); - loadedCheerio(this).attr("src", baseUrl + src); + loadedCheerio(".content-text img").each((index, element) => { + if (!loadedCheerio(element).attr("src")?.startsWith("http")) { + const src = loadedCheerio(element).attr("src"); + loadedCheerio(element).attr("src", this.site + src); } }); diff --git a/scripts/multisrc/wpmangastream/template.ts b/scripts/multisrc/wpmangastream/template.ts index 6272abe..ea4a02d 100644 --- a/scripts/multisrc/wpmangastream/template.ts +++ b/scripts/multisrc/wpmangastream/template.ts @@ -25,7 +25,7 @@ class WPmangaStreamPlugin implements Plugin.PluginBase { constructor(metadata: WPmangaStreamMetadata) { this.id = metadata.id; - this.name = metadata.sourceName + "[wpmangastream]"; + this.name = metadata.sourceName; this.icon = `multisrc/wpmangastream/icons/${metadata.id}.png`; this.site = metadata.sourceSite; this.version = "1.0.0"; @@ -93,13 +93,17 @@ class WPmangaStreamPlugin implements Plugin.PluginBase { novel.summary += loadedCheerio(p).text().trim() + "\\n\\n"; } + const totalChapters = loadedCheerio(".eplister li").length; const chapters: Plugin.ChapterItem[] = loadedCheerio(".eplister li") - .map((index, element) => ({ + .map((chapterIndex, element) => ({ name: loadedCheerio(element).find(".epl-num").text() + loadedCheerio(element).find(".epl-title").text(), - releaseTime: loadedCheerio(element).find(".epl-date").text().trim(), url: loadedCheerio(element).find("a").attr("href") || "", + releaseTime: loadedCheerio(element).find(".epl-date").text().trim(), + chapterNumber: this.options?.reverseChapters + ? totalChapters - chapterIndex + : chapterIndex + 1, })) .get() .filter((chapter) => chapter.name && chapter.url); diff --git a/test_web/api/plugins.ts b/test_web/api/plugins.ts index aeda811..49d4520 100644 --- a/test_web/api/plugins.ts +++ b/test_web/api/plugins.ts @@ -31,7 +31,7 @@ export const all_plugins = (): PluginList => { const { id, name, version, icon } = instance; const info: Plugin.PluginItem = { id, - name, + name: name + (plugin.match(/(\[.+\])/)?.[1] || ''), lang: languageNative, version, requirePath,