feat: Add Novelyra (#2105)

* add new plugin spanish Novelyra

* fix index.ts add novelyra

* [ES]Novelyra: refactor popular Novels and improve paragraph logic

* [ES]Novelyra: fix changed of type

---------

Co-authored-by: JhoendryB <jhoendryblanco@htmail.com>
This commit is contained in:
Jhoendry B.
2026-04-09 23:00:39 -04:00
committed by GitHub
parent 95a04250fa
commit e4a964504f
3 changed files with 569 additions and 228 deletions
+248 -228
View File
@@ -5,234 +5,244 @@ import p_2 from '@plugins/arabic/dilartube';
import p_3 from '@plugins/arabic/FreeKolNovel[lightnovelwp]';
import p_4 from '@plugins/arabic/HizoManga[madara]';
import p_5 from '@plugins/arabic/KolNovel[lightnovelwp]';
import p_6 from '@plugins/arabic/Novel4Up[madara]';
import p_7 from '@plugins/arabic/NovelsParadise[lightnovelwp]';
import p_8 from '@plugins/arabic/Olaoecyou[madara]';
import p_9 from '@plugins/arabic/rewayatclub';
import p_10 from '@plugins/arabic/Riwyat[madara]';
import p_11 from '@plugins/arabic/sunovels';
import p_12 from '@plugins/chinese/69shu';
import p_13 from '@plugins/chinese/ixdzs8';
import p_14 from '@plugins/chinese/linovel';
import p_15 from '@plugins/chinese/linovelib';
import p_16 from '@plugins/chinese/linovelib_tw';
import p_17 from '@plugins/chinese/novel543';
import p_18 from '@plugins/chinese/Quanben';
import p_19 from '@plugins/english/AllNovelFull[readnovelfull]';
import p_20 from '@plugins/english/AllNovel[readnovelfull]';
import p_21 from '@plugins/english/ao3';
import p_22 from '@plugins/english/ArcaneTranslations[lightnovelwp]';
import p_23 from '@plugins/english/BelleReservoir[madara]';
import p_24 from '@plugins/english/BoxNovel[readnovelfull]';
import p_25 from '@plugins/english/chrysanthemumgarden';
import p_26 from '@plugins/english/CitrusAurora[madara]';
import p_27 from '@plugins/english/CoralBoutique[madara]';
import p_28 from '@plugins/english/CPUnovel[lightnovelwp]';
import p_29 from '@plugins/english/crimsonscrolls';
import p_30 from '@plugins/english/DaoistQuest[fictioneer]';
import p_31 from '@plugins/english/DaoNovel[madara]';
import p_32 from '@plugins/english/DaoTranslate[lightnovelwp]';
import p_33 from '@plugins/english/DearestRosalie[fictioneer]';
import p_34 from '@plugins/english/divinedaolibrary';
import p_35 from '@plugins/english/Dragonholic[madara]';
import p_36 from '@plugins/english/DragonTea[madara]';
import p_37 from '@plugins/english/dreambigtl';
import p_38 from '@plugins/english/DuskBlossoms[madara]';
import p_39 from '@plugins/english/ElloTL[lightnovelwp]';
import p_40 from '@plugins/english/Eternalune[madara]';
import p_41 from '@plugins/english/EtudeTranslations[madara]';
import p_42 from '@plugins/english/FanNovel[readwn]';
import p_43 from '@plugins/english/FansMTL[readwn]';
import p_44 from '@plugins/english/FansTranslations[madara]';
import p_45 from '@plugins/english/faqwikius';
import p_46 from '@plugins/english/fenrirrealm';
import p_47 from '@plugins/english/fictionzone';
import p_48 from '@plugins/english/FirstKissNovel[madara]';
import p_49 from '@plugins/english/Foxaholic[madara]';
import p_50 from '@plugins/english/foxteller';
import p_51 from '@plugins/english/FreeWebNovel[readnovelfull]';
import p_52 from '@plugins/english/GalaxyTranslations[madara]';
import p_53 from '@plugins/english/genesis';
import p_54 from '@plugins/english/Guavaread[madara]';
import p_55 from '@plugins/english/HiraethTranslation[madara]';
import p_56 from '@plugins/english/HotNovelPub[hotnovelpub]';
import p_57 from '@plugins/english/inkitt';
import p_58 from '@plugins/english/Ippotranslations[lightnovelwp]';
import p_59 from '@plugins/english/KDTNovels[lightnovelwp]';
import p_60 from '@plugins/english/KeopiTranslations[lightnovelwp]';
import p_61 from '@plugins/english/KnoxT[lightnovelwp]';
import p_62 from '@plugins/english/LazyGirlTranslations[lightnovelwp]';
import p_63 from '@plugins/english/leafstudio';
import p_64 from '@plugins/english/LibRead[readnovelfull]';
import p_65 from '@plugins/english/LightNovelCave[lightnovelworld]';
import p_66 from '@plugins/english/LightNovelHeaven[madara]';
import p_67 from '@plugins/english/LightNovelPlus[readnovelfull]';
import p_68 from '@plugins/english/LightNovelPubVip[lightnovelworld]';
import p_69 from '@plugins/english/lightnoveltranslation';
import p_70 from '@plugins/english/LightNovelUpdates[madara]';
import p_71 from '@plugins/english/LilyontheValley[fictioneer]';
import p_72 from '@plugins/english/lnmtl';
import p_73 from '@plugins/english/Ltnovel[readwn]';
import p_74 from '@plugins/english/LunarLetters[madara]';
import p_75 from '@plugins/english/Meownovel[madara]';
import p_76 from '@plugins/english/MoonlightNovels[lightnovelwp]';
import p_77 from '@plugins/english/MostNovel[madara]';
import p_78 from '@plugins/english/MTLNovel[madara]';
import p_79 from '@plugins/english/MTLNovel[mtlnovel]';
import p_80 from '@plugins/english/mtlreader';
import p_81 from '@plugins/english/mvlempyr';
import p_82 from '@plugins/english/MysticalSeries[madara]';
import p_83 from '@plugins/english/NeoSekaiTranslations[madara]';
import p_84 from '@plugins/english/NitroManga[madara]';
import p_85 from '@plugins/english/NobleMTL[lightnovelwp]';
import p_86 from '@plugins/english/NoiceTranslations[madara]';
import p_87 from '@plugins/english/NovelBin[readnovelfull]';
import p_88 from '@plugins/english/novelbuddy';
import p_89 from '@plugins/english/NovelCool[novelcool]';
import p_90 from '@plugins/english/novelfire';
import p_91 from '@plugins/english/NovelFull[readnovelfull]';
import p_92 from '@plugins/english/novelhall';
import p_93 from '@plugins/english/novelight';
import p_94 from '@plugins/english/NovelLib[fictioneer]';
import p_95 from '@plugins/english/NovelMultiverse[madara]';
import p_96 from '@plugins/english/NovelOnline';
import p_97 from '@plugins/english/NovelsKnight[lightnovelwp]';
import p_98 from '@plugins/english/NovelTranslate[madara]';
import p_99 from '@plugins/english/novelupdates';
import p_100 from '@plugins/english/PandaMachineTranslations[lightnovelwp]';
import p_101 from '@plugins/english/PastelTales[madara]';
import p_102 from '@plugins/english/pawread';
import p_103 from '@plugins/english/PenguinSquad[fictioneer]';
import p_104 from '@plugins/english/Prizma[fictioneer]';
import p_105 from '@plugins/english/rainofsnow';
import p_106 from '@plugins/english/Ranobes[ranobes]';
import p_107 from '@plugins/english/Ranovel[madara]';
import p_108 from '@plugins/english/ReadFanfic[madara]';
import p_109 from '@plugins/english/readfrom';
import p_110 from '@plugins/english/ReadNovelFull[readnovelfull]';
import p_111 from '@plugins/english/relibrary';
import p_112 from '@plugins/english/RequiemTranslations[lightnovelwp]';
import p_113 from '@plugins/english/royalroad';
import p_114 from '@plugins/english/SalmonLatte[madara]';
import p_115 from '@plugins/english/scribblehub';
import p_116 from '@plugins/english/SleepyTranslations[madara]';
import p_117 from '@plugins/english/SonicMTL[madara]';
import p_118 from '@plugins/english/SrankManga[madara]';
import p_119 from '@plugins/english/StorySeedling';
import p_120 from '@plugins/english/SweetEscape[madara]';
import p_121 from '@plugins/english/SystemTranslation[lightnovelwp]';
import p_122 from '@plugins/english/TranslatinOtaku[madara]';
import p_123 from '@plugins/english/TranslationWeaver[lightnovelwp]';
import p_124 from '@plugins/english/UniversalNovel[lightnovelwp]';
import p_125 from '@plugins/english/VandyTranslate[lightnovelwp]';
import p_126 from '@plugins/english/VioletLily[madara]';
import p_127 from '@plugins/english/vynovel';
import p_128 from '@plugins/english/webnovel';
import p_129 from '@plugins/english/WebNovelLover[madara]';
import p_130 from '@plugins/english/WebNovelPub[lightnovelworld]';
import p_131 from '@plugins/english/WebNovelTranslation[madara]';
import p_132 from '@plugins/english/WhiteMoonlightNovels[lightnovelwp]';
import p_133 from '@plugins/english/WooksTeahouse[madara]';
import p_134 from '@plugins/english/WordExcerpt[madara]';
import p_135 from '@plugins/english/wtrlab';
import p_136 from '@plugins/english/Wuxiabox[readwn]';
import p_137 from '@plugins/english/Wuxiafox[readwn]';
import p_138 from '@plugins/english/WuxiaSpace[readwn]';
import p_139 from '@plugins/english/WuxiaV[readwn]';
import p_140 from '@plugins/english/wuxiaworld';
import p_141 from '@plugins/english/WuxiaWorldSite[madara]';
import p_142 from '@plugins/english/ZetroTranslation[madara]';
import p_143 from '@plugins/french/chireads';
import p_144 from '@plugins/french/harkeneliwood';
import p_145 from '@plugins/french/kisswood';
import p_146 from '@plugins/french/LighNovelFR[lightnovelwp]';
import p_147 from '@plugins/french/MassNovel[madara]';
import p_148 from '@plugins/french/MTLNovel(FR)[mtlnovel]';
import p_149 from '@plugins/french/noveldeglace';
import p_150 from '@plugins/french/novhell';
import p_151 from '@plugins/french/warriorlegendtrad';
import p_152 from '@plugins/french/WorldNovel[madara]';
import p_153 from '@plugins/french/wuxialnscantrad';
import p_154 from '@plugins/french/xiaowaz';
import p_155 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]';
import p_156 from '@plugins/indonesian/indowebnovel';
import p_157 from '@plugins/indonesian/MeioNovel[madara]';
import p_158 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]';
import p_159 from '@plugins/indonesian/NovelBookID[madara]';
import p_160 from '@plugins/indonesian/sakuranovel';
import p_161 from '@plugins/indonesian/SekteNovel[lightnovelwp]';
import p_162 from '@plugins/indonesian/Vanovel[madara]';
import p_163 from '@plugins/indonesian/WBNovel[madara]';
import p_164 from '@plugins/japanese/kakuyomu';
import p_165 from '@plugins/japanese/Syosetu';
import p_166 from '@plugins/korean/Agitoon';
import p_167 from '@plugins/korean/FortuneEternal[madara]';
import p_168 from '@plugins/multi/komga';
import p_169 from '@plugins/polish/novelki';
import p_170 from '@plugins/portuguese/BetterNovels[lightnovelwp]';
import p_171 from '@plugins/portuguese/blogdoamonnovels';
import p_172 from '@plugins/portuguese/CentralNovel[lightnovelwp]';
import p_173 from '@plugins/portuguese/Kiniga[madara]';
import p_174 from '@plugins/portuguese/LaNovels[hotnovelpub]';
import p_175 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]';
import p_176 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]';
import p_177 from '@plugins/portuguese/novelmania';
import p_178 from '@plugins/portuguese/tsundoku';
import p_179 from '@plugins/russian/authortoday';
import p_180 from '@plugins/russian/Bookhamster[ifreedom]';
import p_181 from '@plugins/russian/bookriver';
import p_182 from '@plugins/russian/Erolate[rulate]';
import p_183 from '@plugins/russian/EzNovels[hotnovelpub]';
import p_184 from '@plugins/russian/ficbook';
import p_185 from '@plugins/russian/jaomix';
import p_186 from '@plugins/russian/MTLNovel(RU)[mtlnovel]';
import p_187 from '@plugins/russian/neobook';
import p_188 from '@plugins/russian/NovelCool(RU)[novelcool]';
import p_189 from '@plugins/russian/novelTL';
import p_190 from '@plugins/russian/ranobehub';
import p_191 from '@plugins/russian/ranobelib';
import p_192 from '@plugins/russian/ranoberf';
import p_193 from '@plugins/russian/Ranobes(RU)[ranobes]';
import p_194 from '@plugins/russian/renovels';
import p_195 from '@plugins/russian/Rulate[rulate]';
import p_196 from '@plugins/russian/topliba';
import p_197 from '@plugins/russian/zelluloza';
import p_198 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]';
import p_199 from '@plugins/spanish/AllNovelRead[lightnovelwp]';
import p_200 from '@plugins/spanish/AnimesHoy12[madara]';
import p_201 from '@plugins/spanish/hasutl';
import p_202 from '@plugins/spanish/LightNovelDaily[hotnovelpub]';
import p_203 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]';
import p_204 from '@plugins/spanish/novelasligera';
import p_205 from '@plugins/spanish/novelawuxia';
import p_206 from '@plugins/spanish/oasistranslations';
import p_207 from '@plugins/spanish/PanchoTranslations[madara]';
import p_208 from '@plugins/spanish/skynovels';
import p_209 from '@plugins/spanish/TC&Sega[lightnovelwp]';
import p_210 from '@plugins/spanish/TraduccionesAmistosas[madara]';
import p_211 from '@plugins/spanish/tunovelaligera';
import p_212 from '@plugins/spanish/yukitls';
import p_213 from '@plugins/thai/NovelLucky[madara]';
import p_214 from '@plugins/thai/NovelPDF[madara]';
import p_215 from '@plugins/turkish/ArazNovel[madara]';
import p_216 from '@plugins/turkish/EKTAPLAR[madara]';
import p_217 from '@plugins/turkish/epiknovel';
import p_218 from '@plugins/turkish/kakikata[madara]';
import p_219 from '@plugins/turkish/KodeksLibrary[lightnovelwp]';
import p_220 from '@plugins/turkish/MangaTR';
import p_221 from '@plugins/turkish/NABSCANS[madara]';
import p_222 from '@plugins/turkish/Namevt[lightnovelwp]';
import p_223 from '@plugins/turkish/Noveloku[madara]';
import p_224 from '@plugins/turkish/NovelTR[lightnovelwp]';
import p_225 from '@plugins/turkish/RagnarScans[madara]';
import p_226 from '@plugins/turkish/ThNovels[hotnovelpub]';
import p_227 from '@plugins/turkish/TurkceLightNovels[madara]';
import p_228 from '@plugins/turkish/WebNovelOku[madara]';
import p_229 from '@plugins/ukrainian/bakainua';
import p_230 from '@plugins/ukrainian/smakolykytl';
import p_231 from '@plugins/vietnamese/lightnovelvn';
import p_232 from '@plugins/vietnamese/LNHako';
import p_233 from '@plugins/vietnamese/nettruyen';
import p_6 from '@plugins/arabic/Markazriwayat[madara]';
import p_7 from '@plugins/arabic/Novel4Up[madara]';
import p_8 from '@plugins/arabic/NovelsParadise[lightnovelwp]';
import p_9 from '@plugins/arabic/Olaoecyou[madara]';
import p_10 from '@plugins/arabic/rewayatclub';
import p_11 from '@plugins/arabic/Riwyat[madara]';
import p_12 from '@plugins/arabic/sunovels';
import p_13 from '@plugins/chinese/69shu';
import p_14 from '@plugins/chinese/ixdzs8';
import p_15 from '@plugins/chinese/linovel';
import p_16 from '@plugins/chinese/linovelib';
import p_17 from '@plugins/chinese/linovelib_tw';
import p_18 from '@plugins/chinese/novel543';
import p_19 from '@plugins/chinese/Quanben';
import p_20 from '@plugins/english/AllNovelFull[readnovelfull]';
import p_21 from '@plugins/english/AllNovel[readnovelfull]';
import p_22 from '@plugins/english/ao3';
import p_23 from '@plugins/english/ArcaneTranslations[lightnovelwp]';
import p_24 from '@plugins/english/BelleReservoir[madara]';
import p_25 from '@plugins/english/BoxNovel[readnovelfull]';
import p_26 from '@plugins/english/chrysanthemumgarden';
import p_27 from '@plugins/english/CitrusAurora[madara]';
import p_28 from '@plugins/english/CoralBoutique[madara]';
import p_29 from '@plugins/english/CPUnovel[lightnovelwp]';
import p_30 from '@plugins/english/crimsonscrolls';
import p_31 from '@plugins/english/DaoistQuest[fictioneer]';
import p_32 from '@plugins/english/DaoNovel[madara]';
import p_33 from '@plugins/english/DaoTranslate[lightnovelwp]';
import p_34 from '@plugins/english/DearestRosalie[fictioneer]';
import p_35 from '@plugins/english/divinedaolibrary';
import p_36 from '@plugins/english/Dragonholic[madara]';
import p_37 from '@plugins/english/DragonTea[madara]';
import p_38 from '@plugins/english/dreambigtl';
import p_39 from '@plugins/english/DuskBlossoms[madara]';
import p_40 from '@plugins/english/ElloTL[lightnovelwp]';
import p_41 from '@plugins/english/Eternalune[madara]';
import p_42 from '@plugins/english/EtudeTranslations[madara]';
import p_43 from '@plugins/english/FanNovel[readwn]';
import p_44 from '@plugins/english/FansMTL[readwn]';
import p_45 from '@plugins/english/FansTranslations[madara]';
import p_46 from '@plugins/english/faqwikius';
import p_47 from '@plugins/english/fenrirrealm';
import p_48 from '@plugins/english/fictionzone';
import p_49 from '@plugins/english/FirstKissNovel[madara]';
import p_50 from '@plugins/english/Foxaholic[madara]';
import p_51 from '@plugins/english/foxteller';
import p_52 from '@plugins/english/FreeWebNovel[readnovelfull]';
import p_53 from '@plugins/english/GalaxyTranslations[madara]';
import p_54 from '@plugins/english/genesis';
import p_55 from '@plugins/english/Guavaread[madara]';
import p_56 from '@plugins/english/HiraethTranslation[madara]';
import p_57 from '@plugins/english/HotNovelPub[hotnovelpub]';
import p_58 from '@plugins/english/indraTranslations';
import p_59 from '@plugins/english/inkitt';
import p_60 from '@plugins/english/Ippotranslations[lightnovelwp]';
import p_61 from '@plugins/english/KDTNovels[lightnovelwp]';
import p_62 from '@plugins/english/KeopiTranslations[lightnovelwp]';
import p_63 from '@plugins/english/KnoxT[lightnovelwp]';
import p_64 from '@plugins/english/LazyGirlTranslations[lightnovelwp]';
import p_65 from '@plugins/english/leafstudio';
import p_66 from '@plugins/english/LibRead[readnovelfull]';
import p_67 from '@plugins/english/LightNovelCave[lightnovelworld]';
import p_68 from '@plugins/english/LightNovelHeaven[madara]';
import p_69 from '@plugins/english/LightNovelPlus[readnovelfull]';
import p_70 from '@plugins/english/LightNovelPubVip[lightnovelworld]';
import p_71 from '@plugins/english/lightnoveltranslation';
import p_72 from '@plugins/english/LightNovelUpdates[madara]';
import p_73 from '@plugins/english/LilyontheValley[fictioneer]';
import p_74 from '@plugins/english/lnmtl';
import p_75 from '@plugins/english/Ltnovel[readwn]';
import p_76 from '@plugins/english/LulloBox[madara]';
import p_77 from '@plugins/english/LunarLetters[madara]';
import p_78 from '@plugins/english/Meownovel[madara]';
import p_79 from '@plugins/english/MoonlightNovels[lightnovelwp]';
import p_80 from '@plugins/english/MostNovel[madara]';
import p_81 from '@plugins/english/MTLNovel[madara]';
import p_82 from '@plugins/english/MTLNovel[mtlnovel]';
import p_83 from '@plugins/english/mtlreader';
import p_84 from '@plugins/english/mvlempyr';
import p_85 from '@plugins/english/MysticalSeries[madara]';
import p_86 from '@plugins/english/NeoSekaiTranslations[madara]';
import p_87 from '@plugins/english/NitroManga[madara]';
import p_88 from '@plugins/english/NobleMTL[lightnovelwp]';
import p_89 from '@plugins/english/NoiceTranslations[madara]';
import p_90 from '@plugins/english/NovelBin[readnovelfull]';
import p_91 from '@plugins/english/novelbuddy';
import p_92 from '@plugins/english/NovelCool[novelcool]';
import p_93 from '@plugins/english/novelfire';
import p_94 from '@plugins/english/NovelFull[readnovelfull]';
import p_95 from '@plugins/english/novelhall';
import p_96 from '@plugins/english/novelhi';
import p_97 from '@plugins/english/novelight';
import p_98 from '@plugins/english/NovelLib[fictioneer]';
import p_99 from '@plugins/english/NovelMultiverse[madara]';
import p_100 from '@plugins/english/NovelNinja[madara]';
import p_101 from '@plugins/english/NovelOnline';
import p_102 from '@plugins/english/novelrest';
import p_103 from '@plugins/english/NovelsKnight[lightnovelwp]';
import p_104 from '@plugins/english/NovelTranslate[madara]';
import p_105 from '@plugins/english/novelupdates';
import p_106 from '@plugins/english/PandaMachineTranslations[lightnovelwp]';
import p_107 from '@plugins/english/PastelTales[madara]';
import p_108 from '@plugins/english/pawread';
import p_109 from '@plugins/english/PenguinSquad[fictioneer]';
import p_110 from '@plugins/english/Prizma[fictioneer]';
import p_111 from '@plugins/english/rainofsnow';
import p_112 from '@plugins/english/Ranobes[ranobes]';
import p_113 from '@plugins/english/Ranovel[madara]';
import p_114 from '@plugins/english/ReadFanfic[madara]';
import p_115 from '@plugins/english/readfrom';
import p_116 from '@plugins/english/ReadNovelFull[readnovelfull]';
import p_117 from '@plugins/english/relibrary';
import p_118 from '@plugins/english/RequiemTranslations[lightnovelwp]';
import p_119 from '@plugins/english/royalroad';
import p_120 from '@plugins/english/SalmonLatte[madara]';
import p_121 from '@plugins/english/scribblehub';
import p_122 from '@plugins/english/SleepyTranslations[madara]';
import p_123 from '@plugins/english/SonicMTL[madara]';
import p_124 from '@plugins/english/SrankManga[madara]';
import p_125 from '@plugins/english/StorySeedling';
import p_126 from '@plugins/english/SweetEscape[madara]';
import p_127 from '@plugins/english/SystemTranslation[lightnovelwp]';
import p_128 from '@plugins/english/TranslatinOtaku[madara]';
import p_129 from '@plugins/english/TranslationWeaver[lightnovelwp]';
import p_130 from '@plugins/english/UniversalNovel[lightnovelwp]';
import p_131 from '@plugins/english/VandyTranslate[lightnovelwp]';
import p_132 from '@plugins/english/VioletLily[madara]';
import p_133 from '@plugins/english/vynovel';
import p_134 from '@plugins/english/webnovel';
import p_135 from '@plugins/english/WebNovelLover[madara]';
import p_136 from '@plugins/english/WebNovelPub[lightnovelworld]';
import p_137 from '@plugins/english/WebNovelTranslation[madara]';
import p_138 from '@plugins/english/WhiteMoonlightNovels[lightnovelwp]';
import p_139 from '@plugins/english/WooksTeahouse[madara]';
import p_140 from '@plugins/english/WordExcerpt[madara]';
import p_141 from '@plugins/english/wtrlab';
import p_142 from '@plugins/english/Wuxiabox[readwn]';
import p_143 from '@plugins/english/Wuxiafox[readwn]';
import p_144 from '@plugins/english/WuxiaSpace[readwn]';
import p_145 from '@plugins/english/WuxiaV[readwn]';
import p_146 from '@plugins/english/wuxiaworld';
import p_147 from '@plugins/english/WuxiaWorldSite[madara]';
import p_148 from '@plugins/english/ZetroTranslation[madara]';
import p_149 from '@plugins/french/chireads';
import p_150 from '@plugins/french/harkeneliwood';
import p_151 from '@plugins/french/kisswood';
import p_152 from '@plugins/french/LighNovelFR[lightnovelwp]';
import p_153 from '@plugins/french/MassNovel[madara]';
import p_154 from '@plugins/french/MTLNovel(FR)[mtlnovel]';
import p_155 from '@plugins/french/noveldeglace';
import p_156 from '@plugins/french/novhell';
import p_157 from '@plugins/french/warriorlegendtrad';
import p_158 from '@plugins/french/WorldNovel[madara]';
import p_159 from '@plugins/french/wuxialnscantrad';
import p_160 from '@plugins/french/xiaowaz';
import p_161 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]';
import p_162 from '@plugins/indonesian/indowebnovel';
import p_163 from '@plugins/indonesian/MeioNovel[madara]';
import p_164 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]';
import p_165 from '@plugins/indonesian/NovelBookID[madara]';
import p_166 from '@plugins/indonesian/sakuranovel';
import p_167 from '@plugins/indonesian/SekteNovel[lightnovelwp]';
import p_168 from '@plugins/indonesian/Vanovel[madara]';
import p_169 from '@plugins/indonesian/WBNovel[madara]';
import p_170 from '@plugins/japanese/kakuyomu';
import p_171 from '@plugins/japanese/Syosetu';
import p_172 from '@plugins/korean/Agitoon';
import p_173 from '@plugins/korean/FortuneEternal[madara]';
import p_174 from '@plugins/multi/komga';
import p_175 from '@plugins/polish/novelki';
import p_176 from '@plugins/portuguese/BetterNovels[lightnovelwp]';
import p_177 from '@plugins/portuguese/blogdoamonnovels';
import p_178 from '@plugins/portuguese/CentralNovel[lightnovelwp]';
import p_179 from '@plugins/portuguese/illusia';
import p_180 from '@plugins/portuguese/Kiniga[madara]';
import p_181 from '@plugins/portuguese/LaNovels[hotnovelpub]';
import p_182 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]';
import p_183 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]';
import p_184 from '@plugins/portuguese/novelmania';
import p_185 from '@plugins/portuguese/tsundoku';
import p_186 from '@plugins/russian/authortoday';
import p_187 from '@plugins/russian/Bllate[rulate]';
import p_188 from '@plugins/russian/Bookhamster[ifreedom]';
import p_189 from '@plugins/russian/bookriver';
import p_190 from '@plugins/russian/Erolate[rulate]';
import p_191 from '@plugins/russian/EzNovels[hotnovelpub]';
import p_192 from '@plugins/russian/ficbook';
import p_193 from '@plugins/russian/jaomix';
import p_194 from '@plugins/russian/MTLNovel(RU)[mtlnovel]';
import p_195 from '@plugins/russian/neobook';
import p_196 from '@plugins/russian/NovelCool(RU)[novelcool]';
import p_197 from '@plugins/russian/novelTL';
import p_198 from '@plugins/russian/ranobehub';
import p_199 from '@plugins/russian/ranobelib';
import p_200 from '@plugins/russian/ranoberf';
import p_201 from '@plugins/russian/Ranobes(RU)[ranobes]';
import p_202 from '@plugins/russian/renovels';
import p_203 from '@plugins/russian/Rulate[rulate]';
import p_204 from '@plugins/russian/topliba';
import p_205 from '@plugins/russian/zelluloza';
import p_206 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]';
import p_207 from '@plugins/spanish/AllNovelRead[lightnovelwp]';
import p_208 from '@plugins/spanish/AnimesHoy12[madara]';
import p_209 from '@plugins/spanish/hasutl';
import p_210 from '@plugins/spanish/LightNovelDaily[hotnovelpub]';
import p_211 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]';
import p_212 from '@plugins/spanish/NOVA';
import p_213 from '@plugins/spanish/novelasligera';
import p_214 from '@plugins/spanish/novelawuxia';
import p_215 from '@plugins/spanish/novelyra';
import p_216 from '@plugins/spanish/oasistranslations';
import p_217 from '@plugins/spanish/PanchoTranslations[madara]';
import p_218 from '@plugins/spanish/skynovels';
import p_219 from '@plugins/spanish/TC&Sega[lightnovelwp]';
import p_220 from '@plugins/spanish/TraduccionesAmistosas[madara]';
import p_221 from '@plugins/spanish/tunovelaligera';
import p_222 from '@plugins/spanish/yukitls';
import p_223 from '@plugins/thai/NovelLucky[madara]';
import p_224 from '@plugins/thai/NovelPDF[madara]';
import p_225 from '@plugins/turkish/ArazNovel[madara]';
import p_226 from '@plugins/turkish/EKTAPLAR[madara]';
import p_227 from '@plugins/turkish/epiknovel';
import p_228 from '@plugins/turkish/kakikata[madara]';
import p_229 from '@plugins/turkish/KodeksLibrary[lightnovelwp]';
import p_230 from '@plugins/turkish/MangaTR';
import p_231 from '@plugins/turkish/NABSCANS[madara]';
import p_232 from '@plugins/turkish/Namevt[lightnovelwp]';
import p_233 from '@plugins/turkish/Noveloku[madara]';
import p_234 from '@plugins/turkish/NovelTR[lightnovelwp]';
import p_235 from '@plugins/turkish/RagnarScans[madara]';
import p_236 from '@plugins/turkish/ThNovels[hotnovelpub]';
import p_237 from '@plugins/turkish/TurkceLightNovels[madara]';
import p_238 from '@plugins/turkish/WebNovelOku[madara]';
import p_239 from '@plugins/ukrainian/bakainua';
import p_240 from '@plugins/ukrainian/smakolykytl';
import p_241 from '@plugins/vietnamese/lightnovelvn';
import p_242 from '@plugins/vietnamese/LNHako';
import p_243 from '@plugins/vietnamese/nettruyen';
const PLUGINS: Plugin.PluginBase[] = [
p_0,
@@ -469,5 +479,15 @@ const PLUGINS: Plugin.PluginBase[] = [
p_231,
p_232,
p_233,
p_234,
p_235,
p_236,
p_237,
p_238,
p_239,
p_240,
p_241,
p_242,
p_243,
];
export default PLUGINS;
+321
View File
@@ -0,0 +1,321 @@
import { fetchApi } from '@libs/fetch';
import { Plugin } from '@/types/plugin';
import { FilterTypes, Filters } from '@libs/filterInputs';
import { CheerioAPI, load as loadCheerio } from 'cheerio';
import { defaultCover } from '@libs/defaultCover';
import { NovelStatus } from '@libs/novelStatus';
function parseSpanishTextToISO(text: string) {
if (!text) return null;
const now = new Date();
const textLower = text.trim().toLowerCase();
// --- 1. MAPEOS Y EXPRESIONES REGULARES ---
const months = {
enero: 0,
febrero: 1,
marzo: 2,
abril: 3,
mayo: 4,
junio: 5,
julio: 6,
agosto: 7,
septiembre: 8,
octubre: 9,
noviembre: 10,
diciembre: 11,
};
// Expresión para: "21 de febrero de 2026"
const absoluteRegex = /^(\d{1,2})\s+de\s+([a-z]+)\s+de\s+(\d{4})$/i;
// --- 2. EVALUAR FECHAS ABSOLUTAS ---
const absoluteMatch = textLower.match(absoluteRegex);
if (absoluteMatch) {
const day = parseInt(absoluteMatch[1], 10);
const monthStr = absoluteMatch[2];
const year = parseInt(absoluteMatch[3], 10);
const monthIndex = months[monthStr as keyof typeof months];
if (monthIndex !== undefined) {
// Se crea la fecha en hora local (00:00:00)
const date = new Date(year, monthIndex, day);
return date.toISOString();
}
}
// --- 3. EVALUAR FECHAS RELATIVAS ("hace...") ---
if (textLower.startsWith('hace')) {
// Normalizar "un" / "una" a "1" para facilitar el cálculo
let normalized = textLower
.replace(/\b(un|una)\b/g, '1')
.replace('un momento', '0 segundos');
if (normalized.includes('momento')) {
return now.toISOString();
}
const relativeRegex = /(\d+)\s+([a-zñáéíóú]+)/i;
const relativeMatch = normalized.match(relativeRegex);
if (relativeMatch) {
const value = parseInt(relativeMatch[1], 10);
const unit = relativeMatch[2];
const date = new Date(now); // Clonamos la fecha actual
if (unit.startsWith('segundo')) {
date.setSeconds(date.getSeconds() - value);
} else if (unit.startsWith('minuto')) {
date.setMinutes(date.getMinutes() - value);
} else if (unit.startsWith('hora')) {
date.setHours(date.getHours() - value);
} else if (unit.startsWith('dia') || unit.startsWith('día')) {
date.setDate(date.getDate() - value);
} else if (unit.startsWith('mes')) {
date.setMonth(date.getMonth() - value);
} else if (unit.startsWith('año') || unit.startsWith('ano')) {
date.setFullYear(date.getFullYear() - value);
}
return date.toISOString();
}
}
// Si no coincide con ningún formato conocido, intentar el parse nativo o lanzar error
try {
const fallbackDate = new Date(text);
if (!isNaN(fallbackDate.getTime())) return fallbackDate.toISOString();
} catch (e) {
// No se pudo parsear
}
throw new Error(`Formato de fecha no soportado: "${text}"`);
}
class Novelyra implements Plugin.PluginBase {
id = 'novelyra';
name = 'Novelyra';
icon = 'src/es/novelyra/icon.png';
site = 'https://novelyra.com/';
version = '1.0.0';
filters: Filters = {
genres: {
type: FilterTypes.Picker,
label: 'Generos',
value: '',
options: [
{ label: 'Todos', value: '' },
{ label: 'Acción', value: 'accion' },
{ label: 'Aventura', value: 'aventura' },
{ label: 'Fantasía', value: 'fantasia' },
{ label: 'Artes Marciales', value: 'artes-marciales' },
{ label: 'Harén', value: 'haren' },
{ label: 'Romance', value: 'romance' },
{ label: 'Sobrenatural', value: 'sobrenatural' },
{ label: 'Xuanhuan', value: 'xuanhuan' },
{ label: 'Xianxia', value: 'xianxia' },
{ label: 'Comedia', value: 'comedia' },
{ label: 'Ciencia Ficción', value: 'ciencia-ficcion' },
{ label: 'Misterio', value: 'misterio' },
{ label: 'Maduro', value: 'maduro' },
{ label: 'Psicológico', value: 'psicologico' },
{ label: 'Shounen', value: 'shounen' },
{ label: 'Reencarnación', value: 'reencarnacion' },
{ label: 'Mecha', value: 'mecha' },
{ label: 'Vida Escolar', value: 'vida-escolar' },
{ label: 'Josei', value: 'josei' },
{ label: 'Drama', value: 'drama' },
{ label: 'Urbano', value: 'urbano' },
{ label: 'Oriental', value: 'oriental' },
{ label: 'Horror', value: 'horror' },
{ label: 'Tragedia', value: 'tragedia' },
{ label: 'Juegos', value: 'juegos' },
],
},
browse: {
type: FilterTypes.Picker,
label: 'Novelas Populares',
value: 'browse.php',
options: [
{ label: 'Todas las Novelas', value: 'browse.php' },
{ label: '🔥 Hoy', value: 'popular.php?period=today' },
{ label: '📅 Este Mes', value: 'popular.php?period=month' },
{ label: '👑 De Siempre', value: 'popular.php?period=alltime' },
],
},
} satisfies Filters;
private loadNovels(
loadedCheerio: CheerioAPI,
typeNovel: string,
): Plugin.NovelItem[] {
const novels: Plugin.NovelItem[] = [];
loadedCheerio(typeNovel).each((_, ele) => {
const novel = loadedCheerio(ele);
novels.push({
name: novel.find('h3').text(),
path: novel.find('a').attr('href')?.replace(this.site, '') || '',
cover: novel.find('img').attr('src') || defaultCover,
});
});
return novels;
}
async popularNovels(
pageNo: number,
{
showLatestNovels,
filters,
}: Plugin.PopularNovelsOptions<typeof this.filters>,
): Promise<Plugin.NovelItem[]> {
let url = this.site;
let typeNovel = '#novelas .novel-card';
const genre = filters.genres?.value as string;
const browse = filters.browse?.value as string;
if (!showLatestNovels) {
if (browse.startsWith('popular.php')) {
url = `${this.site}${browse}`;
typeNovel = '.popular-item';
} else {
const params = new URLSearchParams();
params.append('page', String(pageNo));
if (genre) {
params.append('genre', genre);
}
url = `${this.site}${browse}?${params.toString()}`;
typeNovel = '.novels-grid .novel-card';
}
}
const result = await fetchApi(url);
const body = await result.text();
const loadedCheerio = loadCheerio(body);
return this.loadNovels(loadedCheerio, typeNovel);
}
async parseNovel(novelPath: string): Promise<Plugin.SourceNovel> {
const result = await fetchApi(this.site + novelPath);
const body = await result.text();
const loadedCheerio = loadCheerio(body);
const novel: Plugin.SourceNovel = {
path: novelPath,
name: loadedCheerio('h1').text(),
};
novel.cover = loadedCheerio('img').attr('src') || defaultCover;
novel.genres = loadedCheerio('.novel-meta .novel-genres')
.text()
.trim()
.replace('\n', ', ');
novel.status = NovelStatus.Completed;
novel.summary = loadedCheerio('.novel-description-detail').text().trim();
const chapters: Plugin.ChapterItem[] = [];
loadedCheerio('.chapter-item-wrapper').each((idx, ele) => {
const cptr = loadedCheerio(ele);
const numberText = cptr.find('.chapter-number').text();
const numberMatch = numberText.match(/(\d+)/);
const chapterNumber = numberMatch ? parseInt(numberMatch[1]) : 0;
const chapter: Plugin.ChapterItem = {
name: cptr.find('.chapter-title').text(),
path: cptr.find('a').attr('href')?.replace(this.site, '') || '',
releaseTime: parseSpanishTextToISO(cptr.find('.chapter-date').text()),
chapterNumber: chapterNumber,
};
chapters.push(chapter);
});
novel.chapters = chapters;
return novel;
}
async parseChapter(chapterPath: string): Promise<string> {
const myHeaders = new Headers();
myHeaders.set(
'User-Agent',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
);
myHeaders.set(
'Accept',
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
);
myHeaders.set('Accept-Language', 'es-ES,es;q=0.9');
myHeaders.set('Referer', this.site);
myHeaders.set('Cache-Control', 'no-cache');
const result = await fetchApi(this.site + chapterPath, {
method: 'GET',
headers: myHeaders,
});
const body = await result.text();
const loadedCheerio = loadCheerio(body);
// Quita scripts
loadedCheerio('script').remove();
// Quita bloques de anuncios
loadedCheerio('.chapter-ad').remove();
// Quita tags de adsense si los hay
loadedCheerio('ins').remove();
const chapterText = loadedCheerio('.chapter-content');
let paragraph: string[] = [];
const chapterHtml: string[] = [];
const tagsPermisive: string[] = ['b', 'i', 'u', 'strong', 'em', 'span'];
chapterText.contents().each((_, element) => {
switch (element.type) {
case 'text':
if (element.data.trim()) {
paragraph.push(element.data.trim());
}
break;
case 'tag':
const originalTag = element.tagName;
if (tagsPermisive.includes(originalTag)) {
paragraph.push(loadedCheerio.html(element));
} else {
if (paragraph.length > 0) {
chapterHtml.push(`<p>${paragraph.join(' ').trim()}</p>`);
paragraph = [];
if (originalTag === 'br') break;
}
chapterHtml.push(loadedCheerio.html(element));
}
break;
}
});
// Close any remaining paragraph
if (paragraph.length > 0) {
chapterHtml.push(`<p>${paragraph.join(' ').trim()}</p>`);
}
return chapterHtml.join('');
}
async searchNovels(
searchTerm: string,
pageNo: number,
): Promise<Plugin.NovelItem[]> {
searchTerm = searchTerm.toLowerCase();
const url = `${this.site}?search=${encodeURIComponent(searchTerm)}`;
const result = await fetchApi(url);
const body = await result.text();
const loadedCheerio = loadCheerio(body);
const typeNovel = '#novelas .novel-card';
return this.loadNovels(loadedCheerio, typeNovel);
}
}
export default new Novelyra();