Files
2026-09-16 10:12:47 +05:30

1145 lines
66 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Plugin } from '@/types/plugin';
import { FilterTypes, Filters } from '@libs/filterInputs';
import { fetchApi } from '@libs/fetch';
import { defaultCover } from '@libs/defaultCover';
import { NovelStatus } from '@libs/novelStatus';
import dayjs from 'dayjs';
const CHUNK_SIZE = 250;
const statusKey: Record<number, string> = {
1: NovelStatus.Ongoing,
2: NovelStatus.Completed,
3: NovelStatus.OnHiatus,
4: NovelStatus.Unknown,
};
class RNBH implements Plugin.PluginBase {
id = 'RNBH.org';
name = 'RanobeHub';
version = '2.0.0';
site = 'https://ranobehub.org';
icon = 'src/ru/ranobehub/icon.png';
async popularNovels(
pageNo: number,
{
showLatestNovels,
filters,
}: Plugin.PopularNovelsOptions<typeof this.filters>,
): Promise<Plugin.NovelItem[]> {
const params = new URLSearchParams({ page: pageNo.toString() });
const sort = showLatestNovels
? 'updated'
: filters?.sort?.value || 'popular';
if (sort !== 'updated') params.set('sort', sort);
filters?.country?.value?.forEach(country =>
params.append('country', country),
);
filters?.tags?.value?.include?.forEach(tag => params.append('tag', tag));
filters?.events?.value?.include?.forEach(event =>
params.append('event', event),
);
if (filters?.status?.value) params.append('status', filters.status.value);
const result: CatalogResponse = await fetchApi(
`${this.site}/api/catalog?${params.toString()}`,
).then(res => res.json());
return result.items.map(novel => ({
name: novel.title || novel.originalTitle,
cover: this.resolveUrl(novel.posterUrl),
path: `${novel.id}-${novel.slug}`,
}));
}
async parseNovel(novelPath: string): Promise<Plugin.SourceNovel> {
const id = novelPath.split('-', 1)[0];
const page = await fetchApi(this.resolveUrl(novelPath)).then(res =>
res.text(),
);
const title = /<h1[^>]*>([\s\S]*?)<\/h1>/
.exec(page)?.[1]
.replace(/<[^>]+>/g, '')
.trim();
const summary =
/<div[^>]+id="book-description"[^>]*>([\s\S]*?)<\/div>/
.exec(page)?.[1]
.replace(/<[^>]+>/g, '')
.trim() || '';
const coverPath = /<img[^>]+src="\/_next\/image\?url=([^"&]+)/.exec(
page,
)?.[1];
const cover = coverPath
? this.resolveUrl(decodeURIComponent(coverPath))
: defaultCover;
const author = /book-author-byline[\s\S]*?<strong[^>]*>([\s\S]*?)<\/strong>/
.exec(page)?.[1]
.replace(/<[^>]+>/g, '')
.trim();
let genres = '';
const genresMatch = /\\"genres\\":(\[.*?\]),\\"labels\\":/.exec(page);
if (genresMatch) {
try {
genres = (JSON.parse(genresMatch[1].replace(/\\"/g, '"')) as Genre[])
.map(g => g.title)
.join(', ');
} catch {
// ignore malformed payload
}
}
const statusId =
/book-kicker-status"[^>]*href="\/ranobe\?status=(\d+)"/.exec(page)?.[1];
const novel: Plugin.SourceNovel = {
path: novelPath,
name: title || '',
cover,
summary,
author: author || '',
genres: genres || undefined,
status: statusId
? statusKey[Number(statusId)] || NovelStatus.Unknown
: undefined,
};
const first: ChaptersResponse = await fetchApi(
`${this.site}/api/books/${id}/chapters?limit=${CHUNK_SIZE}&offset=0`,
).then(res => res.json());
const offsets: number[] = [];
for (let offset = CHUNK_SIZE; offset < first.total; offset += CHUNK_SIZE) {
offsets.push(offset);
}
const rest: ChaptersResponse[] = await Promise.all(
offsets.map(offset =>
fetchApi(
`${this.site}/api/books/${id}/chapters?limit=${CHUNK_SIZE}&offset=${offset}`,
).then(res => res.json()),
),
);
const items = [first.items, ...rest.map(r => r.items)].flat();
novel.chapters = items.map((chapter, index) => ({
name: chapter.title,
path: `${novelPath}/chapter/${chapter.id}`,
releaseTime: dayjs(chapter.changedAt).format('LLL'),
chapterNumber: index + 1,
}));
return novel;
}
async parseChapter(chapterPath: string): Promise<string> {
const id = chapterPath.split('/').pop();
const { chapter }: ChapterResponse = await fetchApi(
`${this.site}/api/chapters/${id}`,
).then(res => res.json());
return chapter.html.replace(
/src="\/(api\/media\/[^"]*)"/g,
`src="${this.site}/$1"`,
);
}
async searchNovels(searchTerm: string): Promise<Plugin.NovelItem[]> {
const url = `${this.site}/api/search?q=${encodeURIComponent(searchTerm)}`;
const result: SearchResponse = await fetchApi(url).then(res => res.json());
return result.books.map(novel => ({
name: novel.title || novel.originalTitle,
path: `${novel.id}-${novel.slug}`,
cover: this.resolveUrl(novel.posterUrl),
}));
}
resolveUrl = (path: string) =>
path.startsWith('/') ? this.site + path : this.site + '/ranobe/' + path;
filters = {
sort: {
label: 'Сортировка',
value: 'popular',
options: [
{ label: 'Обновления', value: 'updated' },
{ label: 'Популярное', value: 'popular' },
{ label: 'Лучшее', value: 'rating' },
{ label: 'Новинки', value: 'new' },
{ label: 'Больше глав', value: 'chapters' },
],
type: FilterTypes.Picker,
},
status: {
label: 'Статус перевода',
value: '',
options: [
{ label: 'Любой', value: '' },
{ label: 'В процессе', value: '1' },
{ label: 'Завершено', value: '2' },
{ label: 'Заморожено', value: '3' },
{ label: 'Неизвестно', value: '4' },
],
type: FilterTypes.Picker,
},
country: {
label: 'Страна',
value: [],
options: [
{ label: 'Китай', value: '2' },
{ label: 'Корея', value: '3' },
{ label: 'США', value: '4' },
{ label: 'Япония', value: '1' },
],
type: FilterTypes.CheckboxGroup,
},
events: {
label: 'События',
value: { include: [], exclude: [] },
options: [
{ label: 'Главный герой — мужчина', value: '39' },
{ label: 'Главный герой — женщина', value: '63' },
{ label: 'Магия', value: '38' },
{ label: 'Умный главный герой', value: '33' },
{ label: 'Реинкарнация', value: '281' },
{ label: 'Монстры', value: '69' },
{ label: 'Демоны', value: '6' },
{ label: 'Всемогущий главный герой', value: '42' },
{ label: 'Прекрасная героиня', value: '30' },
{ label: 'Игровые элементы', value: '152' },
{ label: 'Есть манга-адаптация', value: '27' },
{ label: 'Средневековье', value: '184' },
{ label: 'Боги', value: '211' },
{ label: 'Драконы', value: '195' },
{ label: 'Красивый герой', value: '107' },
{ label: 'Культивация', value: '123' },
{ label: 'Рост персонажа', value: '95' },
{ label: 'Из слабого в сильного', value: '81' },
{ label: 'Воспоминания из другого мира', value: '1073' },
{ label: 'Меч и магия', value: '55' },
{ label: 'Эльфы', value: '172' },
{ label: 'Спокойный главный герой', value: '32' },
{ label: 'Современность', value: '40' },
{ label: 'Трудолюбивый главный герой', value: '37' },
{ label: 'Есть аниме-адаптация', value: '26' },
{ label: 'Политика', value: '43' },
{ label: 'Подземелья', value: '219' },
{ label: 'Борьба за власть', value: '544' },
{ label: 'Путешествие во времени', value: '80' },
{ label: 'Фэнтези мир', value: '126' },
{ label: 'Выживание', value: '290' },
{ label: 'Сильный любовный интерес', value: '161' },
{ label: 'Расы зооморфов', value: '209' },
{ label: 'Любовный интерес влюбляется первым', value: '647' },
{ label: 'Королевская власть', value: '53' },
{ label: 'Ранги силы', value: '1102' },
{ label: 'Тайная личность', value: '310' },
{ label: 'Путешествие в другой мир', value: '1084' },
{ label: 'Романтический подсюжет', value: '159' },
{ label: 'Авантюристы', value: '353' },
{ label: 'Дворяне', value: '41' },
{ label: 'Войны', value: '58' },
{ label: 'Лоли', value: '92' },
{ label: 'ГГ не ояш', value: '1085' },
{
label: 'Повествование от нескольких лиц/Несколько точек зрения',
value: '156',
},
{ label: 'Глуповатый главный герой', value: '295' },
{ label: 'Повелитель демонов', value: '171' },
{ label: 'Недоразумения', value: '202' },
{ label: 'Духи/Призраки', value: '46' },
{ label: 'Специальные способности', value: '54' },
{ label: 'Решительный главный герой', value: '124' },
{ label: 'Бессмертные', value: '275' },
{ label: 'Безжалостный главный герой', value: '144' },
{ label: 'Главный герой силен с самого начала', value: '45' },
{ label: 'Интриги и заговоры', value: '745' },
{ label: 'Перемещение в иной мир', value: '754' },
{ label: 'Полигамия', value: '296' },
{ label: 'Хитроумный главный герой', value: '105' },
{ label: 'R-15 (Японское возрастное ограничение)', value: '230' },
{ label: 'Антигерой', value: '346' },
{ label: 'Недооцененный главный герой', value: '140' },
{ label: 'Система уровней', value: '198' },
{ label: 'Переселение души/Трансмиграция', value: '139' },
{ label: 'Рабы', value: '829' },
{ label: 'Горничные', value: '380' },
{ label: 'Преданный любовный интерес', value: '106' },
{ label: 'Пропуск времени', value: '138' },
{ label: 'Дворянство/Аристократия', value: '354' },
{ label: 'Эволюция', value: '196' },
{ label: 'Месть', value: '88' },
{ label: 'Предательство', value: '103' },
{ label: 'Сильный в сильнейшего', value: '359' },
{ label: 'Медленная романтическая линия', value: '113' },
{ label: 'Вампиры', value: '266' },
{ label: 'Артефакты', value: '117' },
{ label: 'Читы', value: '238' },
{ label: 'Машинный перевод', value: '1094' },
{ label: 'Изображения жестокости', value: '260' },
{ label: 'Есть маньхуа-адаптация', value: '298' },
{ label: 'Заботливый главный герой', value: '176' },
{ label: 'Прошлое играет большую роль', value: '215' },
{ label: 'Академия', value: '25' },
{ label: 'Звери-компаньоны', value: '192' },
{ label: 'Скрытие истинной личности', value: '371' },
{ label: 'Гениальный главный герой', value: '566' },
{ label: 'Готовка', value: '193' },
{ label: 'Смерть близких', value: '361' },
{ label: 'Трагическое прошлое', value: '164' },
{ label: 'Перерождение в ином мире', value: '755' },
{ label: 'Цундэрэ', value: '445' },
{ label: 'Королевства', value: '141' },
{ label: 'Мрачный мир', value: '1083' },
{ label: 'Дружба', value: '97' },
{ label: 'Верные подчиненные', value: '225' },
{ label: 'Герои', value: '173' },
{
label:
'Большая разница в возрасте между героем и его любовным интересом',
value: '348',
},
{ label: 'Второй шанс', value: '112' },
{ label: 'Мечник', value: '607' },
{ label: 'Рыцари', value: '142' },
{ label: 'Скрытие истинных способностей', value: '252' },
{ label: 'Высокомерные персонажи', value: '268' },
{ label: 'Алхимия', value: '116' },
{ label: 'Гильдии', value: '323' },
{ label: 'Яндере', value: '208' },
{ label: 'Множество реальностей', value: '278' },
{ label: 'Не блещущий внешне главный герой', value: '328' },
{ label: 'Виртуальная реальность', value: '313' },
{ label: 'Полулюди', value: '335' },
{ label: 'Прыжки между мирами', value: '737' },
{ label: 'Зомби', value: '321' },
{ label: 'Брак', value: '363' },
{ label: 'Наивный главный герой', value: '66' },
{ label: 'Отношения между людьми и нелюдьми', value: '205' },
{ label: 'Беременность', value: '131' },
{ label: 'Преступность', value: '83' },
{ label: 'Кругосветное путешествие', value: '257' },
{ label: 'Военные', value: '1101' },
{ label: 'Социальная иерархия на основе силы', value: '137' },
{ label: 'Адаптация в радиопостановку', value: '522' },
{ label: 'ЛитРПГ', value: '977' },
{ label: 'Друзья детства', value: '170' },
{ label: 'Постапокалиптика', value: '60' },
{ label: 'Бесстыдный главный герой', value: '256' },
{ label: 'ГГ не человек', value: '1086' },
{ label: 'Первый раз', value: '845' },
{ label: 'Удачливый главный герой', value: '402' },
{ label: 'Холодный главный герой', value: '259' },
{ label: 'Уверенный главный герой', value: '270' },
{ label: 'Богини', value: '356' },
{ label: 'Знания современного мира', value: '185' },
{ label: 'Создание королевства', value: '181' },
{ label: 'Манипулятивные персонажи', value: '130' },
{ label: 'Смерть', value: '49' },
{ label: 'Состоятельные персонажи', value: '67' },
{ label: 'Знаменитый главный герой', value: '469' },
{ label: 'Дварфы', value: '220' },
{ label: 'Скрытые способности', value: '128' },
{ label: 'Древний мир', value: '1099' },
{ label: 'Душевность', value: '587' },
{ label: 'Старение', value: '190' },
{ label: 'Активный главный герой', value: '132' },
{ label: 'Жестокость', value: '127' },
{ label: 'Обратный гарем', value: '255' },
{ label: 'Родословная', value: '121' },
{ label: 'Собственнические персонажи', value: '108' },
{ label: 'Дарк', value: '151' },
{ label: 'Заботливые возлюбленные', value: '665' },
{ label: 'Слабо выраженная романтическая линия', value: '213' },
{ label: 'Элементальная магия', value: '395' },
{ label: 'Волшебные звери', value: '201' },
{ label: 'Альтернативный мир', value: '28' },
{
label: 'Внешний вид отличается от фактического возраста',
value: '334',
},
{ label: 'Харизматический герой', value: '391' },
{ label: 'Отношения хозяин-слуга', value: '206' },
{ label: 'Освоение навыков', value: '235' },
{ label: 'Сильная пара', value: '109' },
{ label: 'Знатные девушки-злодейки', value: '719' },
{ label: 'Огнестрельное оружие', value: '179' },
{ label: 'Закалка тела', value: '269' },
{ label: 'Осторожный главный герой', value: '122' },
{ label: 'Отсутствие здравого смысла', value: '605' },
{ label: 'Брат и сестра', value: '1072' },
{ label: 'Главный герой — бог', value: '486' },
{ label: 'Питомцы', value: '253' },
{ label: 'Взрослый главный герой', value: '183' },
{ label: 'Европейская атмосфера', value: '457' },
{ label: 'Мужчина-яндере', value: '155' },
{ label: 'Таинственное прошлое', value: '263' },
{ label: 'Убийцы', value: '248' },
{ label: 'Ведьмы', value: '169' },
{ label: 'Враги становятся союзниками', value: '502' },
{ label: 'Беззаботный главный герой', value: '355' },
{ label: 'Быстрая культивация', value: '273' },
{ label: 'Дискриминация', value: '34' },
{ label: 'Извращенный главный герой', value: '349' },
{ label: 'Комедийный оттенок', value: '523' },
{ label: 'Множество реинкарнированных людей', value: '227' },
{ label: 'Уход за детьми', value: '398' },
{ label: 'Фантастические существа', value: '322' },
{ label: 'Аранжированный брак', value: '285' },
{ label: 'Божественные силы', value: '224' },
{ label: 'Изменения личности', value: '99' },
{ label: 'Навязчивая любовь', value: '85' },
{ label: 'Есть манхва-адаптация', value: '453' },
{ label: 'Из грязи в князи', value: '330' },
{
label:
'Магическое пространство/измерение, доступное не всем персонажам',
value: '244',
},
{ label: 'Множество перемещенных людей', value: '488' },
{ label: 'Популярный любовный интерес', value: '241' },
{ label: 'Внезапная сила', value: '376' },
{ label: 'Уникальная техника Культивации', value: '254' },
{ label: 'Жестокие персонажи', value: '436' },
{ label: 'Лидерство', value: '424' },
{ label: 'Магия призыва', value: '333' },
{ label: 'Милый главный герой', value: '697' },
{ label: 'Умения из прошлой жизни', value: '280' },
{ label: 'Добрые возлюбленные', value: '757' },
{ label: 'Злые боги', value: '437' },
{ label: 'Причудливые персонажи', value: '297' },
{ label: 'Девушки-монстры', value: '634' },
{ label: 'Изменения внешнего вида', value: '191' },
{ label: 'Искусственный интеллект', value: '118' },
{ label: 'Хорошие отношения с семьей', value: '506' },
{ label: 'Боевая академия', value: '369' },
{ label: 'Быстрообучаемый', value: '221' },
{ label: 'Комплекс семейных отношений', value: '104' },
{ label: 'Магические печати', value: '277' },
{ label: 'Религии', value: '565' },
{ label: 'Холодные возлюбленные', value: '651' },
{ label: 'Амнезия/Потеря памяти', value: '247' },
{ label: 'Главный герой — гуманоид', value: '595' },
{ label: 'Злой протагонист', value: '125' },
{ label: 'Некромант', value: '308' },
{ label: 'Одинокий главный герой', value: '304' },
{ label: 'Уникальное оружие', value: '340' },
{ label: 'Братья и сестры', value: '518' },
{ label: 'Расторжения помолвки', value: '243' },
{ label: 'Системный администратор', value: '476' },
{ label: 'Создание армии', value: '175' },
{ label: 'Стратегические битвы', value: '160' },
{ label: 'Юный любовный интерес', value: '446' },
{ label: 'Звери', value: '119' },
{ label: 'Медицина', value: '1106' },
{ label: 'ММОРПГ (ЛитРПГ)', value: '306' },
{ label: 'Ненадежный рассказчик', value: '165' },
{ label: 'Древний Китай', value: '284' },
{ label: 'Призыватели', value: '1076' },
{ label: 'Братский комплекс', value: '31' },
{ label: 'Игровая система рейтинга', value: '301' },
{ label: 'Командная работа', value: '426' },
{ label: 'Крафт', value: '287' },
{ label: 'Милое дитя', value: '596' },
{ label: 'Очаровательный главный герой', value: '659' },
{ label: 'Призраки', value: '51' },
{ label: 'Семейный конфликт', value: '770' },
{ label: 'Укротитель монстров', value: '337' },
{ label: 'Эксперименты с людьми', value: '129' },
{ label: 'Враги становятся возлюбленными', value: '428' },
{ label: 'Младшие сестры', value: '465' },
{ label: 'Отомэ игра', value: '723' },
{ label: 'Создание пилюль', value: '245' },
{ label: 'Ярко выраженная романтическая линия', value: '272' },
{ label: 'Апокалипсис', value: '314' },
{
label: 'Добыча денег одно из основных стремлений главного героя',
value: '307',
},
{ label: 'Магические технологии', value: '357' },
{ label: 'Прагматичный главный герой', value: '536' },
{ label: 'Проклятия', value: '48' },
{ label: 'Секретные организации', value: '331' },
{ label: 'Силы, связанные с глазами', value: '386' },
{ label: 'Сироты', value: '214' },
{ label: 'Система', value: '1113' },
{ label: 'Стратег', value: '425' },
{ label: 'Убийства', value: '84' },
{ label: 'Главный герой влюбляется первым', value: '655' },
{ label: 'Параллельные миры', value: '86' },
{ label: 'Пытка', value: '168' },
{ label: 'Расизм', value: '320' },
{ label: 'Травма прошлого', value: '726' },
{ label: 'Шоу-бизнес', value: '407' },
{ label: 'Ангелы', value: '218' },
{ label: 'Долгая разлука', value: '200' },
{ label: 'Древние времена', value: '102' },
{ label: 'Застенчивые персонажи', value: '443' },
{ label: 'Мифические звери', value: '418' },
{ label: 'Рассказ', value: '61' },
{ label: 'Слабый главный герой', value: '188' },
{ label: 'Создание артефактов', value: '292' },
{ label: '[Награжденная работа]', value: '611' },
{ label: 'Главный герой — собиратель гарема', value: '439' },
{ label: 'Души', value: '136' },
{ label: 'Развитие отношений', value: '690' },
{ label: 'Разумные предметы', value: '174' },
{ label: 'Апатичный протагонист', value: '29' },
{ label: 'Мистический ореол вокруг семьи', value: '409' },
{ label: 'Наследование', value: '372' },
{ label: 'Пародия', value: '319' },
{ label: 'Призванный герой', value: '147' },
{ label: 'Реинкарнация в игровом мире', value: '804' },
{ label: 'Торговцы', value: '416' },
{ label: 'Главный герой играет роль', value: '396' },
{ label: 'Контроль разума/сознания', value: '262' },
{ label: 'Кроссдрессинг', value: '250' },
{ label: 'Ленивый главный герой', value: '570' },
{ label: 'Пользователь уникального оружия', value: '432' },
{ label: 'Ускоренный рост', value: '300' },
{ label: 'Армия', value: '598' },
{ label: 'Гриндинг', value: '303' },
{ label: 'Есть сериал-адаптация', value: '421' },
{ label: 'Отношения учитель-ученик', value: '343' },
{ label: 'Отсутствие родителей', value: '575' },
{ label: 'Полиция', value: '801' },
{ label: 'Семья', value: '251' },
{ label: 'Сила духа', value: '282' },
{ label: 'Травля/Буллинг', value: '89' },
{ label: 'Абьюзивные персонажи', value: '625' },
{ label: 'Жесткая, двуличная личность', value: '249' },
{ label: 'Любовный треугольник', value: '98' },
{ label: 'Стоические персонажи', value: '444' },
{ label: 'Умная пара', value: '493' },
{ label: 'Андрогинные персонажи', value: '217' },
{ label: 'Главный герой — ребенок', value: '415' },
{ label: 'Заботливые родители', value: '530' },
{ label: 'Наемники', value: '324' },
{ label: 'Околосмертные переживания', value: '773' },
{ label: 'Пришельцы/Инопланетяне', value: '76' },
{ label: 'Управление бизнесом', value: '315' },
{ label: 'Футуристический сеттинг', value: '382' },
{ label: 'Геймеры', value: '302' },
{ label: 'Назойливый возлюбленный', value: '501' },
{ label: 'Несколько главных героев', value: '475' },
{ label: 'Открытый космос', value: '150' },
{ label: 'Первая любовь', value: '716' },
{ label: 'Покинутое дитя', value: '534' },
{ label: 'Расследование тайн', value: '710' },
{ label: 'Сестринский комплекс', value: '498' },
{ label: 'Управление временем', value: '167' },
{ label: 'Фарминг', value: '379' },
{ label: 'Бедный главный герой', value: '309' },
{ label: 'Главный герой — фоновый персонаж', value: '648' },
{ label: 'Ненавистный главный герой', value: '487' },
{ label: 'Несколько идентичностей', value: '615' },
{ label: 'Петля времени', value: '79' },
{ label: 'Святые', value: '761' },
{ label: 'Технологический разрыв', value: '621' },
{ label: 'Безусловная любовь', value: '650' },
{ label: 'Домашние дела', value: '178' },
{ label: 'Злые организации', value: '503' },
{ label: 'Кузнец', value: '454' },
{ label: 'Милая история', value: '709' },
{ label: 'Омоложение', value: '237' },
{ label: 'Перемещение в игровой мир', value: '532' },
{ label: 'Познание Дао', value: '360' },
{ label: 'Усыновленные дети', value: '481' },
{ label: 'Языкастые персонажи', value: '406' },
{ label: 'Воскрешение', value: '78' },
{ label: 'Изменение расы', value: '627' },
{ label: 'Национализм', value: '318' },
{ label: 'Небесное испытание', value: '274' },
{ label: 'Ревность', value: '717' },
{ label: 'Священники', value: '325' },
{ label: 'Сожительство', value: '482' },
{ label: 'Феи', value: '210' },
{ label: 'Врачи', value: '286' },
{ label: 'Межпространственные путешествия', value: '316' },
{ label: 'Музыка', value: '589' },
{ label: 'Не родные братья и сестры', value: '464' },
{ label: 'Пророчества', value: '429' },
{ label: 'Философия', value: '87' },
{ label: 'Андроиды', value: '82' },
{ label: 'Заботливые старшие братья и сёстры', value: '609' },
{ label: 'Кудере', value: '440' },
{ label: 'Легенды', value: '430' },
{ label: 'Похищения людей', value: '707' },
{ label: 'Способность к превращению', value: '736' },
{ label: 'Суровая подготовка', value: '261' },
{ label: 'Близнецы', value: '148' },
{ label: 'Знаменитости', value: '397' },
{ label: 'Империи', value: '749' },
{ label: 'Навык кражи', value: '626' },
{ label: 'Оборотни', value: '624' },
{ label: 'Волшебники/Волшебницы', value: '477' },
{ label: 'Духовный советник', value: '351' },
{ label: 'Книги навыков', value: '312' },
{ label: 'Мастер на все руки', value: '390' },
{ label: 'Мировое дерево', value: '385' },
{ label: 'Настойчивые возлюбленные', value: '714' },
{ label: 'Негуманоидный главный герой', value: '622' },
{ label: 'Обязательство', value: '548' },
{ label: 'Орки', value: '228' },
{ label: 'Разное социальное положение', value: '758' },
{ label: 'Секреты', value: '577' },
{ label: 'Семь смертных грехов', value: '134' },
{ label: 'Слуги', value: '232' },
{ label: 'Эгоистичный главный герой', value: '539' },
{ label: 'Двойная личность', value: '601' },
{ label: 'Детективы', value: '561' },
{ label: 'Жестокое обращение с ребенком', value: '617' },
{ label: 'Контракты', value: '483' },
{ label: 'Любовь детства', value: '500' },
{ label: 'Мифология', value: '468' },
{ label: 'Неудачливый главный герой', value: '567' },
{ label: 'Отношения между богом и человеком', value: '603' },
{ label: 'Пространственное манипулирование', value: '375' },
{ label: 'Психические силы', value: '265' },
{ label: 'Регрессия', value: '1117' },
{ label: 'Синдром восьмиклассника', value: '90' },
{ label: 'Солдаты/Военные', value: '71' },
{ label: 'Спасение мира', value: '597' },
{ label: 'Боевые соревнования', value: '422' },
{ label: 'Исторические фигуры', value: '1096' },
{ label: 'Любовь с первого взгляда', value: '730' },
{ label: 'Мазохистские персонажи', value: '660' },
{ label: 'Одержимость', value: '447' },
{ label: 'Трансплантация воспоминаний', value: '367' },
{ label: 'Фениксы', value: '374' },
{ label: 'Честный главный герой', value: '240' },
{ label: 'Гоблины', value: '529' },
{ label: 'Есть видеоигра по мотивам', value: '491' },
{ label: 'Каннибализм', value: '377' },
{ label: 'Отношения ученика и учителя', value: '451' },
{ label: 'Пираты', value: '817' },
{ label: 'Стрельба из лука', value: '383' },
{ label: 'Целители', value: '389' },
{ label: 'Яды', value: '410' },
{ label: 'Божественная защита', value: '336' },
{ label: 'Главный герой с несколькими телами', value: '628' },
{ label: 'Главный герой — рубака', value: '400' },
{ label: 'Животные черты', value: '466' },
{ label: 'Книги', value: '341' },
{ label: 'Отношения начальник-подчиненный', value: '590' },
{ label: 'Садистские персонажи', value: '642' },
{ label: 'Сила, требующая платы за пользование', value: '520' },
{ label: 'Ссорящаяся пара', value: '293' },
{ label: 'Безответная любовь', value: '806' },
{ label: 'Братство', value: '413' },
{ label: 'Бывший герой', value: '752' },
{ label: 'Игра на выживание', value: '162' },
{ label: 'Из мужчины в женщину', value: '698' },
{ label: 'Охотники', value: '288' },
{ label: 'Усыновленный главный герой', value: '412' },
{ label: 'Флэшбэки', value: '528' },
{ label: 'Бесстрашный протагонист', value: '619' },
{ label: 'Возвращение из другого мира', value: '673' },
{ label: 'Воссоединение возлюбленных', value: '853' },
{ label: 'Големы', value: '569' },
{ label: 'Запечатанная сила', value: '344' },
{ label: 'Книжный червь', value: '455' },
{ label: 'Копейщик', value: '339' },
{ label: 'Мутированные существа', value: '317' },
{ label: 'Учителя', value: '345' },
{ label: 'Генетические модификации', value: '620' },
{ label: 'Депрессия', value: '494' },
{ label: 'Жрицы', value: '564' },
{ label: 'Комплекс неполноценности', value: '489' },
{ label: 'Коррупция', value: '378' },
{ label: 'Организованная преступность', value: '478' },
{ label: 'Потерянные цивилизации', value: '751' },
{ label: 'Сёдзё-ай как побочная линия', value: '777' },
{ label: 'Скрытный главный герой', value: '133' },
{ label: 'Соперники в любви', value: '788' },
{ label: 'Справедливый главный герой', value: '702' },
{ label: 'Хозяин подземелий', value: '557' },
{ label: 'Брак по расчету', value: '65' },
{ label: 'Видит то, чего не видят другие', value: '636' },
{ label: 'Врата в другой мир', value: '558' },
{ label: 'ГГ ояш', value: '1124' },
{ label: 'Глупый ГГ', value: '1120' },
{ label: 'Друзья становятся врагами', value: '507' },
{ label: 'Есть фильм по мотивам', value: '47' },
{ label: 'Злые религии', value: '725' },
{ label: 'Исследования', value: '635' },
{ label: 'Исторические', value: '1125' },
{ label: 'Медицинские знания', value: '441' },
{ label: 'Менеджмент', value: '182' },
{ label: 'Несколько личностей', value: '474' },
{ label: 'Психопаты', value: '158' },
{ label: 'Реинкарнация в монстра', value: '204' },
{ label: 'Создание навыков', value: '236' },
{ label: 'Эйдетическая память', value: '392' },
{ label: 'Эпизодический', value: '612' },
{ label: 'Временной парадокс', value: '163' },
{ label: 'Героиня — сорванец', value: '525' },
{ label: 'Отзывчивый главный герой', value: '760' },
{ label: 'Писатели', value: '408' },
{ label: 'Стокгольмский синдром', value: '643' },
{ label: 'Судьба', value: '271' },
{ label: 'Трап (Путаница с гендером персонажа)', value: '582' },
{ label: 'Шантаж', value: '526' },
{ label: 'Возлюбленные, связанные судьбой', value: '797' },
{ label: 'Демоническая техника культивации', value: '706' },
{ label: 'Инвалидность', value: '656' },
{ label: 'Космические войны', value: '674' },
{ label: 'Обнаженка', value: '417' },
{ label: 'Офисные Работники', value: '1110' },
{ label: 'Промывание мозгов', value: '519' },
{ label: 'Спортивное тело', value: '1115' },
{ label: 'Суккубы', value: '484' },
{ label: 'Упрямый главный герой', value: '672' },
{ label: 'Фольклор', value: '467' },
{ label: 'Человеческое оружие', value: '521' },
{ label: 'Агрессивные персонажи', value: '434' },
{ label: 'Антисоциальный главный герой', value: '562' },
{ label: 'Артисты', value: '460' },
{ label: 'Ваншот', value: '679' },
{ label: 'Гадание', value: '540' },
{ label: 'Гарем рабов', value: '828' },
{ label: 'Генералы', value: '223' },
{ label: 'Игривый протагонист', value: '700' },
{ label: 'Куннилингус', value: '632' },
{ label: 'Медленное развитие на старте', value: '670' },
{ label: 'Насилие сексуального характера', value: '824' },
{ label: 'Неловкий главный герой', value: '669' },
{ label: 'Ниндзя', value: '358' },
{ label: 'Отаку', value: '512' },
{ label: 'Самоотверженный главный герой', value: '748' },
{ label: 'Самурай', value: '646' },
{ label: 'Сексуальная техника культивации', value: '350' },
{ label: 'Создание клана', value: '448' },
{ label: 'Стрелки', value: '458' },
{ label: 'Фамильяры', value: '541' },
{ label: 'Буддизм', value: '742' },
{ label: 'Внезапное богатство', value: '802' },
{ label: 'Военные Летописи', value: '740' },
{ label: 'Гетерохромия', value: '510' },
{ label: 'Гяру', value: '1121' },
{ label: 'Заточение', value: '767' },
{ label: 'Индустриализация', value: '180' },
{ label: 'Межгалактическая война', value: '1112' },
{ label: 'Мечты', value: '733' },
{ label: 'Основано на видео игре', value: '704' },
{ label: 'Отношения Сенпай-Коухай', value: '513' },
{ label: 'Просветление', value: '729' },
{ label: 'Родительский комплекс', value: '531' },
{ label: 'Ручная стимуляция', value: '629' },
{ label: 'Хакеры', value: '399' },
{ label: 'Шеф-повар', value: '239' },
{ label: 'Шота', value: '514' },
{ label: 'Боевые духи', value: '347' },
{ label: 'Владелец магазина', value: '653' },
{ label: 'Вторжение на землю', value: '77' },
{ label: 'Дворецкий', value: '623' },
{ label: 'Драконьи всадники', value: '555' },
{ label: 'Клоны', value: '365' },
{ label: 'Мастурбация', value: '846' },
{ label: 'Нетораре', value: '721' },
{ label: 'Ограниченная продолжительность жизни', value: '73' },
{ label: 'Одиночество', value: '199' },
{ label: 'Связанные сюжетные линии', value: '473' },
{ label: 'Сдержанный главный герой', value: '799' },
{ label: 'Сёнэн-ай подсюжет', value: '664' },
{ label: 'Серийные убийцы', value: '497' },
{ label: 'Соперничество между братьями и сёстрами', value: '766' },
{ label: 'Трусливый главный герой', value: '703' },
{ label: 'Чрезмерно опекающие братья и сёстры', value: '610' },
{ label: 'Автоматоны', value: '538' },
{ label: 'Ад', value: '509' },
{ label: 'Библиотека', value: '342' },
{ label: 'Культивация с помощью пилюль', value: '279' },
{ label: 'Мутации', value: '668' },
{ label: 'Наркотики', value: '661' },
{ label: 'Нарциссический главный герой', value: '470' },
{ label: 'Несколько временных линий', value: '517' },
{ label: 'Нетори', value: '450' },
{ label: 'Обманщик', value: '411' },
{ label: 'Падшие ангелы', value: '505' },
{ label: 'Паразиты', value: '535' },
{ label: 'Преступники', value: '728' },
{ label: 'Создание секты', value: '393' },
{ label: 'Убийцы драконов', value: '606' },
{ label: 'Хикикомори', value: '1122' },
{ label: 'Экономика', value: '492' },
{ label: 'NEET — не учится и не работает', value: '495' },
{ label: 'Анти-магия', value: '471' },
{ label: 'Вежливый главный герой', value: '289' },
{ label: 'Дао Компаньон', value: '384' },
{ label: 'Женища-наставник', value: '438' },
{ label: 'Заклинатели духов', value: '739' },
{ label: 'Знаменитые родители', value: '790' },
{ label: 'Из страшно(го/й) в красиво(го/ю)', value: '810' },
{ label: 'Императорский гарем', value: '805' },
{ label: 'Колледж/Университет', value: '712' },
{ label: 'Конкуренция', value: '746' },
{ label: 'Легкая жизнь', value: '604' },
{ label: 'Мужская гей-пара', value: '685' },
{ label: 'Падшее дворянство', value: '618' },
{ label: 'Первоисточник новеллы — манга', value: '560' },
{ label: 'Психологический слом', value: '862' },
{ label: 'Развод', value: '771' },
{ label: 'Учёные', value: '997' },
{ label: 'Хикикомори/Затворники', value: '462' },
{ label: 'Анабиоз', value: '657' },
{ label: 'Болезненные персонажи', value: '787' },
{ label: 'Гетеросексуальный сэмэ', value: '819' },
{ label: 'Гетеросексуальный укэ', value: '818' },
{ label: 'Ёкаи', value: '516' },
{ label: 'Заговоры', value: '177' },
{ label: 'Из полного в худого', value: '809' },
{ label: 'Клубы', value: '96' },
{ label: 'Кризис личности', value: '599' },
{ label: 'Куклы/марионетки', value: '573' },
{ label: 'Метаморфы', value: '234' },
{ label: 'Недоверчивый главный герой', value: '485' },
{ label: 'Несерьезный главный герой', value: '294' },
{ label: 'Обмен телами', value: '94' },
{ label: 'Оргия', value: '825' },
{ label: 'Правонарушители', value: '694' },
{ label: 'Принуждение к отношениям', value: '602' },
{ label: 'Социальные изгои', value: '480' },
{ label: 'Травник', value: '708' },
{ label: 'Фанфикшн', value: '388' },
{ label: 'Вокалоид', value: '678' },
{ label: 'Гипнотизм', value: '768' },
{ label: 'Главная героиня', value: '888' },
{ label: 'Главный герой действует неохотно', value: '696' },
{ label: 'Жизнь в квартире', value: '554' },
{ label: 'Замкнутый главный герой', value: '533' },
{ label: 'Кузены', value: '701' },
{ label: 'Магические надписи', value: '373' },
{ label: 'Махо-сёдзё', value: '496' },
{ label: 'Нелинейная история', value: '157' },
{ label: 'Общество монстров', value: '226' },
{ label: 'Одиночное проживание', value: '207' },
{ label: 'Основано на песне', value: '677' },
{ label: 'Племенное общество', value: '291' },
{ label: 'Принудительный брак', value: '835' },
{ label: 'Проститутки', value: '844' },
{ label: 'Ресторан', value: '652' },
{ label: 'Робкий главный герой', value: '800' },
{ label: 'Самоубийства', value: '616' },
{ label: 'Семейный бизнес', value: '785' },
{ label: 'Семь добродетелей', value: '233' },
{ label: 'Сон', value: '571' },
{ label: 'Сталкеры', value: '689' },
{ label: 'Таинственная болезнь', value: '74' },
{ label: 'Телохранители', value: '452' },
{ label: 'Управление кровью', value: '764' },
{ label: 'Фанатизм', value: '613' },
{ label: 'Фармацевт', value: '715' },
{ label: 'Чаты', value: '580' },
{ label: 'Эмоционально слабый главный герой', value: '816' },
{ label: 'Антиутопия', value: '663' },
{ label: 'Воры', value: '326' },
{ label: 'Восстание', value: '834' },
{ label: 'Главный герой носит очки', value: '637' },
{ label: 'Гомункул', value: '850' },
{ label: 'Даосизм', value: '792' },
{ label: 'Коллеги', value: '683' },
{ label: 'Небеса', value: '508' },
{ label: 'Неизлечимая болезнь', value: '75' },
{ label: 'Обольщение', value: '718' },
{ label: 'Отношения опекуна и подопечного', value: '197' },
{ label: 'Предвидение', value: '52' },
{ label: 'Программист', value: '666' },
{ label: 'Родитель одиночка', value: '687' },
{ label: 'Тихие персонажи', value: '546' },
{ label: 'Тюрьма', value: '479' },
{ label: 'Экзорсизм', value: '504' },
{ label: 'Адаптировано в визуальную новеллу', value: '1046' },
{ label: 'Банды', value: '581' },
{ label: 'Бесчестный главный герой', value: '699' },
{ label: 'Бисексуальный главный герой', value: '822' },
{ label: 'Взросление', value: '860' },
{ label: 'Главный герой пацифист', value: '675' },
{ label: 'Главный герой — наполовину человек', value: '362' },
{ label: 'Дух лисы', value: '842' },
{ label: 'Забывчивый главный герой', value: '579' },
{ label: 'Из женщины в мужчину', value: '688' },
{ label: 'Изгои', value: '472' },
{ label: 'Инженер', value: '35' },
{ label: 'Коварство', value: '111' },
{ label: 'Кукловоды', value: '431' },
{ label: 'Неуклюжие возлюбленные', value: '815' },
{ label: 'Обещание из детства', value: '738' },
{ label: 'Оммёдзи', value: '542' },
{ label: 'Пайзури', value: '630' },
{ label: 'Персонаж использует щит', value: '631' },
{ label: 'Притворная пара', value: '600' },
{ label: 'Совместное владение телом', value: '814' },
{ label: 'Студенческий совет', value: '490' },
{ label: 'Террористы', value: '515' },
{ label: 'Толстый главный герой', value: '299' },
{ label: 'Фильмы', value: '403' },
{ label: 'Школа только для девочек', value: '633' },
{ label: 'Шпионы', value: '563' },
{ label: 'Бизнесмен', value: '813' },
{ label: 'Биочип', value: '120' },
{ label: 'Валькирии', value: '667' },
{ label: 'Главный герой — сэмэ', value: '1028' },
{ label: 'Денежный долг', value: '841' },
{ label: 'Домогательство', value: '394' },
{ label: 'Лотерея', value: '401' },
{ label: 'Любознательный главный герой', value: '849' },
{ label: 'Матриархат', value: '807' },
{ label: 'Мертвый главный герой', value: '794' },
{ label: 'Младшие братья', value: '843' },
{ label: 'Модели', value: '649' },
{ label: 'Молчаливый персонаж', value: '705' },
{ label: 'Мурим', value: '1118' },
{ label: 'Насекомые', value: '831' },
{ label: 'Неравная пара', value: '695' },
{ label: 'Нерешительный главный герой', value: '741' },
{ label: 'Омегаверс', value: '857' },
{ label: 'Отношения в сети', value: '713' },
{ label: 'Певцы/Певицы', value: '734' },
{
label:
'Перемещение в другой мир, имея при себе современные достижения',
value: '732',
},
{ label: 'Плейбои', value: '795' },
{ label: 'Сильный главный герой', value: '944' },
{ label: 'Скульпторы', value: '366' },
{ label: 'Супружеская измена', value: '866' },
{ label: 'Уродливый главный герой', value: '803' },
{ label: 'Аутизм', value: '855' },
{ label: 'Бесполый главный герой', value: '222' },
{ label: 'Вынужденное совместное проживание', value: '808' },
{ label: 'Герой влюбляется первым', value: '64' },
{ label: 'Главный герой — не человек', value: '978' },
{ label: 'Гуро', value: '1128' },
{ label: 'Двойник', value: '547' },
{ label: 'Зоофилия', value: '796' },
{ label: 'Киберспорт', value: '658' },
{ label: 'Конфликт преданности', value: '793' },
{ label: 'Кошмары', value: '833' },
{ label: 'Любовный интерес главного героя носит очки', value: '576' },
{ label: 'Мужская беременность', value: '856' },
{ label: 'Обезображивание', value: '838' },
{ label: 'Основано на аниме', value: '553' },
{ label: 'Офисный роман', value: '686' },
{ label: 'Парк развлечений', value: '586' },
{ label: 'Сражения флотов', value: '836' },
{ label: 'Тайные отношения', value: '812' },
{ label: 'Тентакли', value: '693' },
{ label: 'Азартные игры', value: '1031' },
{ label: 'Высокое фэнтези', value: '991' },
{ label: 'Галгэ', value: '848' },
{ label: 'Главный герой — антигерой', value: '976' },
{ label: 'Друиды', value: '427' },
{ label: 'Исследование подземелий', value: '990' },
{ label: 'Карточные игры', value: '654' },
{ label: 'Класс безработного [Игровой класс в игре]', value: '727' },
{ label: 'Кома', value: '826' },
{ label: 'Мания', value: '91' },
{ label: 'Ненормативная лексика', value: '980' },
{ label: 'Непонятливый главный герой', value: '868' },
{ label: 'Пилоты', value: '820' },
{ label: 'Подработка', value: '865' },
{ label: 'Пожелания', value: '166' },
{ label: 'Придворный чиновник', value: '863' },
{ label: 'Призраки / Духи', value: '1130' },
{ label: 'Редакторы', value: '684' },
{ label: 'Роман на стороне', value: '645' },
{ label: 'Сборник коротких историй', value: '456' },
{ label: 'Сексуальный контент', value: '982' },
{ label: 'Супер герои', value: '1039' },
{ label: 'Тайная влюблённость', value: '827' },
{ label: 'Танцоры', value: '840' },
{ label: 'Фудзёси', value: '1045' },
{ label: 'Языковой барьер', value: '59' },
{ label: 'Японские силы самообороны', value: '559' },
{ label: 'Актеры озвучки', value: '578' },
{ label: 'Антикварный магазин', value: '572' },
{ label: 'Бесконечный поток', value: '1044' },
{ label: 'ГГ - Мэри Сью', value: '1127' },
{ label: 'ГГ женщина', value: '1129' },
{ label: 'Главный герой — раб', value: '832' },
{ label: 'Госпиталь', value: '1043' },
{ label: 'Градостроение', value: '1132' },
{ label: 'Животноводство', value: '765' },
{ label: 'Забота братьев и сестёр', value: '1042' },
{ label: 'Законники', value: '769' },
{ label: 'Зрелый главный герой', value: '900' },
{ label: 'Кланы', value: '950' },
{ label: 'Музыкальные группы', value: '588' },
{ label: 'Навыки', value: '1019' },
{ label: 'Основано на фильме', value: '552' },
{ label: 'Пожилой главный герой', value: '774' },
{ label: 'Полиандрия', value: '811' },
{ label: 'Портальное фэнтези / исэкай', value: '992' },
{ label: 'Поэзия', value: '404' },
{ label: 'Принцессы', value: '933' },
{ label: 'Развитие технологий', value: '1006' },
{ label: 'Разница в возрасте', value: '923' },
{ label: 'Реинкарнация в объект', value: '692' },
{ label: 'Репортеры', value: '837' },
{ label: 'Сарариман', value: '1035' },
{ label: 'Сексуальность', value: '983' },
{ label: 'Сильный главный герой-мужчина', value: '964' },
{ label: 'Слепой главный герой', value: '864' },
{ label: 'Стратегия', value: '1038' },
{ label: 'Стриминг', value: '1054' },
{ label: 'Традиционные игры', value: '1136' },
{ label: 'Фобии', value: '100' },
{ label: 'Фотография', value: '798' },
{ label: 'Хранители могил', value: '68' },
{ label: 'Цзянши', value: '735' },
{ label: 'Эксгибиционизм', value: '639' },
{ label: 'Якудза', value: '1135' },
{ label: 'Андрогинный главный герой-мужчина', value: '1002' },
{ label: 'Апатичный главный герой', value: '967' },
{ label: 'Большая грудь', value: '908' },
{ label: 'Веб-новелла', value: '1024' },
{ label: 'Викторианская эпоха', value: '1134' },
{ label: 'Воображаемый друг', value: '614' },
{ label: 'Воспоминания о прошлом', value: '1017' },
{ label: 'Вуайеризм', value: '851' },
{ label: 'Гайдвэрс', value: '1051' },
{ label: 'Гарем как подтекст', value: '909' },
{ label: 'ГеймЛит', value: '994' },
{ label: 'Главный герой верен возлюбленному', value: '905' },
{ label: 'Главный герой — отец', value: '859' },
{ label: 'Главный герой — получеловек', value: '956' },
{ label: 'Гладиаторы', value: '549' },
{ label: 'Городское фэнтези', value: '1041' },
{ label: 'Дворянство', value: '1015' },
{ label: 'Евнух', value: '1047' },
{ label: 'Запугивание', value: '1137' },
{ label: 'Игривый главный герой', value: '989' },
{ label: 'Изменившийся мужчина', value: '925' },
{ label: 'Инкуб', value: '1049' },
{ label: 'Командующий армией', value: '1003' },
{ label: 'Королевская битва', value: '1025' },
{ label: 'Легендарный герой', value: '1011' },
{ label: 'Межпространственное хранилище', value: '959' },
{ label: 'Множество навыков', value: '1010' },
{ label: 'Не такая уж тайная личность', value: '979' },
{ label: 'Нерезиденты', value: '821' },
{ label: 'Низкое фэнтези', value: '1037' },
{ label: 'Обретённая семья', value: '1052' },
{ label: 'Онлайн-игра', value: '910' },
{ label: 'Основано на визуальной новелле', value: '861' },
{ label: 'Отношения на расстоянии', value: '852' },
{ label: 'Официанты', value: '681' },
{ label: 'Ошибочно принимают за другого', value: '1055' },
{ label: 'Пара со сменой ролей', value: '854' },
{ label: 'Повествование от лица монстра', value: '1012' },
{ label: 'Похищение невесты', value: '948' },
{ label: 'Почти человек — главный герой', value: '975' },
{ label: 'Правящий класс', value: '943' },
{ label: 'Преступники / Криминал', value: '1131' },
{ label: 'Приёмный ребёнок — главный герой', value: '886' },
{ label: 'Рождение государства', value: '1004' },
{ label: 'Саспенс', value: '987' },
{ label: 'Сатира', value: '981' },
{ label: 'Семь небесных добродетелей', value: '1018' },
{ label: 'Сентиментальный главный герой', value: '1048' },
{ label: 'Сётакон', value: '858' },
{ label: 'Скрытая жемчужина', value: '998' },
{ label: 'Слайм', value: '1020' },
{ label: 'Современный мир', value: '988' },
{ label: 'Торговцы оружием', value: '839' },
{ label: 'Травмирующий контент', value: '1040' },
{ label: 'Уникальные способности', value: '1021' },
{ label: 'Уникальный навык', value: '1022' },
{ label: 'Футанари', value: '568' },
{ label: 'Харизматичный главный герой', value: '1005' },
{ label: 'Человек становится демоном или монстром', value: '1009' },
{ label: 'Шизофрения', value: '1053' },
{ label: 'Шикигами', value: '543' },
],
type: FilterTypes.ExcludableCheckboxGroup,
},
tags: {
label: 'Жанры',
value: { include: [], exclude: [] },
options: [
{ label: 'Фэнтези', value: '8' },
{ label: 'Романтика', value: '9' },
{ label: 'Приключение', value: '11' },
{ label: 'Комедия', value: '17' },
{ label: 'Экшн', value: '14' },
{ label: 'Драма', value: '7' },
{ label: 'Гарем', value: '114' },
{ label: 'Сверхъестественное', value: '20' },
{ label: 'Повседневность', value: '93' },
{ label: 'Боевые искусства', value: '22' },
{ label: 'Сёнэн', value: '189' },
{ label: 'Мистика', value: '2' },
{ label: 'Сёдзё', value: '15' },
{ label: 'Психология', value: '18' },
{ label: 'Исекай', value: '1071' },
{ label: 'Дзёсэй', value: '216' },
{ label: 'Трагедия', value: '19' },
{ label: 'Научная фантастика', value: '13' },
{ label: 'Сэйнэн', value: '5' },
{ label: 'Школьная жизнь', value: '21' },
{ label: 'Фантастика', value: '1078' },
{ label: 'Эччи', value: '327' },
{ label: 'Зрелая тематика', value: '115' },
{ label: 'Школа', value: '1070' },
{ label: 'История', value: '1092' },
{ label: 'Ужасы', value: '1' },
{ label: 'Сюаньхуа', value: '242' },
{ label: 'Игра', value: '1090' },
{ label: 'Триллер', value: '3' },
{ label: 'Видеоигры', value: '993' },
{ label: 'Милитари', value: '12' },
{ label: 'Героическое фэнтези', value: '1108' },
{ label: 'Сянься', value: '364' },
{ label: 'Детектив', value: '1077' },
{ label: 'Меха', value: '24' },
{ label: 'Исторический', value: '101' },
{ label: 'Безумие', value: '1095' },
{ label: 'Гендер бендер', value: '246' },
{ label: 'Военное', value: '1116' },
{ label: 'Супер сила', value: '1107' },
{ label: 'Непристойность', value: '747' },
{ label: 'Космос', value: '1114' },
{ label: 'Уся', value: '720' },
{ label: 'Спорт', value: '420' },
{ label: 'Киберпанк', value: '1119' },
{ label: 'Машины', value: '1093' },
{ label: 'Арт', value: '1133' },
{ label: 'Лоликон', value: '638' },
{ label: 'Магический реализм', value: '922' },
{ label: 'Восточное фэнтези', value: '907' },
{ label: 'Магия', value: '1063' },
{ label: 'Самурайский боевик', value: '1123' },
],
type: FilterTypes.ExcludableCheckboxGroup,
},
} satisfies Filters;
}
export default new RNBH();
type Book = {
id: number;
slug: string;
title: string;
originalTitle: string;
posterUrl: string;
};
type Genre = { id: number; title: string };
type CatalogResponse = { items: Book[] };
type SearchResponse = { books: Book[] };
type ChaptersResponse = {
items: {
id: number;
title: string;
changedAt: string;
}[];
total: number;
};
type ChapterResponse = { chapter: { html: string } };