diff --git a/Library/0BDFDB.plugin.js b/Library/0BDFDB.plugin.js index f6b5c16f3d..b2ce19a297 100644 --- a/Library/0BDFDB.plugin.js +++ b/Library/0BDFDB.plugin.js @@ -2,7 +2,7 @@ * @name BDFDB * @author DevilBro * @authorId 278543574059057154 - * @version 2.5.0 + * @version 2.5.1 * @description Required Library for DevilBro's Plugins * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -19,7 +19,7 @@ module.exports = (_ => { "info": { "name": "BDFDB", "author": "DevilBro", - "version": "2.5.0", + "version": "2.5.1", "description": "Required Library for DevilBro's Plugins" }, "rawUrl": "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js" @@ -4396,7 +4396,7 @@ module.exports = (_ => { if (BDFDB.DiscordUtils.getBuild.build) return BDFDB.DiscordUtils.getBuild.build; else { let build; - try {build = window.DiscordNative.app.getReleaseChannel();} + try {build = window.DiscordNative.app.getReleaseChannel();} catch (err) { let version = BDFDB.DiscordUtils.getVersion(); if (version) { @@ -4418,32 +4418,8 @@ module.exports = (_ => { return BDFDB.DiscordUtils.getVersion.version = version; } }; - BDFDB.DiscordUtils.isDevModeEnabled = function () { - return BDFDB.DiscordUtils.getSettings("developerMode"); - }; - BDFDB.DiscordUtils.getExperiment = function (id) { - if (!id) return null; - const module = BDFDB.ModuleUtils.find(m => m.definition && m.definition.defaultConfig && m.definition.defaultConfig[id] != null && typeof m.getCurrentConfig == "function" && m); - return module && (module.getCurrentConfig({}) || {})[id]; - }; BDFDB.DiscordUtils.getTheme = function () { - return BDFDB.DiscordUtils.getSettings("theme") != "dark" ? BDFDB.disCN.themelight : BDFDB.disCN.themedark; - }; - BDFDB.DiscordUtils.getMode = function () { - return BDFDB.DiscordUtils.getSettings("messageDisplayCompact") ? "compact" : "cozy"; - }; - BDFDB.DiscordUtils.getSettings = function (key) { - if (!key) return null; - else if (Internal.LibraryModules.SettingsUtils && (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"])) return (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"]).getSetting(); - else { - const value = Internal.LibraryModules.SettingsStore && Internal.LibraryModules.SettingsStore.getAllSettings()[key.slice(0, 1).toLowerCase() + key.slice(1)]; - return value != undefined ? value: null; - } - }; - BDFDB.DiscordUtils.setSettings = function (key, value) { - if (!key) return; - else if (Internal.LibraryModules.SettingsUtils && (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"])) (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"]).updateSetting(value); - else Internal.LibraryModules.SettingsUtilsOld.updateRemoteSettings({[key.slice(0, 1).toLowerCase() + key.slice(1)]: value}); + return BDFDB.LibraryModules.ThemeSettingsStore.theme != "dark" ? BDFDB.disCN.themelight : BDFDB.disCN.themedark; }; BDFDB.DiscordUtils.getZoomFactor = function () { let aRects = BDFDB.DOMUtils.getRects(document.querySelector(BDFDB.dotCN.appmount)); @@ -8676,7 +8652,7 @@ module.exports = (_ => { if (InternalData.ModuleUtilsConfig.QueuedComponents) for (let type of InternalData.ModuleUtilsConfig.QueuedComponents) if (!PluginStores.patchQueues[type]) PluginStores.patchQueues[type] = {query: [], modules: []}; let languageChangeTimeout; - if (Internal.LibraryModules.SettingsUtilsOld) BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.SettingsUtilsOld, ["updateRemoteSettings", "updateLocalSettings"], {after: e => { + BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.SettingsUtilsOld, ["updateRemoteSettings", "updateLocalSettings"], {after: e => { if (e.methodArguments[0] && e.methodArguments[0].locale) { BDFDB.TimeUtils.clear(languageChangeTimeout); languageChangeTimeout = BDFDB.TimeUtils.timeout(_ => { @@ -8684,6 +8660,12 @@ module.exports = (_ => { }, 10000); } }}); + BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.AppearanceSettingsUtils, "updateLocale", {after: e => { + BDFDB.TimeUtils.clear(languageChangeTimeout); + languageChangeTimeout = BDFDB.TimeUtils.timeout(_ => { + for (let pluginName in PluginStores.loaded) if (PluginStores.loaded[pluginName].started) BDFDB.PluginUtils.translate(PluginStores.loaded[pluginName]); + }, 10000); + }}); Internal.onSettingsClosed = function () { if (Internal.SettingsUpdated) { diff --git a/Library/_res/0BDFDB.data.json b/Library/_res/0BDFDB.data.json index 901106785a..0cea8a4653 100644 --- a/Library/_res/0BDFDB.data.json +++ b/Library/_res/0BDFDB.data.json @@ -20,6 +20,7 @@ "APIUtils": {"props": ["getAPIBaseURL"]}, "AnalyticsUtils": {"props": ["isThrottled", "track"]}, "AnimationUtils": {"props": ["spring", "decay"]}, + "AppearanceSettingsUtils": {"props": ["updateLocale", "updateTheme"]}, "ArrayUtils": {"props": ["isArrayLike", "zipObject"]}, "AssetUtils": {"props": ["getAssetImage", "getAssetIds"]}, "AutocompleteOptions": {"props": ["AUTOCOMPLETE_OPTIONS"]}, @@ -116,9 +117,8 @@ "FriendUtils": {"props": ["getFriendIDs", "getRelationships"]}, "RoleIconUtils": {"props": ["getRoleIconData"]}, "SearchPageUtils": {"props": ["searchNextPage", "searchPreviousPage"]}, - "SettingsStore": {"props": ["getAllSettings"], "nonProps": ["allowAllMessages"]}, "SettingsUtils": {"props": ["ShowCurrentGame", "DeveloperMode"]}, - "SettingsUtilsOld": {"props": ["updateLocalSettings", "updateRemoteSettings"]}, + "SettingsUtilsOld": {"props": ["updateRemoteSettings", "updateLocalSettings"]}, "SimpleMarkdownComponents": {"strings": ["customEmoji", "emojiTooltipPosition", "timestampTooltip"]}, "SimpleMarkdownParser": {"props": ["parseBlock", "parseInline", "defaultOutput"]}, "SlateDraftUtils": {"props": ["getRecentlyEditedDrafts", "getDraft"]}, @@ -142,6 +142,7 @@ "StringUtils": {"props": ["cssValueToNumber", "upperCaseFirstChar"]}, "TimestampUtils": {"props": ["fromTimestamp", "extractTimestamp"]}, "TimeUtils": {"props": ["calendarFormat", "dateFormat"]}, + "ThemeSettingsStore": {"props": ["theme"]}, "ThreadStore": {"props": ["isActive", "getThreadsForGuild"]}, "UnreadGuildUtils": {"props": ["hasUnread", "getTotalMentionCount"]}, "UnreadChannelUtils": {"props": ["getUnreadCount", "getOldestUnreadMessageId"]}, diff --git a/Plugins/BDFDB/BDFDB.plugin.js b/Plugins/BDFDB/BDFDB.plugin.js index bc6ad301ce..b2ce19a297 100644 --- a/Plugins/BDFDB/BDFDB.plugin.js +++ b/Plugins/BDFDB/BDFDB.plugin.js @@ -2,7 +2,7 @@ * @name BDFDB * @author DevilBro * @authorId 278543574059057154 - * @version 2.3.7 + * @version 2.5.1 * @description Required Library for DevilBro's Plugins * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -19,7 +19,7 @@ module.exports = (_ => { "info": { "name": "BDFDB", "author": "DevilBro", - "version": "2.3.7", + "version": "2.5.1", "description": "Required Library for DevilBro's Plugins" }, "rawUrl": "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js" @@ -1328,7 +1328,7 @@ module.exports = (_ => { }) && m, useExport, noWarnings); }; BDFDB.ModuleUtils.findByName = function (name, useExport, noWarnings = false) { - return Internal.findModule("name", JSON.stringify(name), m => m.displayName === name && m || m.render && m.render.displayName === name && m || m[name] && m[name].displayName === name && m[name], typeof useExport != "boolean" ? true : useExport, noWarnings); + return Internal.findModule("name", JSON.stringify(name), m => m.displayName === name && m || m.render && m.render.displayName === name && m || m.constructor && m.constructor.displayName === name && m || m[name] && m[name].displayName === name && m[name], typeof useExport != "boolean" ? true : useExport, noWarnings); }; BDFDB.ModuleUtils.findByString = function (...strings) { strings = strings.flat(10); @@ -1810,7 +1810,7 @@ module.exports = (_ => { let layers = document.querySelector(BDFDB.dotCN.layers) || document.querySelector(BDFDB.dotCN.appmount); if (!layers) return; let id = BDFDB.NumberUtils.generateId(NotificationBars); - let notice = BDFDB.DOMUtils.create(`
`); + let notice = BDFDB.DOMUtils.create(`
`); layers.parentElement.insertBefore(notice, layers); let noticeText = notice.querySelector(BDFDB.dotCN.noticetext); if (config.platform) for (let platform of config.platform.split(" ")) if (DiscordClasses["noticeicon" + platform]) { @@ -1877,8 +1877,7 @@ module.exports = (_ => { if (comp) { let fontColor = comp[0] > 180 && comp[1] > 180 && comp[2] > 180 ? "#000" : "#FFF"; let backgroundColor = BDFDB.ColorUtils.convert(comp, "HEX"); - let filter = comp[0] > 180 && comp[1] > 180 && comp[2] > 180 ? "brightness(0%)" : "brightness(100%)"; - BDFDB.DOMUtils.appendLocalStyle("BDFDBcustomNotificationBarColorCorrection" + id, `${BDFDB.dotCN.noticewrapper}[notice-id="${id}"]{background-color: ${backgroundColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticetext} {color: ${fontColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticebutton} {color: ${fontColor} !important;border-color: ${BDFDB.ColorUtils.setAlpha(fontColor, 0.25, "RGBA")} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticebutton}:hover {color: ${backgroundColor} !important;background-color: ${fontColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticedismiss} {filter: ${filter} !important;}`); + BDFDB.DOMUtils.appendLocalStyle("BDFDBcustomNotificationBarColorCorrection" + id, `${BDFDB.dotCN.noticewrapper}[notice-id="${id}"]{background-color: ${backgroundColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticetext} {color: ${fontColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticebutton} {color: ${fontColor} !important;border-color: ${BDFDB.ColorUtils.setAlpha(fontColor, 0.25, "RGBA")} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticebutton}:hover {color: ${backgroundColor} !important;background-color: ${fontColor} !important;}${BDFDB.dotCN.noticewrapper}[notice-id="${id}"] ${BDFDB.dotCN.noticedismissicon} path {fill: ${fontColor} !important;}`); BDFDB.DOMUtils.addClass(notice, BDFDB.disCN.noticecustom); } else BDFDB.DOMUtils.addClass(notice, BDFDB.disCN.noticedefault); @@ -2239,7 +2238,7 @@ module.exports = (_ => { config.name = config.subComponent && config.subComponent.name || config.mappedType.split(" _ _ ")[0]; let component = InternalData.ModuleUtilsConfig.LoadedInComponents[type] && BDFDB.ObjectUtils.get(Internal, InternalData.ModuleUtilsConfig.LoadedInComponents[type]); - if (component) Internal.patchComponent(pluginData, config.nonRender ? (BDFDB.ModuleUtils.find(m => m == component && m, {useExport: config.exported}) || {}).exports : component, type, config); + if (component) Internal.patchComponent(pluginData, config.nonRender ? (BDFDB.ModuleUtils.find(m => m == component && m, {useExport: config.exported}) || {}).exports : component, config); else { if (config.mapped) for (let patchType in plugin.patchedModules) if (plugin.patchedModules[patchType][type]) { plugin.patchedModules[patchType][config.mappedType] = plugin.patchedModules[patchType][type]; @@ -2617,6 +2616,7 @@ module.exports = (_ => { } else LibraryModules[item] = BDFDB.ModuleUtils.findByProperties(InternalData.LibraryModules[item].props); } + else if (InternalData.LibraryModules[item].name) LibraryModules[item] = BDFDB.ModuleUtils.findByName(InternalData.LibraryModules[item].name); else if (InternalData.LibraryModules[item].strings) LibraryModules[item] = BDFDB.ModuleUtils.findByString(InternalData.LibraryModules[item].strings); if (InternalData.LibraryModules[item].value) LibraryModules[item] = (LibraryModules[item] || {})[InternalData.LibraryModules[item].value]; return LibraryModules[item] ? LibraryModules[item] : null; @@ -3256,10 +3256,9 @@ module.exports = (_ => { if (!user) return window.location.origin + "/assets/1f0bfc0865d324c2587920a7d80c609b.png"; else return ((user.avatar ? "" : window.location.origin) + Internal.LibraryModules.IconUtils.getUserAvatarURL(user)).split("?")[0]; }; - BDFDB.UserUtils.getBanner = function (id = BDFDB.UserUtils.me.id, canAnimate = false) { - let user = Internal.LibraryModules.UserStore.getUser(id); - if (!user || !user.banner) return ""; - return Internal.LibraryModules.IconUtils.getUserBannerURL(Object.assign({}, user, {canAnimate})).split("?")[0]; + BDFDB.UserUtils.getBanner = function (id = BDFDB.UserUtils.me.id, guildId = Internal.LibraryModules.LastGuildStore.getGuildId(), canAnimate = false) { + let displayProfile = Internal.LibraryModules.MemberDisplayUtils.getDisplayProfile(id, guildId); + return (Internal.LibraryModules.IconUtils.getUserBannerURL(Object.assign({banner: displayProfile.banner, id: id}, {canAnimate})) || "").split("?")[0]; }; BDFDB.UserUtils.can = function (permission, id = BDFDB.UserUtils.me.id, channelId = Internal.LibraryModules.LastChannelStore.getChannelId()) { if (!BDFDB.DiscordConstants.Permissions[permission]) BDFDB.LogUtils.warn([permission, "not found in Permissions"]); @@ -3302,10 +3301,10 @@ module.exports = (_ => { BDFDB.GuildUtils.openMenu = function (guild, e = mousePosition) { if (!guild) return; e = BDFDB.ListenerUtils.copyEvent(e.nativeEvent || e, (e.nativeEvent || e).currentTarget); - let menu = BDFDB.ModuleUtils.findByName("GuildContextMenu", false, true); + let menu = BDFDB.ModuleUtils.findByName("GuildContextMenuWrapper", false, true); if (menu) Internal.LibraryModules.ContextMenuUtils.openContextMenu(e, e2 => BDFDB.ReactUtils.createElement(menu.exports.default, Object.assign({}, e2, {guild}))); else Internal.lazyLoadModuleImports(BDFDB.ModuleUtils.findByString("renderUnavailableBadge", "guild:", "openContextMenu")).then(_ => { - menu = BDFDB.ModuleUtils.findByName("GuildContextMenu", false); + menu = BDFDB.ModuleUtils.findByName("GuildContextMenuWrapper", false); if (menu) Internal.LibraryModules.ContextMenuUtils.openContextMenu(e, e2 => BDFDB.ReactUtils.createElement(menu.exports.default, Object.assign({}, e2, {guild}))); }); }; @@ -3374,7 +3373,7 @@ module.exports = (_ => { return channel && Internal.LibraryModules.GuildEventStore.getGuildScheduledEvent(channel.id) && true; }; BDFDB.ChannelUtils.markAsRead = function (channelIds) { - let unreadChannels = [channelIds].flat(10).filter(id => id && typeof id == "string" && ((BDFDB.ChannelUtils.isTextChannel(id) || BDFDB.ChannelUtils.isThread(id)) && (Internal.LibraryModules.UnreadChannelUtils.hasUnread(id) || Internal.LibraryModules.UnreadChannelUtils.getMentionCount(id) > 0))).map(id => ({ + let unreadChannels = [channelIds].flat(10).filter(id => id && typeof id == "string" && (BDFDB.LibraryModules.ChannelStore.getChannel(id) || {}).type != BDFDB.DiscordConstants.ChannelTypes.GUILD_CATEGORY && (Internal.LibraryModules.UnreadChannelUtils.hasUnread(id) || Internal.LibraryModules.UnreadChannelUtils.getMentionCount(id) > 0)).map(id => ({ channelId: id, readStateType: Internal.LibraryModules.UnreadStateTypes.CHANNEL, messageId: Internal.LibraryModules.UnreadChannelUtils.lastMessageId(id) @@ -4397,7 +4396,7 @@ module.exports = (_ => { if (BDFDB.DiscordUtils.getBuild.build) return BDFDB.DiscordUtils.getBuild.build; else { let build; - try {build = window.DiscordNative.app.getReleaseChannel();} + try {build = window.DiscordNative.app.getReleaseChannel();} catch (err) { let version = BDFDB.DiscordUtils.getVersion(); if (version) { @@ -4419,32 +4418,8 @@ module.exports = (_ => { return BDFDB.DiscordUtils.getVersion.version = version; } }; - BDFDB.DiscordUtils.isDevModeEnabled = function () { - return BDFDB.DiscordUtils.getSettings("developerMode"); - }; - BDFDB.DiscordUtils.getExperiment = function (id) { - if (!id) return null; - const module = BDFDB.ModuleUtils.find(m => m.definition && m.definition.defaultConfig && m.definition.defaultConfig[id] != null && typeof m.getCurrentConfig == "function" && m); - return module && (module.getCurrentConfig({}) || {})[id]; - }; BDFDB.DiscordUtils.getTheme = function () { - return BDFDB.DiscordUtils.getSettings("theme") != "dark" ? BDFDB.disCN.themelight : BDFDB.disCN.themedark; - }; - BDFDB.DiscordUtils.getMode = function () { - return BDFDB.DiscordUtils.getSettings("messageDisplayCompact") ? "compact" : "cozy"; - }; - BDFDB.DiscordUtils.getSettings = function (key) { - if (!key) return null; - else if (Internal.LibraryModules.SettingsUtils && (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"])) return (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"]).getSetting(); - else { - const value = Internal.LibraryModules.SettingsStore.getAllSettings()[key.slice(0, 1).toLowerCase() + key.slice(1)]; - return value != undefined ? value: null; - } - }; - BDFDB.DiscordUtils.setSettings = function (key, value) { - if (!key) return; - else if (Internal.LibraryModules.SettingsUtils && (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"])) (Internal.LibraryModules.SettingsUtils[key] || Internal.LibraryModules.SettingsUtils[key + "DoNotUseYet"]).updateSetting(value); - else Internal.LibraryModules.SettingsUtilsOld.updateRemoteSettings({[key.slice(0, 1).toLowerCase() + key.slice(1)]: value}); + return BDFDB.LibraryModules.ThemeSettingsStore.theme != "dark" ? BDFDB.disCN.themelight : BDFDB.disCN.themedark; }; BDFDB.DiscordUtils.getZoomFactor = function () { let aRects = BDFDB.DOMUtils.getRects(document.querySelector(BDFDB.dotCN.appmount)); @@ -4556,6 +4531,7 @@ module.exports = (_ => { } }); BDFDB.DiscordClassModules = Internal.DiscordClassModules; + for (let item in InternalData.DiscordClassModules) if (!DiscordClassModules[item]) DiscordClassModules[item] = undefined; const DiscordClasses = Object.assign({}, InternalData.DiscordClasses); BDFDB.DiscordClasses = Object.assign({}, DiscordClasses); @@ -4597,50 +4573,50 @@ module.exports = (_ => { while (id.length < 6) id += generationChars[Math.floor(Math.random() * generationChars.length)]; return id; }; - BDFDB.disCN = new Proxy(DiscordClasses, { + BDFDB.disCN = new Proxy({}, { get: function (list, item) { return Internal.getDiscordClass(item, false).replace("#", ""); } }); - BDFDB.disCNS = new Proxy(DiscordClasses, { + BDFDB.disCNS = new Proxy({}, { get: function (list, item) { return Internal.getDiscordClass(item, false).replace("#", "") + " "; } }); - BDFDB.disCNC = new Proxy(DiscordClasses, { + BDFDB.disCNC = new Proxy({}, { get: function (list, item) { return Internal.getDiscordClass(item, false).replace("#", "") + ","; } }); - BDFDB.dotCN = new Proxy(DiscordClasses, { + BDFDB.dotCN = new Proxy({}, { get: function (list, item) { let className = Internal.getDiscordClass(item, true); return (className.indexOf("#") == 0 ? "" : ".") + className; } }); - BDFDB.dotCNS = new Proxy(DiscordClasses, { + BDFDB.dotCNS = new Proxy({}, { get: function (list, item) { let className = Internal.getDiscordClass(item, true); return (className.indexOf("#") == 0 ? "" : ".") + className + " "; } }); - BDFDB.dotCNC = new Proxy(DiscordClasses, { + BDFDB.dotCNC = new Proxy({}, { get: function (list, item) { let className = Internal.getDiscordClass(item, true); return (className.indexOf("#") == 0 ? "" : ".") + className + ","; } }); - BDFDB.notCN = new Proxy(DiscordClasses, { + BDFDB.notCN = new Proxy({}, { get: function (list, item) { return `:not(.${Internal.getDiscordClass(item, true).split(".")[0]})`; } }); - BDFDB.notCNS = new Proxy(DiscordClasses, { + BDFDB.notCNS = new Proxy({}, { get: function (list, item) { return `:not(.${Internal.getDiscordClass(item, true).split(".")[0]}) `; } }); - BDFDB.notCNC = new Proxy(DiscordClasses, { + BDFDB.notCNC = new Proxy({}, { get: function (list, item) { return `:not(.${Internal.getDiscordClass(item, true).split(".")[0]}),`; } @@ -4808,7 +4784,7 @@ module.exports = (_ => { }, onClick: this.props.disabled ? null : e => { if (!this.props.action) return false; - !this.props.persisting && !hasPopout && this.props.onClose(); + !this.props.persisting && !hasPopout && this.props.onClose && this.props.onClose(); this.props.action(e, this); }, onMouseEnter: this.props.disabled ? null : e => { @@ -4821,6 +4797,12 @@ module.exports = (_ => { }, "aria-disabled": this.props.disabled, children: [ + this.props.icon && this.props.showIconFirst && BDFDB.ReactUtils.createElement("div", { + className: BDFDB.disCN.menuiconcontainerleft, + children: BDFDB.ReactUtils.createElement(this.props.icon, { + className: BDFDB.disCN.menuicon + }) + }), typeof this.props.render == "function" ? this.props.render(this) : this.props.render, (this.props.label || this.props.subtext) && BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.menulabel, @@ -4836,12 +4818,16 @@ module.exports = (_ => { className: BDFDB.disCN.menuhintcontainer, children: typeof this.props.hint == "function" ? this.props.hint(this) : this.props.hint }), - this.props.icon && BDFDB.ReactUtils.createElement("div", { + this.props.icon && !this.props.showIconFirst && BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.menuiconcontainer, children: BDFDB.ReactUtils.createElement(this.props.icon, { className: BDFDB.disCN.menuicon }) }), + this.props.input && BDFDB.ReactUtils.createElement("div", { + className: BDFDB.disCN.menuiconcontainer, + children: this.props.input + }), this.props.imageUrl && BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.menuimagecontainer, children: BDFDB.ReactUtils.createElement("img", { @@ -4878,12 +4864,8 @@ module.exports = (_ => { isFocused: this.state.hovered && !this.props.disabled })); return isItem ? item : BDFDB.ReactUtils.createElement(Internal.LibraryComponents.Clickable, { - onMouseEnter: e => { - this.setState({hovered: true}); - }, - onMouseLeave: e => { - this.setState({hovered: false}); - }, + onMouseEnter: e => this.setState({hovered: true}), + onMouseLeave: e => this.setState({hovered: false}), children: item }); } @@ -6603,8 +6585,11 @@ module.exports = (_ => { onContextMenu: this.handleContextMenu.bind(this), children: [ !this.props.noCircle ? BDFDB.ReactUtils.createElement("div", { - className: BDFDB.disCN.userpopoutrolecircle, - style: {backgroundColor: color} + className: BDFDB.disCN.userpopoutroleremovebutton, + children: BDFDB.ReactUtils.createElement("span", { + className: BDFDB.disCN.userpopoutrolecircle, + style: {backgroundColor: color} + }) }) : null, BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.userpopoutrolename, @@ -6625,8 +6610,16 @@ module.exports = (_ => { BDFDB.ReactUtils.forceUpdate(this); } render() { - return BDFDB.ReactUtils.createElement(Internal.NativeSubComponents.MenuCheckboxItem, Object.assign({}, this.props, { - checked: this.props.state && this.props.state.checked, + return BDFDB.ReactUtils.createElement(Internal.MenuItem, Object.assign({}, this.props, { + input: this.props.state && this.props.state.checked ? BDFDB.ReactUtils.createElement(Internal.LibraryComponents.SvgIcon, { + className: BDFDB.disCN.menuicon, + background: BDFDB.disCN.menucheckbox, + foreground: BDFDB.disCN.menucheck, + name: Internal.LibraryComponents.SvgIcon.Names.CHECKBOX + }) : BDFDB.ReactUtils.createElement(Internal.LibraryComponents.SvgIcon, { + className: BDFDB.disCN.menuicon, + name: Internal.LibraryComponents.SvgIcon.Names.CHECKBOX_EMPTY + }), action: this.handleClick.bind(this) })); } @@ -7303,7 +7296,7 @@ module.exports = (_ => { children: this.props.settings.map(setting => BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.checkboxcontainer, children: BDFDB.ReactUtils.createElement(Internal.LibraryComponents.TooltipContainer, { - text: setting, + text: setting.toUpperCase(), children: BDFDB.ReactUtils.createElement(Internal.LibraryComponents.Checkbox, { disabled: props.disabled, cardId: props.key, @@ -8006,6 +7999,7 @@ module.exports = (_ => { muted: true, loop: true, autoPlay: props.play, + playOnHover: props.playOnHover, preload: "none" }) : BDFDB.ReactUtils.createElement("img", { alt: "", @@ -8135,7 +8129,7 @@ module.exports = (_ => { Internal.appendCustomControls(BDFDB.DOMUtils.getParent(BDFDB.dotCN._repocard, n)); });}});})}, {childList: true, subtree: true}); for (let c of layer.querySelectorAll(BDFDB.dotCN._repocard)) Internal.appendCustomControls(c); - } + }; const keyDownTimeouts = {}; BDFDB.ListenerUtils.add(BDFDB, document, "keydown.BDFDBPressedKeys", e => { @@ -8176,6 +8170,7 @@ module.exports = (_ => { MemberListItem: ["componentDidMount", "componentDidUpdate"], PrivateChannel: ["componentDidMount", "componentDidUpdate"], AnalyticsContext: ["componentDidMount", "componentDidUpdate"], + UserPopoutAvatar: "UserPopoutAvatar", PeopleListItem: ["componentDidMount", "componentDidUpdate"], DiscordTag: "default" } @@ -8195,17 +8190,15 @@ module.exports = (_ => { if (count > 20) return BDFDB.TimeUtils.clear(interval); else { let module = BDFDB.ModuleUtils.findByString("guild-header-popout"); - if (module) BDFDB.PatchUtils.patch(BDFDB, module.default.prototype, "render", {after: e2 => { - BDFDB.PatchUtils.patch(BDFDB, e2.returnValue.type, "type", {after: e3 => { - Internal.triggerQueuePatch("GuildHeaderContextMenu", { - arguments: e3.methodArguments, - instance: {props: e3.methodArguments[0]}, - returnvalue: e3.returnValue, - component: e2.returnValue, - methodname: "type", - type: "GuildHeaderContextMenu" - }); - }}, {noCache: true}); + if (module) BDFDB.PatchUtils.patch(BDFDB, module, "type", {after: e2 => { + Internal.triggerQueuePatch("GuildHeaderContextMenu", { + arguments: e2.methodArguments, + instance: {props: e2.methodArguments[0]}, + returnvalue: e2.returnValue, + component: e.returnValue, + methodname: "type", + type: "GuildHeaderContextMenu" + }); }}); } }, 500); @@ -8214,15 +8207,14 @@ module.exports = (_ => { if (!e.instance.props.children || BDFDB.ArrayUtils.is(e.instance.props.children) && !e.instance.props.children.length) Internal.LibraryModules.ContextMenuUtils.closeContextMenu(); }; - Internal.processSearchBar = function (e) { if (typeof e.instance.props.query != "string") e.instance.props.query = ""; }; - + Internal.processSettingsView = function (e) { - if (e.node && e.node.parentElement && e.node.parentElement.getAttribute("aria-label") == BDFDB.DiscordConstants.Layers.USER_SETTINGS) Internal.addListObserver(e.node.parentElement); + if (e.node && e.node.parentElement && e.node.parentElement) Internal.addListObserver(e.node.parentElement); }; - + let AppViewExport = InternalData.ModuleUtilsConfig.Finder.AppView && BDFDB.ModuleUtils.findByString(InternalData.ModuleUtilsConfig.Finder.AppView.strings, false); if (AppViewExport) Internal.processShakeable = function (e) { let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {filter: n => { @@ -8233,10 +8225,6 @@ module.exports = (_ => { if (index > -1) children[index] = BDFDB.ReactUtils.createElement(AppViewExport.exports.default, children[index].props); }; - Internal.processAccount = function (e) { - Internal._processAvatarMount(e.instance.props.currentUser, e.node.querySelector(BDFDB.dotCN.avatarwrapper), e.node); - }; - Internal.processMessage = function (e) { if (e.returnvalue && e.returnvalue.props && e.returnvalue.props.children && e.returnvalue.props.children.props) { let message; @@ -8287,8 +8275,9 @@ module.exports = (_ => { }; const BDFDB_Patrons = Object.assign({}, InternalData.BDFDB_Patrons), BDFDB_Patron_Tiers = Object.assign({}, InternalData.BDFDB_Patron_Tiers); - Internal._processAvatarRender = function (user, avatar, className) { + Internal._processAvatarRender = function (user, avatar, wrapper, className) { if (BDFDB.ReactUtils.isValidElement(avatar) && BDFDB.ObjectUtils.is(user) && (avatar.props.className || "").indexOf(BDFDB.disCN.bdfdbbadgeavatar) == -1) { + if (wrapper) wrapper.props[InternalData.userIdAttribute] = user.id; avatar.props[InternalData.userIdAttribute] = user.id; let role = "", note = "", color, link, addBadge = Internal.settings.general.showSupportBadges; if (BDFDB_Patrons[user.id] && BDFDB_Patrons[user.id].active) { @@ -8355,9 +8344,8 @@ module.exports = (_ => { } } }; - Internal._processUserInfoNode = function (user, wrapper) { - if (!user || !wrapper) return; - if (InternalData.UserBackgrounds[user.id]) for (let property in InternalData.UserBackgrounds[user.id]) wrapper.style.setProperty(property, InternalData.UserBackgrounds[user.id][property], "important"); + Internal.processAccount = function (e) { + Internal._processAvatarMount(e.instance.props.currentUser, e.node.querySelector(BDFDB.dotCN.avatarwrapper), e.node); }; Internal.processMessageHeader = function (e) { if (e.instance.props.message && e.instance.props.message.author) { @@ -8366,7 +8354,7 @@ module.exports = (_ => { let renderChildren = avatarWrapper.props.children; avatarWrapper.props.children = BDFDB.TimeUtils.suppress((...args) => { let renderedChildren = renderChildren(...args); - return Internal._processAvatarRender(e.instance.props.message.author, renderedChildren, BDFDB.disCN.messageavatar) || renderedChildren; + return Internal._processAvatarRender(e.instance.props.message.author, renderedChildren, null, BDFDB.disCN.messageavatar) || renderedChildren; }, "Error in Avatar Render of MessageHeader!"); } else if (avatarWrapper && avatarWrapper.type == "img") e.returnvalue.props.children[0] = Internal._processAvatarRender(e.instance.props.message.author, avatarWrapper) || avatarWrapper; @@ -8382,10 +8370,18 @@ module.exports = (_ => { if (e.instance.props.section != BDFDB.DiscordConstants.AnalyticsSections.PROFILE_MODAL && e.instance.props.section != BDFDB.DiscordConstants.AnalyticsSections.PROFILE_POPOUT) return; const user = BDFDB.ReactUtils.findValue(e.instance, "user"); if (!user) return; + const avatar = e.instance.props.section != BDFDB.DiscordConstants.AnalyticsSections.PROFILE_POPOUT && e.node.querySelector(BDFDB.dotCN.avatarwrapper); const wrapper = e.node.querySelector(BDFDB.dotCNC.userpopout + BDFDB.dotCN.userprofile) || e.node; - const avatar = e.node.querySelector(BDFDB.dotCN.avatarwrapper); - if (avatar) Internal._processAvatarMount(user, e.instance.props.section == BDFDB.DiscordConstants.AnalyticsSections.PROFILE_POPOUT ? avatar.parentElement : avatar, wrapper); - Internal._processUserInfoNode(user, wrapper); + if (avatar) Internal._processAvatarMount(user, avatar, wrapper); + if (wrapper) { + wrapper.setAttribute(InternalData.userIdAttribute, user.id); + if (InternalData.UserBackgrounds[user.id]) for (let property in InternalData.UserBackgrounds[user.id]) wrapper.style.setProperty(property, InternalData.UserBackgrounds[user.id][property], "important"); + } + }; + Internal.processUserPopoutAvatar = function (e) { + if (!e.instance.props.user) return; + let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {props: [["className", BDFDB.disCN.userpopoutavatarwrapper]]}); + if (index > -1) children[index] = Internal._processAvatarRender(e.instance.props.user, children[index], null, e.instance) || children[index]; }; Internal.processPeopleListItem = function (e) { if (e.instance.props.user) e.node.setAttribute(InternalData.userIdAttribute, e.instance.props.user.id); @@ -8560,7 +8556,6 @@ module.exports = (_ => { } } while (removedTypes.length) delete PluginStores.chunkObserver[removedTypes.pop()]; - let found = false, funcString = exports && exports.default && typeof exports.default == "function" && exports.default.toString(); if (funcString && funcString.indexOf(".page") > -1 && funcString.indexOf(".section") > -1 && funcString.indexOf(".objectType") > -1) { const returnValue = exports.default({}); @@ -8622,7 +8617,7 @@ module.exports = (_ => { if (!InternalData.ModuleUtilsConfig.ContextMenuSubItemsMap[mappedType]) PluginStores.contextChunkObserver[type].filter = m => { if (!m || !(m.default || m.type)) return; const d = m.default || m.type; - if (d.displayName && d.displayName.endsWith("ContextMenu") && `${InternalData.ModuleUtilsConfig.ContextMenuTypes.find(t => d.displayName.indexOf(t) > -1)}ContextMenu` == type) { + if (d.displayName && (d.displayName.endsWith("ContextMenu") || d.displayName.endsWith("ContextMenuWrapper")) && `${InternalData.ModuleUtilsConfig.ContextMenuTypes.find(t => d.displayName.indexOf(t) > -1)}ContextMenu` == type) { m.__BDFDB_ContextMenu_Patch_Name = type; return true; } @@ -8657,7 +8652,7 @@ module.exports = (_ => { if (InternalData.ModuleUtilsConfig.QueuedComponents) for (let type of InternalData.ModuleUtilsConfig.QueuedComponents) if (!PluginStores.patchQueues[type]) PluginStores.patchQueues[type] = {query: [], modules: []}; let languageChangeTimeout; - if (Internal.LibraryModules.SettingsUtilsOld) BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.SettingsUtilsOld, ["updateRemoteSettings", "updateLocalSettings"], {after: e => { + BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.SettingsUtilsOld, ["updateRemoteSettings", "updateLocalSettings"], {after: e => { if (e.methodArguments[0] && e.methodArguments[0].locale) { BDFDB.TimeUtils.clear(languageChangeTimeout); languageChangeTimeout = BDFDB.TimeUtils.timeout(_ => { @@ -8665,6 +8660,12 @@ module.exports = (_ => { }, 10000); } }}); + BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.AppearanceSettingsUtils, "updateLocale", {after: e => { + BDFDB.TimeUtils.clear(languageChangeTimeout); + languageChangeTimeout = BDFDB.TimeUtils.timeout(_ => { + for (let pluginName in PluginStores.loaded) if (PluginStores.loaded[pluginName].started) BDFDB.PluginUtils.translate(PluginStores.loaded[pluginName]); + }, 10000); + }}); Internal.onSettingsClosed = function () { if (Internal.SettingsUpdated) { @@ -8785,26 +8786,6 @@ module.exports = (_ => { Internal.setDefaultProps(Internal.LibraryComponents.GuildComponents.BlobMask, extraDefaultProps); } - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.GuildStore, "getGuild", {after: e => { - if (e.returnValue && e.methodArguments[0] == InternalData.myGuildId) e.returnValue.banner = `https://mwittrien.github.io/BetterDiscordAddons/Library/_res/BDFDB.banner.png`; - }}); - - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.UserStore, "getUser", {after: e => { - if (e.returnValue && e.methodArguments[0] == InternalData.myId) e.returnValue.banner = `https://mwittrien.github.io/BetterDiscordAddons/Library/_res/DevilBro.banner.png`; - }}); - - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.IconUtils, "getGuildBannerURL", {instead: e => { - return e.methodArguments[0].id == InternalData.myGuildId ? e.methodArguments[0].banner : e.callOriginalMethod(); - }}); - - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.IconUtils, "getUserBannerURL", {instead: e => { - return e.methodArguments[0].id == InternalData.myId ? e.methodArguments[0].banner : e.callOriginalMethod(); - }}); - - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.BannerUtils, "getUserBannerURLForContext", {instead: e => { - return e.methodArguments[0].user && e.methodArguments[0].user.id == InternalData.myId ? e.methodArguments[0].user.banner : e.callOriginalMethod(); - }}); - BDFDB.PatchUtils.patch(BDFDB, Internal.LibraryModules.EmojiStateUtils, "getEmojiUnavailableReason", {after: e => { if (Internal.LibraryComponents.EmojiPickerButton.current && Internal.LibraryComponents.EmojiPickerButton.current.props && Internal.LibraryComponents.EmojiPickerButton.current.props.allowManagedEmojisUsage) return null; }}); @@ -9128,17 +9109,11 @@ module.exports = (_ => { }) }), onClick: _ => { - let loadingString = `${BDFDB.LanguageUtils.LanguageStrings.CHECKING_FOR_UPDATES} - ${BDFDB.LanguageUtils.LibraryStrings.please_wait}`; - let currentLoadingString = loadingString; - let toastInterval, toast = BDFDB.NotificationUtils.toast(loadingString, { + let toast = BDFDB.NotificationUtils.toast(`${BDFDB.LanguageUtils.LanguageStrings.CHECKING_FOR_UPDATES} - ${BDFDB.LanguageUtils.LibraryStrings.please_wait}`, { type: "info", timeout: 0, - onClose: _ => BDFDB.TimeUtils.clear(toastInterval) + ellipsis: true }); - toastInterval = BDFDB.TimeUtils.interval(_ => { - currentLoadingString = currentLoadingString.endsWith(".....") ? loadingString : currentLoadingString + "."; - toast.update(currentLoadingString); - }, 500); BDFDB.PluginUtils.checkAllUpdates().then(outdated => { toast.close(); if (outdated > 0) BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LibraryStringsFormat("update_check_complete_outdated", outdated), { diff --git a/Plugins/TimedLightDarkMode/TimedLightDarkMode.plugin.js b/Plugins/TimedLightDarkMode/TimedLightDarkMode.plugin.js index df47372456..5b83de12cc 100644 --- a/Plugins/TimedLightDarkMode/TimedLightDarkMode.plugin.js +++ b/Plugins/TimedLightDarkMode/TimedLightDarkMode.plugin.js @@ -2,7 +2,7 @@ * @name TimedLightDarkMode * @author DevilBro * @authorId 278543574059057154 - * @version 1.1.2 + * @version 1.1.3 * @description Adds a Time Slider to the Appearance Settings * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -17,7 +17,7 @@ module.exports = (_ => { "info": { "name": "TimedLightDarkMode", "author": "DevilBro", - "version": "1.1.2", + "version": "1.1.3", "description": "Adds a Time Slider to the Appearance Settings" } }; @@ -92,6 +92,16 @@ module.exports = (_ => { }, 1000*60*10); } }}); + + BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.AppearanceSettingsUtils, "updateTheme", {after: e => { + if (settings.running) { + BDFDB.TimeUtils.clear(changeTimeout); + disableChanging = true; + changeTimeout = BDFDB.TimeUtils.timeout(_ => { + disableChanging = false; + }, 1000*60*10); + } + }}); this.startInterval(); @@ -171,9 +181,10 @@ module.exports = (_ => { } changeTheme (dark) { - let theme = BDFDB.DiscordUtils.getTheme(); - if (dark && theme == BDFDB.disCN.themelight) BDFDB.LibraryModules.SettingsUtilsOld.updateLocalSettings({theme: "dark"}); - else if (!dark && theme == BDFDB.disCN.themedark) BDFDB.LibraryModules.SettingsUtilsOld.updateLocalSettings({theme: "light"}); + let theme = BDFDB.DiscordUtils.getTheme(), newTheme = null; + if (dark && theme == BDFDB.disCN.themelight) newTheme = "dark"; + else if (!dark && theme == BDFDB.disCN.themedark) newTheme = "light"; + if (newTheme) BDFDB.LibraryModules.SettingsUtilsOld && BDFDB.LibraryModules.SettingsUtilsOld.updateLocalSettings({theme: newTheme}) || BDFDB.LibraryModules.AppearanceSettingsUtils.updateTheme(newTheme); } showCurrentTime (grabber) {