<|start_filename|>Plugins/RemoveStartupToasts/ZZRemoveStartupToasts.plugin.js<|end_filename|>
/**
* @name RemoveStartupToasts
* @displayName RemoveStartupToasts
* @description Removes addon loading toasts when starting BetterDiscord.
* @author Qb
* @authorId 133659541198864384
* @version 1.0.1
* @invite gj7JFa6mF8
* @source https://github.com/QbDesu/BetterDiscordAddons/blob/potato/Plugins/RemoveStartupToasts
* @updateUrl https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/RemoveStartupToasts/ZZRemoveStartupToasts.plugin.js
*/
/*@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.", 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!", 0, "Successfully installed", 0x40);
}
WScript.Quit();

@else@*/

module.exports = (() => {
    const config = {
        info: {
            name: "RemoveStartupToasts",
            version: "1.0.1",
            github_raw: "https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/RemoveStartupToasts/ZZRemoveStartupToasts.plugin.js"
        }
    };
    return !global.ZeresPluginLibrary ? class {
        constructor() { this._config = config; }
        load() {
            BdApi.showConfirmationModal("Library plugin is needed", 
            [`The library plugin needed for ${config.info.name} is missing. Please click Download Now to install it.`], {
                confirmText: "Download",
                cancelText: "Cancel",
                onConfirm: () => {
                    require("request").get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", async (error, response, body) => {
                    if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
                    await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
                });
            }
        });
    }
    start() { }
    stop() { }
}
: (([Plugin, Api]) => {
    const plugin = (Plugin, Api) => {
        return class PanelPopout extends Plugin {
            constructor() {
                super();
                // remove need for duplication of metadata fields
                this.getAuthor = null;
                this.getDescription = null;
            }
            
            onStart() {
                window.setTimeout(()=>document.querySelectorAll('.bd-toast').forEach(e=>e.remove()),0);
            }
        };
    };
    return plugin(Plugin, Api);
})(global.ZeresPluginLibrary.buildPlugin(config));
})();
/*@end@*/


<|start_filename|>Plugins/HideChatButtons/HideChatButtons.plugin.js<|end_filename|>
/**
* @name HideChatButtons
* @displayName HideChatButtons
* @description Remove annoying buttons like the Gift button from the chat box.
* @author Qb
* @authorId 133659541198864384
* @version 1.1.0
* @invite gj7JFa6mF8
* @source https://github.com/QbDesu/BetterDiscordAddons/blob/potato/Plugins/HideChatButtons
* @updateUrl https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/HideChatButtons/HideChatButtons.plugin.js
*/
/*@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.", 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!", 0, "Successfully installed", 0x40);
    }
    WScript.Quit();

@else@*/

