diff --git a/dist/LNReader/plugins.json b/dist/LNReader/plugins.json
index 1851e63..04b0f7a 100644
--- a/dist/LNReader/plugins.json
+++ b/dist/LNReader/plugins.json
@@ -168,6 +168,33 @@
],
"Português": [],
"русский язык": [
+ {
+ "id": "AT",
+ "name": "Автор Тудей",
+ "site": "https://author.today",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/authortoday.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/authortoday/icon.png"
+ },
+ {
+ "id": "bookriver",
+ "name": "Bookriver",
+ "site": "https://bookriver.ru",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/bookriver.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/bookriver/icon.png"
+ },
+ {
+ "id": "EROLATE",
+ "name": "Erolate",
+ "site": "https://erolate.com",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/erolate.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/erolate/icon.png"
+ },
{
"id": "jaomix.ru",
"name": "Jaomix",
@@ -177,6 +204,24 @@
"url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/jaomix.js",
"iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/jaomix/icon.png"
},
+ {
+ "id": "ReN",
+ "name": "Renovels",
+ "site": "https://renovels.org",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/renovels.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/renovels/icon.png"
+ },
+ {
+ "id": "RLIB",
+ "name": "RanobeLib",
+ "site": "https://ranobelib.me",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranobelib.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranobelib/icon.png"
+ },
{
"id": "RNBH.org",
"name": "RanobeHub",
@@ -194,6 +239,24 @@
"version": "1.0.0",
"url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranoberf.js",
"iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranoberf/icon.png"
+ },
+ {
+ "id": "RULATE",
+ "name": "Rulate",
+ "site": "https://tl.rulate.ru",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/rulate.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/rulate/icon.png"
+ },
+ {
+ "id": "TL",
+ "name": "NovelTL",
+ "site": "https://novel.tl",
+ "lang": "русский язык",
+ "version": "1.0.0",
+ "url": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/novelTL.js",
+ "iconUrl": "https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/noveltl/icon.png"
}
],
"español, castellano": [
diff --git a/dist/LNReader/plugins.min.json b/dist/LNReader/plugins.min.json
index fed6368..23cd32d 100644
--- a/dist/LNReader/plugins.min.json
+++ b/dist/LNReader/plugins.min.json
@@ -1 +1 @@
-{"中文, 汉语, 漢語":[],"English":[{"id":"ANF.com","name":"AllNovelFull","site":"https://allnovelfull.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/allnovelfull.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/allnovelfull/icon.png"},{"id":"BLN.com","name":"BestLightNovel","site":"https://bestlightnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/bestlightnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/bestlightnovel/icon.png"},{"id":"comrademao","name":"Comrade Mao","site":"https://comrademao.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/comrademao.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/comrademao/icon.png"},{"id":"DDL.com","name":"Divine Dao Library","site":"https://www.divinedaolibrary.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/divinedaolibrary.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/divinedaolibrary/icon.png"},{"id":"foxaholic","name":"Foxaholic","site":"https://www.foxaholic.com/","lang":"English","version":"1.0.0","description":"Digging Pits","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/foxaholic.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/foxaholic/icon.png"},{"id":"FWN.com","name":"Web NOVEL","site":"https://freewebnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/freewebnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/freewebnovel/icon.png"},{"id":"LNR.org","name":"LightNovelReader","site":"https://lightnovelreader.org","lang":"English","version":"1.0.0","description":"This is description for plugin","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/LightNovelReader.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/lightnovelreader/icon.png"},{"id":"NF.me","name":"NovelFull.me","site":"https://novelfull.me/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/NovelFullMe.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/novelfullme/icon.png"},{"id":"NO.net","name":"novelsOnline","site":"https://novelsonline.net","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/NovelOnline.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/coverNotAvailable.jpg"},{"id":"novelpub.com","name":"NovelPub","site":"https://www.novelpub.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/novelpub.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/novelpub/icon.png"}],"français, française":[{"id":"chireads.com","name":"Chireads","site":"https://chireads.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/french/chireads.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/fr/chireads/icon.png"},{"id":"NDG.com","name":"NovelDeGlace","site":"https://noveldeglace.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/french/noveldeglace.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/fr/noveldeglace/icon.png"}],"Bahasa Indonesia":[{"id":"IDWN.id","name":"IndoWebNovel","site":"https://indowebnovel.id/id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/indowebnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/indowebnovel/icon.png"},{"id":"novelringan.com","name":"NovelRingan","site":"https://novelringan.com/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/novelringan.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/novelringan/icon.png"},{"id":"sakura.id","name":"SakuraNovel","site":"https://sakuranovel.id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/sakuranovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/sakuranovel/icon.png"}],"日本語":[{"id":"yomou.syosetu","name":"Syosetu","site":"https://yomou.syosetu.com/","lang":"日本語","version":"1.0.0","description":"小説を読もう!は「小説家になろう」に投稿された","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/japanese/Syosetu.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/jp/syosetu/icon.png"}],"한국어, 조선말":[{"id":"agit.xyz","name":"Agitoon","site":"https://agit501.xyz/","lang":"한국어, 조선말","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/korean/Agitoon.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/kr/agitoon/agit.png"}],"Português":[],"русский язык":[{"id":"jaomix.ru","name":"Jaomix","site":"https://jaomix.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/jaomix.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/jaomix/icon.png"},{"id":"RNBH.org","name":"RanobeHub","site":"https://ranobehub.org/","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranobehub.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranobehub/icon.png"},{"id":"RNRF","name":"РанобэРФ","site":"https://ранобэ.рф","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranoberf.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranoberf/icon.png"}],"español, castellano":[{"id":"awuxia.com","name":"ReinoWuxia","site":"http://www.reinowuxia.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/novelawuxia.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/novelawuxia/icon.png"},{"id":"HasuTL","name":"Hasu Translations","site":"https://hasutl.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/hasutl.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/hasutl/icon.png"},{"id":"ligera.com","name":"Novelas Ligera","site":"https://novelasligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/novelasligera.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/novelasligera/icon.png"},{"id":"oasisTL.wp","name":"Oasis Translations","site":"https://oasistranslations.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/oasistranslations.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/oasistranslations/icon.png"},{"id":"skynovels.net","name":"SkyNovels","site":"https://www.skynovels.net/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/skynovels.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/skynovels/icon.png"},{"id":"TNL.com","name":"TuNovelaLigera","site":"https://tunovelaligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/tunovelaligera.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/tunovelaligera/icon.png"},{"id":"yuukitls.com","name":"Yuuki Tls","site":"https://yuukitls.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/yukitls.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/yuukitls/icon.png"}],"Türkçe":[{"id":"epiknovel.com","name":"EpikNovel","site":"https://www.epiknovel.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/turkish/epiknovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/tr/epiknovel/icon.png"}],"Tiếng Việt":[{"id":"ln.hako","name":"Hako","site":"https://ln.hako.vn","lang":"Tiếng Việt","version":"1.0.0","description":"Hầm trú ẩn Hako","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/vietnamese/LNHako.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/vi/hakolightnovel/icon.png"}]}
\ No newline at end of file
+{"中文, 汉语, 漢語":[],"English":[{"id":"ANF.com","name":"AllNovelFull","site":"https://allnovelfull.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/allnovelfull.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/allnovelfull/icon.png"},{"id":"BLN.com","name":"BestLightNovel","site":"https://bestlightnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/bestlightnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/bestlightnovel/icon.png"},{"id":"comrademao","name":"Comrade Mao","site":"https://comrademao.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/comrademao.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/comrademao/icon.png"},{"id":"DDL.com","name":"Divine Dao Library","site":"https://www.divinedaolibrary.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/divinedaolibrary.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/divinedaolibrary/icon.png"},{"id":"foxaholic","name":"Foxaholic","site":"https://www.foxaholic.com/","lang":"English","version":"1.0.0","description":"Digging Pits","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/foxaholic.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/foxaholic/icon.png"},{"id":"FWN.com","name":"Web NOVEL","site":"https://freewebnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/freewebnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/freewebnovel/icon.png"},{"id":"LNR.org","name":"LightNovelReader","site":"https://lightnovelreader.org","lang":"English","version":"1.0.0","description":"This is description for plugin","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/LightNovelReader.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/lightnovelreader/icon.png"},{"id":"NF.me","name":"NovelFull.me","site":"https://novelfull.me/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/NovelFullMe.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/novelfullme/icon.png"},{"id":"NO.net","name":"novelsOnline","site":"https://novelsonline.net","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/NovelOnline.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/coverNotAvailable.jpg"},{"id":"novelpub.com","name":"NovelPub","site":"https://www.novelpub.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/english/novelpub.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/en/novelpub/icon.png"}],"français, française":[{"id":"chireads.com","name":"Chireads","site":"https://chireads.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/french/chireads.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/fr/chireads/icon.png"},{"id":"NDG.com","name":"NovelDeGlace","site":"https://noveldeglace.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/french/noveldeglace.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/fr/noveldeglace/icon.png"}],"Bahasa Indonesia":[{"id":"IDWN.id","name":"IndoWebNovel","site":"https://indowebnovel.id/id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/indowebnovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/indowebnovel/icon.png"},{"id":"novelringan.com","name":"NovelRingan","site":"https://novelringan.com/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/novelringan.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/novelringan/icon.png"},{"id":"sakura.id","name":"SakuraNovel","site":"https://sakuranovel.id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/indonesian/sakuranovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/id/sakuranovel/icon.png"}],"日本語":[{"id":"yomou.syosetu","name":"Syosetu","site":"https://yomou.syosetu.com/","lang":"日本語","version":"1.0.0","description":"小説を読もう!は「小説家になろう」に投稿された","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/japanese/Syosetu.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/jp/syosetu/icon.png"}],"한국어, 조선말":[{"id":"agit.xyz","name":"Agitoon","site":"https://agit501.xyz/","lang":"한국어, 조선말","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/korean/Agitoon.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/kr/agitoon/agit.png"}],"Português":[],"русский язык":[{"id":"AT","name":"Автор Тудей","site":"https://author.today","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/authortoday.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/authortoday/icon.png"},{"id":"bookriver","name":"Bookriver","site":"https://bookriver.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/bookriver.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/bookriver/icon.png"},{"id":"EROLATE","name":"Erolate","site":"https://erolate.com","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/erolate.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/erolate/icon.png"},{"id":"jaomix.ru","name":"Jaomix","site":"https://jaomix.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/jaomix.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/jaomix/icon.png"},{"id":"ReN","name":"Renovels","site":"https://renovels.org","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/renovels.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/renovels/icon.png"},{"id":"RLIB","name":"RanobeLib","site":"https://ranobelib.me","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranobelib.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranobelib/icon.png"},{"id":"RNBH.org","name":"RanobeHub","site":"https://ranobehub.org/","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranobehub.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranobehub/icon.png"},{"id":"RNRF","name":"РанобэРФ","site":"https://ранобэ.рф","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/ranoberf.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/ranoberf/icon.png"},{"id":"RULATE","name":"Rulate","site":"https://tl.rulate.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/rulate.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/rulate/icon.png"},{"id":"TL","name":"NovelTL","site":"https://novel.tl","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/russian/novelTL.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/ru/noveltl/icon.png"}],"español, castellano":[{"id":"awuxia.com","name":"ReinoWuxia","site":"http://www.reinowuxia.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/novelawuxia.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/novelawuxia/icon.png"},{"id":"HasuTL","name":"Hasu Translations","site":"https://hasutl.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/hasutl.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/hasutl/icon.png"},{"id":"ligera.com","name":"Novelas Ligera","site":"https://novelasligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/novelasligera.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/novelasligera/icon.png"},{"id":"oasisTL.wp","name":"Oasis Translations","site":"https://oasistranslations.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/oasistranslations.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/oasistranslations/icon.png"},{"id":"skynovels.net","name":"SkyNovels","site":"https://www.skynovels.net/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/skynovels.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/skynovels/icon.png"},{"id":"TNL.com","name":"TuNovelaLigera","site":"https://tunovelaligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/tunovelaligera.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/tunovelaligera/icon.png"},{"id":"yuukitls.com","name":"Yuuki Tls","site":"https://yuukitls.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/spanish/yukitls.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/es/yuukitls/icon.png"}],"Türkçe":[{"id":"epiknovel.com","name":"EpikNovel","site":"https://www.epiknovel.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/turkish/epiknovel.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/tr/epiknovel/icon.png"}],"Tiếng Việt":[{"id":"ln.hako","name":"Hako","site":"https://ln.hako.vn","lang":"Tiếng Việt","version":"1.0.0","description":"Hầm trú ẩn Hako","url":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/plugins/vietnamese/LNHako.js","iconUrl":"https://raw.githubusercontent.com/LNReader/lnreader-sources/plugins/icons/src/vi/hakolightnovel/icon.png"}]}
\ No newline at end of file
diff --git a/icons/src/ru/authortoday/icon.png b/icons/src/ru/authortoday/icon.png
index 908657d..eee2ec4 100644
Binary files a/icons/src/ru/authortoday/icon.png and b/icons/src/ru/authortoday/icon.png differ
diff --git a/icons/src/ru/bookriver/icon.png b/icons/src/ru/bookriver/icon.png
new file mode 100644
index 0000000..af2fba1
Binary files /dev/null and b/icons/src/ru/bookriver/icon.png differ
diff --git a/icons/src/ru/erolate/icon.png b/icons/src/ru/erolate/icon.png
new file mode 100644
index 0000000..f9df0ef
Binary files /dev/null and b/icons/src/ru/erolate/icon.png differ
diff --git a/icons/src/ru/noveltl/icon.png b/icons/src/ru/noveltl/icon.png
new file mode 100644
index 0000000..1058e89
Binary files /dev/null and b/icons/src/ru/noveltl/icon.png differ
diff --git a/icons/src/ru/rulate/icon.png b/icons/src/ru/rulate/icon.png
index b5342d7..32c0147 100644
Binary files a/icons/src/ru/rulate/icon.png and b/icons/src/ru/rulate/icon.png differ
diff --git a/index.js b/index.js
index 816e0ec..42e991e 100644
--- a/index.js
+++ b/index.js
@@ -1,9 +1,11 @@
require('module-alias/register');
const path = require('path');
+const dayjs = require('dayjs')
const express = require('express');
const bodyParser = require('body-parser');
const pluginApi = require('@api/plugins');
+const localizedFormat = require('dayjs/plugin/localizedFormat');
const app = express();
const port = 3000;
@@ -44,4 +46,20 @@ app.get('/', (req, res) => {
app.listen(port, host, () => {
console.log("Testing plugins web listening on http://localhost:3000");
-});
\ No newline at end of file
+});
+
+//Dayjs localization
+const language = Intl?.DateTimeFormat()?.resolvedOptions()?.locale || "en";
+
+require("dayjs/locale/ar");
+require("dayjs/locale/de");
+require("dayjs/locale/es");
+require("dayjs/locale/it");
+require("dayjs/locale/pt");
+require("dayjs/locale/ru");
+require("dayjs/locale/tr");
+require("dayjs/locale/uk");
+require("dayjs/locale/zh");
+
+dayjs.locale(language);
+dayjs.extend(localizedFormat);
\ No newline at end of file
diff --git a/plugins/russian/authortoday.js b/plugins/russian/authortoday.js
new file mode 100644
index 0000000..f1bcbb5
--- /dev/null
+++ b/plugins/russian/authortoday.js
@@ -0,0 +1,336 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+const defaultCoverUri =
+ "https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true";
+
+const pluginId = "AT";
+const sourceName = "Автор Тудей";
+
+const baseUrl = "https://author.today";
+const apiUrl = "https://api.author.today/";
+
+const token = "Bearer guest";
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = apiUrl + "v1/catalog/search?page=" + page;
+ if (filters?.genre) {
+ url += "&genre=" + filters.genre;
+ }
+
+ url +=
+ "&sorting=" + (showLatestNovels ? "recent" : filters?.sort || "popular");
+
+ url += "&form=" + (filters?.form || "any");
+ url += "&state=" + (filters?.state || "any");
+ url += "&series=" + (filters?.series || "any");
+ url += "&access=" + (filters?.access || "any");
+ url += "&promo=" + (filters?.promo || "hide");
+
+ const result = await fetchApi(url, {
+ headers: {
+ Authorization: token,
+ },
+ });
+ const json = await result.json();
+
+ if (json?.code === "NotFound") {
+ return [];
+ }
+
+ let novels = [];
+ json.searchResults.forEach((novel) =>
+ novels.push({
+ name: novel.title,
+ cover: novel?.coverUrl
+ ? "https://cm.author.today/content/" + novel.coverUrl
+ : defaultCoverUri,
+ url: baseUrl + "/work/" + novel.id,
+ })
+ );
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ const workID = novelUrl.split("/")[4];
+ let result = await fetchApi(`${apiUrl}v1/work/${workID}/details`, {
+ headers: {
+ Authorization: token,
+ },
+ });
+
+ let json = await result.json();
+ let novel = {
+ url: novelUrl,
+ name: json.title,
+ cover: json?.coverUrl ? json.coverUrl.split("?")[0] : defaultCoverUri,
+ author:
+ json?.originalAuthor ||
+ json?.authorFIO ||
+ json?.coAuthorFIO ||
+ json?.secondCoAuthorFIO ||
+ json?.translator ||
+ "",
+ genres: json?.tags?.join(", "),
+ status: json?.isFinished ? Status.Completed : Status.Ongoing,
+ };
+
+ novel.summary = "";
+ novel.summary += json?.annotation ? json.annotation + "\n" : "";
+ novel.summary += json?.authorNotes
+ ? "Примечания автора:\n" + json.authorNotes
+ : "";
+ // all chapters
+ result = await fetchApi(`${apiUrl}v1/work/${workID}/content`, {
+ headers: {
+ Authorization: token,
+ },
+ });
+ json = await result.json();
+
+ let chapters = [];
+ json?.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 function parseChapter(chapterUrl) {
+ const result = await fetchApi(chapterUrl, {
+ headers: {
+ Authorization: token,
+ },
+ });
+ const json = await result.json();
+
+ if (json?.code) {
+ return json.code + "\n" + json?.message;
+ }
+
+ let 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 = cheerio.load(text);
+ 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 function searchNovels(searchTerm) {
+ const url = `${baseUrl}/search?category=works&q=${searchTerm}`;
+ const result = await fetchApi(url, {
+ "User-Agent":
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0",
+ referer: baseUrl,
+ });
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(body);
+ let novels = [];
+
+ 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 = defaultCoverUri;
+ }
+
+ novels.push({ name, cover, url });
+ });
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "По популярности", value: "popular" },
+ { label: "По количеству лайков", value: "likes" },
+ { label: "По комментариям", value: "comments" },
+ { label: "По новизне", value: "recent" },
+ { label: "По просмотрам", value: "views" },
+ { label: "Набирающие популярность", value: "trending" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "genre",
+ label: "Жанры",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "form",
+ label: "Форма произведения",
+ values: [
+ { label: "Любой", value: "any" },
+ { label: "Перевод", value: "translation" },
+ { label: "Повесть", value: "tale" },
+ { label: "Рассказ", value: "story" },
+ { label: "Роман", value: "novel" },
+ { label: "Сборник поэзии", value: "poetry" },
+ { label: "Сборник рассказов", value: "story-book" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "state",
+ label: "Статус произведения",
+ values: [
+ { label: "Любой статус", value: "any" },
+ { label: "В процессе", value: "in-progress" },
+ { label: "Завершено", value: "finished" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "series",
+ label: "Статус цикла",
+ values: [
+ { label: "Не важно", value: "any" },
+ { label: "Вне цикла", value: "out" },
+ { label: "Цикл завершен", value: "finished" },
+ { label: "Цикл не завершен", value: "unfinished" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "access",
+ label: "Тип доступа",
+ values: [
+ { label: "Любой", value: "any" },
+ { label: "Платный", value: "paid" },
+ { label: "Бесплатный", value: "free" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "promo",
+ label: "Промо-фрагмент",
+ values: [
+ { label: "Скрывать", value: "hide" },
+ { label: "Показывать", value: "show" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/authortoday/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/bookriver.js b/plugins/russian/bookriver.js
new file mode 100644
index 0000000..7b0543c
--- /dev/null
+++ b/plugins/russian/bookriver.js
@@ -0,0 +1,184 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+
+const pluginId = "bookriver";
+const sourceName = "Bookriver";
+const baseUrl = "https://bookriver.ru";
+
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + `/genre?page=${page}&perPage=24&sortingType=`;
+ url += showLatestNovels ? "last-update" : filters?.sort || "bestseller";
+
+ if (filters?.genres?.length) {
+ url += "&g=" + filters.genres.join(",");
+ }
+
+ const result = await fetchApi(url);
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+ let json = loadedCheerio("#__NEXT_DATA__").html();
+ json = JSON.parse(json);
+
+ let novels = [];
+ json.props.pageProps.state.pagesFilter.genre.books.forEach((novel) =>
+ novels.push({
+ name: novel.name,
+ cover: novel.coverImages[0].url,
+ url: baseUrl + "/book/" + novel.slug,
+ })
+ );
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ const result = await fetchApi(novelUrl);
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+ const json = loadedCheerio("#__NEXT_DATA__").html();
+ const book = JSON.parse(json).props.pageProps.state.book.bookPage;
+
+ let novel = {
+ 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" ? Status.Ongoing : Status.Completed,
+ };
+
+ let chapters = [];
+
+ book.ebook.chapters.forEach((chapter) => {
+ if (chapter.available) {
+ chapters.push({
+ name: chapter.name,
+ releaseTime: dayjs(chapter?.firstPublishedAt || chapter.createdAt).format("LLL"),
+ url: baseUrl + "/reader/" + book.slug + "/" + chapter.chapterId,
+ });
+ }
+ });
+
+ novel.chapters = chapters;
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ const url = "https://api.bookriver.ru/api/v1/books/chapter/text/";
+ const result = await fetchApi(url + chapterUrl.split("/").pop());
+ const json = await result.json();
+
+ const chapterText = json.data.content;
+ return chapterText;
+}
+
+async function searchNovels(searchTerm) {
+ const url = `${baseUrl}/search/books?keyword=${searchTerm}`;
+ const result = await fetchApi(url);
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+ let json = loadedCheerio("#__NEXT_DATA__").html();
+ json = JSON.parse(json);
+
+ let novels = [];
+ json.props.pageProps.state.catalog.books.books.forEach((novel) =>
+ novels.push({
+ name: novel.name,
+ cover: novel.coverImages[0].url,
+ url: baseUrl + "/book/" + novel.slug,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "Бестселлеры", value: "bestseller" },
+ { label: "Дате добавления", value: "newest" },
+ { label: "Дате обновления", value: "last-update" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "genres",
+ label: "жанры",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/bookriver/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/erolate.js b/plugins/russian/erolate.js
new file mode 100644
index 0000000..4c902c6
--- /dev/null
+++ b/plugins/russian/erolate.js
@@ -0,0 +1,702 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+const defaultCoverUri =
+ "https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true";
+
+const pluginId = "EROLATE";
+const sourceName = "Erolate";
+const baseUrl = "https://erolate.com";
+
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + "/search?t=&cat=2";
+ url += "&sort=" + showLatestNovels ? "4" : filters?.sort || "6";
+ url += "&type=" + filters?.type || "0";
+ url += "&atmosphere=" + filters?.atmosphere || "0";
+ url += "&adult=" + filters?.adult || "0";
+
+ if (filters?.genres?.length) {
+ url += filters.genres.map((i) => `&genres[]=${i}`).join("");
+ }
+
+ if (filters?.tags?.length) {
+ url += filters.tags.map((i) => `&tags[]=${i}`).join("");
+ }
+
+ if (filters?.trash?.length) {
+ url += filters.trash.map((i) => `&${i}=1`);
+ }
+
+ url += `&Book_page=${page}`;
+
+ const result = await fetchApi(url);
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(body);
+
+ let novels = [];
+
+ loadedCheerio(
+ 'ul[class="search-results"] > li:not([class="ad_type_catalog"])'
+ ).each(function () {
+ novels.push({
+ name: loadedCheerio(this).find("p > a").text(),
+ cover: baseUrl + loadedCheerio(this).find("img").attr("src"),
+ url: baseUrl + loadedCheerio(this).find("p > a").attr("href"),
+ });
+ });
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ let result = await fetchApi(novelUrl);
+ if (result.url.includes("mature?path=")) {
+ const formData = new FormData();
+ formData.append("path", novelUrl);
+ formData.append("ok", "Да");
+
+ await fetchApi(result.url, {
+ method: "POST",
+ body: formData,
+ });
+
+ result = await fetchApi(novelUrl);
+ }
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(body);
+
+ let novel = {
+ url: novelUrl,
+ };
+
+ novel.name = loadedCheerio('div[class="container"] > div > div > h1')
+ .text()
+ .trim();
+ novel.cover =
+ baseUrl + loadedCheerio('div[class="images"] > div img').attr("src");
+ novel.summary = loadedCheerio("#Info > div:nth-child(3)").html();
+ let genre = [];
+
+ loadedCheerio('div[class="span5"] > p').each(function () {
+ switch (loadedCheerio(this).find("strong").text()) {
+ case "Автор:":
+ novel.author = loadedCheerio(this).find("em > a").text().trim();
+ break;
+ case "Выпуск:":
+ novel.status =
+ loadedCheerio(this).find("em").text().trim() === "продолжается"
+ ? Status.Ongoing
+ : Status.Completed;
+ break;
+ case "Тэги:":
+ loadedCheerio(this)
+ .find("em > a")
+ .each(function () {
+ genre.push(loadedCheerio(this).text());
+ });
+ break;
+ case "Жанры:":
+ loadedCheerio(this)
+ .find("em > a")
+ .each(function () {
+ genre.push(loadedCheerio(this).text());
+ });
+ break;
+ }
+ });
+
+ if (genre?.length) {
+ novel.genres = genre.reverse().join(",");
+ }
+
+ let chapters = [];
+ loadedCheerio("table > tbody > tr.chapter_row").each(function () {
+ const releaseTime = loadedCheerio(this)
+ .find("td > span")
+ .attr("title")
+ ?.trim();
+
+ if (
+ loadedCheerio(this).find('td > span[class="disabled"]').length < 1 &&
+ releaseTime
+ ) {
+ const name = loadedCheerio(this).find('td[class="t"] > a').text().trim();
+ const url = loadedCheerio(this).find('td[class="t"] > a').attr("href");
+
+ chapters.push({ name, releaseTime, url: baseUrl + url });
+ }
+ });
+
+ novel.chapters = chapters;
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ let result = await fetchApi(chapterUrl);
+ if (result.url.includes("mature?path=")) {
+ const formData = new FormData();
+ formData.append("path", chapterUrl.replace(baseUrl, ""));
+ formData.append("ok", "Да");
+
+ await fetchApi(result.url, {
+ method: "POST",
+ body: formData,
+ });
+
+ result = await fetchApi(chapterUrl);
+ }
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(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);
+ }
+ });
+
+ const chapterText = loadedCheerio(".content-text").html();
+ return chapterText;
+}
+
+async function searchNovels(searchTerm) {
+ const result = await fetchApi(
+ baseUrl + "/search/autocomplete?query=" + searchTerm
+ );
+ const json = await result.json();
+
+ let novels = [];
+ json.forEach((novel) =>
+ novels.push({
+ name: novel.title_one + " / " + novel.title_two,
+ cover: baseUrl + novel.img,
+ url: baseUrl + novel.url,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "По рейтингу", value: "6" },
+ { label: "По степени готовности", value: "0" },
+ { label: "По названию на языке оригинала", value: "1" },
+ { label: "По названию на языке перевода", value: "2" },
+ { label: "По дате создания", value: "3" },
+ { label: "По дате последней активности", value: "4" },
+ { label: "По просмотрам", value: "5" },
+ { label: "По кол-ву переведённых глав", value: "7" },
+ { label: "По кол-ву лайков", value: "8" },
+ { label: "По кол-ву страниц", value: "10" },
+ { label: "По кол-ву бесплатных глав", value: "11" },
+ { label: "По кол-ву рецензий", value: "12" },
+ { label: "По кол-ву в закладках", value: "13" },
+ { label: "По кол-ву в избранном", value: "14" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "type",
+ label: "Тип",
+ values: [
+ { label: "Неважно", value: "0" },
+ { label: "Только переводы", value: "1" },
+ { label: "Только авторские", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "atmosphere",
+ label: "Атмосфера",
+ values: [
+ { label: "Неважно", value: "0" },
+ { label: "Позитивная", value: "1" },
+ { label: "Dark", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "trash",
+ label: "Другое",
+ values: [
+ { label: "Готовые на 100%", value: "ready" },
+ { label: "Доступные для перевода", value: "tr" },
+ { label: "Доступные для скачивания", value: "gen" },
+ { label: "Завершённые проекты", value: "wealth" },
+ { label: "Распродажа", value: "discount" },
+ { label: "Только онгоинги", value: "ongoings" },
+ { label: "Убрать машинный", value: "remove_machinelate" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "genres",
+ label: "Жанры",
+ values: [
+ { label: "Анал", value: "2" },
+ { label: "Бдсм", value: "3" },
+ { label: "Большая грудь", value: "5" },
+ { label: "Большая попка", value: "6" },
+ { label: "Большой член", value: "7" },
+ { label: "Бондаж", value: "8" },
+ { label: "В первый раз", value: "9" },
+ { label: "В цвете", value: "10" },
+ { label: "Гарем", value: "11" },
+ { label: "Гендарная интрига", value: "12" },
+ { label: "Групповой секс", value: "13" },
+ { label: "Детектив", value: "39" },
+ { label: "Драма", value: "14" },
+ { label: "Зрелые женщины (milf)", value: "15" },
+ { label: "Измена", value: "16" },
+ { label: "Изнасилование", value: "17" },
+ { label: "Инцест", value: "18" },
+ { label: "Исторический", value: "19" },
+ { label: "Комедия", value: "20" },
+ { label: "Контроль над разумом", value: "35" },
+ { label: "Маленькая грудь", value: "21" },
+ { label: "Мистика", value: "40" },
+ { label: "Научная фантастика", value: "22" },
+ { label: "Нетораре", value: "23" },
+ { label: "Оральный секс", value: "24" },
+ { label: "Повседневность", value: "41" },
+ { label: "Приключения", value: "38" },
+ { label: "Публичный секс", value: "33" },
+ { label: "Романтика", value: "25" },
+ { label: "С изображениями ", value: "36" },
+ { label: "Сверхъестественное", value: "34" },
+ { label: "Смат", value: "37" },
+ { label: "Тентакли", value: "26" },
+ { label: "Трагедия", value: "27" },
+ { label: "Ужасы", value: "28" },
+ { label: "Фантастика", value: "32" },
+ { label: "Фэнтези", value: "29" },
+ { label: "Чикан", value: "30" },
+ { label: "Этти", value: "31" },
+ { label: "Ahegao", value: "1" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "tags",
+ label: "Тэги",
+ values: [
+ { label: "+18", value: "141" },
+ { label: "18+", value: "200" },
+ { label: "21+", value: "334" },
+ { label: "Адекватные главные герои", value: "253" },
+ { label: "Азартные игры", value: "210" },
+ { label: "Айдолы", value: "364" },
+ { label: "Акула", value: "53" },
+ { label: "Альтернативное развитие событий", value: "338" },
+ { label: "Аморальный главный герой", value: "219" },
+ { label: "Анал", value: "7" },
+ { label: "Анальный секс", value: "67" },
+ { label: "Ангелы", value: "114" },
+ { label: "Антигерой", value: "226" },
+ { label: "Аристократия", value: "260" },
+ { label: "Артефакт", value: "379" },
+ { label: "Афродизиак", value: "276" },
+ { label: "Ахегао", value: "240" },
+ { label: "Бабушка беременна от внука", value: "393" },
+ { label: "Бабушка и внук", value: "380" },
+ { label: "Бдсм", value: "131" },
+ { label: "Беременность", value: "148" },
+ { label: "Бесплатно", value: "79" },
+ { label: "Бесстрашные персонажи", value: "339" },
+ { label: "Библиотека", value: "265" },
+ { label: "Бистиалити", value: "391" },
+ { label: "Близнецы", value: "198" },
+ { label: "Блондинка", value: "91" },
+ { label: "Богатые персонажи", value: "248" },
+ { label: "Боги", value: "115" },
+ { label: "Боевик", value: "252" },
+ { label: "Большая грудь", value: "33" },
+ { label: "Большая попка", value: "328" },
+ { label: "Большой член", value: "76" },
+ { label: "Большой член сына", value: "396" },
+ { label: "Босс и подчиненный", value: "330" },
+ { label: "Брак", value: "182" },
+ { label: "Брак по расчёту", value: "346" },
+ { label: "Брат", value: "29" },
+ { label: "Брат и сестра", value: "30" },
+ { label: "Брюнетка", value: "28" },
+ { label: "Бэтмен", value: "369" },
+ { label: "Бэтмен", value: "170" },
+ { label: "В первый раз", value: "179" },
+ { label: "Вагинальный секс", value: "57" },
+ { label: "Вагинальный секс", value: "171" },
+ { label: "Вайурист", value: "9" },
+ { label: "Вампиры", value: "133" },
+ { label: "Ван-пис", value: "335" },
+ { label: "Веб камера", value: "289" },
+ { label: "Ведьмы", value: "232" },
+ { label: "Викинги", value: "307" },
+ { label: "Виртуальная реальность", value: "382" },
+ { label: "Вирус", value: "203" },
+ { label: "Внучка", value: "189" },
+ { label: "Война", value: "387" },
+ { label: "Время", value: "81" },
+ { label: "Второй шанс", value: "244" },
+ { label: "Вуайеризм", value: "62" },
+ { label: "Выживание", value: "135" },
+ { label: "Гарем", value: "107" },
+ { label: "Гарри поттер", value: "97" },
+ { label: "Гг имба", value: "87" },
+ { label: "Генетические модификации", value: "314" },
+ { label: "Гипноз", value: "143" },
+ { label: "Главная героиня девушка", value: "147" },
+ { label: "Главный герой женщина", value: "213" },
+ { label: "Главный герой извращенец", value: "116" },
+ { label: "Главный герой мужчина", value: "117" },
+ { label: "Глубокое горло", value: "94" },
+ { label: "Гоблины", value: "230" },
+ { label: "Город", value: "139" },
+ { label: "Городское фэнтези", value: "297" },
+ { label: "Грудное молоко", value: "225" },
+ { label: "Групповой секс", value: "72" },
+ { label: "Гэнг-бэнг", value: "235" },
+ { label: "Гяру", value: "222" },
+ { label: "Двойное проникновение", value: "42" },
+ { label: "Двойной анал", value: "47" },
+ { label: "Дворяне", value: "246" },
+ { label: "Деамоны старший школы", value: "291" },
+ { label: "Девственница", value: "119" },
+ { label: "Девушки-монстры", value: "223" },
+ { label: "Демоны", value: "98" },
+ { label: "Детектив", value: "249" },
+ { label: "Дзёсэй", value: "259" },
+ { label: "Доктор", value: "326" },
+ { label: "Дом", value: "138" },
+ { label: "Доминирование", value: "18" },
+ { label: "Дочь", value: "153" },
+ { label: "Дочь беременна от отца", value: "348" },
+ { label: "Древние времена", value: "383" },
+ { label: "Древний китай", value: "261" },
+ { label: "Другой мир", value: "365" },
+ { label: "Дружба", value: "325" },
+ { label: "Друзья детства", value: "183" },
+ { label: "Дядя", value: "160" },
+ { label: "Жена", value: "70" },
+ { label: "Жена и муж", value: "99" },
+ { label: "Жена шлюха", value: "236" },
+ { label: "Женское доминирование", value: "100" },
+ { label: "Жесткий секс", value: "283" },
+ { label: "Жёсткий секс", value: "101" },
+ { label: "Жестокие персонажи", value: "254" },
+ { label: "Жестокий мир", value: "336" },
+ { label: "Жестокость", value: "123" },
+ { label: "Заботливый главный герой", value: "340" },
+ { label: "Зависимость", value: "370" },
+ { label: "Заключение", value: "196" },
+ { label: "Заключённые", value: "384" },
+ { label: "Замок", value: "140" },
+ { label: "Запретная любовь", value: "273" },
+ { label: "Заражение", value: "206" },
+ { label: "Звёздные войны", value: "120" },
+ { label: "Зверодевочки", value: "158" },
+ { label: "Зло", value: "343" },
+ { label: "Золовка", value: "77" },
+ { label: "Золотой дождь", value: "146" },
+ { label: "Зомби апокалипсис", value: "241" },
+ { label: "Зоофилия", value: "144" },
+ { label: "Игровые элементы", value: "385" },
+ { label: "Извращения", value: "192" },
+ { label: "Измена", value: "71" },
+ { label: "Изменения внешности", value: "315" },
+ { label: "Изменения личности", value: "316" },
+ { label: "Изнасилование", value: "275" },
+ { label: "Изуку мидория", value: "337" },
+ { label: "Ино", value: "127" },
+ { label: "Инопланетяне", value: "304" },
+ { label: "Интересный сюжет", value: "349" },
+ { label: "Интимные сцены", value: "322" },
+ { label: "Интриги и заговоры", value: "262" },
+ { label: "Интроверт", value: "38" },
+ { label: "Инфекция", value: "207" },
+ { label: "Инцест", value: "35" },
+ { label: "Камера", value: "92" },
+ { label: "Колледж", value: "82" },
+ { label: "Комикс", value: "286" },
+ { label: "Контроль", value: "19" },
+ { label: "Контроль над разумом", value: "181" },
+ { label: "Контроль разума", value: "65" },
+ { label: "Кончил внутрь", value: "221" },
+ { label: "Королевская семья", value: "358" },
+ { label: "Коррупция", value: "49" },
+ { label: "Космос", value: "204" },
+ { label: "Красивая главная героиня", value: "255" },
+ { label: "Красивые женщины", value: "321" },
+ { label: "Красивый главный герой", value: "266" },
+ { label: "Ксенофилия", value: "386" },
+ { label: "Кулинария", value: "362" },
+ { label: "Культвация", value: "86" },
+ { label: "Кунилингус", value: "152" },
+ { label: "Лактация", value: "11" },
+ { label: "Лишение девственности", value: "212" },
+ { label: "Лоли", value: "218" },
+ { label: "Лунатизм", value: "279" },
+ { label: "Любовь", value: "89" },
+ { label: "Магический мир", value: "357" },
+ { label: "Магия", value: "80" },
+ { label: "Мама", value: "3" },
+ { label: "Мама беременна от сына", value: "274" },
+ { label: "Мама и дочь", value: "163" },
+ { label: "Мама и сын", value: "1" },
+ { label: "Мама супермена", value: "39" },
+ { label: "Манипуляция временем", value: "292" },
+ { label: "Марвел", value: "290" },
+ { label: "Марвел", value: "173" },
+ { label: "Марти стью", value: "102" },
+ { label: "Массаж", value: "224" },
+ { label: "Мастурбация", value: "63" },
+ { label: "Мать", value: "239" },
+ { label: "Мать и дочь", value: "381" },
+ { label: "Мать и сын", value: "237" },
+ { label: "Мафия", value: "256" },
+ { label: "Мачеха", value: "197" },
+ { label: "Мачеха беременна от сына", value: "395" },
+ { label: "Мачеха и сын", value: "394" },
+ { label: "Медсестра", value: "341" },
+ { label: "Межрассовый", value: "54" },
+ { label: "Месть", value: "306" },
+ { label: "Меха", value: "268" },
+ { label: "Ми", value: "243" },
+ { label: "Милф", value: "34" },
+ { label: "Милф", value: "180" },
+ { label: "Минет", value: "52" },
+ { label: "Мистика", value: "250" },
+ { label: "Младшая сестра", value: "154" },
+ { label: "Модель", value: "324" },
+ { label: "Монстры", value: "333" },
+ { label: "Мошеничество", value: "44" },
+ { label: "Мужская беременность", value: "363" },
+ { label: "Мужчина протагонист", value: "108" },
+ { label: "Музыка", value: "331" },
+ { label: "Мэри съюха", value: "309" },
+ { label: "Наруто", value: "46" },
+ { label: "Насилие", value: "128" },
+ { label: "Насилие и жестокость", value: "193" },
+ { label: "Научный эксперимент", value: "313" },
+ { label: "Нежить", value: "373" },
+ { label: "Некромантия", value: "298" },
+ { label: "Ненормативная лексика", value: "124" },
+ { label: "Нетораре", value: "69" },
+ { label: "Нетори", value: "284" },
+ { label: "Нижнее бельё", value: "392" },
+ { label: "Ниндзя", value: "296" },
+ { label: "Ношеные трусики", value: "166" },
+ { label: "Нудизм", value: "156" },
+ { label: "Няня", value: "88" },
+ { label: "Обмен женами", value: "78" },
+ { label: "Оборотни", value: "136" },
+ { label: "Обратный гарем", value: "214" },
+ { label: "Одержимость", value: "345" },
+ { label: "Омегаверс", value: "368" },
+ { label: "Оплодотворение", value: "157" },
+ { label: "Оральный секс", value: "10" },
+ { label: "Оргия", value: "356" },
+ { label: "Орки", value: "388" },
+ { label: "От слабого к сильному", value: "351" },
+ { label: "Отец", value: "2" },
+ { label: "Отец делится с сыном", value: "6" },
+ { label: "Отец и дочь", value: "205" },
+ { label: "Отец куколд", value: "272" },
+ { label: "Офис", value: "234" },
+ { label: "Падчерица", value: "271" },
+ { label: "Пайзури", value: "195" },
+ { label: "Папа и дочь", value: "360" },
+ { label: "Паразиты", value: "208" },
+ { label: "Параллельный мир", value: "320" },
+ { label: "Пародия", value: "371" },
+ { label: "Первый раз", value: "159" },
+ { label: "Перемещение в другой мир", value: "347" },
+ { label: "Перемещение во времени", value: "245" },
+ { label: "Перерождение", value: "109" },
+ { label: "Перерождение в злодея", value: "202" },
+ { label: "Пирсинг", value: "145" },
+ { label: "Писатель", value: "267" },
+ { label: "Планомерное развитие событий", value: "350" },
+ { label: "Повседневность", value: "247" },
+ { label: "Подглядывание", value: "280" },
+ { label: "Подчинение", value: "106" },
+ { label: "Подчинение и унижение", value: "211" },
+ { label: "Поедание киски", value: "26" },
+ { label: "Покемоны", value: "132" },
+ { label: "Покорная", value: "8" },
+ { label: "Полигамия", value: "352" },
+ { label: "Половое воспитание", value: "37" },
+ { label: "Полулюди", value: "231" },
+ { label: "Попаданец", value: "103" },
+ { label: "Попадание в книгу", value: "361" },
+ { label: "Порка", value: "20" },
+ { label: "Порно", value: "278" },
+ { label: "Постапокалипсис", value: "332" },
+ { label: "Потеря девственности", value: "142" },
+ { label: "Похищение", value: "161" },
+ { label: "Приключения", value: "134" },
+ { label: "Принуждение", value: "66" },
+ { label: "Психология", value: "238" },
+ { label: "Публично", value: "85" },
+ { label: "Публичный секс", value: "233" },
+ { label: "Раб", value: "353" },
+ { label: "Рабы", value: "308" },
+ { label: "Разват", value: "58" },
+ { label: "Разврат", value: "64" },
+ { label: "Райзен", value: "95" },
+ { label: "Раса инопланетных космических лесбиянок", value: "294" },
+ { label: "Рестленг", value: "84" },
+ { label: "Риас гремори", value: "389" },
+ { label: "Романтика", value: "178" },
+ { label: "Рыжий", value: "90" },
+ { label: "Сакура", value: "126" },
+ { label: "Самолет", value: "93" },
+ { label: "Санса старк", value: "277" },
+ { label: "Санта", value: "372" },
+ { label: "Свадьба", value: "73" },
+ { label: "Сверхсила", value: "228" },
+ { label: "Сверхъестественное", value: "319" },
+ { label: "Свингеры", value: "201" },
+ { label: "Свободные отношения", value: "186" },
+ { label: "Связывание", value: "137" },
+ { label: "Сёдзе", value: "264" },
+ { label: "Секс", value: "21" },
+ { label: "Секс без проникновения", value: "68" },
+ { label: "Секс втроем", value: "43" },
+ { label: "Секс игрушки", value: "59" },
+ { label: "Секс рабыня", value: "55" },
+ { label: "Секс с монстрами", value: "56" },
+ { label: "Секс с учителем", value: "184" },
+ { label: "Секса будет много", value: "151" },
+ { label: "Сексуальное желание", value: "209" },
+ { label: "Селфцест", value: "397" },
+ { label: "Семья", value: "5" },
+ { label: "Сестра", value: "31" },
+ { label: "Сестра беременна от брата", value: "355" },
+ { label: "Сильный с самого начала", value: "112" },
+ { label: "Симбиоз", value: "50" },
+ { label: "Сирена", value: "51" },
+ { label: "Система", value: "104" },
+ { label: "Сиськи", value: "285" },
+ { label: "Сквирт", value: "164" },
+ { label: "Скрытый секс", value: "287" },
+ { label: "Служанка", value: "215" },
+ { label: "Соб", value: "281" },
+ { label: "Соблазнение", value: "162" },
+ { label: "Современность", value: "217" },
+ { label: "Соколиный Глаз", value: "176" },
+ { label: "Соперничество", value: "216" },
+ { label: "Соседи", value: "61" },
+ { label: "Соседка", value: "312" },
+ { label: "Сперма", value: "229" },
+ { label: "Сперма на лицо", value: "199" },
+ { label: "Спящие", value: "187" },
+ { label: "Старшая сестра", value: "311" },
+ { label: "Стеб", value: "111" },
+ { label: "Студенты", value: "177" },
+ { label: "Суккуб", value: "390" },
+ { label: "Супергерои", value: "305" },
+ { label: "Суперспособности", value: "300" },
+ { label: "Сын", value: "4" },
+ { label: "Твинцест", value: "188" },
+ { label: "Темное фэнтези", value: "293" },
+ { label: "Тентакли", value: "303" },
+ { label: "Тетя", value: "113" },
+ { label: "Тетя беременна от племянника", value: "376" },
+ { label: "Тетя и племянник", value: "377" },
+ { label: "Техника", value: "302" },
+ { label: "Технологии", value: "301" },
+ { label: "Тёща", value: "270" },
+ { label: "Тиран", value: "310" },
+ { label: "Трагическое прошлое", value: "251" },
+ { label: "Трансмиграция", value: "269" },
+ { label: "Трансформация", value: "317" },
+ { label: "Триллер", value: "344" },
+ { label: "Трусики", value: "165" },
+ { label: "Убийства", value: "258" },
+ { label: "Удача", value: "299" },
+ { label: "Ужасы", value: "375" },
+ { label: "Улучшение тела", value: "288" },
+ { label: "Умная главная героиня", value: "242" },
+ { label: "Умные персонажи", value: "257" },
+ { label: "Умный главный герой", value: "354" },
+ { label: "Университет", value: "323" },
+ { label: "Ученик", value: "83" },
+ { label: "Ф", value: "149" },
+ { label: "Фанатичная любовь", value: "366" },
+ { label: "Фанаты", value: "367" },
+ { label: "Фантастика", value: "295" },
+ { label: "Фанфик", value: "40" },
+ { label: "Фелляция", value: "22" },
+ { label: "Ферма", value: "191" },
+ { label: "Фетиш", value: "60" },
+ { label: "Флэш", value: "121" },
+ { label: "Футанария", value: "150" },
+ { label: "Фэнтези", value: "359" },
+ { label: "Хентай", value: "75" },
+ { label: "Хината", value: "110" },
+ { label: "Холодная главная героиня", value: "263" },
+ { label: "Черная вдова", value: "220" },
+ { label: "Черная Вдова", value: "175" },
+ { label: "Черный юмор", value: "374" },
+ { label: "Читерство", value: "45" },
+ { label: "Чтение мыслей", value: "227" },
+ { label: "Чудовища", value: "378" },
+ { label: "Шантаж", value: "129" },
+ { label: "Школа", value: "118" },
+ { label: "Школьная жизнь", value: "318" },
+ { label: "Шлюха", value: "32" },
+ { label: "Шоу-бизнес", value: "329" },
+ { label: "Шоу-бизнес", value: "172" },
+ { label: "Эксгибиционизм", value: "74" },
+ { label: "Элементы бдсм", value: "185" },
+ { label: "Эмма уотсон", value: "342" },
+ { label: "Эмма Уотсон", value: "169" },
+ { label: "Эротика", value: "36" },
+ { label: "Этти", value: "327" },
+ { label: "Юмор", value: "105" },
+ { label: "Яндере", value: "155" },
+ { label: "Bl", value: "125" },
+ { label: "Gl", value: "96" },
+ { label: "Harry potter", value: "190" },
+ { label: "Harry potter", value: "168" },
+ { label: "Hentai", value: "282" },
+ { label: "Marvel", value: "194" },
+ { label: "Marvel", value: "174" },
+ { label: "Milf", value: "167" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "adult",
+ label: "Возрастные ограничения",
+ values: [
+ { label: "Все", value: "0" },
+ { label: "Убрать 18+", value: "1" },
+ { label: "Только 18+", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/erolate/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/jaomix.js b/plugins/russian/jaomix.js
index 18907ed..9f72c47 100644
--- a/plugins/russian/jaomix.js
+++ b/plugins/russian/jaomix.js
@@ -1,25 +1,24 @@
-const cheerio = require('cheerio');
-const fetchApi = require('@libs/fetchApi');
-const fetchFile = require('@libs/fetchFile');
-const languages = require('@libs/languages');
-const Status = require('@libs/novelStatus');
-const FilterInputs = require('@libs/filterInputs');
+const cheerio = require("cheerio");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
-const pluginId = 'jaomix.ru';
-const sourceName = 'Jaomix';
+const pluginId = "jaomix.ru";
+const sourceName = "Jaomix";
+const baseUrl = "https://jaomix.ru";
-const baseUrl = 'https://jaomix.ru';
-
-async function popularNovels (page, { showLatestNovels, filters }) {
- let url = baseUrl + '/?searchrn&sortby=';
- url += filters?.sort ? filters?.sort : (showLatestNovels ? 'upd' : 'count');
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + "/?searchrn&sortby=";
+ url += showLatestNovels ? "upd" : filters?.sort || "count";
if (filters?.type?.length) {
- url += filters.type.map(i => `&lang[]=${i}`).join('');
+ url += filters.type.map((i) => `&lang[]=${i}`).join("");
}
if (filters?.genres?.length) {
- url += filters.genres.map(i => `&genre[]=${i}`).join('');
+ url += filters.genres.map((i) => `&genre[]=${i}`).join("");
}
url += `&page=${page}`;
@@ -27,28 +26,27 @@ async function popularNovels (page, { showLatestNovels, filters }) {
let body = await result.text();
const loadedCheerio = cheerio.load(body);
+
let novels = [];
-
loadedCheerio('div[class="block-home"] > div[class="one"]').each(function () {
- const novelName = loadedCheerio(this)
+ const name = loadedCheerio(this)
.find('div[class="img-home"] > a')
- .attr('title');
- const novelCover = loadedCheerio(this)
+ .attr("title");
+ const cover = loadedCheerio(this)
.find('div[class="img-home"] > a > img')
- .attr('src')
- .replace('-150x150', '');
- const novelUrl = loadedCheerio(this)
+ .attr("src")
+ .replace("-150x150", "");
+ const url = loadedCheerio(this)
.find('div[class="img-home"] > a')
- .attr('href');
+ .attr("href");
- const novel = { name: novelName, cover: novelCover, url: novelUrl };
- novels.push(novel);
+ novels.push({ name, cover, url });
});
return novels;
-};
+}
-async function parseNovelAndChapters (novelUrl) {
+async function parseNovelAndChapters(novelUrl) {
const result = await fetchApi(novelUrl);
const body = await result.text();
@@ -58,17 +56,17 @@ async function parseNovelAndChapters (novelUrl) {
};
novel.name = loadedCheerio('div[class="desc-book"] > h1').text().trim();
- novel.cover = loadedCheerio('div[class="img-book"] > img').attr('src');
+ novel.cover = loadedCheerio('div[class="img-book"] > img').attr("src");
novel.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('продолжается')
+ 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("продолжается")
? Status.Ongoing
: Status.Completed;
}
@@ -76,19 +74,19 @@ async function parseNovelAndChapters (novelUrl) {
const chapters = [];
- loadedCheerio('.download-chapter div.title').each(function () {
+ loadedCheerio(".download-chapter div.title").each(function () {
chapters.push({
- name: loadedCheerio(this).find('a').attr('title'),
- releaseTime: loadedCheerio(this).find('time').text(),
- url: loadedCheerio(this).find('a').attr('href'),
+ name: loadedCheerio(this).find("a").attr("title"),
+ releaseTime: loadedCheerio(this).find("time").text(),
+ url: loadedCheerio(this).find("a").attr("href"),
});
});
novel.chapters = chapters.reverse();
return novel;
-};
+}
-async function parseChapter (chapterUrl) {
+async function parseChapter(chapterUrl) {
const result = await fetchApi(chapterUrl);
const body = await result.text();
const loadedCheerio = cheerio.load(body);
@@ -97,9 +95,9 @@ async function parseChapter (chapterUrl) {
const chapterText = loadedCheerio('div[class="entry-content"]').html();
return chapterText;
-};
+}
-async function searchNovels (searchTerm) {
+async function searchNovels(searchTerm) {
const url = `${baseUrl}/?searchrn=${searchTerm}&but=Поиск по названию&sortby=upd`;
const result = await fetchApi(url);
let body = await result.text();
@@ -107,111 +105,111 @@ async function searchNovels (searchTerm) {
let novels = [];
loadedCheerio('div[class="block-home"] > div[class="one"]').each(function () {
- const novelName = loadedCheerio(this)
+ const name = loadedCheerio(this)
.find('div[class="img-home"] > a')
- .attr('title');
- const novelCover = loadedCheerio(this)
+ .attr("title");
+ const cover = loadedCheerio(this)
.find('div[class="img-home"] > a > img')
- .attr('src')
- .replace('-150x150', '');
- const novelUrl = loadedCheerio(this)
+ .attr("src")
+ .replace("-150x150", "");
+ const url = loadedCheerio(this)
.find('div[class="img-home"] > a')
- .attr('href');
+ .attr("href");
- const novel = {name: novelName, cover: novelCover, url: novelUrl };
- novels.push(novel);
+ novels.push({ name, cover, url });
});
return novels;
-};
+}
const filters = [
{
- key: 'sort',
- label: 'Сортировка',
+ key: "sort",
+ label: "Сортировка",
values: [
- { label: 'Имя', value: 'alphabet' },
- { label: 'Просмотры', value: 'count' },
- { label: 'Дате добавления', value: 'new' },
- { label: 'Дате обновления', value: 'upd' },
+ { label: "Имя", value: "alphabet" },
+ { label: "Просмотры", value: "count" },
+ { label: "Дате добавления", value: "new" },
+ { label: "Дате обновления", value: "upd" },
],
inputType: FilterInputs.Picker,
},
{
- key: 'type',
- label: 'Тип',
+ key: "type",
+ label: "Тип",
values: [
- { label: 'Английский', value: 'Английский' },
- { label: 'Китайский', value: 'Китайский' },
- { label: 'Корейский', value: 'Корейский' },
- { label: 'Японский', value: 'Японский' },
+ { label: "Английский", value: "Английский" },
+ { label: "Китайский", value: "Китайский" },
+ { label: "Корейский", value: "Корейский" },
+ { label: "Японский", value: "Японский" },
],
inputType: FilterInputs.Checkbox,
},
{
- key: 'genres',
- label: 'Жанры',
+ key: "genres",
+ label: "Жанры",
values: [
- { label: 'Adult', value: 'Adult' },
- { label: 'Ecchi', value: 'Ecchi' },
- { label: 'Josei', value: 'Josei' },
- { label: 'Lolicon', value: 'Lolicon' },
- { label: 'Mature', value: 'Mature' },
- { label: 'Sci-fi', value: 'Sci-fi' },
- { label: 'Shoujo', value: 'Shoujo' },
- { label: 'Wuxia', value: 'Wuxia' },
- { label: 'Xianxia', value: 'Xianxia' },
- { label: 'Xuanhuan', value: 'Xuanhuan' },
- { label: 'Yaoi', value: 'Yaoi' },
- { 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: "Гарем", 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" },
],
inputType: FilterInputs.Checkbox,
},
];
module.exports = {
- id: pluginId,
- name: sourceName,
- site: baseUrl,
- version: '1.0.0',
- lang: languages.Russian,
- icon: 'src/ru/jaomix/icon.png',
- filters,
- popularNovels,
- parseNovelAndChapters,
- parseChapter,
- searchNovels,
- fetchImage: fetchFile,
-};
\ No newline at end of file
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/jaomix/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/novelTL.js b/plugins/russian/novelTL.js
new file mode 100644
index 0000000..ac32f8c
--- /dev/null
+++ b/plugins/russian/novelTL.js
@@ -0,0 +1,876 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+const defaultCoverUri =
+ "https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true";
+
+const pluginId = "TL";
+const sourceName = "NovelTL";
+const baseUrl = "https://novel.tl";
+
+async function popularNovels(page, { filters }) {
+ const result = await fetchApi(baseUrl + "/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: baseUrl,
+ 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 || [],
+ genres: filters?.genres || [],
+ },
+ hostname: "novel.tl",
+ limit: 40,
+ page,
+ },
+ }),
+ });
+
+ const json = await result.json();
+ let novels = [];
+
+ json?.data?.projects?.content?.forEach((novel) =>
+ novels.push({
+ name: novel.title,
+ url: "https://" + novel.fullUrl,
+ cover: novel?.covers?.[0]?.url
+ ? baseUrl + novel.covers[0].url
+ : defaultCoverUri,
+ })
+ );
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ const result = await fetchApi(baseUrl + "/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: baseUrl,
+ 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();
+
+ let novel = {
+ url: novelUrl,
+ name: json.data.project.title,
+ cover: json.data.project?.covers?.[0]?.url
+ ? baseUrl + json.data.project.covers[0].url
+ : defaultCoverUri,
+ summary: json.data.project?.annotation?.text,
+ status:
+ json.data.project.translationStatus === "active"
+ ? Status.Ongoing
+ : Status.Completed,
+ };
+
+ let genres = []
+ .concat(json.data.project.tags, json.data.project.genres)
+ .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 || "");
+ } else if (person.role == "illustrator" && person.name.firstName) {
+ novel.artist =
+ person.name.firstName + " " + (person.name?.lastName || "");
+ }
+ });
+
+ let novelChapters = [];
+ json.data.project.subprojects.content.forEach((work) =>
+ work.volumes.content.forEach((volume) =>
+ volume.chapters.forEach((chapter) =>
+ chapter?.published &&
+ novelChapters.push({
+ name: volume.shortName + " " + chapter.title,
+ url: "https://" + chapter.fullUrl,
+ releaseTime: dayjs(chapter.publishDate).format("LLL"),
+ })
+ )
+ )
+ );
+
+ novel.chapters = novelChapters;
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ const result = await fetchApi(baseUrl + "/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: baseUrl,
+ body: JSON.stringify({
+ query: "query($url:String){chapter(chapter:{fullUrl:$url}){text{text}}}",
+ variables: {
+ url: chapterUrl,
+ },
+ }),
+ });
+ const json = await result.json();
+
+ const loadedCheerio = cheerio.load(json.data.chapter.text.text);
+ loadedCheerio("p > a[href]").each(function () {
+ let url = baseUrl + loadedCheerio(this).attr("href");
+ if (!url.startsWith("http")) {
+ url = baseUrl + url;
+ }
+ loadedCheerio(this).find("picture").remove();
+ loadedCheerio(this).removeAttr("href");
+ loadedCheerio(``).appendTo(this);
+ });
+
+ const chapterText = loadedCheerio.html();
+ return chapterText;
+}
+
+async function searchNovels(searchTerm) {
+ const result = await fetchApi(baseUrl + "/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.baseUrl,
+ 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: 1,
+ },
+ }),
+ });
+ const json = await result.json();
+
+ let novels = [];
+ json?.data?.projects?.content?.forEach((novel) =>
+ novels.push({
+ name: novel.title,
+ url: "https://" + novel.fullUrl,
+ cover: novel?.covers?.[0]?.url
+ ? baseUrl + novel.covers[0].url
+ : defaultCoverUri,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "tags",
+ label: "Тэги",
+ values: [
+ { 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 },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "genres",
+ label: "Жанры",
+ values: [
+ { 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 },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/noveltl/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/ranobehub.js b/plugins/russian/ranobehub.js
index 044f702..1cd9e86 100644
--- a/plugins/russian/ranobehub.js
+++ b/plugins/russian/ranobehub.js
@@ -1,53 +1,48 @@
-const dayjs = require('dayjs');
-const cheerio = require('cheerio');
-const Status = require('@libs/novelStatus');
-const fetchApi = require('@libs/fetchApi');
-const fetchFile = require('@libs/fetchFile');
-const languages = require('@libs/languages');
-const FilterInputs = require('@libs/filterInputs');
+const dayjs = require("dayjs");
+const cheerio = require("cheerio");
+const Status = require("@libs/novelStatus");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const FilterInputs = require("@libs/filterInputs");
const pluginId = "RNBH.org";
+const sourceName = "RanobeHub";
+const baseUrl = "https://ranobehub.org/";
-const sourceName = 'RanobeHub';
-
-const baseUrl = 'https://ranobehub.org/';
-
-async function popularNovels (page, { showLatestNovels, filters }){
+async function popularNovels(page, { showLatestNovels, filters }) {
let url = baseUrl + `api/search?page=${page}&sort=`;
- url += filters?.sort ? filters?.sort :
- (showLatestNovels ? 'last_chapter_at' : 'computed_rating');
- url += '&status=' + (filters?.status ? filters?.status : '0');
+ url += showLatestNovels ? "last_chapter_at" : filters?.sort || "computed_rating";
+ url += "&status=" + (filters?.status ? filters?.status : "0");
if (filters?.country?.length) {
- url += '&country=' + filters?.country.join(',');
+ url += "&country=" + filters?.country.join(",");
}
- let tags = [].concat(filters?.tags, filters?.events).filter(t => t);
+ let tags = [].concat(filters?.tags, filters?.events).filter((t) => t);
if (tags?.length) {
- url += '&tags:positive=' + tags.join(',');
+ url += "&tags:positive=" + tags.join(",");
}
- url += '&take=40';
+ url += "&take=40";
const result = await fetchApi(url);
const body = await result.json();
let novels = [];
-
- body.resource.forEach(novel => {
- const novelName = novel.names.rus;
- const novelCover = novel.poster.medium;
- const novelUrl = novel.url;
-
+ body.resource.forEach((novel) =>
novels.push({
- name: novelName,
- cover: novelCover,
- url: novelUrl,
- });
- });
+ name: novel.names.rus,
+ cover: novel.poster.medium,
+ url: novel.url,
+ })
+ );
+
return novels;
-};
-
-async function parseNovelAndChapters (novelUrl) {
- const novelId = novelUrl.substring('https://ranobehub.org/ranobe/'.length).split('-')[0];
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ const novelId = novelUrl
+ .substring("https://ranobehub.org/ranobe/".length)
+ .split("-")[0];
const result = await fetchApi(`${baseUrl}api/ranobe/${novelId}`);
const json = await result.json();
@@ -57,19 +52,19 @@ async function parseNovelAndChapters (novelUrl) {
name: json.data.names.rus,
cover: json.data.posters.medium,
summary: json.data.description,
- author: json.data?.authors[0]?.name_eng || '',
- status: json.data.status.title.includes('процессе')
+ author: json.data?.authors[0]?.name_eng || "",
+ status: json.data.status.title.includes("процессе")
? Status.Ongoing
: Status.Completed,
};
let tags = []
.concat(json.data.tags.events, json.data.tags.genres)
- .map(item => item?.names?.rus || item?.names?.eng || item?.title)
- .filter(item => item);
+ .map((item) => item?.names?.rus || item?.names?.eng || item?.title)
+ .filter((item) => item);
if (tags.length > 0) {
- novel.genres = tags.join(', ');
+ novel.genres = tags.join(", ");
}
let novelChapters = [];
@@ -79,42 +74,45 @@ async function parseNovelAndChapters (novelUrl) {
const chaptersRaw = await fetchApi(fetchChaptersUrl);
const chaptersJSON = await chaptersRaw.json();
- chaptersJSON.volumes.forEach(volume =>
- volume.chapters.forEach(chapter =>
+ chaptersJSON.volumes.forEach((volume) =>
+ volume.chapters.forEach((chapter) =>
novelChapters.push({
name: chapter.name,
url: chapter.url,
- releaseTime: dayjs(parseInt(chapter.changed_at, 10) * 1000).format(
- 'LLL',
- ),
- }),
- ),
+ releaseTime: dayjs(parseInt(chapter.changed_at, 10) * 1000).format("LLL"),
+ })
+ )
);
novel.chapters = novelChapters;
-
return novel;
-};
+}
-async function parseChapter (chapterUrl) {
+async function parseChapter(chapterUrl) {
const result = await fetchApi(chapterUrl);
const body = await result.text();
let loadedCheerio = cheerio.load(body);
- let chapterText = loadedCheerio(
- 'body > div.pusher.container_main > div:nth-child(5) > div:nth-child(1)',
- ).html();
+ loadedCheerio(".chapter-hoticons").remove();
+ 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 = loadedCheerio("div.text:nth-child(1)").html();
// Remove script tags
chapterText = chapterText?.replace(
/<\s*script[^>]*>[\s\S]*?<\/script>/gim,
- '',
+ ""
);
return chapterText;
-};
+}
-async function searchNovels (searchTerm) {
+async function searchNovels(searchTerm) {
const url = `${baseUrl}api/fulltext/global?query=${searchTerm}&take=5`;
const result = await fetchApi(url);
@@ -123,993 +121,997 @@ async function searchNovels (searchTerm) {
let novels = [];
data
- .find(item => item.meta.key === 'ranobe')
- ?.data.forEach(novel =>
+ .find((item) => item.meta.key === "ranobe")
+ ?.data.forEach((novel) =>
novels.push({
name: novel.names.rus,
- 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'),
- }),
+ 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;
-};
+}
const filters = [
{
- key: 'sort',
- label: 'Сортировка',
+ key: "sort",
+ label: "Сортировка",
values: [
- { 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' },
+ { 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" },
],
inputType: FilterInputs.Picker,
},
{
- key: 'status',
- label: 'Статус перевода',
+ key: "status",
+ label: "Статус перевода",
values: [
- { label: 'Любой', value: '' },
- { label: 'В процессе', value: '1' },
- { label: 'Завершено', value: '2' },
- { label: 'Заморожено', value: '3' },
- { label: 'Неизвестно', value: '4' },
+ { label: "Любой", value: "" },
+ { label: "В процессе", value: "1" },
+ { label: "Завершено", value: "2" },
+ { label: "Заморожено", value: "3" },
+ { label: "Неизвестно", value: "4" },
],
inputType: FilterInputs.Picker,
},
{
- key: 'country',
- label: 'Тип',
+ key: "country",
+ label: "Тип",
values: [
- { label: 'Китай', value: '2' },
- { label: 'Корея', value: '3' },
- { label: 'США', value: '4' },
- { label: 'Япония', value: '1' },
+ { label: "Китай", value: "2" },
+ { label: "Корея", value: "3" },
+ { label: "США", value: "4" },
+ { label: "Япония", value: "1" },
],
inputType: FilterInputs.Checkbox,
},
{
- key: 'events',
- label: 'События',
+ key: "events",
+ label: "События",
values: [
- { 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: "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',
+ "Большая разница в возрасте между героем и его любовным интересом",
+ 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: "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: "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: '655' },
- { label: 'Главный герой играет роль', value: '396' },
- { label: 'Главный герой носит очки', value: '637' },
- { label: 'Главный герой пацифист', value: '675' },
- { label: 'Главный герой с несколькими телами', value: '628' },
- { label: 'Главный герой силен с самого начала', value: '45' },
- { 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: '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: "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: "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: '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: "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',
+ "Магическое пространство/измерение, доступное не всем персонажам",
+ 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: "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: "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: "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: "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: '664' },
- { 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: '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: '[Награжденная работа]', value: '611' },
- { label: 'Ёкаи', value: '516' },
- { label: '18+', value: '338' },
- { 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: '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: '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' },
+ { 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" },
],
inputType: FilterInputs.Checkbox,
},
{
- key: 'tags',
- label: 'Жанры',
+ key: "tags",
+ label: "Жанры",
values: [
- { 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: '15' },
- { label: 'Сёдзё-ай', value: '23' },
- { label: 'Сёнэн', value: '189' },
- { label: 'Сёнэн-ай', value: '680' },
- { label: 'Сверхъестественное', value: '20' },
- { 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' },
+ { 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" },
],
inputType: FilterInputs.Checkbox,
},
@@ -1118,9 +1120,9 @@ const filters = [
module.exports = {
id: pluginId,
name: sourceName,
- version: '1.0.0',
+ version: "1.0.0",
site: baseUrl,
- icon: 'src/ru/ranobehub/icon.png',
+ icon: "src/ru/ranobehub/icon.png",
lang: languages.Russian,
popularNovels,
parseNovelAndChapters,
@@ -1128,4 +1130,4 @@ module.exports = {
searchNovels,
fetchImage: fetchFile,
filters,
-};
\ No newline at end of file
+};
diff --git a/plugins/russian/ranobelib.js b/plugins/russian/ranobelib.js
new file mode 100644
index 0000000..545ced4
--- /dev/null
+++ b/plugins/russian/ranobelib.js
@@ -0,0 +1,402 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+
+const pluginId = "RLIB";
+const sourceName = "RanobeLib";
+const baseUrl = "https://ranobelib.me";
+var ui = null;
+
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = `${baseUrl}/manga-list?sort=`;
+ url += showLatestNovels ? "last_chapter_at" : filters?.sort || "rate";
+ url += "&dir=" + (filters?.order || "desc");
+
+ if (filters?.type?.length) {
+ url += filters.type.map((i) => `&types[]=${i}`).join("");
+ }
+
+ if (filters?.format?.length) {
+ url += filters.format.map((i) => `&format[include][]=${i}`).join("");
+ }
+
+ if (filters?.status?.length) {
+ url += filters.status.map((i) => `&status[]=${i}`).join("");
+ }
+
+ if (filters?.statuss?.length) {
+ url += filters.statuss.map((i) => `&manga_status[]=${i}`).join("");
+ }
+
+ if (filters?.genres?.length) {
+ url += filters.genres.map((i) => `&genres[include][]=${i}`).join("");
+ }
+
+ if (filters?.tags?.length) {
+ url += filters.tags.map((i) => `&tags[include][]=${i}`).join("");
+ }
+
+ url += "&page=" + page;
+
+ const result = await fetchApi(url);
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+ ui = loadedCheerio("a.header-right-menu__item")
+ .attr("href")
+ ?.replace?.(/[^0-9]/g, "");
+
+ let novels = [];
+ 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");
+
+ novels.push({ name, cover, url });
+ });
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ const result = await fetchApi(novelUrl);
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+
+ let novel = {
+ 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() ===
+ "Продолжается"
+ ? Status.Ongoing
+ : Status.Completed;
+ } else if (name === "Автор") {
+ novel.author = loadedCheerio(this).find("div:nth-child(2)").text().trim();
+ } else if (name === "Художник") {
+ novel.artist = loadedCheerio(this).find("div:nth-child(2)").text().trim();
+ }
+ });
+
+ let chapters = [];
+
+ let chaptersJson = body.match(
+ /window.__DATA__ = [\s\S]*?window._SITE_COLOR_/gm
+ );
+
+ chaptersJson = chaptersJson?.[0]
+ ?.replace("window.__DATA__ = ", "")
+ ?.replace("window._SITE_COLOR_", "")
+ ?.trim()
+ ?.slice(0, -1);
+
+ chaptersJson = JSON.parse(chaptersJson);
+ 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:
+ `${baseUrl}/${chaptersJson.manga.slug}/v${chapter.chapter_volume}/c${chapter.chapter_number}?bid=` +
+ (chapter?.branch_id || ""),
+ })
+ );
+
+ novel.chapters = chapters.reverse();
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ const result = await fetchApi(chapterUrl + (ui ? `&ui=${ui}` : ""));
+ const body = await result.text();
+
+ const loadedCheerio = cheerio.load(body);
+
+ loadedCheerio(".reader-container img").each(function () {
+ const url =
+ loadedCheerio(this).attr("data-src") || loadedCheerio(this).attr("src");
+ if (!url?.startsWith("http")) {
+ loadedCheerio(this).attr("src", baseUrl + url);
+ } else {
+ loadedCheerio(this).attr("src", url);
+ }
+ loadedCheerio(this).removeAttr("data-src");
+ });
+
+ const chapterText = loadedCheerio(".reader-container").html();
+
+ return chapterText;
+}
+
+async function searchNovels(searchTerm) {
+ const result = await fetchApi(`${baseUrl}/search?q=${searchTerm}&type=manga`);
+ const body = await result.json();
+
+ let novels = [];
+ body.forEach((novel) =>
+ novels.push({
+ name: novel?.rus_name || novel.name,
+ cover: novel.coverImage,
+ url: novel?.href || baseUrl + "/" + novel.slug,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "Рейтинг", value: "rate" },
+ { label: "Имя", value: "name" },
+ { label: "Просмотры", value: "views" },
+ { label: "Дате добавления", value: "created_at" },
+ { label: "Дате обновления", value: "last_chapter_at" },
+ { label: "Количество глав", value: "chap_count" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "order",
+ label: "Порядок",
+ values: [
+ { label: "По убыванию", value: "desc" },
+ { label: "По возрастанию", value: "asc" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "type",
+ label: "Тип",
+ values: [
+ { label: "Авторский", value: "14" },
+ { label: "Английский", value: "13" },
+ { label: "Китай", value: "12" },
+ { label: "Корея", value: "11" },
+ { label: "Фанфик", value: "15" },
+ { label: "Япония", value: "10" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "format",
+ label: "Формат выпуска",
+ values: [
+ { label: "4-кома (Ёнкома)", value: "1" },
+ { label: "В цвете", value: "4" },
+ { label: "Веб", value: "6" },
+ { label: "Вебтун", value: "7" },
+ { label: "Додзинси", value: "3" },
+ { label: "Сборник", value: "2" },
+ { label: "Сингл", value: "5" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "status",
+ label: "Статус перевода",
+ values: [
+ { label: "Продолжается", value: "1" },
+ { label: "Завершен", value: "2" },
+ { label: "Заморожен", value: "3" },
+ { label: "Заброшен", value: "4" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "statuss",
+ label: "Статус тайтла",
+ values: [
+ { label: "Онгоинг", value: "1" },
+ { label: "Завершён", value: "2" },
+ { label: "Анонс", value: "3" },
+ { label: "Приостановлен", value: "4" },
+ { label: "Выпуск прекращён", value: "5" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "genres",
+ label: "Жанры",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "tags",
+ label: "Теги",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/ranobelib/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/ranoberf.js b/plugins/russian/ranoberf.js
index eb24c41..e795d68 100644
--- a/plugins/russian/ranoberf.js
+++ b/plugins/russian/ranoberf.js
@@ -1,147 +1,147 @@
-const cheerio = require('cheerio');
-const dayjs = require('dayjs');
-const fetchApi = require('@libs/fetchApi');
-const fetchFile = require('@libs/fetchFile');
-const languages = require('@libs/languages');
-const Status = require('@libs/novelStatus');
-const FilterInputs = require('@libs/filterInputs');
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
const defaultCoverUri =
- 'https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true';
-
+ "https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true";
const pluginId = "RNRF";
-const sourceName = 'РанобэРФ';
+const sourceName = "РанобэРФ";
+const baseUrl = "https://ранобэ.рф";
-const baseUrl = 'https://ранобэ.рф';
-
-async function popularNovels (page, { showLatestNovels, filters }) {
- let url = baseUrl + '/books?order=';
- url += filters?.sort ? filters?.sort : (showLatestNovels ? 'lastPublishedChapter' : 'popular');
- url += '&page=' + page;
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + "/books?order=";
+ url += showLatestNovels ? "lastPublishedChapter" : filters?.sort || "popular";
+ url += "&page=" + page;
const result = await fetchApi(url);
const body = await result.text();
const loadedCheerio = cheerio.load(body);
- let json = loadedCheerio('#__NEXT_DATA__').html();
+ let json = loadedCheerio("#__NEXT_DATA__").html();
json = JSON.parse(json);
- let novels = [];
- json.props.pageProps.totalData.items.forEach(item => {
- const novelName = item.title;
- const novelUrl = baseUrl + '/' + item.slug;
- const novelCover = item?.verticalImage?.url
- ? baseUrl + item.verticalImage.url
- : defaultCoverUri;
- novels.push({ name: novelName, cover: novelCover, url: novelUrl });
- });
+ let novels = [];
+ json.props.pageProps.totalData.items.forEach((novel) =>
+ novels.push({
+ name: novel.title,
+ cover: novel?.verticalImage?.url
+ ? baseUrl + novel.verticalImage.url
+ : defaultCoverUri,
+ url: baseUrl + "/" + novel.slug,
+ })
+ );
return novels;
-};
+}
-async function parseNovelAndChapters (novelUrl) {
+async function parseNovelAndChapters(novelUrl) {
const result = await fetchApi(novelUrl);
const body = await result.text();
const loadedCheerio = cheerio.load(body);
- let json = loadedCheerio('#__NEXT_DATA__').html();
- json = JSON.parse(json);
+ const json = loadedCheerio("#__NEXT_DATA__").html();
+ const book = JSON.parse(json).props.pageProps.book;
let novel = {
url: novelUrl,
- name: json.props.pageProps.book.title,
- cover: json.props.pageProps.book?.verticalImage?.url
- ? baseUrl + json.props.pageProps.book.verticalImage.url
+ name: book.title,
+ cover: book?.verticalImage?.url
+ ? baseUrl + book.verticalImage.url
: defaultCoverUri,
- summary: json.props.pageProps.book.description,
- author: json.props.pageProps.book?.author || '',
- genres: json.props.pageProps.book.genres.map(item => item.title).join(','),
- status: json.props.pageProps.book.additionalInfo.includes('Активен')
+ summary: book.description,
+ author: book?.author || "",
+ genres: book.genres.map((item) => item.title).join(", "),
+ status: book.additionalInfo.includes("Активен")
? Status.Ongoing
: Status.Completed,
};
let chapters = [];
- json.props.pageProps.book.chapters.forEach(item => {
- const chapterName = item.title;
- const releaseDate = dayjs(item.publishedAt).format('LLL');
- const chapterUrl = baseUrl + item.url;
-
- if (!item.isDonate || item.isUserPaid) {
- chapters.push({ name: chapterName, releaseTime: releaseDate, url: chapterUrl });
+ book.chapters.forEach((chapter) => {
+ if (!chapter.isDonate || chapter.isUserPaid) {
+ chapters.push({
+ name: chapter.title,
+ releaseTime: dayjs(chapter.publishedAt).format("LLL"),
+ url: baseUrl + chapter.url,
+ });
}
});
novel.chapters = chapters.reverse();
return novel;
-};
+}
-async function parseChapter (chapterUrl) {
+async function parseChapter(chapterUrl) {
const result = await fetchApi(chapterUrl);
const body = await result.text();
const loadedCheerio = cheerio.load(body);
- let json = loadedCheerio('#__NEXT_DATA__').html();
+ let json = loadedCheerio("#__NEXT_DATA__").html();
json = JSON.parse(json);
let temp = cheerio.load(json.props.pageProps.chapter.content.text);
- temp('img').each(function () {
- if (!loadedCheerio(this).attr('src')?.startsWith('http')) {
- let src = loadedCheerio(this).attr('src');
- loadedCheerio(this).attr('src', baseUrl + src);
+ temp("img").each(function () {
+ if (!loadedCheerio(this).attr("src")?.startsWith("http")) {
+ const src = loadedCheerio(this).attr("src");
+ loadedCheerio(this).attr("src", baseUrl + src);
}
});
const chapterText = temp.html();
return chapterText;
-};
+}
-async function searchNovels (searchTerm) {
+async function searchNovels(searchTerm) {
const url = `${baseUrl}/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();
let novels = [];
- body.items.forEach(item => {
- const novelName = item.title;
- const novelUrl = baseUrl + '/' + item.slug;
- const novelCover = item?.verticalImage?.url
- ? baseUrl + item.verticalImage.url
- : defaultCoverUri;
- novels.push({ name: novelName, cover: novelCover, url: novelUrl });
- });
+ body.items.forEach((novel) =>
+ novels.push({
+ name: novel.title,
+ cover: novel?.verticalImage?.url
+ ? baseUrl + novel.verticalImage.url
+ : defaultCoverUri,
+ url: baseUrl + "/" + novel.slug,
+ })
+ );
return novels;
-};
+}
const filters = [
{
- key: 'sort',
- label: 'Сортировка',
+ key: "sort",
+ label: "Сортировка",
values: [
- { label: 'Рейтинг', value: 'popular' },
- { label: 'Дате добавления', value: 'new' },
- { label: 'Дате обновления', value: 'lastPublishedChapter' },
- { label: 'Законченные', value: 'completed' },
+ { label: "Рейтинг", value: "popular" },
+ { label: "Дате добавления", value: "new" },
+ { label: "Дате обновления", value: "lastPublishedChapter" },
+ { label: "Законченные", value: "completed" },
],
inputType: FilterInputs.Picker,
},
];
module.exports = {
- id: pluginId,
- name: sourceName,
- site: baseUrl,
- version: '1.0.0',
- lang: languages.Russian,
- icon: 'src/ru/ranoberf/icon.png',
- filters,
- popularNovels,
- parseNovelAndChapters,
- parseChapter,
- searchNovels,
- fetchImage: fetchFile,
-};
\ No newline at end of file
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/ranoberf/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/renovels.js b/plugins/russian/renovels.js
new file mode 100644
index 0000000..aa36a42
--- /dev/null
+++ b/plugins/russian/renovels.js
@@ -0,0 +1,936 @@
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+
+const pluginId = "ReN";
+const sourceName = "Renovels";
+const baseUrl = "https://renovels.org";
+
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + "/api/search/catalog/?count=30&ordering=";
+ url += filters?.order ? filters?.order?.replace("+", "") : "-";
+ url += showLatestNovels ? "chapter_date" : filters?.sort || "rating";
+
+ if (filters?.type?.length) {
+ url += filters.type.map((i) => `&types=${i}`).join("");
+ }
+
+ if (filters?.statuss?.length) {
+ url += filters?.statuss.map((i) => `&status=${i}`).join("");
+ }
+
+ if (filters?.genres?.length) {
+ url += filters.genres.map((i) => `&genres=${i}`).join("");
+ }
+
+ if (filters?.categories?.length) {
+ url += filters.categories.map((i) => `&categories=${i}`).join("");
+ }
+
+ url += "&page=" + page;
+
+ const result = await fetchApi(url);
+ let body = await result.json();
+
+ let novels = [];
+
+ body.content.forEach((novel) =>
+ novels.push({
+ name: novel.rus_name,
+ cover: baseUrl + (novel.img?.high || novel.img?.mid || novel.img.low),
+ url: baseUrl + "/novel/" + novel.dir,
+ })
+ );
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ let novelID = novelUrl.split("/")[4];
+ const result = await fetchApi(baseUrl + "/api/titles/" + novelID);
+ let body = await result.json();
+
+ let novel = {
+ url: novelUrl,
+ name: body.content.rus_name,
+ summary: body.content.description,
+ cover:
+ baseUrl +
+ (body.content.img?.high || body.content.img?.mid || body.content.img.low),
+ status:
+ body.content.status.name === "Продолжается"
+ ? Status.Ongoing
+ : Status.Completed,
+ };
+
+ let tags = []
+ .concat(body.content.genres, body.content.categories, [])
+ .map((item) => item.name);
+
+ if (tags.length > 0) {
+ novel.genres = tags.join(", ");
+ }
+
+ let all = (body.content.count_chapters / 100 + 1) ^ 0;
+ let chapters = [];
+
+ for (let i = 0; i < all; i++) {
+ let chapterResult = await fetchApi(
+ baseUrl +
+ "/api/titles/chapters/?branch_id=" +
+ body.content.branches[0].id +
+ "&count=100&page=" +
+ (i + 1)
+ );
+ let volumes = await chapterResult.json();
+
+ 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: `${baseUrl}/novel/${novelID}/${chapter.id}/`,
+ });
+ }
+ });
+ }
+
+ novel.chapters = chapters.reverse();
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ let url = baseUrl + "/api/titles/chapters/" + chapterUrl.split("/")[5];
+ const result = await fetchApi(url);
+ const body = await result.json();
+
+ return body.content.content;
+}
+
+async function searchNovels(searchTerm) {
+ const url = `${baseUrl}/api/search/?query=${searchTerm}&count=100&field=titles`;
+ const result = await fetchApi(url);
+ let body = await result.json();
+ let novels = [];
+
+ body.content.forEach((novel) =>
+ novels.push({
+ name: novel.rus_name,
+ cover: baseUrl + (novel.img?.high || novel.img?.mid || novel.img.low),
+ url: baseUrl + "/novel/" + novel.dir,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "Рейтинг", value: "rating" },
+ { label: "Просмотры", value: "views" },
+ { label: "Лайкам", value: "votes" },
+ { label: "Дате добавления", value: "id" },
+ { label: "Дате обновления", value: "chapter_date" },
+ { label: "Количество глав", value: "count_chapters" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "order",
+ label: "Порядок",
+ values: [
+ { label: "По убыванию", value: "-" }, // desc
+ { label: "По возрастанию", value: "+" }, // asc
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "type",
+ label: "Тип",
+ values: [
+ { label: "Авторское", value: "1" },
+ { label: "Другое", value: "7" },
+ { label: "Запад", value: "5" },
+ { label: "Китай", value: "4" },
+ { label: "Корея", value: "3" },
+ { label: "Фанфики", value: "6" },
+ { label: "Япония", value: "2" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "statuss",
+ label: "Статус тайтла",
+ values: [
+ { label: "Закончен", value: "0" },
+ { label: "Продолжается", value: "1" },
+ { label: "Заморожен", value: "2" },
+ { label: "Нет переводчика", value: "3" },
+ { label: "Анонс", value: "4" },
+ { label: "Лицензировано", value: "5" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "genres",
+ label: "Жанры",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "categories",
+ label: "Категории",
+ values: [
+ { 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" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/renovels/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/plugins/russian/rulate.js b/plugins/russian/rulate.js
new file mode 100644
index 0000000..d91e2b9
--- /dev/null
+++ b/plugins/russian/rulate.js
@@ -0,0 +1,1442 @@
+const cheerio = require("cheerio");
+const dayjs = require("dayjs");
+const fetchApi = require("@libs/fetchApi");
+const fetchFile = require("@libs/fetchFile");
+const languages = require("@libs/languages");
+const Status = require("@libs/novelStatus");
+const FilterInputs = require("@libs/filterInputs");
+const defaultCoverUri =
+ "https://github.com/LNReader/lnreader-sources/blob/main/icons/src/coverNotAvailable.jpg?raw=true";
+
+const pluginId = "RULATE";
+const sourceName = "Rulate";
+const baseUrl = "https://tl.rulate.ru";
+
+async function popularNovels(page, { showLatestNovels, filters }) {
+ let url = baseUrl + "/search?t=&cat=2";
+ url += "&sort=" + showLatestNovels ? "4" : filters?.sort || "6";
+ url += "&type=" + filters?.type || "0";
+ url += "&atmosphere=" + filters?.atmosphere || "0";
+ url += "&adult=" + filters?.adult || "0";
+
+ if (filters?.genres?.length) {
+ url += filters.genres.map((i) => `&genres[]=${i}`).join("");
+ }
+
+ if (filters?.tags?.length) {
+ url += filters.tags.map((i) => `&tags[]=${i}`).join("");
+ }
+
+ if (filters?.trash?.length) {
+ url += filters.trash.map((i) => `&${i}=1`);
+ }
+
+ url += `&Book_page=${page}`;
+
+ const result = await fetchApi(url);
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(body);
+
+ let novels = [];
+
+ loadedCheerio(
+ 'ul[class="search-results"] > li:not([class="ad_type_catalog"])'
+ ).each(function () {
+ novels.push({
+ name: loadedCheerio(this).find("p > a").text(),
+ cover: baseUrl + loadedCheerio(this).find("img").attr("src"),
+ url: baseUrl + loadedCheerio(this).find("p > a").attr("href"),
+ });
+ });
+
+ return novels;
+}
+
+async function parseNovelAndChapters(novelUrl) {
+ let result = await fetchApi(novelUrl);
+ if (result.url.includes("mature?path=")) {
+ const formData = new FormData();
+ formData.append("path", novelUrl);
+ formData.append("ok", "Да");
+
+ await fetchApi(result.url, {
+ method: "POST",
+ body: formData,
+ });
+
+ result = await fetchApi(novelUrl);
+ }
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(body);
+
+ let novel = {
+ url: novelUrl,
+ };
+
+ novel.name = loadedCheerio('div[class="container"] > div > div > h1')
+ .text()
+ .trim();
+ novel.cover =
+ baseUrl + loadedCheerio('div[class="images"] > div img').attr("src");
+ novel.summary = loadedCheerio("#Info > div:nth-child(3)").html();
+ let genre = [];
+
+ loadedCheerio('div[class="span5"] > p').each(function () {
+ switch (loadedCheerio(this).find("strong").text()) {
+ case "Автор:":
+ novel.author = loadedCheerio(this).find("em > a").text().trim();
+ break;
+ case "Выпуск:":
+ novel.status =
+ loadedCheerio(this).find("em").text().trim() === "продолжается"
+ ? Status.Ongoing
+ : Status.Completed;
+ break;
+ case "Тэги:":
+ loadedCheerio(this)
+ .find("em > a")
+ .each(function () {
+ genre.push(loadedCheerio(this).text());
+ });
+ break;
+ case "Жанры:":
+ loadedCheerio(this)
+ .find("em > a")
+ .each(function () {
+ genre.push(loadedCheerio(this).text());
+ });
+ break;
+ }
+ });
+
+ if (genre?.length) {
+ novel.genres = genre.reverse().join(",");
+ }
+
+ let chapters = [];
+ loadedCheerio("table > tbody > tr.chapter_row").each(function () {
+ const releaseTime = loadedCheerio(this)
+ .find("td > span")
+ .attr("title")
+ ?.trim();
+
+ if (
+ loadedCheerio(this).find('td > span[class="disabled"]').length < 1 &&
+ releaseTime
+ ) {
+ const name = loadedCheerio(this).find('td[class="t"] > a').text().trim();
+ const url = loadedCheerio(this).find('td[class="t"] > a').attr("href");
+
+ chapters.push({ name, releaseTime, url: baseUrl + url });
+ }
+ });
+
+ novel.chapters = chapters;
+ return novel;
+}
+
+async function parseChapter(chapterUrl) {
+ let result = await fetchApi(chapterUrl);
+ if (result.url.includes("mature?path=")) {
+ const formData = new FormData();
+ formData.append("path", chapterUrl.replace(baseUrl, ""));
+ formData.append("ok", "Да");
+
+ await fetchApi(result.url, {
+ method: "POST",
+ body: formData,
+ });
+
+ result = await fetchApi(chapterUrl);
+ }
+ const body = await result.text();
+ const loadedCheerio = cheerio.load(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);
+ }
+ });
+
+ const chapterText = loadedCheerio(".content-text").html();
+ return chapterText;
+}
+
+async function searchNovels(searchTerm) {
+ const result = await fetchApi(
+ baseUrl + "/search/autocomplete?query=" + searchTerm
+ );
+ const json = await result.json();
+
+ let novels = [];
+ json.forEach((novel) =>
+ novels.push({
+ name: novel.title_one + " / " + novel.title_two,
+ cover: baseUrl + novel.img,
+ url: baseUrl + novel.url,
+ })
+ );
+
+ return novels;
+}
+
+const filters = [
+ {
+ key: "sort",
+ label: "Сортировка",
+ values: [
+ { label: "По рейтингу", value: "6" },
+ { label: "По степени готовности", value: "0" },
+ { label: "По названию на языке оригинала", value: "1" },
+ { label: "По названию на языке перевода", value: "2" },
+ { label: "По дате создания", value: "3" },
+ { label: "По дате последней активности", value: "4" },
+ { label: "По просмотрам", value: "5" },
+ { label: "По кол-ву переведённых глав", value: "7" },
+ { label: "По кол-ву лайков", value: "8" },
+ { label: "По кол-ву страниц", value: "10" },
+ { label: "По кол-ву бесплатных глав", value: "11" },
+ { label: "По кол-ву рецензий", value: "12" },
+ { label: "По кол-ву в закладках", value: "13" },
+ { label: "По кол-ву в избранном", value: "14" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "type",
+ label: "Тип",
+ values: [
+ { label: "Неважно", value: "0" },
+ { label: "Только переводы", value: "1" },
+ { label: "Только авторские", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "atmosphere",
+ label: "Атмосфера",
+ values: [
+ { label: "Неважно", value: "0" },
+ { label: "Позитивная", value: "1" },
+ { label: "Dark", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+ {
+ key: "trash",
+ label: "Другое",
+ values: [
+ { label: "Готовые на 100%", value: "ready" },
+ { label: "Доступные для перевода", value: "tr" },
+ { label: "Доступные для скачивания", value: "gen" },
+ { label: "Завершённые проекты", value: "wealth" },
+ { label: "Распродажа", value: "discount" },
+ { label: "Только онгоинги", value: "ongoings" },
+ { label: "Убрать машинный", value: "remove_machinelate" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "genres",
+ label: "Жанры",
+ values: [
+ { label: "18+", value: "52" },
+ { label: "Арт", value: "1" },
+ { label: "Боевик", value: "2" },
+ { label: "Боевые искусства", value: "3" },
+ { label: "Гарем", value: "5" },
+ { label: "Героическое фэнтези", value: "7" },
+ { label: "Детектив", value: "8" },
+ { label: "Дзёсэй", value: "9" },
+ { label: "Додзинси", value: "10" },
+ { label: "Драма", value: "11" },
+ { label: "История", value: "13" },
+ { label: "Киберпанк", value: "46" },
+ { label: "Кодомо", value: "14" },
+ { label: "Комедия", value: "15" },
+ { label: "Литрпг", value: "48" },
+ { label: "Махо-сёдзё", value: "16" },
+ { label: "Мелодрама", value: "49" },
+ { 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: "29" },
+ { label: "Смат", value: "45" },
+ { label: "Спорт", value: "31" },
+ { label: "Сэйнэн", value: "32" },
+ { label: "Сюаньхуа", value: "44" },
+ { label: "Сюаньхуань", value: "47" },
+ { label: "Сянься (XianXia)", value: "42" },
+ { label: "Трагедия", value: "33" },
+ { label: "Триллер", value: "34" },
+ { label: "Ужасы", value: "35" },
+ { label: "Уся (wuxia)", value: "41" },
+ { label: "Фантастика", value: "36" },
+ { label: "Фанфик", value: "50" },
+ { label: "Фэнтези", value: "37" },
+ { label: "Школа", value: "38" },
+ { label: "Этти", value: "39" },
+ { label: "Bl", value: "43" },
+ { label: "Gl", value: "40" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "tags",
+ label: "Тэги",
+ values: [
+ { label: "12+", value: "3316" },
+ { label: "16+", value: "83" },
+ { label: "18+", value: "1749" },
+ { label: "21+", value: "3191" },
+ { label: "Абсурд", value: "7973" },
+ { label: "Авантюристы", value: "222" },
+ { label: "Автомат", value: "5272" },
+ { label: "Авторский мир", value: "1062" },
+ { label: "Агрессивные персонажи", value: "3249" },
+ { label: "Ад", value: "2623" },
+ { label: "Ад и рай", value: "817" },
+ { label: "Адам дженсен", value: "1649" },
+ { label: "Адаптация произведения", value: "192" },
+ { label: "Адвокат", value: "6340" },
+ { label: "Адекватные главные герои", value: "1953" },
+ { label: "Азартные игры", value: "5301" },
+ { label: "Азгард", value: "3494" },
+ { label: "Азула", value: "5550" },
+ { label: "Аид", value: "7641" },
+ { label: "Айдолы", value: "4081" },
+ { label: "Академия", value: "316" },
+ { label: "Акамэ", value: "5059" },
+ { label: "Аквакинез", value: "5952" },
+ { label: "Акира", value: "2639" },
+ { label: "Акнология", value: "4634" },
+ { label: "Актерское мастерство", value: "4798" },
+ { label: "Актёры", value: "7506" },
+ { label: "Активные герои", value: "6376" },
+ { label: "Акутагава рюноске", value: "4113" },
+ { label: "Аладдин", value: "6489" },
+ { label: "Алая ведьма", value: "4767" },
+ { label: "Алиса", value: "4761" },
+ { label: "Алкоголь", value: "5508" },
+ { label: "Аллегория", value: "271" },
+ { label: "Алукард", value: "4914" },
+ { label: "Алхимики", value: "1164" },
+ { label: "Алхимия", value: "1473" },
+ { label: "Алчность", value: "6897" },
+ { label: "Альбус дамблдор", value: "5784" },
+ { label: "Альтернативное развитие событий", value: "5330" },
+ { label: "Альянсы", value: "328" },
+ { label: "Амбициозный главный герой", value: "3751" },
+ { label: "Америка", value: "4082" },
+ { label: "Амнезия", value: "2207" },
+ { label: "Аморальный герой", value: "18" },
+ { label: "Анальный секс", value: "1942" },
+ { label: "Анбу", value: "8129" },
+ { label: "Ангелы", value: "857" },
+ { label: "Ангелы и демоны", value: "1327" },
+ { label: "Ангст", value: "4638" },
+ { label: "Андроиды", value: "1993" },
+ { label: "Анимализм", value: "5249" },
+ { label: "Аниме", value: "1294" },
+ { label: "Анко митараши", value: "5768" },
+ { label: "Антагонист", value: "2144" },
+ { label: "Антигерой", value: "7725" },
+ { label: "Антиквариат", value: "3552" },
+ { label: "Антимаг", value: "1348" },
+ { label: "Антиутопия", value: "662" },
+ { label: "Апокалипсис", value: "1498" },
+ { label: "Аристократия", value: "371" },
+ { label: "Аристократы", value: "7338" },
+ { label: "Армия", value: "1723" },
+ { label: "Артас", value: "6700" },
+ { label: "Артефакты", value: "2296" },
+ { label: "Археология", value: "6523" },
+ { label: "Асгард", value: "3635" },
+ { label: "Ассасин", value: "1415" },
+ { label: "Асуна", value: "5044" },
+ { label: "Аугментации", value: "7751" },
+ { label: "Ацуши накаджима", value: "4109" },
+ { label: "Аянокоджи киетака", value: "6862" },
+ { label: "Бандиты", value: "2188" },
+ { label: "Басейн", value: "6847" },
+ { label: "Баскетбол", value: "7933" },
+ { label: "Бастарды", value: "76" },
+ { label: "Бдсм", value: "444" },
+ { label: "Бедность", value: "1207" },
+ { label: "Без культивации", value: "668" },
+ { label: "Без любовной линий", value: "2225" },
+ { label: "Без перерождений", value: "262" },
+ { label: "Без попаданца", value: "8065" },
+ { label: "Без системы", value: "747" },
+ { label: "Без цензуры", value: "7525" },
+ { label: "Без юмора", value: "763" },
+ { label: "Бездна", value: "1026" },
+ { label: "Безжалостное домашнее животное", value: "1245" },
+ { label: "Безжалостные персонажи", value: "2986" },
+ { label: "Беззаботные персонажи ", value: "3123" },
+ { label: "Безответная любовь", value: "7815" },
+ { label: "Безработный", value: "2202" },
+ { label: "Безумие", value: "37" },
+ { label: "Безумные персонажи", value: "2049" },
+ { label: "Бейсбол", value: "7623" },
+ { label: "Беременность", value: "2122" },
+ { label: "Бесконечный поток", value: "7556" },
+ { label: "Беспечные персонажи", value: "742" },
+ { label: "Бесплатно", value: "8403" },
+ { label: "Бессмертные персонажи", value: "566" },
+ { label: "Бесстрашные персонажи", value: "6921" },
+ { label: "Бесстыдные персонажи", value: "1257" },
+ { label: "Бесстыдный главный герой", value: "8190" },
+ { label: "Библиотека", value: "4210" },
+ { label: "Библия", value: "488" },
+ { label: "Бизнес", value: "704" },
+ { label: "Биология", value: "2220" },
+ { label: "Биомехи", value: "1968" },
+ { label: "Биседзе", value: "777" },
+ { label: "Битва за веру", value: "721" },
+ { label: "Битва за трон", value: "7211" },
+ { label: "Битва королевств", value: "1151" },
+ { label: "Битва рас", value: "6989" },
+ { label: "Битвы", value: "1740" },
+ { label: "Благородные персонажи", value: "2201" },
+ { label: "Близнецы", value: "2931" },
+ { label: "Богатство", value: "6522" },
+ { label: "Богатые персонажи", value: "520" },
+ { label: "Боги", value: "173" },
+ { label: "Богини", value: "30" },
+ { label: "Богиня", value: "8324" },
+ { label: "Богоубийца", value: "1253" },
+ { label: "Богохульство", value: "95" },
+ { label: "Боевая академия", value: "2108" },
+ { label: "Боевик", value: "529" },
+ { label: "Боевые искусства", value: "2090" },
+ { label: "Большая грудь", value: "4717" },
+ { label: "Большой член", value: "5299" },
+ { label: "Борос", value: "6533" },
+ { label: "Борьба", value: "1925" },
+ { label: "Борьба за власть", value: "8072" },
+ { label: "Босс и подчиненный", value: "7157" },
+ { label: "Бояръ", value: "2307" },
+ { label: "Брак", value: "1558" },
+ { label: "Брак по расчету", value: "1389" },
+ { label: "Брат и сестра", value: "615" },
+ { label: "Братский комплекс", value: "2321" },
+ { label: "Броманс", value: "1103" },
+ { label: "Брошенные дети", value: "2846" },
+ { label: "Буддизм", value: "1871" },
+ { label: "Будущее", value: "1820" },
+ { label: "Бывший муж", value: "8080" },
+ { label: "Быстрое развитие", value: "1443" },
+ { label: "Бэтгерл", value: "2584" },
+ { label: "Бэтмен", value: "4668" },
+ { label: "В первый раз", value: "6212" },
+ { label: "В этот же мир", value: "49" },
+ { label: "Вагинальный секс", value: "4742" },
+ { label: "Ваканда", value: "8331" },
+ { label: "Валькирии", value: "4047" },
+ { label: "Вампиры", value: "2206" },
+ { label: "Веб камера", value: "5664" },
+ { label: "Веб новелла", value: "2349" },
+ { label: "Ведьмак", value: "843" },
+ { label: "Ведьмы", value: "643" },
+ { label: "Везучие персонажи", value: "1879" },
+ { label: "Веном", value: "3994" },
+ { label: "Вестерн", value: "2131" },
+ { label: "Вестерос", value: "8171" },
+ { label: "Взросление", value: "624" },
+ { label: "Взрослый главный герой", value: "2416" },
+ { label: "Видео игры", value: "2630" },
+ { label: "Викинги", value: "267" },
+ { label: "Вино", value: "6972" },
+ { label: "Вирт", value: "6213" },
+ { label: "Виртуальная реальность", value: "325" },
+ { label: "Вирусы", value: "3327" },
+ { label: "Владыка демонов", value: "555" },
+ { label: "Власть", value: "756" },
+ { label: "Влюбленность", value: "6132" },
+ { label: "Внешний вид отличается от личности", value: "1938" },
+ { label: "Внучка", value: "8399" },
+ { label: "Военные", value: "1096" },
+ { label: "Возрождение", value: "1160" },
+ { label: "Воины", value: "287" },
+ { label: "Война", value: "443" },
+ { label: "Войны", value: "2431" },
+ { label: "Воландеморт", value: "4278" },
+ { label: "Волейбол", value: "6415" },
+ { label: "Волки", value: "1166" },
+ { label: "Волшебники", value: "122" },
+ { label: "Волшебные существа", value: "1689" },
+ { label: "Волшебство", value: "719" },
+ { label: "Вор", value: "1399" },
+ { label: "Воровка", value: "6948" },
+ { label: "Ворон", value: "848" },
+ { label: "Воскрешение", value: "6915" },
+ { label: "Воспоминания из другого мира", value: "1366" },
+ { label: "Воспоминания из прошлого", value: "1372" },
+ { label: "Воссоединие семьи", value: "8130" },
+ { label: "Восхождение", value: "380" },
+ { label: "Враги становятся любовниками", value: "978" },
+ { label: "Врата", value: "40" },
+ { label: "Врата в другой мир", value: "1957" },
+ { label: "Врач", value: "1243" },
+ { label: "Временная петля", value: "2852" },
+ { label: "Врмморпг", value: "2043" },
+ { label: "Все дозволено", value: "96" },
+ { label: "Всемогущий главный герой", value: "1414" },
+ { label: "Второй шанс", value: "2372" },
+ { label: "Вуайеризм", value: "2498" },
+ { label: "Выживание", value: "501" },
+ { label: "Вымышленные существа", value: "3466" },
+ { label: "Вынужденный брак", value: "7705" },
+ { label: "Высокие технологии", value: "653" },
+ { label: "Высокомерные персонажи", value: "3250" },
+ { label: "Галустян", value: "5199" },
+ { label: "Гангстеры", value: "7704" },
+ { label: "Гарем", value: "440" },
+ { label: "Гарри поттер", value: "226" },
+ { label: "Геймеры", value: "2130" },
+ { label: "Генетические модификации", value: "1750" },
+ { label: "Гениальный главный герой", value: "1500" },
+ { label: "Гений", value: "1650" },
+ { label: "Гермиона грейнджер", value: "4280" },
+ { label: "Герои", value: "185" },
+ { label: "Героическое фэнтези", value: "1148" },
+ { label: "Гигаполис", value: "8393" },
+ { label: "Гильгамеш", value: "6031" },
+ { label: "Гильдии", value: "900" },
+ { label: "Гильдия авантюристов", value: "1858" },
+ { label: "Гинтама", value: "4544" },
+ { label: "Гипноз", value: "358" },
+ { label: "Главная героиня влюбляется первой", value: "973" },
+ { label: "Главный герой бог", value: "164" },
+ { label: "Главный герой влюбляется первым", value: "3629" },
+ { label: "Главный герой выживальщик", value: "120" },
+ { label: "Главный герой гонг", value: "7877" },
+ { label: "Главный герой девушка", value: "257" },
+ { label: "Главный герой демон", value: "136" },
+ { label: "Главный герой женщина", value: "7329" },
+ { label: "Главный герой жестокий", value: "1553" },
+ { label: "Главный герой извращенец", value: "94" },
+ { label: "Главный герой имба", value: "2421" },
+ { label: "Главный герой киборг", value: "7780" },
+ { label: "Главный герой монстр", value: "869" },
+ { label: "Главный герой мужчина", value: "1997" },
+ { label: "Главный герой на стороне сил зла", value: "1514" },
+ { label: "Главный герой не адекватный", value: "5" },
+ { label: "Главный герой не психопат", value: "7804" },
+ { label: "Главный герой не человек", value: "2172" },
+ { label: "Главный герой не эмоционален", value: "1150" },
+ { label: "Главный герой подросток", value: "2215" },
+ { label: "Главный герой позитивный", value: "7787" },
+ { label: "Главный герой психопат", value: "7803" },
+ { label: "Главный герой ребенок", value: "2347" },
+ { label: "Главный герой русский", value: "2417" },
+ { label: "Главный герой сильный с самого начала", value: "88" },
+ { label: "Главный герой скрывает свою силу", value: "1059" },
+ { label: "Главный герой эгоист", value: "8326" },
+ { label: "Глотание спермы", value: "4491" },
+ { label: "Гномы", value: "1870" },
+ { label: "Гоблины", value: "2029" },
+ { label: "Годзилла", value: "6990" },
+ { label: "Големы", value: "1690" },
+ { label: "Голливуд", value: "7754" },
+ { label: "Головоломка", value: "1697" },
+ { label: "Горничные", value: "8091" },
+ { label: "Гробница", value: "388" },
+ { label: "Групповой секс", value: "1314" },
+ { label: "Дазай осаму", value: "4112" },
+ { label: "Даньмэй", value: "3411" },
+ { label: "Даосизм", value: "258" },
+ { label: "Дарк соулс", value: "6057" },
+ { label: "Дарт вейдер", value: "6826" },
+ { label: "Дафна гринграсс", value: "5192" },
+ { label: "Дворяне", value: "7204" },
+ { label: "Девушки", value: "7668" },
+ { label: "Девушки монстры", value: "2231" },
+ { label: "Дедушка и внучка", value: "8400" },
+ { label: "Дейви джонс", value: "8061" },
+ { label: "Действие", value: "1425" },
+ { label: "Демон лорд", value: "153" },
+ { label: "Демонология", value: "2024" },
+ { label: "Демоны", value: "1406" },
+ { label: "Детектив", value: "1265" },
+ { label: "Дети", value: "580" },
+ { label: "Джарвис", value: "933" },
+ { label: "Джедай", value: "4442" },
+ { label: "Джин", value: "4024" },
+ { label: "Джокер", value: "3351" },
+ { label: "Джон сноу", value: "7412" },
+ { label: "Джоффри баратеон", value: "3936" },
+ { label: "Дзесэй", value: "678" },
+ { label: "Дин винчестер", value: "6953" },
+ { label: "Династии", value: "2982" },
+ { label: "Динозавры", value: "3666" },
+ { label: "Директор", value: "1417" },
+ { label: "Для девушек", value: "1441" },
+ { label: "Дневник", value: "298" },
+ { label: "Добби", value: "6762" },
+ { label: "Добрый мир", value: "1685" },
+ { label: "Договоры с богами", value: "2152" },
+ { label: "Договоры с демонами", value: "1922" },
+ { label: "Доктор", value: "1991" },
+ { label: "Доктор стрэндж", value: "7634" },
+ { label: "Доминирование", value: "2054" },
+ { label: "Дота", value: "6965" },
+ { label: "Доудзюцу", value: "7133" },
+ { label: "Дочь", value: "3291" },
+ { label: "Драко малфой", value: "46" },
+ { label: "Драконы", value: "282" },
+ { label: "Драконы оборотни", value: "8082" },
+ { label: "Драма", value: "611" },
+ { label: "Древние времена", value: "7781" },
+ { label: "Древний египет", value: "7614" },
+ { label: "Древний китай", value: "473" },
+ { label: "Древний мир", value: "4" },
+ { label: "Дрочка", value: "4565" },
+ { label: "Другая вселенная", value: "39" },
+ { label: "Другие планеты", value: "2371" },
+ { label: "Другой мир", value: "2248" },
+ { label: "Дружба", value: "1903" },
+ { label: "Друзья детства", value: "1153" },
+ { label: "Духи", value: "114" },
+ { label: "Духовные силы", value: "1955" },
+ { label: "Души", value: "1212" },
+ { label: "Дьявол", value: "1094" },
+ { label: "Дьявольские фрукты", value: "1564" },
+ { label: "Дэдпул", value: "4399" },
+ { label: "Евнух", value: "6293" },
+ { label: "Европейская атмосфера", value: "5837" },
+ { label: "Египет", value: "528" },
+ { label: "Еда", value: "2056" },
+ { label: "Единороги", value: "437" },
+ { label: "Екаи", value: "655" },
+ { label: "Жалкий главный герой", value: "97" },
+ { label: "Жена", value: "5729" },
+ { label: "Женское доминирование", value: "4622" },
+ { label: "Женщина в теле мужчины", value: "2748" },
+ { label: "Женщина кошка", value: "7513" },
+ { label: "Жесткий секс", value: "2238" },
+ { label: "Жестокие персонажи ", value: "3153" },
+ { label: "Жестокий мир", value: "1532" },
+ { label: "Жестокое обращение с детьми", value: "84" },
+ { label: "Жестокость", value: "7880" },
+ { label: "Животные", value: "7488" },
+ { label: "Животные компаньоны", value: "2061" },
+ { label: "Жизнь и смерть", value: "2014" },
+ { label: "Жнец", value: "6288" },
+ { label: "Жойен рид", value: "3926" },
+ { label: "Заботливый главный герой", value: "338" },
+ { label: "Закалка тела", value: "148" },
+ { label: "Заклинания", value: "558" },
+ { label: "Заключенные", value: "3052" },
+ { label: "Занпакто", value: "1102" },
+ { label: "Запретная любовь", value: "8033" },
+ { label: "Запутанный сюжет", value: "1041" },
+ { label: "Захват мира", value: "315" },
+ { label: "Зачарованные", value: "4169" },
+ { label: "Звери", value: "1638" },
+ { label: "Зверодевочки", value: "2006" },
+ { label: "Зверолюди", value: "1018" },
+ { label: "Земля", value: "82" },
+ { label: "Злая организация", value: "7768" },
+ { label: "Зло", value: "1512" },
+ { label: "Злодей", value: "1060" },
+ { label: "Злодейка", value: "2376" },
+ { label: "Злой главный герой", value: "616" },
+ { label: "Злые боги", value: "7109" },
+ { label: "Злые персонажи", value: "3243" },
+ { label: "Змей", value: "5721" },
+ { label: "Знаменитости", value: "1341" },
+ { label: "Знание медицины", value: "1411" },
+ { label: "Золотой дождь", value: "1828" },
+ { label: "Золушка", value: "2980" },
+ { label: "Зомби", value: "1743" },
+ { label: "Зомби апокалипсис", value: "912" },
+ { label: "Зона 51", value: "3051" },
+ { label: "Зооморфы", value: "375" },
+ { label: "Зоофилия", value: "1165" },
+ { label: "Зорро", value: "6736" },
+ { label: "Зрелые женщины", value: "1458" },
+ { label: "Игра", value: "663" },
+ { label: "Игра на выживание", value: "2182" },
+ { label: "Игровая система", value: "384" },
+ { label: "Игровые элементы", value: "720" },
+ { label: "Извращения", value: "651" },
+ { label: "Измена", value: "1874" },
+ { label: "Изменение характера", value: "1113" },
+ { label: "Изменения внешности", value: "259" },
+ { label: "Изменения личности", value: "1080" },
+ { label: "Изнасилование", value: "1283" },
+ { label: "Изобретения", value: "126" },
+ { label: "Изуку мидория", value: "6967" },
+ { label: "Император", value: "867" },
+ { label: "Империи", value: "712" },
+ { label: "Империя", value: "1716" },
+ { label: "Инвалидность", value: "2073" },
+ { label: "Инквизитор", value: "143" },
+ { label: "Инкуб", value: "3264" },
+ { label: "Инопланетное вторжение", value: "209" },
+ { label: "Инопланетяне", value: "866" },
+ { label: "Интерактив с читателями", value: "472" },
+ { label: "Интересный сюжет", value: "7374" },
+ { label: "Интернет", value: "739" },
+ { label: "Интимные сцены", value: "3450" },
+ { label: "Интрига", value: "317" },
+ { label: "Интриги и заговоры", value: "1009" },
+ { label: "Инцест", value: "1934" },
+ { label: "Иные миры", value: "35" },
+ { label: "Исекай", value: "2979" },
+ { label: "Искусственный интеллект", value: "1900" },
+ { label: "Исследование", value: "1626" },
+ { label: "Исторический роман", value: "573" },
+ { label: "Итачи учиха", value: "4556" },
+ { label: "Ичиго", value: "7254" },
+ { label: "Йода", value: "6829" },
+ { label: "Йоруичи", value: "6755" },
+ { label: "Калипсо", value: "8062" },
+ { label: "Каннибализм", value: "2249" },
+ { label: "Капитан америка", value: "6301" },
+ { label: "Каракура", value: "7473" },
+ { label: "Карточная игра", value: "1557" },
+ { label: "Кастиэль", value: "6954" },
+ { label: "Кафе", value: "3934" },
+ { label: "Кацуки бакуго", value: "7696" },
+ { label: "Квесты", value: "1707" },
+ { label: "Киберпанк", value: "1614" },
+ { label: "Киберспорт", value: "1984" },
+ { label: "Кино", value: "7126" },
+ { label: "Китай", value: "3762" },
+ { label: "Кицунэ", value: "241" },
+ { label: "Кланы", value: "834" },
+ { label: "Клоны", value: "1624" },
+ { label: "Книги", value: "1068" },
+ { label: "Книжный червь", value: "521" },
+ { label: "Колдовство", value: "2681" },
+ { label: "Колледж", value: "5058" },
+ { label: "Коллекционер", value: "2588" },
+ { label: "Кольцо", value: "1628" },
+ { label: "Комедия", value: "1430" },
+ { label: "Коммунисты", value: "1042" },
+ { label: "Коноха", value: "2827" },
+ { label: "Контракт", value: "4304" },
+ { label: "Контроль разума", value: "485" },
+ { label: "Конфеты", value: "341" },
+ { label: "Кончил внутрь", value: "4589" },
+ { label: "Копрофилия", value: "2568" },
+ { label: "Корейцы", value: "6535" },
+ { label: "Корея", value: "2443" },
+ { label: "Королевская власть", value: "55" },
+ { label: "Королевская семья", value: "276" },
+ { label: "Королевство", value: "1695" },
+ { label: "Короткий рассказ", value: "239" },
+ { label: "Коррупция", value: "831" },
+ { label: "Космическая опера", value: "2245" },
+ { label: "Космические рейнджеры", value: "5860" },
+ { label: "Космос", value: "329" },
+ { label: "Кот", value: "5171" },
+ { label: "Кража навыков", value: "1159" },
+ { label: "Красивая главная героиня", value: "186" },
+ { label: "Красивые женщины", value: "66" },
+ { label: "Красивые персонажи ", value: "5787" },
+ { label: "Красивый главный герой", value: "895" },
+ { label: "Крафт", value: "1599" },
+ { label: "Кровь и расчлененка", value: "7752" },
+ { label: "Кроссовер", value: "75" },
+ { label: "Ксенофилия", value: "2265" },
+ { label: "Ктулху", value: "920" },
+ { label: "Кузнец", value: "853" },
+ { label: "Кукла", value: "3085" },
+ { label: "Кулинария", value: "2230" },
+ { label: "Культивация", value: "1901" },
+ { label: "Культивирование", value: "1860" },
+ { label: "Кунилингус", value: "4651" },
+ { label: "Курама", value: "5709" },
+ { label: "Курилин", value: "6134" },
+ { label: "Кушина узумаки", value: "5222" },
+ { label: "Лавкрафт", value: "6063" },
+ { label: "Лара крофт", value: "6435" },
+ { label: "Легенда о зельде", value: "5707" },
+ { label: "Ленивый главный герой", value: "1516" },
+ { label: "Леон золдик", value: "7469" },
+ { label: "Лес", value: "6645" },
+ { label: "Лечебная магия", value: "562" },
+ { label: "Литрпг", value: "505" },
+ { label: "Локи", value: "1725" },
+ { label: "Лоли", value: "1576" },
+ { label: "Лопата", value: "4989" },
+ { label: "Лорд", value: "8404" },
+ { label: "Лориен", value: "7397" },
+ { label: "Лошади", value: "6110" },
+ { label: "Лунатизм", value: "3520" },
+ { label: "Луффи", value: "274" },
+ { label: "Лучник", value: "1038" },
+ { label: "Любовный интерес влюбляется первым", value: "7753" },
+ { label: "Любовный треугольник", value: "2109" },
+ { label: "Любовь", value: "2297" },
+ { label: "Любовь с первого взгляда", value: "7748" },
+ { label: "Любящие родители", value: "2699" },
+ { label: "Люди", value: "3572" },
+ { label: "Люцифер", value: "5883" },
+ { label: "Маг", value: "780" },
+ { label: "Магазин", value: "4762" },
+ { label: "Маги", value: "58" },
+ { label: "Магическая академия", value: "6788" },
+ { label: "Магические звери", value: "684" },
+ { label: "Магические предметы", value: "1648" },
+ { label: "Магический мир", value: "578" },
+ { label: "Магия", value: "150" },
+ { label: "Магия воды", value: "6450" },
+ { label: "Магия воздуха", value: "7627" },
+ { label: "Магия земли", value: "7626" },
+ { label: "Магия и технология", value: "107" },
+ { label: "Магия крови", value: "7976" },
+ { label: "Магия льда", value: "1379" },
+ { label: "Магия огня", value: "7625" },
+ { label: "Магия призыва", value: "885" },
+ { label: "Магия природы", value: "6226" },
+ { label: "Магия стихий", value: "7673" },
+ { label: "Магия тьмы", value: "3596" },
+ { label: "Мадара", value: "2929" },
+ { label: "Мазохизм", value: "1961" },
+ { label: "Мама", value: "12" },
+ { label: "Мама и дочь", value: "7894" },
+ { label: "Мама и сын", value: "7895" },
+ { label: "Манга", value: "2464" },
+ { label: "Манипуляция временем", value: "932" },
+ { label: "Маньяк", value: "2026" },
+ { label: "Маргери тирелл", value: "3935" },
+ { label: "Марионетки", value: "3175" },
+ { label: "Марс", value: "4013" },
+ { label: "Марти стью", value: "594" },
+ { label: "Мастер на все руки", value: "3189" },
+ { label: "Мастурбация", value: "3078" },
+ { label: "Матриархат", value: "7197" },
+ { label: "Мать и сестры", value: "7946" },
+ { label: "Мафия", value: "353" },
+ { label: "Мачеха", value: "4664" },
+ { label: "Мегаполис", value: "3322" },
+ { label: "Медицина", value: "441" },
+ { label: "Медленная романтика", value: "8383" },
+ { label: "Медленное развитие истории", value: "7462" },
+ { label: "Межрасовый секс", value: "3489" },
+ { label: "Мелиодас", value: "7224" },
+ { label: "Мелодрама", value: "1507" },
+ { label: "Менеджмент", value: "368" },
+ { label: "Мерлин", value: "3977" },
+ { label: "Месть", value: "1218" },
+ { label: "Меха", value: "2303" },
+ { label: "Меч", value: "48" },
+ { label: "Мечники", value: "969" },
+ { label: "Мечта", value: "527" },
+ { label: "Мизуки", value: "4269" },
+ { label: "Микото", value: "3862" },
+ { label: "Милая главная героиня", value: "134" },
+ { label: "Милф", value: "1987" },
+ { label: "Милый главный герой", value: "2678" },
+ { label: "Мимик", value: "5706" },
+ { label: "Мина ашидо", value: "7695" },
+ { label: "Минато намикадзе", value: "5223" },
+ { label: "Минет", value: "3289" },
+ { label: "Мир будущего", value: "1770" },
+ { label: "Мир земли", value: "8394" },
+ { label: "Мир меча и магии", value: "1271" },
+ { label: "Мистер пропер", value: "565" },
+ { label: "Мистика", value: "510" },
+ { label: "Мифические существа", value: "1878" },
+ { label: "Мифы и легенды", value: "4463" },
+ { label: "Младшая сестра", value: "1523" },
+ { label: "Мморпг", value: "620" },
+ { label: "Много главных героев", value: "1191" },
+ { label: "Много крови", value: "5318" },
+ { label: "Много персонажей", value: "1539" },
+ { label: "Множество королевств", value: "32" },
+ { label: "Модерн", value: "5457" },
+ { label: "Мокутон", value: "4438" },
+ { label: "Молоко", value: "5469" },
+ { label: "Монархия", value: "3590" },
+ { label: "Монстры", value: "307" },
+ { label: "Море", value: "922" },
+ { label: "Моритика ринносукэ", value: "1142" },
+ { label: "Мортал комбат", value: "5861" },
+ { label: "Мошенник", value: "959" },
+ { label: "Мрачный мир", value: "1" },
+ { label: "Мужчина протагонист", value: "31" },
+ { label: "Музыка", value: "1183" },
+ { label: "Мультивселенная", value: "7410" },
+ { label: "Мурим", value: "7342" },
+ { label: "Мутанты", value: "2392" },
+ { label: "Мутация", value: "29" },
+ { label: "Мясо", value: "1503" },
+ { label: "На реальных событиях", value: "26" },
+ { label: "Навыки", value: "415" },
+ { label: "Нагато узумаки", value: "5221" },
+ { label: "Наемники", value: "1668" },
+ { label: "Назарик", value: "5369" },
+ { label: "Наивный главный герой", value: "159" },
+ { label: "Наложница", value: "4867" },
+ { label: "Наноботы", value: "2332" },
+ { label: "Наркотики", value: "1436" },
+ { label: "Наруто", value: "7177" },
+ { label: "Наруто и хината", value: "5766" },
+ { label: "Насилие и жестокость", value: "1440" },
+ { label: "Наука", value: "2150" },
+ { label: "Научная фантастика", value: "2244" },
+ { label: "Национализм", value: "5556" },
+ { label: "Нацу", value: "5826" },
+ { label: "Нацуки субару", value: "6656" },
+ { label: "Начальная школа", value: "3920" },
+ { label: "Наши дни", value: "1814" },
+ { label: "Не всесильный главный герой", value: "42" },
+ { label: "Не по канону", value: "1611" },
+ { label: "Неверность", value: "5735" },
+ { label: "Невеста", value: "6011" },
+ { label: "Неджи хьюга", value: "3099" },
+ { label: "Недооценённый главный герой", value: "43" },
+ { label: "Нежить", value: "1949" },
+ { label: "Некромаг", value: "7441" },
+ { label: "Некромант", value: "1914" },
+ { label: "Некромантия", value: "754" },
+ { label: "Некрофилия", value: "1285" },
+ { label: "Ненормативная лексика", value: "160" },
+ { label: "Необычные герои", value: "67" },
+ { label: "Нет людей", value: "7486" },
+ { label: "Нетораре", value: "403" },
+ { label: "Нетори", value: "5393" },
+ { label: "Нефилимы", value: "7764" },
+ { label: "Нецензурная лексика", value: "4912" },
+ { label: "Нечисть", value: "4559" },
+ { label: "Ник фьюри", value: "6304" },
+ { label: "Ниндзюцу", value: "2354" },
+ { label: "Ниндзя", value: "1330" },
+ { label: "Новелла", value: "2105" },
+ { label: "Нудизм", value: "2233" },
+ { label: "Нэко", value: "147" },
+ { label: "Оби ван кеноби", value: "6830" },
+ { label: "Обито учиха", value: "2814" },
+ { label: "Оборотни", value: "53" },
+ { label: "Обратный гарем", value: "3303" },
+ { label: "Овощ", value: "6098" },
+ { label: "Огнестрельное оружие", value: "3155" },
+ { label: "Одержимость", value: "708" },
+ { label: "Один в поле воин", value: "6498" },
+ { label: "Онлайн игра", value: "1565" },
+ { label: "Ооками теппей", value: "849" },
+ { label: "Оральный секс", value: "605" },
+ { label: "Оргия", value: "974" },
+ { label: "Оригинальные персонажи", value: "7741" },
+ { label: "Орки", value: "1597" },
+ { label: "Оружие", value: "125" },
+ { label: "Основано на видео игре", value: "602" },
+ { label: "Особые способности", value: "2904" },
+ { label: "От бедности к богатству", value: "901" },
+ { label: "От слабого до сильного", value: "118" },
+ { label: "Отель", value: "2879" },
+ { label: "Отец", value: "3290" },
+ { label: "Отношения", value: "398" },
+ { label: "Отношения человек/нечеловек", value: "7406" },
+ { label: "Офис", value: "3460" },
+ { label: "Охотники", value: "2263" },
+ { label: "Оцуцуки", value: "5101" },
+ { label: "Ошейник", value: "2362" },
+ { label: "Ояш", value: "8048" },
+ { label: "Падчерица", value: "7023" },
+ { label: "Падший ангел", value: "184" },
+ { label: "Пайзури", value: "3560" },
+ { label: "Палач", value: "852" },
+ { label: "Палочка", value: "2682" },
+ { label: "Пандорум", value: "4360" },
+ { label: "Папа и дочь", value: "7647" },
+ { label: "Паразит", value: "1213" },
+ { label: "Параллельный мир", value: "2092" },
+ { label: "Парень", value: "619" },
+ { label: "Паркур", value: "3391" },
+ { label: "Пародия", value: "898" },
+ { label: "Пасхалки", value: "455" },
+ { label: "Паук", value: "2209" },
+ { label: "Пекарь", value: "5073" },
+ { label: "Первая книга", value: "269" },
+ { label: "Первая любовь", value: "640" },
+ { label: "Первый раз", value: "1465" },
+ { label: "Переводы", value: "24" },
+ { label: "Перевоплощение", value: "1596" },
+ { label: "Перевоплощение в игровом мире", value: "92" },
+ { label: "Перемещение в другой мир", value: "1288" },
+ { label: "Перемещение во времени", value: "146" },
+ { label: "Перерождение", value: "894" },
+ { label: "Перерождение в демона", value: "1111" },
+ { label: "Перерождение в дракона", value: "6867" },
+ { label: "Перерождение в злодейку", value: "5619" },
+ { label: "Перерождение в злодея", value: "749" },
+ { label: "Перерождение в ином мире", value: "109" },
+ { label: "Перерождение в монстра", value: "917" },
+ { label: "Перерождений", value: "335" },
+ { label: "Переселение", value: "813" },
+ { label: "Переселение души", value: "1864" },
+ { label: "Перси джексон", value: "6329" },
+ { label: "Пилот", value: "5521" },
+ { label: "Пилюли", value: "1531" },
+ { label: "Пират", value: "1579" },
+ { label: "Пирог", value: "80" },
+ { label: "Писатель", value: "734" },
+ { label: "Пистолеты", value: "4916" },
+ { label: "Письмо", value: "840" },
+ { label: "Питомцы", value: "3122" },
+ { label: "Планомерное развитие событий", value: "62" },
+ { label: "Племянник", value: "8303" },
+ { label: "Пленница", value: "4897" },
+ { label: "Плети", value: "4839" },
+ { label: "Пляж", value: "4243" },
+ { label: "Повар", value: "658" },
+ { label: "Повествование от первого лица", value: "1054" },
+ { label: "Повествование от разных лиц", value: "600" },
+ { label: "Повествование от третьего лица", value: "2116" },
+ { label: "Повседневность", value: "802" },
+ { label: "Подавитель", value: "497" },
+ { label: "Подземелье", value: "798" },
+ { label: "Подростки", value: "636" },
+ { label: "Подруга", value: "5804" },
+ { label: "Подчинение", value: "8343" },
+ { label: "Подчинение и унижение", value: "4500" },
+ { label: "Покемоны", value: "2840" },
+ { label: "Полиамория", value: "1300" },
+ { label: "Полигамия", value: "1336" },
+ { label: "Политика", value: "1313" },
+ { label: "Полицейский", value: "1907" },
+ { label: "Полубог", value: "7170" },
+ { label: "Полукровка", value: "999" },
+ { label: "Полулюди", value: "2273" },
+ { label: "Поношенные трусики", value: "1204" },
+ { label: "Попаданец", value: "2396" },
+ { label: "Попаданец в другой мир", value: "685" },
+ { label: "Попаданец в игру", value: "6466" },
+ { label: "Попадание в книгу", value: "6957" },
+ { label: "Порно", value: "4023" },
+ { label: "Постапокалипсис", value: "1079" },
+ { label: "Потеря девственности", value: "5879" },
+ { label: "Похищение", value: "7452" },
+ { label: "Поэзия", value: "1120" },
+ { label: "Правитель", value: "2261" },
+ { label: "Превращения в животных", value: "3410" },
+ { label: "Преданный любовный интерес", value: "2055" },
+ { label: "Предательство", value: "70" },
+ { label: "Президент", value: "4334" },
+ { label: "Преступник", value: "4049" },
+ { label: "Преступный мир", value: "965" },
+ { label: "Призрак", value: "511" },
+ { label: "Призыв", value: "332" },
+ { label: "Призыв в другой мир", value: "781" },
+ { label: "Призыв существ", value: "412" },
+ { label: "Приключения", value: "964" },
+ { label: "Приложение на телефоне", value: "5345" },
+ { label: "Принудительный брак", value: "2954" },
+ { label: "Принуждение", value: "1442" },
+ { label: "Принц", value: "362" },
+ { label: "Принцесса", value: "2403" },
+ { label: "Приручение мостров", value: "2338" },
+ { label: "Прислуга", value: "5185" },
+ { label: "Пришельцы", value: "273" },
+ { label: "Проза", value: "2012" },
+ { label: "Прокачка", value: "1070" },
+ { label: "Проклятия", value: "1347" },
+ { label: "Проработанный мир", value: "1711" },
+ { label: "Пророчество", value: "7762" },
+ { label: "Псайкеры", value: "3659" },
+ { label: "Псионика", value: "5216" },
+ { label: "Психбольница", value: "6969" },
+ { label: "Психические расстройства", value: "2445" },
+ { label: "Психологические травмы", value: "3418" },
+ { label: "Психология", value: "17" },
+ { label: "Публичный дом", value: "7860" },
+ { label: "Публичный секс", value: "6647" },
+ { label: "Путешествие в другой мир", value: "10" },
+ { label: "Пух", value: "4286" },
+ { label: "Пушечное мясо", value: "7234" },
+ { label: "Пытки", value: "1756" },
+ { label: "Пьяный мастер", value: "1655" },
+ { label: "Пэнси паркинсон", value: "7411" },
+ { label: "Раб", value: "977" },
+ { label: "Рабы", value: "1240" },
+ { label: "Разведение животных", value: "3990" },
+ { label: "Развитие", value: "208" },
+ { label: "Развитие персонажа", value: "1780" },
+ { label: "Развитие поселения", value: "7203" },
+ { label: "Развитие технологий", value: "1875" },
+ { label: "Разврат", value: "1924" },
+ { label: "Раздвоение личности", value: "2062" },
+ { label: "Разные расы", value: "1188" },
+ { label: "Разорванная помолвка", value: "2057" },
+ { label: "Разработчик", value: "2333" },
+ { label: "Ранги", value: "1568" },
+ { label: "Ранобэ", value: "1764" },
+ { label: "Расизм", value: "3554" },
+ { label: "Растение", value: "407" },
+ { label: "Расчленение", value: "7125" },
+ { label: "Реализм", value: "1180" },
+ { label: "Ребенок", value: "2881" },
+ { label: "Ревность", value: "293" },
+ { label: "Революция", value: "3996" },
+ { label: "Реинкарнация", value: "1302" },
+ { label: "Реинкарнация в другом мире", value: "2180" },
+ { label: "Реинкарнация в игровой мир", value: "304" },
+ { label: "Рейджер", value: "5147" },
+ { label: "Религия", value: "2184" },
+ { label: "Рем", value: "6655" },
+ { label: "Ремесленник", value: "1483" },
+ { label: "Ремонт", value: "5703" },
+ { label: "Репликаторы", value: "3495" },
+ { label: "Ресторан", value: "7519" },
+ { label: "Риас гремори", value: "6950" },
+ { label: "Рим", value: "612" },
+ { label: "Риннеган", value: "4230" },
+ { label: "Ритуал", value: "1233" },
+ { label: "Робот", value: "4011" },
+ { label: "Роботы", value: "467" },
+ { label: "Рок ли", value: "7002" },
+ { label: "Рокси", value: "7380" },
+ { label: "Романтика", value: "1025" },
+ { label: "Рон уизли", value: "4279" },
+ { label: "Ророноа зоро", value: "1590" },
+ { label: "Росомаха", value: "1035" },
+ { label: "Российская империя", value: "2146" },
+ { label: "Россия", value: "4246" },
+ { label: "Рудеус", value: "7379" },
+ { label: "Руны", value: "2393" },
+ { label: "Русалки", value: "3127" },
+ { label: "Русь", value: "2016" },
+ { label: "Рыцари", value: "1902" },
+ { label: "Рэо хатаке", value: "2823" },
+ { label: "Сабли", value: "6136" },
+ { label: "Сайян", value: "6802" },
+ { label: "Сакура", value: "2515" },
+ { label: "Самец", value: "1592" },
+ { label: "Самоубийство", value: "4312" },
+ { label: "Самураи", value: "576" },
+ { label: "Санса старк", value: "3925" },
+ { label: "Сарказм", value: "4658" },
+ { label: "Саске", value: "7237" },
+ { label: "Сатира", value: "215" },
+ { label: "Сборник", value: "7367" },
+ { label: "Свадьба", value: "1524" },
+ { label: "Сверхсила", value: "1055" },
+ { label: "Сверхъестественное", value: "1074" },
+ { label: "Свингеры", value: "514" },
+ { label: "Свинцовые книги", value: "5322" },
+ { label: "Связывание", value: "4506" },
+ { label: "Священик", value: "61" },
+ { label: "Северус снейп", value: "5783" },
+ { label: "Сёдзе", value: "2219" },
+ { label: "Секс", value: "2472" },
+ { label: "Секс без проникновения", value: "151" },
+ { label: "Секс игрушки", value: "1124" },
+ { label: "Секс по принуждению", value: "8335" },
+ { label: "Секс по согласию", value: "7307" },
+ { label: "Секс рабыня", value: "7174" },
+ { label: "Секс с близнецами", value: "7457" },
+ { label: "Секс с монстрами", value: "6073" },
+ { label: "Секс с учителем", value: "2570" },
+ { label: "Секса будет много", value: "7265" },
+ { label: "Сексуальные и психологические отклонения", value: "888" },
+ { label: "Секты", value: "1234" },
+ { label: "Селфцест", value: "7498" },
+ { label: "Сельское хозяйство", value: "787" },
+ { label: "Семейный конфликт", value: "935" },
+ { label: "Семья", value: "728" },
+ { label: "Сенджу", value: "6069" },
+ { label: "Сёнэн", value: "2058" },
+ { label: "Серийный убийца", value: "261" },
+ { label: "Сестра", value: "2342" },
+ { label: "Сила глаза", value: "1019" },
+ { label: "Сильная героиня", value: "7292" },
+ { label: "Сильная главная героиня", value: "1994" },
+ { label: "Сильный главный герой", value: "570" },
+ { label: "Сильфиетта", value: "7381" },
+ { label: "Симбиот", value: "2648" },
+ { label: "Сириус блэк", value: "7655" },
+ { label: "Сирота", value: "297" },
+ { label: "Система", value: "251" },
+ { label: "Система уровней", value: "2174" },
+ { label: "Сиськи", value: "16" },
+ { label: "Ситх", value: "1618" },
+ { label: "Сказка", value: "3570" },
+ { label: "Скайрим", value: "4032" },
+ { label: "Скайуокер", value: "6828" },
+ { label: "Сквиб", value: "4101" },
+ { label: "Сквирт", value: "4526" },
+ { label: "Скелет", value: "1315" },
+ { label: "Скрытые способности", value: "3417" },
+ { label: "Скульптор", value: "1178" },
+ { label: "Слабая главная героиня", value: "5805" },
+ { label: "Слабый главный герой", value: "731" },
+ { label: "Славяне", value: "2168" },
+ { label: "Слизерин", value: "6979" },
+ { label: "Слизь", value: "1095" },
+ { label: "Сломанная игрушка", value: "8396" },
+ { label: "Служанка", value: "3486" },
+ { label: "Смартфон", value: "457" },
+ { label: "Смена сущности", value: "8391" },
+ { label: "Смерть", value: "1779" },
+ { label: "Смерть основного персонажа", value: "1530" },
+ { label: "Собаки", value: "6109" },
+ { label: "Соблазн", value: "7994" },
+ { label: "Соблазнение", value: "2290" },
+ { label: "Современность", value: "568" },
+ { label: "Современные знания", value: "988" },
+ { label: "Сожительство", value: "3026" },
+ { label: "Создание армии", value: "1992" },
+ { label: "Создание королевства", value: "1497" },
+ { label: "Создание пилюль", value: "816" },
+ { label: "Создатель", value: "1045" },
+ { label: "Сокровища", value: "6521" },
+ { label: "Сокрытие истинной личности", value: "2894" },
+ { label: "Сома и эрина", value: "5737" },
+ { label: "Соперничество", value: "7699" },
+ { label: "Соседи", value: "4075" },
+ { label: "Сотрудник", value: "6339" },
+ { label: "Социология", value: "7618" },
+ { label: "Спокойная главная героиня", value: "236" },
+ { label: "Спокойный главный герой", value: "1656" },
+ { label: "Спор", value: "3484" },
+ { label: "Спорт", value: "1387" },
+ { label: "Спортивное тело", value: "8317" },
+ { label: "Способность кражи", value: "7784" },
+ { label: "Сражения", value: "23" },
+ { label: "Средневековье", value: "1022" },
+ { label: "Сталкер", value: "1932" },
+ { label: "Становление государства", value: "111" },
+ { label: "Старшая школа", value: "1658" },
+ { label: "Стёб", value: "454" },
+ { label: "Стекло", value: "7453" },
+ { label: "Стеснительный персонаж", value: "152" },
+ { label: "Стимпанк", value: "1894" },
+ { label: "Стихи", value: "1309" },
+ { label: "Стратегия", value: "569" },
+ { label: "Стриптиз", value: "6914" },
+ { label: "Строительство", value: "921" },
+ { label: "Студент", value: "1464" },
+ { label: "Студентка", value: "7518" },
+ { label: "Суккубы", value: "2662" },
+ { label: "Супер зрение", value: "6574" },
+ { label: "Супер удача", value: "489" },
+ { label: "Супергерои", value: "1481" },
+ { label: "Суперзлодеи", value: "2125" },
+ { label: "Супермен", value: "6997" },
+ { label: "Суперсилы", value: "2276" },
+ { label: "Существа", value: "6033" },
+ { label: "Сферы", value: "1077" },
+ { label: "Схемы и заговоры", value: "7116" },
+ { label: "Сценарий", value: "7489" },
+ { label: "Счастливый конец", value: "3293" },
+ { label: "Сын", value: "3297" },
+ { label: "Сэйнэн", value: "345" },
+ { label: "Сэм винчестер", value: "7461" },
+ { label: "Сюаньхуа", value: "2560" },
+ { label: "Сюжетные повороты", value: "7202" },
+ { label: "Сянься", value: "1126" },
+ { label: "Таблетки для развития", value: "589" },
+ { label: "Таинственное прошлое", value: "769" },
+ { label: "Тайная личность", value: "8096" },
+ { label: "Тайная любовь", value: "113" },
+ { label: "Тайны", value: "7481" },
+ { label: "Тайные отношения", value: "7450" },
+ { label: "Тайцы", value: "6413" },
+ { label: "Танки", value: "1787" },
+ { label: "Твинцест", value: "2450" },
+ { label: "Творчество", value: "20" },
+ { label: "Тейлор эберт", value: "3526" },
+ { label: "Телекинез", value: "2203" },
+ { label: "Телепортация", value: "914" },
+ { label: "Телохранитель", value: "723" },
+ { label: "Темари", value: "4810" },
+ { label: "Темная магия", value: "4788" },
+ { label: "Темное фэнтези", value: "1675" },
+ { label: "Темные эльфы", value: "7198" },
+ { label: "Тенсейган", value: "4367" },
+ { label: "Тентакли", value: "3236" },
+ { label: "Тетя", value: "4194" },
+ { label: "Техномагия", value: "508" },
+ { label: "Тиран", value: "1174" },
+ { label: "Титаны", value: "3308" },
+ { label: "Тодороки шото", value: "5105" },
+ { label: "Токио", value: "5791" },
+ { label: "Том реддл", value: "6652" },
+ { label: "Тони старк", value: "1338" },
+ { label: "Тор", value: "1800" },
+ { label: "Тор и локи", value: "2645" },
+ { label: "Торговля", value: "1637" },
+ { label: "Травничество", value: "221" },
+ { label: "Трагедия", value: "470" },
+ { label: "Трагическое прошлое", value: "644" },
+ { label: "Трактир", value: "1918" },
+ { label: "Трансмиграция", value: "1071" },
+ { label: "Трансформация", value: "156" },
+ { label: "Трансформеры", value: "4616" },
+ { label: "Тревор филипс", value: "5427" },
+ { label: "Триллер", value: "1676" },
+ { label: "Тройняшки", value: "7169" },
+ { label: "Троли", value: "4250" },
+ { label: "Трудолюбивый главный герой", value: "248" },
+ { label: "Тупой главный герой", value: "3710" },
+ { label: "Тьма", value: "1919" },
+ { label: "Тюрьма", value: "5597" },
+ { label: "Тяжёлое детство", value: "2253" },
+ { label: "Убийства", value: "378" },
+ { label: "Убийцы", value: "1766" },
+ { label: "Убийцы драконов", value: "1484" },
+ { label: "Увечья", value: "3266" },
+ { label: "Удача", value: "6575" },
+ { label: "Ужасы", value: "1747" },
+ { label: "Узумаки", value: "7579" },
+ { label: "Укротитель", value: "367" },
+ { label: "Умения", value: "531" },
+ { label: "Умная главная героиня", value: "1381" },
+ { label: "Умные персонажи", value: "2756" },
+ { label: "Умный главный герой", value: "2093" },
+ { label: "Университет", value: "2102" },
+ { label: "Унижение", value: "8342" },
+ { label: "Уничтожение мира", value: "81" },
+ { label: "Управление временем", value: "5648" },
+ { label: "Уровни", value: "8" },
+ { label: "Усиление", value: "3549" },
+ { label: "Усопп", value: "6737" },
+ { label: "Устроенный брак", value: "2223" },
+ { label: "Усыновление", value: "395" },
+ { label: "Уся", value: "1172" },
+ { label: "Утопия", value: "4677" },
+ { label: "Уход за детьми", value: "7609" },
+ { label: "Учеба в университете", value: "2797" },
+ { label: "Учебное заведение", value: "1817" },
+ { label: "Ученые", value: "1843" },
+ { label: "Учитель", value: "845" },
+ { label: "Учиха", value: "5348" },
+ { label: "Фамильяры", value: "1471" },
+ { label: "Фанатичная любовь", value: "6721" },
+ { label: "Фанаты", value: "7739" },
+ { label: "Фантастика", value: "286" },
+ { label: "Фантастический мир", value: "2414" },
+ { label: "Фанфик", value: "767" },
+ { label: "Фармацевт", value: "1706" },
+ { label: "Фашисты", value: "3118" },
+ { label: "Феи", value: "7185" },
+ { label: "Фелляция", value: "5880" },
+ { label: "Феминизм", value: "6527" },
+ { label: "Феникс", value: "2413" },
+ { label: "Фенрир", value: "2740" },
+ { label: "Феодализм", value: "280" },
+ { label: "Ферма", value: "285" },
+ { label: "Фетиш", value: "2398" },
+ { label: "Фехтовальщик", value: "4685" },
+ { label: "Филиппины", value: "128" },
+ { label: "Философия", value: "1859" },
+ { label: "Фистинг", value: "4206" },
+ { label: "Флафф", value: "5048" },
+ { label: "Флер делакур", value: "5191" },
+ { label: "Флэш", value: "4667" },
+ { label: "Фокусник", value: "7602" },
+ { label: "Фольклор", value: "4086" },
+ { label: "Фугаку", value: "6161" },
+ { label: "Фурри", value: "6631" },
+ { label: "Футбол", value: "1121" },
+ { label: "Фэнтези", value: "174" },
+ { label: "Фэнтезийный мир", value: "1556" },
+ { label: "Хакер", value: "475" },
+ { label: "Халк", value: "1196" },
+ { label: "Хан нуньен синг", value: "4817" },
+ { label: "Ханма юджиро", value: "4369" },
+ { label: "Хаос", value: "3117" },
+ { label: "Харизматичный главный герой", value: "2350" },
+ { label: "Хатаке какаши", value: "2820" },
+ { label: "Хентай", value: "1682" },
+ { label: "Хиддлстон", value: "5903" },
+ { label: "Химавари", value: "2583" },
+ { label: "Хината", value: "2513" },
+ { label: "Хитрый главный герой", value: "2036" },
+ { label: "Хоббит", value: "6698" },
+ { label: "Хогвартс", value: "5954" },
+ { label: "Холодная главная героиня", value: "6507" },
+ { label: "Холодное оружие", value: "4889" },
+ { label: "Холодный главный герой", value: "2686" },
+ { label: "Храм", value: "2135" },
+ { label: "Христианство", value: "877" },
+ { label: "Художественная литература", value: "2380" },
+ { label: "Художница", value: "518" },
+ { label: "Хулиганы", value: "854" },
+ { label: "Цветок", value: "902" },
+ { label: "Цезарь", value: "1705" },
+ { label: "Целители", value: "4523" },
+ { label: "Церковь", value: "1980" },
+ { label: "Цундере", value: "1078" },
+ { label: "Чакра", value: "1393" },
+ { label: "Черный юмор", value: "2868" },
+ { label: "Честная главная героиня", value: "5855" },
+ { label: "Честный главный герой", value: "129" },
+ { label: "Читы", value: "451" },
+ { label: "Шантаж", value: "7175" },
+ { label: "Шаринган", value: "5165" },
+ { label: "Шинигами", value: "4661" },
+ { label: "Шиноби", value: "1227" },
+ { label: "Школьная жизнь", value: "284" },
+ { label: "Школьники", value: "218" },
+ { label: "Школьницы", value: "5946" },
+ { label: "Шлюха", value: "5822" },
+ { label: "Шоу-бизнес", value: "7119" },
+ { label: "Шпионы", value: "4262" },
+ { label: "Эволюция", value: "2040" },
+ { label: "Экзорцизм", value: "676" },
+ { label: "Экономика", value: "121" },
+ { label: "Эксгибиционизм", value: "1643" },
+ { label: "Экспансия", value: "110" },
+ { label: "Эксперименты над людьми", value: "7408" },
+ { label: "Экшен", value: "2859" },
+ { label: "Элементальная магия", value: "1264" },
+ { label: "Элементы бдсм", value: "1323" },
+ { label: "Эльфы", value: "1362" },
+ { label: "Эротика", value: "2053" },
+ { label: "Этти", value: "1317" },
+ { label: "Юмор", value: "7360" },
+ { label: "Яды", value: "201" },
+ { label: "Якудза", value: "4599" },
+ { label: "Яндере", value: "7111" },
+ { label: "Bl", value: "8282" },
+ { label: "Gl", value: "8284" },
+ { label: "Rpg", value: "90" },
+ { label: "Star wars", value: "1985" },
+ { label: "Time skip", value: "824" },
+ { label: "Warrior of light", value: "5289" },
+ ],
+ inputType: FilterInputs.Checkbox,
+ },
+ {
+ key: "adult",
+ label: "Возрастные ограничения",
+ values: [
+ { label: "Все", value: "0" },
+ { label: "Убрать 18+", value: "1" },
+ { label: "Только 18+", value: "2" },
+ ],
+ inputType: FilterInputs.Picker,
+ },
+];
+
+module.exports = {
+ id: pluginId,
+ name: sourceName,
+ site: baseUrl,
+ version: "1.0.0",
+ lang: languages.Russian,
+ icon: "src/ru/rulate/icon.png",
+ filters,
+ popularNovels,
+ parseNovelAndChapters,
+ parseChapter,
+ searchNovels,
+ fetchImage: fetchFile,
+};
diff --git a/test_web/static/js/index.js b/test_web/static/js/index.js
index 3cf7825..0fb5e22 100644
--- a/test_web/static/js/index.js
+++ b/test_web/static/js/index.js
@@ -216,7 +216,8 @@ const parseNovelAndChapters = () => {
sourceNovel.chapters.forEach(chapter => {
chapter_list.append(`