diff --git a/CustomModules/NodBot.js b/CustomModules/NodBot.js index 931f02c..b2ae9da 100644 --- a/CustomModules/NodBot.js +++ b/CustomModules/NodBot.js @@ -56,6 +56,7 @@ module.exports = { this.name = ""; this.type = ""; this.effects = ""; + this.flavor = ""; this.rating = "0.0"; this.description = ""; } @@ -82,6 +83,7 @@ module.exports = { this.name = typeof name === 'string' ? name : this.name; this.type = typeof details.type === 'string' ? details.type : this.type; this.effects = typeof details.effects === 'string' ? details.effects : this.effects; + this.flavor = typeof details.flavor === 'string' ? details.flavor : this.flavor; this.rating = typeof details.rating === 'string' ? details.rating : this.rating; this.description = typeof details.description === 'string' ? details.description : this.description; diff --git a/functions.js b/functions.js index 6b53169..27f547a 100644 --- a/functions.js +++ b/functions.js @@ -45,7 +45,7 @@ const dotCommandFiles = fs.readdirSync('./dot-commands/').filter(file => file.en // MySQL database connection const mysql = require('mysql'); -const { GifData, PastaData } = require('./CustomModules/NodBot'); +const { GifData, PastaData, StrainData } = require('./CustomModules/NodBot'); const db = new mysql.createPool({ connectionLimit: 10, host: dbHost, @@ -151,11 +151,18 @@ const functions = { if (!client.strains) client.strains = new Discord.Collection(); client.strains.clear(); for (const row of rows) { - const strain = { - id: row.id, - name: row.strain, - }; - client.strains.set(strain.name, strain); + const strainData = new StrainData().setInfo( + row.strain, + { + type: row.type, + effects: row.effects, + rating: row.rating, + description: row.description, + flavor: row.flavor + }, + row.id + ); + client.strains.set(strainData.name, strainData); // if (isDev) console.log(strain) } if (isDev) console.log('Strains Collection Built'); @@ -470,14 +477,8 @@ const functions = { functions.download.medicalAdvice(client); }); }, - strain(interaction) { - const strain = db.escape(interaction.options.getString('name')); - const type = db.escape(interaction.options.getString('type')); - const effects = db.escape(( interaction.options.getString('effects') || 'Unkown' )); - const description = db.escape(( interaction.options.getString('description') || 'Unknown' )); - const flavor = db.escape(( interaction.options.getString('flavor') || 'Unknown' )); - const rating = db.escape(( interaction.options.getString('rating') || '3' )); - const strainQuery = `INSERT INTO strains (strain, type, effects, description, flavor, rating) VALUES (${strain}, ${type}, ${effects}, ${description}, ${flavor}, ${rating}) ON DUPLICATE KEY UPDATE strain=${db.escape(strain)}, type=${db.escape(type)}, effects=${db.escape(effects)}, description=${db.escape(description)}, flavor=${db.escape(flavor)}, rating=${db.escape(rating)}`; + strain(interaction, strainData) { + const strainQuery = `INSERT INTO strains (strain, type, effects, description, flavor, rating) VALUES (${db.escape(strainData.name)}, ${db.escape(strainData.type)}, ${db.escape(strainData.effects)}, ${db.escape(strainData.description)}, ${db.escape(strainData.flavor)}, ${db.escape(strainData.rating)}) ON DUPLICATE KEY UPDATE strain=${db.escape(strainData.strain)}, type=${db.escape(strainData.type)}, effects=${db.escape(strainData.effects)}, description=${db.escape(strainData.description)}, flavor=${db.escape(strainData.flavor)}, rating=${db.escape(strainData.rating)}`; console.log(strainQuery); return new Promise((resolve, reject) => { db.query(strainQuery, (err, rows, fields) => { @@ -541,7 +542,7 @@ const functions = { }); }, strains(client) { - const query = 'SELECT id, strain FROM strains'; + const query = 'SELECT * FROM strains'; db.query(query, (err, rows, fields) => { if (err) throw err; functions.collections.strains(rows, client); diff --git a/slash-commands/edit.js b/slash-commands/edit.js index 975e933..dc1669a 100644 --- a/slash-commands/edit.js +++ b/slash-commands/edit.js @@ -8,7 +8,7 @@ const tenor = require('tenorjs').client({ const { SlashCommandBuilder } = require('@discordjs/builders'); const { MessageActionRow, MessageButton } = require('discord.js'); -const { GifData, PastaData } = require('../CustomModules/NodBot'); +const { GifData, PastaData, StrainData } = require('../CustomModules/NodBot'); const fn = require('../functions.js'); const strings = require('../strings.json'); const { emoji } = strings; @@ -54,6 +54,54 @@ module.exports = { .setDescription('The new content of the copypasta') .setRequired(true) ) + ) +// 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 }); @@ -82,6 +130,7 @@ module.exports = { // Strain case "strain": //TODO + await this.editStrain(interaction); break; break; // Default @@ -106,5 +155,16 @@ module.exports = { await fn.upload.pasta(pastaData, interaction.client); await fn.download.gifs(interaction.client); await interaction.editReply(`I've updated ${name}.pasta`); + }, + 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); } }; \ No newline at end of file