From f5c03f3646f8f21f29564aa514e2ed402b246c5f Mon Sep 17 00:00:00 2001 From: Elijah Olmos <35435704+elijaholmos@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:35:24 -0700 Subject: [PATCH] feat: add show overall grade setting (#142) --- classes/HaloWatcher.js | 4 +-- classes/services/AnnouncementService.js | 2 +- classes/services/GradeService.js | 38 ++++++++++++++----------- package.json | 2 +- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/classes/HaloWatcher.js b/classes/HaloWatcher.js index 002f1f0c..71bd723b 100644 --- a/classes/HaloWatcher.js +++ b/classes/HaloWatcher.js @@ -181,7 +181,7 @@ export class HaloWatcher extends EventEmitter { for (const grade of this.#locateDifferenceInArrays(new_grades, old_grades)) { //if the user has already viewed the grade, don't send a notification if (!!grade.userLastSeenDate) continue; - if (!Firebase.getUserSettingValue({ uid, setting_id: 1 })) continue; //check setting inside diff loop to ensure cache was updated + // if (!Firebase.getUserSettingValue({ uid, setting_id: 1 })) continue; //check setting inside diff loop to ensure cache was updated //fetch the full grade feedback this.emit( @@ -268,7 +268,7 @@ export class HaloWatcher extends EventEmitter { for (const post of this.#locateDifferenceInArrays(new_inbox_posts, old_inbox_posts)) { //if !post.iRead && post.id is not in cache, then dispatch event if (!!post.isRead) continue; - if (!Firebase.getUserSettingValue({ uid, setting_id: 2 })) continue; //check setting inside diff loop to ensure cache was updated + // if (!Firebase.getUserSettingValue({ uid, setting_id: 2 })) continue; //check setting inside diff loop to ensure cache was updated this.emit('inbox_message', { ...post, metadata: { uid } }); } } diff --git a/classes/services/AnnouncementService.js b/classes/services/AnnouncementService.js index d3a36ea9..798e7ecf 100644 --- a/classes/services/AnnouncementService.js +++ b/classes/services/AnnouncementService.js @@ -38,7 +38,7 @@ export class AnnouncementService { //get all active users in the class and send the message to them for (const uid of Firebase.getActiveUsersInClass(announcement.courseClassId)) { try { - if (!Firebase.getUserSettingValue({ uid, setting_id: 0 })) continue; + // if (!Firebase.getUserSettingValue({ uid, setting_id: 0 })) continue; const discord_uid = Firebase.getDiscordUid(uid); const discord_user = await bot.users.fetch(discord_uid); discord_user diff --git a/classes/services/GradeService.js b/classes/services/GradeService.js index 1bc09739..b1c17fe6 100644 --- a/classes/services/GradeService.js +++ b/classes/services/GradeService.js @@ -23,26 +23,27 @@ export class GradeService { * @param {Object} grade A full Halo UserCourseClassAssessmentGrade object */ static processGrade = (grade) => { - this.#publishGrade({ - grade, - message: this.#parseGradeData({ grade }), - }); + this.#publishGrade({ grade }); }; /** * @param {Object} args Desctructured arguments * @param {Object} args.grade A full Halo UserCourseClassAssessmentGrade object - * @param {Object} args.message A parsed message object to be sent straight to Discord * @returns {Promise} */ - static async #publishGrade({ grade, message }) { + static async #publishGrade({ grade }) { try { const discord_uid = Firebase.getDiscordUid(grade?.metadata?.uid) ?? (await Firebase.getDiscordUidFromHaloUid(grade.user.id)); + const show_overall_grade = Firebase.getUserSettingValue({ + uid: Firebase.getHNSUid(discord_uid), + setting_id: 4, + }); + const discord_user = await bot.users.fetch(discord_uid); discord_user - .send(message) + .send(this.#parseGradeData({ grade, show_overall_grade })) .catch((e) => Logger.error(`Error sending grade notification to ${discord_user.tag} (${discord_uid}): ${e}`) ); @@ -72,9 +73,10 @@ export class GradeService { /** * @param {Object} args Desctructured arguments * @param {Object} args.grade A full Halo UserCourseClassAssessmentGrade object + * @param {boolean} [args.show_overall_grade=true] Whether or not to include the overall class grade in the message embed * @returns {Object} A message object to be sent straight to Discord */ - static #parseGradeData({ grade }) { + static #parseGradeData({ grade, show_overall_grade = true }) { const parsePercent = function (dividend, divisor) { return divisor < 1 ? 'N/A' : `${round((dividend / divisor) * 100, 2)}%`; }; @@ -98,15 +100,6 @@ export class GradeService { { name: 'Assignment Score:', value: `**${finalPoints} / ${points}** (${parsePercent(finalPoints, points)})`, - inline: true, - }, - { - name: 'Overall Grade:', - value: `**${totalFinalPoints} / ${maxPoints}** (${parsePercent( - totalFinalPoints, - maxPoints - )} \u200b ${gradeValue}) `, - inline: true, }, { name: `Feedback:`, @@ -117,6 +110,17 @@ export class GradeService { .replace(/<\/?[^>]+(>|$)/g, '') : 'None', }, + ...(show_overall_grade + ? [ + { + name: 'Overall Class Grade:', + value: `**${totalFinalPoints} / ${maxPoints}** (${parsePercent( + totalFinalPoints, + maxPoints + )} \u200b ${gradeValue}) `, + }, + ] + : []), ], timestamp: Date.now(), }), diff --git a/package.json b/package.json index e7243522..9e2d1c83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "halo-discord-bot", - "version": "2.3.0", + "version": "2.3.1", "author": "Elijah Olmos", "license": "AGPL-3.0-only", "main": "index.js",