From e2872eba91fbf5ad539bd7f8430e8cd9a4df51e6 Mon Sep 17 00:00:00 2001 From: Mirco Wittrien Date: Thu, 12 Aug 2021 18:52:55 +0200 Subject: [PATCH] Update FriendNotifications.plugin.js --- .../FriendNotifications.plugin.js | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/Plugins/FriendNotifications/FriendNotifications.plugin.js b/Plugins/FriendNotifications/FriendNotifications.plugin.js index 61fa6f0148..637bff820b 100644 --- a/Plugins/FriendNotifications/FriendNotifications.plugin.js +++ b/Plugins/FriendNotifications/FriendNotifications.plugin.js @@ -2,7 +2,7 @@ * @name FriendNotifications * @author DevilBro * @authorId 278543574059057154 - * @version 1.7.6 + * @version 1.7.7 * @description Shows a Notification when a Friend or a User, you choose to observe, changes their Status * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -17,12 +17,13 @@ module.exports = (_ => { "info": { "name": "FriendNotifications", "author": "DevilBro", - "version": "1.7.6", + "version": "1.7.7", "description": "Shows a Notification when a Friend or a User, you choose to observe, changes their Status" }, "changeLog": { - "fixed": { - "Crash": "" + "added": { + "Time Log Option": "You can now disable the time log for users, in case you only want the time log for your important friends", + "Log In Option": "You can now enable the login option, this will notify you in case a user changed his status from offline to any other status (so enabling only offline and login will only notify you about logout and logins, no notifications about status changes from example online to dnd)" } } }; @@ -116,6 +117,9 @@ module.exports = (_ => { name: "STATUS_OFFLINE", sound: true }, + login: { + value: false + }, mobile: { value: false }, @@ -227,6 +231,7 @@ module.exports = (_ => { listening: {value: "$user started listening to '$song'"}, streaming: {value: "$user started streaming '$game'"}, offline: {value: "$user changed status to '$status'"}, + login: {value: "$user just logged in '$status'"}, custom: {value: "$user changed status to '$custom'"} }, notificationSounds: {}, @@ -291,7 +296,7 @@ module.exports = (_ => { } forceUpdateAll () { - defaultSettings = Object.assign(BDFDB.ObjectUtils.map(statuses, status => notificationTypes[status.value ? "TOAST" : "DISABLED"].value), BDFDB.DataUtils.load(this, "defaultSettings")); + defaultSettings = Object.assign(BDFDB.ObjectUtils.map(statuses, status => notificationTypes[status.value ? "TOAST" : "DISABLED"].value), {timelog: true}, BDFDB.DataUtils.load(this, "defaultSettings")); BDFDB.PatchUtils.forceAllUpdates(this); } @@ -301,7 +306,12 @@ module.exports = (_ => { let specificObserved = observed[type] || {}; if (config == "all") { config = "disabled"; - for (let id in specificObserved) specificObserved[id][config] = notificationTypes[notificationType].button == 0 ? false : true; + const value = notificationTypes[notificationType].button == 0 ? false : true; + for (let id in specificObserved) specificObserved[id][config] = value; + } + else if (config == "timelog") { + const value = notificationType == "TOAST" ? notificationTypes.TOAST.value : notificationTypes.DISABLED.value; + for (let id in specificObserved) specificObserved[id][config] = value; } else { let disabled = BDFDB.ObjectUtils.toArray(specificObserved).every(d => !d.disabled && d[config] == notificationTypes[notificationType].value); @@ -395,21 +405,26 @@ module.exports = (_ => { items.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsList, { className: BDFDB.disCN.margintop20, title: "all", - settings: Object.keys(statuses), + settings: Object.keys(statuses).concat("timelog"), data: users, pagination: { alphabetKey: "username", amount: 50, offset: paginationOffset[title] || 0, - onJump: offset => {paginationOffset[title] = offset;} + onJump: offset => paginationOffset[title] = offset }, getCheckboxColor: value => { let color = (BDFDB.ObjectUtils.toArray(notificationTypes).find(n => n.value == value) || {}).color; return BDFDB.DiscordConstants.Colors[color] || color; }, - getCheckboxValue: (value, event) => { - let eventValue = (BDFDB.ObjectUtils.toArray(notificationTypes).find(n => n.button == event.button) || {}).value; - return eventValue == value ? 0 : eventValue; + getCheckboxValue: (value, event, instance) => { + if (instance && instance.props.settingId == "timelog") { + return value == notificationTypes.DISABLED.value ? notificationTypes.TOAST.value : notificationTypes.DISABLED.value; + } + else { + let eventValue = (BDFDB.ObjectUtils.toArray(notificationTypes).find(n => n.button == event.button) || {}).value; + return eventValue == value ? 0 : eventValue; + } }, renderLabel: cardData => [ BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.AvatarComponents.default, { @@ -531,7 +546,6 @@ module.exports = (_ => { value: !!defaultSettings[key], onChange: value => { defaultSettings[key] = !!statuses[key] ? notificationTypes[value ? "TOAST" : "DISABLED"].value : value; - console.log(defaultSettings); BDFDB.DataUtils.save(defaultSettings, this, "defaultSettings"); } })) @@ -701,7 +715,7 @@ module.exports = (_ => { children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, { type: "Button", label: "Overview of LogIns/-Outs of current Session", - onClick: _ => {this.showTimeLog()}, + onClick: _ => this.showTimeLog(), children: "Timelog" }) })); @@ -761,7 +775,7 @@ module.exports = (_ => { for (let id of friendIds) { let user = BDFDB.LibraryModules.UserStore.getUser(id); if (user) { - observed.friends[id] = Object.assign({}, observed.friends[id] || observed.strangers[id] || defaultSettings); + observed.friends[id] = Object.assign({}, defaultSettings, observed.friends[id] || observed.strangers[id]); delete observed.strangers[id]; } } @@ -834,8 +848,8 @@ module.exports = (_ => { for (let id in observedUsers) if (!observedUsers[id].disabled) { let user = BDFDB.LibraryModules.UserStore.getUser(id); let status = this.getStatusWithMobileAndActivity(id, observedUsers[id], clientStatuses); - let customChanged = false; - if (user && observedUsers[id][status.name] && ( + let customChanged = false, loginNotice = false; + if (user && (!observedUsers[id][status.name] && observedUsers[id].login && status.name != "offline" && userStatusStore[id].name == "offline" && (loginNotice = true) || observedUsers[id][status.name] && ( observedUsers[id].custom && ( userStatusStore[id].custom != status.custom && ((customChanged = status.custom) || true) || (customChanged = status.custom && !this.activityIsSame(id, status)) @@ -843,7 +857,7 @@ module.exports = (_ => { observedUsers[id].mobile && userStatusStore[id].mobile != status.mobile || statuses[status.name].checkActivity && !this.activityIsSame(id, status) || userStatusStore[id].name != status.name - )) { + ))) { let EUdata = BDFDB.BDUtils.isPluginEnabled("EditUsers") && BDFDB.DataUtils.load("EditUsers", "users", user.id) || {}; let name = EUdata.name || user.username; let avatar = EUdata.removeIcon ? "" : (EUdata.url || BDFDB.UserUtils.getAvatar(user.id)); @@ -852,12 +866,12 @@ module.exports = (_ => { let statusName = this.getStatusName(id, status); let oldStatusName = this.getStatusName(id, userStatusStore[id]); - let string = this.settings.notificationStrings[customChanged ? "custom" : status.name] || "'$user' changed status to '$status'"; + let string = this.settings.notificationStrings[customChanged ? "custom" : loginNotice ? "login" : status.name] || "'$user' changed status to '$status'"; let toastString = BDFDB.StringUtils.htmlEscape(string).replace(/'{0,1}\$user'{0,1}/g, `${BDFDB.StringUtils.htmlEscape(name)}${this.settings.general.showDiscriminator ? ("#" + user.discriminator) : ""}`).replace(/'{0,1}\$statusOld'{0,1}/g, `${oldStatusName}`).replace(/'{0,1}\$status'{0,1}/g, `${statusName}`); if (status.activity) toastString = toastString.replace(/'{0,1}\$song'{0,1}|'{0,1}\$game'{0,1}/g, `${status.activity.name || status.activity.details || ""}`).replace(/'{0,1}\$artist'{0,1}|'{0,1}\$custom'{0,1}/g, `${[status.activity.emoji && status.activity.emoji.name, status.activity.state].filter(n => n).join(" ") || ""}`); let statusType = BDFDB.UserUtils.getStatus(user.id); - timeLog.unshift({ + if (observedUsers[id].timelog == undefined || observedUsers[id].timelog) timeLog.unshift({ string: toastString, avatar: avatar, name: name,