import { CheerioAPI, load as parseHTML } from 'cheerio'; import { fetchApi } from '@libs/fetch'; import { Plugin } from '@/types/plugin'; import { Filters, FilterTypes } from '@libs/filterInputs'; import { Parser } from 'htmlparser2'; //has to be here cus this scoping moment // im just gonna disable eslint here instead of reading lol // eslint-disable-next-line @typescript-eslint/no-unused-vars const parserData: { inTag?: string; depthRatingWrapper?: number; depth: number; ret?: { path: string; cover: string; name?: string; avgReview?: string; reviewCount?: string; chapterCount?: string; created?: string; genres?: string; tags?: string; }; parser?: Parser; } = { depth: 0 }; class MVLEMPYRPlugin implements Plugin.PluginBase { id = 'mvlempyr.com'; name = 'MVLEMPYR'; icon = 'src/en/mvlempyr/icon.png'; site = 'https://www.mvlempyr.io/'; version = '1.0.13'; _chapSite = 'https://chap.heliosarchive.online/'; _allNovels: (Plugin.NovelItem & ExtraNovelData)[] | undefined; _allNovelsPromise: Promise<(Plugin.NovelItem & ExtraNovelData)[]> | undefined; checkCaptcha(loadedCheerio: CheerioAPI) { const title = loadedCheerio('title').text(); if ( title === 'Attention Required! | Cloudflare' || title === 'Just a moment...' ) throw new Error('Captcha error, please open in webview'); } async popularNovels( pageNo: number, { filters }: Plugin.PopularNovelsOptions, ): Promise { const data = await this.getAllNovels(); const filtered = data.filter(novel => { for (const genre of filters.genre.value.exclude || []) { if (novel.genres.includes(genre)) { return false; } } for (const genre of filters.genre.value.include || []) { if (!novel.genres.includes(genre)) { return false; } } for (const tag of filters.tag.value.exclude || []) { if (novel.tags.includes(tag)) { return false; } } for (const tag of filters.tag.value.include || []) { if (!novel.tags.includes(tag)) { return false; } } return true; }); const sortKey = filters?.order?.value || 'reviewCount'; // @ts-ignore const sorted = filtered.sort((a, b) => b[sortKey] - a[sortKey]); return this.paginate(sorted, pageNo).map(({ name, path, cover }) => ({ name, path, cover, })); } convertNovelId(e: bigint) { const t = 1999999997n; let u = 1n, c = 7n % t, d = e; for ( ; d > 0; (1n & d) === 1n && (u = (u * c) % t), c = (c * c) % t, d >>= 1n ); return u; } async parseNovel(novelPath: string): Promise { const url = this.site + novelPath; const result = await fetchApi(url); const body = await result.text(); const loadedCheerio = parseHTML(body); this.checkCaptcha(loadedCheerio); const code = loadedCheerio('#novel-code').text(); const newNovelId = this.convertNovelId(BigInt(parseInt(code))); const firstPostsReq = await fetchApi( this._chapSite + 'wp-json/wp/v2/posts?tags=' + newNovelId + '&per_page=500&page=1', ); const pages = parseInt(firstPostsReq.headers.get('X-Wp-Totalpages')) || 1; const posts = [ await firstPostsReq.json(), ...(await Promise.all( new Array(pages - 1) .fill(0) .map((_, i) => i + 2) .map(page => fetchApi( this._chapSite + 'wp-json/wp/v2/posts?tags=' + newNovelId + '&per_page=500&page=' + page, ).then(res => res.json()), ), )), ].flat(); return { path: novelPath, name: loadedCheerio('h1.novel-title').text() || 'Untitled', cover: loadedCheerio('img.novel-image').attr('src'), summary: loadedCheerio('div.synopsis.w-richtext').text().trim(), chapters: posts .map(chap => ({ name: chap.acf.ch_name, path: 'chapter/' + chap.acf.novel_code + '-' + chap.acf.chapter_number, releaseTime: chap.date, chapterNumber: chap.acf.chapter_number, })) .reverse(), status: loadedCheerio('.novelstatustextlarge').text(), author: loadedCheerio( 'div.additionalinfo.tm10 > div.textwrapper:nth-child(1)', ) .toArray() .filter(e => { return ( e.children.length == 2 && e.children[0].children[0].data === 'Author:' ); })[0].children[1].children[0].data, genres: loadedCheerio('.genre-tags') .map((i, el) => loadedCheerio(el).text()) .toArray() .join(','), }; } async parseChapter(chapterPath: string): Promise { const result = await fetchApi(this.site + chapterPath); const body = await result.text(); const loadedCheerio = parseHTML(body); this.checkCaptcha(loadedCheerio); return loadedCheerio('#chapter > span').html() || ''; } async searchNovels( searchTerm: string, page: number, ): Promise { const allNovels = await this.getAllNovels(); const searchResults = allNovels.filter(novel => novel.name.toLowerCase().includes(searchTerm.toLowerCase()), ); return this.paginate(searchResults, page).map(({ name, path, cover }) => ({ name, path, cover, })); } paginate(data: T[], page: number): T[] { const startIndex = (page - 1) * 20; const endIndex = startIndex + 20; return data.slice(startIndex, endIndex); } async getAllNovels() { if (this._allNovelsPromise) { await this._allNovelsPromise; } if (this._allNovels) { return this._allNovels; } this._allNovelsPromise = this.loadAll(); try { this._allNovels = await this._allNovelsPromise; } finally { this._allNovelsPromise = undefined; } return this._allNovels; } async loadAll() { const data = await fetchApi( this._chapSite + 'wp-json/wp/v2/mvl-novels?per_page=10000', ).then(r => r.json()); // @ts-ignore return data.map(novel => { return { name: novel.name, path: 'novel/' + novel.slug, cover: `https://assets.mvlempyr.app/images/600/${novel['novel-code']}.webp`, avgReview: novel['average-review'], reviewCount: novel['total-reviews'], chapterCount: novel['total-chapters'], created: new Date(novel['createdOn']).getTime(), genres: novel.genre, tags: novel.tags, random: Math.random(), }; }); } filters = { order: { type: FilterTypes.Picker, value: 'reviewCount', label: 'Order by', options: [ { label: 'Latest Added', value: 'created' }, { label: 'Best Rated', value: 'avgReview' }, { label: 'Most Reviewed', value: 'reviewCount' }, { label: 'Chapter Count', value: 'chapterCount' }, { label: 'Random', value: 'random' }, ], }, // update genres and tags with this script if needed // console.log([...$0.querySelectorAll("a")].map(a=>{ // return [a.querySelector(".g-ttext").innerText, a.href.split("/tag/").pop()] // }).map(([a, b])=>`{label: '${a.replace('\'', '\\\'')}', value: '${b}'},`).join("\n")) genre: { type: FilterTypes.ExcludableCheckboxGroup, label: 'Genres', value: { include: [], exclude: [], }, options: [ { label: 'Action', value: 'action' }, { label: 'Adult', value: 'adult' }, { label: 'Adventure', value: 'adventure' }, { label: 'Comedy', value: 'comedy' }, { label: 'Drama', value: 'drama' }, { label: 'Ecchi', value: 'ecchi' }, { label: 'Fan-Fiction', value: 'fan-fiction' }, { label: 'Fantasy', value: 'fantasy' }, { label: 'Gender Bender', value: 'gender-bender' }, { label: 'Harem', value: 'harem' }, { label: 'Historical', value: 'historical' }, { label: 'Horror', value: 'horror' }, { label: 'Josei', value: 'josei' }, { label: 'Martial Arts', value: 'martial-arts' }, { label: 'Mature', value: 'mature' }, { label: 'Mecha', value: 'mecha' }, { label: 'Mystery', value: 'mystery' }, { label: 'Psychological', value: 'psychological' }, { label: 'Romance', value: 'romance' }, { label: 'School Life', value: 'school-life' }, { label: 'Sci-fi', value: 'sci-fi' }, { label: 'Seinen', value: 'seinen' }, { label: 'Shoujo', value: 'shoujo' }, { label: 'Shoujo Ai', value: 'shoujo-ai' }, { label: 'Shounen', value: 'shounen' }, { label: 'Shounen Ai', value: 'shounen-ai' }, { label: 'Slice of Life', value: 'slice-of-life' }, { label: 'Smut', value: 'smut' }, { label: 'Sports', value: 'sports' }, { label: 'Supernatural', value: 'supernatural' }, { label: 'Tragedy', value: 'tragedy' }, { label: 'Wuxia', value: 'wuxia' }, { label: 'Xianxia', value: 'xianxia' }, { label: 'Xuanhuan', value: 'xuanhuan' }, { label: 'Yaoi', value: 'yaoi' }, { label: 'Yuri', value: 'yuri' }, ], }, tag: { type: FilterTypes.ExcludableCheckboxGroup, label: 'Tags', value: { include: [], exclude: [], }, options: [ { label: 'Abandoned Children', value: 'abandoned-children' }, { label: 'Ability Steal', value: 'ability-steal' }, { label: 'Absent Parents', value: 'absent-parents' }, { label: 'Abusive Characters', value: 'abusive-characters' }, { label: 'Academy', value: 'academy' }, { label: 'Accelerated Growth', value: 'accelerated-growth' }, { label: 'Acting', value: 'acting' }, { label: 'Adapted from Manga', value: 'adapted-from-manga' }, { label: 'Adapted from Manhua', value: 'adapted-from-manhua' }, { label: 'Adapted to Anime', value: 'adapted-to-anime' }, { label: 'Adapted to Drama', value: 'adapted-to-drama' }, { label: 'Adapted to Drama CD', value: 'adapted-to-drama-cd' }, { label: 'Adapted to Game', value: 'adapted-to-game' }, { label: 'Adapted to Manga', value: 'adapted-to-manga' }, { label: 'Adapted to Manhua', value: 'adapted-to-manhua' }, { label: 'Adapted to Manhwa', value: 'adapted-to-manhwa' }, { label: 'Adapted to Movie', value: 'adapted-to-movie' }, { label: 'Adapted to Visual Novel', value: 'adapted-to-visual-novel' }, { label: 'Adopted Children', value: 'adopted-children' }, { label: 'Adopted Protagonist', value: 'adopted-protagonist' }, { label: 'Adultery', value: 'adultery' }, { label: 'Advanced technology', value: 'advanced-technology' }, { label: 'Adventurers', value: 'adventurers' }, { label: 'Affair', value: 'affair' }, { label: 'Age Progression', value: 'age-progression' }, { label: 'Age Regression', value: 'age-regression' }, { label: 'Aggressive Characters', value: 'aggressive-characters' }, { label: 'Alchemy', value: 'alchemy' }, { label: 'Aliens', value: 'aliens' }, { label: 'All-Girls School', value: 'all-girls-school' }, { label: 'Alternate World', value: 'alternate-world' }, { label: 'American Comics', value: 'american-comics' }, { label: 'Amnesia', value: 'amnesia' }, { label: 'Amusement Park', value: 'amusement-park' }, { label: 'An*l', value: 'an-l' }, { label: 'Ancient China', value: 'ancient-china' }, { label: 'Ancient Times', value: 'ancient-times' }, { label: 'Androgynous Characters', value: 'androgynous-characters' }, { label: 'Androids', value: 'androids' }, { label: 'Angels', value: 'angels' }, { label: 'Animal Characteristics', value: 'animal-characteristics' }, { label: 'Animal Rearing', value: 'animal-rearing' }, { label: 'Anti-Heo', value: 'anti-heo' }, { label: 'Anti-Magic', value: 'anti-magic' }, { label: 'Anti-social Protagonist', value: 'anti-social-protagonist' }, { label: 'Antihero Protagonist', value: 'antihero-protagonist' }, { label: 'Antique Shop', value: 'antique-shop' }, { label: 'Apartment Life', value: 'apartment-life' }, { label: 'Apathetic Protagonist', value: 'apathetic-protagonist' }, { label: 'Apocalypse', value: 'apocalypse' }, { label: 'Appearance Changes', value: 'appearance-changes' }, { label: 'Appearance Different from Actual Age', value: 'appearance-different-from-actual-age', }, { label: 'Archery', value: 'archery' }, { label: 'Aristocracy', value: 'aristocracy' }, { label: 'Arms Dealers', value: 'arms-dealers' }, { label: 'Army', value: 'army' }, { label: 'Army Building', value: 'army-building' }, { label: 'Arranged Marriage', value: 'arranged-marriage' }, { label: 'Arrogant Characters', value: 'arrogant-characters' }, { label: 'Artifact Crafting', value: 'artifact-crafting' }, { label: 'Artifacts', value: 'artifacts' }, { label: 'Artificial Intelligence', value: 'artificial-intelligence' }, { label: 'Artists', value: 'artists' }, { label: 'Assassins', value: 'assassins' }, { label: 'Astrologers', value: 'astrologers' }, { label: 'Autism', value: 'autism' }, { label: 'Automatons', value: 'automatons' }, { label: 'Average-looking Protagonist', value: 'average-looking-protagonist', }, { label: 'Award-winning Work', value: 'award-winning-work' }, { label: 'Awkward Protagonist', value: 'awkward-protagonist' }, { label: 'BDSM', value: 'bdsm' }, { label: 'Bands', value: 'bands' }, { label: 'Based on a Movie', value: 'based-on-a-movie' }, { label: 'Based on a Song', value: 'based-on-a-song' }, { label: 'Based on a TV Show', value: 'based-on-a-tv-show' }, { label: 'Based on a Video Game', value: 'based-on-a-video-game' }, { label: 'Based on a Visual Novel', value: 'based-on-a-visual-novel' }, { label: 'Based on an Anime', value: 'based-on-an-anime' }, { label: 'Battle Academy', value: 'battle-academy' }, { label: 'Battle Competition', value: 'battle-competition' }, { label: 'Beast Companions', value: 'beast-companions' }, { label: 'Beastkin', value: 'beastkin' }, { label: 'Beasts', value: 'beasts' }, { label: 'Beautiful Female Lead', value: 'beautiful-female-lead' }, { label: 'Bestiality', value: 'bestiality' }, { label: 'Betrayal', value: 'betrayal' }, { label: 'Bickering Couple', value: 'bickering-couple' }, { label: 'Biochip', value: 'biochip' }, { label: 'Bisexual Protagonist', value: 'bisexual-protagonist' }, { label: 'Black Belly', value: 'black-belly' }, { label: 'Blackmail', value: 'blackmail' }, { label: 'Blacksmith', value: 'blacksmith' }, { label: 'Blind Dates', value: 'blind-dates' }, { label: 'Blind Protagonist', value: 'blind-protagonist' }, { label: 'Blood Manipulation', value: 'blood-manipulation' }, { label: 'Bloodlines', value: 'bloodlines' }, { label: 'Body Swap', value: 'body-swap' }, { label: 'Body Tempering', value: 'body-tempering' }, { label: 'Body-double', value: 'body-double' }, { label: 'Bodyguards', value: 'bodyguards' }, { label: 'Books', value: 'books' }, { label: 'Bookworm', value: 'bookworm' }, { label: 'Boss-Subordinate Relationship', value: 'boss-subordinate-relationship', }, { label: 'Brainwashing', value: 'brainwashing' }, { label: 'Breast Fetish', value: 'breast-fetish' }, { label: 'Broken Engagement', value: 'broken-engagement' }, { label: 'Brother Complex', value: 'brother-complex' }, { label: 'Brotherhood', value: 'brotherhood' }, { label: 'Buddhism', value: 'buddhism' }, { label: 'Bullying', value: 'bullying' }, { label: 'Business Management', value: 'business-management' }, { label: 'Businessmen', value: 'businessmen' }, { label: 'Butlers', value: 'butlers' }, { label: 'C*nnilingus', value: 'c-nnilingus' }, { label: 'Calm Protagonist', value: 'calm-protagonist' }, { label: 'Cannibalism', value: 'cannibalism' }, { label: 'Card Games', value: 'card-games' }, { label: 'Carefree Protagonist', value: 'carefree-protagonist' }, { label: 'Caring Protagonist', value: 'caring-protagonist' }, { label: 'Cautious Protagonist', value: 'cautious-protagonist' }, { label: 'Celebrities', value: 'celebrities' }, { label: 'Character Growth', value: 'character-growth' }, { label: 'Charismatic Protagonist', value: 'charismatic-protagonist' }, { label: 'Charming Protagonist', value: 'charming-protagonist' }, { label: 'Chat Rooms', value: 'chat-rooms' }, { label: 'Cheats', value: 'cheats' }, { label: 'Chefs', value: 'chefs' }, { label: 'Child Abuse', value: 'child-abuse' }, { label: 'Child Protagonist', value: 'child-protagonist' }, { label: 'Childcare', value: 'childcare' }, { label: 'Childhood Friends', value: 'childhood-friends' }, { label: 'Childhood Love', value: 'childhood-love' }, { label: 'Childhood Promise', value: 'childhood-promise' }, { label: 'Childish Protagonist', value: 'childish-protagonist' }, { label: 'Chuunibyou', value: 'chuunibyou' }, { label: 'Clan Building', value: 'clan-building' }, { label: 'Classic', value: 'classic' }, { label: 'Clever Protagonist', value: 'clever-protagonist' }, { label: 'Clingy Lover', value: 'clingy-lover' }, { label: 'Clones', value: 'clones' }, { label: 'Clubs', value: 'clubs' }, { label: 'Clumsy Love Interests', value: 'clumsy-love-interests' }, { label: 'Co-Workers', value: 'co-workers' }, { label: 'Cohabitation', value: 'cohabitation' }, { label: 'Cold Love Interests', value: 'cold-love-interests' }, { label: 'Cold Protagonist', value: 'cold-protagonist' }, { label: 'Collection of Short Stories', value: 'collection-of-short-stories', }, { label: 'College/University', value: 'college-university' }, { label: 'Coma', value: 'coma' }, { label: 'Comedic Undertone', value: 'comedic-undertone' }, { label: 'Coming of Age', value: 'coming-of-age' }, { label: 'Complex Family Relationships', value: 'complex-family-relationships', }, { label: 'Conditional Power', value: 'conditional-power' }, { label: 'Confident Protagonist', value: 'confident-protagonist' }, { label: 'Confinement', value: 'confinement' }, { label: 'Conflicting Loyalties', value: 'conflicting-loyalties' }, { label: 'Contracts', value: 'contracts' }, { label: 'Cooking', value: 'cooking' }, { label: 'Corruption', value: 'corruption' }, { label: 'Cosmic Wars', value: 'cosmic-wars' }, { label: 'Cosplay', value: 'cosplay' }, { label: 'Couple Growth', value: 'couple-growth' }, { label: 'Court Official', value: 'court-official' }, { label: 'Cousins', value: 'cousins' }, { label: 'Cowardly Protagonist', value: 'cowardly-protagonist' }, { label: 'Crafting', value: 'crafting' }, { label: 'Crime', value: 'crime' }, { label: 'Criminals', value: 'criminals' }, { label: 'Cross-dressing', value: 'cross-dressing' }, { label: 'Crossover', value: 'crossover' }, { label: 'Cruel Characters', value: 'cruel-characters' }, { label: 'Cryostasis', value: 'cryostasis' }, { label: 'Cultivation', value: 'cultivation' }, { label: 'Cunning Protagonist', value: 'cunning-protagonist' }, { label: 'Curious Protagonist', value: 'curious-protagonist' }, { label: 'Curses', value: 'curses' }, { label: 'Cute Children', value: 'cute-children' }, { label: 'Cute Protagonist', value: 'cute-protagonist' }, { label: 'Cute Story', value: 'cute-story' }, { label: 'DC', value: 'dc' }, { label: 'Dancers', value: 'dancers' }, { label: 'Dao Companion', value: 'dao-companion' }, { label: 'Dao Comprehension', value: 'dao-comprehension' }, { label: 'Daoism', value: 'daoism' }, { label: 'Dark', value: 'dark' }, { label: 'Dead Protagonist', value: 'dead-protagonist' }, { label: 'Death', value: 'death' }, { label: 'Death of Loved Ones', value: 'death-of-loved-ones' }, { label: 'Debts', value: 'debts' }, { label: 'Delinquents', value: 'delinquents' }, { label: 'Delusions', value: 'delusions' }, { label: 'Demi-Humans', value: 'demi-humans' }, { label: 'Demon Lord', value: 'demon-lord' }, { label: 'Demonic Cultivation Technique', value: 'demonic-cultivation-technique', }, { label: 'Demons', value: 'demons' }, { label: 'Dense Protagonist', value: 'dense-protagonist' }, { label: 'Depictions of Cruelty', value: 'depictions-of-cruelty' }, { label: 'Depression', value: 'depression' }, { label: 'Destiny', value: 'destiny' }, { label: 'Detectives', value: 'detectives' }, { label: 'Determined Protagonist', value: 'determined-protagonist' }, { label: 'Devoted Love Interests', value: 'devoted-love-interests' }, { label: 'Different Social Status', value: 'different-social-status' }, { label: 'Disabilities', value: 'disabilities' }, { label: 'Discrimination', value: 'discrimination' }, { label: 'Disfigurement', value: 'disfigurement' }, { label: 'Dishonest Protagonist', value: 'dishonest-protagonist' }, { label: 'Distrustful Protagonist', value: 'distrustful-protagonist' }, { label: 'Divination', value: 'divination' }, { label: 'Divine Protection', value: 'divine-protection' }, { label: 'Divorce', value: 'divorce' }, { label: 'Doctors', value: 'doctors' }, { label: 'Dolls/Puppets', value: 'dolls-puppets' }, { label: 'Domestic Affairs', value: 'domestic-affairs' }, { label: 'Doting Love Interests', value: 'doting-love-interests' }, { label: 'Doting Older Siblings', value: 'doting-older-siblings' }, { label: 'Doting Parents', value: 'doting-parents' }, { label: 'Dragon Ball', value: 'dragon-ball' }, { label: 'Dragon Riders', value: 'dragon-riders' }, { label: 'Dragon Slayers', value: 'dragon-slayers' }, { label: 'Dragons', value: 'dragons' }, { label: 'Dreams', value: 'dreams' }, { label: 'Drugs', value: 'drugs' }, { label: 'Druids', value: 'druids' }, { label: 'Dungeon Master', value: 'dungeon-master' }, { label: 'Dungeons', value: 'dungeons' }, { label: 'Dwarfs', value: 'dwarfs' }, { label: 'Dystopia', value: 'dystopia' }, { label: 'Early Romance', value: 'early-romance' }, { label: 'Earth Invasion', value: 'earth-invasion' }, { label: 'Easy Going Life', value: 'easy-going-life' }, { label: 'Economics', value: 'economics' }, { label: 'Editors', value: 'editors' }, { label: 'Eidetic Memory', value: 'eidetic-memory' }, { label: 'Elderly Protagonist', value: 'elderly-protagonist' }, { label: 'Elemental Magic', value: 'elemental-magic' }, { label: 'Elves', value: 'elves' }, { label: 'Emotionally Weak Protagonist', value: 'emotionally-weak-protagonist', }, { label: 'Empires', value: 'empires' }, { label: 'Enemies Become Allies', value: 'enemies-become-allies' }, { label: 'Enemies Become Lovers', value: 'enemies-become-lovers' }, { label: 'Engagement', value: 'engagement' }, { label: 'Engineer', value: 'engineer' }, { label: 'Enlightenment', value: 'enlightenment' }, { label: 'Episodic', value: 'episodic' }, { label: 'Eunuch', value: 'eunuch' }, { label: 'European Ambience', value: 'european-ambience' }, { label: 'Evil Gods', value: 'evil-gods' }, { label: 'Evil Organizations', value: 'evil-organizations' }, { label: 'Evil Protagonist', value: 'evil-protagonist' }, { label: 'Evil Religions', value: 'evil-religions' }, { label: 'Evolution', value: 'evolution' }, { label: 'Exhibitionism', value: 'exhibitionism' }, { label: 'Exorcism', value: 'exorcism' }, { label: 'Eye Powers', value: 'eye-powers' }, { label: 'F*llatio', value: 'f-llatio' }, { label: 'Face slapping', value: 'face-slapping' }, { label: 'Fairies', value: 'fairies' }, { label: 'Fallen Angels', value: 'fallen-angels' }, { label: 'Fallen Nobility', value: 'fallen-nobility' }, { label: 'Familial Love', value: 'familial-love' }, { label: 'Familiars', value: 'familiars' }, { label: 'Family', value: 'family' }, { label: 'Family Business', value: 'family-business' }, { label: 'Family Conflict', value: 'family-conflict' }, { label: 'Famous Parents', value: 'famous-parents' }, { label: 'Famous Protagonist', value: 'famous-protagonist' }, { label: 'Fanaticism', value: 'fanaticism' }, { label: 'Fanfiction', value: 'fanfiction' }, { label: 'Fantasy Creatures', value: 'fantasy-creatures' }, { label: 'Fantasy World', value: 'fantasy-world' }, { label: 'Farming', value: 'farming' }, { label: 'Fast Cultivation', value: 'fast-cultivation' }, { label: 'Fast Learner', value: 'fast-learner' }, { label: 'Fat Protagonist', value: 'fat-protagonist' }, { label: 'Fat to Fit', value: 'fat-to-fit' }, { label: 'Fated Lovers', value: 'fated-lovers' }, { label: 'Fearless Protagonist', value: 'fearless-protagonist' }, { label: 'Female Master', value: 'female-master' }, { label: 'Female Protagonist', value: 'female-protagonist' }, { label: 'Female to Male', value: 'female-to-male' }, { label: 'Feng Shui', value: 'feng-shui' }, { label: 'Firearms', value: 'firearms' }, { label: 'First Love', value: 'first-love' }, { label: 'First-time Interc**rse', value: 'first-time-interc-rse' }, { label: 'Flashbacks', value: 'flashbacks' }, { label: 'Fleet Battles', value: 'fleet-battles' }, { label: 'Folklore', value: 'folklore' }, { label: 'Forced Living Arrangements', value: 'forced-living-arrangements', }, { label: 'Forced Marriage', value: 'forced-marriage' }, { label: 'Forced into a Relationship', value: 'forced-into-a-relationship', }, { label: 'Forgetful Protagonist', value: 'forgetful-protagonist' }, { label: 'Former Hero', value: 'former-hero' }, { label: 'Fox Spirits', value: 'fox-spirits' }, { label: 'Friends Become Enemies', value: 'friends-become-enemies' }, { label: 'Friendship', value: 'friendship' }, { label: 'Fujoshi', value: 'fujoshi' }, { label: 'Futanari', value: 'futanari' }, { label: 'Futuristic Setting', value: 'futuristic-setting' }, { label: 'Galge', value: 'galge' }, { label: 'Gambling', value: 'gambling' }, { label: 'Game Elements', value: 'game-elements' }, { label: 'Game Ranking System', value: 'game-ranking-system' }, { label: 'Gamers', value: 'gamers' }, { label: 'Gangs', value: 'gangs' }, { label: 'Gate to Another World', value: 'gate-to-another-world' }, { label: 'Genderless Protagonist', value: 'genderless-protagonist' }, { label: 'Generals', value: 'generals' }, { label: 'Genetic Modifications', value: 'genetic-modifications' }, { label: 'Genies', value: 'genies' }, { label: 'Genius Protagonist', value: 'genius-protagonist' }, { label: 'Ghosts', value: 'ghosts' }, { label: 'Gladiators', value: 'gladiators' }, { label: 'Glasses-wearing Love Interests', value: 'glasses-wearing-love-interests', }, { label: 'Glasses-wearing Protagonist', value: 'glasses-wearing-protagonist', }, { label: 'Goblins', value: 'goblins' }, { label: 'God Protagonist', value: 'god-protagonist' }, { label: 'God-human Relationship', value: 'god-human-relationship' }, { label: 'Goddesses', value: 'goddesses' }, { label: 'Godly Powers', value: 'godly-powers' }, { label: 'Gods', value: 'gods' }, { label: 'Golems', value: 'golems' }, { label: 'Gore', value: 'gore' }, { label: 'Grave Keepers', value: 'grave-keepers' }, { label: 'Grinding', value: 'grinding' }, { label: 'Guardian Relationship', value: 'guardian-relationship' }, { label: 'Guilds', value: 'guilds' }, { label: 'Gunfighters', value: 'gunfighters' }, { label: 'H*ndjob', value: 'h-ndjob' }, { label: 'Hackers', value: 'hackers' }, { label: 'Half-human Protagonist', value: 'half-human-protagonist' }, { label: 'Handsome Male Lead', value: 'handsome-male-lead' }, { label: 'Hard-Working Protagonist', value: 'hard-working-protagonist', }, { label: 'Harem-seeking Protagonist', value: 'harem-seeking-protagonist', }, { label: 'Harry Potter', value: 'harry-potter' }, { label: 'Harsh Training', value: 'harsh-training' }, { label: 'Hated Protagonist', value: 'hated-protagonist' }, { label: 'Healers', value: 'healers' }, { label: 'Heartwarming', value: 'heartwarming' }, { label: 'Heaven', value: 'heaven' }, { label: 'Heavenly Tribulation', value: 'heavenly-tribulation' }, { label: 'Hell', value: 'hell' }, { label: 'Helpful Protagonist', value: 'helpful-protagonist' }, { label: 'Herbalist', value: 'herbalist' }, { label: 'Heroes', value: 'heroes' }, { label: 'Heterochromia', value: 'heterochromia' }, { label: 'Hidden Abilities', value: 'hidden-abilities' }, { label: 'Hiding True Abilities', value: 'hiding-true-abilities' }, { label: 'Hiding True Identity', value: 'hiding-true-identity' }, { label: 'Hikikomori', value: 'hikikomori' }, { label: 'Hollywood', value: 'hollywood' }, { label: 'Homunculus', value: 'homunculus' }, { label: 'Honest Protagonist', value: 'honest-protagonist' }, { label: 'Hospital', value: 'hospital' }, { label: 'Hot-blooded Protagonist', value: 'hot-blooded-protagonist' }, { label: 'Human Experimentation', value: 'human-experimentation' }, { label: 'Human Weapon', value: 'human-weapon' }, { label: 'Human-Nonhuman Relationship', value: 'human-nonhuman-relationship', }, { label: 'Humanoid Protagonist', value: 'humanoid-protagonist' }, { label: 'Hunter x Hunter', value: 'hunter-x-hunter' }, { label: 'Hunters', value: 'hunters' }, { label: 'Hypnotism', value: 'hypnotism' }, { label: 'Identity Crisis', value: 'identity-crisis' }, { label: 'Imaginary Friend', value: 'imaginary-friend' }, { label: 'Immortals', value: 'immortals' }, { label: 'Imperial Harem', value: 'imperial-harem' }, { label: 'Incest', value: 'incest' }, { label: 'Incubus', value: 'incubus' }, { label: 'Indecisive Protagonist', value: 'indecisive-protagonist' }, { label: 'Industrialization', value: 'industrialization' }, { label: 'Inferiority Complex', value: 'inferiority-complex' }, { label: 'Inheritance', value: 'inheritance' }, { label: 'Inscriptions', value: 'inscriptions' }, { label: 'Insects', value: 'insects' }, { label: 'Interconnected Storylines', value: 'interconnected-storylines', }, { label: 'Interdimensional Travel', value: 'interdimensional-travel' }, { label: 'Introverted Protagonist', value: 'introverted-protagonist' }, { label: 'Investigations', value: 'investigations' }, { label: 'Invisibility', value: 'invisibility' }, { label: 'JSDF', value: 'jsdf' }, { label: 'Jack of All Trades', value: 'jack-of-all-trades' }, { label: 'Jealousy', value: 'jealousy' }, { label: 'Jiangshi', value: 'jiangshi' }, { label: 'Jobless Class', value: 'jobless-class' }, { label: 'Jujutsu Kaisen', value: 'jujutsu-kaisen' }, { label: 'Kidnappings', value: 'kidnappings' }, { label: 'Kind Love Interests', value: 'kind-love-interests' }, { label: 'Kingdom Building', value: 'kingdom-building' }, { label: 'Kingdoms', value: 'kingdoms' }, { label: 'Knights', value: 'knights' }, { label: 'Kuudere', value: 'kuudere' }, { label: 'Lack of Common Sense', value: 'lack-of-common-sense' }, { label: 'Language Barrier', value: 'language-barrier' }, { label: 'Late Romance', value: 'late-romance' }, { label: 'Lawyers', value: 'lawyers' }, { label: 'Lazy Protagonist', value: 'lazy-protagonist' }, { label: 'Leadership', value: 'leadership' }, { label: 'Legends', value: 'legends' }, { label: 'Level System', value: 'level-system' }, { label: 'Library', value: 'library' }, { label: 'Limited Lifespan', value: 'limited-lifespan' }, { label: 'Living Abroad', value: 'living-abroad' }, { label: 'Living Alone', value: 'living-alone' }, { label: 'Loli', value: 'loli' }, { label: 'Loneliness', value: 'loneliness' }, { label: 'Loner Protagonist', value: 'loner-protagonist' }, { label: 'Long Separations', value: 'long-separations' }, { label: 'Long-distance Relationship', value: 'long-distance-relationship', }, { label: 'Lost Civilizations', value: 'lost-civilizations' }, { label: 'Lottery', value: 'lottery' }, { label: 'Love Interest Falls in Love First', value: 'love-interest-falls-in-love-first', }, { label: 'Love Rivals', value: 'love-rivals' }, { label: 'Love Triangles', value: 'love-triangles' }, { label: 'Love at First Sight', value: 'love-at-first-sight' }, { label: 'Lovers Reunited', value: 'lovers-reunited' }, { label: 'Low-key Protagonist', value: 'low-key-protagonist' }, { label: 'Loyal Subordinates', value: 'loyal-subordinates' }, { label: 'Lucky Protagonist', value: 'lucky-protagonist' }, { label: 'M*sturbation', value: 'm-sturbation' }, { label: 'MMORPG', value: 'mmorpg' }, { label: 'Mafia', value: 'mafia' }, { label: 'Magic', value: 'magic' }, { label: 'Magic Beasts', value: 'magic-beasts' }, { label: 'Magic Formations', value: 'magic-formations' }, { label: 'Magical Girls', value: 'magical-girls' }, { label: 'Magical Space', value: 'magical-space' }, { label: 'Magical Technology', value: 'magical-technology' }, { label: 'Maids', value: 'maids' }, { label: 'Male Protagonist', value: 'male-protagonist' }, { label: 'Male Yandere', value: 'male-yandere' }, { label: 'Male to Female', value: 'male-to-female' }, { label: 'Management', value: 'management' }, { label: 'Mangaka', value: 'mangaka' }, { label: 'Manipulative Characters', value: 'manipulative-characters' }, { label: 'Manly Gay Couple', value: 'manly-gay-couple' }, { label: 'Marriage', value: 'marriage' }, { label: 'Marriage of Convenience', value: 'marriage-of-convenience' }, { label: 'Martial Spirits', value: 'martial-spirits' }, { label: 'Marvel', value: 'marvel' }, { label: 'Masochistic Characters', value: 'masochistic-characters' }, { label: 'Master-Disciple Relationship', value: 'master-disciple-relationship', }, { label: 'Master-Servant Relationship', value: 'master-servant-relationship', }, { label: 'Matriarchy', value: 'matriarchy' }, { label: 'Mature Protagonist', value: 'mature-protagonist' }, { label: 'Medical Knowledge', value: 'medical-knowledge' }, { label: 'Medieval', value: 'medieval' }, { label: 'Mercenaries', value: 'mercenaries' }, { label: 'Merchants', value: 'merchants' }, { label: 'Military', value: 'military' }, { label: 'Mind Break', value: 'mind-break' }, { label: 'Mind Control', value: 'mind-control' }, { label: 'Misandry', value: 'misandry' }, { label: 'Mismatched Couple', value: 'mismatched-couple' }, { label: 'Misunderstandings', value: 'misunderstandings' }, { label: 'Mob Protagonist', value: 'mob-protagonist' }, { label: 'Models', value: 'models' }, { label: 'Modern Day', value: 'modern-day' }, { label: 'Modern Knowledge', value: 'modern-knowledge' }, { label: 'Money Grubber', value: 'money-grubber' }, { label: 'Monster Girls', value: 'monster-girls' }, { label: 'Monster Society', value: 'monster-society' }, { label: 'Monster Tamer', value: 'monster-tamer' }, { label: 'Monsters', value: 'monsters' }, { label: 'Movies', value: 'movies' }, { label: 'Mpreg', value: 'mpreg' }, { label: 'Multiple Identities', value: 'multiple-identities' }, { label: 'Multiple POV', value: 'multiple-pov' }, { label: 'Multiple Personalities', value: 'multiple-personalities' }, { label: 'Multiple Protagonists', value: 'multiple-protagonists' }, { label: 'Multiple Realms', value: 'multiple-realms' }, { label: 'Multiple Reincarnated Individuals', value: 'multiple-reincarnated-individuals', }, { label: 'Multiple Timelines', value: 'multiple-timelines' }, { label: 'Multiple Transported Individuals', value: 'multiple-transported-individuals', }, { label: 'Murders', value: 'murders' }, { label: 'Music', value: 'music' }, { label: 'Mutated Creatures', value: 'mutated-creatures' }, { label: 'Mutations', value: 'mutations' }, { label: 'Mute Character', value: 'mute-character' }, { label: 'Mysterious Family Background', value: 'mysterious-family-background', }, { label: 'Mysterious Illness', value: 'mysterious-illness' }, { label: 'Mysterious Past', value: 'mysterious-past' }, { label: 'Mystery Solving', value: 'mystery-solving' }, { label: 'Mythical Beasts', value: 'mythical-beasts' }, { label: 'Mythology', value: 'mythology' }, { label: 'Naive Protagonist', value: 'naive-protagonist' }, { label: 'Narcissistic Protagonist', value: 'narcissistic-protagonist', }, { label: 'Naruto', value: 'naruto' }, { label: 'Nationalism', value: 'nationalism' }, { label: 'Near-Death Experience', value: 'near-death-experience' }, { label: 'Necromancer', value: 'necromancer' }, { label: 'Neet', value: 'neet' }, { label: 'Netorare', value: 'netorare' }, { label: 'Netorase', value: 'netorase' }, { label: 'Netori', value: 'netori' }, { label: 'Nightmares', value: 'nightmares' }, { label: 'Ninjas', value: 'ninjas' }, { label: 'Nobles', value: 'nobles' }, { label: 'Non-humanoid Protagonist', value: 'non-humanoid-protagonist', }, { label: 'Non-linear Storytelling', value: 'non-linear-storytelling' }, { label: 'Not-harem', value: 'not-harem' }, { label: 'Nudity', value: 'nudity' }, { label: 'Nurses', value: 'nurses' }, { label: 'Obsessive Love', value: 'obsessive-love' }, { label: 'Office Romance', value: 'office-romance' }, { label: 'Older Love Interests', value: 'older-love-interests' }, { label: 'Omegaverse', value: 'omegaverse' }, { label: 'One Piece', value: 'one-piece' }, { label: 'Oneshot', value: 'oneshot' }, { label: 'Online Romance', value: 'online-romance' }, { label: 'Onmyouji', value: 'onmyouji' }, { label: 'Or*y', value: 'or-y' }, { label: 'Orcs', value: 'orcs' }, { label: 'Organized Crime', value: 'organized-crime' }, { label: 'Orphans', value: 'orphans' }, { label: 'Otaku', value: 'otaku' }, { label: 'Otome Game', value: 'otome-game' }, { label: 'Outcasts', value: 'outcasts' }, { label: 'Outdoor Interc**rse', value: 'outdoor-interc-rse' }, { label: 'Outer Space', value: 'outer-space' }, { label: 'Overpowered Protagonist', value: 'overpowered-protagonist' }, { label: 'Overprotective Siblings', value: 'overprotective-siblings' }, { label: 'Pacifist Protagonist', value: 'pacifist-protagonist' }, { label: 'Paizuri', value: 'paizuri' }, { label: 'Parallel Worlds', value: 'parallel-worlds' }, { label: 'Parasites', value: 'parasites' }, { label: 'Parent Complex', value: 'parent-complex' }, { label: 'Parody', value: 'parody' }, { label: 'Part-Time Job', value: 'part-time-job' }, { label: 'Past Plays a Big Role', value: 'past-plays-a-big-role' }, { label: 'Past Trauma', value: 'past-trauma' }, { label: 'Pe*verted Protagonist', value: 'pe-verted-protagonist' }, { label: 'Persistent Love Interests', value: 'persistent-love-interests', }, { label: 'Personality Changes', value: 'personality-changes' }, { label: 'Pets', value: 'pets' }, { label: 'Pharmacist', value: 'pharmacist' }, { label: 'Philosophical', value: 'philosophical' }, { label: 'Phobias', value: 'phobias' }, { label: 'Phoenixes', value: 'phoenixes' }, { label: 'Photography', value: 'photography' }, { label: 'Pill Based Cultivation', value: 'pill-based-cultivation' }, { label: 'Pill Concocting', value: 'pill-concocting' }, { label: 'Pilots', value: 'pilots' }, { label: 'Pirates', value: 'pirates' }, { label: 'Playboys', value: 'playboys' }, { label: 'Playful Protagonist', value: 'playful-protagonist' }, { label: 'Poetry', value: 'poetry' }, { label: 'Poisons', value: 'poisons' }, { label: 'Police', value: 'police' }, { label: 'Polite Protagonist', value: 'polite-protagonist' }, { label: 'Politics', value: 'politics' }, { label: 'Polyandry', value: 'polyandry' }, { label: 'Polygamy', value: 'polygamy' }, { label: 'Poor Protagonist', value: 'poor-protagonist' }, { label: 'Poor to Rich', value: 'poor-to-rich' }, { label: 'Popular Love Interests', value: 'popular-love-interests' }, { label: 'Possession', value: 'possession' }, { label: 'Possessive Characters', value: 'possessive-characters' }, { label: 'Post-apocalyptic', value: 'post-apocalyptic' }, { label: 'Power Couple', value: 'power-couple' }, { label: 'Power Struggle', value: 'power-struggle' }, { label: 'Pragmatic Protagonist', value: 'pragmatic-protagonist' }, { label: 'Precognition', value: 'precognition' }, { label: 'Pregnancy', value: 'pregnancy' }, { label: 'Pretend Lovers', value: 'pretend-lovers' }, { label: 'Previous Life Talent', value: 'previous-life-talent' }, { label: 'Priestesses', value: 'priestesses' }, { label: 'Priests', value: 'priests' }, { label: 'Prison', value: 'prison' }, { label: 'Proactive Protagonist', value: 'proactive-protagonist' }, { label: 'Programmer', value: 'programmer' }, { label: 'Prophecies', value: 'prophecies' }, { label: 'Prostit**es', value: 'prostit-es' }, { label: 'Protagonist Falls in Love First', value: 'protagonist-falls-in-love-first', }, { label: 'Protagonist Strong from the Start', value: 'protagonist-strong-from-the-start', }, { label: 'Protagonist with Multiple Bodies', value: 'protagonist-with-multiple-bodies', }, { label: 'Psychic Powers', value: 'psychic-powers' }, { label: 'Psychopaths', value: 'psychopaths' }, { label: 'Puppeteers', value: 'puppeteers' }, { label: 'Quiet Characters', value: 'quiet-characters' }, { label: 'Quirky Characters', value: 'quirky-characters' }, { label: 'R*pe', value: 'r-pe' }, { label: 'R*pe Victim Becomes Lover', value: 'r-pe-victim-becomes-lover', }, { label: 'R-15', value: 'r-15' }, { label: 'R-18', value: 'r-18' }, { label: 'Race Change', value: 'race-change' }, { label: 'Racism', value: 'racism' }, { label: 'Rebellion', value: 'rebellion' }, { label: 'Reincarnated as a Monster', value: 'reincarnated-as-a-monster', }, { label: 'Reincarnated as an Object', value: 'reincarnated-as-an-object', }, { label: 'Reincarnated in Another World', value: 'reincarnated-in-another-world', }, { label: 'Reincarnated in a Game World', value: 'reincarnated-in-a-game-world', }, { label: 'Reincarnation', value: 'reincarnation' }, { label: 'Religions', value: 'religions' }, { label: 'Reluctant Protagonist', value: 'reluctant-protagonist' }, { label: 'Reporters', value: 'reporters' }, { label: 'Restaurant', value: 'restaurant' }, { label: 'Resurrection', value: 'resurrection' }, { label: 'Returning from Another World', value: 'returning-from-another-world', }, { label: 'Revenge', value: 'revenge' }, { label: 'Reverse Harem', value: 'reverse-harem' }, { label: 'Reverse R*pe', value: 'reverse-r-pe' }, { label: 'Reversible Couple', value: 'reversible-couple' }, { label: 'Rich to Poor', value: 'rich-to-poor' }, { label: 'Righteous Protagonist', value: 'righteous-protagonist' }, { label: 'Rivalry', value: 'rivalry' }, { label: 'Romantic Subplot', value: 'romantic-subplot' }, { label: 'Roommates', value: 'roommates' }, { label: 'Royalty', value: 'royalty' }, { label: 'Ruthless Protagonist', value: 'ruthless-protagonist' }, { label: 'S*ave Harem', value: 's-ave-harem' }, { label: 'S*ave Protagonist', value: 's-ave-protagonist' }, { label: 'S*aves', value: 's-aves' }, { label: 'S*x Friends', value: 's-x-friends' }, { label: 'S*x S*aves', value: 's-x-s-aves' }, { label: 'S*xual Abuse', value: 's-xual-abuse' }, { label: 'S*xual Cultivation Technique', value: 's-xual-cultivation-technique', }, { label: 'Sadistic Characters', value: 'sadistic-characters' }, { label: 'Saints', value: 'saints' }, { label: 'Salaryman', value: 'salaryman' }, { label: 'Samurai', value: 'samurai' }, { label: 'Saving the World', value: 'saving-the-world' }, { label: 'Schemes And Conspiracies', value: 'schemes-and-conspiracies', }, { label: 'Schizophrenia', value: 'schizophrenia' }, { label: 'Scientists', value: 'scientists' }, { label: 'Sculptors', value: 'sculptors' }, { label: 'Sealed Power', value: 'sealed-power' }, { label: 'Second Chance', value: 'second-chance' }, { label: 'Secret Crush', value: 'secret-crush' }, { label: 'Secret Identity', value: 'secret-identity' }, { label: 'Secret Organizations', value: 'secret-organizations' }, { label: 'Secret Relationship', value: 'secret-relationship' }, { label: 'Secretive Protagonist', value: 'secretive-protagonist' }, { label: 'Secrets', value: 'secrets' }, { label: 'Sect Development', value: 'sect-development' }, { label: 'Seduction', value: 'seduction' }, { label: "Seeing Things Other Humans Can't", value: 'seeing-things-other-humans-cant', }, { label: 'Selfish Protagonist', value: 'selfish-protagonist' }, { label: 'Selfless Protagonist', value: 'selfless-protagonist' }, { label: 'Seme Protagonist', value: 'seme-protagonist' }, { label: 'Senpai-Kouhai Relationship', value: 'senpai-kouhai-relationship', }, { label: 'Sentient Objects', value: 'sentient-objects' }, { label: 'Sentimental Protagonist', value: 'sentimental-protagonist' }, { label: 'Serial Killers', value: 'serial-killers' }, { label: 'Servants', value: 'servants' }, { label: 'Seven Deadly Sins', value: 'seven-deadly-sins' }, { label: 'Seven Virtues', value: 'seven-virtues' }, { label: 'Shameless Protagonist', value: 'shameless-protagonist' }, { label: 'Shapeshifters', value: 'shapeshifters' }, { label: 'Sharing A Body', value: 'sharing-a-body' }, { label: 'Sharp-tongued Characters', value: 'sharp-tongued-characters', }, { label: 'Shield User', value: 'shield-user' }, { label: 'Shikigami', value: 'shikigami' }, { label: 'Short Story', value: 'short-story' }, { label: 'Shota', value: 'shota' }, { label: 'Shoujo-Ai Subplot', value: 'shoujo-ai-subplot' }, { label: 'Shounen-Ai Subplot', value: 'shounen-ai-subplot' }, { label: 'Showbiz', value: 'showbiz' }, { label: 'Shy Characters', value: 'shy-characters' }, { label: 'Sibling Rivalry', value: 'sibling-rivalry' }, { label: "Sibling's Care", value: 'siblings-care' }, { label: 'Siblings', value: 'siblings' }, { label: 'Siblings Not Related by Blood', value: 'siblings-not-related-by-blood', }, { label: 'Sickly Characters', value: 'sickly-characters' }, { label: 'Sign Language', value: 'sign-language' }, { label: 'Singers', value: 'singers' }, { label: 'Single Parent', value: 'single-parent' }, { label: 'Sister Complex', value: 'sister-complex' }, { label: 'Skill Assimilation', value: 'skill-assimilation' }, { label: 'Skill Books', value: 'skill-books' }, { label: 'Skill Creation', value: 'skill-creation' }, { label: 'Sleeping', value: 'sleeping' }, { label: 'Slow Growth at Start', value: 'slow-growth-at-start' }, { label: 'Slow Romance', value: 'slow-romance' }, { label: 'Smart Couple', value: 'smart-couple' }, { label: 'Social Outcasts', value: 'social-outcasts' }, { label: 'Soldiers', value: 'soldiers' }, { label: 'Soul Power', value: 'soul-power' }, { label: 'Souls', value: 'souls' }, { label: 'Spatial Manipulation', value: 'spatial-manipulation' }, { label: 'Spear Wielder', value: 'spear-wielder' }, { label: 'Special Abilities', value: 'special-abilities' }, { label: 'Spies', value: 'spies' }, { label: 'Spirit Advisor', value: 'spirit-advisor' }, { label: 'Spirit Users', value: 'spirit-users' }, { label: 'Spirits', value: 'spirits' }, { label: 'Stalkers', value: 'stalkers' }, { label: 'Stockholm Syndrome', value: 'stockholm-syndrome' }, { label: 'Stoic Characters', value: 'stoic-characters' }, { label: 'Store Owner', value: 'store-owner' }, { label: 'Straight Seme', value: 'straight-seme' }, { label: 'Straight Uke', value: 'straight-uke' }, { label: 'Strategic Battles', value: 'strategic-battles' }, { label: 'Strategist', value: 'strategist' }, { label: 'Strength-based Social Hierarchy', value: 'strength-based-social-hierarchy', }, { label: 'Strong Background', value: 'strong-background' }, { label: 'Strong Love Interests', value: 'strong-love-interests' }, { label: 'Strong to Stronger', value: 'strong-to-stronger' }, { label: 'Stubborn Protagonist', value: 'stubborn-protagonist' }, { label: 'Student Council', value: 'student-council' }, { label: 'Student-Teacher Relationship', value: 'student-teacher-relationship', }, { label: 'Succubus', value: 'succubus' }, { label: 'Sudden Strength Gain', value: 'sudden-strength-gain' }, { label: 'Sudden Wealth', value: 'sudden-wealth' }, { label: 'Suicides', value: 'suicides' }, { label: 'Summoned Hero', value: 'summoned-hero' }, { label: 'Summoning Magic', value: 'summoning-magic' }, { label: 'Survival', value: 'survival' }, { label: 'Survival Game', value: 'survival-game' }, { label: 'Sword And Magic', value: 'sword-and-magic' }, { label: 'Sword Wielder', value: 'sword-wielder' }, { label: 'System', value: 'system' }, { label: 'System Administrator', value: 'system-administrator' }, { label: 'Teachers', value: 'teachers' }, { label: 'Teamwork', value: 'teamwork' }, { label: 'Technological Gap', value: 'technological-gap' }, { label: 'Tentacles', value: 'tentacles' }, { label: 'Terminal Illness', value: 'terminal-illness' }, { label: 'Territory Management', value: 'territory-management' }, { label: 'Terrorists', value: 'terrorists' }, { label: 'Thieves', value: 'thieves' }, { label: 'Threesome', value: 'threesome' }, { label: 'Thriller', value: 'thriller' }, { label: 'Time Loop', value: 'time-loop' }, { label: 'Time Manipulation', value: 'time-manipulation' }, { label: 'Time Paradox', value: 'time-paradox' }, { label: 'Time Skip', value: 'time-skip' }, { label: 'Time Travel', value: 'time-travel' }, { label: 'Timid Protagonist', value: 'timid-protagonist' }, { label: 'Tomboyish Female Lead', value: 'tomboyish-female-lead' }, { label: 'Torture', value: 'torture' }, { label: 'Toys', value: 'toys' }, { label: 'Tragic Past', value: 'tragic-past' }, { label: 'Transformation Ability', value: 'transformation-ability' }, { label: 'Transmigration', value: 'transmigration' }, { label: 'Transplanted Memories', value: 'transplanted-memories' }, { label: 'Transported Modern Structure', value: 'transported-modern-structure', }, { label: 'Transported into a Game World', value: 'transported-into-a-game-world', }, { label: 'Transported to Another World', value: 'transported-to-another-world', }, { label: 'Trap', value: 'trap' }, { label: 'Tribal Society', value: 'tribal-society' }, { label: 'Trickster', value: 'trickster' }, { label: 'Tsundere', value: 'tsundere' }, { label: 'Twins', value: 'twins' }, { label: 'Twisted Personality', value: 'twisted-personality' }, { label: 'Ugly Protagonist', value: 'ugly-protagonist' }, { label: 'Ugly to Beautiful', value: 'ugly-to-beautiful' }, { label: 'Unconditional Love', value: 'unconditional-love' }, { label: 'Underestimated Protagonist', value: 'underestimated-protagonist', }, { label: 'Unique Cultivation Technique', value: 'unique-cultivation-technique', }, { label: 'Unique Weapon User', value: 'unique-weapon-user' }, { label: 'Unique Weapons', value: 'unique-weapons' }, { label: 'Unlimited Flow', value: 'unlimited-flow' }, { label: 'Unlucky Protagonist', value: 'unlucky-protagonist' }, { label: 'Unreliable Narrator', value: 'unreliable-narrator' }, { label: 'Unrequited Love', value: 'unrequited-love' }, { label: 'Valkyries', value: 'valkyries' }, { label: 'Vampires', value: 'vampires' }, { label: 'Villain', value: 'villain' }, { label: 'Villainess Noble Girls', value: 'villainess-noble-girls' }, { label: 'Virtual Reality', value: 'virtual-reality' }, { label: 'Vocaloid', value: 'vocaloid' }, { label: 'Voice Actors', value: 'voice-actors' }, { label: 'Voyeurism', value: 'voyeurism' }, { label: 'Waiters', value: 'waiters' }, { label: 'War Records', value: 'war-records' }, { label: 'Wars', value: 'wars' }, { label: 'Weak Protagonist', value: 'weak-protagonist' }, { label: 'Weak to Strong', value: 'weak-to-strong' }, { label: 'Wealthy Characters', value: 'wealthy-characters' }, { label: 'Werebeasts', value: 'werebeasts' }, { label: 'Wishes', value: 'wishes' }, { label: 'Witches', value: 'witches' }, { label: 'Wizards', value: 'wizards' }, { label: 'World Hopping', value: 'world-hopping' }, { label: 'World Travel', value: 'world-travel' }, { label: 'World Tree', value: 'world-tree' }, { label: 'Writers', value: 'writers' }, { label: 'Yandere', value: 'yandere' }, { label: 'Youkai', value: 'youkai' }, { label: 'Younger Brothers', value: 'younger-brothers' }, { label: 'Younger Love Interests', value: 'younger-love-interests' }, { label: 'Younger Sisters', value: 'younger-sisters' }, { label: 'Zombies', value: 'zombies' }, { label: 'e-Sports', value: 'e-sports' }, ], }, } satisfies Filters; } type ExtraNovelData = { avgReview: number; reviewCount: number; chapterCount: number; created: number; genres: string[]; tags: string[]; }; export default new MVLEMPYRPlugin();