module.exports = (() => {
    const config = {
        info: {
            name: "HideChatButtons",
            authors: [
                {
                    name: "Qb",
                    discord_id: "133659541198864384",
                    github_username: "QbDesu"
                }
            ],
            version: "1.1.0",
            description: "Remove annoying buttons like the Gift button from the chat box.",
            github: "https://github.com/QbDesu/BetterDiscordAddons/blob/potato/Plugins/HideChatButtons",
            github_raw: "https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/HideChatButtons/HideChatButtons.plugin.js"
        },
        defaultConfig: [
            {
                type: "switch",
                id: "giftButton",
                name: "Remove Gift Button",
                note: "Removes the Gift Nitro button from the chat.",
                value: true,
            },
            {
                type: "switch",
                id: "gifButton",
                name: "Remove GIF Button",
                note: "Removes the GIF button from the chat.",
                value: true,
            },
            {
                type: "switch",
                id: "stickerButton",
                name: "Remove Sticker Button",
                note: "Removes the Sticker button from the chat.",
                value: true,
            },
            {
                type: "switch",
                id: "emojiButton",
                name: "Remove Emoji Button",
                note: "Removes the Emoji button from the chat.",
                value: false,
            },
            {
                type: "switch",
                id: "attachButton",
                name: "Attach Button",
                note: "Removes the Attach button from the chat.",
                value: false,
            },
            {
                type: "switch",
                id: "cssOnly",
                name: "CSS-Only Mode",
                note: "This is useful in case there is incompatibilities with plugins or themes.",
                value: false,
            }
        ],
        changelog: [
            { title: "Features", type: "added", items: ["Added CSS-Only Mode to the config options"] },
            { title: "Changes", type: "changes", items: ["Refactored logic for hiding most buttons."] }
        ]
    };
    return !global.ZeresPluginLibrary ? class {
        constructor() { this._config = config; }
        load() {
            BdApi.showConfirmationModal("Library plugin is needed", 
            [`The library plugin needed for ${config.info.name} is missing. Please click Download Now to install it.`], {
                confirmText: "Download",
                cancelText: "Cancel",
                onConfirm: () => {
                    require("request").get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", async (error, response, body) => {
                    if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
                    await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
                });
            }
        });
    }
    start() { }
    stop() { }
}
: (([Plugin, Api]) => {
        const plugin = (Plugin, Api) => {
            const {
                Patcher,
                DOMTools,
                WebpackModules,
                PluginUtilities,
                Logger,
                DiscordModules
            } = Api;

            // thanks to Strencher for pointing out these modules
            const ChannelTextAreaContainer = WebpackModules.find(m => m?.type?.render?.displayName === "ChannelTextAreaContainer")?.type;
            //const ChannelPremiumGiftButton = WebpackModules.find(m => m.type.displayName === "ChannelPremiumGiftButton")?.type;
            const ChannelGIFPickerButton = WebpackModules.find(m => m.type.render.displayName === "ChannelGIFPickerButton")?.type;
            const ChannelEmojiPicker = WebpackModules.find(m => m.type.render.displayName === "ChannelEmojiPicker")?.type;
            const ChannelStickerPickerButton = WebpackModules.find(m => m.type.render.displayName === "ChannelStickerPickerButton")?.type;

            const buttonClasses = WebpackModules.getByProps("emojiButton", "stickerButton");
            const channelTextAreaSelector = new DOMTools.Selector(buttonClasses.channelTextArea);
            const emojiButtonSelector = new DOMTools.Selector(buttonClasses.emojiButton);
            const stickerButtonSelector = new DOMTools.Selector(buttonClasses.stickerButton);
            const attachButtonSelector = new DOMTools.Selector(buttonClasses.attachButton);
            const getCssKey = name => `${config.info.name}--${name}`;
            const getCssRule = child => `${channelTextAreaSelector} ${child} { display: none; }`;
            
            return class HideChatButtons extends Plugin {
                hideGiftKey = getCssKey("hideGiftButton");
                hideGifKey = getCssKey("hideGifButton");
                hideEmojiKey = getCssKey("hideEmojiButton");
                hideStickerKey = getCssKey("hideStickerButton");
                hideAttachKey = getCssKey("hideAttachButton");
                //
                hideEmojiButtonCss = getCssRule(emojiButtonSelector);
                hideStickerButtonCss = getCssRule(stickerButtonSelector);
                hideAttachButtonCss = getCssRule(attachButtonSelector);
                
                addStyles() {
                    if(this.settings.cssOnly){
                        if (this.settings.giftButton) {
                            PluginUtilities.addStyle(
                                this.hideGiftKey,
                                getCssRule(`[aria-label="${DiscordModules.Strings.PREMIUM_GIFT_BUTTON_LABEL}"]`)
                            )
                        }
                        if (this.settings.gifButton) {
                            PluginUtilities.addStyle(
                                this.hideGifKey,
                                getCssRule(`[aria-label="${DiscordModules.Strings.GIF_BUTTON_LABEL}"]`)
                            )
                        }
                        if (this.settings.emojiButton) PluginUtilities.addStyle(this.hideEmojiKey, this.hideEmojiButtonCss);
                        if (this.settings.stickerButton) PluginUtilities.addStyle(this.hideStickerKey, this.hideStickerButtonCss);
                        if (this.settings.attachButton) PluginUtilities.addStyle(this.hideAttachKey, this.hideAttachButtonCss);
                    }
                }
                
                patch() {
                    Patcher.before(ChannelTextAreaContainer, "render", (_, [props]) => {
                        if (!this.settings.cssOnly && this.settings.giftButton) props.shouldRenderPremiumGiftButton = false;
                        if (!this.settings.cssOnly && this.settings.attachButton) props.renderAttachButton = () => {};
                    });
                    Patcher.after(ChannelGIFPickerButton, "render", (_, args, ret) => {
                        return !this.settings.cssOnly && this.settings.gifButton ? null : ret;
                    });
                    Patcher.after(ChannelEmojiPicker, "render", (_, args, ret) => {
                        return !this.settings.cssOnly && this.settings.emojiButton ? null : ret;
                    });
                    Patcher.after(ChannelStickerPickerButton, "render", (_, args, ret) => {
                        return !this.settings.cssOnly && this.settings.stickerButton ? null : ret;
                    });
                }

                cleanup() {
                    Patcher.unpatchAll();
                    this.removeStyles();
                }
                
                removeStyles() {
                    PluginUtilities.removeStyle(this.hideGiftKey);
                    PluginUtilities.removeStyle(this.hideGifKey);
                    PluginUtilities.removeStyle(this.hideEmojiKey);
                    PluginUtilities.removeStyle(this.hideStickerKey);
                    PluginUtilities.removeStyle(this.hideAttachKey);
                }

                onStart() {
                    try{
                        this.patch();
                    } catch(e) {
                        Toasts.warn(`${config.info.name}: An error occured during intialiation, falling back to CSS-Only mode.`);
                        Logger.error(`Error while patching: ${e}`);
                        console.error(e);
                        this.settings.cssOnly = true;
                        Patcher.unpatchAll();
                    }
                    this.addStyles();
                }
                
                onStop() {
                    this.cleanup();
                }
            
                getSettingsPanel() {
                    const panel = this.buildSettingsPanel();
                    panel.addListener(() => {
                        this.removeStyles();
                        this.addStyles();
                    });
                    return panel.getElement();
                }
            };
        };
        return plugin(Plugin, Api);
    })(global.ZeresPluginLibrary.buildPlugin(config));
})();
/*@end@*/


