From 93503a305fa9184ec0b64bc5a75b70394087ae3d Mon Sep 17 00:00:00 2001 From: Mirco Wittrien Date: Sat, 2 Jan 2021 12:51:18 +0100 Subject: [PATCH] stuff --- Library/0BDFDB.plugin.js | 121 +++++++++++---- Library/_res/BDFDB.data.json | 2 + Library/_res/BDFDB.raw.css | 6 +- .../FriendNotifications.plugin.js | 145 +++++++++++------- 4 files changed, 193 insertions(+), 81 deletions(-) diff --git a/Library/0BDFDB.plugin.js b/Library/0BDFDB.plugin.js index 340ac50684..c7302fa29c 100644 --- a/Library/0BDFDB.plugin.js +++ b/Library/0BDFDB.plugin.js @@ -16,15 +16,10 @@ module.exports = (_ => { "info": { "name": "BDFDB", "author": "DevilBro", - "version": "1.2.5", + "version": "1.2.6", "description": "Give other plugins utility functions" }, - "rawUrl": "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", - "changeLog": { - "improved": { - "Languages": "Added support for all languages used by discord" - } - } + "rawUrl": "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js" }; const DiscordObjects = {}; @@ -265,11 +260,11 @@ module.exports = (_ => { return value; } }; - BDFDB.ObjectUtils.map = function (obj, mapfunc) { + BDFDB.ObjectUtils.map = function (obj, mapFunc) { if (!BDFDB.ObjectUtils.is(obj)) return {}; - if (typeof mapfunc != "string" && typeof mapfunc != "function") return obj; + if (typeof mapFunc != "string" && typeof mapFunc != "function") return obj; let newObj = {}; - for (let key in obj) if (BDFDB.ObjectUtils.is(obj[key])) newObj[key] = typeof mapfunc == "string" ? obj[key][mapfunc] : mapfunc(obj[key], key); + for (let key in obj) if (BDFDB.ObjectUtils.is(obj[key])) newObj[key] = typeof mapFunc == "string" ? obj[key][mapFunc] : mapFunc(obj[key], key); return newObj; }; BDFDB.ObjectUtils.toArray = function (obj) { @@ -3132,12 +3127,12 @@ module.exports = (_ => { }; BDFDB.ColorUtils.setAlpha = function (color, a, conv) { if (BDFDB.ObjectUtils.is(color)) { - var newcolor = {}; + let newcolor = {}; for (let pos in color) newcolor[pos] = BDFDB.ColorUtils.setAlpha(color[pos], a, conv); return newcolor; } else { - var comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); + let comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); if (comp) { a = a.toString(); a = (a.indexOf("%") > -1 ? 0.01 : 1) * parseFloat(a.replace(/[^0-9\.\-]/g, "")); @@ -3151,7 +3146,7 @@ module.exports = (_ => { return null; }; BDFDB.ColorUtils.getAlpha = function (color) { - var comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); + let comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); if (comp) { if (comp.length == 3) return 1; else if (comp.length == 4) { @@ -3166,12 +3161,12 @@ module.exports = (_ => { value = parseFloat(value); if (color != null && typeof value == "number" && !isNaN(value)) { if (BDFDB.ObjectUtils.is(color)) { - var newcolor = {}; - for (let pos in color) newcolor[pos] = BDFDB.ColorUtils.change(color[pos], value, conv); - return newcolor; + let newColor = {}; + for (let pos in color) newColor[pos] = BDFDB.ColorUtils.change(color[pos], value, conv); + return newColor; } else { - var comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); + let comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); if (comp) { if (parseInt(value) !== value) { value = value.toString(); @@ -3187,12 +3182,12 @@ module.exports = (_ => { }; BDFDB.ColorUtils.invert = function (color, conv) { if (BDFDB.ObjectUtils.is(color)) { - var newcolor = {}; - for (let pos in color) newcolor[pos] = BDFDB.ColorUtils.invert(color[pos], conv); - return newcolor; + let newColor = {}; + for (let pos in color) newColor[pos] = BDFDB.ColorUtils.invert(color[pos], conv); + return newColor; } else { - var comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); + let comp = BDFDB.ColorUtils.convert(color, "RGBCOMP"); if (comp) return BDFDB.ColorUtils.convert([255 - comp[0], 255 - comp[1], 255 - comp[2]], conv || BDFDB.ColorUtils.getType(color)); } return null; @@ -3221,7 +3216,7 @@ module.exports = (_ => { else if (/^#[a-f\d]{4}$|^#[a-f\d]{8}$/i.test(color)) return "HEXA"; else { color = color.toUpperCase(); - var comp = color.replace(/[^0-9\.\-\,\%]/g, "").split(","); + let comp = color.replace(/[^0-9\.\-\,\%]/g, "").split(","); if (color.indexOf("RGB(") == 0 && comp.length == 3 && isRGB(comp)) return "RGB"; else if (color.indexOf("RGBA(") == 0 && comp.length == 4 && isRGB(comp)) return "RGBA"; else if (color.indexOf("HSL(") == 0 && comp.length == 3 && isHSL(comp)) return "HSL"; @@ -4878,13 +4873,85 @@ module.exports = (_ => { }; InternalComponents.LibraryComponents.Checkbox = reactInitialized && class BDFDB_Checkbox extends LibraryModules.React.Component { - handleChange() { - this.props.value = !this.props.value; + handleClick(e) {if (typeof this.props.onClick == "function") this.props.onClick(e, this);} + handleContextMenu(e) {if (typeof this.props.onContextMenu == "function") this.props.onContextMenu(e, this);} + handleMouseDown(e) {if (typeof this.props.onMouseDown == "function") this.props.onMouseDown(e, this);} + handleMouseUp(e) {if (typeof this.props.onMouseUp == "function") this.props.onMouseUp(e, this);} + handleMouseEnter(e) {if (typeof this.props.onMouseEnter == "function") this.props.onMouseEnter(e, this);} + handleMouseLeave(e) {if (typeof this.props.onMouseLeave == "function") this.props.onMouseLeave(e, this);} + getInputMode() { + return this.props.disabled ? "disabled" : this.props.readOnly ? "readonly" : "default"; + } + getStyle() { + let style = this.props.style || {}; + if (!this.props.value) return style; + style = Object.assign({}, style); + this.props.color = typeof this.props.getColor == "function" ? this.props.getColor(this.props.value) : this.props.color; + switch (this.props.type) { + case InternalComponents.NativeSubComponents.Checkbox.Types.DEFAULT: + style.borderColor = this.props.color; + break; + case InternalComponents.NativeSubComponents.Checkbox.Types.GHOST: + let color = BDFDB.ColorUtils.setAlpha(this.props.color, 0.15, "RGB"); + style.borderColor = color; + style.backgroundColor = color; + break; + case InternalComponents.NativeSubComponents.Checkbox.Types.INVERTED: + style.backgroundColor = this.props.color; + style.borderColor = this.props.color; + } + return style; + } + getColor() { + return this.props.value ? (this.props.type === InternalComponents.NativeSubComponents.Checkbox.Types.INVERTED ? BDFDB.DiscordConstants.Colors.WHITE : this.props.color) : "transparent"; + } + handleChange(e) { + this.props.value = typeof this.props.getValue == "function" ? this.props.getValue(this.props.value, e) : !this.props.value; if (typeof this.props.onChange == "function") this.props.onChange(this.props.value, this); BDFDB.ReactUtils.forceUpdate(this); } render() { - return BDFDB.ReactUtils.createElement(InternalComponents.NativeSubComponents.Checkbox, Object.assign({}, this.props, {onChange: this.handleChange.bind(this)})); + let label = this.props.children ? BDFDB.ReactUtils.createElement("div", { + className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.checkboxlabel, this.props.disabled ? BDFDB.disCN.checkboxlabeldisabled : BDFDB.disCN.checkboxlabelclickable, this.props.reverse ? BDFDB.disCN.checkboxlabelreversed : BDFDB.disCN.checkboxlabelforward), + style: { + lineHeight: this.props.size + "px" + }, + children: this.props.children + }) : null; + return BDFDB.ReactUtils.createElement("label", { + className: BDFDB.DOMUtils.formatClassName(this.props.disabled ? BDFDB.disCN.checkboxwrapperdisabled : BDFDB.disCN.checkboxwrapper, this.props.align, this.props.className), + children: [ + this.props.reverse && label, + !this.props.displayOnly && BDFDB.ReactUtils.createElement(InternalComponents.LibraryComponents.FocusRingScope, { + children: BDFDB.ReactUtils.createElement("input", { + className: BDFDB.disCN["checkboxinput" + this.getInputMode()], + type: "checkbox", + onClick: this.props.disabled || this.props.readOnly ? (_ => {}) : this.handleChange.bind(this), + onContextMenu: this.props.disabled || this.props.readOnly ? (_ => {}) : this.handleChange.bind(this), + checked: this.props.value, + style: { + width: this.props.size, + height: this.props.size + } + }) + }), + BDFDB.ReactUtils.createElement("div", { + className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.checkbox, this.props.shape, this.props.value && BDFDB.disCN.checkboxchecked), + style: Object.assign({ + width: this.props.size, + height: this.props.size, + borderColor: this.props.checkboxColor + }, this.getStyle()), + children: BDFDB.ReactUtils.createElement(InternalComponents.LibraryComponents.Checkmark, { + width: 18, + height: 18, + color: this.getColor(), + "aria-hidden": true + }) + }), + !this.props.reverse && label + ].filter(n => n) + }); } }; @@ -6574,13 +6641,15 @@ module.exports = (_ => { shape: InternalComponents.LibraryComponents.Checkbox.Shapes.ROUND, type: InternalComponents.LibraryComponents.Checkbox.Types.INVERTED, color: this.props.checkboxColor, + getColor: this.props.getCheckboxColor, value: props[setting], + getValue: this.props.getCheckboxValue, onChange: this.props.onCheckboxChange }) })).flat(10).filter(n => n) }) ] - }), "title", "data", "settings", "renderLabel", "cardClassName", "cardStyle", "checkboxColor", "onCheckboxChange", "maxWidth", "fullWidth", "biggestWidth", "pagination")); + }), "title", "data", "settings", "renderLabel", "cardClassName", "cardStyle", "checkboxColor", "getCheckboxColor", "getCheckboxValue", "onCheckboxChange", "configWidth", "pagination")); } render() { this.props.settings = BDFDB.ArrayUtils.is(this.props.settings) ? this.props.settings : []; diff --git a/Library/_res/BDFDB.data.json b/Library/_res/BDFDB.data.json index fdc9722a08..edb1c4f254 100644 --- a/Library/_res/BDFDB.data.json +++ b/Library/_res/BDFDB.data.json @@ -488,6 +488,7 @@ "bdRepoHeaderControls": "controls-18FQsW", "bdRepoListHeader": "repoHeader-2KfNvH", "bdRepoListWrapper": "repoList-9JnAPs", + "cardDisabled": "cardDisabled-wnh5ZW", "cardHorizontal": "horizontal-0ffRsT", "cardInner": "inner-OP_8zd", "cardWrapper": "card-rT4Wbb", @@ -1888,6 +1889,7 @@ "hotkeywrapper": ["BDFDB", "hotkeyWrapper"], "hovercard": ["HoverCard", "card"], "hovercardbutton": ["NotFound", "hoverCardButton"], + "hovercarddisabled": ["BDFDB", "cardDisabled"], "hovercardhorizontal": ["BDFDB", "cardHorizontal"], "hovercardinner": ["BDFDB", "cardInner"], "hovercardwrapper": ["BDFDB", "cardWrapper"], diff --git a/Library/_res/BDFDB.raw.css b/Library/_res/BDFDB.raw.css index fc60c6da24..9134c83c21 100644 --- a/Library/_res/BDFDB.raw.css +++ b/Library/_res/BDFDB.raw.css @@ -364,9 +364,13 @@ img:not([src]), img[src=""], img[src="null"] { flex-direction: column; align-items: center; } -[REPLACE_CLASS_hovercardwrapper][REPLACE_CLASS_hovercardhorizontal] { +[REPLACE_CLASS_hovercardhorizontal] { flex-direction: row; } +[REPLACE_CLASS_hovercarddisabled] { + opacity: 0.7; + filter: grayscale(0.2); +} [REPLACE_CLASS_settingspanel] [REPLACE_CLASS_hovercardwrapper] { width: calc(100% - 22px); } diff --git a/Plugins/FriendNotifications/FriendNotifications.plugin.js b/Plugins/FriendNotifications/FriendNotifications.plugin.js index 02534297b7..a731a35fed 100644 --- a/Plugins/FriendNotifications/FriendNotifications.plugin.js +++ b/Plugins/FriendNotifications/FriendNotifications.plugin.js @@ -14,12 +14,12 @@ module.exports = (_ => { "info": { "name": "FriendNotifications", "author": "DevilBro", - "version": "1.5.5", + "version": "1.5.6", "description": "Get a notification when a Friend or a User you choose to observe changes their online status, can be configured individually in the settings" }, "changeLog": { - "added": { - "Search": "You can now search for a username in the time log modal" + "improved": { + "Toast/Desktop": "You can now set toast/desktop notifications for single status options instead of the whole user" } } }; @@ -68,6 +68,24 @@ module.exports = (_ => { var friendCounter, timeLogList; var settings = {}, amounts = {}, notificationStrings = {}, notificationSounds = {}, observedUsers = {}; + const notificationTypes = { + DISABLED: { + button: null, + value: 0, + color: "" + }, + TOAST: { + button: 0, + value: 1, + color: "var(--bdfdb-blurple)" + }, + DESKTOP: { + button: 2, + value: 2, + color: "STATUS_GREEN" + } + }; + const FriendOnlineCounterComponent = class FriendOnlineCounter extends BdApi.React.Component { componentDidMount() { friendCounter = this; @@ -140,27 +158,27 @@ module.exports = (_ => { this.defaults = { settings: { - addOnlineCount: {value: true, description: "Add an online friend counter to the server list (click to open logs)"}, - showDiscriminator: {value: false, description: "Add the user discriminator"}, + addOnlineCount: {value: true, description: "Add an Online friend Counter to the Server List (click to open logs)"}, + showDiscriminator: {value: false, description: "Add the User Discriminator"}, disableForNew: {value: false, description: "Disable Notifications for newly added Friends: "}, - muteOnDND: {value: false, description: "Do not notify me when I am DnD"}, + muteOnDND: {value: false, description: "Do not notify me when I am in DnD"}, openOnClick: {value: false, description: "Open the DM when you click a Notification"} }, notificationstrings: { online: {value: "$user changed status to '$status'", libString: "STATUS_ONLINE", init: true}, mobile: {value: "$user changed status to '$status'", libString: "STATUS_ONLINE_MOBILE", init: true}, idle: {value: "$user changed status to '$status'", libString: "STATUS_IDLE", init: false}, - dnd: {value: "$user changed status to '$status'", libString: "STATUS_DND", init: false}, + dnd: {value: "$user changed status to '$status'", libString: "STATUS_DND", init: false}, playing: {value: "$user started playing '$game'", statusName: "Playing", init: false}, - listening: {value: "$user started listening to '$song'", statusName: "Listening", init: false}, - streaming: {value: "$user started streaming '$game'", libString: "STATUS_STREAMING", init: false}, - offline: {value: "$user changed status to '$status'", libString: "STATUS_OFFLINE", init: true} + listening: {value: "$user started listening to '$song'", statusName: "Listening", init: false}, + streaming: {value: "$user started streaming '$game'", libString: "STATUS_STREAMING", init: false}, + offline: {value: "$user changed status to '$status'", libString: "STATUS_OFFLINE", init: true} }, notificationsounds: {}, amounts: { - toastTime: {value: 5, min: 1, description: "Amount of seconds a toast notification stays on screen: "}, - desktopTime: {value: 5, min: 1, description: "Amount of seconds a desktop notification stays on screen: "}, - checkInterval: {value: 10, min: 5, description: "Check Users every X seconds: "} + toastTime: {value: 5, min: 1, description: "Amount of Seconds a Toast Notification stays on Screen: "}, + desktopTime: {value: 5, min: 1, description: "Amount of Seconds a Desktop Notification stays on Screen: "}, + checkInterval: {value: 10, min: 5, description: "Check Users every X Seconds: "} } }; @@ -202,6 +220,20 @@ module.exports = (_ => { } onStart() { + // REMOVE 1.1.2021 + let convert = type => { + let data = BDFDB.DataUtils.load(this, type); + if (Object.keys(data).length) { + for (let id in data) if (data[id].desktop != undefined) { + for (let key of Object.keys(this.defaults.notificationstrings)) data[id][key] = notificationTypes[!data[id][key] ? "DISABLED" : (data[id].desktop ? "DESKTOP" : "TOAST")].value; + delete data[id].desktop; + } + BDFDB.DataUtils.save(data, this, type); + } + }; + convert("friends"); + convert("nonfriends"); + this.startInterval(); BDFDB.PatchUtils.forceAllUpdates(this); @@ -214,23 +246,16 @@ module.exports = (_ => { } getSettingsPanel (collapseStates = {}) { - let changeNotificationType = (type, userId, desktopOn, disableOn) => { - let data = BDFDB.DataUtils.load(this, type, userId) || this.createDefaultConfig(); - data.desktop = desktopOn; - data.disabled = disableOn; - BDFDB.DataUtils.save(data, this, type, userId); - this.SettingsUpdated = true; - BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates); - }; - let changeAllConfigs = (type, config, enable) => { + let changeAllConfigs = (type, config, notificationType) => { let allData = BDFDB.DataUtils.load(this, type); - if (config == "type") { - config = "desktop"; - enable = !enable; - let disabled = BDFDB.ObjectUtils.toArray(allData).every(d => !d.disabled && d[config] == enable); - for (let id in allData) allData[id].disabled = disabled; + if (config == "all") { + config = "disabled"; + for (let id in allData) allData[id][config] = notificationTypes[notificationType].button == 0 ? false : true; + } + else { + let disabled = BDFDB.ObjectUtils.toArray(allData).every(d => !d.disabled && d[config] == notificationTypes[notificationType].value); + for (let id in allData) allData[id][config] = notificationTypes[disabled ? "DISABLED" : notificationType].value; } - for (let id in allData) allData[id][config] = enable; BDFDB.DataUtils.save(allData, this, type); this.SettingsUpdated = true; BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates); @@ -247,7 +272,7 @@ module.exports = (_ => { items.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, { className: BDFDB.disCNS.settingsrowtitle + BDFDB.disCNS.settingsrowtitledefault + BDFDB.disCN.cursordefault, children: [ - "Click on an Icon to toggle", + "Click on an Option to toggle", BDFDB.ReactUtils.createElement("span", { className: BDFDB.disCN._friendnotificationstypelabel, style: {backgroundColor: "var(--bdfdb-blurple)"}, @@ -259,7 +284,7 @@ module.exports = (_ => { if ("Notification" in window) items.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, { className: BDFDB.disCNS.settingsrowtitle + BDFDB.disCNS.settingsrowtitledefault + BDFDB.disCN.cursordefault, children: [ - "Right-Click on an Icon to toggle", + "Right-Click on an Option to toggle", BDFDB.ReactUtils.createElement("span", { className: BDFDB.disCN._friendnotificationstypelabel, style: {backgroundColor: BDFDB.DiscordConstants.Colors.STATUS_GREEN}, @@ -270,7 +295,7 @@ module.exports = (_ => { })); items.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsList, { className: BDFDB.disCN.margintop20, - title: "type", + title: "all", settings: Object.keys(this.defaults.notificationstrings), data: users, pagination: { @@ -279,6 +304,14 @@ module.exports = (_ => { offset: paginationOffset[title] || 0, 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; + }, renderLabel: data => [ BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.AvatarComponents.default, { className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.listavatar, data.disabled && BDFDB.disCN.avatardisabled), @@ -286,10 +319,11 @@ module.exports = (_ => { status: BDFDB.UserUtils.getStatus(data.id), size: BDFDB.LibraryComponents.AvatarComponents.Sizes.SIZE_40, onClick: (e, instance) => { - changeNotificationType(type, data.id, false, !(data.disabled || data.desktop)); - }, - onContextMenu: (e, instance) => { - changeNotificationType(type, data.id, true, !(data.disabled || !data.desktop)); + let saveData = BDFDB.DataUtils.load(this, type, data.id) || this.createDefaultConfig(); + saveData.disabled = !saveData.disabled; + BDFDB.DataUtils.save(saveData, this, type, data.id); + this.SettingsUpdated = true; + BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates); } }), BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextScroller, { @@ -297,10 +331,10 @@ module.exports = (_ => { }) ], onHeaderClick: (config, instance) => { - changeAllConfigs(type, config, true); + changeAllConfigs(type, config, "TOAST"); }, onHeaderContextMenu: (config, instance) => { - changeAllConfigs(type, config, false); + changeAllConfigs(type, config, "DESKTOP"); }, onCheckboxChange: (value, instance) => { let data = BDFDB.DataUtils.load(this, type, instance.props.cardId) || this.createDefaultConfig(); @@ -352,12 +386,18 @@ module.exports = (_ => { nonFriendsData[id] = Object.assign({}, friendsData[id]); delete friendsData[id]; } - else if (id != BDFDB.UserUtils.me.id) friends.push(Object.assign({}, user, friendsData[id], {key: id, className: friendsData[id].disabled ? "" : (friendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)})); + else if (id != BDFDB.UserUtils.me.id) friends.push(Object.assign({}, user, friendsData[id], { + key: id, + className: friendsData[id].disabled ? "" : BDFDB.disCN.hovercarddisabled + })); } } for (let id in nonFriendsData) { let user = BDFDB.LibraryModules.UserStore.getUser(id); - if (user && id != BDFDB.UserUtils.me.id) nonFriends.push(Object.assign({}, user, nonFriendsData[id], {key: id, className: nonFriendsData[id].disabled ? "" : (nonFriendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)})); + if (user && id != BDFDB.UserUtils.me.id) nonFriends.push(Object.assign({}, user, nonFriendsData[id], { + key: id, + className: nonFriendsData[id].disabled ? "" : BDFDB.disCN.hovercarddisabled + })); } BDFDB.DataUtils.save(friendsData, this, "friends"); @@ -595,9 +635,8 @@ module.exports = (_ => { createDefaultConfig () { return Object.assign({ - desktop: false, disabled: settings.disableForNew - }, BDFDB.ObjectUtils.map(this.defaults.notificationstrings, "init")); + }, BDFDB.ObjectUtils.map(this.defaults.notificationstrings, data => notificationTypes[data.init ? "TOAST" : "DISABLED"].value)); } getStatusWithMobileAndActivity (id, config) { @@ -669,24 +708,22 @@ module.exports = (_ => { BDFDB.LibraryRequires.electron.remote.getCurrentWindow().focus(); } }; - if (!observedUsers[id].desktop) { - if (!document.querySelector(`.friendnotifications-${id}-toast`)) { - let toast = BDFDB.NotificationUtils.toast(`
${toastString}
`, {html: true, timeout: toastTime, color: BDFDB.UserUtils.getStatusColor(status.statusName), icon: false, selector: `friendnotifications-${status.statusName}-toast friendnotifications-${id}-toast`}); - toast.addEventListener("click", openChannel); - let notificationsound = notificationSounds["toast" + status.statusName] || {}; - if (!notificationsound.mute && notificationsound.song) { - let audio = new Audio(); - audio.src = notificationsound.song; - audio.play(); - } - } - } - else { + if (observedUsers[id][status.statusName] == notificationTypes.DESKTOP.value) { let desktopString = string.replace(/\$user/g, `${name}${settings.showDiscriminator ? ("#" + user.discriminator) : ""}`).replace(/\$status/g, libString); if (status.isActivity) desktopString = desktopString.replace(/\$song|\$game/g, status.name || status.details).replace(/\$artist/g, status.state); let notificationsound = notificationSounds["desktop" + status.statusName] || {}; BDFDB.NotificationUtils.desktop(desktopString, {icon: avatar, timeout: desktopTime, click: openChannel, silent: notificationsound.mute, sound: notificationsound.song}); } + else if (!document.querySelector(`.friendnotifications-${id}-toast`)) { + let toast = BDFDB.NotificationUtils.toast(`
${toastString}
`, {html: true, timeout: toastTime, color: BDFDB.UserUtils.getStatusColor(status.statusName), icon: false, selector: `friendnotifications-${status.statusName}-toast friendnotifications-${id}-toast`}); + toast.addEventListener("click", openChannel); + let notificationsound = notificationSounds["toast" + status.statusName] || {}; + if (!notificationsound.mute && notificationsound.song) { + let audio = new Audio(); + audio.src = notificationsound.song; + audio.play(); + } + } } } userStatusStore[id] = status.statusName;