nodbot/slash-commands/edit.js

172 lines
4.7 KiB
JavaScript
Raw Normal View History

const tenor = require('tenorjs').client({
'Key': process.env.tenorAPIKey, // https://tenor.com/developer/keyregistration
'Filter': 'off', // "off", "low", "medium", "high", not case sensitive
'Locale': 'en_US',
'MediaFilter': 'minimal',
'DateFormat': 'D/MM/YYYY - H:mm:ss A',
});
const { SlashCommandBuilder } = require('@discordjs/builders');
const { MessageActionRow, MessageButton } = require('discord.js');
2023-08-08 21:04:39 +00:00
const { GifData, PastaData, StrainData } = require('../CustomModules/NodBot');
const fn = require('../functions.js');
const strings = require('../strings.json');
const { emoji } = strings;
module.exports = {
data: new SlashCommandBuilder()
.setName('edit')
.setDescription('Edit content in Nodbot\'s database.')
// GIF
.addSubcommand(subcommand =>
subcommand
.setName('gif')
.setDescription('Edit a GIF URL')
.addStringOption(option =>
option
.setName('name')
.setDescription('The name of the GIF to edit')
.setRequired(true)
.setAutocomplete(true)
)
.addStringOption(option =>
option
.setName('url')
.setDescription('The new URL')
.setRequired(true)
)
)
// Pasta
.addSubcommand(subcommand =>
subcommand
.setName('pasta')
.setDescription('Edit a copypasta\'s content')
.addStringOption(option =>
option
.setName('name')
.setDescription('The name of the copypasta')
.setRequired(true)
.setAutocomplete(true)
)
.addStringOption(option =>
option
.setName('content')
.setDescription('The new content of the copypasta')
.setRequired(true)
)
2023-08-08 21:04:39 +00:00
)
// Strain
.addSubcommand(subcommand =>
subcommand
.setName('strain')
.setDescription('Edit a strain\'s data')
.addStringOption(option =>
option
.setName('name')
.setDescription('Name of the strain')
.setRequired(true)
.setAutocomplete(true)
)
.addStringOption(option =>
option
.setName('type')
.setDescription('Indica/Sativa/Hybrid')
.setRequired(false)
.addChoices(
{ name: "Indica", value: "Indica" },
{ name: "Hybrid", value: "Hybrid" },
{ name: "Sativa", value: "Sativa" }
)
)
.addStringOption(option =>
option
.setName('effects')
.setDescription('What effects does the strain produce?')
.setRequired(false)
)
.addStringOption(option =>
option
.setName('flavor')
.setDescription('Flavor Profile')
.setRequired(false)
)
.addStringOption(option =>
option
.setName('rating')
.setDescription('Star rating of the strain on Leaf.ly')
.setRequired(false)
)
.addStringOption(option =>
option
.setName('description')
.setDescription('Summary of the strain')
.setRequired(false)
)
),
async execute(interaction) {
await interaction.deferReply({ ephemeral: true });
try {
// Code Here...
const subcommand = interaction.options.getSubcommand();
switch (subcommand) {
// GIF
case "gif":
//TODO
await this.editGif(interaction, interaction.options.getString('name'), interaction.options.getString('url'));
break;
// Joint
case "joint":
//TODO
break;
// MD
case "md":
//TODO
break;
// Pasta
case "pasta":
//TODO
await this.editPasta(interaction, interaction.options.getString('name'), interaction.options.getString('content'));
break;
// Strain
case "strain":
//TODO
2023-08-08 21:04:39 +00:00
await this.editStrain(interaction);
break;
break;
// Default
default:
break;
}
} catch (err) {
const errorId = fn.generateErrorId();
console.error(`${errorId}: err`);
await interaction.editReply(`Sorry, an error has occured. Error ID: ${errorId}`);
}
},
async editGif(interaction, name, url) {
const gifData = new GifData().setInfo(name, url);
await fn.upload.gif(gifData, interaction.client);
await fn.download.gifs(interaction.client);
await interaction.editReply(`I've updated ${gifData.name}.gif`);
},
async editPasta(interaction, name, content) {
const pastaData = new PastaData().setInfo(name, content);
await fn.upload.pasta(pastaData, interaction.client);
await fn.download.gifs(interaction.client);
await interaction.editReply(`I've updated ${name}.pasta`);
2023-08-08 21:04:39 +00:00
},
async editStrain(interaction) {
const details = {
type: interaction.options.getString('type'),
effects: interaction.options.getString('effects'),
flavor: interaction.options.getString('flavor'),
rating: interaction.options.getString('rating'),
description: interaction.options.getString('description')
};
const strainData = new StrainData().setInfo(interaction.options.getString('name'), details);
await fn.upload.strain(interaction, strainData);
const reply = await fn.download.strain(strainData.name, interaction);
await interaction.editReply(reply);
}
};