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(`
- ${chapter.name?.slice(0, 26)} + ${chapter.name?.slice(0, 26)}
+ ${chapter.releaseTime}
Copy url
`);