<|start_filename|>Themes/ResizableSidebars/ResizableSidebars.theme.css<|end_filename|>
/**
 * @name Resizable Sidebars
 * @description Allows resizing the channel/DM list, search results, and server member list
 * @author Qb
 * @version 1.0.0
 * @authorLink https://github.com/QbDesu
 * @authorId 133659541198864384
 * @source https://github.com/QbDesu/BetterDiscordAddons/ResizableSidebars/
 * @updateUrl https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Themes/ResizableSidebars/ResizableSidebars.theme.css
 * @invite gj7JFa6mF8
 */

:root {
    --sidebar-initial-width: 240px;
    --memberlist-initial-width: 240px;
    --searchresults-initial-width: 418px;
}

/* Channels/DMs List */

.sidebar-2K8pFh {
    resize: horizontal;
    width: var(--sidebar-initial-width);
}

.sidebar-2K8pFh .channel-2QD9_O {
    max-width: unset;
}

.bannerImage-3KhIJ6 {
    width: 100%;
}

/* Server Members */

.membersWrap-2h-GB4 {
    min-width: 8px;
}

.membersWrap-2h-GB4 .members-1998pB {
    resize: horizontal;
    direction: rtl;
    width: var(--memberlist-initial-width);
}

.membersWrap-2h-GB4 .members-1998pB > * {
    direction: ltr;
}

.membersWrap-2h-GB4 .members-1998pB .content-3YMskv {
    margin-left: -8px;
}

.membersWrap-2h-GB4 .members-1998pB .content-3YMskv .member-3-YXUe {
    max-width: unset;
}

/* Search Results */

.searchResultsWrap-3-pOjs {
    width: var(--searchresults-initial-width);
    resize: horizontal;
    direction: rtl;
}
.searchResultsWrap-3-pOjs > * {
    direction: ltr;
}

<|start_filename|>Plugins/DisableAllButton/package.json<|end_filename|>
{
    "main": "./src/index.tsx",
    "scripts": {
        "build": "bdbuilder --plugin DisableAllButton --build --config ./bdbuilder.config.json",
        "watch": "bdbuilder --plugin DisableAllButton --watch --config ./bdbuilder.config.json"
    },
    "author": "Qb",
    "license": "Unlicense",
    "devDependencies": {
        "@betterdiscordbuilder/bdbuilder": "^1.2.6-preview.4"
    },
    "info": {
        "name": "DisableAllButton",
        "version": "99.0.0",
        "authors": [
            {
                "name": "Qb",
                "github_username": "QbDesu"
            }
        ],
        "description": "Adds user status everywhere Discord doesn't.",
        "github": "https://github.com/Strencher/BetterDiscordStuff/tree/master/StatusEverywhere",
        "github_raw": "https://raw.githubusercontent.com/Strencher/BetterDiscordStuff/master/StatusEverywhere/StatusEverywhere.plugin.js"
    },
    "build": {
        "zlibrary": true,
        "copy": true,
        "production": false,
        "scssHash": false,
        "alias": {},
        "release": {
            "public": true,
            "source": false,
            "readme": false
        }
    }
}


