This commit is contained in:
recaptcha committed 2022-08-10 13:06:23 +02:00
1 parent d3d221f9e3
commit e59845661f
19 files changed
+4803 -4

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
/*
* Хэндлер ошибок бота
*/
module.exports = (bot, chatId, error) => {
console.error(error);
bot.sendMessage(chatId, "Непредвиденная ошибка.");
};
+339
View File
@@ -0,0 +1,339 @@
const api = require("../network/api");
const modelUser = require('../models/user');
exports.getHistoryText = async (history) => { // Функция, генерирующая текст истории просмотров последних 5 аниме
let text = ``
if (history.length == 0) {
text = "отсутствует";
return text;
}
text += `\n`
for (let i = 0; i < history.length; i++) {
text += ` \`• ${history[i].title_ru} • ${history[i].last_view_episode.name}\`\n`; // {name}, {last view episode}
}
return text;
}
exports.genProfileText = async (profile) => { // Функция, генерирующая всю информацию профиля пользователя
let roles = ``
if(profile.roles.length != 0) { // Если человек имеет роли (Модератор, Администратор, Даббер) кидаем всё в переменную
for (let i = 0; i < profile.roles.length; i++) {
roles += profile.roles[i].name + `${i == profile.roles.length-1 ? `` : `, `}`
}
}
let text = `*Anixart Profile Info*\n\n` +
`*Никнейм:* ${profile.is_sponsor ? `👑 ` : ``}${profile.login}${profile.is_verified ? ` ✔️` : ``} [[${profile.rating_score}]]\n` +
`*Описание:* \`${profile.status == "" ? "Отсутствует" : profile.status}\`\n` +
`*Статус:* _${profile.is_online ? "онлайн" : "оффлайн"}_\n` +
`${profile.roles.length != 0 ? `*Роли*: ${roles}\n\n` : `\n`}` +
`${profile.is_counts_hidden ? `` : `*Комментов:* ${profile.comment_count} | *Видео*: ${profile.video_count}\n*Коллекций:* ${profile.collection_count} | *Друзей:* ${profile.friend_count}\n\n`}` +
`*Приватность:* \n • Статистика ${profile.is_stats_hidden ? "_скрыта_" : "_открыта_"}\n • Активность ${profile.is_counts_hidden ? "_скрыта_" : "_открыта_"}\n\n` +
`${profile.is_stats_hidden ? `` : `*🟩 Смотрю:* ${profile.watching_count}`}\n` +
`${profile.is_stats_hidden ? `` : `*🟪 В планах:* ${profile.plan_count}`}\n` +
`${profile.is_stats_hidden ? `` : `*🟦 Просмотрено:* ${profile.completed_count}`}\n` +
`${profile.is_stats_hidden ? `` : `*🟨 Отложено:* ${profile.hold_on_count}`}\n` +
`${profile.is_stats_hidden ? `` : `*🟥 Брошено:* ${profile.dropped_count}`}\n\n`+
`${profile.is_stats_hidden ? `` : `*Просмотрено недавно:* ` + await exports.getHistoryText(profile.history)}\n\n`
return text
}
exports.genAnimeText = async (anime) => { // Функция, генерирующая всю информацию об аниме
let image = anime.image //Просто постер
let countrySmile = exports.getCountrySmile(anime.country); //Смайлик страны (Китай, Япония)
let date //Дата
if (anime.release_date) date = exports.getMounthYear(anime.release_date); //Месяц выпуска аниме (Осень, Зима)
let episodes = anime.episodes_total == anime.episodes_released
? `${anime.episodes_total ? anime.episodes_total : `?`} эп.`
: `${anime.episodes_released ? anime.episodes_released : `?`} из ${anime.episodes_total ? anime.episodes_total : `?`} эп.` //Кол-во эпизодов
if (anime.duration) episodes += ` по ~${anime.duration} мин.` //Текст длительности
let studio = `` //Студия, авторы
anime.studio ? studio += `Студия \`${anime.studio}\`` : studio += ``; //Если есть студия, добавляем её
anime.author ? studio == `` ? studio += `Автор \`${anime.author}\`` : studio += `, автор \`${anime.author}\`,` : studio += `` //Если есть автор, то добавляем его
anime.director ? studio += ` режиссёр \`${anime.director}\`` : studio += `` //Добавляем режиссёра при наличии его
let rating = `⭐️ Рейтинг: *${(anime.grade).toFixed(1)}* • \`${anime.vote_count} ${exports.declension(anime.vote_count, ["голос", "голоса", "голосов"])}\`\n`;
let text =
`*${anime.title_ru}*\n` +
`${countrySmile} ${anime.country}${date == null ? "" : `, ${date}`}${anime.year ? `, ${anime.year} г.` : ``}\n` +
`📺 ${episodes}\n` +
`📅 ${anime.category.name}, ${(anime.status.name).toLowerCase()}\n` +
`${studio ? `👥 ${studio}\n\n` : `\n`}` +
`*• Жанры:* ${anime.genres}\n\n` +
`\`${anime.description ? anime.description : `Описание не указано`}\`\n\n` +
`${anime.note ? `*${exports.removeTags(anime.note)}*\n\n` : ``}` +
`${anime.status.id == 3 ? `` : rating}` + //Рейтинг + склонения
`🔸 Избранное: *${anime.favorites_count}*\n\n` +
`\`- Постер: \`${image}`
return text
}
exports.getNumberEmoji = number => { //Любое число в смайлики
number = number.toString();
return number
.replace(/0/g, '0️⃣')
.replace(/1/g, '1️⃣')
.replace(/2/g, '2️⃣')
.replace(/3/g, '3️⃣')
.replace(/4/g, '4️⃣')
.replace(/5/g, '5️⃣')
.replace(/6/g, '6️⃣')
.replace(/7/g, '7️⃣')
.replace(/8/g, '8️⃣')
.replace(/9/g, '9️⃣');
};
exports.declension = (number, words) => { //Склонения
return words[(number % 100 > 4 && number % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][(number % 10 < 5) ? Math.abs(number) % 10 : 5]];
}
exports.getCountrySmile = country => { //Смайлик в зависимости от страны
let countrySmile
switch(country) {
case "Япония":
countrySmile = "🇯🇵"
break;
case "Китай":
countrySmile = "🇨🇳"
break;
default:
countrySmile = "🏳️"
break;
}
return countrySmile;
}
exports.getMounthYear = number => { //Получить месяц. moment.js огромная либа, проще не нагружать и сделать так
let mounth
let date = number.split(".")
switch (parseInt(date[1])) {
case 1:
case 2:
case 12:
mounth = "зима"
break;
case 3:
case 4:
case 5:
mounth = "весна"
break;
case 6:
case 7:
case 8:
mounth = "лето"
break;
case 9:
case 10:
case 11:
mounth = "осень"
break;
default:
mounth = "неизвестно"
break;
}
return mounth;
};
exports.getAnimeWatchName = (listTypeId, profile) => { //Получаем название и кол-во аниме
let animeCount, listName
switch (listTypeId) {
case 1:
animeCount = profile.watching_count; listName = "🟩 Смотрю"
break;
case 2:
animeCount = profile.plan_count; listName = "🟪 В планах"
break;
case 3:
animeCount = profile.completed_count; listName = "🟦 Просмотрено"
break;
case 4:
animeCount = profile.hold_on_count; listName = "🟨 Отложено"
break;
case 5:
animeCount = profile.dropped_count; listName = "🟥 Брошено"
break;
default:
animeCount = 0; listName = "Неизвестно"
}
return {animeCount: animeCount, listName: listName}
}
exports.removeTags = html => {
let text = html.replace(`<br>`, `\n`)
return text.replace(/<(?:.|\n)*?>/gm, ' ');
}
exports.genAuthMenuText = async (id) => {
let user = await modelUser.findOne({ _id: id })
let profile
if(user) profile = await api.getProfileById(user.anixartId);
let text =
`*Anixart Auth*\n\nДля того, чтобы просматривать свой профиль в *Anixart Info*,\n` +
`Вам требуется авторизироваться.\n\n` +
`Существует \`два способа\` авторизации:\n` +
`1️⃣ - С помощью вашего ника в *Anixart*\n` +
`2️⃣ - с помощью вашего *ID*\n\n` +
`Выберите понравившийся способ, чтобы получить больше информации:\n\n` +
`${user ? `*В данный момент вы уже *\`авторизированы\` *под логином* *${profile.profile.login}*` : ``}`
return text
}
exports.genAuthNicknameText = () => {
let text =
`*Anixart Nickname Auth*\n\n` +
`❓ Авторизация с помощью \`никнейма\`:\n` +
`Для того, чтобы авторизироваться, используя свой никнейм из *Anixart*, Вам требуется:\n` +
`1️⃣ Прописать команду:\n/account *ваш_ник*`
return text
}
exports.genAuthIdText = () => {
let text =
`*Anixart Id Auth*\n\n` +
`❓ Авторизация с помощью \`айди\`:\n` +
`Для того, чтобы авторизироваться, используя свой \`айди\` из *Anixart*, Вам требуется:\n\n` +
`1️⃣ Зайти в профиль аниксарта\n` +
`2️⃣ Найти и зажать своё имя на пару секунд, после чего\n` +
`у Вас скопируется ссылка на Ваш профиль (см. скриншот)\n` +
`3️⃣ Прописать команду /account *ссылка_на_профиль*\n\n` +
`\`- Скриншот: \`https://imgur.com/a/PzKq6sq`
return text
}
exports.genAuthConfirmText = async (user) => {
let text =
`*Anixart Confirm*\n\n` +
`Пользователь: \`${user.login}\`\n` +
`Описание: \`${user.status == "" ? "Отсутствует" : user.status}\`\n\n` +
`• Вы подтвержаете, что это Вы?\n\n` +
`\`ПРИМЕЧАНИЕ: Вы в любую секунду сможете сменить профиль, если ошиблись.\``
return text
}
exports.deleteMessage = (bot, message, time) => {
setTimeout(() => {
try {
bot.deleteMessage(message.chat.id, message.message_id);
} catch (error) {
return
}
}, time * 1000);
}
exports.genStartText = async (user) => {
let text =
`*Anixart Start*\n\n` +
`Приветствую, @${user.username}!\n` +
`Перед началом работы с ботом вам требуется \`авторизироваться\`, используя команду /account\n\n` +
`❓ Доступные команды в боте:\n` +
`/start - \`первоначальная настройка и информация\`\n` +
`/account - \`авторизация в боте\`\n` +
`/profile - \`просмотр своего профиля (требуется авторизация)\`\n` +
`/profile (ник пользователя) - \`просмотр профиля человека по нику (вся приватная информация скрыта)\`\n` +
`/anime - \`просмотр новых, популярных, случайных тайтлов\`\n` +
`/about - \`информация о командах, о разработчике и о самом боте\`\n\n` +
`*ПРИМЕЧАНИЕ: авторизация работает через ваш НИК или АЙДИ на Anixart.*\n` +
`*Бот не требует от Вас ваших личных данных.*\n\n` +
`*В данный момент бот работает для узкого количества лиц.*\n` +
`*Разработчик не одобряет подобную деятельность, а потому это вынужденная мера.*\n` +
`*Приносим извинения ~*`
return text
}
exports.genAboutText = async () => {
let text =
`*Anixart About*\n\n` +
`❓ Доступные команды в боте:\n` +
`/start - \`первоначальная настройка и информация\`\n` +
`/account - \`авторизация в боте\`\n` +
`/profile - \`просмотр своего профиля (требуется авторизация)\`\n` +
`/profile (ник пользователя) - \`просмотр профиля человека по нику (вся приватная информация скрыта)\`\n` +
`/anime - \`просмотр новых, популярных, случайных тайтлов\`\n` +
`/about - \`информация о командах, о разработчике и о самом боте\`\n\n` +
`❓ О самом боте:\n` +
`Данный бот является не официальным и некоммерческим продуктом.\n` +
`Бот работает с *не публичным* API \`Anixart'a\`, что противоречит принципам создателя \`Anixarta'a\`.\n` +
`Накрутка, спам, регистрация новых аккаунтов и всё подобное через данного бота невозможна.\n` +
`Бот позволяет лишь показать открытую в профилях информацию, не запуская приложения.\n\n` +
`❓ О создателе:\n` +
`Привет! Я @reCAPTCHAs, создатель этого бота.\n` +
`Если Вы нашли баг, у вас появилось предложение или желание что-то изменить в боте, то cмело пишите в тг.\n` +
`Я буду добавлять *новый функционал*, изменять существующий и изменять дизайн интерфейса с течением времени.\n` +
`*Моя цель*: добиться того, чтобы бота начал поддерживать разработчик \`Anixart'a\`, посему я постараюсь сделать всё возможное, чтобы это произошло.\n\n` +
`*Все права принадлежат Anixart.*`
return text
}
exports.genAnimeMenuText = async () => {
let text =
`📺 Anixart Anime\n\n` +
`Тут вы можете посмотреть аниме из категорий:\n` +
`🆕 • Последнее\n` +
`📈 • Популярное\n` +
// `📣 • Анонсы (В разработке)\n` +
`🔥 • Интересное\n` +
`❓ • Случайное\n` +
`🔎 • По названию\n\n` +
`Кнопками ниже выберите интересующую Вас категорию:`
return text
}
exports.getButtonMenu = async (jsonAnime, page) => {
let text = ``
let animeList = []
//Цикл, который получает 5 аниме для списка из 25 полученных в зависимости от страницы в тг и страницы в api. В рот ебал такую залупу
for (let i = (page-1)*5; i < page*5; i++) { // 5 < 10; 10 < 15 и т.д.
let animeByCount = i > 24 ? i - Math.floor(i/25)*25 : i //Если число больше 25, то отнимает столько, сколько ненужно (костыль ебучий, похуй)
if (jsonAnime.content[animeByCount]) {
text +=
`${exports.getNumberEmoji(i+1)}. *${jsonAnime.content[animeByCount].title_ru}*\n` +
`${jsonAnime.content[animeByCount].status ? `\`- Статус: ${jsonAnime.content[animeByCount].status.name}\`\n` : ``}` +
`\`- ${jsonAnime.content[animeByCount].genres}\`\n\n` // Добавляем в текст
animeList.push({ // Пушим номер аниме по счёту и его айди в аниксарте
count: i+1,
id: jsonAnime.content[animeByCount].id
})
}
}
return {text: text, animeList: animeList}
}
exports.deleteSymbols = async (text) => {
return text
.replace(/_/gi, "")
.replace(/;/gi, "")
.replace(/\*/gi, "")
.replace(/`/gi, "")
.replace(/,/gi, "")
}
exports.searchAnimeMenu = async () => {
let text =
`🔎 Anixart Search\n\n` +
`❓Вы можете найти интересующее Вас аниме по названию.\n` +
`Для этого введите:\n\n` +
`/anime \`(название тайтла без скобок)\`,\n\n` +
`после чего вы должны выбрать нужное аниме.`
return text
}
+521
View File
@@ -0,0 +1,521 @@
const functions = require('../utils/functions');
const modelUser = require('../models/user');
exports.profileKeyboard = async (fromId, profile) => { // /profile
let keyboard = {
inline_keyboard: [
[
{
text: `🔶 Открыть профиль в Anixart`,
url: `https://anixart.tv/profile/${profile.id}`
}
],
[
{
text: '📺 Аниме в закладках',
callback_data: `${fromId};userAnimeMenu;${profile.id}`
}
]
]
}
let user = await modelUser.findOne({ _id: fromId })
if (user && user.anixartId != profile.id) {
keyboard.inline_keyboard.push([{
text: '↩️ Назад к своему профилю',
callback_data: `${fromId};profile;${user.anixartId}`
}])
}
return keyboard
};
exports.userAnimeMenuKeyboard = async (fromId, profile) => { //Меню аниме в /profile
let keyboard = {
inline_keyboard: [
[
{
text: `🟩 Смотрю: ${profile.watching_count}`,
callback_data: `${fromId};userAnimeList;1;1;0;${profile.id}` // {user id}, {callback command}, {list type}, {new page}, {this page}, {anixart id}
},
{
text: `🟪 В планах: ${profile.plan_count}`,
callback_data: `${fromId};userAnimeList;2;1;0;${profile.id}`
}
],
[
{
text: `🟦 Просмотрено: ${profile.completed_count}`,
callback_data: `${fromId};userAnimeList;3;1;0;${profile.id}`
}
],
[
{
text: `🟨 Отложено: ${profile.hold_on_count}`,
callback_data: `${fromId};userAnimeList;4;1;0;${profile.id}`
},
{
text: `🟥 Брошено: ${profile.dropped_count}`,
callback_data: `${fromId};userAnimeList;5;1;0;${profile.id}`
}
],
[
{
text: '⬅️ Назад к профилю',
callback_data: `${fromId};profile;${profile.id}`
}
]
]
}
return keyboard
};
exports.userAnimePages = async (fromId, listType, page, maxPage, animeList, profile) => { //Страницы аниме в /profile
let keyboard = {
inline_keyboard: [
[
{
text: `${animeList[0] ? functions.getNumberEmoji(animeList[0].count) : `❌`}`,
callback_data: `${fromId};userCheckAnime;${listType};${page};${animeList[0] ? animeList[0].id : "none"};${profile.id}` // {user id}, {callback command}, {list type}, {page}
},
{
text: `${animeList[1] ? functions.getNumberEmoji(animeList[1].count) : `❌`}`,
callback_data: `${fromId};userCheckAnime;${listType};${page};${animeList[1] ? animeList[1].id : "none"};${profile.id}`
},
{
text: `${animeList[2] ? functions.getNumberEmoji(animeList[2].count) : `❌`}`,
callback_data: `${fromId};userCheckAnime;${listType};${page};${animeList[2] ? animeList[2].id : "none"};${profile.id}`
},
{
text: `${animeList[3] ? functions.getNumberEmoji(animeList[3].count) : `❌`}`,
callback_data: `${fromId};userCheckAnime;${listType};${page};${animeList[3] ? animeList[3].id : "none"};${profile.id}`
},
{
text: `${animeList[4] ? functions.getNumberEmoji(animeList[4].count) : `❌`}`,
callback_data: `${fromId};userCheckAnime;${listType};${page};${animeList[4] ? animeList[4].id : "none"};${profile.id}`
}
],
[
{
text: `⏪`,
callback_data: `${fromId};userAnimeList;${listType};1;${page};${profile.id}`
},
{
text: `◀️`,
callback_data: `${fromId};userAnimeList;${listType};${page-1};${page};${profile.id}`
},
{
text: `▶️`,
callback_data: `${fromId};userAnimeList;${listType};${page+1};${page};${profile.id}`
},
{
text: `⏩`,
callback_data: `${fromId};userAnimeList;${listType};${maxPage};${page};${profile.id}`
}
],
[
{
text: `🔙 Назад к категориям`,
callback_data: `${fromId};userAnimeMenu;${profile.id}`
},
{
text: `↩️ Назад к профилю`,
callback_data: `${fromId};profile;${profile.id}`
}
]
]
}
return keyboard
};
exports.animeCheckHistory = async (fromId, listType, page, animeId, profile) => { //Посмотреть аниме в /profile
let keyboard = {
inline_keyboard: [
[
{
text: `⏸ Открыть аниме в Anixart`,
url: `https://anixart.tv/release/${animeId}`
}
],
[
{
text: `⬅️ Назад к списку`,
callback_data: `${fromId};userAnimeList;${listType};${page};0;${profile.id}` // {user id}, {callback command}, {list type}, {page}, {anixart.id}
}
],
[
{
text: `🔙 Назад к категориям`,
callback_data: `${fromId};userAnimeMenu;${profile.id}`
}
],
[
{
text: `↩️ Назад к профилю`,
callback_data: `${fromId};profile;${profile.id}`
}
]
]
}
return keyboard
};
exports.authMenu = async (fromId) => { // /account
let keyboard = {
inline_keyboard: [
[
{
text: `1️⃣ Ник`,
callback_data: `${fromId};auth;nickname`
},
{
text: `2️⃣ Айди`,
callback_data: `${fromId};auth;id`
}
]
]
}
return keyboard
};
exports.authBack = async (fromId) => { //Кнопки в /account (назад)
let keyboard = {
inline_keyboard: [
[
{
text: `🔙 Назад к выбору`,
callback_data: `${fromId};authMenu`
}
]
]
}
return keyboard
}
exports.authConfirm = async (fromId, anixartId, anixartLogin) => { //Подтверждение авторизации
let keyboard = {
inline_keyboard: [
[
{
text: `✅ Подтвердить`,
callback_data: `${fromId};authConfirm;${anixartId};${anixartLogin}`
}
],
[
{
text: `❌ Отклонить`,
callback_data: `${fromId};deleteMessage`
}
]
]
}
return keyboard
}
exports.animeMenu = async (fromId) => { // /anime
let keyboard = {
inline_keyboard: [
[
{
text: `🆕 Последнее`,
callback_data: `${fromId};animeList;0;1;0` //{user id}, {callback command}, {anime type}, {newpage}, {page}
},
{
text: `📈 Популярное`,
callback_data: `${fromId};animeList;1;1;0`
}
],
[
{
text: `🔥 Интересное`,
callback_data: `${fromId};interesting;1;0`
},
{
text: `❓ Случайное аниме`,
callback_data: `${fromId};animeRandom`
}
],
[
{
text: `🔎 Поиск аниме`,
callback_data: `${fromId};searchAnimeMenu`
}
]
]
}
return keyboard
}
exports.animeCheck = async (fromId, animeType, page, animeId) => { //Инфа об аниме в команде /anime
let keyboard = {
inline_keyboard: [
[
{
text: `⏸ Открыть аниме в Anixart`,
url: `https://anixart.tv/release/${animeId}`
}
],
[
{
text: `⬅️ Назад к списку`,
callback_data: `${fromId};animeList;${animeType};${page};0;` //{user id}, {callback command}, {anime type}, {newpage}, {page}
}
],
[
{
text: `🔙 Назад к меню аниме`,
callback_data: `${fromId};animeMenu`
}
]
]
}
return keyboard
};
exports.animeRandom = async (fromId, animeId) => { //Случайное аниме
let keyboard = {
inline_keyboard: [
[
{
text: `⏸ Открыть аниме в Anixart`,
url: `https://anixart.tv/release/${animeId}`
}
],
[
{
text: `🔙 Назад к категориям`,
callback_data: `${fromId};animeMenu`
}
],
[
{
text: `❓ Найти другое случайное`,
callback_data: `${fromId};animeRandom`
}
]
]
}
return keyboard
};
exports.animePages = async (fromId, animeType, maxPage, page, animeList) => { //Страницы в популярном, интересном
let keyboard = {
inline_keyboard: [
[
{
text: `${animeList[0] ? functions.getNumberEmoji(animeList[0].count) : `❌`}`,
callback_data: `${fromId};checkAnime;${animeType};${page};${animeList[0] ? animeList[0].id : "none"}` // {user id}, {callback command}, {list type}, {page}
},
{
text: `${animeList[1] ? functions.getNumberEmoji(animeList[1].count) : `❌`}`,
callback_data: `${fromId};checkAnime;${animeType};${page};${animeList[1] ? animeList[1].id : "none"}`
},
{
text: `${animeList[2] ? functions.getNumberEmoji(animeList[2].count) : `❌`}`,
callback_data: `${fromId};checkAnime;${animeType};${page};${animeList[2] ? animeList[2].id : "none"}`
},
{
text: `${animeList[3] ? functions.getNumberEmoji(animeList[3].count) : `❌`}`,
callback_data: `${fromId};checkAnime;${animeType};${page};${animeList[3] ? animeList[3].id : "none"}`
},
{
text: `${animeList[4] ? functions.getNumberEmoji(animeList[4].count) : `❌`}`,
callback_data: `${fromId};checkAnime;${animeType};${page};${animeList[4] ? animeList[4].id : "none"}`
}
],
[
{
text: `⏪`,
callback_data: `${fromId};animeList;${animeType};1;${page}`
},
{
text: `◀️`,
callback_data: `${fromId};animeList;${animeType};${page-1};${page}`
},
{
text: `▶️`,
callback_data: `${fromId};animeList;${animeType};${page+1};${page}`
},
{
text: `⏩`,
callback_data: `${fromId};animeList;${animeType};${maxPage};${page}`
}
],
[
{
text: `🔙 Назад к меню аниме`,
callback_data: `${fromId};animeMenu`
}
]
]
}
return keyboard
};
exports.interestingPages = async (fromId, newPage, maxPage, animeId) => { //Страницы в популярном, интересном
let keyboard = {
inline_keyboard: [
[
{
text: `🔥 Открыть тайтл`,
callback_data: `${fromId};checkInteresting;${newPage};${animeId};` // {user id}, {callback command}, {list type}, {page}
}
],
[
{
text: `⏪`,
callback_data: `${fromId};interesting;1;${newPage}`
},
{
text: `◀️`,
callback_data: `${fromId};interesting;${newPage-1};${newPage}`
},
{
text: `▶️`,
callback_data: `${fromId};interesting;${newPage+1};${newPage}`
},
{
text: `⏩`,
callback_data: `${fromId};interesting;${maxPage};${newPage}`
}
],
[
{
text: `🔙 Назад к меню аниме`,
callback_data: `${fromId};animeMenu`
}
]
]
}
return keyboard
};
exports.checkInterestingAnime = async (fromId, animeId, newPage) => { //Посмотреть интересное аниме
let keyboard = {
inline_keyboard: [
[
{
text: `⏸ Открыть аниме в Anixart`,
url: `https://anixart.tv/release/${animeId}`
}
],
[
{
text: `🔥 Назад к интересному`,
callback_data: `${fromId};interesting;${newPage};0`
}
],
[
{
text: `🔙 Назад к меню аниме`,
callback_data: `${fromId};animeMenu`
}
]
]
}
return keyboard
};
exports.searchAnimeMenu = async (fromId) => { //Как найти аниме
let keyboard = {
inline_keyboard: [
[
{
text: `🔙 Назад к меню аниме`,
callback_data: `${fromId};animeMenu`
}
]
]
}
return keyboard
};
exports.searchAnimeBack = async (fromId, page, animeName, animeId) => { //Как найти аниме
let keyboard = {
inline_keyboard: [
[
{
text: `⏸ Открыть аниме в Anixart`,
url: `https://anixart.tv/release/${animeId}`
}
],
[
{
text: `🔙 Назад к результатам`,
callback_data: `${fromId};searchAnime;${page};0;${animeName}`
}
],
[
{
text: `❌ Закрыть поиск`,
callback_data: `${fromId};deleteMessage`
}
]
]
}
return keyboard
};
exports.searchAnime = async (fromId, maxPage, page, animeList, animeName) => { //Страницы в популярном, интересном
let keyboard = {
inline_keyboard: [
[
{
text: `${animeList[0] ? functions.getNumberEmoji(animeList[0].count) : `❌`}`,
callback_data: `${fromId};searchResult;${page};${animeName};${animeList[0] ? animeList[0].id : "none"}` // {user id}, {callback command}, {list type}, {page}
},
{
text: `${animeList[1] ? functions.getNumberEmoji(animeList[1].count) : `❌`}`,
callback_data: `${fromId};searchResult;${page};${animeName};${animeList[1] ? animeList[1].id : "none"}`
},
{
text: `${animeList[2] ? functions.getNumberEmoji(animeList[2].count) : `❌`}`,
callback_data: `${fromId};searchResult;${page};${animeName};${animeList[2] ? animeList[2].id : "none"}`
},
{
text: `${animeList[3] ? functions.getNumberEmoji(animeList[3].count) : `❌`}`,
callback_data: `${fromId};searchResult;${page};${animeName};${animeList[3] ? animeList[3].id : "none"}`
},
{
text: `${animeList[4] ? functions.getNumberEmoji(animeList[4].count) : `❌`}`,
callback_data: `${fromId};searchResult;${page};${animeName};${animeList[4] ? animeList[4].id : "none"}`
}
],
[
{
text: `⏪`,
callback_data: `${fromId};searchAnime;1;${page};${animeName}`
},
{
text: `◀️`,
callback_data: `${fromId};searchAnime;${page-1};${page};${animeName}`
},
{
text: `▶️`,
callback_data: `${fromId};searchAnime;${page+1};${page};${animeName}`
},
{
text: `⏩`,
callback_data: `${fromId};searchAnime;${maxPage};${page};${animeName}`
}
],
[
{
text: `❌ Закрыть поиск`,
callback_data: `${fromId};deleteMessage`
}
]
]
}
return keyboard
};