From 9ef8ae9e383859c1c94c542d958fa82be7cc8dd6 Mon Sep 17 00:00:00 2001 From: Sean Hardy Date: Fri, 9 Sep 2022 09:59:13 +0100 Subject: [PATCH 1/4] Documentation --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 34bf70a..a5c6296 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,15 @@ Create a folder within your projects directory and run the following inside it: Once finished: - In the folder from where you ran the git command, run `npm install`, which will install the required packages. -- Rename `config.js.example` to `config.js`, and give it the required intents and any partials you may require. -- Rename `.env-example` to `.env` and put in your bot token in it and save. - +- Make sure you're using node.js `v16.14.2` +- Rename `.env-example` to `.env` and put each key inside as follows + - DISCORD_TOKEN - Your bot token + - OWNER - Your discord ID + - API_URL - The URL of your API instance (for example: http://localhost:3000/v1, must include /v1/ at the end) + - API_KEY - The API key (Can be anything, shared between bot and API) + - GOOGLE_API_KEY - Google maps API key +- Set up the [API](https://github.com/Project-Skill-Tree/Skill-Tree-API) +- Set up the [editor](https://github.com/Project-Skill-Tree/Skill-Tree-Editor) ## Starting the bot To start the bot, in the command prompt, run the following command: @@ -46,4 +52,4 @@ Read the [documentation wiki](https://www.projectskilltree.com) Read [Installation](#installation) to get started. This project uses Eslint for code formatting. Install it [here](https://eslint.org/) and run it before making a pull request with your changes.
-You can run Eslint via `npx eslint --fix .`. +You can run Eslint via `npx eslint --fix .`. \ No newline at end of file From 24c65d24fb29ee6d57f533109ff807459bd99370 Mon Sep 17 00:00:00 2001 From: Sean Hardy Date: Thu, 22 Sep 2022 13:01:59 +0100 Subject: [PATCH 2/4] Fixed task API date --- modules/skillAPIHelper.js | 6 +++--- slash/skilltree/taskList.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/skillAPIHelper.js b/modules/skillAPIHelper.js index ca4a878..7595d78 100644 --- a/modules/skillAPIHelper.js +++ b/modules/skillAPIHelper.js @@ -190,16 +190,16 @@ exports.cancel = (userID, toCancel) => { * Sets the completed state of a user's skill task for a given date * @param userid - userID * @param task - * @param day + * @param date - javascript date object * @param checked - T/F if checked/unchecked */ -exports.updateTask = async (userid, task, day, checked) => { +exports.updateTask = async (userid, task, date, checked) => { const res = await axios .post(process.env.API_URL + "tasks/updateTask", { userid: userid, taskid: task.id, checked: checked, - day: day + date: date.getTime() }, { headers: { api_key: getAPIKey() diff --git a/slash/skilltree/taskList.js b/slash/skilltree/taskList.js index 14daf03..79ed656 100644 --- a/slash/skilltree/taskList.js +++ b/slash/skilltree/taskList.js @@ -113,7 +113,7 @@ const createTaskList = async (client, interaction, tasks, userID, timezoneOffset //Toggle checked task.setChecked(!task.isChecked(date, timezoneOffset), date, timezoneOffset); //Get levelup and unlocks - const [levelUp, unlocked] = await updateTask(userID, task, day, task.isChecked(date, timezoneOffset)); + const [levelUp, unlocked] = await updateTask(userID, task, date, task.isChecked(date, timezoneOffset)); if (levelUp !== 0) { const user = await getUser(userID, interaction.user.username); From 2fb91b79393e3e8475f986fa23d02b0472ccc21d Mon Sep 17 00:00:00 2001 From: Sean Hardy Date: Mon, 21 Nov 2022 12:10:55 +0000 Subject: [PATCH 3/4] Fixed weekly reports printing incorrectly Fixed XP showing incorrectly Fixed menu bug --- modules/XPHelper.js | 12 +++++++++++- modules/menuHelper.js | 2 +- modules/weeklyReviewRenderer.js | 6 +++--- slash/skilltree/weekly.js | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/XPHelper.js b/modules/XPHelper.js index d40d882..be87720 100644 --- a/modules/XPHelper.js +++ b/modules/XPHelper.js @@ -60,4 +60,14 @@ exports.calcXPFromLevel = level => Math.floor(-2550*(1 - Math.pow(1.02, level))) * @param {number} xp - total XP * @returns {number} - XP required to level up */ -exports.calcLevelFromXP = xp => Math.floor(Math.log(1/2550*xp + 1) / Math.log(1.02)); \ No newline at end of file +exports.calcLevelFromXP = xp => { + let currentXP = 0; + let lastXP = 0; + let i = 0; + for (; currentXP < xp; i++) { + const levelXP = exports.calcXPFromLevel(i); + currentXP += levelXP - lastXP; + lastXP = levelXP; + } + return i - 2; +} \ No newline at end of file diff --git a/modules/menuHelper.js b/modules/menuHelper.js index 30489ee..7dacb99 100644 --- a/modules/menuHelper.js +++ b/modules/menuHelper.js @@ -285,7 +285,7 @@ const createRow = (currentPage, length) => { } const createDropDownBox = actions => { - const actionList = actions.map(a => a.name).join("/"); + const actionList = actions.map(a => a.name).join("/").slice(0,100); return new MessageActionRow().addComponents( new MessageSelectMenu().setCustomId("actions").setPlaceholder(actionList).addOptions( actions.map( diff --git a/modules/weeklyReviewRenderer.js b/modules/weeklyReviewRenderer.js index fe8a3dd..9e5ac94 100644 --- a/modules/weeklyReviewRenderer.js +++ b/modules/weeklyReviewRenderer.js @@ -17,10 +17,10 @@ const {getDaysBetweenDates} = require("./dateHelper"); * @param tasks - tasks to display */ -exports.displayReview = async (user, channel, tasks) => { +exports.displayReview = async (user, interaction, tasks) => { const reviewImage = new MessageAttachment(await getWeeklyReview(user, tasks), `${user.name}_review.png`); - return channel.send({content: `<@${user.discordid}> your weekly report has been published`, files: [reviewImage]}); + return interaction.editReply({content: `<@${user.discordid}> your weekly report has been published`, files: [reviewImage]}); }; /** @@ -58,7 +58,7 @@ const getWeeklyReview = async (user, tasks) => { * @param canvas * @return {Promise} */ -const drawHeaderFooter = async(canvas, user) => { +const drawHeaderFooter = async (canvas, user) => { const context = canvas.getContext("2d"); context.font = "30px \"Akira\""; diff --git a/slash/skilltree/weekly.js b/slash/skilltree/weekly.js index fdb981f..bdb5c8e 100644 --- a/slash/skilltree/weekly.js +++ b/slash/skilltree/weekly.js @@ -21,7 +21,7 @@ exports.run = async (client, interaction) => { user.username = discorduser.username; const tasks = await getRecentTasks(userID, 7); //Display weekly analytics - displayReview(user, interaction.channel, tasks); + displayReview(user, interaction, tasks); }; exports.conf = { From 74409c40cfd0fa4330e0f7ddfc879af4be4f47ea Mon Sep 17 00:00:00 2001 From: Sean Hardy Date: Sun, 27 Nov 2022 10:59:30 +0000 Subject: [PATCH 4/4] Fixed weekly report sending error --- modules/weeklyReviewRenderer.js | 4 ++-- slash/skilltree/weekly.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/weeklyReviewRenderer.js b/modules/weeklyReviewRenderer.js index 9e5ac94..5e3128d 100644 --- a/modules/weeklyReviewRenderer.js +++ b/modules/weeklyReviewRenderer.js @@ -17,10 +17,10 @@ const {getDaysBetweenDates} = require("./dateHelper"); * @param tasks - tasks to display */ -exports.displayReview = async (user, interaction, tasks) => { +exports.displayReview = async (user, channel, tasks) => { const reviewImage = new MessageAttachment(await getWeeklyReview(user, tasks), `${user.name}_review.png`); - return interaction.editReply({content: `<@${user.discordid}> your weekly report has been published`, files: [reviewImage]}); + return channel.send({content: `<@${user.discordid}> your weekly report has been published`, files: [reviewImage]}); }; /** diff --git a/slash/skilltree/weekly.js b/slash/skilltree/weekly.js index bdb5c8e..fdb981f 100644 --- a/slash/skilltree/weekly.js +++ b/slash/skilltree/weekly.js @@ -21,7 +21,7 @@ exports.run = async (client, interaction) => { user.username = discorduser.username; const tasks = await getRecentTasks(userID, 7); //Display weekly analytics - displayReview(user, interaction, tasks); + displayReview(user, interaction.channel, tasks); }; exports.conf = {