<|start_filename|>Plugins/DisableAllButton/DisableAllButton.plugin.js<|end_filename|>
/**
 * @name DisableAllButton
 * @version 99.0.0
 * @author Qb
 * @description Adds user status everywhere Discord doesn't.
 * @source https://github.com/Strencher/BetterDiscordStuff/tree/master/StatusEverywhere
 * @updateUrl https://raw.githubusercontent.com/Strencher/BetterDiscordStuff/master/StatusEverywhere/StatusEverywhere.plugin.js
 */
/*@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.", 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!", 0, "Successfully installed", 0x40);
    }
    WScript.Quit();
@else@*/
/* Generated Code */
const config = {
	"main": "./src/index.tsx",
	"scripts": {
		"build": "bdbuilder --plugin DisableAllButton --watch --config ./bdbuilder.config.json"
	},
	"author": "Qb",
	"license": "Unlicense",
	"devDependencies": {
		"@betterdiscordbuilder/bdbuilder": "^1.2.6-preview.4"
	},
	"info": {
		"name": "DisableAllButton",
		"version": "99.0.0",
		"authors": [{
			"name": "Qb",
			"github_username": "QbDesu"
		}],
		"description": "Adds user status everywhere Discord doesn't.",
		"github": "https://github.com/Strencher/BetterDiscordStuff/tree/master/StatusEverywhere",
		"github_raw": "https://raw.githubusercontent.com/Strencher/BetterDiscordStuff/master/StatusEverywhere/StatusEverywhere.plugin.js"
	},
	"build": {
		"zlibrary": true,
		"copy": true,
		"production": false,
		"scssHash": false,
		"alias": {},
		"release": {
			"public": true,
			"source": false,
			"readme": false
		}
	}
};
function buildPlugin([BasePlugin, PluginApi]) {
	const module = {
		exports: {}
	};
	/******/
	(() => { // webpackBootstrap
		/******/
		"use strict";
		class StyleLoader {
			static styles = "";
			static element = null;
			static append(module, css) {
				this.styles += `/* ${module} */\n${css}`;
			}
			static inject(name = config.info.name) {
				if (this.element) this.element.remove();
				this.element = document.head.appendChild(Object.assign(document.createElement("style"), {
					id: name,
					textContent: this.styles
				}));
			}
			static remove() {
				if (this.element) {
					this.element.remove();
					this.element = null;
				}
			}
		}
		function ___createMemoize___(instance, name, value) {
			value = value();
			Object.defineProperty(instance, name, {
				value,
				configurable: true
			});
			return value;
		};
		const Modules = {
			get 'react-spring'() {
				return ___createMemoize___(this, 'react-spring', () => BdApi.findModuleByProps('useSpring'))
			},
			'@discord/utils': {
				get 'joinClassNames'() {
					return ___createMemoize___(this, 'joinClassNames', () => BdApi.findModule(m => typeof m?.default?.default === 'function')?.default)
				},
				get 'useForceUpdate'() {
					return ___createMemoize___(this, 'useForceUpdate', () => BdApi.findModuleByProps('useForceUpdate')?.useForceUpdate)
				},
				get 'Logger'() {
					return ___createMemoize___(this, 'Logger', () => BdApi.findModuleByProps('setLogFn')?.default)
				},
				get 'Navigation'() {
					return ___createMemoize___(this, 'Navigation', () => BdApi.findModuleByProps('replaceWith'))
				}
			},
			'@discord/components': {
				get 'Tooltip'() {
					return ___createMemoize___(this, 'Tooltip', () => BdApi.findModuleByDisplayName('Tooltip'))
				},
				get 'TooltipContainer'() {
					return ___createMemoize___(this, 'TooltipContainer', () => BdApi.findModuleByProps('TooltipContainer')?.TooltipContainer)
				},
				get 'TextInput'() {
					return ___createMemoize___(this, 'TextInput', () => BdApi.findModuleByDisplayName('TextInput'))
				},
				get 'SlideIn'() {
					return ___createMemoize___(this, 'SlideIn', () => BdApi.findModuleByDisplayName('SlideIn'))
				},
				get 'SettingsNotice'() {
					return ___createMemoize___(this, 'SettingsNotice', () => BdApi.findModuleByDisplayName('SettingsNotice'))
				},
				get 'TransitionGroup'() {
					return ___createMemoize___(this, 'TransitionGroup', () => BdApi.findModuleByDisplayName('TransitionGroup'))
				},
				get 'Button'() {
					return ___createMemoize___(this, 'Button', () => BdApi.findModuleByProps('DropdownSizes'))
				},
				get 'Flex'() {
					return ___createMemoize___(this, 'Flex', () => BdApi.findModuleByDisplayName('Flex'))
				},
				get 'Text'() {
					return ___createMemoize___(this, 'Text', () => BdApi.findModuleByDisplayName('Text'))
				},
				get 'Card'() {
					return ___createMemoize___(this, 'Card', () => BdApi.findModuleByDisplayName('Card'))
				}
			},
			'@discord/modules': {
				get 'Dispatcher'() {
					return ___createMemoize___(this, 'Dispatcher', () => BdApi.findModuleByProps('dirtyDispatch', 'subscribe'))
				},
				get 'EmojiUtils'() {
					return ___createMemoize___(this, 'EmojiUtils', () => BdApi.findModuleByProps('uploadEmoji'))
				},
				get 'PermissionUtils'() {
					return ___createMemoize___(this, 'PermissionUtils', () => BdApi.findModuleByProps('computePermissions'))
				},
				get 'DMUtils'() {
					return ___createMemoize___(this, 'DMUtils', () => BdApi.findModuleByProps('openPrivateChannel'))
				}
			},
			'@discord/stores': {
				get 'Messages'() {
					return ___createMemoize___(this, 'Messages', () => BdApi.findModuleByProps('getMessage', 'getMessages'))
				},
				get 'Channels'() {
					return ___createMemoize___(this, 'Channels', () => BdApi.findModuleByProps('getChannel'))
				},
				get 'Guilds'() {
					return ___createMemoize___(this, 'Guilds', () => BdApi.findModuleByProps('getGuild'))
				},
				get 'SelectedGuilds'() {
					return ___createMemoize___(this, 'SelectedGuilds', () => BdApi.findModuleByProps('getGuildId', 'getLastSelectedGuildId'))
				},
				get 'SelectedChannels'() {
					return ___createMemoize___(this, 'SelectedChannels', () => BdApi.findModuleByProps('getChannelId', 'getLastSelectedChannelId'))
				},
				get 'Info'() {
					return ___createMemoize___(this, 'Info', () => BdApi.findModuleByProps('getSessionId'))
				},
				get 'Status'() {
					return ___createMemoize___(this, 'Status', () => BdApi.findModuleByProps('getStatus'))
				},
				get 'Users'() {
					return ___createMemoize___(this, 'Users', () => BdApi.findModuleByProps('getUser', 'getCurrentUser'))
				},
				get 'SettingsStore'() {
					return ___createMemoize___(this, 'SettingsStore', () => BdApi.findModuleByProps('afkTimeout', 'status'))
				},
				get 'UserProfile'() {
					return ___createMemoize___(this, 'UserProfile', () => BdApi.findModuleByProps('getUserProfile'))
				},
				get 'Members'() {
					return ___createMemoize___(this, 'Members', () => BdApi.findModuleByProps('getMember'))
				},
				get 'Activities'() {
					return ___createMemoize___(this, 'Activities', () => BdApi.findModuleByProps('getActivities'))
				},
				get 'Games'() {
					return ___createMemoize___(this, 'Games', () => BdApi.findModuleByProps('getGame'))
				},
				get 'Auth'() {
					return ___createMemoize___(this, 'Auth', () => BdApi.findModuleByProps('getId', 'isGuest'))
				},
				get 'TypingUsers'() {
					return ___createMemoize___(this, 'TypingUsers', () => BdApi.findModuleByProps('isTyping'))
				}
			},
			'@discord/actions': {
				get 'ProfileActions'() {
					return ___createMemoize___(this, 'ProfileActions', () => BdApi.findModuleByProps('fetchProfile'))
				},
				get 'GuildActions'() {
					return ___createMemoize___(this, 'GuildActions', () => BdApi.findModuleByProps('requestMembersById'))
				}
			},
			get '@discord/i18n'() {
				return ___createMemoize___(this, '@discord/i18n', () => BdApi.findModuleByProps('getLocale'))
			},
			get '@discord/constants'() {
				return ___createMemoize___(this, '@discord/constants', () => BdApi.findModuleByProps('API_HOST'))
			},
			get '@discord/contextmenu'() {
				return ___createMemoize___(this, '@discord/contextmenu', () => {
					const ctx = Object.assign({}, BdApi.findModuleByProps('openContextMenu'), BdApi.findModuleByProps('MenuItem'));
					ctx.Menu = ctx.default;
					return ctx;
				})
			},
			get '@discord/forms'() {
				return ___createMemoize___(this, '@discord/forms', () => BdApi.findModuleByProps('FormItem'))
			},
			get '@discord/scrollbars'() {
				return ___createMemoize___(this, '@discord/scrollbars', () => BdApi.findModuleByProps('ScrollerAuto'))
			},
			get '@discord/native'() {
				return ___createMemoize___(this, '@discord/native', () => BdApi.findModuleByProps('requireModule'))
			},
			get '@discord/flux'() {
				return ___createMemoize___(this, '@discord/flux', () => Object.assign({}, BdApi.findModuleByProps('useStateFromStores').default, BdApi.findModuleByProps('useStateFromStores')))
			},
			get '@discord/modal'() {
				return ___createMemoize___(this, '@discord/modal', () => Object.assign({}, BdApi.findModuleByProps('ModalRoot'), BdApi.findModuleByProps('openModal')))
			},
			get '@discord/connections'() {
				return ___createMemoize___(this, '@discord/connections', () => BdApi.findModuleByProps('get', 'isSupported', 'map'))
			},
			get '@discord/sanitize'() {
				return ___createMemoize___(this, '@discord/sanitize', () => BdApi.findModuleByProps('stringify', 'parse', 'encode'))
			},
			get '@discord/icons'() {
				return ___createMemoize___(this, '@discord/icons', () => BdApi.findAllModules(m => m.displayName && ~m.toString().indexOf('currentColor')).reduce((icons, icon) => (icons[icon.displayName] = icon, icons), {}))
			},
			'@discord/classes': {
				get 'Timestamp'() {
					return ___createMemoize___(this, 'Timestamp', () => BdApi.findModuleByPrototypes('toDate', 'month'))
				},
				get 'Message'() {
					return ___createMemoize___(this, 'Message', () => BdApi.findModuleByPrototypes('getReaction', 'isSystemDM'))
				},
				get 'User'() {
					return ___createMemoize___(this, 'User', () => BdApi.findModuleByPrototypes('tag'))
				},
				get 'Channel'() {
					return ___createMemoize___(this, 'Channel', () => BdApi.findModuleByPrototypes('isOwner', 'isCategory'))
				}
			}
		};
		/******/ // The require scope
		/******/
		var __webpack_require__ = {};
		/******/
		/************************************************************************/
		/******/
		/* webpack/runtime/compat get default export */
		/******/
		(() => {
			/******/ // getDefaultExport function for compatibility with non-harmony modules
			/******/
			__webpack_require__.n = (module) => {
				/******/
				var getter = module && module.__esModule ?
					/******/
					() => (module['default']) :
					/******/
					() => (module);
				/******/
				__webpack_require__.d(getter, {
					a: getter
				});
				/******/
				return getter;
				/******/
			};
			/******/
		})();
		/******/
		/******/
		/* webpack/runtime/define property getters */
		/******/
		(() => {
			/******/ // define getter functions for harmony exports
			/******/
			__webpack_require__.d = (exports, definition) => {
				/******/
				for (var key in definition) {
					/******/
					if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
						/******/
						Object.defineProperty(exports, key, {
							enumerable: true,
							get: definition[key]
						});
						/******/
					}
					/******/
				}
				/******/
			};
			/******/
		})();
		/******/
		/******/
		/* webpack/runtime/hasOwnProperty shorthand */
		/******/
		(() => {
			/******/
			__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
			/******/
		})();
		/******/
		/******/
		/* webpack/runtime/make namespace object */
		/******/
		(() => {
			/******/ // define __esModule on exports
			/******/
			__webpack_require__.r = (exports) => {
				/******/
				if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
					/******/
					Object.defineProperty(exports, Symbol.toStringTag, {
						value: 'Module'
					});
					/******/
				}
				/******/
				Object.defineProperty(exports, '__esModule', {
					value: true
				});
				/******/
			};
			/******/
		})();
		/******/
		/************************************************************************/
		var __webpack_exports__ = {};
		// ESM COMPAT FLAG
		__webpack_require__.r(__webpack_exports__);
		// EXPORTS
		__webpack_require__.d(__webpack_exports__, {
			"default": () => ( /* binding */ DisableAllButton)
		});
		; // CONCATENATED MODULE: external "PluginApi"
		const external_PluginApi_namespaceObject = PluginApi;; // CONCATENATED MODULE: external "BasePlugin"
		const external_BasePlugin_namespaceObject = BasePlugin;
		var external_BasePlugin_default = /*#__PURE__*/ __webpack_require__.n(external_BasePlugin_namespaceObject);; // CONCATENATED MODULE: ./src/index.tsx
		class DisableAllButton extends(external_BasePlugin_default()) {
			onStart() {
				this.patchSettingsView();
			}
			async patchSettingsView() {
				const SettingsView = external_PluginApi_namespaceObject.WebpackModules.find(m => m?.default?.displayName == 'SettingsView').default.prototype;
				external_PluginApi_namespaceObject.Patcher.after(SettingsView, "render", (_, args, returnValue) => {
					external_PluginApi_namespaceObject.Logger.log(args);
					external_PluginApi_namespaceObject.Logger.log(returnValue);
				});
			}
			onStop() {
				external_PluginApi_namespaceObject.Patcher.unpatchAll();
			}
		}
		module.exports.LibraryPluginHack = __webpack_exports__;
		/******/
	})();
	const PluginExports = module.exports.LibraryPluginHack;
	return PluginExports?.__esModule ? PluginExports.default : PluginExports;
}
module.exports = window.hasOwnProperty("ZeresPluginLibrary") ?
	buildPlugin(window.ZeresPluginLibrary.buildPlugin(config)) :
	class {
		getName() {
			return config.info.name;
		}
		getAuthor() {
			return config.info.authors.map(a => a.name).join(", ");
		}
		getDescription() {
			return `${config.info.description}. __**ZeresPluginLibrary was not found! This plugin will not work!**__`;
		}
		getVersion() {
			return config.info.version;
		}
		load() {
			BdApi.showConfirmationModal(
				"Library plugin is needed",
				[`The library plugin needed for ${config.info.name} is missing. Please click Download to install it.`], {
					confirmText: "Download",
					cancelText: "Cancel",
					onConfirm: () => {
						require("request").get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", async (error, response, body) => {
							if (error) return require("electron").shell.openExternal("https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js");
							await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
						});
					}
				}
			);
		}
		start() {}
		stop() {}
	};
