366 lines
19 KiB
JavaScript
366 lines
19 KiB
JavaScript
const errorHandler = require('../utils/error-handler');
|
||
const keyboards = require('../utils/keyboards');
|
||
const functions = require('../utils/functions');
|
||
const api = require('../network/api');
|
||
const commands = require('../commands');
|
||
const modelUser = require('../models/user');
|
||
|
||
module.exports = bot => async callbackQuery => {
|
||
try {
|
||
let action = callbackQuery.data;
|
||
let msg = callbackQuery.message;
|
||
let user = callbackQuery.from;
|
||
|
||
action = action.split(";");
|
||
|
||
let userClickedId = action[0]
|
||
if (userClickedId != parseInt(user.id)) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы не являетесь отправителем сообщения', show_alert: false});
|
||
}
|
||
|
||
switch(action[1]) {
|
||
//Меню выбора истории просмотра аниме
|
||
case "userAnimeMenu":
|
||
var body = await api.getProfileById(action[2])
|
||
var profile = body.profile
|
||
|
||
if (profile.is_stats_hidden) return bot.answerCallbackQuery(callbackQuery.id, {text: 'У данного пользователя скрыта история просмотра аниме', show_alert: false});
|
||
|
||
var opts = {
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.userAnimeMenuKeyboard(user.id, profile)
|
||
};
|
||
bot.editMessageText(`*Списки аниме пользователя* \`${profile.login}\`\n\nТут вы можете просмотреть все списки аниме пользователя.\nКнопками ниже выберите интересующую Вас категорию:`, opts);
|
||
break;
|
||
//Профиль аниксарта
|
||
case "profile":
|
||
var body = await api.getProfileById(action[2])
|
||
var profile = body.profile
|
||
|
||
if (body.code == 2 || body == null) return bot.sendMessage(chatId, "Данного профиля не существует");
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.profileKeyboard(user.id, profile)
|
||
};
|
||
bot.editMessageText(await functions.genProfileText(profile), opts);
|
||
break;
|
||
//Список аниме из истории какого-то типа
|
||
case "userAnimeList":
|
||
var body = await api.getProfileById(action[5])
|
||
var profile = body.profile
|
||
|
||
var listTypeId = parseInt(action[2])
|
||
var animeWatchAndName = await functions.getAnimeWatchName(listTypeId, profile)
|
||
if (animeWatchAndName.animeCount < 1) return bot.answerCallbackQuery(callbackQuery.id, {text: 'Данная категория пуста.', show_alert: false});
|
||
|
||
var page = parseInt(action[3])
|
||
var maxPage = Math.ceil(animeWatchAndName.animeCount/5);
|
||
var sitePage = Math.floor((page-1)*5/25);
|
||
|
||
if (page < 1) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже находитесь на первой странице.', show_alert: false});
|
||
}
|
||
if (action[3] == action[4]) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы не можете этого сделать.', show_alert: false});
|
||
}
|
||
if (page > maxPage) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже на последней странице', show_alert: false});
|
||
}
|
||
|
||
var jsonAnime = await api.getUserAnimeList(action[5], action[2], sitePage);
|
||
var getButtonMenu = await functions.getButtonMenu(jsonAnime, page);
|
||
var text = `*Anixart Anime Lists*\n\n*Список аниме пользователя* \`${profile.login}\`\n- Тип: ${animeWatchAndName.listName}\n- Всего аниме в списке: ${animeWatchAndName.animeCount}\n- Страница: ${page}/${maxPage}\n\n~~~~~~~~~~~~~~~~~~\n`
|
||
text += getButtonMenu.text
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.userAnimePages(user.id, listTypeId, page, maxPage, getButtonMenu.animeList, profile)
|
||
};
|
||
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
//Просмотреть аниме у пользователя
|
||
case "userCheckAnime":
|
||
if (action[4] == "none") return bot.answerCallbackQuery(callbackQuery.id, {text: 'Это пустой слот', show_alert: false});
|
||
|
||
var body = await api.getProfileById(action[5])
|
||
var profile = body.profile
|
||
|
||
var listType = action[2];
|
||
var page = action[3];
|
||
var animeId = action[4];
|
||
|
||
var animeInfo = await api.getAnimeInfo(animeId)
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.animeCheckHistory(user.id, listType, page, animeId, profile)
|
||
};
|
||
|
||
var text = await functions.genAnimeText(animeInfo.release);
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "auth":
|
||
var text
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.authBack(user.id)
|
||
};
|
||
|
||
if(action[2] == "nickname") {
|
||
text = functions.genAuthNicknameText()
|
||
} else {
|
||
text = functions.genAuthIdText()
|
||
}
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "authMenu":
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.authMenu(user.id)
|
||
};
|
||
var text = await functions.genAuthMenuText(user.id)
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "authConfirm":
|
||
var anixartId = parseInt(action[2]);
|
||
var anixartLogin = action[3];
|
||
|
||
var userDB = await modelUser.findOne({ _id: user.id });
|
||
if(!userDB) {
|
||
await modelUser.firstOrCreate(user, anixartId);
|
||
} else {
|
||
await modelUser.updateOne({_id: user.id}, {$set: {anixartId : anixartId}})
|
||
await userDB.save()
|
||
}
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
};
|
||
|
||
var scfMsg = await bot.editMessageText(`*Anixart Auth Confirm*\n\n✅ Вы *успешно* авторизировались в аккаунт *${anixartLogin}*!\n\nТеперь вам доступно:\nКоманда: /profile \`- просмотр своего профиля\``, opts);
|
||
functions.deleteMessage(bot, scfMsg, 10)
|
||
break;
|
||
case "deleteMessage":
|
||
try {
|
||
bot.deleteMessage(msg.chat.id, msg.message_id)
|
||
} catch (error) {
|
||
return
|
||
}
|
||
break;
|
||
case "animeMenu":
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.animeMenu(user.id)
|
||
};
|
||
bot.editMessageText(await functions.genAnimeMenuText(), opts);
|
||
break;
|
||
case "animeList": //Листы аниме популярное и последнее
|
||
var animeType = parseInt(action[2]);
|
||
var newPage = parseInt(action[3]);
|
||
var page = parseInt(action[4]);
|
||
var maxPage = 500;
|
||
var sitePage = Math.floor((newPage-1)*5/25);
|
||
var category
|
||
|
||
switch(animeType) {
|
||
case 0:
|
||
category = "🆕 Последнее"
|
||
break;
|
||
case 1:
|
||
category = "📈 Популярное"
|
||
break;
|
||
default:
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Произошла ошибка', show_alert: false});
|
||
}
|
||
|
||
if (newPage < 1) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже находитесь на первой странице.', show_alert: false});
|
||
}
|
||
if (newPage == page) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы не можете этого сделать.', show_alert: false});
|
||
}
|
||
if (newPage > maxPage) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже на последней странице', show_alert: false});
|
||
}
|
||
|
||
var jsonAnime = await api.getAnimeList(sitePage, animeType);
|
||
var getButtonMenu = await functions.getButtonMenu(jsonAnime, newPage);
|
||
var text = `*Anixart Anime Lists*\n\n*Список аниме*\n- Тип: ${category}\n- Всего аниме в списке: 2500\n- Страница: ${newPage}/${maxPage}\n\n~~~~~~~~~~~~~~~~~~\n`
|
||
text += getButtonMenu.text
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'markdown', //Форматирование текста
|
||
reply_markup: await keyboards.animePages(user.id, animeType, maxPage, newPage, getButtonMenu.animeList)
|
||
};
|
||
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "checkAnime": //Посмотреть аниме в /anime
|
||
if (action[4] == "none") return bot.answerCallbackQuery(callbackQuery.id, {text: 'Это пустой слот', show_alert: false});
|
||
|
||
var animeType = action[2];
|
||
var page = action[3];
|
||
var animeId = parseInt(action[4]);
|
||
|
||
var animeInfo = await api.getAnimeInfo(animeId)
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.animeCheck(user.id, animeType, page, animeId)
|
||
};
|
||
|
||
var text = await functions.genAnimeText(animeInfo.release);
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "animeRandom":
|
||
var animeInfo = await api.getRandomAnime()
|
||
if(animeInfo == null || !animeInfo || animeInfo.code == 2 || !animeInfo.release) return bot.answerCallbackQuery(callbackQuery.id, {text: 'Произошла ошибка', show_alert: false});
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.animeRandom(user.id, animeInfo.release.id)
|
||
};
|
||
|
||
var text = await functions.genAnimeText(animeInfo.release);
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "interesting":
|
||
var newPage = parseInt(action[2])
|
||
var page = parseInt(action[3])
|
||
var jsonAnime = await api.getInterestingAnime()
|
||
var maxPage = parseInt(jsonAnime.content.length)
|
||
|
||
if (jsonAnime == null || !jsonAnime || jsonAnime.code == 2 || !jsonAnime.content) return bot.answerCallbackQuery(callbackQuery.id, {text: 'Произошла ошибка', show_alert: false});
|
||
|
||
if (newPage < 1) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже находитесь на первой странице.', show_alert: false});
|
||
}
|
||
if (newPage == page) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы не можете этого сделать.', show_alert: false});
|
||
}
|
||
if (newPage > maxPage) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже на последней странице', show_alert: false});
|
||
}
|
||
|
||
var text = `*• ${jsonAnime.content[newPage-1].title}*\n${jsonAnime.content[newPage-1].description}\n\n• Аниме: *${newPage}/${maxPage}*\n\`Постер: \`${jsonAnime.content[newPage-1].image}`
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.interestingPages(user.id, newPage, maxPage, parseInt(jsonAnime.content[newPage-1].action))
|
||
};
|
||
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "checkInteresting":
|
||
var newPage = parseInt(action[2]);
|
||
var animeId = parseInt(action[3]);
|
||
|
||
var animeInfo = await api.getAnimeInfo(animeId);
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.checkInterestingAnime(user.id, animeId, newPage)
|
||
};
|
||
|
||
var text = await functions.genAnimeText(animeInfo.release);
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "searchAnimeMenu":
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.searchAnimeMenu(user.id)
|
||
};
|
||
|
||
var text = await functions.searchAnimeMenu();
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "searchAnime":
|
||
var newPage = parseInt(action[2])
|
||
var page = parseInt(action[3])
|
||
var animeName = action[4]
|
||
|
||
var jsonAnime = await api.getAnimeByName(animeName)
|
||
|
||
var maxPage = parseInt(Math.ceil(jsonAnime.total_count/5))
|
||
|
||
if (jsonAnime == null || !jsonAnime || jsonAnime.code == 2 || !jsonAnime.content) return bot.answerCallbackQuery(callbackQuery.id, {text: 'Произошла ошибка', show_alert: false});
|
||
|
||
if (newPage < 1) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже находитесь на первой странице.', show_alert: false});
|
||
}
|
||
if (newPage == page) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы не можете этого сделать.', show_alert: false});
|
||
}
|
||
if (newPage > maxPage) {
|
||
return bot.answerCallbackQuery(callbackQuery.id, {text: 'Вы уже на последней странице', show_alert: false});
|
||
}
|
||
|
||
var getButtonMenu = await functions.getButtonMenu(jsonAnime, newPage)
|
||
var text = `*🔎 Anixart Anime Lists*\n\n*Список аниме:*\n- По запросу: \`${animeName}\`\n- Всего аниме в списке: ${jsonAnime.total_count}\n- Страница: ${newPage}/${maxPage}\n\n~~~~~~~~~~~~~~~~~~\n`
|
||
text += getButtonMenu.text
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'markdown', //Форматирование текста
|
||
reply_markup: await keyboards.searchAnime(user.id, maxPage, newPage, getButtonMenu.animeList, animeName)
|
||
};
|
||
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
case "searchResult":
|
||
if (action[4] == "none") return bot.answerCallbackQuery(callbackQuery.id, {text: 'Это пустой слот', show_alert: false});
|
||
|
||
var newPage = parseInt(action[2]);
|
||
var animeName = action[3];
|
||
var animeId = parseInt(action[4]);
|
||
|
||
var jsonAnime = await api.getAnimeInfo(animeId);
|
||
|
||
var opts = { //Опции (клавиатура и т.д.)
|
||
chat_id: msg.chat.id,
|
||
message_id: msg.message_id,
|
||
parse_mode: 'Markdown', //Форматирование текста
|
||
reply_markup: await keyboards.searchAnimeBack(user.id, newPage, animeName, animeId)
|
||
};
|
||
|
||
var text = await functions.genAnimeText(jsonAnime.release);
|
||
bot.editMessageText(text, opts);
|
||
break;
|
||
default:
|
||
return;
|
||
}
|
||
} catch (error) {
|
||
errorHandler(bot, callbackQuery.message.chat.id, error)
|
||
}
|
||
}; |