You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
5.3 KiB
103 lines
5.3 KiB
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 <anime>`',
|
|
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" : ''}`);
|
|
}
|
|
}; |