/*@end@*/

<|start_filename|>Plugins/MineSpoilerRedux/src/Grid.js<|end_filename|>
const defaultCharmap = ['⬜','1️⃣','2️⃣','3️⃣','4️⃣','5️⃣','6️⃣','7️⃣','8️⃣','💣'];

function getNeighboursCells(grid,x,y,width,height){
    const ret = [];
    for(let neighbourX=Math.max(0,x-1); neighbourX<Math.min(x+2,width); neighbourX++){
        for(let neighbourY=Math.max(0,y-1); neighbourY<Math.min(y+2,height); neighbourY++){
            if(neighbourX!=x || neighbourY!=y) ret.push(grid[neighbourY][neighbourX]);
        }
    }
    return ret;
}
function countNeighboursMines(grid,x,y,width,height){
    return getNeighboursCells(grid,x,y,width,height).filter(c=>c.mine).length;
}
function countClearNeighbours(grid,x,y,width,height){
    return getNeighboursCells(grid,x,y,width,height).filter(c=>c.visible && c.neighbours==0).length;
}
function uncover(grid, width, height){
    let found=true;
    while (found==true) {
        found = false;
        for(let x=0; x<width; x++){
            for(let y=0; y<height; y++){
                const cell = grid[y][x];

                if(!cell.visible && !cell.mine){
                    if(countClearNeighbours(grid,x,y,height,width)) {
                        console.log('found')
                        found = true;
                        cell.visible = true;
                    }
                }
            }
        }
    }
}

