From bc1abc192403b268b458bf508f019060e2eb2016 Mon Sep 17 00:00:00 2001 From: WubzyGD Date: Fri, 28 Jan 2022 11:44:45 -0700 Subject: [PATCH] character editing --- commands/anime/anime.js | 2 +- commands/anime/char.js | 82 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/commands/anime/anime.js b/commands/anime/anime.js index 0caa013..4006532 100644 --- a/commands/anime/anime.js +++ b/commands/anime/anime.js @@ -239,7 +239,7 @@ module.exports = { } else {fn = asr.id;} let ani = await AniData.findOne({id: fn}); if (!ani) {return message.channel.send("\\*Head scratching* that anime seems to have vanished into thin air. Try again or go yell at my devs.");} - Object.keys(options).forEach(o => {if (![undefined, null].includes(options[o])) { + Object.keys(options).forEach(o => {if (![undefined, null].includes(options[o]) && o !== 'name') { if (o === 'japname') { client.misc.cache.anime.delete(ani.japname); client.misc.cache.anime.set(options.japname, ani.id); diff --git a/commands/anime/char.js b/commands/anime/char.js index 0f16c60..7103276 100644 --- a/commands/anime/char.js +++ b/commands/anime/char.js @@ -39,7 +39,6 @@ module.exports = { queue = true; } options = new TagFilter([ - new Tag(['ask', 'question'], 'ask', 'toggle'), new Tag(['name', 'n'], 'name', 'append'), new Tag(['description', 'desc', 'p', 'personality'], 'personality', 'append'), new Tag(['anime', 'ani', 'a'], 'anime', 'append'), @@ -248,6 +247,87 @@ module.exports = { return; } + if (['e', 'edit'].includes(args[0].toLowerCase())) { + args.shift(); + let tu = await UserData.findOne({uid: message.author.id}); + if (!tu || !tu.staff) {return await message.channel.send("Since you aren't a Natsuki Staff member, you can't edit characters.");} + if (!args.length) {return message.channel.send("You have to provide tags to edit characters with.");} + options = new TagFilter([ + new Tag(['name', 'n'], 'name', 'append'), + new Tag(['rn', 'rename'], 'rename', 'append'), + new Tag(['description', 'desc', 'p', 'personality'], 'personality', 'append'), + //new Tag(['anime', 'ani', 'a'], 'anime', 'append'), + new Tag(['thumb', 'thumbnail', 't'], 'thumbnail', 'append'), + new Tag(['img', 'image', 'i'], 'images', 'listAppend'), + new Tag(['loveInterest', 'dating', 'married', 'li'], 'loveInterest', 'append'), + new Tag(['gender', 'g', 'sex'], 'gender', 'append'), + new Tag(['nickname', 'nn', 'nick'], 'nicknames', 'listAppend'), + new Tag(['force', 'f'], 'force', 'toggle') + ]).test(args.join(' ')); + if (!options.name) { + let tempani = await ask(message, "What character would you like to edit?", 60000, false, true); + if (!tempani) {return;} + options.name = tempani.split(/\s+/g); + } + let asr = await chs(message, client, options.name.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 character 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 character 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 character you were looking for.");} + } else {fn = asr.id;} + let ech = await Char.findOne({id: fn}); + if (!ech) {return message.channel.send("\\*Head scratching* that character seems to have vanished into thin air. Try again or go yell at my devs.");} + if (message.attachments.size) { + if (options.thumbnail) { + if (!options.images) {options.images = [];} + Array.from(message.attachments.keys()).forEach(i => options.images.push(message.attachments.get(i).url)); + } else { + if (!options.images) {options.images = [];} + let att = Array.from(message.attachments.keys()); + if (message.attachments.size > 1) { + for (let i = 1; i < att.length; i++) { + options.images.push(message.attachments.get(att[i]).url); + } + } + options.thumbnail = message.attachments.get(att[0]).url; + } + } + Object.keys(options).forEach(async o => {if (![undefined, null].includes(options[o]) && o !== 'name') { + /*if (o === 'anime') { + let ani = await AniData.findOne({id: ech.anime}); + if (ani) { + + } + }*/ + if (Array.isArray(options[o])) {options[o].forEach(i => ech[o].push(i));} + else {ech[o] = options[o];} + ech.markModified(o); + if (o === 'rename') { + delete ech.rename; + client.misc.cache.charsID.set(ech.id, options.rename); + client.misc.cache.chars.delete(ech.name); + client.misc.cache.chars.set(options.rename, ech.id); + ech.name = options.rename; + } + }}); + ech.save(); + return message.channel.send('Character updated.'); + } + if (['s', 'search'].includes(args[0].trim().toLowerCase())) { args.shift(); if (!args[0]) {