From cd113940e5941bbde0c9e3ecc6ddd9b5722b7162 Mon Sep 17 00:00:00 2001 From: 1Lighty Date: Thu, 29 Oct 2020 21:52:10 +0100 Subject: [PATCH] UBR v1.0.9 --- Plugins/UnreadBadgesRedux/CHANGELOG.md | 3 + .../UnreadBadgesRedux.plugin.js | 327 ++++++++---------- 2 files changed, 156 insertions(+), 174 deletions(-) diff --git a/Plugins/UnreadBadgesRedux/CHANGELOG.md b/Plugins/UnreadBadgesRedux/CHANGELOG.md index 5e67cd5..bb65c20 100644 --- a/Plugins/UnreadBadgesRedux/CHANGELOG.md +++ b/Plugins/UnreadBadgesRedux/CHANGELOG.md @@ -1,4 +1,7 @@ # [UnreadBadgesRedux](https://1lighty.github.io/BetterDiscordStuff/?plugin=UnreadBadgesRedux "UnreadBadgesRedux") Changelog +### 1.0.9 +- Fixed not working on channels. + ### 1.0.8 - Fixed not working on channels. diff --git a/Plugins/UnreadBadgesRedux/UnreadBadgesRedux.plugin.js b/Plugins/UnreadBadgesRedux/UnreadBadgesRedux.plugin.js index 70ad480..1dc737f 100644 --- a/Plugins/UnreadBadgesRedux/UnreadBadgesRedux.plugin.js +++ b/Plugins/UnreadBadgesRedux/UnreadBadgesRedux.plugin.js @@ -2,24 +2,24 @@ /*@cc_on @if (@_jscript) - // Offer to self-install for clueless users that try to run this directly. - var shell = WScript.CreateObject('WScript.Shell'); - var fs = new ActiveXObject('Scripting.FileSystemObject'); - var pathPlugins = shell.ExpandEnvironmentStrings('%APPDATA%\\BetterDiscord\\plugins'); - var pathSelf = WScript.ScriptFullName; - // Put the user at ease by addressing them in the first person - shell.Popup('It looks like you\'ve mistakenly tried to run me directly. \n(Don\'t do that!)', 0, 'I\'m a plugin for BetterDiscord', 0x30); - if (fs.GetParentFolderName(pathSelf) === fs.GetAbsolutePathName(pathPlugins)) { - shell.Popup('I\'m in the correct folder already.\nJust go to settings, plugins and enable me.', 0, 'I\'m already installed', 0x40); - } else if (!fs.FolderExists(pathPlugins)) { - shell.Popup('I can\'t find the BetterDiscord plugins folder.\nAre you sure it\'s even installed?', 0, 'Can\'t install myself', 0x10); - } else if (shell.Popup('Should I copy myself to BetterDiscord\'s plugins folder for you?', 0, 'Do you need some help?', 0x34) === 6) { - fs.CopyFile(pathSelf, fs.BuildPath(pathPlugins, fs.GetFileName(pathSelf)), true); - // Show the user where to put plugins in the future - shell.Exec('explorer ' + pathPlugins); - shell.Popup('I\'m installed!\nJust go to settings, plugins and enable me!', 0, 'Successfully installed', 0x40); - } - WScript.Quit(); + // Offer to self-install for clueless users that try to run this directly. + var shell = WScript.CreateObject('WScript.Shell'); + var fs = new ActiveXObject('Scripting.FileSystemObject'); + var pathPlugins = shell.ExpandEnvironmentStrings('%APPDATA%\\BetterDiscord\\plugins'); + var pathSelf = WScript.ScriptFullName; + // Put the user at ease by addressing them in the first person + shell.Popup('It looks like you\'ve mistakenly tried to run me directly. \n(Don\'t do that!)', 0, 'I\'m a plugin for BetterDiscord', 0x30); + if (fs.GetParentFolderName(pathSelf) === fs.GetAbsolutePathName(pathPlugins)) { + shell.Popup('I\'m in the correct folder already.\nJust go to settings, plugins and enable me.', 0, 'I\'m already installed', 0x40); + } else if (!fs.FolderExists(pathPlugins)) { + shell.Popup('I can\'t find the BetterDiscord plugins folder.\nAre you sure it\'s even installed?', 0, 'Can\'t install myself', 0x10); + } else if (shell.Popup('Should I copy myself to BetterDiscord\'s plugins folder for you?', 0, 'Do you need some help?', 0x34) === 6) { + fs.CopyFile(pathSelf, fs.BuildPath(pathPlugins, fs.GetFileName(pathSelf)), true); + // Show the user where to put plugins in the future + shell.Exec('explorer ' + pathPlugins); + shell.Popup('I\'m installed!\nJust go to settings, plugins and enable me!', 0, 'Successfully installed', 0x40); + } + WScript.Quit(); @else@*/ /* @@ -41,7 +41,7 @@ module.exports = (() => { twitter_username: '' } ], - version: '1.0.8', + version: '1.0.9', description: 'Adds a number badge to server icons and channels.', github: 'https://github.com/1Lighty', github_raw: 'https://raw.githubusercontent.com/1Lighty/BetterDiscordPlugins/master/Plugins/UnreadBadgesRedux/UnreadBadgesRedux.plugin.js' @@ -50,7 +50,7 @@ module.exports = (() => { { title: 'fixed', type: 'fixed', - items: ['Fixed not working on channels.'] + items: ['Fixed not working on channels, again.'] } ], defaultConfig: [ @@ -246,12 +246,12 @@ module.exports = (() => { XenoLib.Notifications.error(`[**${this.name}**] Failed to start! Please update it, press CTRL + R, or ${GuildStore.getGuild(XenoLib.supportServerId) ? 'go to <#639665366380838924>' : '[join my support server](https://discord.gg/NYvWdN5)'} for further assistance.`, { timeout: 0 }); try { this.onStop(); - } catch (e) {} + } catch (e) { } } }; try { ModalStack.popWithKey(`${this.name}_DEP_MODAL`); - } catch (e) {} + } catch (e) { } } onStart() { this.promises = { state: { cancelled: false } }; @@ -311,13 +311,10 @@ module.exports = (() => { } async patchChannelItem(promiseState) { - const selector = `.${XenoLib.getSingleClass('modeUnread wrapper', true)}`; - const ChannelItem = await ReactComponents.getComponentByName('ChannelItem', selector); - if (!ChannelItem.selector) ChannelItem.selector = selector; + const TextChannel = await ReactComponents.getComponentByName('TextChannel', `.${XenoLib.getSingleClass('mentionsBadge containerDefault')}`); if (promiseState.cancelled) return; const settings = this.settings; const MentionsBadgeClassname = XenoLib.getClass('iconVisibility mentionsBadge'); - const IconsChildren = XenoLib.getClass('modeMuted children'); function UnreadBadge(e) { const unreadCount = StoresModule.useStateFromStores([UnreadStore], () => { if ((e.muted && !settings.misc.mutedChannels) || !settings.misc.channels) return 0; @@ -334,30 +331,13 @@ module.exports = (() => { BadgesModule.NumberBadge({ count: unreadCount, color: e.muted ? ColorConverter.darkenColor(settings.misc.backgroundColor, settings.misc.mutedChannelBadgeDarkness * 100) : settings.misc.backgroundColor, style: { color: e.muted ? ColorConverter.darkenColor(settings.misc.textColor, settings.misc.mutedChannelBadgeDarkness * 100) : settings.misc.textColor } }) ); } - Patcher.after(ChannelItem.component.prototype, 'renderIcons', (_this, args, ret) => { + Patcher.after(TextChannel.component.prototype, 'render', (_this, _, ret) => { + const props = Utilities.findInReactTree(ret, e => e && Array.isArray(e.children) && e.children.find(e => e && e.type && e.type.displayName === 'ConnectedEditButton')); + if (!props || !props.children) return; const badge = React.createElement(UnreadBadge, { channelId: _this.props.channel.id, muted: _this.props.muted && !_this.props.selected }); - if (!ret) { - return React.createElement( - 'div', - { - onClick: e => e.stopPropagation(), - className: IconsChildren - }, - badge - ); - } - /* children is a refernce to the children prop within the component, which is bad - so appending it without slicing first would append it to the components props - children array - */ - const props = Utilities.findInReactTree(ret, e => Array.isArray(e.children) && e.children.find(e => e && e.type && e.type.displayName === 'ConnectedEditButton')); - if (!props) return; - const buttons = props.children.slice(0); - if (!buttons) return; - buttons.splice(this.settings.misc.channelsDisplayOnLeft ? 0 : 2, 0, badge); - props.children = buttons; + props.children.splice(this.settings.misc.channelsDisplayOnLeft ? 0 : 2, 0, badge); }); - ChannelItem.forceUpdateAll(); + TextChannel.forceUpdateAll(); } async patchGuildFolder(promiseState) { @@ -594,7 +574,7 @@ module.exports = (() => { n = (n, e) => n && n._config && n._config.info && n._config.info.version && i(n._config.info.version, e), e = BdApi.getPlugin('ZeresPluginLibrary'), o = BdApi.getPlugin('XenoLib'); - n(e, '1.2.23') && (ZeresPluginLibraryOutdated = !0), n(o, '1.3.26') && (XenoLibOutdated = !0); + n(e, '1.2.14') && (ZeresPluginLibraryOutdated = !0), n(o, '1.3.17') && (XenoLibOutdated = !0); } } catch (i) { console.error('Error checking if libraries are out of date', i); @@ -602,132 +582,131 @@ module.exports = (() => { return !global.ZeresPluginLibrary || !global.XenoLib || ZeresPluginLibraryOutdated || XenoLibOutdated ? class { - constructor() { - this._XL_PLUGIN = true; - this.start = this.load = this.handleMissingLib; - } - getName() { - return this.name.replace(/\s+/g, ''); - } - getAuthor() { - return this.author; - } - getVersion() { - return this.version; - } - getDescription() { - return this.description + ' You are missing libraries for this plugin, please enable the plugin and click Download Now.'; - } - start() {} - stop() {} - handleMissingLib() { - const a = BdApi.findModuleByProps('openModal', 'hasModalOpen'); - if (a && a.hasModalOpen(`${this.name}_DEP_MODAL`)) return; - const b = !global.XenoLib, - c = !global.ZeresPluginLibrary, - d = (b && c) || ((b || c) && (XenoLibOutdated || ZeresPluginLibraryOutdated)), - e = (() => { - let a = ''; - return b || c ? (a += `Missing${XenoLibOutdated || ZeresPluginLibraryOutdated ? ' and outdated' : ''} `) : (XenoLibOutdated || ZeresPluginLibraryOutdated) && (a += `Outdated `), (a += `${d ? 'Libraries' : 'Library'} `), a; - })(), - f = (() => { - let a = `The ${d ? 'libraries' : 'library'} `; - return b || XenoLibOutdated ? ((a += 'XenoLib '), (c || ZeresPluginLibraryOutdated) && (a += 'and ZeresPluginLibrary ')) : (c || ZeresPluginLibraryOutdated) && (a += 'ZeresPluginLibrary '), (a += `required for ${this.name} ${d ? 'are' : 'is'} ${b || c ? 'missing' : ''}${XenoLibOutdated || ZeresPluginLibraryOutdated ? (b || c ? ' and/or outdated' : 'outdated') : ''}.`), a; - })(), - g = BdApi.findModuleByDisplayName('Text'), - h = BdApi.findModuleByDisplayName('ConfirmModal'), - i = () => BdApi.alert(e, BdApi.React.createElement('span', {}, BdApi.React.createElement('div', {}, f), `Due to a slight mishap however, you'll have to download the libraries yourself. This is not intentional, something went wrong, errors are in console.`, c || ZeresPluginLibraryOutdated ? BdApi.React.createElement('div', {}, BdApi.React.createElement('a', { href: 'https://betterdiscord.net/ghdl?id=2252', target: '_blank' }, 'Click here to download ZeresPluginLibrary')) : null, b || XenoLibOutdated ? BdApi.React.createElement('div', {}, BdApi.React.createElement('a', { href: 'https://betterdiscord.net/ghdl?id=3169', target: '_blank' }, 'Click here to download XenoLib')) : null)); - if (!a || !h || !g) return console.error(`Missing components:${(a ? '' : ' ModalStack') + (h ? '' : ' ConfirmationModalComponent') + (g ? '' : 'TextElement')}`), i(); - class j extends BdApi.React.PureComponent { - constructor(a) { - super(a), (this.state = { hasError: !1 }), (this.componentDidCatch = a => (console.error(`Error in ${this.props.label}, screenshot or copy paste the error above to Lighty for help.`), this.setState({ hasError: !0 }), 'function' == typeof this.props.onError && this.props.onError(a))), (this.render = () => (this.state.hasError ? null : this.props.children)); - } - } - let k = !1, - l = !1; - const m = a.openModal( - b => { - if (l) return null; - try { - return BdApi.React.createElement( - j, - { label: 'missing dependency modal', onError: () => (a.closeModal(m), i()) }, - BdApi.React.createElement( - h, - Object.assign( - { - header: e, - children: BdApi.React.createElement(g, { size: g.Sizes.SIZE_16, children: [`${f} Please click Download Now to download ${d ? 'them' : 'it'}.`] }), - red: !1, - confirmText: 'Download Now', - cancelText: 'Cancel', - onCancel: b.onClose, - onConfirm: () => { - if (k) return; - k = !0; - const b = require('request'), - c = require('fs'), - d = require('path'), - e = BdApi.Plugins && BdApi.Plugins.folder ? BdApi.Plugins.folder : window.ContentManager.pluginsFolder, - f = () => { - (global.XenoLib && !XenoLibOutdated) || - b('https://raw.githubusercontent.com/1Lighty/BetterDiscordPlugins/master/Plugins/1XenoLib.plugin.js', (b, f, g) => { - try { - if (b || 200 !== f.statusCode) return a.closeModal(m), i(); - c.writeFile(d.join(e, '1XenoLib.plugin.js'), g, () => {}); - } catch (b) { - console.error('Fatal error downloading XenoLib', b), a.closeModal(m), i(); - } - }); - }; - !global.ZeresPluginLibrary || ZeresPluginLibraryOutdated - ? b('https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js', (b, g, h) => { - try { - if (b || 200 !== g.statusCode) return a.closeModal(m), i(); - c.writeFile(d.join(e, '0PluginLibrary.plugin.js'), h, () => {}), f(); - } catch (b) { - console.error('Fatal error downloading ZeresPluginLibrary', b), a.closeModal(m), i(); - } - }) - : f(); - } - }, - b, - { onClose: () => {} } - ) - ) - ); - } catch (b) { - return console.error('There has been an error constructing the modal', b), (l = !0), a.closeModal(m), i(), null; - } - }, - { modalKey: `${this.name}_DEP_MODAL` } - ); - } - get [Symbol.toStringTag]() { - return 'Plugin'; - } - get name() { - return config.info.name; - } - get short() { - let string = ''; - for (let i = 0, len = config.info.name.length; i < len; i++) { - const char = config.info.name[i]; - if (char === char.toUpperCase()) string += char; - } - return string; - } - get author() { - return config.info.authors.map(author => author.name).join(', '); - } - get version() { - return config.info.version; - } - get description() { - return config.info.description; - } + constructor() { + this._XL_PLUGIN = true; + this.start = this.load = this.handleMissingLib; } + getName() { + return this.name.replace(/\s+/g, ''); + } + getAuthor() { + return this.author; + } + getVersion() { + return this.version; + } + getDescription() { + return this.description + ' You are missing libraries for this plugin, please enable the plugin and click Download Now.'; + } + stop() { } + handleMissingLib() { + const a = BdApi.findModuleByProps('openModal', 'hasModalOpen'); + if (a && a.hasModalOpen(`${this.name}_DEP_MODAL`)) return; + const b = !global.XenoLib, + c = !global.ZeresPluginLibrary, + d = (b && c) || ((b || c) && (XenoLibOutdated || ZeresPluginLibraryOutdated)), + e = (() => { + let a = ''; + return b || c ? (a += `Missing${XenoLibOutdated || ZeresPluginLibraryOutdated ? ' and outdated' : ''} `) : (XenoLibOutdated || ZeresPluginLibraryOutdated) && (a += `Outdated `), (a += `${d ? 'Libraries' : 'Library'} `), a; + })(), + f = (() => { + let a = `The ${d ? 'libraries' : 'library'} `; + return b || XenoLibOutdated ? ((a += 'XenoLib '), (c || ZeresPluginLibraryOutdated) && (a += 'and ZeresPluginLibrary ')) : (c || ZeresPluginLibraryOutdated) && (a += 'ZeresPluginLibrary '), (a += `required for ${this.name} ${d ? 'are' : 'is'} ${b || c ? 'missing' : ''}${XenoLibOutdated || ZeresPluginLibraryOutdated ? (b || c ? ' and/or outdated' : 'outdated') : ''}.`), a; + })(), + g = BdApi.findModuleByDisplayName('Text'), + h = BdApi.findModuleByDisplayName('ConfirmModal'), + i = () => BdApi.alert(e, BdApi.React.createElement('span', {}, BdApi.React.createElement('div', {}, f), `Due to a slight mishap however, you'll have to download the libraries yourself. This is not intentional, something went wrong, errors are in console.`, c || ZeresPluginLibraryOutdated ? BdApi.React.createElement('div', {}, BdApi.React.createElement('a', { href: 'https://betterdiscord.net/ghdl?id=2252', target: '_blank' }, 'Click here to download ZeresPluginLibrary')) : null, b || XenoLibOutdated ? BdApi.React.createElement('div', {}, BdApi.React.createElement('a', { href: 'https://betterdiscord.net/ghdl?id=3169', target: '_blank' }, 'Click here to download XenoLib')) : null)); + if (!a || !h || !g) return console.error(`Missing components:${(a ? '' : ' ModalStack') + (h ? '' : ' ConfirmationModalComponent') + (g ? '' : 'TextElement')}`), i(); + class j extends BdApi.React.PureComponent { + constructor(a) { + super(a), (this.state = { hasError: !1 }), (this.componentDidCatch = a => (console.error(`Error in ${this.props.label}, screenshot or copy paste the error above to Lighty for help.`), this.setState({ hasError: !0 }), 'function' == typeof this.props.onError && this.props.onError(a))), (this.render = () => (this.state.hasError ? null : this.props.children)); + } + } + let k = !1, + l = !1; + const m = a.openModal( + b => { + if (l) return null; + try { + return BdApi.React.createElement( + j, + { label: 'missing dependency modal', onError: () => (a.closeModal(m), i()) }, + BdApi.React.createElement( + h, + Object.assign( + { + header: e, + children: BdApi.React.createElement(g, { size: g.Sizes.SIZE_16, children: [`${f} Please click Download Now to download ${d ? 'them' : 'it'}.`] }), + red: !1, + confirmText: 'Download Now', + cancelText: 'Cancel', + onCancel: b.onClose, + onConfirm: () => { + if (k) return; + k = !0; + const b = require('request'), + c = require('fs'), + d = require('path'), + e = BdApi.Plugins && BdApi.Plugins.folder ? BdApi.Plugins.folder : window.ContentManager.pluginsFolder, + f = () => { + (global.XenoLib && !XenoLibOutdated) || + b('https://raw.githubusercontent.com/1Lighty/BetterDiscordPlugins/master/Plugins/1XenoLib.plugin.js', (b, f, g) => { + try { + if (b || 200 !== f.statusCode) return a.closeModal(m), i(); + c.writeFile(d.join(e, '1XenoLib.plugin.js'), g, () => { }); + } catch (b) { + console.error('Fatal error downloading XenoLib', b), a.closeModal(m), i(); + } + }); + }; + !global.ZeresPluginLibrary || ZeresPluginLibraryOutdated + ? b('https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js', (b, g, h) => { + try { + if (b || 200 !== g.statusCode) return a.closeModal(m), i(); + c.writeFile(d.join(e, '0PluginLibrary.plugin.js'), h, () => { }), f(); + } catch (b) { + console.error('Fatal error downloading ZeresPluginLibrary', b), a.closeModal(m), i(); + } + }) + : f(); + } + }, + b, + { onClose: () => { } } + ) + ) + ); + } catch (b) { + return console.error('There has been an error constructing the modal', b), (l = !0), a.closeModal(m), i(), null; + } + }, + { modalKey: `${this.name}_DEP_MODAL` } + ); + } + get [Symbol.toStringTag]() { + return 'Plugin'; + } + get name() { + return config.info.name; + } + get short() { + let string = ''; + for (let i = 0, len = config.info.name.length; i < len; i++) { + const char = config.info.name[i]; + if (char === char.toUpperCase()) string += char; + } + return string; + } + get author() { + return config.info.authors.map(author => author.name).join(', '); + } + get version() { + return config.info.version; + } + get description() { + return config.info.description; + } + } : buildPlugin(global.ZeresPluginLibrary.buildPlugin(config)); })();