export default function generateGrid(width, height, mines, generateSafePatch, charmap){
    const grid = Array(height).fill().map(()=>Array(width).fill().map(()=>({mine:false,generated:false,visible:false,neighbours:0})));
    let mineCount = mines;

    if(generateSafePatch){
        const x = Math.floor(Math.random() * width)
        const y = Math.floor(Math.random() * height)
        for(let clearx=Math.max(0,x-1); clearx<Math.min(x+2,width); clearx++){
            for(let cleary=Math.max(0,y-1); cleary<Math.min(y+2,height); cleary++){
                grid[cleary][clearx].mine=false;
                grid[cleary][clearx].generated=true;
                grid[cleary][clearx].visible=true;
            }
        }
    }

    while(mineCount) {
        const x = Math.floor(Math.random() * width)
        const y = Math.floor(Math.random() * height)
        if (!grid[y][x].generated) {
            grid[y][x].mine=true;
            grid[y][x].generated=true;
            mineCount--;
        }
    }
    
    grid.forEach((row,y)=> row.forEach( (cell,x) => { cell.neighbours = cell.mine ? 9 : countNeighboursMines(grid,x,y,width,height); }));

    uncover(grid, width, height);

    if (!charmap) charmap=defaultCharmap;
    const charGrid = grid.map((row,y)=>
        row.map( (cell,x) => {
            let char = charmap[cell.neighbours];
            return cell.visible ? char : `||${char}||`
        })
    );

    return charGrid.map(row=>row.join('')).join('\n');
}

