From ef19d9e0561c6f5147161547eb0e7daa448f2fb0 Mon Sep 17 00:00:00 2001 From: Felipe Bonfim Anthiuk <63807267+felipebonfim2006@users.noreply.github.com> Date: Thu, 1 Oct 2026 20:22:34 -0400 Subject: [PATCH] feat(novelsbr): add Novels BR plugin and icon --- plugins/portuguese/novelsbr.ts | 529 ++++++++++++++++++++++ public/static/src/pt-br/novelsbr/icon.png | Bin 0 -> 30669 bytes 2 files changed, 529 insertions(+) create mode 100644 plugins/portuguese/novelsbr.ts create mode 100644 public/static/src/pt-br/novelsbr/icon.png diff --git a/plugins/portuguese/novelsbr.ts b/plugins/portuguese/novelsbr.ts new file mode 100644 index 000000000..3db4c5949 --- /dev/null +++ b/plugins/portuguese/novelsbr.ts @@ -0,0 +1,529 @@ +import { fetchText } from '@libs/fetch'; +import { Plugin } from '@/types/plugin'; +import { Filters, FilterTypes } from '@libs/filterInputs'; +import { load as loadCheerio } from 'cheerio'; +import { defaultCover } from '@libs/defaultCover'; +import { NovelStatus } from '@libs/novelStatus'; + +class NovelsBRPlugin implements Plugin.PluginBase { + id = 'novelsbr'; + name = 'Novels BR'; + icon = 'src/pt-br/novelsbr/icon.png'; + site = 'https://novels-br.com'; + version = '1.0.3'; + + imageRequestInit: Plugin.ImageRequestInit = { + headers: { + Referer: 'https://novels-br.com/', + 'User-Agent': + 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/131.0.0.0 Mobile Safari/537.36', + }, + }; + + filters = { + category: { + label: 'Categoria', + value: '', + type: FilterTypes.Picker, + options: [ + { label: 'Todas', value: '' }, + { label: 'Academia', value: '112' }, + { label: 'Ação', value: '8' }, + { label: 'Adulto', value: '14' }, + { label: 'Alta Fantasia', value: '102' }, + { label: 'Antologia', value: '90' }, + { label: 'Apocalipse', value: '85' }, + { label: 'Apocalíptico', value: '104' }, + { label: 'Artes Marciais', value: '20' }, + { label: 'Aventura', value: '18' }, + { label: 'Baixa Fantasia', value: '107' }, + { label: 'Ciência', value: '117' }, + { label: 'Comédia', value: '6' }, + { label: 'Construção de Reino', value: '88' }, + { label: 'Conto', value: '91' }, + { label: 'Cósmico', value: '89' }, + { label: 'Cotidiano', value: '29' }, + { label: 'Cultivo', value: '79' }, + { label: 'Cyberpunk', value: '108' }, + { label: 'Dark Fantasy', value: '51' }, + { label: 'Dark Sci-Fi', value: '113' }, + { label: 'Distopia', value: '86' }, + { label: 'Drama', value: '4' }, + { label: 'Ecchi', value: '33' }, + { label: 'Épico', value: '65' }, + { label: 'Erótico', value: '44' }, + { label: 'Escolar', value: '34' }, + { label: 'Espacial', value: '111' }, + { label: 'Esportes', value: '116' }, + { label: 'eSports', value: '54' }, + { label: 'Eventos', value: '56' }, + { label: 'Evolução', value: '71' }, + { label: 'Exploração', value: '93' }, + { label: 'Fantasia', value: '22' }, + { label: 'Fantasia Sombria', value: '72' }, + { label: 'Fantasia Urbana', value: '110' }, + { label: 'Ficção', value: '58' }, + { label: 'Ficção Cientifica', value: '25' }, + { label: 'Ficção Científica', value: '98' }, + { label: 'Filosófico', value: '68' }, + { label: 'Futurista', value: '94' }, + { label: 'GameLit', value: '99' }, + { label: 'Gore', value: '66' }, + { label: 'Gótico', value: '103' }, + { label: 'Guerra', value: '63' }, + { label: 'Harém', value: '35' }, + { label: 'Histórico', value: '19' }, + { label: 'Horror', value: '5' }, + { label: 'Horror Cósmico', value: '115' }, + { label: 'Isekai', value: '17' }, + { label: 'Jogos', value: '64' }, + { label: 'Josei', value: '52' }, + { label: 'LGBTQI+', value: '92' }, + { label: 'Light Novel', value: '24' }, + { label: 'LitRPG', value: '82' }, + { label: 'Luta', value: '46' }, + { label: 'Maduro', value: '80' }, + { label: 'Magia', value: '13' }, + { label: 'Mecha', value: '30' }, + { label: 'Medieval', value: '36' }, + { label: 'Militar', value: '31' }, + { label: 'Mistério', value: '40' }, + { label: 'mitologia', value: '57' }, + { label: 'Mitologia', value: '41' }, + { label: 'MMORPG', value: '11' }, + { label: 'Moderno', value: '76' }, + { label: 'Monstros', value: '73' }, + { label: 'Música', value: '55' }, + { label: 'Não-Humano', value: '106' }, + { label: 'Obsceno', value: '83' }, + { label: 'One-shot', value: '2' }, + { label: 'Oneshots', value: '77' }, + { label: 'Original - Novel Mania ©', value: '10' }, + { label: 'Pet', value: '74' }, + { label: 'Política', value: '50' }, + { label: 'Pós-Apocalipse', value: '81' }, + { label: 'Pós-Apocalíptico', value: '101' }, + { label: 'Protagonista Feminina', value: '60' }, + { label: 'Psicológico', value: '37' }, + { label: 'Punk', value: '119' }, + { label: 'Realidade Alternativa', value: '69' }, + { label: 'Realidade Virtual', value: '45' }, + { label: 'Realidade Vitual', value: '1' }, + { label: 'Realismo Mágico', value: '59' }, + { label: 'Reencarnação', value: '3' }, + { label: 'Religião', value: '70' }, + { label: 'Romance', value: '12' }, + { label: 'RPG', value: '7' }, + { label: 'Sci-fi', value: '27' }, + { label: 'Sci-Fi', value: '67' }, + { label: 'Seinen', value: '47' }, + { label: 'Shoujo', value: '48' }, + { label: 'Shounen', value: '49' }, + { label: 'Sistema', value: '75' }, + { label: 'Sistema de Jogo', value: '39' }, + { label: 'Slice of Life', value: '16' }, + { label: 'Sobrenatural', value: '32' }, + { label: 'Sobrevivência', value: '114' }, + { label: 'Steampunk', value: '100' }, + { label: 'Super-Herói', value: '118' }, + { label: 'Super Poderes', value: '87' }, + { label: 'Suspense', value: '43' }, + { label: 'Terror', value: '38' }, + { label: 'Tragédia', value: '15' }, + { label: 'Traição', value: '97' }, + { label: 'Transmigração', value: '78' }, + { label: 'Vida Cotidiana', value: '109' }, + { label: 'Vida Escolar', value: '61' }, + { label: 'Vingança', value: '96' }, + { label: 'VRMMO', value: '26' }, + { label: 'Webnovel', value: '28' }, + { label: 'Wuxia', value: '42' }, + { label: 'Xianxia', value: '9' }, + { label: 'Xuanhuan', value: '23' }, + { label: 'Yaoi', value: '21' }, + { label: 'Yuri', value: '62' }, + ], + }, + } satisfies Filters; + + resolveUrl = (path: string): string => { + if (!path) { + return this.site; + } + + try { + return new URL(path, this.site).toString(); + } catch { + return path; + } + }; + + private normalizePath(path: string): string { + if (!path) { + return ''; + } + + try { + const url = new URL(path, this.site); + return `${url.pathname}${url.search}${url.hash}`; + } catch { + return path; + } + } + + private parseHomeNovels( + $: ReturnType, + sectionSelector: string, + ): Plugin.NovelItem[] { + const novels: Plugin.NovelItem[] = []; + + $(`${sectionSelector} .product__item`).each((_, element) => { + const $item = $(element); + + const $link = $item + .find('.product__item__text h5 a[href^="/novels/"]') + .first(); + + const href = $link.attr('href'); + + if (!href) { + return; + } + + const name = $link.text().replace(/\s+/g, ' ').trim(); + + if (!name) { + return; + } + + const imageUrl = $item.find('.product__item__pic').attr('data-setbg'); + + novels.push({ + name, + path: this.normalizePath(href), + cover: imageUrl || defaultCover, + }); + }); + + return novels; + } + + private parseNovelCards( + $: ReturnType, + ): Plugin.NovelItem[] { + const novels: Plugin.NovelItem[] = []; + + $('#content .card').each((_, element) => { + const $card = $(element); + + const $link = $card.find('a[href^="/novels/"]').first(); + + const href = $link.attr('href'); + + if (!href) { + return; + } + + const path = this.normalizePath(href); + + if (!path.startsWith('/novels/')) { + return; + } + + if (novels.some(novel => novel.path === path)) { + return; + } + + const name = + $card.find('h2.card-title').first().text().trim() || + $link.text().replace(/\s+/g, ' ').trim(); + + if (!name) { + return; + } + + const cover = + $card.find('img.img-fluid.custom-card-img').attr('src') || + $card.find('.col-md-4 img').attr('src') || + $card.find('img[src]').first().attr('src'); + + novels.push({ + name, + path, + cover: cover ? this.resolveUrl(cover) : defaultCover, + }); + }); + + return novels; + } + + async popularNovels( + pageNo: number, + { + showLatestNovels, + filters, + }: Plugin.PopularNovelsOptions, + ): Promise { + try { + const category = filters?.category?.value || ''; + + if (pageNo <= 1 && !category) { + const body = await fetchText(this.site); + + if (!body) { + return []; + } + + const $ = loadCheerio(body); + + return showLatestNovels + ? this.parseHomeNovels($, '.recent__product') + : this.parseHomeNovels($, '.popular__product'); + } + + const params = new URLSearchParams(); + + params.set('simplifiedField', ''); + + if (category) { + params.set('categoryId', category); + } + + params.set('page', String(Math.max(0, pageNo - 1))); + + const body = await fetchText(`${this.site}/novels?${params.toString()}`); + + if (!body) { + return []; + } + + const $ = loadCheerio(body); + + return this.parseNovelCards($); + } catch (error) { + console.log('Erro ao buscar novelas:', error); + return []; + } + } + + async parseNovel(novelPath: string): Promise { + const path = this.normalizePath(novelPath); + + const novel: Plugin.SourceNovel = { + path, + name: 'Untitled', + cover: defaultCover, + chapters: [], + }; + + try { + const body = await fetchText(this.resolveUrl(path)); + + if (!body) { + return novel; + } + + const $ = loadCheerio(body); + + novel.name = + $('h1.mb-0').first().text().trim() || + $('h1').first().text().trim() || + novel.name; + + const author = $('h3[alt]').first().text().trim(); + + if (author) { + novel.author = author; + } + + const cover = + $('meta[property="og:image"]').attr('content') || + $('#heroimg').attr('src') || + $('img').first().attr('src'); + + if (cover) { + novel.cover = this.resolveUrl(cover); + } + + const statusText = $('h5[alt]') + .first() + .text() + .replace(/\s+/g, ' ') + .trim() + .toLowerCase(); + + if ( + statusText.includes('concluído') || + statusText.includes('concluido') || + statusText.includes('completed') + ) { + novel.status = NovelStatus.Completed; + } else if ( + statusText.includes('em andamento') || + statusText.includes('ongoing') + ) { + novel.status = NovelStatus.Ongoing; + } else { + novel.status = NovelStatus.Unknown; + } + + const summary = + $('#hero-novel p').first().text().trim() || + $('.brief-description').first().text().trim(); + + if (summary) { + novel.summary = summary; + } + + const genres: string[] = []; + + $('.tags ul li a, .tags a, .genres a').each((_, element) => { + const genre = $(element).text().trim(); + + if (genre && !genres.includes(genre)) { + genres.push(genre); + } + }); + + if (genres.length > 0) { + novel.genres = genres.join(','); + } + + const chapters: Plugin.ChapterItem[] = []; + + $('#volumes ol li, #volumes li').each((_, element) => { + const $chapter = $(element); + + const chapterHref = + $chapter.find('a.custom-link').first().attr('href') || + $chapter.find('a[href]').first().attr('href'); + + if (!chapterHref) { + return; + } + + const chapterPath = this.normalizePath(chapterHref); + + if (!chapterPath || chapterPath === path) { + return; + } + + const chapterName = + $chapter.find('strong').first().text().trim() || + $chapter + .find('a.custom-link') + .first() + .text() + .replace(/\s+/g, ' ') + .trim() || + $chapter.find('a[href]').first().text().replace(/\s+/g, ' ').trim(); + + if (!chapterName) { + return; + } + + const releaseTime = $chapter + .find('small.text-muted') + .first() + .text() + .replace(/\s+/g, ' ') + .trim(); + + chapters.push({ + name: chapterName, + path: chapterPath, + releaseTime, + chapterNumber: chapters.length + 1, + }); + }); + + novel.chapters = chapters.map((chapter, index) => ({ + ...chapter, + chapterNumber: index + 1, + })); + + return novel; + } catch (error) { + console.log('Erro ao analisar novel:', error); + return novel; + } + } + + async parseChapter(chapterPath: string): Promise { + try { + const body = await fetchText(this.resolveUrl(chapterPath)); + + if (!body) { + return ''; + } + + const $ = loadCheerio(body); + + const content = $('.chapter-content').first(); + + if (!content.length) { + return ''; + } + + content + .find( + 'script, style, noscript, iframe, ins, .adsbygoogle, button, .navigation-buttons, a', + ) + .remove(); + + content + .find('p') + .filter((_, element) => { + const $paragraph = $(element); + const style = ($paragraph.attr('style') || '').toLowerCase(); + + return ( + style.includes('display: none') || + style.includes('display:none') || + $paragraph.attr('hidden') !== undefined + ); + }) + .remove(); + + const paragraphs = content + .find('p') + .map((_, element) => $(element).html()?.trim() || '') + .get() + .filter(Boolean); + + return paragraphs.length > 0 + ? paragraphs.join('

') + : content.html()?.trim() || ''; + } catch (error) { + console.log('Erro ao analisar capítulo:', error); + return ''; + } + } + + async searchNovels( + searchTerm: string, + pageNo: number, + ): Promise { + try { + const params = new URLSearchParams(); + + params.set('simplifiedField', searchTerm); + params.set('page', String(Math.max(0, pageNo - 1))); + + const body = await fetchText(`${this.site}/novels?${params.toString()}`); + + if (!body) { + return []; + } + + const $ = loadCheerio(body); + + return this.parseNovelCards($); + } catch (error) { + console.log('Erro ao pesquisar novels:', error); + return []; + } + } +} + +export default new NovelsBRPlugin(); diff --git a/public/static/src/pt-br/novelsbr/icon.png b/public/static/src/pt-br/novelsbr/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2570ea4075d830127953e7d2f708ad6964c8bd38 GIT binary patch literal 30669 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