Finale
This commit is contained in:
1 parent
d3d221f9e3
commit
e59845661f
19 files changed
+4803
-4
No files matched your search
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* Хэндлер ошибок бота
|
||||
*/
|
||||
module.exports = (bot, chatId, error) => {
|
||||
console.error(error);
|
||||
bot.sendMessage(chatId, "Непредвиденная ошибка.");
|
||||
};
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
};
|
||||
Reference in new issue
Block a user