const Discord = require('discord.js'); const AF = require("../../models/anifav"); const AniData = require('../../models/anime'); const ask = require('../../util/ask'); const ans = require('../../util/anime/anisearch'); const {Pagination} = require('../../util/pagination'); module.exports = { name: "watched", aliases: ['watchedani', 'fl', 'finishedani', 'finshedlist'], meta: { category: 'Anime', description: "Add an anime to your list of finished anime", syntax: '`watched `', extra: null }, help: "Add an anime to your list of finished animes with {{p}}watched.", async execute(message, msg, args, cmd, prefix, mention, client) { if (args[0] && ['v', 'view'].includes(args[0].toLowerCase())) { if (mention) {args.shift();} let user = mention || message.author; let af = await AF.findOne({uid: user.id}); if (!af || !af.watched.length) {return message.channel.send(`${user.id === message.author.id ? "You haven't" : "That person hasn't"} watched any anime.`);} let pages = []; let pl = (Math.floor(af.watched.length / 10) + 1); for (let i = 0; i < pl; i++) { let s = ''; for (let x = 0; x < 10; x++) { if (!af.watched[(i * 10) + x]) {break;} s += `**${x + (i * 10) + 1}.** ${client.misc.cache.animeID.get(af.watched[(i * 10) + x])}\n`; } pages.push(new Discord.MessageEmbed() .setAuthor({ name: message.guild ? message.guild.members.cache.get(user.id).displayName : user.username, iconURL: message.guild ? message.guild.members.cache.get(user.id).displayAvatarURL({dynamic: true}) : user.displayAvatarURL({dynamic: true}) }) .setTitle("Finished Anime List") .setDescription(s) .setColor('c375f0') .setTimestamp() ); } if (pages.length > 1) { let pag = new Pagination(message.channel, pages, message, client, true); return await pag.start({user: message.author.id, time: 60000}); } else {return message.channel.send({embeds: [pages[0].setFooter({text: "Natsuki"})]});} } if (!args[0]) { let tempchar = await ask(message, "What anime would you like to add to your finished list?", 60000, false, true); if (!tempchar) {return;} args = tempchar.split(/\s+/g); } let asr = await ans(message, client, args.join(" ").trim().toLowerCase(), -700, 0); let fn; if (asr === 0) { return message.channel.send("That search returned no results! Try again?"); } else if (asr instanceof Pagination) { await asr.start({user: message.author.id, startPage: 0, endTime: 60000}); await asr.message.react('✅'); let noticeDel = await message.channel.send("React with :white_check_mark: when you've found the anime you want!"); let arc; try {arc = await asr.message.awaitReactions({filter: (r) => ['✅', '⏹'].includes(r.emoji.name), max: 1, errors: ['time']});} catch {return message.reply("Looks like you didn't find the anime you were looking for.");} collected = arc.first().emoji.name; if (collected === '✅') { fn = client.misc.cache.anime.get(asr.getCurrentPage().title.trim()); await asr.stop(); await asr.message.delete().catch(() => {}); await noticeDel.delete().catch(() => {}); } else {return message.reply("Looks like you didn't find the anime you were looking for.");} } else { let preConfEmbed = await message.channel.send({embeds: [asr.embed]}); let conf = await ask(message, "Is this the anime you meant?", 60000, undefined, undefined, true); if (!['y', 'yes', 'ye', 'n', 'no'].includes(conf.trim().toLowerCase())) {clearDM(); return dmch.send("You must specify yes or no! Please try again.");} conf = ['y', 'yes', 'ye'].includes(conf.trim().toLowerCase()); preConfEmbed.delete().catch(() => {}); if (!conf) {return message.channel.send("Well, I've got nothing, then. If that doesn't match the anime you're looking for then I would try again with a more narrow search.");} fn = asr.id; } let af = await AF.findOne({uid: message.author.id}) || new AF({uid: message.author.id}); if (af.watched.includes(fn)) {return message.channel.send("Looks like that anime is already on your finished list!");} let tfc = await AniData.findOne({id: fn}); tfc.watchers += 1; tfc.markModified('watchers'); af.watched.push(fn); af.markModified('watched'); let dw = false; if (af.toWatch.includes(fn)) { af.toWatch.splice(af.toWatch.indexOf(fn), 1); af.markModified('toWatch'); tfc.listed--; tfc.save(); dw = true; } af.save(); tfc.save(); return message.channel.send(`I've added **${tfc.name}** to your list of finished animes!${dw ? " I've also removed it from your watch list for you :p" : ''}`); } };