diff --git a/plugins/english/fucknovelpia.ts b/plugins/english/fucknovelpia.ts new file mode 100644 index 000000000..4384ed50b --- /dev/null +++ b/plugins/english/fucknovelpia.ts @@ -0,0 +1,323 @@ +import { CheerioAPI, load as parseHTML } from 'cheerio'; +import { Plugin } from '@/types/plugin'; +import { defaultCover } from '@libs/defaultCover'; +import { fetchApi } from '@libs/fetch'; +import { Filters, FilterTypes } from '@libs/filterInputs'; + +class FuckNovelpia implements Plugin.PluginBase { + id = 'FuckNovelpia'; + name = 'FuckNovelpia'; + icon = 'src/en/fucknovelpia/icon.png'; + site = 'https://fucknovelpia.com/'; + version = '1.0.0'; + + // Returns false once the site has silently clamped us past the real last page. + hasRequestedPage(cheerio: CheerioAPI, requestedPage: number): boolean { + if (requestedPage <= 1) return true; + const activeText = cheerio('div.pagination a.active').first().text().trim(); + const activePage = parseInt(activeText, 10); + // No pagination at all, or active page doesn't match what we asked for + // -> the site redirected us (usually back to page 1). Stop here. + return !isNaN(activePage) && activePage === requestedPage; + } + + parseNovelsList(cheerio: CheerioAPI): Plugin.NovelItem[] { + const novels: Plugin.NovelItem[] = []; + const seen = new Set(); + + cheerio('div.grid a[href*="/novel/"]').each((i, el) => { + const $el = cheerio(el); + + const href = $el.attr('href'); + if (!href) return; + + const path = href.replace(this.site, '').replace(/^\/+/, ''); + if (!path.startsWith('novel/') || seen.has(path)) return; + + const card = $el.closest('div, li, article'); + const img = + $el.find('img').attr('src') || + card.find('img').first().attr('src') || + undefined; + + const title = + card.find('h3, h2, .title, strong').first().text().trim() || + $el.attr('title')?.trim() || + $el.text().trim().split('\n')[0].trim(); + + if (!title) return; + + seen.add(path); + novels.push({ + name: title, + path, + cover: img || defaultCover, + }); + }); + + return novels; + } + + async popularNovels( + page: number, + { + showLatestNovels, + filters, + }: Plugin.PopularNovelsOptions, + ): Promise { + let link; + if (showLatestNovels) { + link = this.site + 'search.php?q=&sort=latest'; + } else { + link = this.site + 'search.php' + '?q=&sort=popular'; + link += `&sort=${encodeURIComponent(filters?.sort?.value ?? 'newest')}`; + } + + if (page > 1) { + link += '&page=' + page; + } + + const genreIncludeParams = filters?.genres_include?.value + .map(value => `&genres_include%5B%5D=${value}`) + .join(''); + const genreExcludeParams = filters?.genres_exclude?.value + .map(value => `&genres_exclude%5B%5D=${value}`) + .join(''); + link += + '&genre_mode=' + + filters.genres_include_operator.value + + genreIncludeParams + + genreExcludeParams; + + const tagIncludeParams = (filters?.tags_include?.value ?? '') + .split(/[,\s]+/) + .map(tag => tag.trim()) + .filter(Boolean) + .map(tag => `&tags_include%5B%5D=${encodeURIComponent(tag)}`) + .join(''); + const tagExcludeParams = (filters?.tags_exclude?.value ?? '') + .split(/[,\s]+/) + .map(tag => tag.trim()) + .filter(Boolean) + .map(tag => `&tags_exclude%5B%5D=${encodeURIComponent(tag)}`) + .join(''); + link += + '&tag_mode=' + + filters.tags_include_operator.value + + tagIncludeParams + + tagExcludeParams; + + const result = await fetchApi(link); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + + if (!this.hasRequestedPage(loadedCheerio, page)) return []; + return this.parseNovelsList(loadedCheerio); + } + + async parseNovel(novelPath: string): Promise { + const result = await fetchApi(this.site + novelPath); + const body = await result.text(); + + const loadedCheerio = parseHTML(body); + + const infoMap: Record = {}; + loadedCheerio('li, dd, p').each((i, el) => { + const text = loadedCheerio(el).text().trim(); + const match = text.match(/^([A-Za-z][A-Za-z ]{2,20}):\s*(.+)$/); + if (match && !infoMap[match[1].trim()]) { + infoMap[match[1].trim()] = match[2].trim(); + } + }); + + const ogTitle = + loadedCheerio('meta[property="og:title"]').attr('content') || ''; + const name = + loadedCheerio('h1').first().text().trim() || ogTitle.split('·')[0].trim(); + + const cover = + loadedCheerio('meta[property="og:image"]').attr('content') || + defaultCover; + + const summary = + loadedCheerio('meta[property="og:description"]').attr('content') || ''; + + const genres = loadedCheerio( + 'a[href*="tags%5B"], a[href*="tags["], a[href*="genres%5B"], a[href*="genres["]', + ) + .map((i, el) => loadedCheerio(el).text().trim()) + .toArray() + .filter(Boolean) + .join(', '); + + const novel: Plugin.SourceNovel = { + path: novelPath, + name: name || 'Untitled', + cover, + summary, + author: infoMap['Author'] || '', + genres, + chapters: [], + }; + + const rawStatus = infoMap['Status'] || ''; + if (/ongoing/i.test(rawStatus)) { + novel.status = 'Ongoing'; + } else if (/completed/i.test(rawStatus)) { + novel.status = 'Completed'; + } else if (rawStatus) { + novel.status = rawStatus; + } + + const chapters: Plugin.ChapterItem[] = []; + loadedCheerio( + 'a[href*="chapter.php?hash="], a[href*="chapter.php?ch="]', + ).each((i, el) => { + const $el = loadedCheerio(el); + const path = ($el.attr('href') || '') + .trim() + .replace(this.site, '') + .replace(/^\/+/, ''); + const name = $el.text().trim(); + if (!path || !name) return; + chapters.push({ name, path }); + }); + + // Chapters on the novel page are already listed oldest -> newest. + novel.chapters = chapters; + + return novel; + } + + async parseChapter(chapterPath: string): Promise { + const result = await fetchApi(this.site + chapterPath); + const body = await result.text(); + const $ = parseHTML(body); + + const chapter = $('.reader').first(); + + if (!chapter.length) { + return ''; + } + + // Remove things that aren't part of the chapter + chapter.find('.reader-nav').remove(); + chapter.find('script').remove(); + chapter.find('style').remove(); + + return chapter.html()?.replace(/ /g, ' ') ?? ''; + } + + async searchNovels( + searchTerm: string, + page: number, + ): Promise { + let link = this.site + '?q=' + searchTerm.replace(/ /g, '+'); + + if (page > 1) { + link += '&page=' + page; + } + + const result = await fetchApi(link); + const body = await result.text(); + const loadedCheerio = parseHTML(body); + + if (!this.hasRequestedPage(loadedCheerio, page)) return []; + return this.parseNovelsList(loadedCheerio); + } + + filters = { + sort: { + label: 'Sort', + value: 'newest', + options: [ + { label: 'Newest', value: 'newest' }, + { label: 'Popular', value: 'popular' }, + { label: 'Oldest', value: 'oldest' }, + { label: 'Title A-Z', value: 'title' }, + { label: 'Year (Descending)', value: 'year_desc' }, + { label: 'Year (Ascending)', value: 'year_asc' }, + ], + type: FilterTypes.Picker, + }, + genres_include_operator: { + label: 'Include Genres', + value: 'and', + options: [ + { label: 'AND', value: 'and' }, + { label: 'OR', value: 'or' }, + ], + type: FilterTypes.Picker, + }, + genres_include: { + label: 'Genres Include', + value: [], + options: [ + { label: 'Academy', value: '1' }, + { label: 'Action', value: '2' }, + { label: 'Adventure', value: '3' }, + { label: 'Fantasy', value: '4' }, + { label: 'Horror', value: '5' }, + { label: 'Mystery', value: '6' }, + { label: 'Romance', value: '7' }, + { label: 'School', value: '8' }, + { label: 'Martial', value: '9' }, + { label: 'Smut', value: '10' }, + { label: 'Adult', value: '11' }, + { label: 'Harem', value: '12' }, + { label: 'Historical', value: '13' }, + { label: 'Sci-Fi', value: '14' }, + { label: 'Slice of Life', value: '15' }, + { label: 'Sports', value: '16' }, + { label: 'Uncategorized', value: '17' }, + ], + type: FilterTypes.CheckboxGroup, + }, + genres_exclude: { + label: 'Genres Exclude', + value: [], + options: [ + { label: 'Academy', value: '1' }, + { label: 'Action', value: '2' }, + { label: 'Adventure', value: '3' }, + { label: 'Fantasy', value: '4' }, + { label: 'Horror', value: '5' }, + { label: 'Mystery', value: '6' }, + { label: 'Romance', value: '7' }, + { label: 'School', value: '8' }, + { label: 'Martial', value: '9' }, + { label: 'Smut', value: '10' }, + { label: 'Adult', value: '11' }, + { label: 'Harem', value: '12' }, + { label: 'Historical', value: '13' }, + { label: 'Sci-Fi', value: '14' }, + { label: 'Slice of Life', value: '15' }, + { label: 'Sports', value: '16' }, + { label: 'Uncategorized', value: '17' }, + ], + type: FilterTypes.CheckboxGroup, + }, + tags_include_operator: { + label: 'Include Tags', + value: 'and', + options: [ + { label: 'AND', value: 'and' }, + { label: 'OR', value: 'or' }, + ], + type: FilterTypes.Picker, + }, + tags_include: { + label: 'Tags Include', + value: '', + type: FilterTypes.TextInput, + }, + tags_exclude: { + label: 'Tags Exclude', + value: '', + type: FilterTypes.TextInput, + }, + } satisfies Filters; +} + +export default new FuckNovelpia(); diff --git a/plugins/index.ts b/plugins/index.ts index 448606c58..6f75ee2b6 100644 --- a/plugins/index.ts +++ b/plugins/index.ts @@ -53,204 +53,205 @@ import p_50 from '@plugins/english/FirstKissNovel[madara]'; import p_51 from '@plugins/english/Foxaholic[madara]'; import p_52 from '@plugins/english/foxteller'; import p_53 from '@plugins/english/FreeWebNovel[readnovelfull]'; -import p_54 from '@plugins/english/GalaxyTranslations[madara]'; -import p_55 from '@plugins/english/genesis'; -import p_56 from '@plugins/english/Guavaread[madara]'; -import p_57 from '@plugins/english/HiraethTranslation[madara]'; -import p_58 from '@plugins/english/HotNovelPub[hotnovelpub]'; -import p_59 from '@plugins/english/HyacinthinBloom[lightnovelwp]'; -import p_60 from '@plugins/english/indraTranslations'; -import p_61 from '@plugins/english/inkitt'; -import p_62 from '@plugins/english/inoveltranslation'; -import p_63 from '@plugins/english/Ippotranslations[lightnovelwp]'; -import p_64 from '@plugins/english/KDTNovels[lightnovelwp]'; -import p_65 from '@plugins/english/KeopiTranslations[lightnovelwp]'; -import p_66 from '@plugins/english/KnoxT[lightnovelwp]'; -import p_67 from '@plugins/english/LazyGirlTranslations[lightnovelwp]'; -import p_68 from '@plugins/english/leafstudio'; -import p_69 from '@plugins/english/LibRead[readnovelfull]'; -import p_70 from '@plugins/english/LightNovelCave[lightnovelworld]'; -import p_71 from '@plugins/english/LightNovelHeaven[madara]'; -import p_72 from '@plugins/english/LightNovelPlus[readnovelfull]'; -import p_73 from '@plugins/english/LightNovelPubVip[lightnovelworld]'; -import p_74 from '@plugins/english/lightnoveltranslation'; -import p_75 from '@plugins/english/LightNovelUpdates[madara]'; -import p_76 from '@plugins/english/LilyontheValley[fictioneer]'; -import p_77 from '@plugins/english/lnmtl'; -import p_78 from '@plugins/english/lnori'; -import p_79 from '@plugins/english/Ltnovel[readwn]'; -import p_80 from '@plugins/english/LulloBox[madara]'; -import p_81 from '@plugins/english/LunarLetters[madara]'; -import p_82 from '@plugins/english/Meownovel[madara]'; -import p_83 from '@plugins/english/MoonlightNovels[lightnovelwp]'; -import p_84 from '@plugins/english/MostNovel[madara]'; -import p_85 from '@plugins/english/MTLNovel[madara]'; -import p_86 from '@plugins/english/MTLNovel[mtlnovel]'; -import p_87 from '@plugins/english/mvlempyr'; -import p_88 from '@plugins/english/MysticalSeries[madara]'; -import p_89 from '@plugins/english/NeoSekaiTranslations[madara]'; -import p_90 from '@plugins/english/NitroManga[madara]'; -import p_91 from '@plugins/english/NobleMTL[lightnovelwp]'; -import p_92 from '@plugins/english/NoiceTranslations[madara]'; -import p_93 from '@plugins/english/novelarrow'; -import p_94 from '@plugins/english/NovelBin[readnovelfull]'; -import p_95 from '@plugins/english/novelbuddy'; -import p_96 from '@plugins/english/NovelCool[novelcool]'; -import p_97 from '@plugins/english/novelfire'; -import p_98 from '@plugins/english/NovelFull[readnovelfull]'; -import p_99 from '@plugins/english/novelhall'; -import p_100 from '@plugins/english/novelhi'; -import p_101 from '@plugins/english/novelight'; -import p_102 from '@plugins/english/NovelLib[fictioneer]'; -import p_103 from '@plugins/english/NovelMultiverse[madara]'; -import p_104 from '@plugins/english/NovelNinja[madara]'; -import p_105 from '@plugins/english/NovelOnline'; -import p_106 from '@plugins/english/novelrest'; -import p_107 from '@plugins/english/NovelsKnight[lightnovelwp]'; -import p_108 from '@plugins/english/NovelTranslate[madara]'; -import p_109 from '@plugins/english/novelupdates'; -import p_110 from '@plugins/english/PandaMachineTranslations[lightnovelwp]'; -import p_111 from '@plugins/english/PastelTales[madara]'; -import p_112 from '@plugins/english/pawread'; -import p_113 from '@plugins/english/PenguinSquad[fictioneer]'; -import p_114 from '@plugins/english/Prizma[fictioneer]'; -import p_115 from '@plugins/english/rainofsnow'; -import p_116 from '@plugins/english/Ranobes[ranobes]'; -import p_117 from '@plugins/english/Ranovel[madara]'; -import p_118 from '@plugins/english/ReadFanfic[madara]'; -import p_119 from '@plugins/english/readfrom'; -import p_120 from '@plugins/english/ReadNovelFull[readnovelfull]'; -import p_121 from '@plugins/english/relibrary'; -import p_122 from '@plugins/english/RequiemTranslations[lightnovelwp]'; -import p_123 from '@plugins/english/royalroad'; -import p_124 from '@plugins/english/SalmonLatte[madara]'; -import p_125 from '@plugins/english/scribblehub'; -import p_126 from '@plugins/english/SleepyTranslations[madara]'; -import p_127 from '@plugins/english/SonicMTL[madara]'; -import p_128 from '@plugins/english/SrankManga[madara]'; -import p_129 from '@plugins/english/StorySeedling'; -import p_130 from '@plugins/english/SweetEscape[madara]'; -import p_131 from '@plugins/english/SystemTranslation[lightnovelwp]'; -import p_132 from '@plugins/english/TranslatinOtaku[madara]'; -import p_133 from '@plugins/english/TranslationWeaver[lightnovelwp]'; -import p_134 from '@plugins/english/UniversalNovel[lightnovelwp]'; -import p_135 from '@plugins/english/VandyTranslate[lightnovelwp]'; -import p_136 from '@plugins/english/VioletLily[madara]'; -import p_137 from '@plugins/english/vynovel'; -import p_138 from '@plugins/english/wct'; -import p_139 from '@plugins/english/webnovel'; -import p_140 from '@plugins/english/WebNovelLover[madara]'; -import p_141 from '@plugins/english/WebNovelPub[lightnovelworld]'; -import p_142 from '@plugins/english/WebNovelTranslation[madara]'; -import p_143 from '@plugins/english/WhiteMoonlightNovels[lightnovelwp]'; -import p_144 from '@plugins/english/WooksTeahouse[madara]'; -import p_145 from '@plugins/english/WordExcerpt[madara]'; -import p_146 from '@plugins/english/wtrlab'; -import p_147 from '@plugins/english/Wuxiabox[readwn]'; -import p_148 from '@plugins/english/Wuxiafox[readwn]'; -import p_149 from '@plugins/english/WuxiaSpace[readwn]'; -import p_150 from '@plugins/english/WuxiaV[readwn]'; -import p_151 from '@plugins/english/wuxiaworld'; -import p_152 from '@plugins/english/WuxiaWorldSite[madara]'; -import p_153 from '@plugins/english/ZetroTranslation[madara]'; -import p_154 from '@plugins/french/chireads'; -import p_155 from '@plugins/french/harkeneliwood'; -import p_156 from '@plugins/french/kisswood'; -import p_157 from '@plugins/french/LighNovelFR[lightnovelwp]'; -import p_158 from '@plugins/french/MassNovel[madara]'; -import p_159 from '@plugins/french/MTLNovel(FR)[mtlnovel]'; -import p_160 from '@plugins/french/noveldeglace'; -import p_161 from '@plugins/french/novelfrance'; -import p_162 from '@plugins/french/novhell'; -import p_163 from '@plugins/french/rezerowebnovelfr'; -import p_164 from '@plugins/french/warriorlegendtrad'; -import p_165 from '@plugins/french/WorldNovel[madara]'; -import p_166 from '@plugins/french/wuxialnscantrad'; -import p_167 from '@plugins/french/xiaowaz'; -import p_168 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]'; -import p_169 from '@plugins/indonesian/indowebnovel'; -import p_170 from '@plugins/indonesian/MeioNovel[madara]'; -import p_171 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]'; -import p_172 from '@plugins/indonesian/NovelBookID[madara]'; -import p_173 from '@plugins/indonesian/sakuranovel'; -import p_174 from '@plugins/indonesian/SekteNovel[lightnovelwp]'; -import p_175 from '@plugins/indonesian/Vanovel[madara]'; -import p_176 from '@plugins/indonesian/WBNovel[madara]'; -import p_177 from '@plugins/japanese/kakuyomu'; -import p_178 from '@plugins/japanese/Syosetu'; -import p_179 from '@plugins/korean/Agitoon'; -import p_180 from '@plugins/korean/FortuneEternal[madara]'; -import p_181 from '@plugins/multi/komga'; -import p_182 from '@plugins/polish/novelki'; -import p_183 from '@plugins/portuguese/BetterNovels[lightnovelwp]'; -import p_184 from '@plugins/portuguese/blogdoamonnovels'; -import p_185 from '@plugins/portuguese/CentralNovel[lightnovelwp]'; -import p_186 from '@plugins/portuguese/illusia'; -import p_187 from '@plugins/portuguese/Kiniga[madara]'; -import p_188 from '@plugins/portuguese/LaNovels[hotnovelpub]'; -import p_189 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]'; -import p_190 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]'; -import p_191 from '@plugins/portuguese/novelmania'; -import p_192 from '@plugins/portuguese/tsundoku'; -import p_193 from '@plugins/russian/authortoday'; -import p_194 from '@plugins/russian/Bllate[rulate]'; -import p_195 from '@plugins/russian/Bookhamster[ifreedom]'; -import p_196 from '@plugins/russian/bookriver'; -import p_197 from '@plugins/russian/Erolate[rulate]'; -import p_198 from '@plugins/russian/EzNovels[hotnovelpub]'; -import p_199 from '@plugins/russian/ficbook'; -import p_200 from '@plugins/russian/jaomix'; -import p_201 from '@plugins/russian/MTLNovel(RU)[mtlnovel]'; -import p_202 from '@plugins/russian/neobook'; -import p_203 from '@plugins/russian/NovelCool(RU)[novelcool]'; -import p_204 from '@plugins/russian/novelTL'; -import p_205 from '@plugins/russian/ranobehub'; -import p_206 from '@plugins/russian/ranobelib'; -import p_207 from '@plugins/russian/ranoberf'; -import p_208 from '@plugins/russian/Ranobes(RU)[ranobes]'; -import p_209 from '@plugins/russian/renovels'; -import p_210 from '@plugins/russian/Rulate[rulate]'; -import p_211 from '@plugins/russian/topliba'; -import p_212 from '@plugins/russian/zelluloza'; -import p_213 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]'; -import p_214 from '@plugins/spanish/AllNovelRead[lightnovelwp]'; -import p_215 from '@plugins/spanish/AnimesHoy12[madara]'; -import p_216 from '@plugins/spanish/hasutl'; -import p_217 from '@plugins/spanish/LightNovelDaily[hotnovelpub]'; -import p_218 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]'; -import p_219 from '@plugins/spanish/NOVA'; -import p_220 from '@plugins/spanish/novelasligera'; -import p_221 from '@plugins/spanish/novelawuxia'; -import p_222 from '@plugins/spanish/novelyra'; -import p_223 from '@plugins/spanish/oasistranslations'; -import p_224 from '@plugins/spanish/PanchoTranslations[madara]'; -import p_225 from '@plugins/spanish/skynovels'; -import p_226 from '@plugins/spanish/TC&Sega[lightnovelwp]'; -import p_227 from '@plugins/spanish/TraduccionesAmistosas[madara]'; -import p_228 from '@plugins/spanish/tunovelaligera'; -import p_229 from '@plugins/spanish/yukitls'; -import p_230 from '@plugins/thai/NovelLucky[madara]'; -import p_231 from '@plugins/thai/NovelPDF[madara]'; -import p_232 from '@plugins/turkish/ArazNovel[madara]'; -import p_233 from '@plugins/turkish/EKTAPLAR[madara]'; -import p_234 from '@plugins/turkish/epiknovel'; -import p_235 from '@plugins/turkish/kakikata[madara]'; -import p_236 from '@plugins/turkish/KodeksLibrary[lightnovelwp]'; -import p_237 from '@plugins/turkish/MangaTR'; -import p_238 from '@plugins/turkish/NABSCANS[madara]'; -import p_239 from '@plugins/turkish/Namevt[lightnovelwp]'; -import p_240 from '@plugins/turkish/Noveloku[madara]'; -import p_241 from '@plugins/turkish/NovelTR[lightnovelwp]'; -import p_242 from '@plugins/turkish/RagnarScans[madara]'; -import p_243 from '@plugins/turkish/ThNovels[hotnovelpub]'; -import p_244 from '@plugins/turkish/TurkceLightNovels[madara]'; -import p_245 from '@plugins/turkish/WebNovelOku[madara]'; -import p_246 from '@plugins/ukrainian/bakainua'; -import p_247 from '@plugins/ukrainian/smakolykytl'; -import p_248 from '@plugins/vietnamese/lightnovelvn'; -import p_249 from '@plugins/vietnamese/LNHako'; -import p_250 from '@plugins/vietnamese/nettruyen'; -import p_251 from '@plugins/vietnamese/truyenss'; +import p_54 from '@plugins/english/fucknovelpia'; +import p_55 from '@plugins/english/GalaxyTranslations[madara]'; +import p_56 from '@plugins/english/genesis'; +import p_57 from '@plugins/english/Guavaread[madara]'; +import p_58 from '@plugins/english/HiraethTranslation[madara]'; +import p_59 from '@plugins/english/HotNovelPub[hotnovelpub]'; +import p_60 from '@plugins/english/HyacinthinBloom[lightnovelwp]'; +import p_61 from '@plugins/english/indraTranslations'; +import p_62 from '@plugins/english/inkitt'; +import p_63 from '@plugins/english/inoveltranslation'; +import p_64 from '@plugins/english/Ippotranslations[lightnovelwp]'; +import p_65 from '@plugins/english/KDTNovels[lightnovelwp]'; +import p_66 from '@plugins/english/KeopiTranslations[lightnovelwp]'; +import p_67 from '@plugins/english/KnoxT[lightnovelwp]'; +import p_68 from '@plugins/english/LazyGirlTranslations[lightnovelwp]'; +import p_69 from '@plugins/english/leafstudio'; +import p_70 from '@plugins/english/LibRead[readnovelfull]'; +import p_71 from '@plugins/english/LightNovelCave[lightnovelworld]'; +import p_72 from '@plugins/english/LightNovelHeaven[madara]'; +import p_73 from '@plugins/english/LightNovelPlus[readnovelfull]'; +import p_74 from '@plugins/english/LightNovelPubVip[lightnovelworld]'; +import p_75 from '@plugins/english/lightnoveltranslation'; +import p_76 from '@plugins/english/LightNovelUpdates[madara]'; +import p_77 from '@plugins/english/LilyontheValley[fictioneer]'; +import p_78 from '@plugins/english/lnmtl'; +import p_79 from '@plugins/english/lnori'; +import p_80 from '@plugins/english/Ltnovel[readwn]'; +import p_81 from '@plugins/english/LulloBox[madara]'; +import p_82 from '@plugins/english/LunarLetters[madara]'; +import p_83 from '@plugins/english/Meownovel[madara]'; +import p_84 from '@plugins/english/MoonlightNovels[lightnovelwp]'; +import p_85 from '@plugins/english/MostNovel[madara]'; +import p_86 from '@plugins/english/MTLNovel[madara]'; +import p_87 from '@plugins/english/MTLNovel[mtlnovel]'; +import p_88 from '@plugins/english/mvlempyr'; +import p_89 from '@plugins/english/MysticalSeries[madara]'; +import p_90 from '@plugins/english/NeoSekaiTranslations[madara]'; +import p_91 from '@plugins/english/NitroManga[madara]'; +import p_92 from '@plugins/english/NobleMTL[lightnovelwp]'; +import p_93 from '@plugins/english/NoiceTranslations[madara]'; +import p_94 from '@plugins/english/novelarrow'; +import p_95 from '@plugins/english/NovelBin[readnovelfull]'; +import p_96 from '@plugins/english/novelbuddy'; +import p_97 from '@plugins/english/NovelCool[novelcool]'; +import p_98 from '@plugins/english/novelfire'; +import p_99 from '@plugins/english/NovelFull[readnovelfull]'; +import p_100 from '@plugins/english/novelhall'; +import p_101 from '@plugins/english/novelhi'; +import p_102 from '@plugins/english/novelight'; +import p_103 from '@plugins/english/NovelLib[fictioneer]'; +import p_104 from '@plugins/english/NovelMultiverse[madara]'; +import p_105 from '@plugins/english/NovelNinja[madara]'; +import p_106 from '@plugins/english/NovelOnline'; +import p_107 from '@plugins/english/novelrest'; +import p_108 from '@plugins/english/NovelsKnight[lightnovelwp]'; +import p_109 from '@plugins/english/NovelTranslate[madara]'; +import p_110 from '@plugins/english/novelupdates'; +import p_111 from '@plugins/english/PandaMachineTranslations[lightnovelwp]'; +import p_112 from '@plugins/english/PastelTales[madara]'; +import p_113 from '@plugins/english/pawread'; +import p_114 from '@plugins/english/PenguinSquad[fictioneer]'; +import p_115 from '@plugins/english/Prizma[fictioneer]'; +import p_116 from '@plugins/english/rainofsnow'; +import p_117 from '@plugins/english/Ranobes[ranobes]'; +import p_118 from '@plugins/english/Ranovel[madara]'; +import p_119 from '@plugins/english/ReadFanfic[madara]'; +import p_120 from '@plugins/english/readfrom'; +import p_121 from '@plugins/english/ReadNovelFull[readnovelfull]'; +import p_122 from '@plugins/english/relibrary'; +import p_123 from '@plugins/english/RequiemTranslations[lightnovelwp]'; +import p_124 from '@plugins/english/royalroad'; +import p_125 from '@plugins/english/SalmonLatte[madara]'; +import p_126 from '@plugins/english/scribblehub'; +import p_127 from '@plugins/english/SleepyTranslations[madara]'; +import p_128 from '@plugins/english/SonicMTL[madara]'; +import p_129 from '@plugins/english/SrankManga[madara]'; +import p_130 from '@plugins/english/StorySeedling'; +import p_131 from '@plugins/english/SweetEscape[madara]'; +import p_132 from '@plugins/english/SystemTranslation[lightnovelwp]'; +import p_133 from '@plugins/english/TranslatinOtaku[madara]'; +import p_134 from '@plugins/english/TranslationWeaver[lightnovelwp]'; +import p_135 from '@plugins/english/UniversalNovel[lightnovelwp]'; +import p_136 from '@plugins/english/VandyTranslate[lightnovelwp]'; +import p_137 from '@plugins/english/VioletLily[madara]'; +import p_138 from '@plugins/english/vynovel'; +import p_139 from '@plugins/english/wct'; +import p_140 from '@plugins/english/webnovel'; +import p_141 from '@plugins/english/WebNovelLover[madara]'; +import p_142 from '@plugins/english/WebNovelPub[lightnovelworld]'; +import p_143 from '@plugins/english/WebNovelTranslation[madara]'; +import p_144 from '@plugins/english/WhiteMoonlightNovels[lightnovelwp]'; +import p_145 from '@plugins/english/WooksTeahouse[madara]'; +import p_146 from '@plugins/english/WordExcerpt[madara]'; +import p_147 from '@plugins/english/wtrlab'; +import p_148 from '@plugins/english/Wuxiabox[readwn]'; +import p_149 from '@plugins/english/Wuxiafox[readwn]'; +import p_150 from '@plugins/english/WuxiaSpace[readwn]'; +import p_151 from '@plugins/english/WuxiaV[readwn]'; +import p_152 from '@plugins/english/wuxiaworld'; +import p_153 from '@plugins/english/WuxiaWorldSite[madara]'; +import p_154 from '@plugins/english/ZetroTranslation[madara]'; +import p_155 from '@plugins/french/chireads'; +import p_156 from '@plugins/french/harkeneliwood'; +import p_157 from '@plugins/french/kisswood'; +import p_158 from '@plugins/french/LighNovelFR[lightnovelwp]'; +import p_159 from '@plugins/french/MassNovel[madara]'; +import p_160 from '@plugins/french/MTLNovel(FR)[mtlnovel]'; +import p_161 from '@plugins/french/noveldeglace'; +import p_162 from '@plugins/french/novelfrance'; +import p_163 from '@plugins/french/novhell'; +import p_164 from '@plugins/french/rezerowebnovelfr'; +import p_165 from '@plugins/french/warriorlegendtrad'; +import p_166 from '@plugins/french/WorldNovel[madara]'; +import p_167 from '@plugins/french/wuxialnscantrad'; +import p_168 from '@plugins/french/xiaowaz'; +import p_169 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]'; +import p_170 from '@plugins/indonesian/indowebnovel'; +import p_171 from '@plugins/indonesian/MeioNovel[madara]'; +import p_172 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]'; +import p_173 from '@plugins/indonesian/NovelBookID[madara]'; +import p_174 from '@plugins/indonesian/sakuranovel'; +import p_175 from '@plugins/indonesian/SekteNovel[lightnovelwp]'; +import p_176 from '@plugins/indonesian/Vanovel[madara]'; +import p_177 from '@plugins/indonesian/WBNovel[madara]'; +import p_178 from '@plugins/japanese/kakuyomu'; +import p_179 from '@plugins/japanese/Syosetu'; +import p_180 from '@plugins/korean/Agitoon'; +import p_181 from '@plugins/korean/FortuneEternal[madara]'; +import p_182 from '@plugins/multi/komga'; +import p_183 from '@plugins/polish/novelki'; +import p_184 from '@plugins/portuguese/BetterNovels[lightnovelwp]'; +import p_185 from '@plugins/portuguese/blogdoamonnovels'; +import p_186 from '@plugins/portuguese/CentralNovel[lightnovelwp]'; +import p_187 from '@plugins/portuguese/illusia'; +import p_188 from '@plugins/portuguese/Kiniga[madara]'; +import p_189 from '@plugins/portuguese/LaNovels[hotnovelpub]'; +import p_190 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]'; +import p_191 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]'; +import p_192 from '@plugins/portuguese/novelmania'; +import p_193 from '@plugins/portuguese/tsundoku'; +import p_194 from '@plugins/russian/authortoday'; +import p_195 from '@plugins/russian/Bllate[rulate]'; +import p_196 from '@plugins/russian/Bookhamster[ifreedom]'; +import p_197 from '@plugins/russian/bookriver'; +import p_198 from '@plugins/russian/Erolate[rulate]'; +import p_199 from '@plugins/russian/EzNovels[hotnovelpub]'; +import p_200 from '@plugins/russian/ficbook'; +import p_201 from '@plugins/russian/jaomix'; +import p_202 from '@plugins/russian/MTLNovel(RU)[mtlnovel]'; +import p_203 from '@plugins/russian/neobook'; +import p_204 from '@plugins/russian/NovelCool(RU)[novelcool]'; +import p_205 from '@plugins/russian/novelTL'; +import p_206 from '@plugins/russian/ranobehub'; +import p_207 from '@plugins/russian/ranobelib'; +import p_208 from '@plugins/russian/ranoberf'; +import p_209 from '@plugins/russian/Ranobes(RU)[ranobes]'; +import p_210 from '@plugins/russian/renovels'; +import p_211 from '@plugins/russian/Rulate[rulate]'; +import p_212 from '@plugins/russian/topliba'; +import p_213 from '@plugins/russian/zelluloza'; +import p_214 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]'; +import p_215 from '@plugins/spanish/AllNovelRead[lightnovelwp]'; +import p_216 from '@plugins/spanish/AnimesHoy12[madara]'; +import p_217 from '@plugins/spanish/hasutl'; +import p_218 from '@plugins/spanish/LightNovelDaily[hotnovelpub]'; +import p_219 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]'; +import p_220 from '@plugins/spanish/NOVA'; +import p_221 from '@plugins/spanish/novelasligera'; +import p_222 from '@plugins/spanish/novelawuxia'; +import p_223 from '@plugins/spanish/novelyra'; +import p_224 from '@plugins/spanish/oasistranslations'; +import p_225 from '@plugins/spanish/PanchoTranslations[madara]'; +import p_226 from '@plugins/spanish/skynovels'; +import p_227 from '@plugins/spanish/TC&Sega[lightnovelwp]'; +import p_228 from '@plugins/spanish/TraduccionesAmistosas[madara]'; +import p_229 from '@plugins/spanish/tunovelaligera'; +import p_230 from '@plugins/spanish/yukitls'; +import p_231 from '@plugins/thai/NovelLucky[madara]'; +import p_232 from '@plugins/thai/NovelPDF[madara]'; +import p_233 from '@plugins/turkish/ArazNovel[madara]'; +import p_234 from '@plugins/turkish/EKTAPLAR[madara]'; +import p_235 from '@plugins/turkish/epiknovel'; +import p_236 from '@plugins/turkish/kakikata[madara]'; +import p_237 from '@plugins/turkish/KodeksLibrary[lightnovelwp]'; +import p_238 from '@plugins/turkish/MangaTR'; +import p_239 from '@plugins/turkish/NABSCANS[madara]'; +import p_240 from '@plugins/turkish/Namevt[lightnovelwp]'; +import p_241 from '@plugins/turkish/Noveloku[madara]'; +import p_242 from '@plugins/turkish/NovelTR[lightnovelwp]'; +import p_243 from '@plugins/turkish/RagnarScans[madara]'; +import p_244 from '@plugins/turkish/ThNovels[hotnovelpub]'; +import p_245 from '@plugins/turkish/TurkceLightNovels[madara]'; +import p_246 from '@plugins/turkish/WebNovelOku[madara]'; +import p_247 from '@plugins/ukrainian/bakainua'; +import p_248 from '@plugins/ukrainian/smakolykytl'; +import p_249 from '@plugins/vietnamese/lightnovelvn'; +import p_250 from '@plugins/vietnamese/LNHako'; +import p_251 from '@plugins/vietnamese/nettruyen'; +import p_252 from '@plugins/vietnamese/truyenss'; const PLUGINS: Plugin.PluginBase[] = [ p_0, @@ -505,5 +506,6 @@ const PLUGINS: Plugin.PluginBase[] = [ p_249, p_250, p_251, + p_252, ]; export default PLUGINS; diff --git a/public/static/src/en/fucknovelpia/icon.png b/public/static/src/en/fucknovelpia/icon.png new file mode 100644 index 000000000..23f31ba1f Binary files /dev/null and b/public/static/src/en/fucknovelpia/icon.png differ