From bd6374c1c77e61d0f4e10d6833d68d97a273205d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 2 Apr 2020 19:15:26 -0700 Subject: [PATCH] +Commands{change name, help, read} better error catching. --- commands/change name.ts | 23 +++++++++++++ commands/commands.old | 71 ----------------------------------------- commands/help.ts | 33 +++++++++++++++++++ commands/read.ts | 41 ++++++++++++++++++++++++ main.ts | 20 ++++++++---- scripts/functions.ts | 34 ++++++++++++++------ 6 files changed, 135 insertions(+), 87 deletions(-) create mode 100644 commands/change name.ts create mode 100644 commands/help.ts create mode 100644 commands/read.ts diff --git a/commands/change name.ts b/commands/change name.ts new file mode 100644 index 0000000..50754e2 --- /dev/null +++ b/commands/change name.ts @@ -0,0 +1,23 @@ +import { squirrel } from "../scripts/enums"; +import { capitalize, getPlayerData, updateSquirrelFile } from "../scripts/functions"; + +module.exports = { + name: "namechange", + description: "Change the name of your squirrel, can only be used at level 1", + args: "**name** - the new name for your squirrel", + execute(msg, args) { + let data: squirrel = getPlayerData(msg.author.id); + + if (data.level == 1) { + if (args.length >= 1) { + data.name = capitalize(args[0]) + " " + data.name.split(' ')[1]; + updateSquirrelFile(msg.author.id, data); + msg.reply(`Name changed to ${data.name}`); + } else { + msg.reply(`Please provide a name`); + } + } else { + msg.reply(`Sorry, you have to be level 1 to change your name. You're stuck with ${data.name}`); + } + } +} diff --git a/commands/commands.old b/commands/commands.old index b7c8820..a6955e5 100644 --- a/commands/commands.old +++ b/commands/commands.old @@ -11,30 +11,12 @@ let processes: any = { args: "", run: (msg: any, data: player, args: string[], file: any) => encounter() }, - "help": { - title: "Help", - description: "Show a description of a command", - args: "**command** - the command you'd like to know more about", - run: (msg: any, data: player, args: string[], file: any) => help(msg, args) - }, "list": { title: "List", description: "List all commands", args: "", run: (msg: any, data: player, args: string[], file: any) => list(msg) }, - "read": { - title: "Read", - description: "Read a description of your squirrel", - args: "", - run: (msg: any, data: player, args: string[], file: any) => read(msg, data) - }, - "namechange": { - title: "Namechange", - description: "Change the name of your squirrel, can only be used at level 1", - args: "**name** - the new name for your squirrel", - run: (msg: any, data: player, args: string[], file: any) => nameChange(msg, data, args, file) - }, "races": { title: "Races", description: "List all the races", @@ -51,26 +33,6 @@ let processes: any = { //===COMMAND FUNCTIONS== -function help(msg: any, args: string[]): void { - let argument: string = args[0].toLowerCase(); - if (argument === "") { - msg.reply(`Please provide a command, like "!help help", or "!help races"\nAlternatively type "!list" for a list of commands`); - } else if (processes.hasOwnProperty(argument)) { - let embed = new Discord.RichEmbed() - .setTitle(processes[argument].title) - .setColor(COLOR) - .setDescription(processes[argument].description); - if (processes[argument].args === "") { - embed.addField("Arguments:", `This command has no arguments`); - } else { - embed.addField("Arguments:", processes[argument].args); - } - msg.channel.send(embed); - } else { - msg.reply(`That command does not exist`); - } -} - function list(msg: any): void { let embed = new Discord.RichEmbed() .setTitle("List of Commands") @@ -83,39 +45,6 @@ function list(msg: any): void { msg.author.send(embed); } -function read(msg: any, data: player): void { - let embed = new Discord.RichEmbed() - .setTitle(msg.author.username) - .setColor(COLOR) - .setThumbnail(msg.author.avatarURL) - .setDescription("Squirrel Info") - .addField("Name", data.name) - .addField("Race", raceText(data.race)) - .addField("Class", capitalize(data.class)) - .addField("Nuts", data.nuts) - .addField("Level", data.level); - if (data.dm === true) - embed.addField("DM Points", data.dm_points); - - msg.channel.send(embed); -} - - - -function nameChange(msg: any, data: player, args: string[], file: any): void { - if (data.level == 1) { - if (args.length >= 1) { - data.name = capitalize(args[0]) + " " + data.name.split(' ')[1]; - fs.writeFileSync(file, JSON.stringify(data)); - msg.reply(`Name changed to ${data.name}`); - } else { - msg.reply(`Please provide a name`); - } - } else { - msg.reply(`Sorry, you have to be level 1 to change your name. You're stuck with ${data.name}`); - } -} - function printRaces(msg: any): void { let print = "The races are: "; for (let i = 0; i < races.length; i++) { diff --git a/commands/help.ts b/commands/help.ts new file mode 100644 index 0000000..a85713e --- /dev/null +++ b/commands/help.ts @@ -0,0 +1,33 @@ +import { client } from "../main"; +import { capitalize, COLOR } from "../scripts/functions"; + +module.exports = { + name: 'help', + description: "Show a description of a command", + args: "**command** - the command you'd like to know more about", + execute(msg, args) { + const command = args[0].toLowerCase(); + if (command === "") { + msg.reply(`Please provide a command, like "!help help", or "!help races"\nAlternatively type "!list" for a list of commands`); + return; + } + + if (client.commands.has(command)) { + const commandData: any = client.commands.get(command); + const helpEmbed: object = { + color: COLOR, + title: capitalize(commandData.name), + description: commandData.description, + fields: [ + { + name: 'Arguments', + value: commandData.args + } + ] + } + msg.channel.send("{ embed: helpEmbed }"); + } else { + msg.reply(`That command does not exist`); + } + } +} \ No newline at end of file diff --git a/commands/read.ts b/commands/read.ts new file mode 100644 index 0000000..d9daafa --- /dev/null +++ b/commands/read.ts @@ -0,0 +1,41 @@ +import { squirrel } from "../scripts/enums"; +import { classText, COLOR, getPlayerData, raceText } from "../scripts/functions"; + +module.exports = { + name: "read", + description: "Read a description of your squirrel", + args: "", + execute(msg, args) { + const data: squirrel = getPlayerData(msg.author.id); + const squirrelEmbed: object = { + color: COLOR, + title: msg.author.username, + thumbnail: { + url: msg.author.avatarURL() + }, + fields: [ + { + name: 'Name', + value: data.name + }, + { + name: 'Race', + value: raceText(data.race) + }, + { + name: 'Class', + value: classText(data.class) + }, + { + name: 'Nuts', + value: data.nuts + }, + { + name: 'Level', + value: data.level + } + ] + } + msg.channel.send({ embed: squirrelEmbed }); + } +} diff --git a/main.ts b/main.ts index fbfa74a..75711cf 100644 --- a/main.ts +++ b/main.ts @@ -2,12 +2,12 @@ //===Requirements=== export const fs = require('fs'); -export const Discord = require('discord.js'); +const Discord = require('discord.js'); const info = JSON.parse(fs.readFileSync(`./data/info.json`)); const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); -const client = new Discord.Client(); +export const client = new Discord.Client(); client.commands = new Discord.Collection(); for (const file of commandFiles) { @@ -15,6 +15,8 @@ for (const file of commandFiles) { client.commands.set(command.name, command); } + + //===Initalization=== client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); @@ -37,12 +39,18 @@ function executeCommand(msg: any) { let args: Array = [""]; // arguments of the message if (messageContent.length > 1) args = messageContent.slice(1); - if (!client.commands.has(command)) return; - + if (!client.commands.has(command)) { + msg.reply(`That command: "${command}" doesn't exist. Sad.`); + return; + } try { client.commands.get(command).execute(msg, args); } catch (e) { - console.error(e); - msg.reply(`Failed to execute the given command for some reason. Sad.`); + if (e.code === 'ENOENT') + msg.reply(`Please create a squirrel using "!create" first, before trying that command.`); + else { + console.error(e); + msg.reply(`Failed to execute the given command for some reason. Sad.`); + } } } \ No newline at end of file diff --git a/scripts/functions.ts b/scripts/functions.ts index d291c43..15f0ea0 100644 --- a/scripts/functions.ts +++ b/scripts/functions.ts @@ -1,10 +1,14 @@ -import { squirrel } from "../scripts/enums"; import { fs } from "../main"; +import { squirrel } from "../scripts/enums"; const races: Array = ["tree", "ground", "chipmunk"]; const classes: Array = ["rogue", "berserker", "knight", "ranger", "priest"]; const lastNames: Array = ["Nutcrack", "Nutmeg", "Seedsower", "McScuiri", "Rodentia", "Arbora", "Patagi"]; -// const COLOR: string = "#E81B47"; +export const COLOR: string = "#E81B47"; + +export function getPlayerData(playerId: string): squirrel { + return JSON.parse(fs.readFileSync(`./data/playerdata/${playerId}.json`)) +} export function newSquirrel(name: string, race: string, classtype: string): squirrel { let raceNum: number = -1; @@ -44,14 +48,24 @@ export function randomInt(low: number, high: number): number { return Math.floor(Math.random() * (high - low + 1) + low) } -// export function raceText(race: number): string { -// if (race === 2) return capitalize(races[race]); -// else if (race === 0 || race === 1) return `${capitalize(races[race])} Squirrel`; -// else { -// console.log(`Error ${race} is not a valid race`); -// return ""; -// } -// } +export function raceText(raceIndex: number): string { + if (raceIndex >= races.length) { + console.log(`Error ${raceIndex} is outside of bounds`); + return ""; + } + + if (raceIndex === 2) return capitalize(races[raceIndex]); + else if (raceIndex === 0 || raceIndex === 1) return `${capitalize(races[raceIndex])} Squirrel`; +} + +export function classText(classIndex: number): string { + if (classIndex >= classes.length) { + console.log(`Error ${classIndex} is outside of bounds`); + return ""; + } + + return capitalize(classes[classIndex]); +} export function capitalize(toCaps: string): string { return toCaps.charAt(0).toUpperCase() + toCaps.slice(1).toLowerCase();