diff --git a/modules/functions.js b/modules/functions.js index c10491e..17a054f 100755 --- a/modules/functions.js +++ b/modules/functions.js @@ -615,11 +615,16 @@ const functions = { const indices = [description.indexOf("Your tree is ") + 13, description.indexOf("ft")]; const treeHeightStr = description.slice(indices[0], indices[1]); const treeHeightFloat = parseFloat(treeHeightStr).toFixed(1); + // Grab the tree's water timestamp + const waterTimestampStr = description.match(//g)[0]; + const waterTimestamp = waterTimestampStr.match(/[0-9]+/g); + if (isDev) console.log(`Water Timestamp: ${waterTimestamp}`); // Return the info gathered return { treeName: treeName, - treeHeight: treeHeightFloat + treeHeight: treeHeightFloat, + waterTimestamp: waterTimestamp }; } else { return false; @@ -696,6 +701,7 @@ const functions = { } }, async updateHandler(message) { + // If we don't have the entire message yet, fetch it if (message.partial) { message = await message.fetch().catch(e => { throw e; @@ -706,7 +712,7 @@ const functions = { // Check and store the message types const isLeaderboard = this.isLeaderboard(message); const isTree = this.isTree(message); - // Check if the message is a leaderboard + // Check if the message is a leaderboard and handle the update if (isLeaderboard) { if (isDev) console.log(`LU: ${message.guild.name}`); let guildInfo; @@ -762,26 +768,35 @@ const functions = { const comparedRankings = await functions.rankings.compare(guildInfo); const embed = functions.builders.comparisonEmbed(comparedRankings, guildInfo); await compareMessage.edit(embed).catch(e => console.error(e)); - } else if (isTree) { - // Check if the message is a tree - // if (isDev) console.log(`TU: ${isTree.treeName}: ${isTree.treeHeight}ft`); + } else if (isTree) { // Check if the message is a tree + if (isDev) console.log(`TU: ${isTree.treeName}: ${isTree.treeHeight}ft`); let guildInfo; + // Default to not updating the database let doDbUpdate = false; + // Check if the bot has the guildInfo for this Guild already if (message.client.guildInfos.has(message.guildId)) { guildInfo = message.client.guildInfos.get(message.guildId); + // If the name or height has changed, update the guildInfo and flag to run a database update if ((guildInfo.treeName != isTree.treeName) || (guildInfo.treeHeight != isTree.treeHeight)) { guildInfo.setTreeInfo(isTree.treeName, isTree.treeHeight, message.channel.id, message.id); doDbUpdate = true; } - } else { + // If the waterTimestamp has changed, update the database + // TODO... lost motivation + } else { // If the bot doesn't have a guildInfo for the Guild, we will create one for it and flag a database update guildInfo = new GuildInfo().setIds(message.guildId, message.guild.ownerId) .setTreeInfo(isTree.treeName, isTree.treeHeight, message.channel.id, message.id); doDbUpdate = true; } + // If the database update flag is set, update the database and rebuild the guildInfo collection + // TODO: This should likely only update the relevant guildInfo in the future. + // Actually, rebuilding the collection should be unnecessary, since it's already been updated. if (doDbUpdate) { const query = guildInfo.queryBuilder("setTreeInfo"); await dbfn.setGuildInfo(query); - await functions.collectionBuilders.guildInfos(message.client); + // I've commented this out to see if it breaks anything. + // Rebuilding shouldn't be necessary and is a waste of resources. + // await functions.collectionBuilders.guildInfos(message.client); } } }