Improvements to timetoheights calculations display
This commit is contained in:
		
							parent
							
								
									a0822cb002
								
							
						
					
					
						commit
						3eaa7db561
					
				| @ -123,6 +123,16 @@ const functions = { | |||||||
| 					.setDescription(description) | 					.setDescription(description) | ||||||
| 					.setFooter({ text: strings.embeds.roleMenuFooter }); | 					.setFooter({ text: strings.embeds.roleMenuFooter }); | ||||||
| 				return { embeds: [embed], components: [actionRow] }; | 				return { embeds: [embed], components: [actionRow] }; | ||||||
|  | 			}, | ||||||
|  | 			information(content, fields) { | ||||||
|  | 				const embed = new EmbedBuilder() | ||||||
|  | 					.setColor(strings.embeds.color) | ||||||
|  | 					.setTitle('Information') | ||||||
|  | 					.setDescription(content) | ||||||
|  | 					.setFooter({ text: `v${package.version} - ${strings.embeds.footer}` }); | ||||||
|  | 				if (fields) embed.addFields(fields); | ||||||
|  | 				const messageContents = { embeds: [embed], ephemeral: true }; | ||||||
|  | 				return messageContents; | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		comparisonEmbed(content, guildInfo) { | 		comparisonEmbed(content, guildInfo) { | ||||||
| @ -652,6 +662,9 @@ const functions = { | |||||||
| 	timeToHeight(beginHeight, destHeight, efficiency, quality) { | 	timeToHeight(beginHeight, destHeight, efficiency, quality) { | ||||||
| 		return new Promise((resolve, reject) => { | 		return new Promise((resolve, reject) => { | ||||||
| 			let time = 0; | 			let time = 0; | ||||||
|  | 			let oldTime = 0; | ||||||
|  | 			let compostAppliedCount = 0; | ||||||
|  | 			let totalWaterCount = 0; | ||||||
| 			if ((efficiency) && (quality)) { | 			if ((efficiency) && (quality)) { | ||||||
| 				for (let i = beginHeight; i < destHeight; i++) { | 				for (let i = beginHeight; i < destHeight; i++) { | ||||||
| 					const randNum = Math.floor(Math.random() * 100); | 					const randNum = Math.floor(Math.random() * 100); | ||||||
| @ -661,9 +674,15 @@ const functions = { | |||||||
| 						let waterTime = functions.getWaterTime(i); | 						let waterTime = functions.getWaterTime(i); | ||||||
| 						let reductionTime = waterTime * qualityPercent; | 						let reductionTime = waterTime * qualityPercent; | ||||||
| 						let finalTime = waterTime - reductionTime; | 						let finalTime = waterTime - reductionTime; | ||||||
|  | 						compostAppliedCount++; | ||||||
|  | 						totalWaterCount++; | ||||||
| 						time += parseFloat(finalTime); | 						time += parseFloat(finalTime); | ||||||
|  | 						oldTime += waterTime; | ||||||
| 					} else { | 					} else { | ||||||
| 						time += parseFloat(functions.getWaterTime(i)); | 						totalWaterCount++; | ||||||
|  | 						let waterTime = parseFloat(functions.getWaterTime(i)); | ||||||
|  | 						time += waterTime; | ||||||
|  | 						oldTime += waterTime; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| @ -673,8 +692,15 @@ const functions = { | |||||||
| 					time += waterTime; | 					time += waterTime; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			 | 			const readableWaterTime = this.parseWaterTime(time); | ||||||
| 			resolve(this.parseWaterTime(time)); | 			const savedTime = this.parseWaterTime(oldTime - time); | ||||||
|  | 			resolve({ | ||||||
|  | 				time: readableWaterTime, | ||||||
|  | 				totalWaterCount: totalWaterCount ? totalWaterCount : undefined, | ||||||
|  | 				compostAppliedCount: compostAppliedCount ? compostAppliedCount : undefined, | ||||||
|  | 				average: totalWaterCount ? parseFloat((compostAppliedCount / totalWaterCount) * 100).toFixed(1) : undefined, | ||||||
|  | 				savedTime: savedTime | ||||||
|  | 			}); | ||||||
| 		}); | 		}); | ||||||
| 	}, | 	}, | ||||||
| 	sleep(ms) { | 	sleep(ms) { | ||||||
|  | |||||||
| @ -0,0 +1,21 @@ | |||||||
|  | information(content, fields) { | ||||||
|  |     const embed = new EmbedBuilder() | ||||||
|  |         .setColor(strings.embeds.color) | ||||||
|  |         .setTitle('Information') | ||||||
|  |         .setDescription(content) | ||||||
|  |         .setFooter({ text: `v${package.version} - ${strings.embeds.footer}` }); | ||||||
|  |     if (fields) embed.addFields(fields); | ||||||
|  |     const messageContents = { embeds: [embed], ephemeral: true }; | ||||||
|  |     return messageContents; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | replyContent = `I estimate that a tree with ${efficiency}% Composter Efficiency and ${quality}% Compost Quality growing from ${beginHeight}ft to ${endHeight}ft will take ${time}`; | ||||||
|  | replyFields = [ | ||||||
|  |     { name: `Start Height:`, value: `**${beginHeight}ft**`, inline: true }, | ||||||
|  |     { name: `End Height:`, value: `**${endHeight}**`, inline: true }, | ||||||
|  |     { name: `Efficiency:`, value: `**${efficiency}%**`, inline: true }, | ||||||
|  |     { name: `Quality:`, value: `**${quality}%**`, inline: true }, | ||||||
|  |     { name: `Summary`, value: `Compost Applied **${compostAppliedCount}** times, out of **${totalWaterCount}** waterings, for an average of **${average}%**` } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | const reply = information(replyContent, replyFields); | ||||||
| @ -8,44 +8,38 @@ module.exports = { | |||||||
| 		.setDescription('Calculate how long it would take to reach a given height') | 		.setDescription('Calculate how long it would take to reach a given height') | ||||||
| 		.addIntegerOption(o => | 		.addIntegerOption(o => | ||||||
| 			o.setName('endheight') | 			o.setName('endheight') | ||||||
| 			.setDescription('Ending tree height in feet') | 				.setDescription('Ending tree height in feet') | ||||||
| 			.setRequired(true) | 				.setRequired(true) | ||||||
| 		) | 		) | ||||||
| 		.addIntegerOption(o => | 		.addIntegerOption(o => | ||||||
| 			o.setName('beginheight') | 			o.setName('beginheight') | ||||||
| 			.setDescription('Beginning tree height in feet') | 				.setDescription('Beginning tree height in feet') | ||||||
| 			.setRequired(false) | 				.setRequired(false) | ||||||
| 		) | 		) | ||||||
| 		.addIntegerOption(o => | 		.addIntegerOption(o => | ||||||
| 			o.setName('efficiency') | 			o.setName('efficiency') | ||||||
| 			.setDescription('Composter efficiency percentage, rounded') | 				.setDescription('Composter efficiency percentage, rounded') | ||||||
| 			.setRequired(false) | 				.setRequired(false) | ||||||
| 		) | 		) | ||||||
| 		.addIntegerOption(o => | 		.addIntegerOption(o => | ||||||
| 			o.setName('quality') | 			o.setName('quality') | ||||||
| 			.setDescription('Compost quality percentage, rounded') | 				.setDescription('Compost quality percentage, rounded') | ||||||
| 			.setRequired(false) | 				.setRequired(false) | ||||||
| 		) | 		) | ||||||
| 		.addBooleanOption(o => | 		.addBooleanOption(o => | ||||||
| 			o.setName('private') | 			o.setName('private') | ||||||
| 			.setDescription('Should the reply be visible only to you?') | 				.setDescription('Should the reply be visible only to you?') | ||||||
| 			.setRequired(false) | 				.setRequired(false) | ||||||
| 		), | 		), | ||||||
| 	async execute(interaction) { | 	async execute(interaction) { | ||||||
| 		const private = interaction.options.getBoolean('private') != undefined ? interaction.options.getBoolean('private') : true; | 		const private = interaction.options.getBoolean('private') != undefined ? interaction.options.getBoolean('private') : true; | ||||||
| 		await interaction.deferReply({ ephemeral: private }); | 		await interaction.deferReply({ ephemeral: private }); | ||||||
| 		const inBeginHeight = interaction.options.getInteger('beginheight'); | 		const inBeginHeight = interaction.options.getInteger('beginheight'); | ||||||
| 		const endHeight = interaction.options.getInteger('endheight'); | 		const endHeight = interaction.options.getInteger('endheight'); | ||||||
| 		const efficiency = interaction.options.getInteger('efficiency'); | 		const efficiency = interaction.options.getInteger('efficiency') != undefined ? interaction.options.getInteger('efficiency') : 10; | ||||||
| 		const quality = interaction.options.getInteger('quality'); | 		const quality = interaction.options.getInteger('quality') != undefined ? interaction.options.getInteger('quality') : 5; | ||||||
| 		let beginHeight, replyContent; | 		let beginHeight, replyContent; | ||||||
| 
 | 
 | ||||||
| 		if ((efficiency && !quality) || (quality && !efficiency)) { |  | ||||||
| 			const reply = fn.builders.embed("You must include **both** efficiency *and* quality, I only received one."); |  | ||||||
| 			await interaction.editReply(reply).catch(e => console.error(e)); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if (!inBeginHeight) { | 		if (!inBeginHeight) { | ||||||
| 			const guildInfo = interaction.client.guildInfos.get(interaction.guild.id); | 			const guildInfo = interaction.client.guildInfos.get(interaction.guild.id); | ||||||
| 			beginHeight = guildInfo.treeHeight; | 			beginHeight = guildInfo.treeHeight; | ||||||
| @ -53,14 +47,23 @@ module.exports = { | |||||||
| 			beginHeight = inBeginHeight; | 			beginHeight = inBeginHeight; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const timeString = await fn.timeToHeight(beginHeight, endHeight, efficiency, quality); | 		const timeToHeightResults = await fn.timeToHeight(beginHeight, endHeight, efficiency, quality); | ||||||
|  | 		const { time, totalWaterCount, compostAppliedCount, average, savedTime } = timeToHeightResults; | ||||||
|  | 		let replyFields = undefined; | ||||||
| 		if (efficiency && quality) { | 		if (efficiency && quality) { | ||||||
| 			replyContent = `I estimate that a tree with ${efficiency}% Composter Efficiency and ${quality}% Compost Quality growing from ${beginHeight}ft to ${endHeight}ft will take ${timeString}`; | 			replyContent = `I estimate that a tree with ${efficiency}% Composter Efficiency and ${quality}% Compost Quality growing from ${beginHeight}ft to ${endHeight}ft will take ${time}`; | ||||||
|  | 			replyFields = [ | ||||||
|  | 				{ name: `Height Gained:`, value: `${endHeight - beginHeight}ft`, inline: true}, | ||||||
|  | 				{ name: `E/Q:`, value: `${efficiency}%/${quality}%`, inline: true}, | ||||||
|  | 				{ name: `Compost Applied`, value: `${compostAppliedCount} times`, inline: true }, | ||||||
|  | 				{ name: `Compost Average`, value: `${average}%`, inline: true }, | ||||||
|  | 				{ name: `Saved Time`, value: savedTime, inline: true } | ||||||
|  | 			]; | ||||||
| 		} else { | 		} else { | ||||||
| 			replyContent = `I estimate that a tree growing from ${beginHeight}ft to ${endHeight}ft will take ${timeString}`; | 			replyContent = `I estimate that a tree growing from ${beginHeight}ft to ${endHeight}ft will take ${time}`; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const reply = fn.builders.embed(replyContent) | 		const reply = fn.builders.embeds.information(replyContent, replyFields) | ||||||
| 		await interaction.editReply(reply); | 		await interaction.editReply(reply); | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user