<|start_filename|>Plugins/GuildNotificationDefaults/GuildNotificationDefaults.plugin.js<|end_filename|>
/**
* @name GuildNotificationDefaults
* @description Automatically set the notification settings of servers you join.
* @author Qb
* @authorId 133659541198864384
* @version 1.0.1
* @invite gj7JFa6mF8
* @source https://github.com/QbDesu/BetterDiscordAddons/blob/potato/Plugins/GuildNotificationDefaults
* @updateUrl https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/GuildNotificationDefaults/GuildNotificationDefaults.plugin.js
*/
/*@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.", 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!", 0, "Successfully installed", 0x40);
}
WScript.Quit();

@else@*/

module.exports = (() => {
    const config = {
        info: {
            name: "GuildNotificationDefaults",
            version: "1.0.1",
            github_raw: "https://raw.githubusercontent.com/QbDesu/BetterDiscordAddons/potato/Plugins/GuildNotificationDefaults/GuildNotificationDefaults.plugin.js"
        },
        defaultConfig: [
            {
                type: "switch",
                id: "muted",
                name: "Muted",
                note: "Automatically mute all new servers",
                value: false
            },
			{
				type: "dropdown",
				id: "message_notifications",
				name: "Message Notifications",
                value: 1,
                options: [
                    {
                        label: 'All Messages',
                        value: 0
                    },
                    {
                        label: 'Only @mentions',
                        value: 1
                    },
                    {
                        label: 'Nothing',
                        value: 2
                    }
                ]
			},
            {
                type: "switch",
                id: "suppress_everyone",
                name: "Supress @everyone and @here",
                note: "Automatically supress @everyone and @here mentions",
                value: true
            },
            {
                type: "switch",
                id: "supress_roles",
                name: "Supress All Role @mentions",
                note: "Automatically supress all role @mentions",
                value: false
            },
            {
                type: "switch",
                id: "mobile_push",
                name: "Mobile Push Notifications",
                note: "Enable mobile push notifications for new servers",
                value: false
            }
		]
    };
    return !global.ZeresPluginLibrary ? class {
        constructor() { this._config = config; }
        load() {
            BdApi.showConfirmationModal("Library plugin is needed", 
            [`The library plugin needed for ${config.info.name} is missing. Please click Download Now to install it.`], {
                confirmText: "Download",
                cancelText: "Cancel",
                onConfirm: () => {
                    require("request").get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", async (error, response, body) => {
                    if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
                    await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
                });
            }
        });
    }
    start() { }
    stop() { }
}
: (([Plugin, Api]) => {
    const plugin = (Plugin, Api) => {
		const {
			WebpackModules,
			DiscordModules: {
				Dispatcher,
				DiscordConstants: {ActionTypes: INVITE_ACCEPT_SUCCESS}
			}
		} = Api;

		const GuildNotifications = WebpackModules.getByProps("updateGuildNotificationSettings");

        return class GuildNotificationDefaults extends Plugin {
            constructor() {
                super();
                // remove need for duplication of metadata fields
                this.getAuthor = null;
                this.getDescription = null;
				this.onInviteAccept = this.onInviteAccept.bind(this);
            }
            
            onStart() {
                Dispatcher.subscribe(INVITE_ACCEPT_SUCCESS, this.onInviteAccept);
            }

			onInviteAccept({invite: {guild: {id}}}) {
				GuildNotifications.updateGuildNotificationSettings(id, {
					muted: this.settings.muted,
					message_notifications: this.settings.message_notifications,
					supress_roles: this.settings.supress_roles,
					supress_everyone: this.settings.supress_everyone,
					mobile_push: this.settings.mobile_push
				});
			}

			onStop() {
				Dispatcher.unsubscribe(INVITE_ACCEPT_SUCCESS, this.onInviteAccept);
			}
            
            getSettingsPanel() {
                return this.buildSettingsPanel().getElement();
            }
        };
    };
    return plugin(Plugin, Api);
})(global.ZeresPluginLibrary.buildPlugin(config));
})();
/*@end@*/
