aboutsummaryrefslogtreecommitdiff
path: root/.config
diff options
context:
space:
mode:
Diffstat (limited to '.config')
-rw-r--r--.config/BetterDiscord/plugins/BDFDB.config.json9
-rw-r--r--.config/BetterDiscord/plugins/BadgesEverywhere.config.json29
-rw-r--r--.config/BetterDiscord/plugins/BetterSearchPage.config.json7
-rw-r--r--.config/BetterDiscord/plugins/BetterSearchPage.plugin.js191
-rw-r--r--.config/BetterDiscord/plugins/EditChannels.config.json96
-rw-r--r--.config/BetterDiscord/plugins/EditChannels.plugin.js781
-rw-r--r--.config/BetterDiscord/plugins/EditServers.config.json66
-rw-r--r--.config/BetterDiscord/plugins/EditServers.plugin.js1106
-rw-r--r--.config/BetterDiscord/plugins/NotificationSounds.config.json329
-rw-r--r--.config/BetterDiscord/plugins/NotificationSounds.plugin.js684
-rw-r--r--.config/BetterDiscord/plugins/PinDMs.config.json42
-rw-r--r--.config/BetterDiscord/plugins/PinDMs.plugin.js1138
-rw-r--r--.config/BetterDiscord/plugins/QuickMention.plugin.js67
-rw-r--r--.config/BetterDiscord/plugins/RemoveNicknames.config.json17
-rw-r--r--.config/BetterDiscord/plugins/RemoveNicknames.plugin.js189
-rw-r--r--.config/BetterDiscord/plugins/SendLargeMessages.plugin.js234
-rw-r--r--.config/BetterDiscord/themes/bliss.theme.css34
-rw-r--r--.config/X11/Xresources38
-rw-r--r--.config/coc/extensions/package.json1
-rw-r--r--.config/coc/snippets-mru9
-rw-r--r--.config/i3/config17
-rw-r--r--.config/mpd/mpd.conf35
-rw-r--r--.config/ncmpcpp/config2
-rw-r--r--.config/nvim/bliss-lightline.vim25
-rw-r--r--.config/nvim/coc-settings.json13
-rw-r--r--.config/nvim/init.vim24
-rw-r--r--.config/picom.conf3
-rw-r--r--.config/polybar/config6
-rw-r--r--.config/polybar/onstart.sh3
-rwxr-xr-x.config/polybar/player-mpris-simple.sh9
-rw-r--r--.config/rofi/pywal.rasi10
-rw-r--r--.config/startpage/style.css32
-rw-r--r--.config/user-dirs.dirs2
-rw-r--r--.config/xbindkeys/main (renamed from .config/xb.rc)2
-rw-r--r--.config/zathura/zathurarc27
35 files changed, 190 insertions, 5087 deletions
diff --git a/.config/BetterDiscord/plugins/BDFDB.config.json b/.config/BetterDiscord/plugins/BDFDB.config.json
deleted file mode 100644
index 3458f38..0000000
--- a/.config/BetterDiscord/plugins/BDFDB.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "settings": {
- "showSupportBadges": true,
- "showToasts": true
- },
- "welcomeScreen": {
- "seen": false
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/BadgesEverywhere.config.json b/.config/BetterDiscord/plugins/BadgesEverywhere.config.json
deleted file mode 100644
index 404c91c..0000000
--- a/.config/BetterDiscord/plugins/BadgesEverywhere.config.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "badges": {
- "1": true,
- "2": true,
- "4": true,
- "8": true,
- "64": true,
- "128": true,
- "256": true,
- "512": true,
- "16384": true,
- "131072": true,
- "262144": true,
- "524288": true
- },
- "changelog": {
- "currentversion": "1.5.5"
- },
- "indicators": {
- "CURRENT_GUILD_BOOST": true
- },
- "settings": {
- "showInChat": true,
- "showInMemberList": true,
- "showInPopout": true,
- "showNitroDate": true,
- "useColoredVersion": true
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/BetterSearchPage.config.json b/.config/BetterDiscord/plugins/BetterSearchPage.config.json
deleted file mode 100644
index 856dabf..0000000
--- a/.config/BetterDiscord/plugins/BetterSearchPage.config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "settings": {
- "addFirstLast": true,
- "addJumpTo": true,
- "cloneToTheTop": true
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/BetterSearchPage.plugin.js b/.config/BetterDiscord/plugins/BetterSearchPage.plugin.js
deleted file mode 100644
index e63763f..0000000
--- a/.config/BetterDiscord/plugins/BetterSearchPage.plugin.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * @name BetterSearchPage
- * @authorId 278543574059057154
- * @invite Jx3TjNS
- * @donate https://www.paypal.me/MircoWittrien
- * @patreon https://www.patreon.com/MircoWittrien
- * @website https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/BetterSearchPage
- * @source https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/BetterSearchPage/BetterSearchPage.plugin.js
- */
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "BetterSearchPage",
- "author": "DevilBro",
- "version": "1.1.6",
- "description": "Add some extra controls to the search results page"
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`* @name BDFDB`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {this.load();}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var settings = {};
-
- return class BetterSearchPage extends Plugin {
- onLoad() {
- this.defaults = {
- settings: {
- addFirstLast: {value:true, description:"Add a first and last page button"},
- addJumpTo: {value:true, description:"Add a jump to input field (press enter to jump)"},
- cloneToTheTop: {value:true, description:"Clone the controls to the top of the results page"}
- }
- };
-
- this.patchedModules = {
- after: {
- SearchResultsInner: "default"
- }
- };
-
- }
-
- onStart() {
- this.forceUpdateAll();
- }
-
- onStop() {
- this.forceUpdateAll();
- }
-
- getSettingsPanel (collapseStates = {}) {
- let settingsPanel, settingsItems = [];
-
- for (let key in settings) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed (e) {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll () {
- settings = BDFDB.DataUtils.get(this, "settings");
-
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- processSearchResultsInner (e) {
- if (e.instance.props.search) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {name:"SearchPagination"});
- if (index > -1) {
- let currentPage = parseInt(Math.floor(e.instance.props.search.offset / BDFDB.DiscordConstants.SEARCH_PAGE_SIZE)) + 1;
- let maxPage = e.instance.props.search.totalResults > 5000 ? parseInt(Math.ceil(5000 / BDFDB.DiscordConstants.SEARCH_PAGE_SIZE)) : parseInt(Math.ceil(e.instance.props.search.totalResults / BDFDB.DiscordConstants.SEARCH_PAGE_SIZE));
- let doJump = page => {
- page = page < 1 ? 1 : (page > maxPage ? maxPage : page);
- if (page < currentPage) BDFDB.LibraryModules.SearchPageUtils.searchPreviousPage(e.instance.props.searchId, (currentPage - page) * BDFDB.DiscordConstants.SEARCH_PAGE_SIZE);
- else if (page > currentPage) BDFDB.LibraryModules.SearchPageUtils.searchNextPage(e.instance.props.searchId, (page - currentPage) * BDFDB.DiscordConstants.SEARCH_PAGE_SIZE);
- };
- let pagination = children[index].type(children[index].props);
- if (!pagination) return;
-
- if (currentPage >= maxPage) {
- pagination.props.children[2].props.className = BDFDB.DOMUtils.formatClassName(pagination.props.children[2].props.className, BDFDB.disCN.searchresultspaginationdisabled);
- pagination.props.children[2].props.onClick = _ => {};
- }
- pagination.props.children[0] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: "Previous",
- children: pagination.props.children[0]
- });
- pagination.props.children[2] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: currentPage >= maxPage ? "Max Page is 200" : "Next",
- tooltipConfig: {color: currentPage >= maxPage && BDFDB.LibraryComponents.TooltipContainer.Colors.RED},
- children: pagination.props.children[2]
- });
- if (settings.addFirstLast) {
- pagination.props.children.unshift(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: BDFDB.LanguageUtils.LibraryStrings.first,
- "aria-label": BDFDB.LanguageUtils.LibraryStrings.first,
- onClick: _ => {if (currentPage != 1) doJump(1);},
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
- className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.searchresultspaginationbutton, currentPage == 1 && BDFDB.disCN.searchresultspaginationdisabled),
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCN.searchresultspaginationicon,
- name: BDFDB.LibraryComponents.SvgIcon.Names.LEFT_DOUBLE_CARET
- })
- })
- }));
- pagination.props.children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: currentPage >= maxPage ? "Max Page is 200" : BDFDB.LanguageUtils.LibraryStrings.last,
- tooltipConfig: {color: currentPage >= maxPage && BDFDB.LibraryComponents.TooltipContainer.Colors.RED},
- "aria-label": BDFDB.LanguageUtils.LibraryStrings.last,
- onClick: _ => {if (currentPage != maxPage) doJump(maxPage);},
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
- className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.searchresultspaginationbutton, currentPage >= maxPage && BDFDB.disCN.searchresultspaginationdisabled),
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCN.searchresultspaginationicon,
- name: BDFDB.LibraryComponents.SvgIcon.Names.RIGHT_DOUBLE_CARET
- })
- })
- }));
- }
- if (settings.addJumpTo) {
- pagination.props.children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- key: "BSP-pagination-jumpinput",
- type: "number",
- size: BDFDB.LibraryComponents.TextInput.Sizes.MINI,
- value: currentPage,
- min: 1,
- max: maxPage,
- onKeyDown: (event, instance) => {if (event.which == 13) doJump(instance.props.value);}
- }));
- pagination.props.children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: BDFDB.LanguageUtils.LanguageStrings.JUMP,
- "aria-label": BDFDB.LanguageUtils.LanguageStrings.JUMP,
- onClick: (event, instance) => {
- let jumpInput = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return, {key:"BSP-pagination-jumpinput"});
- if (jumpInput) doJump(jumpInput.props.value);
- },
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
- className: BDFDB.disCN.searchresultspaginationbutton,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCN.searchresultspaginationicon,
- style: {transform: "rotate(90deg"},
- name: BDFDB.LibraryComponents.SvgIcon.Names.RIGHT_CARET
- })
- })
- }));
- }
- children[index] = pagination;
- if (settings.cloneToTheTop) children.unshift(pagination);
- }
- }
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/EditChannels.config.json b/.config/BetterDiscord/plugins/EditChannels.config.json
deleted file mode 100644
index 9ae19ab..0000000
--- a/.config/BetterDiscord/plugins/EditChannels.config.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "changeLog": {
- "version": "4.1.8"
- },
- "changelog": {
- "currentversion": "4.1.5"
- },
- "channels": {
- "716039712799719489": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "716039712799719490": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "716708258123087873": {
- "color": [
- 233,
- 30,
- 99
- ],
- "inheritColor": false,
- "name": null
- },
- "716739284089962577": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "719892211000672296": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "722724726425911316": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "722732084342423592": {
- "color": [
- 233,
- 30,
- 99,
- 1
- ],
- "inheritColor": false,
- "name": null
- },
- "715240118952263691": {
- "color": null,
- "inheritColor": false,
- "name": "announcements"
- }
- },
- "settings": {
- "changeChannelIcon": true,
- "changeInAuditLog": true,
- "changeInAutoComplete": true,
- "changeInChannelHeader": true,
- "changeInChannelList": true,
- "changeInChatTextarea": true,
- "changeInInviteLog": true,
- "changeInMentions": true,
- "changeInQuickSwitcher": true,
- "changeInRecentMentions": true
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/EditChannels.plugin.js b/.config/BetterDiscord/plugins/EditChannels.plugin.js
deleted file mode 100644
index 2f7a518..0000000
--- a/.config/BetterDiscord/plugins/EditChannels.plugin.js
+++ /dev/null
@@ -1,781 +0,0 @@
-/**
- * @name EditChannels
- * @authorId 278543574059057154
- * @invite Jx3TjNS
- * @donate https://www.paypal.me/MircoWittrien
- * @patreon https://www.patreon.com/MircoWittrien
- * @website https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/EditChannels
- * @source https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/EditChannels/EditChannels.plugin.js
- */
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "EditChannels",
- "author": "DevilBro",
- "version": "4.1.8",
- "description": "Allow you to rename and recolor channelnames"
- },
- "changeLog": {
- "fixed": {
- "Works again": "Yas"
- }
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`* @name BDFDB`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {this.load();}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var changedChannels = {}, settings = {};
-
- return class EditChannels extends Plugin {
- onLoad() {
- this.defaults = {
- settings: {
- changeChannelIcon: {value:true, inner:false, description:"Change color of Channel Icon"},
- changeInChatTextarea: {value:true, inner:true, description:"Chat Textarea"},
- changeInMentions: {value:true, inner:true, description:"Mentions"},
- changeInChannelList: {value:true, inner:true, description:"Channel List"},
- changeInChannelHeader: {value:true, inner:true, description:"Channel Header"},
- changeInRecentMentions: {value:true, inner:true, description:"Recent Mentions Popout"},
- changeInAutoComplete: {value:true, inner:true, description:"Autocomplete Menu"},
- changeInAuditLog: {value:true, inner:true, description:"Audit Log"},
- changeInInviteLog: {value:true, inner:true, description:"Invite Log"},
- changeInQuickSwitcher: {value:true, inner:true, description:"Quick Switcher"}
- }
- };
-
- this.patchedModules = {
- before: {
- ChannelEditorContainer: "render",
- ChannelAutoComplete: "render",
- AutocompleteChannelResult: "render",
- AuditLog: "render",
- SettingsInvites: "render",
- HeaderBarContainer: "render",
- ChannelCategoryItem: "default",
- ChannelItem: "default",
- QuickSwitchChannelResult: "render",
- MessageContent: "type"
- },
- after: {
- AutocompleteChannelResult: "render",
- AuditLog: "render",
- HeaderBarContainer: "render",
- ChannelCategoryItem: "default",
- ChannelItem: "default",
- QuickSwitchChannelResult: "render",
- RecentsChannelHeader: "default"
- }
- };
-
- this.css = `
- ${BDFDB.dotCN.messagespopoutchannelname}:hover > span[style*="color"],
- ${BDFDB.dotCN.recentmentionschannelname}:hover > span[style*="color"] {
- text-decoration: underline;
- }
- `;
- }
-
- onStart() {
- let observer = new MutationObserver(_ => {this.changeAppTitle();});
- BDFDB.ObserverUtils.connect(this, document.head.querySelector("title"), {name:"appTitleObserver",instance:observer}, {childList:true});
-
- if (BDFDB.LibraryModules.AutocompleteOptions && BDFDB.LibraryModules.AutocompleteOptions.AUTOCOMPLETE_OPTIONS) BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.AutocompleteOptions.AUTOCOMPLETE_OPTIONS.CHANNELS, "queryResults", {after: e => {
- let channelArray = [];
- for (let id in changedChannels) if (changedChannels[id] && changedChannels[id].name) {
- let channel = BDFDB.LibraryModules.ChannelStore.getChannel(id);
- let category = channel && channel.parent_id && BDFDB.LibraryModules.ChannelStore.getChannel(channel.parent_id);
- let catData = category && changedChannels[category.id] || {};
- if (BDFDB.ChannelUtils.isTextChannel(channel) && channel.guild_id == e.methodArguments[0].guild_id) channelArray.push(Object.assign({
- lowerCaseName: changedChannels[id].name.toLowerCase(),
- lowerCaseCatName: catData && catData.name && catData.name.toLowerCase(),
- channel,
- category,
- catData
- }, changedChannels[id]));
- }
- channelArray = BDFDB.ArrayUtils.keySort(channelArray.filter(n => e.returnValue.channels.every(channel => channel.id != n.channel.id) && (n.lowerCaseName.indexOf(e.methodArguments[1]) != -1 || (n.lowerCaseCatName && n.lowerCaseCatName.indexOf(e.methodArguments[1]) != -1))), "lowerCaseName");
- e.returnValue.channels = [].concat(e.returnValue.channels, channelArray.map(n => n.channel)).slice(0, BDFDB.DiscordConstants.MAX_AUTOCOMPLETE_RESULTS);
- }});
-
- this.forceUpdateAll();
- }
-
- onStop() {
- this.forceUpdateAll();
- }
-
- getSettingsPanel (collapseStates = {}) {
- let settingsPanel, settingsItems = [];
-
- for (let key in settings) if (!this.defaults.settings[key].inner) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
- title: "Change Channels in:",
- first: settingsItems.length == 0,
- children: Object.keys(settings).map(key => this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }))
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Button",
- color: BDFDB.LibraryComponents.Button.Colors.RED,
- label: "Reset all Channels",
- onClick: _ => {
- BDFDB.ModalUtils.confirm(this, "Are you sure you want to reset all channels?", _ => {
- BDFDB.DataUtils.remove(this, "channels");
- this.forceUpdateAll();
- });
- },
- children: BDFDB.LanguageUtils.LanguageStrings.RESET
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed () {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll (instant = false) {
- changedChannels = BDFDB.DataUtils.load(this, "channels");
- settings = BDFDB.DataUtils.get(this, "settings");
-
- this.changeAppTitle();
- BDFDB.PatchUtils.forceAllUpdates(this);
- BDFDB.ChannelUtils.rerenderAll(instant);
- BDFDB.ReactUtils.forceUpdate(BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name:"Channel", unlimited:true}));
- }
-
- onChannelContextMenu (e) {
- if (e.instance.props.channel) {
- let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true});
- children.splice(index > -1 ? index : children.length, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_localchannelsettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-submenu"),
- children: BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: [
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.submenu_channelsettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-change"),
- action: _ => {
- this.openChannelSettingsModal(e.instance.props.channel);
- }
- }),
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.submenu_resetsettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-reset"),
- disabled: !changedChannels[e.instance.props.channel.id],
- action: _ => {
- BDFDB.DataUtils.remove(this, "channels", e.instance.props.channel.id);
- this.forceUpdateAll(true);
- }
- })
- ]
- })
- })
- }));
- }
- }
-
- processChannelEditorContainer (e) {
- if (!e.instance.props.disabled && e.instance.props.channel && BDFDB.ChannelUtils.isTextChannel(e.instance.props.channel) && e.instance.props.type == BDFDB.DiscordConstants.TextareaTypes.NORMAL && settings.changeInChatTextarea) {
- let data = changedChannels[e.instance.props.channel.id];
- e.instance.props.placeholder = BDFDB.LanguageUtils.LanguageStringsFormat("TEXTAREA_PLACEHOLDER", `#${data && data.name || e.instance.props.channel.name}`);
- }
- }
-
- processAutocompleteChannelResult (e) {
- if (e.instance.props.channel && settings.changeInAutoComplete) {
- if (!e.returnvalue) {
- e.instance.props.channel = this.getChannelData(e.instance.props.channel.id);
- if (e.instance.props.category) e.instance.props.category = this.getChannelData(e.instance.props.category.id);
- }
- else {
- let channelName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.marginleft4]]});
- if (channelName) this.changeChannelColor(channelName, e.instance.props.channel.id);
- let channelIcon = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.autocompleteicon]]});
- if (channelIcon) this.changeChannelIconColor(channelIcon, e.instance.props.channel.id, {alpha: 0.6});
- if (e.instance.props.category) {
- let categoryName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.autocompletedescription]]});
- if (categoryName) this.changeChannelColor(categoryName, e.instance.props.category.id);
- }
- }
- }
- }
-
- processAuditLog (e) {
- let channel = BDFDB.ObjectUtils.get(e.instance, "props.log.options.channel");
- if (channel && settings.changeInAuditLog) {
- if (!e.returnvalue) e.instance.props.log.options.channel = this.getChannelData(channel.id);
- else {
- let channelName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["children", [["#" + channel.name]]]]});
- if (channelName) this.changeChannelColor(channelName, channel.id);
- }
- }
- }
-
- processSettingsInvites (e) {
- if (BDFDB.ObjectUtils.is(e.instance.props.invites) && settings.changeInInviteLog) {
- e.instance.props.invites = Object.assign({}, e.instance.props.invites);
- for (let id in e.instance.props.invites) e.instance.props.invites[id] = new BDFDB.DiscordObjects.Invite(Object.assign({}, e.instance.props.invites[id], {channel: this.getChannelData(e.instance.props.invites[id].channel.id)}));
- }
- }
-
- processHeaderBarContainer (e) {
- let channel = BDFDB.LibraryModules.ChannelStore.getChannel(e.instance.props.channelId);
- if (channel && BDFDB.ChannelUtils.isTextChannel(channel) && settings.changeInChannelHeader) {
- if (!e.returnvalue) {
- let channelName = BDFDB.ReactUtils.findChild(e.instance, {name: "Title"});
- if (channelName) {
- channelName.props.children = this.getChannelData(channel.id).name;
- this.changeChannelColor(channelName, channel.id);
- }
- }
- else {
- let [children, index] = BDFDB.ReactUtils.findParent(e.instance, {name: "Icon"});
- if (index > -1) {
- let icon = BDFDB.ReactUtils.createElement(children[index].props.icon, {
- className: BDFDB.disCN.channelheadericon
- });
- this.changeChannelIconColor(icon, channel.id, {alpha: 0.6});
- children[index] = BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCN.channelheadericonwrapper,
- children: icon
- })
- }
- }
- }
- }
-
- processChannelCategoryItem (e) {
- if (e.instance.props.channel && settings.changeInChannelList) {
- if (!e.returnvalue) e.instance.props.channel = this.getChannelData(e.instance.props.channel.id);
- else {
- let onMouseEnter = e.returnvalue.props.onMouseEnter || ( _ => {});
- e.returnvalue.props.onMouseEnter = event => {
- onMouseEnter(event);
- e.instance.setState({hovered: true});
- };
- let onMouseLeave = e.returnvalue.props.onMouseLeave || ( _ => {});
- e.returnvalue.props.onMouseLeave = event => {
- onMouseLeave(event);
- e.instance.setState({hovered: false});
- };
- let modify = BDFDB.ObjectUtils.extract(Object.assign({}, e.instance.props, e.instance.state), "muted", "locked", "selected", "unread", "connected", "hovered");
- let categoryName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.categoryname]]});
- if (categoryName) this.changeChannelColor(categoryName, e.instance.props.channel.id, modify);
- let categoryIcon = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.categoryicon]]});
- if (categoryIcon) this.changeChannelIconColor(categoryIcon, e.instance.props.channel.id, Object.assign({alpha: 0.6}, modify));
- }
- }
- }
-
- processChannelItem (e) {
- if (e.instance.props.channel && settings.changeInChannelList) {
- if (!e.returnvalue) e.instance.props.channel = this.getChannelData(e.instance.props.channel.id);
- else {
- let onMouseEnter = e.returnvalue.props.onMouseEnter || ( _ => {});
- e.returnvalue.props.onMouseEnter = event => {
- onMouseEnter(event);
- e.instance.setState({hovered: true});
- };
- let onMouseLeave = e.returnvalue.props.onMouseLeave || ( _ => {});
- e.returnvalue.props.onMouseLeave = event => {
- onMouseLeave(event);
- e.instance.setState({hovered: false});
- };
- let modify = BDFDB.ObjectUtils.extract(Object.assign({}, e.instance.props, e.instance.state), "muted", "locked", "selected", "unread", "connected", "hovered");
- let channelName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.channelname]]});
- if (channelName) this.changeChannelColor(channelName, e.instance.props.channel.id, modify);
- let channelIcon = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.channelicon]]});
- if (channelIcon) this.changeChannelIconColor(channelIcon, e.instance.props.channel.id, Object.assign({alpha: 0.6}, modify));
- }
- }
- }
-
- processQuickSwitchChannelResult (e) {
- if (e.instance.props.channel && settings.changeInQuickSwitcher) {
- if (!e.returnvalue) {
- e.instance.props.channel = this.getChannelData(e.instance.props.channel.id);
- if (e.instance.props.category) e.instance.props.category = this.getChannelData(e.instance.props.category.id);
- }
- else {
- let modify = BDFDB.ObjectUtils.extract(e.instance.props, "focused", "unread", "mentions");
- let channelName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.quickswitchresultmatch]]});
- if (channelName) this.changeChannelColor(channelName, e.instance.props.channel.id, modify);
- let channelIcon = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.quickswitchresulticon]]});
- if (channelIcon) this.changeChannelIconColor(channelIcon, e.instance.props.channel.id, Object.assign({alpha: 0.6}, modify));
- if (e.instance.props.category) {
- let categoryName = BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", BDFDB.disCN.quickswitchresultnote]]});
- if (categoryName) this.changeChannelColor(categoryName, e.instance.props.category.id);
- }
- }
- }
- }
-
- processRecentsChannelHeader (e) {
- if (settings.changeInRecentMentions && BDFDB.ArrayUtils.is(e.returnvalue.props.children)) {
- for (let child of e.returnvalue.props.children) if (child && child.props && child.props.channel && child.type.displayName == "ChannelName") {
- child.props.channel = this.getChannelData(child.props.channel.id);
- let oldType = child.type;
- child.type = (...args) => {
- let instance = oldType(...args);
- let channelName = BDFDB.ReactUtils.findChild(instance, {props:[["className", BDFDB.disCN.recentmentionschannelname]]});
- if (channelName) this.changeChannelColor(channelName, child.props.channel.id);
- return instance;
- };
- child.type.displayName = oldType.displayName;
- }
- }
- }
-
- processMessageContent (e) {
- if (BDFDB.ArrayUtils.is(e.instance.props.content) && settings.changeInMentions) for (let ele of e.instance.props.content) {
- if (BDFDB.ReactUtils.isValidElement(ele) && ele.type && ele.type.displayName == "Tooltip" && typeof ele.props.children == "function") {
- let children = ele.props.children({});
- if (children && children.type.displayName == "Mention" && children.props.children && typeof children.props.children[0] == "string" && children.props.children[0][0] == "#") {
- let channelName = children.props.children[0].slice(1);
- let guildId = BDFDB.LibraryModules.LastGuildStore.getGuildId();
- let channels = guildId && (BDFDB.LibraryModules.GuildChannelStore.getChannels(guildId)[0] || BDFDB.LibraryModules.GuildChannelStore.getChannels(guildId).SELECTABLE);
- if (Array.isArray(channels)) for (let channelObj of channels) {
- if (channelName == channelObj.channel.name) {
- let category = BDFDB.LibraryModules.ChannelStore.getChannel(channelObj.channel.parent_id);
- if (!category || category && ele.props.text == category.name) {
- if (category) {
- let categoryData = changedChannels[category.id];
- if (categoryData && categoryData.name) ele.props.text = categoryData.name;
- }
- let name = (changedChannels[channelObj.channel.id] || {}).name;
- let color = this.getChannelDataColor(channelObj.channel.id);
- if (name || color) {
- let renderChildren = ele.props.children;
- ele.props.children = (...args) => {
- let renderedChildren = renderChildren(...args);
- if (name) renderedChildren.props.children[0] = "#" + name;
- if (color) {
- let color1_0 = BDFDB.ColorUtils.convert(BDFDB.ObjectUtils.is(color) ? color[0] : color, "RGBA");
- let color0_1 = BDFDB.ColorUtils.setAlpha(color1_0, 0.1, "RGBA");
- let color0_7 = BDFDB.ColorUtils.setAlpha(color1_0, 0.7, "RGBA");
- renderedChildren.props.style = Object.assign({}, renderedChildren.props.style, {
- background: color0_1,
- color: color1_0
- });
- let onMouseEnter = renderedChildren.props.onMouseEnter || ( _ => {});
- renderedChildren.props.onMouseEnter = event => {
- onMouseEnter(event);
- event.target.style.setProperty("background", color0_7, "important");
- event.target.style.setProperty("color", "#FFFFFF", "important");
- };
- let onMouseLeave = renderedChildren.props.onMouseLeave || ( _ => {});
- renderedChildren.props.onMouseLeave = event => {
- onMouseLeave(event);
- event.target.style.setProperty("background", color0_1, "important");
- event.target.style.setProperty("color", color1_0, "important");
- };
- }
- return renderedChildren;
- }
- }
- break;
- }
- }
- }
- }
- }
- }
- }
-
- changeAppTitle () {
- let channel = BDFDB.LibraryModules.ChannelStore.getChannel(BDFDB.LibraryModules.LastChannelStore.getChannelId());
- let title = document.head.querySelector("title");
- if (title && BDFDB.ChannelUtils.isTextChannel(channel)) BDFDB.DOMUtils.setText(title, "@" + this.getChannelData(channel.id, settings.changeAppTitle).name);
- }
-
- changeChannelColor (child, channelId, modify) {
- if (BDFDB.ReactUtils.isValidElement(child)) {
- let color = this.getChannelDataColor(channelId);
- if (color) {
- color = modify ? this.chooseColor(color, modify) : BDFDB.ColorUtils.convert(color, "RGBA");
- let childProp = child.props.children ? "children" : "text";
- let fontGradient = BDFDB.ObjectUtils.is(color);
- if (fontGradient) child.props[childProp] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextGradientElement, {
- gradient: BDFDB.ColorUtils.createGradient(color),
- children: child.props[childProp]
- });
- else child.props[childProp] = BDFDB.ReactUtils.createElement("span", {
- style: {color: color},
- children: child.props[childProp]
- });
- }
- }
- }
-
- changeChannelIconColor (child, channelId, modify) {
- let color = this.getChannelDataColor(channelId);
- if (color && settings.changeChannelIcon) {
- color = modify ? this.chooseColor(BDFDB.ObjectUtils.is(color) ? color[0] : color, modify) : BDFDB.ColorUtils.convert(BDFDB.ObjectUtils.is(color) ? color[0] : color, "RGBA");
- child.props.color = color || "currentColor";
- if (color) child.props.foreground = null;
- }
- }
-
- chooseColor (color, config) {
- if (color) {
- if (BDFDB.ObjectUtils.is(config)) {
- if (config.mentions || config.focused || config.hovered || config.selected || config.unread || config.connected) color = BDFDB.ColorUtils.change(color, 0.5);
- else if (config.muted || config.locked) color = BDFDB.ColorUtils.change(color, -0.5);
- }
- return BDFDB.ColorUtils.convert(color, "RGBA");
- }
- return null;
- }
-
- getChannelDataColor (channelId) {
- let channel = BDFDB.LibraryModules.ChannelStore.getChannel(channelId);
- if (!channel) return null;
- let channelData = changedChannels[channel.id];
- if (channelData && channelData.color) return channelData.color;
- let category = channel.parent_id && BDFDB.LibraryModules.ChannelStore.getChannel(channel.parent_id);
- if (category) {
- let categoryData = changedChannels[category.id];
- if (categoryData && categoryData.inheritColor && categoryData.color) return categoryData.color;
- }
- return null;
- }
-
- getChannelData (channelId, change = true) {
- let channel = BDFDB.LibraryModules.ChannelStore.getChannel(channelId);
- if (!channel) return new BDFDB.DiscordObjects.Channel({});
- let data = change && changedChannels[channel.id];
- if (data) {
- let nativeObject = new BDFDB.DiscordObjects.Channel(channel);
- nativeObject.name = data.name || nativeObject.name;
- return nativeObject;
- }
- return new BDFDB.DiscordObjects.Channel(channel);
- }
-
- openChannelSettingsModal (channel) {
- let data = changedChannels[channel.id] || {};
-
- BDFDB.ModalUtils.open(this, {
- size: "MEDIUM",
- header: this.labels.modal_header_text,
- subheader: channel.name,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_channelname_text,
- className: BDFDB.disCN.marginbottom20 + " input-channelname",
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- value: data.name,
- placeholder: channel.name,
- autoFocus: true
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
- className: BDFDB.disCN.dividerdefault
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker1_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color,
- number: 1
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Switch",
- className: "input-inheritcolor",
- margin: 20,
- label: this.labels.modal_inheritcolor_text,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- value: channel.type == 4 && data.inheritColor,
- disabled: channel.type != 4
- })
- ],
- buttons: [{
- contents: BDFDB.LanguageUtils.LanguageStrings.SAVE,
- color: "BRAND",
- close: true,
- click: modal => {
- let oldData = Object.assign({}, data);
-
- data.name = modal.querySelector(".input-channelname " + BDFDB.dotCN.input).value.trim() || null;
-
- data.color = BDFDB.ColorUtils.getSwatchColor(modal, 1);
- if (data.color != null && !BDFDB.ObjectUtils.is(data.color)) {
- if (data.color[0] < 30 && data.color[1] < 30 && data.color[2] < 30) data.color = BDFDB.ColorUtils.change(data.color, 30);
- else if (data.color[0] > 225 && data.color[1] > 225 && data.color[2] > 225) data.color = BDFDB.ColorUtils.change(data.color, -30);
- }
-
- data.inheritColor = modal.querySelector(".input-inheritcolor " + BDFDB.dotCN.switchinner).checked;
-
- let changed = false;
- if (Object.keys(data).every(key => data[key] == null || data[key] == false) && (changed = true)) BDFDB.DataUtils.remove(this, "channels", channel.id);
- else if (!BDFDB.equals(oldData, data) && (changed = true)) BDFDB.DataUtils.save(data, this, "channels", channel.id);
- if (changed) this.forceUpdateAll(true);
- }
- }]
- });
- }
-
- setLabelsByLanguage () {
- switch (BDFDB.LanguageUtils.getLanguage().id) {
- case "hr": //croatian
- return {
- context_localchannelsettings_text: "Postavke lokalnih kanala",
- submenu_channelsettings_text: "Promijeni postavke",
- submenu_resetsettings_text: "Vraćanje kanala",
- modal_header_text: "Postavke lokalnih kanala",
- modal_channelname_text: "Naziv lokalnog kanala",
- modal_colorpicker1_text: "Boja lokalnog kanala",
- modal_inheritcolor_text: "Naslijedi boju u potkanale"
- };
- case "da": //danish
- return {
- context_localchannelsettings_text: "Lokal kanalindstillinger",
- submenu_channelsettings_text: "Skift indstillinger",
- submenu_resetsettings_text: "Nulstil kanal",
- modal_header_text: "Lokal kanalindstillinger",
- modal_channelname_text: "Lokalt kanalnavn",
- modal_colorpicker1_text: "Lokal kanalfarve",
- modal_inheritcolor_text: "Arve farve til subkanaler"
- };
- case "de": //german
- return {
- context_localchannelsettings_text: "Lokale Kanaleinstellungen",
- submenu_channelsettings_text: "Einstellungen ändern",
- submenu_resetsettings_text: "Kanal zurücksetzen",
- modal_header_text: "Lokale Kanaleinstellungen",
- modal_channelname_text: "Lokaler Kanalname",
- modal_colorpicker1_text: "Lokale Kanalfarbe",
- modal_inheritcolor_text: "Farbe an Unterkanäle vererben"
- };
- case "es": //spanish
- return {
- context_localchannelsettings_text: "Ajustes local de canal",
- submenu_channelsettings_text: "Cambiar ajustes",
- submenu_resetsettings_text: "Restablecer canal",
- modal_header_text: "Ajustes local de canal",
- modal_channelname_text: "Nombre local del canal",
- modal_colorpicker1_text: "Color local del canal",
- modal_inheritcolor_text: "Heredar color a sub-canales"
- };
- case "fr": //french
- return {
- context_localchannelsettings_text: "Paramètres locale du salon",
- submenu_channelsettings_text: "Modifier les paramètres",
- submenu_resetsettings_text: "Réinitialiser le salon",
- modal_header_text: "Paramètres locale du salon",
- modal_channelname_text: "Nom local du salon",
- modal_colorpicker1_text: "Couleur locale du salon",
- modal_inheritcolor_text: "Hériter de la couleur sur les sous-salons"
- };
- case "it": //italian
- return {
- context_localchannelsettings_text: "Impostazioni locale canale",
- submenu_channelsettings_text: "Cambia impostazioni",
- submenu_resetsettings_text: "Ripristina canale",
- modal_header_text: "Impostazioni locale canale",
- modal_channelname_text: "Nome locale canale",
- modal_colorpicker1_text: "Colore locale canale",
- modal_inheritcolor_text: "Eredita colore per sub-canali"
- };
- case "nl": //dutch
- return {
- context_localchannelsettings_text: "Lokale kanaalinstellingen",
- submenu_channelsettings_text: "Verandere instellingen",
- submenu_resetsettings_text: "Reset kanaal",
- modal_header_text: "Lokale kanaalinstellingen",
- modal_channelname_text: "Lokale kanaalnaam",
- modal_colorpicker1_text: "Lokale kanaalkleur",
- modal_inheritcolor_text: "Overerving van kleuren naar subkanalen"
- };
- case "no": //norwegian
- return {
- context_localchannelsettings_text: "Lokal kanalinnstillinger",
- submenu_channelsettings_text: "Endre innstillinger",
- submenu_resetsettings_text: "Tilbakestill kanal",
- modal_header_text: "Lokal kanalinnstillinger",
- modal_channelname_text: "Lokalt kanalnavn",
- modal_colorpicker1_text: "Lokal kanalfarge",
- modal_inheritcolor_text: "Arve farge til underkanaler"
- };
- case "pl": //polish
- return {
- context_localchannelsettings_text: "Lokalne ustawienia kanału",
- submenu_channelsettings_text: "Zmień ustawienia",
- submenu_resetsettings_text: "Resetuj ustawienia",
- modal_header_text: "Lokalne ustawienia kanału",
- modal_channelname_text: "Lokalna nazwa kanału",
- modal_colorpicker1_text: "Lokalny kolor kanału",
- modal_inheritcolor_text: "Dziedzicz kolor do podkanałów"
- };
- case "pt-BR": //portuguese (brazil)
- return {
- context_localchannelsettings_text: "Configurações local do canal",
- submenu_channelsettings_text: "Mudar configurações",
- submenu_resetsettings_text: "Redefinir canal",
- modal_header_text: "Configurações local do canal",
- modal_channelname_text: "Nome local do canal",
- modal_colorpicker1_text: "Cor local do canal",
- modal_inheritcolor_text: "Herdar cor aos sub-canais"
- };
- case "fi": //finnish
- return {
- context_localchannelsettings_text: "Paikallinen kanavan asetukset",
- submenu_channelsettings_text: "Vaihda asetuksia",
- submenu_resetsettings_text: "Nollaa kanava",
- modal_header_text: "Paikallinen kanavan asetukset",
- modal_channelname_text: "Paikallinen kanavanimi",
- modal_colorpicker1_text: "Paikallinen kanavanväri",
- modal_inheritcolor_text: "Hävitä väri alikanaville"
- };
- case "sv": //swedish
- return {
- context_localchannelsettings_text: "Lokal kanalinställningar",
- submenu_channelsettings_text: "Ändra inställningar",
- submenu_resetsettings_text: "Återställ kanal",
- modal_header_text: "Lokal kanalinställningar",
- modal_channelname_text: "Lokalt kanalnamn",
- modal_colorpicker1_text: "Lokal kanalfärg",
- modal_inheritcolor_text: "Inherit färg till subkanaler"
- };
- case "tr": //turkish
- return {
- context_localchannelsettings_text: "Yerel Kanal Ayarları",
- submenu_channelsettings_text: "Ayarları Değiştir",
- submenu_resetsettings_text: "Kanal Sıfırla",
- modal_header_text: "Yerel Kanal Ayarları",
- modal_channelname_text: "Yerel Kanal Adı",
- modal_colorpicker1_text: "Yerel Kanal Rengi",
- modal_inheritcolor_text: "Renkleri alt kanallara miras alma"
- };
- case "cs": //czech
- return {
- context_localchannelsettings_text: "Místní nastavení kanálu",
- submenu_channelsettings_text: "Změnit nastavení",
- submenu_resetsettings_text: "Obnovit kanál",
- modal_header_text: "Místní nastavení kanálu",
- modal_channelname_text: "Místní název kanálu",
- modal_colorpicker1_text: "Místní barvy kanálu",
- modal_inheritcolor_text: "Zdědit barvu na subkanály"
- };
- case "bg": //bulgarian
- return {
- context_localchannelsettings_text: "Настройки за локални канали",
- submenu_channelsettings_text: "Промяна на настройките",
- submenu_resetsettings_text: "Възстановяване на канал",
- modal_header_text: "Настройки за локални канали",
- modal_channelname_text: "Локално име на канал",
- modal_colorpicker1_text: "Локален цветен канал",
- modal_inheritcolor_text: "Наследи цвета до подканали"
- };
- case "ru": //russian
- return {
- context_localchannelsettings_text: "Настройки локального канала",
- submenu_channelsettings_text: "Изменить настройки",
- submenu_resetsettings_text: "Сбросить канал",
- modal_header_text: "Настройки локального канала",
- modal_channelname_text: "Имя локального канала",
- modal_colorpicker1_text: "Цвет локального канала",
- modal_inheritcolor_text: "Наследовать цвет на подканалы"
- };
- case "uk": //ukrainian
- return {
- context_localchannelsettings_text: "Налаштування локального каналу",
- submenu_channelsettings_text: "Змінити налаштування",
- submenu_resetsettings_text: "Скидання каналу",
- modal_header_text: "Налаштування локального каналу",
- modal_channelname_text: "Локальне ім'я каналу",
- modal_colorpicker1_text: "Колір місцевого каналу",
- modal_inheritcolor_text: "Успадковують колір до підканалів"
- };
- case "ja": //japanese
- return {
- context_localchannelsettings_text: "ローカルチャネル設定",
- submenu_channelsettings_text: "設定を変更する",
- submenu_resetsettings_text: "チャネルをリセットする",
- modal_header_text: "ローカルチャネル設定",
- modal_channelname_text: "ローカルチャネル名",
- modal_colorpicker1_text: "ローカルチャネルの色",
- modal_inheritcolor_text: "サブチャンネルに色を継承"
- };
- case "zh-TW": //chinese (traditional)
- return {
- context_localchannelsettings_text: "本地頻道設置",
- submenu_channelsettings_text: "更改設置",
- submenu_resetsettings_text: "重置通道",
- modal_header_text: "本地頻道設置",
- modal_channelname_text: "本地頻道名稱",
- modal_colorpicker1_text: "本地頻道顏色",
- modal_inheritcolor_text: "繼承子通道的顏色"
- };
- case "ko": //korean
- return {
- context_localchannelsettings_text: "로컬 채널 설정",
- submenu_channelsettings_text: "설정 변경",
- submenu_resetsettings_text: "채널 재설정",
- modal_header_text: "로컬 채널 설정",
- modal_channelname_text: "로컬 채널 이름",
- modal_colorpicker1_text: "지역 채널 색깔",
- modal_inheritcolor_text: "하위 채널에 색상 상속"
- };
- default: //default: english
- return {
- context_localchannelsettings_text: "Local Channelsettings",
- submenu_channelsettings_text: "Change Settings",
- submenu_resetsettings_text: "Reset Channel",
- modal_header_text: "Local Channelsettings",
- modal_channelname_text: "Local Channelname",
- modal_colorpicker1_text: "Local Channelcolor",
- modal_inheritcolor_text: "Inherit color to Sub-Channels"
- };
- }
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/EditServers.config.json b/.config/BetterDiscord/plugins/EditServers.config.json
deleted file mode 100644
index bf342bb..0000000
--- a/.config/BetterDiscord/plugins/EditServers.config.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "changeLog": {
- "version": "2.2.5"
- },
- "changelog": {
- "currentversion": "2.2.3"
- },
- "servers": {
- "624859996949315584": {
- "banner": "https://media.discordapp.net/attachments/624865812888420352/715196061400039474/8PiLwbX.png",
- "color1": null,
- "color2": null,
- "color3": null,
- "color4": null,
- "ignoreCustomName": false,
- "name": "Gerrit",
- "removeBanner": false,
- "removeIcon": false,
- "shortName": null,
- "url": null
- },
- "716039712799719486": {
- "banner": null,
- "color1": [
- 233,
- 30,
- 99,
- 1
- ],
- "color2": [
- 233,
- 30,
- 99,
- 1
- ],
- "color3": [
- 233,
- 30,
- 99,
- 1
- ],
- "color4": [
- 44,
- 44,
- 44,
- 1
- ],
- "ignoreCustomName": false,
- "name": null,
- "removeBanner": false,
- "removeIcon": false,
- "shortName": null,
- "url": null
- }
- },
- "settings": {
- "addOriginalTooltip": true,
- "changeInChat": true,
- "changeInGuildHeader": true,
- "changeInGuildInvites": true,
- "changeInGuildList": true,
- "changeInMutualGuilds": true,
- "changeInQuickSwitcher": true,
- "changeInRecentMentions": true
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/EditServers.plugin.js b/.config/BetterDiscord/plugins/EditServers.plugin.js
deleted file mode 100644
index 5484066..0000000
--- a/.config/BetterDiscord/plugins/EditServers.plugin.js
+++ /dev/null
@@ -1,1106 +0,0 @@
-/**
- * @name EditServers
- * @authorId 278543574059057154
- * @invite Jx3TjNS
- * @donate https://www.paypal.me/MircoWittrien
- * @patreon https://www.patreon.com/MircoWittrien
- * @website https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/EditServers
- * @source https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/EditServers/EditServers.plugin.js
- */
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "EditServers",
- "author": "DevilBro",
- "version": "2.2.5",
- "description": "Allow you to change the icon, name and color of servers"
- },
- "changeLog": {
- "improved": {
- "Welcome Message": "Now also changes the server name in the welcome message"
- }
- }
- };
-
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`* @name BDFDB`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {this.load();}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var changedGuilds = {}, settings = {};
-
- return class EditServers extends Plugin {
- onLoad() {
- this.defaults = {
- settings: {
- addOriginalTooltip: {value:true, inner:false, description:"Hovering over a changed Server Header shows the original Name as Tooltip"},
- changeInGuildList: {value:true, inner:true, description:"Server List"},
- changeInGuildHeader: {value:true, inner:true, description:"Server Header"},
- changeInGuildInvites: {value:true, inner:true, description:"Server Invites"},
- changeInChat: {value:true, inner:true, description:"Chat (Welcome Message, etc.)"},
- changeInMutualGuilds: {value:true, inner:true, description:"Mutual Servers"},
- changeInRecentMentions: {value:true, inner:true, description:"Recent Mentions Popout"},
- changeInQuickSwitcher: {value:true, inner:true, description:"Quick Switcher"}
- }
- };
-
- this.patchedModules = {
- before: {
- Guild: "render",
- GuildIconWrapper: "render",
- MutualGuilds: "render",
- QuickSwitcher: "render",
- QuickSwitchChannelResult: "render",
- GuildSidebar: "render",
- GuildHeader: "render",
- InviteGuildName: "GuildName"
- },
- after: {
- RecentsChannelHeader: "default",
- Guild: "render",
- BlobMask: "render",
- GuildIconWrapper: "render",
- GuildIcon: "render",
- GuildHeader: "render",
- WelcomeArea: "default"
- }
- };
-
- this.patchPriority = 7;
- }
-
- onStart() {
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.IconUtils, "getGuildBannerURL", {instead:e => {
- let guild = BDFDB.LibraryModules.GuildStore.getGuild(e.methodArguments[0].id);
- if (guild) {
- if (e.methodArguments[0].id == "410787888507256842") return guild.banner;
- let data = changedGuilds[guild.id];
- if (data && data.banner && !data.removeBanner) return data.banner;
- }
- return e.callOriginalMethod();
- }});
-
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryComponents.GuildComponents.Guild.prototype, "render", {
- before: e => {this.processGuild({instance:e.thisObject, returnvalue:e.returnValue, methodname:"render"});},
- after: e => {this.processGuild({instance:e.thisObject, returnvalue:e.returnValue, methodname:"render"});}
- });
-
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryComponents.Connectors.Link.prototype, "render", {
- after: e => {
- if (e.thisObject.props.className && e.thisObject.props.className.indexOf(BDFDB.disCN.guildiconwrapper) > -1) this.processGuildAcronym({instance:e.thisObject, returnvalue:e.returnValue, methodname:"render"});
- }
- });
-
- this.forceUpdateAll();
- }
-
- onStop() {
- this.forceUpdateAll();
- }
-
- getSettingsPanel (collapseStates = {}) {
- let settingsPanel, settingsItems = [], innerItems = [];
-
- for (let key in settings) if (!this.defaults.settings[key].inner) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
- title: "Change Servers in:",
- first: settingsItems.length == 0,
- children: Object.keys(settings).map(key => this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }))
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Button",
- color: BDFDB.LibraryComponents.Button.Colors.RED,
- label: "Reset all Servers",
- onClick: _ => {
- BDFDB.ModalUtils.confirm(this, "Are you sure you want to reset all Servers?", _ => {
- BDFDB.DataUtils.remove(this, "servers");
- this.forceUpdateAll();;
- });
- },
- children: BDFDB.LanguageUtils.LanguageStrings.RESET
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed () {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll () {
- changedGuilds = BDFDB.DataUtils.load(this, "servers");
- settings = BDFDB.DataUtils.get(this, "settings");
-
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- onGuildContextMenu (e) {
- if (e.instance.props.guild) {
- let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true});
- children.splice(index > -1 ? index : children.length, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_localserversettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-submenu"),
- children: BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: [
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.submenu_serversettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-change"),
- action: _ => {
- this.openGuildSettingsModal(e.instance.props.guild.id);
- }
- }),
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.submenu_resetsettings_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "settings-reset"),
- disabled: !changedGuilds[e.instance.props.guild.id],
- action: _ => {
- BDFDB.DataUtils.remove(this, "servers", e.instance.props.guild.id);
- this.forceUpdateAll();
- }
- })
- ]
- })
- })
- }));
- }
- }
-
- processGuild (e) {
- if (BDFDB.GuildUtils.is(e.instance.props.guild) && e.instance.props.guild.joinedAt && settings.changeInGuildList) {
- e.instance.props.guild = this.getGuildData(e.instance.props.guild.id);
- if (e.returnvalue) {
- let data = changedGuilds[e.instance.props.guild.id];
- if (data && (data.color3 || data.color4)) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {name: ["GuildTooltip", "BDFDB_TooltipContainer"]});
- if (index > -1) children[index] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- tooltipConfig: {
- type: "right",
- guild: e.instance.props.guild,
- list: true,
- offset: 12,
- backgroundColor: data.color3,
- fontColor: data.color4
- },
- children: children[index].props.children
- });
- }
- }
- }
- }
-
- processBlobMask (e) {
- if (settings.changeInGuildList) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {name: "NavItem"});
- if (index > -1 && children[index].props.to && children[index].props.to.pathname) {
- let guild = BDFDB.LibraryModules.GuildStore.getGuild((children[index].props.to.pathname.split("/channels/")[1] || "").split("/")[0]);
- if (guild) {
- let data = changedGuilds[guild.id];
- if (data) {
- if (data.shortName) children[index].props.name = data.shortName.split("").join(" ");
- else if (data.name && data.ignoreCustomName) children[index].props.name = guild.name;
- }
- }
- }
- }
- }
-
- processGuildAcronym (e) {
- if (typeof e.returnvalue.props.children == "function" && settings.changeInGuildList) {
- let pathname = BDFDB.ObjectUtils.get(e.instance, "props.to.pathname");
- let data = pathname && changedGuilds[(pathname.split("/channels/")[1] || "").split("/")[0]];
- if (data) {
- let renderChildren = e.returnvalue.props.children;
- e.returnvalue.props.children = (...args) => {
- let renderedChildren = renderChildren(...args);
- let guildAcronym = BDFDB.ReactUtils.findChild(renderedChildren, {props:[["className", BDFDB.disCN.guildiconacronym]]});
- if (guildAcronym) {
- let fontGradient = BDFDB.ObjectUtils.is(data.color2);
- guildAcronym.props.style = Object.assign({}, guildAcronym.props.style, {
- background: BDFDB.ObjectUtils.is(data.color1) ? BDFDB.ColorUtils.createGradient(data.color1) : BDFDB.ColorUtils.convert(data.color1, "RGBA"),
- color: !fontGradient && BDFDB.ColorUtils.convert(data.color2, "RGBA")
- });
- if (fontGradient) guildAcronym.props.children = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextGradientElement, {
- gradient: BDFDB.ColorUtils.createGradient(data.color2),
- children: guildAcronym.props.children
- });
- }
- return renderedChildren;
- };
- }
- }
- }
-
- processGuildIconWrapper (e) {
- if (BDFDB.GuildUtils.is(e.instance.props.guild) && e.instance.props.guild.joinedAt) {
- if (e.instance.props.className && e.instance.props.className.indexOf(BDFDB.disCN.guildfolderguildicon) > -1) e.instance.props.guild = this.getGuildData(e.instance.props.guild.id, settings.changeInGuildList);
- else if (e.instance.props.className && e.instance.props.className.indexOf(BDFDB.disCN.listavatar) > -1) e.instance.props.guild = this.getGuildData(e.instance.props.guild.id, settings.changeInMutualGuilds);
- else e.instance.props.guild = this.getGuildData(e.instance.props.guild.id);
- }
- }
-
- processGuildIcon (e) {
- if (BDFDB.GuildUtils.is(e.instance.props.guild) && e.instance.props.guild.joinedAt && e.instance.props.style && (!e.instance.props.style.backgroundImage || e.instance.props.style.backgroundImage == "none")) {
- let data = changedGuilds[e.instance.props.guild.id];
- if (data) {
- if (e.instance.props.className && e.instance.props.className.indexOf(BDFDB.disCN.guildfolderguildicon) > -1) this.changeGuildIcon(e, data, settings.changeInGuildList);
- else if (e.instance.props.className && e.instance.props.className.indexOf(BDFDB.disCN.listavatar) > -1 || BDFDB.ReactUtils.findConstructor(e.instance, "MutualGuild", {up: true})) this.changeGuildIcon(e, data, settings.changeInMutualGuilds);
- else this.changeGuildIcon(e, data);
- }
- }
- }
-
- processMutualGuilds (e) {
- if (settings.changeInMutualGuilds) for (let i in e.instance.props.mutualGuilds) e.instance.props.mutualGuilds[i].guild = this.getGuildData(e.instance.props.mutualGuilds[i].guild.id);
- }
-
- processQuickSwitcher (e) {
- if (settings.changeInQuickSwitcher) for (let i in e.instance.props.results) if (e.instance.props.results[i].type == "GUILD") e.instance.props.results[i].record = this.getGuildData(e.instance.props.results[i].record.id);
- }
-
- processQuickSwitchChannelResult (e) {
- if (e.instance.props.channel && e.instance.props.channel.guild_id && settings.changeInQuickSwitcher) {
- e.instance.props.children.props.children = this.getGuildData(e.instance.props.channel.guild_id).name;
- }
- }
-
- processRecentsChannelHeader (e) {
- if (settings.changeInRecentMentions && BDFDB.ArrayUtils.is(e.returnvalue.props.children)) {
- for (let child of e.returnvalue.props.children) if (child && child.props && child.props.channel && child.type.displayName == "ChannelName") {
- let oldType = child.type;
- child.type = (...args) => {
- let instance = oldType(...args);
- let guildName = BDFDB.ReactUtils.findChild(instance, {props:[["className", BDFDB.disCN.recentmentionsguildname]]});
- if (guildName) guildName.props.children = (this.getGuildData(e.instance.props.channel.guild_id) || {}).name || guildName.props.children;
- return instance;
- };
- child.type.displayName = oldType.displayName;
- }
- }
- }
-
- processGuildSidebar (e) {
- if (e.instance.props.guild) {
- let data = changedGuilds[e.instance.props.guild.id];
- if (data) {
- if (data.removeBanner) e.instance.props.guild = new BDFDB.DiscordObjects.Guild(Object.assign({}, e.instance.props.guild, {banner: null}));
- else if (data.banner) e.instance.props.guild = new BDFDB.DiscordObjects.Guild(Object.assign({}, e.instance.props.guild, {banner: data.banner}));
- }
- }
- }
-
- processGuildHeader (e) {
- if (e.instance.props.guild && settings.changeInGuildHeader) {
- e.instance.props.guild = this.getGuildData(e.instance.props.guild.id);
- let oldName = (BDFDB.LibraryModules.GuildStore.getGuild(e.instance.props.guild.id) || {}).name;
- if (e.returnvalue && settings.addOriginalTooltip && oldName != e.instance.props.guild.name) {
- e.returnvalue.props.children[0] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: oldName,
- children: e.returnvalue.props.children[0],
- tooltipConfig: {type: "right"}
- });
- }
- }
- }
-
- processInviteGuildName (e) {
- if (e.instance.props.guild && e.instance.props.guild.joinedAt && settings.changeInGuildInvites) {
- e.instance.props.guild = this.getGuildData(e.instance.props.guild.id);
- }
- }
-
- processWelcomeArea (e) {
- if (e.instance.props.channel && settings.changeInChat) {
- let name = (BDFDB.LibraryModules.GuildStore.getGuild(e.instance.props.channel.guild_id) || {}).name;
- let guildName = name && BDFDB.ReactUtils.findChild(e.returnvalue, {props:[["className", "titleName-3-Lp3Z"]]});
- if (guildName && guildName.props && BDFDB.ArrayUtils.is(guildName.props.children)) {
- for (let child of guildName.props.children) if (child && child.props && BDFDB.ArrayUtils.is(child.props.children) && child.props.children[0] == name) {
- child.props.children = [(this.getGuildData(e.instance.props.channel.guild_id) || {}).name || name];
- break;
- }
- }
- }
- }
-
- getGuildData (guildId, change = true) {
- let guild = BDFDB.LibraryModules.GuildStore.getGuild(guildId);
- if (!guild) return new BDFDB.DiscordObjects.Guild({});
- let data = change && changedGuilds[guild.id];
- if (data) {
- let newGuildObject = {}, nativeObject = new BDFDB.DiscordObjects.Guild(guild);
- for (let key in nativeObject) newGuildObject[key] = nativeObject[key];
- newGuildObject.name = data.name || nativeObject.name;
- newGuildObject.acronym = data.shortName && data.shortName.replace(/\s/g, "") || BDFDB.LibraryModules.StringUtils.getAcronym(!data.ignoreCustomName && data.name || nativeObject.name);
- if (data.removeIcon) {
- newGuildObject.icon = null;
- newGuildObject.getIconURL = _ => {return null;};
- }
- else if (data.url) {
- newGuildObject.icon = data.url;
- newGuildObject.getIconURL = _ => {return data.url;};
- }
- if (data.removeBanner) newGuildObject.banner = null;
- else if (data.banner) newGuildObject.banner = data.banner;
- return newGuildObject;
- }
- return new BDFDB.DiscordObjects.Guild(guild);
- }
-
- changeGuildIcon (e, data, change = true) {
- if (change) {
- let fontGradient = BDFDB.ObjectUtils.is(data.color2);
- e.returnvalue.props.style = Object.assign({}, e.returnvalue.props.style, {
- background: BDFDB.ObjectUtils.is(data.color1) ? BDFDB.ColorUtils.createGradient(data.color1) : BDFDB.ColorUtils.convert(data.color1, "RGBA"),
- color: !fontGradient && BDFDB.ColorUtils.convert(data.color2, "RGBA")
- });
- if (fontGradient) e.returnvalue.props.children[0] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextGradientElement, {
- gradient: BDFDB.ColorUtils.createGradient(data.color2),
- children: e.returnvalue.props.children[0]
- });
- }
- }
-
- openGuildSettingsModal (guildId) {
- let guild = BDFDB.LibraryModules.GuildStore.getGuild(guildId);
- if (!guild) return;
- let data = changedGuilds[guild.id] || {};
-
- let currentIgnoreCustomNameState = data.ignoreCustomName;
-
- BDFDB.ModalUtils.open(this, {
- size: "MEDIUM",
- header: this.labels.modal_header_text,
- subheader: guild.name,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ModalComponents.ModalTabContent, {
- tab: this.labels.modal_tabheader1_text,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_guildname_text,
- className: BDFDB.disCN.marginbottom20,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-guildname",
- key: "GUILDNAME",
- value: data.name,
- placeholder: guild.name,
- autoFocus: true,
- onChange: (value, instance) => {
- if (!currentIgnoreCustomNameState) {
- let acronymInputIns = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return.return.return, {key: "GUILDACRONYM"});
- if (acronymInputIns) {
- acronymInputIns.props.placeholder = value && BDFDB.LibraryModules.StringUtils.getAcronym(value) || guild.acronym;
- BDFDB.ReactUtils.forceUpdate(acronymInputIns);
- }
- }
- }
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_guildacronym_text,
- className: BDFDB.disCN.marginbottom8,
- children:
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-guildacronym",
- key: "GUILDACRONYM",
- value: data.shortName,
- placeholder: !data.ignoreCustomName && data.name && BDFDB.LibraryModules.StringUtils.getAcronym(data.name) || guild.acronym
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Switch",
- className: BDFDB.disCN.marginbottom20 + " input-ignorecustomname",
- label: this.labels.modal_ignorecustomname_text,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- value: data.ignoreCustomName,
- onChange: (value, instance) => {
- currentIgnoreCustomNameState = value;
- let nameInputIns = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return, {key: "GUILDNAME"});
- let acronymInputIns = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return, {key: "GUILDACRONYM"});
- if (nameInputIns && acronymInputIns) {
- acronymInputIns.props.placeholder = !value && nameInputIns.props.value && BDFDB.LibraryModules.StringUtils.getAcronym(nameInputIns.props.value) || guild.acronym;
- BDFDB.ReactUtils.forceUpdate(acronymInputIns);
- }
- }
- }),
- BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.marginbottom8,
- align: BDFDB.LibraryComponents.Flex.Align.CENTER,
- direction: BDFDB.LibraryComponents.Flex.Direction.HORIZONTAL,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormTitle, {
- className: BDFDB.disCN.marginreset,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- children: this.labels.modal_guildicon_text
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- className: "input-removeicon",
- type: "Switch",
- margin: 0,
- grow: 0,
- label: BDFDB.LanguageUtils.LanguageStrings.REMOVE,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- value: data.removeIcon,
- onChange: (value, instance) => {
- let iconInputIins = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return.return, {key: "GUILDICON"});
- if (iconInputIins) {
- delete iconInputIins.props.success;
- delete iconInputIins.props.errorMessage;
- iconInputIins.props.disabled = value;
- BDFDB.ReactUtils.forceUpdate(iconInputIins);
- }
- }
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-guildicon",
- key: "GUILDICON",
- success: !data.removeIcon && data.url,
- maxLength: 100000000000000000000,
- value: data.url,
- placeholder: BDFDB.GuildUtils.getIcon(guild.id),
- disabled: data.removeIcon,
- onChange: (value, instance) => {
- this.checkUrl(value, instance);
- }
- })
- ]
- }),
- BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.marginbottom8,
- align: BDFDB.LibraryComponents.Flex.Align.CENTER,
- direction: BDFDB.LibraryComponents.Flex.Direction.HORIZONTAL,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormTitle, {
- className: BDFDB.disCN.marginreset,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- children: this.labels.modal_guildbanner_text
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- className: "input-removebanner",
- type: "Switch",
- margin: 0,
- grow: 0,
- label: BDFDB.LanguageUtils.LanguageStrings.REMOVE,
- tag: BDFDB.LibraryComponents.FormComponents.FormTitle.Tags.H5,
- value: data.removeBanner && guild.id != "410787888507256842",
- disabled: guild.id == "410787888507256842",
- onChange: (value, instance) => {
- let bannerInputIns = BDFDB.ReactUtils.findOwner(instance._reactInternalFiber.return.return, {key: "GUILDBANNER"});
- if (bannerInputIns) {
- delete bannerInputIns.props.success;
- delete bannerInputIns.props.errorMessage;
- bannerInputIns.props.disabled = value;
- BDFDB.ReactUtils.forceUpdate(bannerInputIns);
- }
- }
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-guildbanner",
- key: "GUILDBANNER",
- success: !data.removeBanner && data.banner,
- maxLength: 100000000000000000000,
- value: data.banner,
- placeholder: BDFDB.GuildUtils.getBanner(guild.id),
- disabled: data.removeBanner || guild.id == "410787888507256842",
- onChange: (value, instance) => {
- this.checkUrl(value, instance);
- }
- })
- ]
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ModalComponents.ModalTabContent, {
- tab: this.labels.modal_tabheader2_text,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker1_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color1,
- number: 1
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker2_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color2,
- number: 2
- })
- ]
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ModalComponents.ModalTabContent, {
- tab: this.labels.modal_tabheader3_text,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker3_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color3,
- number: 3
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker4_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color4,
- number: 4
- })
- ]
- })
- ]
- })
- ],
- buttons: [{
- contents: BDFDB.LanguageUtils.LanguageStrings.SAVE,
- color: "BRAND",
- close: true,
- click: modal => {
- let oldData = Object.assign({}, data);
-
- let guildnameinput = modal.querySelector(".input-guildname " + BDFDB.dotCN.input);
- let guildacronyminput = modal.querySelector(".input-guildacronym " + BDFDB.dotCN.input);
- let ignorecustomnameinput = modal.querySelector(".input-ignorecustomname " + BDFDB.dotCN.switchinner);
- let guildiconinput = modal.querySelector(".input-guildicon " + BDFDB.dotCN.input);
- let removeiconinput = modal.querySelector(".input-removeicon " + BDFDB.dotCN.switchinner);
- let guildbannerinput = modal.querySelector(".input-guildbanner " + BDFDB.dotCN.input);
- let removebannerinput = modal.querySelector(".input-removebanner " + BDFDB.dotCN.switchinner);
-
- data.name = guildnameinput.value.trim() || null;
- data.shortName = guildacronyminput.value.trim() || null;
- data.ignoreCustomName = ignorecustomnameinput.checked;
- data.url = (!data.removeIcon && BDFDB.DOMUtils.containsClass(guildiconinput, BDFDB.disCN.inputsuccess) ? guildiconinput.value.trim() : null) || null;
- data.removeIcon = removeiconinput.checked;
- data.banner = (!data.removeBanner && BDFDB.DOMUtils.containsClass(guildbannerinput, BDFDB.disCN.inputsuccess) ? guildbannerinput.value.trim() : null) || null;
- data.removeBanner = removebannerinput.checked && guild.id != "410787888507256842";
-
- data.color1 = BDFDB.ColorUtils.getSwatchColor(modal, 1);
- data.color2 = BDFDB.ColorUtils.getSwatchColor(modal, 2);
- data.color3 = BDFDB.ColorUtils.getSwatchColor(modal, 3);
- data.color4 = BDFDB.ColorUtils.getSwatchColor(modal, 4);
-
- let changed = false;
- if (Object.keys(data).every(key => !data[key]) && (changed = true)) BDFDB.DataUtils.remove(this, "servers", guild.id);
- else if (!BDFDB.equals(oldData, data) && (changed = true)) BDFDB.DataUtils.save(data, this, "servers", guild.id);
- if (changed) this.forceUpdateAll();;
- }
- }]
- });
- }
-
- checkUrl (url, instance) {
- BDFDB.TimeUtils.clear(instance.checkTimeout);
- if (url == null || !url.trim()) {
- delete instance.props.success;
- delete instance.props.errorMessage;
- instance.forceUpdate();
- }
- else instance.checkTimeout = BDFDB.TimeUtils.timeout(_ => {
- BDFDB.LibraryRequires.request(url.trim(), (error, response, result) => {
- if (response && response.headers["content-type"] && response.headers["content-type"].indexOf("image") != -1) {
- instance.props.success = true;
- delete instance.props.errorMessage;
- }
- else {
- delete instance.props.success;
- instance.props.errorMessage = this.labels.modal_invalidurl_text;
- }
- delete instance.checkTimeout;
- instance.forceUpdate();
- });
- }, 1000);
- }
-
- setBanner (id, data) {
- data = data || {};
- let guild = BDFDB.LibraryModules.GuildStore.getGuild(id);
- if (!guild) return;
- if (guild.EditServersCachedBanner === undefined) guild.EditServersCachedBanner = guild.banner;
- guild.banner = data.removeBanner ? null : (data.banner || guild.EditServersCachedBanner);
- }
-
- setLabelsByLanguage () {
- switch (BDFDB.LanguageUtils.getLanguage().id) {
- case "hr": //croatian
- return {
- context_localserversettings_text: "Lokalne postavke poslužitelja",
- submenu_serversettings_text: "Promijeni postavke",
- submenu_resetsettings_text: "Ponovno postavite poslužitelj",
- modal_header_text: "Lokalne postavke poslužitelja",
- modal_guildname_text: "Naziv lokalnog poslužitelja",
- modal_guildacronym_text: "Akronim lokalnog poslužitelja",
- modal_ignorecustomname_text: "Koristite izvorno ime poslužitelja za akronim poslužitelja",
- modal_guildicon_text: "Ikona",
- modal_guildbanner_text: "Baner",
- modal_tabheader1_text: "Poslužitelja",
- modal_tabheader2_text: "Boja ikona",
- modal_tabheader3_text: "Boja tooltip",
- modal_colorpicker1_text: "Boja ikona",
- modal_colorpicker2_text: "Boja fonta",
- modal_colorpicker3_text: "Boja tooltip",
- modal_colorpicker4_text: "Boja fonta",
- modal_invalidurl_text: "Nevažeći URL"
- };
- case "da": //danish
- return {
- context_localserversettings_text: "Lokal serverindstillinger",
- submenu_serversettings_text: "Skift indstillinger",
- submenu_resetsettings_text: "Nulstil server",
- modal_header_text: "Lokal serverindstillinger",
- modal_guildname_text: "Lokalt servernavn",
- modal_guildacronym_text: "Lokalt serverakronym",
- modal_ignorecustomname_text: "Brug det originale servernavn til serverens akronym",
- modal_guildicon_text: "Ikon",
- modal_guildbanner_text: "Banner",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Ikonfarve",
- modal_tabheader3_text: "Tooltipfarve",
- modal_colorpicker1_text: "Ikonfarve",
- modal_colorpicker2_text: "Skriftfarve",
- modal_colorpicker3_text: "Tooltipfarve",
- modal_colorpicker4_text: "Skriftfarve",
- modal_invalidurl_text: "Ugyldig URL"
- };
- case "de": //german
- return {
- context_localserversettings_text: "Lokale Servereinstellungen",
- submenu_serversettings_text: "Einstellungen ändern",
- submenu_resetsettings_text: "Server zurücksetzen",
- modal_header_text: "Lokale Servereinstellungen",
- modal_guildname_text: "Lokaler Servername",
- modal_guildacronym_text: "Lokales Serverkürzel",
- modal_ignorecustomname_text: "Benutze den ursprünglichen Servernamen für das Serverkürzel",
- modal_guildicon_text: "Icon",
- modal_guildbanner_text: "Banner",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Iconfarbe",
- modal_tabheader3_text: "Tooltipfarbe",
- modal_colorpicker1_text: "Iconfarbe",
- modal_colorpicker2_text: "Schriftfarbe",
- modal_colorpicker3_text: "Tooltipfarbe",
- modal_colorpicker4_text: "Schriftfarbe",
- modal_invalidurl_text: "Ungültige URL"
- };
- case "es": //spanish
- return {
- context_localserversettings_text: "Ajustes local de servidor",
- submenu_serversettings_text: "Cambiar ajustes",
- submenu_resetsettings_text: "Restablecer servidor",
- modal_header_text: "Ajustes local de servidor",
- modal_guildname_text: "Nombre local del servidor",
- modal_guildacronym_text: "Acrónimo local del servidor",
- modal_ignorecustomname_text: "Use el nombre del servidor original para el acrónimo del servidor",
- modal_guildicon_text: "Icono",
- modal_guildbanner_text: "Bandera",
- modal_tabheader1_text: "Servidor",
- modal_tabheader2_text: "Color del icono",
- modal_tabheader3_text: "Color de tooltip",
- modal_colorpicker1_text: "Color del icono",
- modal_colorpicker2_text: "Color de fuente",
- modal_colorpicker3_text: "Color de tooltip",
- modal_colorpicker4_text: "Color de fuente",
- modal_invalidurl_text: "URL inválida"
- };
- case "fr": //french
- return {
- context_localserversettings_text: "Paramètres locale du serveur",
- submenu_serversettings_text: "Modifier les paramètres",
- submenu_resetsettings_text: "Réinitialiser le serveur",
- modal_header_text: "Paramètres locale du serveur",
- modal_guildname_text: "Nom local du serveur",
- modal_guildacronym_text: "Acronyme local de serveur",
- modal_ignorecustomname_text: "Utilisez le nom de serveur d'origine pour l'acronyme de serveur",
- modal_guildicon_text: "Icône",
- modal_guildbanner_text: "Bannière",
- modal_tabheader1_text: "Serveur",
- modal_tabheader2_text: "Couleur de l'icône",
- modal_tabheader3_text: "Couleur de tooltip",
- modal_colorpicker1_text: "Couleur de l'icône",
- modal_colorpicker2_text: "Couleur de la police",
- modal_colorpicker3_text: "Couleur de tooltip",
- modal_colorpicker4_text: "Couleur de la police",
- modal_invalidurl_text: "URL invalide"
- };
- case "it": //italian
- return {
- context_localserversettings_text: "Impostazioni locale server",
- submenu_serversettings_text: "Cambia impostazioni",
- submenu_resetsettings_text: "Ripristina server",
- modal_header_text: "Impostazioni locale server",
- modal_guildname_text: "Nome locale server",
- modal_guildacronym_text: "Acronimo locale server",
- modal_ignorecustomname_text: "Utilizzare il nome del server originale per l'acronimo del server",
- modal_guildicon_text: "Icona",
- modal_guildbanner_text: "Bandiera",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Colore dell'icona",
- modal_tabheader3_text: "Colore della tooltip",
- modal_colorpicker1_text: "Colore dell'icona",
- modal_colorpicker2_text: "Colore del carattere",
- modal_colorpicker3_text: "Colore della tooltip",
- modal_colorpicker4_text: "Colore del carattere",
- modal_invalidurl_text: "URL non valido"
- };
- case "nl": //dutch
- return {
- context_localserversettings_text: "Lokale serverinstellingen",
- submenu_serversettings_text: "Verandere instellingen",
- submenu_resetsettings_text: "Reset server",
- modal_header_text: "Lokale serverinstellingen",
- modal_guildname_text: "Lokale servernaam",
- modal_guildacronym_text: "Lokale server acroniem",
- modal_ignorecustomname_text: "Gebruik de oorspronkelijke servernaam voor het serveracrononiem",
- modal_guildicon_text: "Icoon",
- modal_guildbanner_text: "Banier",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Icoonkleur",
- modal_tabheader3_text: "Tooltipkleur",
- modal_colorpicker1_text: "Icoonkleur",
- modal_colorpicker2_text: "Doopvontkleur",
- modal_colorpicker3_text: "Tooltipkleur",
- modal_colorpicker4_text: "Doopvontkleur",
- modal_invalidurl_text: "Ongeldige URL"
- };
- case "no": //norwegian
- return {
- context_localserversettings_text: "Lokal serverinnstillinger",
- submenu_serversettings_text: "Endre innstillinger",
- submenu_resetsettings_text: "Tilbakestill server",
- modal_header_text: "Lokal serverinnstillinger",
- modal_guildname_text: "Lokalt servernavn",
- modal_guildacronym_text: "Lokalt serverforkortelse",
- modal_ignorecustomname_text: "Bruk det originale servernavnet til serverforkortelsen",
- modal_guildicon_text: "Ikon",
- modal_guildbanner_text: "Banner",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Ikonfarge",
- modal_tabheader3_text: "Tooltipfarge",
- modal_colorpicker1_text: "Ikonfarge",
- modal_colorpicker2_text: "Skriftfarge",
- modal_colorpicker3_text: "Tooltipfarge",
- modal_colorpicker4_text: "Skriftfarge",
- modal_invalidurl_text: "Ugyldig URL"
- };
- case "pl": //polish
- return {
- context_localserversettings_text: "Lokalne ustawienia serwera",
- submenu_serversettings_text: "Zmień ustawienia",
- submenu_resetsettings_text: "Resetuj ustawienia",
- modal_header_text: "Lokalne ustawienia serwera",
- modal_guildname_text: "Lokalna nazwa serwera",
- modal_guildacronym_text: "Akronim lokalnego serwera",
- modal_ignorecustomname_text: "Użyj oryginalnej nazwy serwera dla akronimu serwera",
- modal_guildicon_text: "Ikona",
- modal_guildbanner_text: "Baner",
- modal_tabheader1_text: "Serwer",
- modal_tabheader2_text: "Kolor ikony",
- modal_tabheader3_text: "Kolor podpowiedzi",
- modal_colorpicker1_text: "Kolor ikony",
- modal_colorpicker2_text: "Kolor czcionki",
- modal_colorpicker3_text: "Kolor podpowiedzi",
- modal_colorpicker4_text: "Kolor czcionki",
- modal_invalidurl_text: "Nieprawidłowe URL"
- };
- case "pt-BR": //portuguese (brazil)
- return {
- context_localserversettings_text: "Configurações local do servidor",
- submenu_serversettings_text: "Mudar configurações",
- submenu_resetsettings_text: "Redefinir servidor",
- modal_header_text: "Configurações local do servidor",
- modal_guildname_text: "Nome local do servidor",
- modal_guildacronym_text: "Acrônimo local de servidor",
- modal_ignorecustomname_text: "Use o nome do servidor original para a sigla do servidor",
- modal_guildicon_text: "Icone",
- modal_guildbanner_text: "Bandeira",
- modal_tabheader1_text: "Servidor",
- modal_tabheader2_text: "Cor do ícone",
- modal_tabheader3_text: "Cor da tooltip",
- modal_colorpicker1_text: "Cor do ícone",
- modal_colorpicker2_text: "Cor da fonte",
- modal_colorpicker3_text: "Cor da tooltip",
- modal_colorpicker4_text: "Cor da fonte",
- modal_invalidurl_text: "URL inválida"
- };
- case "fi": //finnish
- return {
- context_localserversettings_text: "Paikallinen palvelimen asetukset",
- submenu_serversettings_text: "Vaihda asetuksia",
- submenu_resetsettings_text: "Nollaa palvelimen",
- modal_header_text: "Paikallinen palvelimen asetukset",
- modal_guildname_text: "Paikallinen palvelimenimi",
- modal_guildacronym_text: "Paikallisen palvelimen lyhenne",
- modal_ignorecustomname_text: "Käytä alkuperäistä palvelimen nimeä palvelimen lyhenteessä",
- modal_guildicon_text: "Ikonin",
- modal_guildbanner_text: "Banneri",
- modal_tabheader1_text: "Palvelimen",
- modal_tabheader2_text: "Ikoninväri",
- modal_tabheader3_text: "Tooltipväri",
- modal_colorpicker1_text: "Ikoninväri",
- modal_colorpicker2_text: "Fontinväri",
- modal_colorpicker3_text: "Tooltipväri",
- modal_colorpicker4_text: "Fontinväri",
- modal_invalidurl_text: "Virheellinen URL"
- };
- case "sv": //swedish
- return {
- context_localserversettings_text: "Lokal serverinställningar",
- submenu_serversettings_text: "Ändra inställningar",
- submenu_resetsettings_text: "Återställ server",
- modal_header_text: "Lokal serverinställningar",
- modal_guildname_text: "Lokalt servernamn",
- modal_guildacronym_text: "Lokal server förkortning",
- modal_ignorecustomname_text: "Använd det ursprungliga servernamnet för serverförkortningen",
- modal_guildicon_text: "Ikon",
- modal_guildbanner_text: "Banderoll",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Ikonfärg",
- modal_tabheader3_text: "Tooltipfärg",
- modal_colorpicker1_text: "Ikonfärg",
- modal_colorpicker2_text: "Fontfärg",
- modal_colorpicker3_text: "Tooltipfärg",
- modal_colorpicker4_text: "Fontfärg",
- modal_invalidurl_text: "Ogiltig URL"
- };
- case "tr": //turkish
- return {
- context_localserversettings_text: "Yerel Sunucu Ayarları",
- submenu_serversettings_text: "Ayarları Değiştir",
- submenu_resetsettings_text: "Sunucu Sıfırla",
- modal_header_text: "Yerel sunucu ayarları",
- modal_guildname_text: "Yerel sunucu adı",
- modal_guildacronym_text: "Yerel sunucu kısaltması",
- modal_ignorecustomname_text: "Sunucu kısaltması için orijinal sunucu adını kullanın",
- modal_guildicon_text: "Simge",
- modal_guildbanner_text: "Afişi",
- modal_tabheader1_text: "Sunucu",
- modal_tabheader2_text: "Simge rengi",
- modal_tabheader3_text: "Tooltip rengi",
- modal_colorpicker1_text: "Simge rengi",
- modal_colorpicker2_text: "Yazı rengi",
- modal_colorpicker3_text: "Tooltip rengi",
- modal_colorpicker4_text: "Yazı rengi",
- modal_invalidurl_text: "Geçersiz URL"
- };
- case "cs": //czech
- return {
- context_localserversettings_text: "Místní nastavení serveru",
- submenu_serversettings_text: "Změnit nastavení",
- submenu_resetsettings_text: "Obnovit server",
- modal_header_text: "Místní nastavení serveru",
- modal_guildname_text: "Místní název serveru",
- modal_guildacronym_text: "Zkratka místního serveru",
- modal_ignorecustomname_text: "Pro zkratku serveru použijte původní název serveru",
- modal_guildicon_text: "Ikony",
- modal_guildbanner_text: "Prapor",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Barva ikony",
- modal_tabheader3_text: "Barva tooltip",
- modal_colorpicker1_text: "Barva ikony",
- modal_colorpicker2_text: "Barva fontu",
- modal_colorpicker3_text: "Barva tooltip",
- modal_colorpicker4_text: "Barva fontu",
- modal_invalidurl_text: "Neplatná URL"
- };
- case "bg": //bulgarian
- return {
- context_localserversettings_text: "Настройки за локални cървър",
- submenu_serversettings_text: "Промяна на настройките",
- submenu_resetsettings_text: "Възстановяване на cървър",
- modal_header_text: "Настройки за локални cървър",
- modal_guildname_text: "Локално име на cървър",
- modal_guildacronym_text: "Акроним на локалния сървър",
- modal_ignorecustomname_text: "Използвайте оригиналното име на сървъра за съкращението на сървъра",
- modal_guildicon_text: "Икона",
- modal_guildbanner_text: "Знаме",
- modal_tabheader1_text: "Cървър",
- modal_tabheader2_text: "Цвят на иконата",
- modal_tabheader3_text: "Цвят на подсказка",
- modal_colorpicker1_text: "Цвят на иконата",
- modal_colorpicker2_text: "Цвят на шрифта",
- modal_colorpicker3_text: "Цвят на подсказка",
- modal_colorpicker4_text: "Цвят на шрифта",
- modal_invalidurl_text: "Невалиден URL"
- };
- case "ru": //russian
- return {
- context_localserversettings_text: "Настройки локального cервер",
- submenu_serversettings_text: "Изменить настройки",
- submenu_resetsettings_text: "Сбросить cервер",
- modal_header_text: "Настройки локального cервер",
- modal_guildname_text: "Имя локального cервер",
- modal_guildacronym_text: "Акроним локального сервера",
- modal_ignorecustomname_text: "Используйте оригинальное имя сервера для сокращения сервера",
- modal_guildicon_text: "Значок",
- modal_guildbanner_text: "Баннер",
- modal_tabheader1_text: "Cервер",
- modal_tabheader2_text: "Цвет значков",
- modal_tabheader3_text: "Цвет подсказка",
- modal_colorpicker1_text: "Цвет значков",
- modal_colorpicker2_text: "Цвет шрифта",
- modal_colorpicker3_text: "Цвет подсказка",
- modal_colorpicker4_text: "Цвет шрифта",
- modal_invalidurl_text: "Неверная URL"
- };
- case "uk": //ukrainian
- return {
- context_localserversettings_text: "Налаштування локального cервер",
- submenu_serversettings_text: "Змінити налаштування",
- submenu_resetsettings_text: "Скидання cервер",
- modal_header_text: "Налаштування локального cервер",
- modal_guildname_text: "Локальне ім'я cервер",
- modal_guildacronym_text: "Акронім локального сервера",
- modal_ignorecustomname_text: "Використовуйте оригінальне ім'я сервера для абревіатури сервера",
- modal_guildicon_text: "Іконка",
- modal_guildbanner_text: "Банер",
- modal_tabheader1_text: "Cервер",
- modal_tabheader2_text: "Колір ікони",
- modal_tabheader3_text: "Колір підказка",
- modal_colorpicker1_text: "Колір ікони",
- modal_colorpicker2_text: "Колір шрифту",
- modal_colorpicker3_text: "Колір підказка",
- modal_colorpicker4_text: "Колір шрифту",
- modal_invalidurl_text: "Недійсна URL"
- };
- case "ja": //japanese
- return {
- context_localserversettings_text: "ローカルサーバー設定",
- submenu_serversettings_text: "設定を変更する",
- submenu_resetsettings_text: "サーバーをリセットする",
- modal_header_text: "ローカルサーバー設定",
- modal_guildname_text: "ローカルサーバー名",
- modal_guildacronym_text: "ローカルサーバーの頭字語",
- modal_ignorecustomname_text: "サーバーの頭字語に元のサーバー名を使用する",
- modal_guildicon_text: "アイコン",
- modal_guildbanner_text: "バナー",
- modal_tabheader1_text: "サーバー",
- modal_tabheader2_text: "アイコンの色",
- modal_tabheader3_text: "ツールチップの色",
- modal_colorpicker1_text: "アイコンの色",
- modal_colorpicker2_text: "フォントの色",
- modal_colorpicker3_text: "ツールチップの色",
- modal_colorpicker4_text: "フォントの色",
- modal_invalidurl_text: "無効な URL"
- };
- case "zh-TW": //chinese (traditional)
- return {
- context_localserversettings_text: "本地服務器設置",
- submenu_serversettings_text: "更改設置",
- submenu_resetsettings_text: "重置服務器",
- modal_header_text: "本地服務器設置",
- modal_guildname_text: "服務器名稱",
- modal_guildacronym_text: "本地服務器縮寫",
- modal_ignorecustomname_text: "使用原始服務器名稱作為服務器首字母縮寫",
- modal_guildicon_text: "圖標",
- modal_guildbanner_text: "旗幟",
- modal_tabheader1_text: "服務器",
- modal_tabheader2_text: "圖標顏色",
- modal_tabheader3_text: "工具提示顏色",
- modal_colorpicker1_text: "圖標顏色",
- modal_colorpicker2_text: "字體顏色",
- modal_colorpicker3_text: "工具提示顏色",
- modal_colorpicker4_text: "字體顏色",
- modal_invalidurl_text: "無效的 URL"
- };
- case "ko": //korean
- return {
- context_localserversettings_text: "로컬 서버 설정",
- submenu_serversettings_text: "설정 변경",
- submenu_resetsettings_text: "서버 재설정",
- modal_header_text: "로컬 서버 설정",
- modal_guildname_text: "로컬 서버 이름",
- modal_guildacronym_text: "로컬 서버 약어",
- modal_ignorecustomname_text: "서버 약어에 원래 서버 이름을 사용하십시오",
- modal_guildicon_text: "상",
- modal_guildbanner_text: "기치",
- modal_tabheader1_text: "서버",
- modal_tabheader2_text: "상 색깔",
- modal_tabheader3_text: "툴팁 색깔",
- modal_colorpicker1_text: "상 색깔",
- modal_colorpicker2_text: "글꼴 색깔",
- modal_colorpicker3_text: "툴팁 색깔",
- modal_colorpicker4_text: "글꼴 색깔",
- modal_invalidurl_text: "잘못된 URL"
- };
- default: //default: english
- return {
- context_localserversettings_text: "Local Serversettings",
- submenu_serversettings_text: "Change Settings",
- submenu_resetsettings_text: "Reset Server",
- modal_header_text: "Local Serversettings",
- modal_guildname_text: "Local Servername",
- modal_guildacronym_text: "Local Serveracronym",
- modal_ignorecustomname_text: "Use the original Servername for the Serveracronym",
- modal_guildicon_text: "Icon",
- modal_guildbanner_text: "Banner",
- modal_tabheader1_text: "Server",
- modal_tabheader2_text: "Iconcolor",
- modal_tabheader3_text: "Tooltipcolor",
- modal_colorpicker1_text: "Iconcolor",
- modal_colorpicker2_text: "Fontcolor",
- modal_colorpicker3_text: "Tooltipcolor",
- modal_colorpicker4_text: "Fontcolor",
- modal_invalidurl_text: "Invalid URL"
- };
- }
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/NotificationSounds.config.json b/.config/BetterDiscord/plugins/NotificationSounds.config.json
deleted file mode 100644
index 7cf7638..0000000
--- a/.config/BetterDiscord/plugins/NotificationSounds.config.json
+++ /dev/null
@@ -1,329 +0,0 @@
-{
- "audios": {
- "---": {
- "---": null
- },
- "Default": {
- "Communication Channel": "https://notificationsounds.com/soundfiles/63538fe6ef330c13a05a3ed7e599d5f7/file-sounds-917-communication-channel.wav",
- "Isn't it": "https://notificationsounds.com/soundfiles/ba2fd310dcaa8781a9a652a31baf3c68/file-sounds-969-isnt-it.wav",
- "Job Done": "https://notificationsounds.com/soundfiles/5b69b9cb83065d403869739ae7f0995e/file-sounds-937-job-done.wav",
- "Served": "https://notificationsounds.com/soundfiles/b337e84de8752b27eda3a12363109e80/file-sounds-913-served.wav",
- "Solemn": "https://notificationsounds.com/soundfiles/53fde96fcc4b4ce72d7739202324cd49/file-sounds-882-solemn.wav",
- "System Fault": "https://notificationsounds.com/soundfiles/ebd9629fc3ae5e9f6611e2ee05a31cef/file-sounds-990-system-fault.wav",
- "You wouldn't believe": "https://notificationsounds.com/soundfiles/087408522c31eeb1f982bc0eaf81d35f/file-sounds-949-you-wouldnt-believe.wav"
- },
- "Discord": {
- "HotKeys Window Down": "/assets/71f048f8aa7d4b24bf4268a87cbbb192.mp3",
- "HotKeys Window Left": "/assets/1de04408e62b5d52ae3ebbb91e9e1978.mp3",
- "HotKeys Window Right": "/assets/2c0433f93db8449e4a82b76dc520cb29.mp3",
- "HotKeys Window Up": "/assets/68472713f7a62c7c37e0a6a5d5a1faeb.mp3",
- "Human Man Voice": "/assets/a37dcd6272ae41cf49295d58c9806fe3.mp3",
- "Incoming Call": "/assets/84a1b4e11d634dbfa1e5dd97a96de3ad.mp3",
- "Incoming Call Beat": "/assets/b9411af07f154a6fef543e7e442e4da9.mp3",
- "Mention Ping": "/assets/fa4d62c3cbc80733bf1f01b9c6f181de.mp3",
- "Mention Ping 2": "/assets/a5f42064e8120e381528b14fd3188b72.mp3",
- "Mention Ping 3": "/assets/84c9fa3d07da865278bd77c97d952db4.mp3",
- "New Chatmessage": "/assets/dd920c06a01e5bb8b09678581e29d56f.mp3",
- "New Chatmessage 2": "/assets/15fe810f6cfab609c7fcda61652b9b34.mp3",
- "New Chatmessage 3": "/assets/53ce6a92d3c233e8b4ac529d34d374e4.mp3",
- "Outgoing Call": "/assets/c6e92752668dde4eee5923d70441579f.mp3",
- "Overlay Unlocked": "/assets/ad322ffe0a88436296158a80d5d11baa.mp3",
- "Push2Talk Start": "/assets/8b63833c8d252fedba6b9c4f2517c705.mp3",
- "Push2Talk Stop": "/assets/74ab980d6890a0fa6aa0336182f9f620.mp3",
- "Robot Man Voice": "/assets/66598bea6e59eb8acdf32cf2d9d75ba9.mp3",
- "Stream Ended": "/assets/4e30f98aa537854f79f49a76af822bbc.mp3",
- "Stream Started": "/assets/9ca817f41727edc1b2f1bc4f1911107c.mp3",
- "Stream User Joined": "/assets/5827bbf9a67c61cbb0e02ffbf434b654.mp3",
- "Stream User Left": "/assets/7cdcdcbc426cc43583365a671c24b740.mp3",
- "Unknown": "/assets/ae7d16bb2eea76b9b9977db0fad66658.mp3",
- "Voicechat Deafen": "/assets/e4d539271704b87764dc465b1a061abd.mp3",
- "Voicechat Disconnect": "/assets/7e125dc075ec6e5ae796e4c3ab83abb3.mp3",
- "Voicechat Mute": "/assets/429d09ee3b86e81a75b5e06d3fb482be.mp3",
- "Voicechat Reconnect": "/assets/471cfd0005b112ff857705e894bf41a6.mp3",
- "Voicechat Undeafen": "/assets/5a000a0d4dff083d12a1d4fc2c7cbf66.mp3",
- "Voicechat Unmute": "/assets/43805b9dd757ac4f6b9b58c1a8ee5f0d.mp3",
- "Voicechat User Joined": "/assets/5dd43c946894005258d85770f0d10cff.mp3",
- "Voicechat User Left": "/assets/4fcfeb2cba26459c4750e60f626cebdc.mp3",
- "Voicechat User Moved": "/assets/e81d11590762728c1b811eadfa5be766.mp3"
- },
- "Google": {
- "Cyclist": "data:audio/mpeg;base64,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",
- "Crosswalk": "data:audio/mpeg;base64,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",
- "Bubble": "data:audio/mpeg;base64,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"
- }
- },
- "changeLog": {
- "version": "3.5.1"
- },
- "changelog": {
- "currentversion": "3.4.9"
- },
- "choices": {
- "message1": {
- "category": "Google",
- "focus": null,
- "mute": true,
- "sound": "Cyclist",
- "volume": 100
- },
- "dm": {
- "category": "Discord",
- "focus": true,
- "mute": true,
- "sound": "New Chatmessage 3",
- "volume": 100
- },
- "mentioned": {
- "category": "Google",
- "focus": true,
- "mute": true,
- "sound": "Crosswalk",
- "volume": 100
- },
- "role": {
- "category": "Default",
- "focus": true,
- "mute": true,
- "sound": "You wouldn't believe",
- "volume": 100
- },
- "everyone": {
- "category": "Google",
- "focus": true,
- "mute": true,
- "sound": "Crosswalk",
- "volume": 100
- },
- "here": {
- "category": "Google",
- "focus": true,
- "mute": true,
- "sound": "Crosswalk",
- "volume": 100
- },
- "deafen": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "mute": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "disconnect": {
- "category": "Discord",
- "focus": null,
- "mute": false,
- "sound": "Push2Talk Stop",
- "volume": 100
- },
- "undeafen": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "unmute": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "user_join": {
- "category": "Discord",
- "focus": null,
- "mute": false,
- "sound": "Push2Talk Start",
- "volume": 100
- },
- "user_leave": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "user_moved": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "reconnect": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "ptt_start": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "ptt_stop": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "call_calling": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "call_ringing": {
- "category": "Discord",
- "focus": null,
- "mute": true,
- "sound": "Incoming Call Beat",
- "volume": 54.5
- },
- "call_ringing_beat": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "stream_started": {
- "category": "Discord",
- "focus": null,
- "mute": false,
- "sound": "Unknown",
- "volume": 100
- },
- "stream_ended": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "stream_user_joined": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "stream_user_left": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "ddr-down": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "ddr-left": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "ddr-right": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "ddr-up": {
- "category": "---",
- "focus": null,
- "mute": false,
- "sound": "---",
- "volume": 100
- },
- "mention1": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "mention2": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "mention3": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "message2": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "message3": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "human_man": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "robot_man": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "discodo": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "overlayunlock": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- },
- "call_ringing_halloween": {
- "category": "---",
- "focus": null,
- "mute": true,
- "sound": "---",
- "volume": 100
- }
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/NotificationSounds.plugin.js b/.config/BetterDiscord/plugins/NotificationSounds.plugin.js
deleted file mode 100644
index f0fd1d0..0000000
--- a/.config/BetterDiscord/plugins/NotificationSounds.plugin.js
+++ /dev/null
@@ -1,684 +0,0 @@
-//META{"name":"NotificationSounds","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/NotificationSounds","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/NotificationSounds/NotificationSounds.plugin.js"}*//
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "NotificationSounds",
- "author": "DevilBro",
- "version": "3.5.1",
- "description": "Allows you to replace the native sounds of Discord with your own."
- },
- "changeLog": {
- "added": {
- "Halloween": "Added discord's halloween call sound to the choices"
- }
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`//META{"name":"`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {this.load();}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var audios, choices, firedEvents;
-
- const removeAllKey = "REMOVE_ALL_BDFDB_DEVILBRO_DO_NOT_COPY";
- const defaultDevice = "default";
-
- var currentDevice = defaultDevice, createdAudios = {}, repatchIncoming;
-
- /* NEVER CHANGE THE SRC LINKS IN THE PLUGIN FILE, TO ADD NEW SOUNDS ADD THEM IN THE SETTINGS GUI IN THE PLUGINS PAGE */
- const types = {
- "message1": {implemented:true, name:"New Chatmessage", src:"/assets/dd920c06a01e5bb8b09678581e29d56f.mp3", mute:true, focus:null, include:true},
- "dm": {implemented:true, name:"Direct Message", src:"/assets/84c9fa3d07da865278bd77c97d952db4.mp3", mute:true, focus:true, include:false},
- "mentioned": {implemented:true, name:"Mentioned", src:"/assets/a5f42064e8120e381528b14fd3188b72.mp3", mute:true, focus:true, include:false},
- "role": {implemented:true, name:"Mentioned (role)", src:"/assets/a5f42064e8120e381528b14fd3188b72.mp3", mute:true, focus:true, include:false},
- "everyone": {implemented:true, name:"Mentioned (@everyone)", src:"/assets/a5f42064e8120e381528b14fd3188b72.mp3", mute:true, focus:true, include:false},
- "here": {implemented:true, name:"Mentioned (@here)", src:"/assets/a5f42064e8120e381528b14fd3188b72.mp3", mute:true, focus:true, include:false},
- "deafen": {implemented:true, name:"Voicechat Deafen", src:"/assets/e4d539271704b87764dc465b1a061abd.mp3", mute:false, focus:null, include:true},
- "mute": {implemented:true, name:"Voicechat Mute", src:"/assets/429d09ee3b86e81a75b5e06d3fb482be.mp3", mute:false, focus:null, include:true},
- "disconnect": {implemented:true, name:"Voicechat Disconnect", src:"/assets/7e125dc075ec6e5ae796e4c3ab83abb3.mp3", mute:false, focus:null, include:true},
- "undeafen": {implemented:true, name:"Voicechat Undeafen", src:"/assets/5a000a0d4dff083d12a1d4fc2c7cbf66.mp3", mute:false, focus:null, include:true},
- "unmute": {implemented:true, name:"Voicechat Unmute", src:"/assets/43805b9dd757ac4f6b9b58c1a8ee5f0d.mp3", mute:false, focus:null, include:true},
- "user_join": {implemented:true, name:"Voicechat User Joined", src:"/assets/5dd43c946894005258d85770f0d10cff.mp3", mute:false, focus:null, include:true},
- "user_leave": {implemented:true, name:"Voicechat User Left", src:"/assets/4fcfeb2cba26459c4750e60f626cebdc.mp3", mute:false, focus:null, include:true},
- "user_moved": {implemented:true, name:"Voicechat User Moved", src:"/assets/e81d11590762728c1b811eadfa5be766.mp3", mute:false, focus:null, include:true},
- "reconnect": {implemented:false, name:"Voicechat Reconnect", src:"/assets/471cfd0005b112ff857705e894bf41a6.mp3", mute:true, focus:null, include:true},
- "ptt_start": {implemented:true, name:"Push2Talk Start", src:"/assets/8b63833c8d252fedba6b9c4f2517c705.mp3", mute:false, focus:null, include:true},
- "ptt_stop": {implemented:true, name:"Push2Talk Stop", src:"/assets/74ab980d6890a0fa6aa0336182f9f620.mp3", mute:false, focus:null, include:true},
- "call_calling": {implemented:true, name:"Outgoing Call", src:"/assets/c6e92752668dde4eee5923d70441579f.mp3", mute:false, focus:null, include:true},
- "call_ringing": {implemented:true, name:"Incoming Call", src:"/assets/84a1b4e11d634dbfa1e5dd97a96de3ad.mp3", mute:true, focus:null, include:true},
- "call_ringing_beat": {implemented:false, name:"Incoming Call Beat", src:"/assets/b9411af07f154a6fef543e7e442e4da9.mp3", mute:true, focus:null, include:true},
- "call_ringing_halloween": {implemented:false, name:"Incoming Call Halloween", src:"/assets/bceeb2ba92c01584dcaafc957f769bae.mp3", mute:true, focus:null, include:true},
- "stream_started": {implemented:true, name:"Stream Started", src:"/assets/9ca817f41727edc1b2f1bc4f1911107c.mp3", mute:false, focus:null, include:true},
- "stream_ended": {implemented:true, name:"Stream Ended", src:"/assets/4e30f98aa537854f79f49a76af822bbc.mp3", mute:false, focus:null, include:true},
- "stream_user_joined": {implemented:true, name:"Stream User Joined", src:"/assets/5827bbf9a67c61cbb0e02ffbf434b654.mp3", mute:false, focus:null, include:true},
- "stream_user_left": {implemented:true, name:"Stream User Left", src:"/assets/7cdcdcbc426cc43583365a671c24b740.mp3", mute:false, focus:null, include:true},
- "ddr-down": {implemented:true, name:"HotKeys Window Down", src:"/assets/71f048f8aa7d4b24bf4268a87cbbb192.mp3", mute:false, focus:null, include:true},
- "ddr-left": {implemented:true, name:"HotKeys Window Left", src:"/assets/1de04408e62b5d52ae3ebbb91e9e1978.mp3", mute:false, focus:null, include:true},
- "ddr-right": {implemented:true, name:"HotKeys Window Right", src:"/assets/2c0433f93db8449e4a82b76dc520cb29.mp3", mute:false, focus:null, include:true},
- "ddr-up": {implemented:true, name:"HotKeys Window Up", src:"/assets/68472713f7a62c7c37e0a6a5d5a1faeb.mp3", mute:false, focus:null, include:true},
- "mention1": {implemented:false, name:"Mention Ping", src:"/assets/fa4d62c3cbc80733bf1f01b9c6f181de.mp3", mute:true, focus:null, include:true},
- "mention2": {implemented:false, name:"Mention Ping 2", src:"/assets/a5f42064e8120e381528b14fd3188b72.mp3", mute:true, focus:null, include:true},
- "mention3": {implemented:false, name:"Mention Ping 3", src:"/assets/84c9fa3d07da865278bd77c97d952db4.mp3", mute:true, focus:null, include:true},
- "message2": {implemented:false, name:"New Chatmessage 2", src:"/assets/15fe810f6cfab609c7fcda61652b9b34.mp3", mute:true, focus:null, include:true},
- "message3": {implemented:false, name:"New Chatmessage 3", src:"/assets/53ce6a92d3c233e8b4ac529d34d374e4.mp3", mute:true, focus:null, include:true},
- "human_man": {implemented:false, name:"Human Man Voice", src:"/assets/a37dcd6272ae41cf49295d58c9806fe3.mp3", mute:true, focus:null, include:true},
- "robot_man": {implemented:false, name:"Robot Man Voice", src:"/assets/66598bea6e59eb8acdf32cf2d9d75ba9.mp3", mute:true, focus:null, include:true},
- "discodo": {implemented:false, name:"Discodo Launch", src:"/assets/ae7d16bb2eea76b9b9977db0fad66658.mp3", mute:true, focus:null, include:true},
- "overlayunlock": {implemented:false, name:"Overlay Unlocked", src:"/assets/ad322ffe0a88436296158a80d5d11baa.mp3", mute:true, focus:null, include:true}
- };
-
- /* NEVER CHANGE THE SRC LINKS IN THE PLUGIN FILE, TO ADD NEW SOUNDS ADD THEM IN THE SETTINGS GUI IN THE PLUGINS PAGE */
- const defaultAudios = {
- "---": {
- "---": null
- },
- "Default": {
- "Communication Channel": "https://notificationsounds.com/soundfiles/63538fe6ef330c13a05a3ed7e599d5f7/file-sounds-917-communication-channel.wav",
- "Isn't it": "https://notificationsounds.com/soundfiles/ba2fd310dcaa8781a9a652a31baf3c68/file-sounds-969-isnt-it.wav",
- "Job Done": "https://notificationsounds.com/soundfiles/5b69b9cb83065d403869739ae7f0995e/file-sounds-937-job-done.wav",
- "Served": "https://notificationsounds.com/soundfiles/b337e84de8752b27eda3a12363109e80/file-sounds-913-served.wav",
- "Solemn": "https://notificationsounds.com/soundfiles/53fde96fcc4b4ce72d7739202324cd49/file-sounds-882-solemn.wav",
- "System Fault": "https://notificationsounds.com/soundfiles/ebd9629fc3ae5e9f6611e2ee05a31cef/file-sounds-990-system-fault.wav",
- "You wouldn't believe": "https://notificationsounds.com/soundfiles/087408522c31eeb1f982bc0eaf81d35f/file-sounds-949-you-wouldnt-believe.wav"
- },
- "Discord": {}
- };
-
- for (let id in types) if (types[id].include) defaultAudios.Discord[types[id].name] = types[id].src;
-
- const WebAudioSound = class WebAudioSound {
- constructor (type) {
- this._name = type;
- this._src = audios[choices[type].category][choices[type].sound] || types[type].src;
- this._volume = choices[type].volume;
- }
- loop () {
- this._ensureAudio().then(audio => {
- audio.loop = true;
- audio.play();
- });
- }
- play () {
- this._ensureAudio().then(audio => {
- audio.loop = false;
- audio.play();
- });
- }
- pause () {
- this._audio.then(audio => {
- audio.pause();
- });
- }
- stop () {
- this._destroyAudio();
- }
- setTime (time) {
- this._audio.then(audio => {
- audio.currentTime = time;
- });
- }
- setLoop (loop) {
- this._audio.then(audio => {
- audio.loop = loop;
- });
- }
- _destroyAudio () {
- if (this._audio) {
- this._audio.then(audio => {
- audio.pause();
- audio.src = "";
- });
- this._audio = null;
- }
- }
- _ensureAudio () {
- return this._audio = this._audio || new Promise((callback, errorCallback) => {
- let audio = new Audio;
- audio.src = this._src;
- audio.onloadeddata = _ => {
- audio.volume = Math.min((BDFDB.LibraryModules.MediaDeviceUtils.getOutputVolume() / 100) * (this._volume / 100), 1);
- BDFDB.LibraryModules.PlatformUtils.embedded && audio.setSinkId(currentDevice || defaultDevice);
- callback(audio);
- };
- audio.onerror = _ => {
- return errorCallback(new Error("could not play audio"))
- };
- audio.onended = _ => {
- return this._destroyAudio()
- };
- audio.load();
- }), this._audio;
- }
- };
-
- return class NotificationSounds extends Plugin {
- onLoad() {
- audios = {};
- choices = {};
- firedEvents = {};
-
- this.patchedModules = {
- after: {
- Shakeable: "render"
- }
- };
- }
-
- onStart() {
- if (BDFDB.LibraryModules.PlatformUtils.embedded) {
- let change = _ => {
- if (window.navigator.mediaDevices && window.navigator.mediaDevices.enumerateDevices) {
- window.navigator.mediaDevices.enumerateDevices().then(enumeratedDevices => {
- let id = BDFDB.LibraryModules.MediaDeviceUtils.getOutputDeviceId();
- let allDevices = BDFDB.LibraryModules.MediaDeviceUtils.getOutputDevices();
- let filteredDevices = enumeratedDevices.filter(d => d.kind == "audiooutput" && d.deviceId != "communications");
- let deviceIndex = BDFDB.LibraryModules.ArrayUtils(allDevices).sortBy(d => d.index).findIndex(d => d.id == id);
- let deviceViaId = allDevices[id];
- let deviceViaIndex = filteredDevices[deviceIndex];
- if (deviceViaId && deviceViaIndex && deviceViaIndex.label != deviceViaId.name) deviceViaIndex = filteredDevices.find(d => d.label == deviceViaId.name);
- currentDevice = deviceViaIndex ? deviceViaIndex.deviceId : defaultDevice;
- }).catch(_ => {
- currentDevice = defaultDevice;
- });
- }
- };
- BDFDB.StoreChangeUtils.add(this, BDFDB.LibraryModules.MediaDeviceUtils, change);
- change();
- }
-
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.DispatchApiUtils, "dirtyDispatch", {before: e => {
- if (BDFDB.ObjectUtils.is(e.methodArguments[0]) && e.methodArguments[0].type == BDFDB.DiscordConstants.ActionTypes.MESSAGE_CREATE && e.methodArguments[0].message) {
- let message = e.methodArguments[0].message;
- let guildId = message.guild_id || null;
- if (!BDFDB.LibraryModules.MutedUtils.isGuildOrCategoryOrChannelMuted(guildId, message.channel_id) && message.author.id != BDFDB.UserUtils.me.id && !BDFDB.LibraryModules.FriendUtils.isBlocked(message.author.id)) {
- if (!guildId && !(choices.dm.focus && document.hasFocus() && BDFDB.LibraryModules.LastChannelStore.getChannelId() == message.channel_id)) {
- this.fireEvent("dm");
- this.playAudio("dm");
- return;
- }
- else if (BDFDB.LibraryModules.MentionUtils.isRawMessageMentioned(message, BDFDB.UserUtils.me.id)) {
- if (message.mentions.length && !this.isSuppressMentionEnabled(guildId, message.channel_id) && !(choices.mentioned.focus && document.hasFocus() && BDFDB.LibraryModules.LastChannelStore.getChannelId() == message.channel_id)) for (let mention of message.mentions) if (mention.id == BDFDB.UserUtils.me.id) {
- this.fireEvent("mentioned");
- this.playAudio("mentioned");
- return;
- }
- if (guildId && message.mention_roles.length && !BDFDB.LibraryModules.MutedUtils.isSuppressRolesEnabled(guildId, message.channel_id) && !(choices.role.focus && document.hasFocus() && BDFDB.LibraryModules.LastChannelStore.getChannelId() == message.channel_id)) {
- let member = BDFDB.LibraryModules.MemberStore.getMember(guildId, BDFDB.UserUtils.me.id);
- if (member && member.roles.length) for (let roleId of message.mention_roles) if (member.roles.includes(roleId)) {
- this.fireEvent("role");
- this.playAudio("role");
- return;
- }
- }
- if (message.mention_everyone && !BDFDB.LibraryModules.MutedUtils.isSuppressEveryoneEnabled(guildId, message.channel_id)) {
- if (message.content.indexOf("@everyone") > -1 && !(choices.everyone.focus && document.hasFocus() && BDFDB.LibraryModules.LastChannelStore.getChannelId() == message.channel_id)) {
- this.fireEvent("everyone");
- this.playAudio("everyone");
- return;
- }
- if (message.content.indexOf("@here") > -1 && !(choices.here.focus && document.hasFocus() && BDFDB.LibraryModules.LastChannelStore.getChannelId() == message.channel_id)) {
- this.fireEvent("here");
- this.playAudio("here");
- return;
- }
- }
- }
- }
- }
- }});
-
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.SoundUtils, "playSound", {instead: e => {
- let type = e.methodArguments[0];
- if (choices[type]) BDFDB.TimeUtils.timeout(_ => {
- if (type == "message1") {
- if (firedEvents["dm"]) firedEvents["dm"] = false;
- else if (firedEvents["mentioned"]) firedEvents["mentioned"] = false;
- else if (firedEvents["role"]) firedEvents["role"] = false;
- else if (firedEvents["everyone"]) firedEvents["everyone"] = false;
- else if (firedEvents["here"]) firedEvents["here"] = false;
- else this.playAudio(type);
- }
- else this.playAudio(type);
- });
- else e.callOriginalMethod();
- }});
- BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.SoundUtils, "createSound", {after: e => {
- if (choices[e.methodArguments[0]]) {
- let audio = new WebAudioSound(e.methodArguments[0]);
- createdAudios[e.methodArguments[0]] = audio;
- return audio;
- }
- else BDFDB.LogUtils.warn(`Could not create sound for "${e.methodArguments[0]}".`, this.name);
- }});
-
-
- for (let key in defaultAudios) defaultAudios[key] = BDFDB.ObjectUtils.sort(defaultAudios[key]);
-
- this.loadAudios();
- this.loadChoices();
-
- let callListenerModule = BDFDB.ModuleUtils.findByProperties("handleRingUpdate");
- if (callListenerModule) {
- callListenerModule.terminate();
- BDFDB.PatchUtils.patch(this, callListenerModule, "handleRingUpdate", {instead: e => {
- if (BDFDB.LibraryModules.CallUtils.getCalls().filter(call => call.ringing.length > 0 && BDFDB.LibraryModules.VoiceUtils.getCurrentClientVoiceChannelId() === call.channelId).length > 0 && !BDFDB.LibraryModules.SoundStateUtils.isSoundDisabled("call_calling") && !BDFDB.LibraryModules.StreamerModeStore.disableSounds) {
- createdAudios["call_calling"].loop();
- }
- else createdAudios["call_calling"].stop();
- }});
- callListenerModule.initialize();
- }
-
- this.forceUpdateAll();
- }
-
- onStop() {
- for (let type in createdAudios) if (createdAudios[type]) createdAudios[type].stop();
- }
-
- getSettingsPanel (collapseStates = {}) {
- let createSoundCard = type => {
- return [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.marginbottom8,
- align: BDFDB.LibraryComponents.Flex.Align.CENTER,
- direction: BDFDB.LibraryComponents.Flex.Direction.HORIZONTAL,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsLabel, {
- label: types[type].name
- }),
- types[type].focus != null ? BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Switch",
- mini: true,
- grow: 0,
- label: "Mute when Channel focused:",
- value: choices[type].focus,
- onChange: value => {
- choices[type].focus = value;
- this.saveChoice(type, false);
- }
- }) : null,
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Switch",
- mini: true,
- grow: 0,
- label: "Mute in DnD:",
- value: choices[type].mute,
- onChange: value => {
- choices[type].mute = value;
- this.saveChoice(type, false);
- }
- })
- ].filter(n => n)
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.marginbottom8,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "31%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Category",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
- value: choices[type].category,
- options: Object.keys(audios).map(name => ({value:name, label:name})),
- searchable: true,
- onChange: category => {
- choices[type].category = category.value;
- choices[type].sound = Object.keys(audios[category.value] || {})[0];
- this.saveChoice(type, true);
- BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
- }
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "31%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Sound",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
- value: choices[type].sound,
- options: Object.keys(audios[choices[type].category] || {}).map(name => ({value:name, label:name})),
- searchable: true,
- onChange: sound => {
- choices[type].sound = sound.value;
- this.saveChoice(type, true);
- BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
- }
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "31%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Volume",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Slider, {
- defaultValue: choices[type].volume,
- digits: 1,
- onValueRender: value => {
- return value + "%";
- },
- onValueChange: value => {
- choices[type].volume = value;
- this.saveChoice(type, true);
- }
- })
- })
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
- className: BDFDB.disCN.marginbottom8
- })
- ];
- };
-
- let successSavedAudio = data => {
- BDFDB.NotificationUtils.toast(`Sound ${data.sound} was added to category ${data.category}.`, {type:"success"});
- if (!audios[data.category]) audios[data.category] = {};
- audios[data.category][data.sound] = data.source;
- BDFDB.DataUtils.save(audios, this, "audios");
- BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
-
- };
-
- let settingsPanel, settingsItems = [];
-
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
- title: "Add new Sound",
- collapseStates: collapseStates,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.margintop4,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Categoryname",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-newsound input-category",
- value: "",
- placeholder: "Categoryname"
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Soundname",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-newsound input-sound",
- value: "",
- placeholder: "Soundname"
- })
- })
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.margintop4,
- align: BDFDB.LibraryComponents.Flex.Align.END,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Source",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- className: "input-newsound input-source",
- type: "file",
- filter: ["audio", "video"],
- useFilePath: true,
- value: "",
- placeholder: "Source"
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
- style: {marginBottom: 1},
- onClick: _ => {
- for (let input of settingsPanel.querySelectorAll(".input-newsound " + BDFDB.dotCN.input)) if (!input.value || input.value.length == 0 || input.value.trim().length == 0) return BDFDB.NotificationUtils.toast("Fill out all fields to add a new sound.", {type:"danger"});
- let category = settingsPanel.querySelector(".input-category " + BDFDB.dotCN.input).value.trim();
- let sound = settingsPanel.querySelector(".input-sound " + BDFDB.dotCN.input).value.trim();
- let source = settingsPanel.querySelector(".input-source " + BDFDB.dotCN.input).value.trim();
- if (source.indexOf("http") == 0) BDFDB.LibraryRequires.request(source, (error, response, result) => {
- if (response) {
- let type = response.headers["content-type"];
- if (type && (type.indexOf("octet-stream") > -1 || type.indexOf("audio") > -1 || type.indexOf("video") > -1)) return successSavedAudio({category, sound, source});
- }
- BDFDB.NotificationUtils.toast("Use a valid direct link to a video or audio source. They usually end on something like .mp3, .mp4 or .wav.", {type:"danger"});
- });
- else BDFDB.LibraryRequires.fs.readFile(source, (error, response) => {
- if (error) BDFDB.NotificationUtils.toast("Could not fetch file. Please make sure the file exists.", {type:"danger"});
- else return successSavedAudio({category, sound, source:`data:audio/mpeg;base64,${response.toString("base64")}`});
- });
- },
- children: BDFDB.LanguageUtils.LanguageStrings.SAVE
- })
- ]
- })
- ]
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
- title: "Implemented Sounds",
- collapseStates: collapseStates,
- children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
- title: "Unimplemented Sounds",
- collapseStates: collapseStates,
- children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => !typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
- }));
-
- let removeableCategories = [{value:removeAllKey, label:BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios).filter(category => !(defaultAudios[category] && !Object.keys(audios[category] || {}).filter(sound => defaultAudios[category][sound] === undefined).length)).map(name => ({value:name, label:name})));
- let removeableSounds = {};
- for (let category of removeableCategories) removeableSounds[category.value] = [{value:removeAllKey, label:BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios[category.value] || {}).filter(sound => !(defaultAudios[category.value] && defaultAudios[category.value][sound] !== undefined)).map(name => ({value:name, label:name})));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
- title: "Remove Sounds",
- collapseStates: collapseStates,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
- className: BDFDB.disCN.margintop4,
- align: BDFDB.LibraryComponents.Flex.Align.END,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "35%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Category",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
- key: "REMOVE_CATEGORY",
- value: removeAllKey,
- options: removeableCategories,
- searchable: true,
- onChange: (category, instance) => {
- let soundSelectIns = BDFDB.ReactUtils.findOwner(BDFDB.ReactUtils.findOwner(instance, {name:["BDFDB_Modal", "BDFDB_SettingsPanel"], up:true}), {key:"REMOVE_SOUND"});
- if (soundSelectIns && removeableSounds[category.value]) {
- soundSelectIns.props.options = removeableSounds[category.value];
- soundSelectIns.props.value = removeAllKey;
- BDFDB.ReactUtils.forceUpdate(soundSelectIns);
- }
- }
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "35%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: "Sound",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
- key: "REMOVE_SOUND",
- value: removeAllKey,
- options: removeableSounds[removeAllKey],
- searchable: true
- })
- })
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
- grow: 0,
- shrink: 0,
- basis: "25%",
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
- style: {marginBottom: 1},
- color: BDFDB.LibraryComponents.Button.Colors.RED,
- onClick: (event, instance) => {
- let wrapperIns = BDFDB.ReactUtils.findOwner(instance, {name:["BDFDB_Modal", "BDFDB_SettingsPanel"], up:true});
- let categorySelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key:"REMOVE_CATEGORY"});
- let soundSelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key:"REMOVE_SOUND"});
- if (categorySelectIns && soundSelectIns) {
- let soundAmount = 0;
- let catAll = categorySelectIns.props.value == removeAllKey;
- let soundAll = soundSelectIns.props.value == removeAllKey;
- if (catAll) soundAmount = BDFDB.ArrayUtils.sum(Object.keys(audios).map(category => Object.keys(audios[category] || {}).filter(sound => !(defaultAudios[category] && defaultAudios[category][sound] !== undefined)).length));
- else if (soundAll) soundAmount = Object.keys(audios[categorySelectIns.props.value] || {}).filter(sound => !(defaultAudios[categorySelectIns.props.value] && defaultAudios[categorySelectIns.props.value][sound] !== undefined)).length;
- else if (audios[categorySelectIns.props.value][soundSelectIns.props.value]) soundAmount = 1;
-
- if (soundAmount) BDFDB.ModalUtils.confirm(this, `Are you sure you want to delete ${soundAmount} added sound${soundAmount == 1 ? "" : "s"}?`, _ => {
- if (catAll) BDFDB.DataUtils.remove(this, "audios");
- else if (soundAll) BDFDB.DataUtils.remove(this, "audios", categorySelectIns.props.value);
- else {
- delete audios[categorySelectIns.props.value][soundSelectIns.props.value];
- if (BDFDB.ObjectUtils.isEmpty(audios[categorySelectIns.props.value])) delete audios[categorySelectIns.props.value];
- BDFDB.DataUtils.save(audios, this, "audios");
- }
- this.loadAudios();
- this.loadChoices();
- BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
- });
- else BDFDB.NotificationUtils.toast("No sounds to delete.", {type:"danger"});
- }
- },
- children: BDFDB.LanguageUtils.LanguageStrings.DELETE
- })
- })
- ]
- })
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed () {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- for (let type in createdAudios) if (createdAudios[type]) createdAudios[type].stop();
- createdAudios = {};
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll () {
- repatchIncoming = true;
- createdAudios["call_calling"] = BDFDB.LibraryModules.SoundUtils.createSound("call_calling");
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- processShakeable (e) {
- if (e.returnvalue && BDFDB.ArrayUtils.is(e.returnvalue.props.children)) {
- let child = e.returnvalue.props.children.find(n => {
- let string = n && n.type && n.type.toString();
- return string && string.indexOf("call_ringing_beat") > -1 && string.indexOf("call_ringing") > -1 && string.indexOf("hasIncomingCalls") > -1;
- });
- if (child) {
- let index = e.returnvalue.props.children.indexOf(child);
- if (repatchIncoming) {
- e.returnvalue.props.children[index] = null;
- BDFDB.TimeUtils.timeout(_ => {
- repatchIncoming = false;
- BDFDB.ReactUtils.forceUpdate(BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name:"App", up:true}))
- });
- }
- else e.returnvalue.props.children[index] = BDFDB.ReactUtils.createElement(e.returnvalue.props.children[index].type, {});
- }
- }
- }
-
- loadAudios () {
- audios = Object.assign({}, defaultAudios, BDFDB.DataUtils.load(this, "audios"));
- BDFDB.DataUtils.save(audios, this, "audios");
- }
-
- loadChoices () {
- let loadedChoices = BDFDB.DataUtils.load(this, "choices");
- for (let type in types) {
- let choice = loadedChoices[type] || {}, soundFound = false;
- // REMOVE 06.10.2020
- choice.sound = choice.song || choice.sound;
- delete choice.song;
- delete choice.src;
- for (let category in audios) if (choice.category == category) for (let sound in audios[category]) if (choice.sound == sound) {
- soundFound = true;
- break;
- }
- if (!soundFound) choice = {
- category: "---",
- sound: "---",
- volume: 100,
- mute: types[type].mute,
- focus: types[type].focus
- };
- choices[type] = choice;
- this.saveChoice(type, false);
- }
- }
-
- saveChoice (type, play) {
- if (!choices[type]) return;
- BDFDB.DataUtils.save(choices[type], this, "choices", type);
- if (play) {
- this.SettingsUpdated = true;
- this.playAudio(type);
- }
- }
-
- playAudio (type) {
- if (this.dontPlayAudio(type) || BDFDB.LibraryModules.StreamerModeStore.disableSounds) return;
- if (createdAudios[type]) createdAudios[type].stop();
- createdAudios[type] = new WebAudioSound(type);
- createdAudios[type].play();
- }
-
- isSuppressMentionEnabled (guildId, channelId) {
- let channelSettings = BDFDB.LibraryModules.MutedUtils.getChannelMessageNotifications(guildId, channelId);
- return channelSettings && (channelSettings == BDFDB.DiscordConstants.UserNotificationSettings.NO_MESSAGES || channelSettings == BDFDB.DiscordConstants.UserNotificationSettings.NULL && BDFDB.LibraryModules.MutedUtils.getMessageNotifications(guildId) == BDFDB.DiscordConstants.UserNotificationSettings.NO_MESSAGES);
- }
-
- dontPlayAudio (type) {
- let status = BDFDB.UserUtils.getStatus();
- return choices[type].mute && (status == "dnd" || status == "streaming");
- }
-
- fireEvent (type) {
- firedEvents[type] = true;
- BDFDB.TimeUtils.timeout(_ => {firedEvents[type] = false;},3000);
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/PinDMs.config.json b/.config/BetterDiscord/plugins/PinDMs.config.json
deleted file mode 100644
index 297e056..0000000
--- a/.config/BetterDiscord/plugins/PinDMs.config.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "changelog": {
- "currentversion": "1.7.6"
- },
- "dmCategories": {
- "3516090637537661": {
- "collapsed": false,
- "color": null,
- "dms": [
- "458302680998215690",
- "514803935761006592",
- "456428001463369729",
- "390601823523962892",
- "390786176652673034"
- ],
- "id": "3516090637537661",
- "name": "Gouden mannen",
- "pos": 1
- },
- "3586821958853646": {
- "collapsed": false,
- "color": null,
- "dms": [
- "631947333046894623",
- "703197442098855997",
- "642833698315698232",
- "450987439041806346",
- "590888637877452840"
- ],
- "id": "3586821958853646",
- "name": "Jongens",
- "pos": 0
- }
- },
- "settings": {
- "showCategoryAmount": false,
- "showCategoryUnread": true,
- "showPinIcon": true,
- "sortInRecentOrder": false,
- "sortInRecentOrderGuild": false
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/PinDMs.plugin.js b/.config/BetterDiscord/plugins/PinDMs.plugin.js
deleted file mode 100644
index e61e79d..0000000
--- a/.config/BetterDiscord/plugins/PinDMs.plugin.js
+++ /dev/null
@@ -1,1138 +0,0 @@
-//META{"name":"PinDMs","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/PinDMs","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/PinDMs/PinDMs.plugin.js"}*//
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "PinDMs",
- "author": "DevilBro",
- "version": "1.7.6",
- "description": "Allows you to pin DMs, making them appear at the top of your DMs/Server-List."
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {delete window.BDFDB_Global.downloadModal;require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (error, response, body) => {require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), body, _ => {});});}
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var hoveredCategory, draggedCategory, releasedCategory;
- var hoveredChannel, draggedChannel, releasedChannel;
-
- var settings = {};
-
- return class PinDMs extends Plugin {
- onLoad() {
- this.defaults = {
- settings: {
- sortInRecentOrder: {value:false, inner:true, description:"Channel List"},
- sortInRecentOrderGuild: {value:false, inner:true, description:"Guild List"},
- showPinIcon: {value:true, inner:false, description:"Shows a little 'Pin' icon for pinned DMs in the server list:"},
- showCategoryUnread: {value:true, inner:false, description:"Shows the amount of unread Messages in a category in the channel list:"},
- showCategoryAmount: {value:true, inner:false, description:"Shows the amount of pinned DMs in a category in the channel list:"}
- }
- };
-
- this.patchedModules = {
- before: {
- PrivateChannelsList: "render",
- UnreadDMs: "render"
- },
- after: {
- PrivateChannelsList: "render",
- UnreadDMs: "render",
- PrivateChannel: ["render", "componentDidMount"],
- DirectMessage: ["render", "componentDidMount", "componentWillUnmount"]
- }
- };
-
- this.css = `
- ${BDFDB.dotCNS.dmchannel + BDFDB.dotCN.namecontainerchildren} {
- display: flex;
- }
- ${BDFDB.dotCN.dmchannel}:hover ${BDFDB.dotCN._pindmsunpinbutton} {
- display: block;
- }
- ${BDFDB.dotCN._pindmspinnedchannelsheadercontainer} {
- display: flex;
- cursor: pointer;
- }
- ${BDFDB.dotCNS._pindmspinnedchannelsheadercontainer + BDFDB.dotCN.dmchannelheadertext} {
- margin-right: 6px;
- }
- ${BDFDB.dotCN._pindmspinnedchannelsheadercontainer + BDFDB.dotCN._pindmspinnedchannelsheadercolored}:hover ${BDFDB.dotCN.dmchannelheadertext} {
- filter: brightness(150%);
- }
- ${BDFDB.dotCNS._pindmspinnedchannelsheadercontainer + BDFDB.dotCN._pindmspinnedchannelsheaderamount} {
- position: relative;
- top: -1px;
- margin-right: 6px;
- }
- ${BDFDB.dotCN._pindmspinnedchannelsheaderarrow} {
- flex: 0;
- width: 16px;
- height: 16px;
- margin-left: 0;
- margin-right: 2px;
- }
- ${BDFDB.dotCNS._pindmspinnedchannelsheadercollapsed + BDFDB.dotCN._pindmspinnedchannelsheaderarrow + BDFDB.dotCN.channelheadericonwrapper} {
- transform: rotate(-90deg);
- }
- ${BDFDB.dotCN._pindmsunpinbutton} {
- display: none;
- width: 16px;
- height: 16px;
- opacity: .7;
- margin: 2px;
- }
- ${BDFDB.dotCN._pindmsunpinbutton}:hover {
- opacity: 1;
- }
- ${BDFDB.dotCN._pindmsunpinicon} {
- display: block;
- width: 16px;
- height: 16px;
- }
- ${BDFDB.dotCNS._pindmsdmchannelplaceholder + BDFDB.dotCN.namecontainerlayout} {
- box-sizing: border-box;
- border: 1px dashed currentColor;
- }
- ${BDFDB.dotCN._pindmspinnedchannelsheadercontainer + BDFDB.dotCN._pindmsdmchannelplaceholder} {
- margin-left: 8px;
- height: 12px;
- box-sizing: border-box;
- border: 1px dashed currentColor;
- }
- ${BDFDB.dotCN._pindmsdragpreview} {
- pointer-events: none !important;
- position: absolute !important;
- opacity: 0.5 !important;
- z-index: 10000 !important;
- }
- `;
- }
-
- onStart() {
- this.forceUpdateAll();
- }
-
- onStop() {
- this.forceUpdateAll();
-
- let unreadDMsInstance = BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name:"UnreadDMs", unlimited:true});
- if (unreadDMsInstance) {
- delete unreadDMsInstance.props.pinnedPrivateChannelIds;
- unreadDMsInstance.props.unreadPrivateChannelIds = BDFDB.LibraryModules.DirectMessageUnreadStore.getUnreadPrivateChannelIds();
- BDFDB.ReactUtils.forceUpdate(unreadDMsInstance);
- }
- }
-
- getSettingsPanel (collapseStates = {}) {
- let settingsPanel, settingsItems = [];
-
-
- for (let key in settings) if (!this.defaults.settings[key].inner) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- className: BDFDB.disCN.marginbottom8,
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
- title: "Sort pinned DMs in the recent message order instead of the pinned at order in:",
- first: settingsItems.length == 0,
- children: Object.keys(settings).map(key => this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- className: BDFDB.disCN.marginbottom8,
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }))
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
- type: "Button",
- className: BDFDB.disCN.marginbottom8,
- color: BDFDB.LibraryComponents.Button.Colors.RED,
- label: "Unpin all pinned DMs",
- onClick: _ => {
- BDFDB.ModalUtils.confirm(this, "Are you sure you want to unpin all pinned DMs?", _ => {
- BDFDB.DataUtils.remove(this, "dmCategories");
- BDFDB.DataUtils.remove(this, "pinnedRecents");
- });
- },
- children: BDFDB.LanguageUtils.LanguageStrings.UNPIN
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed () {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll () {
- settings = BDFDB.DataUtils.get(this, "settings");
-
- BDFDB.ReactUtils.forceUpdate(BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name:"FluxContainer(PrivateChannels)", all:true, unlimited:true}));
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- onUserContextMenu (e) {
- if (e.instance.props.user) {
- let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "close-dm"});
- if (index > -1) {
- let id = BDFDB.LibraryModules.ChannelStore.getDMFromUserId(e.instance.props.user.id);
- if (id) this.injectItem(e.instance, id, children, index);
- }
- }
- }
-
- onGroupDMContextMenu (e) {
- if (e.instance.props.channel) {
- let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "change-icon"});
- if (index > -1) this.injectItem(e.instance, e.instance.props.channel.id, children, index + 1);
- }
- }
-
- injectItem (instance, id, children, index) {
- let pinnedInGuild = this.isPinned(id, "pinnedRecents");
-
- let categories = this.sortAndUpdateCategories("dmCategories", true);
- let currentCategory = this.getCategory(id, "dmCategories");
-
- children.splice(index, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_pindm_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "submenu-pin"),
- children: [
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_pinchannel_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "submenu-channelist"),
- children: [
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: currentCategory ? BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_unpinchannel_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "unpin-channellist"),
- color: BDFDB.LibraryComponents.MenuItems.Colors.DANGER,
- action: _ => {
- this.removeFromCategory(id, currentCategory, "dmCategories");
- }
- }) : BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels.context_addtonewcategory_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "new-channellist"),
- color: BDFDB.LibraryComponents.MenuItems.Colors.BRAND,
- action: _ => {
- this.openCategorySettingsModal({
- id: this.generateID("dmCategories").toString(),
- name: `${this.labels.header_pinneddms_text} #${categories.length + 1}`,
- dms: [id],
- pos: categories.length,
- collapsed: false,
- color: null
- }, "dmCategories", true);
- }
- })
- }),
- categories.length ? BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: categories.map(category => currentCategory && currentCategory.id == category.id ? null : BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: category.name || this.labels.header_pinneddms_text,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "pin-channellist", category.id),
- action: _ => {
- if (currentCategory) this.removeFromCategory(id, currentCategory, "dmCategories");
- this.addToCategory(id, category, "dmCategories");
- }
- })).filter(n => n)
- }) : null
- ].filter(n => n)
- }),
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: this.labels[pinnedInGuild ? "context_unpinguild_text" : "context_pinguild_text"],
- id: BDFDB.ContextMenuUtils.createItemId(this.name, pinnedInGuild ? "unpin-serverlist" : "pin-serverlist"),
- danger: pinnedInGuild,
- action: _ => {
- if (!pinnedInGuild) this.addPin(id, "pinnedRecents");
- else this.removePin(id, "pinnedRecents");
- }
- })
- ]
- }));
- }
-
- processPrivateChannelsList (e) {
- let categories = this.sortAndUpdateCategories("dmCategories", true);
- if (categories.length) {
- e.instance.props.channels = Object.assign({}, e.instance.props.channels);
- e.instance.props.privateChannelIds = [].concat(e.instance.props.privateChannelIds || []);
- e.instance.props.pinnedChannelIds = Object.assign({}, e.instance.props.pinnedChannelIds);
- if (!e.returnvalue) {
- if (draggedChannel && releasedChannel) {
- let categoryId = releasedChannel.split("header_")[1];
- let category = categories.find(n => categoryId != undefined ? n.id == categoryId : n.dms.includes(releasedChannel));
- if (category) {
- BDFDB.ArrayUtils.remove(category.dms, draggedChannel, true);
- category.dms.splice(categoryId != undefined ? 0 : category.dms.indexOf(releasedChannel) + 1, 0, draggedChannel);
- BDFDB.DataUtils.save(category, this, "dmCategories", category.id);
- }
- draggedChannel = null;
- releasedChannel = null;
- }
- if (draggedCategory && releasedCategory) {
- let maybedDraggedCategory = categories.find(n => n.id == draggedCategory);
- let maybedReleasedCategory = categories.find(n => n.id == releasedCategory);
- if (maybedDraggedCategory && maybedReleasedCategory) {
- BDFDB.ArrayUtils.remove(categories, maybedDraggedCategory, true);
- categories.splice(categories.indexOf(maybedReleasedCategory) + 1, 0, maybedDraggedCategory);
- let newCategories = {}, newPos = 0;
- for (let category of [].concat(categories).reverse()) newCategories[category.id] = Object.assign(category, {pos:newPos++});
- BDFDB.DataUtils.save(newCategories, this, "dmCategories");
- }
- draggedCategory = null;
- releasedCategory = null;
- }
- e.instance.props.pinnedChannelIds = {};
- for (let category of [].concat(categories).reverse()) {
- e.instance.props.pinnedChannelIds[category.id] = [];
- for (let id of this.sortDMsByTime(this.filterDMs(category.dms), "dmCategories").reverse()) {
- BDFDB.ArrayUtils.remove(e.instance.props.privateChannelIds, id, true);
- if (!category.collapsed || e.instance.props.selectedChannelId == id) {
- e.instance.props.privateChannelIds.unshift(id);
- e.instance.props.pinnedChannelIds[category.id].push(id);
- }
- }
- }
- }
- else {
- e.returnvalue.props.sections = [];
- e.returnvalue.props.sections.push(e.instance.state.preRenderedChildren);
- let shownPinnedIds = BDFDB.ObjectUtils.toArray(e.instance.props.pinnedChannelIds).reverse();
- for (let ids of shownPinnedIds) e.returnvalue.props.sections.push(ids.length || 1);
- e.returnvalue.props.sections.push(e.instance.props.privateChannelIds.length - shownPinnedIds.flat().length);
-
- let sectionHeight = e.returnvalue.props.sectionHeight;
- let sectionHeightFunc = typeof sectionHeight != "function" ? _ => sectionHeight : sectionHeight;
- e.returnvalue.props.sectionHeight = (...args) => {
- if (args[0] != 0 && args[0] != e.returnvalue.props.sections.length - 1) {
- let category = categories[args[0] - 1];
- if (category) return 40;
- }
- return sectionHeightFunc(...args);
- };
-
- let rowHeight = e.returnvalue.props.rowHeight;
- let rowHeightFunc = typeof rowHeight != "function" ? _ => rowHeight : rowHeight;
- e.returnvalue.props.rowHeight = (...args) => {
- if (args[0] != 0 && args[0] != e.returnvalue.props.sections.length - 1) {
- let category = categories[args[0] - 1];
- if (category && (category.collapsed || category.id == draggedCategory)) return 0;
- }
- return rowHeightFunc(...args);
- };
-
- let renderRow = e.returnvalue.props.renderRow;
- e.returnvalue.props.renderRow = (...args) => {
- let row = renderRow(...args);
- return row && row.key == "no-private-channels" ? null : row;
- };
-
- let renderSection = e.returnvalue.props.renderSection;
- e.returnvalue.props.renderSection = (...args) => {
- if (args[0].section != 0 && args[0].section != e.returnvalue.props.sections.length - 1) {
- let category = categories[args[0].section - 1];
- if (category && draggedCategory != category.id) {
- let color = BDFDB.ColorUtils.convert(category.color, "RGBA");
- let foundDMs = this.filterDMs(category.dms);
- let unreadAmount = settings.showCategoryUnread && BDFDB.ArrayUtils.sum(foundDMs.map(id => BDFDB.LibraryModules.UnreadChannelUtils.getMentionCount(id)));
- return [
- BDFDB.ReactUtils.createElement("h2", {
- className: BDFDB.DOMUtils.formatClassName(BDFDB.disCN.dmchannelheadercontainer, BDFDB.disCN._pindmspinnedchannelsheadercontainer, category.collapsed && BDFDB.disCN._pindmspinnedchannelsheadercollapsed, color && BDFDB.disCN._pindmspinnedchannelsheadercolored, BDFDB.disCN.namecontainernamecontainer),
- categoryId: category.id,
- onMouseDown: event => {
- event = event.nativeEvent || event;
- let node = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmspinnedchannelsheadercontainer, event.target).cloneNode(true);
- let mousemove = event2 => {
- if (Math.sqrt((event.pageX - event2.pageX)**2) > 20 || Math.sqrt((event.pageY - event2.pageY)**2) > 20) {
- BDFDB.ListenerUtils.stopEvent(event);
- draggedCategory = category.id;
- this.updateContainer("dmCategories");
- let dragPreview = this.createDragPreview(node, event2);
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- let dragging = event3 => {
- this.updateDragPreview(dragPreview, event3);
- let placeholder = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmsdmchannelplaceholder, event3.target);
- let categoryNode = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmspinnedchannelsheadercontainer, placeholder ? placeholder.previousSibling : event3.target);
- let maybeHoveredCategory = categoryNode && categoryNode.getAttribute("categoryId");
- let update = maybeHoveredCategory != hoveredCategory;
- if (maybeHoveredCategory) hoveredCategory = maybeHoveredCategory;
- else hoveredCategory = null;
- if (update) this.updateContainer("dmCategories");
- };
- let releasing = event3 => {
- BDFDB.DOMUtils.remove(dragPreview);
- if (hoveredCategory) releasedCategory = hoveredCategory;
- else draggedCategory = null;
- hoveredCategory = null;
- this.updateContainer("dmCategories");
- document.removeEventListener("mousemove", dragging);
- document.removeEventListener("mouseup", releasing);
- };
- document.addEventListener("mousemove", dragging);
- document.addEventListener("mouseup", releasing);
- }
- };
- let mouseup = _ => {
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- };
- document.addEventListener("mousemove", mousemove);
- document.addEventListener("mouseup", mouseup);
- },
- onClick: _ => {
- if (foundDMs.length || !category.collapsed) {
- category.collapsed = !category.collapsed;
- BDFDB.DataUtils.save(category, this, "dmCategories", category.id);
- this.updateContainer("dmCategories");
- }
- },
- onContextMenu: event => {
- BDFDB.ContextMenuUtils.open(this, event, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
- children: [
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: BDFDB.LanguageUtils.LanguageStrings.CATEGORY_SETTINGS,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "category-settings"),
- action: event2 => {
- this.openCategorySettingsModal(category, "dmCategories");
- }
- }),
- BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
- label: BDFDB.LanguageUtils.LanguageStrings.DELETE_CATEGORY,
- id: BDFDB.ContextMenuUtils.createItemId(this.name, "remove-category"),
- color: BDFDB.LibraryComponents.MenuItems.Colors.DANGER,
- action: event2 => {
- BDFDB.DataUtils.remove(this, "dmCategories", category.id);
- this.updateContainer("dmCategories");
- }
- })
- ]
- }));
- },
- children: [
- BDFDB.ObjectUtils.is(color) ? BDFDB.ReactUtils.createElement("span", {
- className: BDFDB.disCN.dmchannelheadertext,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextGradientElement, {
- gradient: BDFDB.ColorUtils.createGradient(color),
- children: category.name
- })
- }) : BDFDB.ReactUtils.createElement("span", {
- className: BDFDB.disCN.dmchannelheadertext,
- style: {color: color},
- children: category.name,
- }),
- unreadAmount ? BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Badges.NumberBadge, {
- className: BDFDB.disCN._pindmspinnedchannelsheaderamount,
- count: unreadAmount,
- style: {backgroundColor: BDFDB.DiscordConstants.Colors.STATUS_RED}
- }) : null,
- settings.showCategoryAmount ? BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Badges.NumberBadge, {
- className: BDFDB.disCN._pindmspinnedchannelsheaderamount,
- count: foundDMs.length,
- style: {backgroundColor: BDFDB.DiscordConstants.Colors.BRAND}
- }) : null,
- BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCNS._pindmspinnedchannelsheaderarrow + BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCNS._pindmspinnedchannelsheaderarrow + BDFDB.disCN.channelheadericon,
- nativeClass: true,
- iconSVG: `<svg width="24" height="24" viewBox="4 4 16 16"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M16.59 8.59004L12 13.17L7.41 8.59004L6 10L12 16L18 10L16.59 8.59004Z"></path></svg>`
- })
- })
- ].filter(n => n)
- }),
- hoveredChannel == "header_" + category.id && BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCNS.dmchannel + BDFDB.disCNS._pindmsdmchannelpinned + BDFDB.disCNS._pindmsdmchannelplaceholder + BDFDB.disCN.namecontainernamecontainer,
- children: BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCN.namecontainerlayout
- })
- })
- ].filter(n => n);
- }
- else return null;
- }
- else return renderSection(...args);
- };
- }
-
- let pinnedIds = BDFDB.ObjectUtils.toArray(e.instance.props.pinnedChannelIds).reverse();
- BDFDB.PatchUtils.unpatch(this, e.instance, "renderDM");
- BDFDB.PatchUtils.patch(this, e.instance, "renderDM", {before: e2 => {
- if (e2.methodArguments[0] != 0) e2.methodArguments[1] += pinnedIds.slice(0, e2.methodArguments[0] - 1).flat().length;
- }, after: e2 => {
- if (e2.methodArguments[0] != 0) {
- let id = e.instance.props.privateChannelIds[e2.methodArguments[1]];
- e2.returnValue = e.instance.props.channels[id] ? BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.PrivateChannelItems[e.instance.props.channels[id].isMultiUserDM() ? "GroupDM" : "DirectMessage"], Object.assign({
- key: id,
- channel: e.instance.props.channels[id],
- selected: e.instance.props.selectedChannelId == id
- }, (e.instance.props.navigator || e.instance.props.listNavigator).getItemProps({
- index: e2.methodArguments[2]
- }))) : null;
-
- let category = categories[e2.methodArguments[0] - 1];
- if (category) {
- if (!id || (category.collapsed && e.instance.props.selectedChannelId != id) || !category.dms.includes(id) || draggedCategory == category.id || draggedChannel == id) e2.returnValue = null;
- else if (hoveredCategory == category.id && [].concat(category.dms).reverse()[0] == id) e2.returnValue = [
- e2.returnValue,
- BDFDB.ReactUtils.createElement("h2", {
- className: BDFDB.disCNS.dmchannelheadercontainer + BDFDB.disCNS._pindmspinnedchannelsheadercontainer + BDFDB.disCNS._pindmsdmchannelplaceholder + BDFDB.disCN.namecontainernamecontainer
- })
- ].filter(n => n);
- else if (hoveredChannel == id) e2.returnValue = [
- e2.returnValue,
- BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCNS.dmchannel + BDFDB.disCNS._pindmsdmchannelpinned + BDFDB.disCNS._pindmsdmchannelplaceholder + BDFDB.disCN.namecontainernamecontainer,
- children: BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCN.namecontainerlayout
- })
- })
- ].filter(n => n);
- }
- }
- }}, {force: true, noCache: true});
- }
- }
-
- processUnreadDMs (e) {
- e.instance.props.pinnedPrivateChannelIds = [];
- let sortedRecents = this.sortAndUpdate("pinnedRecents");
- if (sortedRecents.length) {
- e.instance.props.unreadPrivateChannelIds = [];
- for (let pos in sortedRecents) {
- let id = sortedRecents[pos];
- if (e.instance.props.channels[id]) {
- if (!e.instance.props.pinnedPrivateChannelIds.includes(id)) e.instance.props.pinnedPrivateChannelIds.push(id);
- if (!e.instance.props.unreadPrivateChannelIds.includes(id)) e.instance.props.unreadPrivateChannelIds.push(id);
- }
- }
- e.instance.props.unreadPrivateChannelIds = e.instance.props.unreadPrivateChannelIds.concat(BDFDB.LibraryModules.DirectMessageUnreadStore.getUnreadPrivateChannelIds());
- if (e.returnvalue) {
- if (draggedChannel && releasedChannel) {
- let pinnedPrivateChannelIds = [].concat(e.instance.props.pinnedPrivateChannelIds), newData = {};
- BDFDB.ArrayUtils.remove(pinnedPrivateChannelIds, draggedChannel, true);
- pinnedPrivateChannelIds.splice(pinnedPrivateChannelIds.indexOf(releasedChannel) + 1, 0, draggedChannel);
- for (let pos in pinnedPrivateChannelIds) newData[pinnedPrivateChannelIds[pos]] = parseInt(pos);
- BDFDB.DataUtils.save(newData, this, "pinnedRecents");
- draggedChannel = null;
- releasedChannel = null;
- BDFDB.ReactUtils.forceUpdate(e.instance);
- }
- if (draggedChannel) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {filter: child => BDFDB.ObjectUtils.get(child, "props.channel.id") == draggedChannel});
- children.splice(index, 1);
- }
- if (this.hoveredChannel) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {filter: child => BDFDB.ObjectUtils.get(child, "props.channel.id") == this.hoveredChannel});
- children.splice(index + 1, 0, BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCNS.guildouter + BDFDB.disCN._pindmsrecentplaceholder,
- children: BDFDB.ReactUtils.createElement("div", {
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.GuildComponents.Items.DragPlaceholder, {})
- })
- }));
- }
- }
- }
- else e.instance.props.unreadPrivateChannelIds = BDFDB.LibraryModules.DirectMessageUnreadStore.getUnreadPrivateChannelIds();
- }
-
- processPrivateChannel (e) {
- if (e.instance.props.channel) {
- let category = this.getCategory(e.instance.props.channel.id, "dmCategories");
- if (category) {
- if (e.node) {
- BDFDB.DOMUtils.addClass(e.node, BDFDB.disCN._pindmsdmchannelpinned);
- e.node.removeEventListener("mousedown", e.node.PinDMsMouseDownListener);
- if (!settings.sortInRecentOrder) {
- e.node.setAttribute("draggable", false);
- e.node.PinDMsMouseDownListener = event => {
- if (!BDFDB.BDUtils.isPluginEnabled("PinDMs")) e.node.removeEventListener("mousedown", e.node.PinDMsMouseDownListener);
- else {
- event = event.nativeEvent || event;
- let mousemove = event2 => {
- if (Math.sqrt((event.pageX - event2.pageX)**2) > 20 || Math.sqrt((event.pageY - event2.pageY)**2) > 20) {
- BDFDB.ListenerUtils.stopEvent(event);
- draggedChannel = e.instance.props.channel.id;
- this.updateContainer("dmCategories");
- let dragPreview = this.createDragPreview(e.node, event2);
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- let dragging = event3 => {
- this.updateDragPreview(dragPreview, event3);
- let maybeHoveredChannel = null;
- let categoryNode = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmspinnedchannelsheadercontainer, event3.target);
- if (categoryNode) {
- let hoveredCategoryId = categoryNode.getAttribute("categoryid");
- if (hoveredCategoryId && hoveredCategoryId == category.id) maybeHoveredChannel = "header_" + category.id;
- }
- else {
- let placeholder = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmsdmchannelplaceholder, event3.target);
- maybeHoveredChannel = (BDFDB.ReactUtils.findValue(BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmsdmchannelpinned, placeholder ? placeholder.previousSibling : event3.target), "channel", {up: true}) || {}).id;
- let maybeHoveredCategory = maybeHoveredChannel && this.getCategory(maybeHoveredChannel, "dmCategories");
- if (!maybeHoveredCategory || maybeHoveredCategory.id != category.id) maybeHoveredChannel = null;
- };
- let update = maybeHoveredChannel != hoveredChannel;
- if (maybeHoveredChannel) hoveredChannel = maybeHoveredChannel;
- else hoveredChannel = null;
- if (update) this.updateContainer("dmCategories");
- };
- let releasing = event3 => {
- BDFDB.DOMUtils.remove(dragPreview);
- if (hoveredChannel) releasedChannel = hoveredChannel;
- else draggedChannel = null;
- hoveredChannel = null;
- this.updateContainer("dmCategories");
- document.removeEventListener("mousemove", dragging);
- document.removeEventListener("mouseup", releasing);
- };
- document.addEventListener("mousemove", dragging);
- document.addEventListener("mouseup", releasing);
- }
- };
- let mouseup = _ => {
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- };
- document.addEventListener("mousemove", mousemove);
- document.addEventListener("mouseup", mouseup);
- }
- };
- e.node.addEventListener("mousedown", e.node.PinDMsMouseDownListener);
- }
- }
- if (e.returnvalue) e.returnvalue.props.children = [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: BDFDB.LanguageUtils.LanguageStrings.UNPIN,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
- className: BDFDB.disCN._pindmsunpinbutton,
- onClick: event => {
- BDFDB.ListenerUtils.stopEvent(event);
- this.removeFromCategory(e.instance.props.channel.id, category, "dmCategories");
- },
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCN._pindmsunpinicon,
- name: BDFDB.LibraryComponents.SvgIcon.Names.PIN
- })
- })
- }),
- e.returnvalue.props.children
- ].flat(10).filter(n => n);
- }
- }
- }
-
- processDirectMessage (e) {
- if (e.instance.props.channel) {
- if (e.node && e.methodname == "componentDidMount") {
- BDFDB.DOMUtils.removeClass(e.node, BDFDB.disCN._pindmsrecentpinned);
- e.node.removeEventListener("contextmenu", e.node.PinDMsContextMenuListener);
- e.node.PinDMsContextMenuListener = event => {BDFDB.DMUtils.openMenu(e.instance.props.channel.id, event);};
- e.node.addEventListener("contextmenu", e.node.PinDMsContextMenuListener);
- if (this.isPinned(e.instance.props.channel.id, "pinnedRecents")) {
- BDFDB.DOMUtils.addClass(e.node, BDFDB.disCN._pindmsrecentpinned);
- e.node.removeEventListener("mousedown", e.node.PinDMsMouseDownListener);
- if (!settings.sortInRecentOrderGuild) {
- for (let child of e.node.querySelectorAll("a")) child.setAttribute("draggable", false);
- e.node.PinDMsMouseDownListener = event => {
- let mousemove = event2 => {
- if (Math.sqrt((event.pageX - event2.pageX)**2) > 20 || Math.sqrt((event.pageY - event2.pageY)**2) > 20) {
- BDFDB.ListenerUtils.stopEvent(event);
- draggedChannel = e.instance.props.channel.id;
- BDFDB.PatchUtils.forceAllUpdates(this, "UnreadDMs");
- let dragPreview = this.createDragPreview(e.node, event2);
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- let dragging = event3 => {
- this.updateDragPreview(dragPreview, event3);
- let placeholder = BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmsrecentplaceholder, event3.target);
- let maybeHoveredChannel = (BDFDB.ReactUtils.findValue(BDFDB.DOMUtils.getParent(BDFDB.dotCN._pindmsrecentpinned, placeholder ? placeholder.previousSibling : event3.target), "channel", {up: true}) || {}).id;
- let update = maybeHoveredChannel != hoveredChannel;
- if (maybeHoveredChannel) hoveredChannel = maybeHoveredChannel;
- else hoveredChannel = null;
- if (update) BDFDB.PatchUtils.forceAllUpdates(this, "UnreadDMs");
- };
- let releasing = event3 => {
- BDFDB.DOMUtils.remove(dragPreview);
- if (hoveredChannel) releasedChannel = hoveredChannel;
- else draggedChannel = null;
- hoveredChannel = null;
- BDFDB.PatchUtils.forceAllUpdates(this, "UnreadDMs");
- document.removeEventListener("mousemove", dragging);
- document.removeEventListener("mouseup", releasing);
- };
- document.addEventListener("mousemove", dragging);
- document.addEventListener("mouseup", releasing);
- }
- };
- let mouseup = _ => {
- document.removeEventListener("mousemove", mousemove);
- document.removeEventListener("mouseup", mouseup);
- };
- document.addEventListener("mousemove", mousemove);
- document.addEventListener("mouseup", mouseup);
- };
- e.node.addEventListener("mousedown", e.node.PinDMsMouseDownListener);
- }
- }
- }
- if (e.node && e.methodname == "componentWillUnmount") {
- BDFDB.PatchUtils.forceAllUpdates(this, "PrivateChannelsList");
- }
- if (e.returnvalue && this.isPinned(e.instance.props.channel.id, "pinnedRecents") && settings.showPinIcon) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {name:"BlobMask"});
- if (index > -1) children[index].props.upperLeftBadge = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Badges.IconBadge, {
- className: BDFDB.disCN.guildiconbadge,
- disableColor: true,
- style: {transform: "scale(-1, 1)"},
- icon: BDFDB.LibraryComponents.SvgIcon.Names.NOVA_PIN
- });
- }
- }
- }
-
- generateID (type) {
- if (!type) return null;
- let categories = BDFDB.DataUtils.load(this, type);
- let id = Math.round(Math.random() * 10000000000000000);
- return categories[id] ? this.generateID() : id;
- }
-
- filterDMs (dms) {
- return dms.filter(id => BDFDB.LibraryModules.ChannelStore.getChannel(id));
- }
-
- addToCategory (id, category, type) {
- if (!id || !category || !type) return;
- let wasEmpty = !this.filterDMs(category.dms).length;
- if (!category.dms.includes(id)) category.dms.unshift(id);
- if (wasEmpty && category.dms.length) category.collapsed = false;
- BDFDB.DataUtils.save(category, this, type, category.id);
- this.updateContainer(type);
- }
-
- removeFromCategory (id, category, type) {
- if (!id || !category || !type) return;
- BDFDB.ArrayUtils.remove(category.dms, id, true);
- if (!this.filterDMs(category.dms).length) category.collapsed = true;
- BDFDB.DataUtils.save(category, this, type, category.id);
- this.updateContainer(type);
- }
-
- getCategory (id, type) {
- if (!id || !type) return null;
- let categories = BDFDB.DataUtils.load(this, type);
- for (let catId in categories) if (categories[catId].dms.includes(id)) return categories[catId];
- return null;
- }
-
- sortAndUpdateCategories (type, reverse) {
- let data = BDFDB.ObjectUtils.sort(BDFDB.DataUtils.load(this, type), "pos"), newData = {};
- let sorted = [], pos = 0, sort = id => {
- if (sorted[pos] === undefined) {
- newData[id] = Object.assign({}, data[id], {pos});
- sorted[pos] = newData[id];
- }
- else {
- pos++;
- sort(id);
- }
- };
- for (let id in data) sort(id);
- if (!BDFDB.equals(data, newData)) BDFDB.DataUtils.save(newData, this, type);
- return (reverse ? sorted.reverse() : sorted).filter(n => n);
- }
-
- sortDMsByTime (dms, type) {
- if (dms.length > 1 && settings[type == "dmCategories" ? "sortInRecentOrder" : "sortInRecentOrderGuild"]) {
- let timestamps = BDFDB.LibraryModules.DirectMessageStore.getPrivateChannelIds().reduce((newObj, channelId) => (newObj[channelId] = BDFDB.LibraryModules.UnreadChannelUtils.lastMessageId(channelId), newObj), {});
- return [].concat(dms).sort(function (x, y) {return timestamps[x] > timestamps[y] ? -1 : timestamps[x] < timestamps[y] ? 1 : 0;});
- }
- else return dms;
- }
-
- openCategorySettingsModal (data, type, isNew) {
- if (BDFDB.ObjectUtils.is(data) && type) BDFDB.ModalUtils.open(this, {
- size: "MEDIUM",
- header: BDFDB.LanguageUtils.LanguageStrings.CATEGORY_SETTINGS,
- subheader: data.name,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: BDFDB.LanguageUtils.LanguageStrings.CATEGORY_NAME,
- className: BDFDB.disCN.marginbottom20 + " input-categoryname",
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
- value: data.name,
- placeholder: data.name,
- autoFocus: true
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
- className: BDFDB.disCN.dividerdefault
- })
- ]
- }),
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
- title: this.labels.modal_colorpicker1_text,
- className: BDFDB.disCN.marginbottom20,
- children: [
- BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ColorSwatches, {
- color: data.color,
- number: 1
- })
- ]
- })
- ],
- buttons: [{
- contents: isNew ? BDFDB.LanguageUtils.LanguageStrings.CREATE : BDFDB.LanguageUtils.LanguageStrings.SAVE,
- color: "BRAND",
- close: true,
- click: modal => {
- data.name = modal.querySelector(".input-categoryname " + BDFDB.dotCN.input).value.trim() || data.name;
-
- data.color = BDFDB.ColorUtils.getSwatchColor(modal, 1);
- if (data.color != null && !BDFDB.ObjectUtils.is(data.color)) {
- if (data.color[0] < 30 && data.color[1] < 30 && data.color[2] < 30) data.color = BDFDB.ColorUtils.change(data.color, 30);
- else if (data.color[0] > 225 && data.color[1] > 225 && data.color[2] > 225) data.color = BDFDB.ColorUtils.change(data.color, -30);
- }
-
- BDFDB.DataUtils.save(data, this, type, data.id);
-
- this.updateContainer(type);
- }
- }]
- });
- }
-
- addPin (newid, type) {
- if (!newid) return;
- let pinnedDMs = BDFDB.DataUtils.load(this, type);
- for (let id in pinnedDMs) pinnedDMs[id] = pinnedDMs[id] + 1;
- pinnedDMs[newid] = 0;
- BDFDB.DataUtils.save(pinnedDMs, this, type);
- this.updateContainer(type);
- }
-
- removePin (id, type) {
- if (!id) return;
- BDFDB.DataUtils.remove(this, type, id);
- this.updateContainer(type);
- }
-
- isPinned (id, type) {
- return BDFDB.DataUtils.load(this, type, id) != undefined;
- }
-
- updateContainer (type) {
- switch (type) {
- case "dmCategories":
- BDFDB.PatchUtils.forceAllUpdates(this, "PrivateChannelsList");
- break;
- case "pinnedRecents":
- BDFDB.PatchUtils.forceAllUpdates(this, "UnreadDMs");
- break;
- }
- }
-
- sortAndUpdate (type) {
- let data = BDFDB.DataUtils.load(this, type), newData = {};
- delete data[""];
- delete data["null"];
- let sortedDMs = [], existingDMs = [], sortDM = (id, pos) => {
- if (sortedDMs[pos] === undefined) sortedDMs[pos] = id;
- else sortDM(id, pos + 1);
- };
- for (let id in data) sortDM(id, data[id]);
- sortedDMs = sortedDMs.filter(n => n);
- for (let pos in sortedDMs) {
- newData[sortedDMs[pos]] = parseInt(pos);
- if (BDFDB.LibraryModules.ChannelStore.getChannel(sortedDMs[pos])) existingDMs.push(sortedDMs[pos]);
- }
- if (!BDFDB.equals(data, newData)) BDFDB.DataUtils.save(newData, this, type);
- return this.sortDMsByTime(existingDMs, type);
- }
-
- createDragPreview (div, event) {
- if (!Node.prototype.isPrototypeOf(div)) return;
- let dragPreview = div.cloneNode(true);
- BDFDB.DOMUtils.addClass(dragPreview, BDFDB.disCN._pindmsdragpreview);
- BDFDB.DOMUtils.remove(dragPreview.querySelector(BDFDB.dotCNC.guildlowerbadge + BDFDB.dotCNC.guildupperbadge + BDFDB.dotCN.guildpillwrapper));
- document.querySelector(BDFDB.dotCN.appmount).appendChild(dragPreview);
- let rects = BDFDB.DOMUtils.getRects(dragPreview);
- BDFDB.DOMUtils.hide(dragPreview);
- dragPreview.style.setProperty("pointer-events", "none", "important");
- dragPreview.style.setProperty("left", event.clientX - (rects.width/2) + "px", "important");
- dragPreview.style.setProperty("top", event.clientY - (rects.height/2) + "px", "important");
- return dragPreview;
- }
-
- updateDragPreview (dragPreview, event) {
- if (!Node.prototype.isPrototypeOf(dragPreview)) return;
- BDFDB.DOMUtils.show(dragPreview);
- let rects = BDFDB.DOMUtils.getRects(dragPreview);
- dragPreview.style.setProperty("left", event.clientX - (rects.width/2) + "px", "important");
- dragPreview.style.setProperty("top", event.clientY - (rects.height/2) + "px", "important");
- }
-
- setLabelsByLanguage () {
- switch (BDFDB.LanguageUtils.getLanguage().id) {
- case "hr": //croatian
- return {
- context_pindm_text: "Prikljucite Izravnu Poruku",
- context_pinchannel_text: "Priložite popisu kanala",
- context_unpinchannel_text: "Ukloni s popisa kanala",
- context_addtonewcategory_text: "Dodavanje u novu kategoriju",
- context_pinguild_text: "Priložite popisu poslužitelja",
- context_unpinguild_text: "Ukloni s popisa poslužitelja",
- header_pinneddms_text: "Prikvačene Izravne Poruke",
- modal_colorpicker1_text: "Boja kategorije"
- };
- case "da": //danish
- return {
- context_pindm_text: "Fastgør PB",
- context_pinchannel_text: "Vedhæft til kanalliste",
- context_unpinchannel_text: "Fjern fra kanalliste",
- context_addtonewcategory_text: "Føj til ny kategori",
- context_pinguild_text: "Vedhæft til serverliste",
- context_unpinguild_text: "Fjern fra serverliste",
- header_pinneddms_text: "Pinned Privat Beskeder",
- modal_colorpicker1_text: "Kategori farve"
- };
- case "de": //german
- return {
- context_pindm_text: "Direktnachricht anheften",
- context_pinchannel_text: "An Kanalliste anheften",
- context_unpinchannel_text: "Von Kanalliste loslösen",
- context_addtonewcategory_text: "Zur neuen Kategorie hinzufügen",
- context_pinguild_text: "An Serverliste anheften",
- context_unpinguild_text: "Von Serverliste loslösen",
- header_pinneddms_text: "Gepinnte Direktnachrichten",
- modal_colorpicker1_text: "Kategoriefarbe"
- };
- case "es": //spanish
- return {
- context_pindm_text: "Anclar MD",
- context_pinchannel_text: "Adjuntar a la lista de canales",
- context_unpinchannel_text: "Deshazte de la lista de canales",
- context_addtonewcategory_text: "Agregar a nueva categoría",
- context_pinguild_text: "Adjuntar a la lista de servidores",
- context_unpinguild_text: "Deshazte de la lista de servidores",
- header_pinneddms_text: "Mensajes Directos Fijados",
- modal_colorpicker1_text: "Color de la categoría"
- };
- case "fr": //french
- return {
- context_pindm_text: "Épingler MP",
- context_pinchannel_text: "Épingler à la liste des salons",
- context_unpinchannel_text: "Détacher de la liste des salons",
- context_addtonewcategory_text: "Ajouter à une nouvelle catégorie",
- context_pinguild_text: "Épingler à la liste de serveurs",
- context_unpinguild_text: "Détacher de la liste de serveurs",
- header_pinneddms_text: "Messages Prives Épinglés",
- modal_colorpicker1_text: "Couleur de la catégorie"
- };
- case "it": //italian
- return {
- context_pindm_text: "Fissa il messaggio diretto",
- context_pinchannel_text: "Allega alla lista dei canali",
- context_unpinchannel_text: "Rimuovi dalla lista dei canali",
- context_addtonewcategory_text: "Aggiungi a nuova categoria",
- context_pinguild_text: "Allega alla lista dei server",
- context_unpinguild_text: "Rimuovi dalla lista dei server",
- header_pinneddms_text: "Messaggi Diretti Aggiunti",
- modal_colorpicker1_text: "Colore della categoria"
- };
- case "nl": //dutch
- return {
- context_pindm_text: "PB pinnen",
- context_pinchannel_text: "Pin naar de kanalenlijst",
- context_unpinchannel_text: "Losmaken van kanalenlijst",
- context_addtonewcategory_text: "Toevoegen aan nieuwe categorie",
- context_pinguild_text: "Pin naar de serverlijst",
- context_unpinguild_text: "Losmaken van serverlijst",
- header_pinneddms_text: "Vastgezette Persoonluke Berichten",
- modal_colorpicker1_text: "Categorie kleur"
- };
- case "no": //norwegian
- return {
- context_pindm_text: "Fest DM",
- context_pinchannel_text: "Fest på kanalliste",
- context_unpinchannel_text: "Fjern fra kanalliste",
- context_addtonewcategory_text: "Legg til i ny kategori",
- context_pinguild_text: "Fest på serverliste",
- context_unpinguild_text: "Fjern fra serverlisten",
- header_pinneddms_text: "Pinned Direktemeldinger",
- modal_colorpicker1_text: "Kategorifarge"
- };
- case "pl": //polish
- return {
- context_pindm_text: "Przypnij PW",
- context_pinchannel_text: "Dołącz do listy kanałów",
- context_unpinchannel_text: "Usuń z listy kanałów",
- context_addtonewcategory_text: "Dodaj do nowej kategorii",
- context_pinguild_text: "Dołącz do listy serwerów",
- context_unpinguild_text: "Usuń z listy serwerów",
- header_pinneddms_text: "Prywatne Wiadomości Bezpośrednie",
- modal_colorpicker1_text: "Kolor kategorii"
- };
- case "pt-BR": //portuguese (brazil)
- return {
- context_pindm_text: "Fixar MD",
- context_pinchannel_text: "Anexar à lista de canais",
- context_unpinchannel_text: "Remover da lista de canais",
- context_addtonewcategory_text: "Adicionar à nova categoria",
- context_pinguild_text: "Anexar à lista de servidores",
- context_unpinguild_text: "Remover da lista de servidores",
- header_pinneddms_text: "Mensagens diretas fixadas",
- modal_colorpicker1_text: "Cor da categoria"
- };
- case "fi": //finnish
- return {
- context_pindm_text: "Kiinnitä yksityisviestit",
- context_pinchannel_text: "Liitä kanavaluetteloon",
- context_unpinchannel_text: "Poista kanavaluettelosta",
- context_addtonewcategory_text: "Lisää uuteen luokkaan",
- context_pinguild_text: "Liitä palvelinluetteloon",
- context_unpinguild_text: "Poista palvelinluettelosta",
- header_pinneddms_text: "Liitetyt yksityisviestit",
- modal_colorpicker1_text: "Luokan väri"
- };
- case "sv": //swedish
- return {
- context_pindm_text: "Fäst DM",
- context_pinchannel_text: "Fäst till kanallista",
- context_unpinchannel_text: "Ta bort från kanallistan",
- context_addtonewcategory_text: "Lägg till i ny kategori",
- context_pinguild_text: "Fäst till servernlista",
- context_unpinguild_text: "Ta bort från servernlista",
- header_pinneddms_text: "Inlagda Direktmeddelanden",
- modal_colorpicker1_text: "Kategori färg"
- };
- case "tr": //turkish
- return {
- context_pindm_text: "DM'yi Sabitle",
- context_pinchannel_text: "Kanal listesine ekle",
- context_unpinchannel_text: "Kanal listesinden kaldır",
- context_addtonewcategory_text: "Yeni kategoriye ekle",
- context_pinguild_text: "Sunucu listesine ekle",
- context_unpinguild_text: "Sunucu listesinden kaldır",
- header_pinneddms_text: "Direkt Mesajlar Sabitleyin",
- modal_colorpicker1_text: "Kategori rengi"
- };
- case "cs": //czech
- return {
- context_pindm_text: "Připnout PZ",
- context_pinchannel_text: "Připojení k seznamu kanálů",
- context_unpinchannel_text: "Odstranit ze seznamu kanálů",
- context_addtonewcategory_text: "Přidat do nové kategorie",
- context_pinguild_text: "Připojit ke seznamu serverů",
- context_unpinguild_text: "Odstranit ze seznamu serverů",
- header_pinneddms_text: "Připojené Přímá Zpráva",
- modal_colorpicker1_text: "Barva kategorie"
- };
- case "bg": //bulgarian
- return {
- context_pindm_text: "Закачени ДС",
- context_pinchannel_text: "Прикачете към списъка с канали",
- context_unpinchannel_text: "Премахване от списъка с канали",
- context_addtonewcategory_text: "Добавяне към нова категория",
- context_pinguild_text: "Прикачване към списъка със сървъри",
- context_unpinguild_text: "Премахване от списъка със сървъри",
- header_pinneddms_text: "Свързани директни съобщения",
- modal_colorpicker1_text: "Цвят на категорията"
- };
- case "ru": //russian
- return {
- context_pindm_text: "Закрепить ЛС",
- context_pinchannel_text: "Прикрепить к списку каналов",
- context_unpinchannel_text: "Удалить из списка каналов",
- context_addtonewcategory_text: "Добавить в новую категорию",
- context_pinguild_text: "Присоединить к списку серверов",
- context_unpinguild_text: "Удалить из списка серверов",
- header_pinneddms_text: "Прикрепленные Личные Сообщения",
- modal_colorpicker1_text: "Цвет категории"
- };
- case "uk": //ukrainian
- return {
- context_pindm_text: "Закріпити ОП",
- context_pinchannel_text: "Додайте до списку каналів",
- context_unpinchannel_text: "Видалити зі списку каналів",
- context_addtonewcategory_text: "Додати до нової категорії",
- context_pinguild_text: "Додайте до списку серверів",
- context_unpinguild_text: "Видалити зі списку серверів",
- header_pinneddms_text: "Прикріплені oсобисті повідомлення",
- modal_colorpicker1_text: "Колір категорії"
- };
- case "ja": //japanese
- return {
- context_pindm_text: "DMピン",
- context_pinchannel_text: "チャンネルリストに添付",
- context_unpinchannel_text: "チャンネルリストから削除",
- context_addtonewcategory_text: "新しいカテゴリに追加",
- context_pinguild_text: "サーバーリストに添付",
- context_unpinguild_text: "サーバーリストから削除",
- header_pinneddms_text: "固定された直接メッセージ",
- modal_colorpicker1_text: "カテゴリーの色"
- };
- case "zh-TW": //chinese (traditional)
- return {
- context_pindm_text: "引腳直接留言",
- context_pinchannel_text: "附加到頻道列表",
- context_unpinchannel_text: "從頻道列表中刪除",
- context_addtonewcategory_text: "添加到新類別",
- context_pinguild_text: "附加到服務器列表",
- context_unpinguild_text: "從服務器列表中刪除",
- header_pinneddms_text: "固定私人信息",
- modal_colorpicker1_text: "類別顏色"
- };
- case "ko": //korean
- return {
- context_pindm_text: "비공개 메시지 고정",
- context_pinchannel_text: "채널 목록에 첨부",
- context_unpinchannel_text: "채널 목록에서 삭제",
- context_addtonewcategory_text: "새 카테고리에 추가",
- context_pinguild_text: "서버 목록에 첨부",
- context_unpinguild_text: "서버 목록에서 제거",
- header_pinneddms_text: "고정 된 비공개 메시지",
- modal_colorpicker1_text: "카테고리 색상"
- };
- default: //default: english
- return {
- context_pindm_text: "Pin DM",
- context_pinchannel_text: "Pin to Channellist",
- context_unpinchannel_text: "Unpin from Channellist",
- context_addtonewcategory_text: "Add to new Category",
- context_pinguild_text: "Pin to Serverlist",
- context_unpinguild_text: "Unpin from Serverlist",
- header_pinneddms_text: "Pinned Direct Messages",
- modal_colorpicker1_text: "Categorycolor"
- };
- }
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/QuickMention.plugin.js b/.config/BetterDiscord/plugins/QuickMention.plugin.js
deleted file mode 100644
index 7cbb694..0000000
--- a/.config/BetterDiscord/plugins/QuickMention.plugin.js
+++ /dev/null
@@ -1,67 +0,0 @@
-//META{"name":"QuickMention","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/QuickMention","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/QuickMention/QuickMention.plugin.js"}*//
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "QuickMention",
- "author": "DevilBro",
- "version": "1.0.2",
- "description": "Adds a mention entry to the message option toolbar."
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`//META{"name":"`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- return class QuickMention extends Plugin {
- onLoad() {}
-
- onStart() {}
-
- onStop() {}
-
- onMessageOptionToolbar (e) {
- if (!e.instance.props.expanded && e.instance.props.message.author.id != BDFDB.UserUtils.me.id && (BDFDB.UserUtils.can("SEND_MESSAGES") || e.instance.props.channel.type == BDFDB.DiscordConstants.ChannelTypes.DM || e.instance.props.channel.type == BDFDB.DiscordConstants.ChannelTypes.GROUP_DM)) e.returnvalue.props.children.unshift(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- key: "mention",
- text: BDFDB.LanguageUtils.LanguageStrings.MENTION,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
- className: BDFDB.disCN.messagetoolbarbutton,
- onClick: _ => {
- BDFDB.LibraryModules.DispatchUtils.ComponentDispatch.dispatchToLastSubscribed(BDFDB.DiscordConstants.ComponentActions.INSERT_TEXT, {
- content: `<@!${e.instance.props.message.author.id}>`
- });
- },
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
- className: BDFDB.disCN.messagetoolbaricon,
- name: BDFDB.LibraryComponents.SvgIcon.Names.NOVA_AT
- })
- })
- }));
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/RemoveNicknames.config.json b/.config/BetterDiscord/plugins/RemoveNicknames.config.json
deleted file mode 100644
index 1818ecb..0000000
--- a/.config/BetterDiscord/plugins/RemoveNicknames.config.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "changelog": {
- "currentversion": "1.3.0"
- },
- "settings": {
- "addNickname": false,
- "changeInAutoComplete": true,
- "changeInChatWindow": true,
- "changeInMemberList": true,
- "changeInMentions": true,
- "changeInTyping": true,
- "changeInVoiceChat": true,
- "replaceBots": true,
- "replaceOwn": false,
- "swapPositions": false
- }
-} \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/RemoveNicknames.plugin.js b/.config/BetterDiscord/plugins/RemoveNicknames.plugin.js
deleted file mode 100644
index 7d05528..0000000
--- a/.config/BetterDiscord/plugins/RemoveNicknames.plugin.js
+++ /dev/null
@@ -1,189 +0,0 @@
-//META{"name":"RemoveNicknames","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/RemoveNicknames","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/RemoveNicknames/RemoveNicknames.plugin.js"}*//
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "RemoveNicknames",
- "author": "DevilBro",
- "version": "1.3.2",
- "description": "Replace all nicknames with the actual accountnames."
- },
- "changeLog": {
- "fixed": {
- "Mentions": "Now also works for mentions inside quotes"
- }
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {
- delete window.BDFDB_Global.downloadModal;
- require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (e, r, b) => {
- if (!e && b && b.indexOf(`//META{"name":"`) > -1) require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => {});
- else BdApi.alert("Error", "Could not download BDFDB library plugin, try again some time later.");
- });
- }
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {this.load();}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- var settings = {};
-
- return class RemoveNicknames extends Plugin {
- onLoad() {
- this.defaults = {
- settings: {
- replaceOwn: {value:false, inner:false, description:"Replace your own name:"},
- replaceBots: {value:true, inner:false, description:"Replace the nickname of bots:"},
- addNickname: {value:false, inner:false, description:"Add nickname as parentheses:"},
- swapPositions: {value:false, inner:false, description:"Swap the position of username and nickname:"},
- changeInChatWindow: {value:true, inner:true, description:"Messages"},
- changeInMentions: {value:true, inner:true, description:"Mentions"},
- changeInVoiceChat: {value:true, inner:true, description:"Voice Channels"},
- changeInMemberList: {value:true, inner:true, description:"Member List"},
- changeInTyping: {value:true, inner:true, description:"Typing List"},
- changeInAutoComplete: {value:true, inner:true, description:"Autocomplete Menu"}
- }
- };
-
- this.patchedModules = {
- before: {
- AutocompleteUserResult: "render",
- VoiceUser: "render",
- MemberListItem: "render",
- Message: "default",
- MessageContent: "type",
- },
- after: {
- TypingUsers: "render",
- Mention: "default"
- }
- };
- }
-
- onStart() {
- this.forceUpdateAll();
- }
-
- onStop() {
- this.forceUpdateAll();
- }
-
- getSettingsPanel (collapseStates = {}) {
- let settingsPanel, settingsItems = [], innerItems = [];
-
- for (let key in settings) (!this.defaults.settings[key].inner ? settingsItems : innerItems).push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
- type: "Switch",
- plugin: this,
- keys: ["settings", key],
- label: this.defaults.settings[key].description,
- value: settings[key]
- }));
- settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
- title: "Remove Nicknames in:",
- first: settingsItems.length == 0,
- last: true,
- children: innerItems
- }));
-
- return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
- }
-
- onSettingsClosed (e) {
- if (this.SettingsUpdated) {
- delete this.SettingsUpdated;
- this.forceUpdateAll();
- }
- }
-
- forceUpdateAll () {
- settings = BDFDB.DataUtils.get(this, "settings");
-
- BDFDB.PatchUtils.forceAllUpdates(this);
- BDFDB.MessageUtils.rerenderAll();
- }
-
- processAutocompleteUserResult (e) {
- if (e.instance.props.user && e.instance.props.nick && settings.changeInAutoComplete) {
- let newName = this.getNewName(e.instance.props.user);
- if (newName) e.instance.props.nick = newName;
- }
- }
-
- processVoiceUser (e) {
- if (e.instance.props.user && e.instance.props.nick && settings.changeInVoiceChat) {
- let newName = this.getNewName(e.instance.props.user);
- if (newName) e.instance.props.nick = newName;
- }
- }
-
- processMemberListItem (e) {
- if (e.instance.props.user && e.instance.props.nick && settings.changeInMemberList) {
- let newName = this.getNewName(e.instance.props.user);
- if (newName) e.instance.props.nick = newName;
- }
- }
-
- processTypingUsers (e) {
- if (BDFDB.ObjectUtils.is(e.instance.props.typingUsers) && Object.keys(e.instance.props.typingUsers).length && settings.changeInTyping) {
- let users = Object.keys(e.instance.props.typingUsers).filter(id => id != BDFDB.UserUtils.me.id).filter(id => !BDFDB.LibraryModules.FriendUtils.isBlocked(id)).map(id => BDFDB.LibraryModules.UserStore.getUser(id)).filter(user => user);
- if (users.length) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {props: [["className", BDFDB.disCN.typingtext]]});
- if (index > -1 && BDFDB.ArrayUtils.is(children[index].props.children)) for (let child of children[index].props.children) if (child.type == "strong") {
- let newName = this.getNewName(users.shift());
- if (newName) BDFDB.ReactUtils.setChild(child, newName);
- }
- }
- }
- }
-
- processMessage (e) {
- let header = e.instance.props.childrenHeader;
- if (header && header.props && header.props.message && header.props.message.nick) {
- let newName = this.getNewName(header.props.message.author);
- if (newName) header.props.message = new BDFDB.DiscordObjects.Message(Object.assign({}, header.props.message, {nick: newName}));
- }
- }
-
- processMessageContent (e) {
- if (e.instance.props.message.type != BDFDB.DiscordConstants.MessageTypes.DEFAULT && e.instance.props.message.nick && settings.changeInChatWindow) {
- let newName = this.getNewName(e.instance.props.message.author);
- if (newName) {
- e.instance.props.message = new BDFDB.DiscordObjects.Message(Object.assign({}, e.instance.props.message, {nick: newName}));
- e.instance.props.children.props.message = e.instance.props.message;
- }
- }
- }
-
- processMention (e) {
- if (e.instance.props.userId && settings.changeInMentions) {
- let newName = this.getNewName(BDFDB.LibraryModules.UserStore.getUser(e.instance.props.userId));
- if (newName) e.returnvalue.props.children[0] = "@" + newName;
- }
- }
-
- getNewName (user, wrapper) {
- if (!user) return null;
- let member = BDFDB.LibraryModules.MemberStore.getMember(BDFDB.LibraryModules.LastGuildStore.getGuildId(), user.id) || {};
- if (!member.nick || user.id == BDFDB.UserUtils.me.id && !settings.replaceOwn || user.bot && !settings.replaceBots) return null;
- let username = (BDFDB.BDUtils.isPluginEnabled("EditUsers") && BDFDB.DataUtils.load("EditUsers", "users", user.id) || {}).name || user.username;
- return settings.addNickname ? (settings.swapPositions ? (member.nick + " (" + username + ")") : (username + " (" + member.nick + ")")) : username;
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/plugins/SendLargeMessages.plugin.js b/.config/BetterDiscord/plugins/SendLargeMessages.plugin.js
deleted file mode 100644
index 733fd67..0000000
--- a/.config/BetterDiscord/plugins/SendLargeMessages.plugin.js
+++ /dev/null
@@ -1,234 +0,0 @@
-//META{"name":"SendLargeMessages","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/SendLargeMessages","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/SendLargeMessages/SendLargeMessages.plugin.js"}*//
-
-module.exports = (_ => {
- const config = {
- "info": {
- "name": "SendLargeMessages",
- "author": "DevilBro",
- "version": "1.6.5",
- "description": "Splits messages into several smaller messages when your message exceeds the limit."
- }
- };
- return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class {
- getName () {return config.info.name;}
- getAuthor () {return config.info.author;}
- getVersion () {return config.info.version;}
- getDescription () {return config.info.description;}
-
- load() {
- if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue:[]});
- if (!window.BDFDB_Global.downloadModal) {
- window.BDFDB_Global.downloadModal = true;
- BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click "Download Now" to install it.`, {
- confirmText: "Download Now",
- cancelText: "Cancel",
- onCancel: _ => {delete window.BDFDB_Global.downloadModal;},
- onConfirm: _ => {delete window.BDFDB_Global.downloadModal;require("request").get("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js", (error, response, body) => {require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), body, _ => {});});}
- });
- }
- if (!window.BDFDB_Global.pluginQueue.includes(config.info.name)) window.BDFDB_Global.pluginQueue.push(config.info.name);
- }
- start() {}
- stop() {}
- } : (([Plugin, BDFDB]) => {
- const messageDelay = 1000; //changing at own risk, might result in bans or mutes
-
- return class SendLargeMessages extends Plugin {
- onLoad() {
- this.patchedModules = {
- before: {
- ChannelTextAreaForm: "render",
- ChannelEditorContainer: "render"
- },
- after: {
- ChannelTextAreaContainer: "render",
- }
- };
- }
-
- onStart() {
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- onStop() {
- BDFDB.PatchUtils.forceAllUpdates(this);
- }
-
- processChannelTextAreaForm (e) {
- if (!BDFDB.PatchUtils.isPatched(this, e.instance, "handleSendMessage")) BDFDB.PatchUtils.patch(this, e.instance, "handleSendMessage", {instead: e2 => {
- if (e2.methodArguments[0].length > BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH) {
- e2.stopOriginalMethodCall();
- let messages = this.formatText(e2.methodArguments[0]);
- messages.filter(n => n).forEach((message, i) => {
- BDFDB.TimeUtils.timeout(_ => {
- e2.originalMethod(message);
- if (i >= messages.length-1) BDFDB.NotificationUtils.toast(this.labels.toast_allsent_text, {type:"success"});
- }, messageDelay * i);
- });
- return Promise.resolve({
- shouldClear: true,
- shouldRefocus: true
- });
- }
- else return e2.callOriginalMethodAfterwards();
- }}, {force: true, noCache: true});
- }
-
- processChannelTextAreaContainer (e) {
- if (e.returnvalue.ref && e.returnvalue.ref.current && BDFDB.DOMUtils.getParent(BDFDB.dotCN.chatform, e.returnvalue.ref.current)) {
- let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {name: "SlateCharacterCount"});
- if (index > -1) {
- let text = BDFDB.LibraryModules.SlateSelectionUtils.serialize(children[index].props.document, "raw");
- if (text.length > BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH) children[index] = BDFDB.ReactUtils.createElement("div", {
- className: BDFDB.disCNS.textareacharcounter + BDFDB.disCN.textareacharcountererror,
- children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
- text: Math.ceil(text.length / BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH * (39/40)) + " " + BDFDB.LanguageUtils.LanguageStrings.MESSAGES,
- children: BDFDB.ReactUtils.createElement("span", {
- children: BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH - text.length
- })
- })
- });
- }
- }
- }
-
- processChannelEditorContainer (e) {
- if (e.instance.props.type && e.instance.props.type == BDFDB.DiscordConstants.TextareaTypes.NORMAL) e.instance.props.shouldUploadLongMessages = false;
- }
-
- formatText (text) {
- text = text.replace(/\t/g, " ");
- let longWords = text.match(new RegExp(`[^ ]{${BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH * (19/20)},}`, "gm"));
- if (longWords) for (let longWord of longWords) {
- let count1 = 0;
- let shortWords = [];
- longWord.split("").forEach(c => {
- if (shortWords[count1] && (shortWords[count1].length >= BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH * (19/20) || (c == "\n" && shortWords[count1].length >= BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH * (19/20) - 100))) count1++;
- shortWords[count1] = shortWords[count1] ? shortWords[count1] + c : c;
- });
- text = text.replace(longWord, shortWords.join(" "));
- }
- let messages = [];
- let count2 = 0;
- text.split(" ").forEach((word) => {
- if (messages[count2] && (messages[count2] + "" + word).length > BDFDB.DiscordConstants.MAX_MESSAGE_LENGTH * (39/40)) count2++;
- messages[count2] = messages[count2] ? messages[count2] + " " + word : word;
- });
-
- let insertCodeBlock = null, insertCodeLine = null;
- for (let j = 0; j < messages.length; j++) {
- if (insertCodeBlock) {
- messages[j] = insertCodeBlock + messages[j];
- insertCodeBlock = null;
- }
- else if (insertCodeLine) {
- messages[j] = insertCodeLine + messages[j];
- insertCodeLine = null;
- }
-
- let codeBlocks = messages[j].match(/`{3,}[\S]*\n|`{3,}/gm);
- let codeLines = messages[j].match(/[^`]{0,1}`{1,2}[^`]|[^`]`{1,2}[^`]{0,1}/gm);
-
- if (codeBlocks && codeBlocks.length % 2 == 1) {
- messages[j] = messages[j] + "```";
- insertCodeBlock = codeBlocks[codeBlocks.length-1] + "\n";
- }
- else if (codeLines && codeLines.length % 2 == 1) {
- insertCodeLine = codeLines[codeLines.length-1].replace(/[^`]/g, "");
- messages[j] = messages[j] + insertCodeLine;
- }
- }
- return messages;
- }
-
- setLabelsByLanguage () {
- switch (BDFDB.LanguageUtils.getLanguage().id) {
- case "hr": //croatian
- return {
- toast_allsent_text: "Sve veliku poslane."
- };
- case "da": //danish
- return {
- toast_allsent_text: "Alle beskeder sendes."
- };
- case "de": //german
- return {
- toast_allsent_text: "Alle Nachrichten versendet."
- };
- case "es": //spanish
- return {
- toast_allsent_text: "Todos los mensajes enviados."
- };
- case "fr": //french
- return {
- toast_allsent_text: "Tous les messages envoyés"
- };
- case "it": //italian
- return {
- toast_allsent_text: "Tutti i messaggi inviati."
- };
- case "nl": //dutch
- return {
- toast_allsent_text: "Alle berichten verzonden."
- };
- case "no": //norwegian
- return {
- toast_allsent_text: "Alle meldinger sendt."
- };
- case "pl": //polish
- return {
- toast_allsent_text: "Wszystkie wiadomości zostały wysłane."
- };
- case "pt-BR": //portuguese (brazil)
- return {
- toast_allsent_text: "Todas as mensagens enviadas."
- };
- case "fi": //finnish
- return {
- toast_allsent_text: "Kaikki lähetetyt viestit."
- };
- case "sv": //swedish
- return {
- toast_allsent_text: "Alla meddelanden skickade."
- };
- case "tr": //turkish
- return {
- toast_allsent_text: "Tüm mesajlar gönderildi."
- };
- case "cs": //czech
- return {
- toast_allsent_text: "Všechny zprávy byly odeslány."
- };
- case "bg": //bulgarian
- return {
- toast_allsent_text: "Всички изпратени съобщения."
- };
- case "ru": //russian
- return {
- toast_allsent_text: "Все отправленные сообщения."
- };
- case "uk": //ukrainian
- return {
- toast_allsent_text: "Всі повідомлення надіслано."
- };
- case "ja": //japanese
- return {
- toast_allsent_text: "すべてのメッセージが送信されました。"
- };
- case "zh-TW": //chinese (traditional)
- return {
- toast_allsent_text: "發送的所有消息。"
- };
- case "ko": //korean
- return {
- toast_allsent_text: "모든 메시지가 전송되었습니다."
- };
- default: //default: english
- return {
- toast_allsent_text: "All messages sent."
- };
- }
- }
- };
- })(window.BDFDB_Global.PluginUtils.buildPlugin(config));
-})(); \ No newline at end of file
diff --git a/.config/BetterDiscord/themes/bliss.theme.css b/.config/BetterDiscord/themes/bliss.theme.css
new file mode 100644
index 0000000..0c58aea
--- /dev/null
+++ b/.config/BetterDiscord/themes/bliss.theme.css
@@ -0,0 +1,34 @@
+/**
+ * @name bliss
+ * @author Loekaars#8205
+ * @version 1.0.0
+ * @description based off co1ncidence's vim theme
+*/
+
+:root {
+ --accent: 175, 192, 247;
+
+ --pywal-serverside: #0c0c0c;
+
+ --pywal-bg0: #121213;
+ --pywal-bg1: #222222;
+ --pywal-bg2: #222222;
+ --pywal-bg3: #2d2d2d;
+
+ --pywal-color0: #121213;
+ --pywal-color1: #DE9DAC;
+ --pywal-color2: #9DDEAF;
+ --pywal-color3: #DEDD9D;
+ --pywal-color4: #9DACDE;
+ --pywal-color5: #AF9DDE;
+ --pywal-color6: #9DCCDE;
+ --pywal-color7: #f4e0d8;
+ --pywal-color8: #393b3b;
+ --pywal-color9: #F7AFC0;
+ --pywal-color10: #AFF7C3;
+ --pywal-color11: #F7F6AF;
+ --pywal-color12: #AFC0F7;
+ --pywal-color13: #C3AFF7;
+ --pywal-color14: #AFE3F7;
+ --pywal-color15: #f9ece8;
+}
diff --git a/.config/X11/Xresources b/.config/X11/Xresources
index d25fa34..4089089 100644
--- a/.config/X11/Xresources
+++ b/.config/X11/Xresources
@@ -1,23 +1,23 @@
-*.color0: #050505
-*.color1: #AC8A8C
-*.color2: #8AAC8B
-*.color3: #ACA98A
-*.color4: #8F8AAC
-*.color5: #AC8AAC
-*.color6: #8AABAC
-*.color7: #e7e7e7
-*.color8: #676767
-*.color9: #AC8A8C
-*.color10: #8AAC8B
-*.color11: #ACA98A
-*.color12: #8F8AAC
-*.color13: #AC8AAC
-*.color14: #8AABAC
-*.color15: #f0f0f0
+*.color0: #121213
+*.color1: #DE9DAC
+*.color2: #9DDEAF
+*.color3: #DEDD9D
+*.color4: #9DACDE
+*.color5: #AF9DDE
+*.color6: #9DCCDE
+*.color7: #f4e0d8
+*.color8: #393b3b
+*.color9: #F7AFC0
+*.color10: #AFF7C3
+*.color11: #F7F6AF
+*.color12: #AFC0F7
+*.color13: #C3AFF7
+*.color14: #AFE3F7
+*.color15: #f9ece8
-*.foreground: #f0f0f0
-*.background: #050505
-*.cursorColor: #f0f0f0
+*.foreground: #fdf9f7
+*.background: #121213
+*.cursorColor: #fdf9f7
*.font: JetBrainsMono NF:style=Medium,Regular:size=10
diff --git a/.config/coc/extensions/package.json b/.config/coc/extensions/package.json
index bfa87f6..731dc65 100644
--- a/.config/coc/extensions/package.json
+++ b/.config/coc/extensions/package.json
@@ -3,6 +3,7 @@
"coc-css": ">=1.2.5",
"coc-emmet": ">=1.1.6",
"coc-html": ">=1.2.4",
+ "coc-java": ">=1.5.0",
"coc-json": ">=1.2.6",
"coc-neosnippet": ">=1.2.2",
"coc-python": ">=1.2.12",
diff --git a/.config/coc/snippets-mru b/.config/coc/snippets-mru
index 9173cb7..e6969a3 100644
--- a/.config/coc/snippets-mru
+++ b/.config/coc/snippets-mru
@@ -1,19 +1,20 @@
+try/except
+foreach
+get
beg
+lambda
+newdocument
__main__
def
-newdocument
async/def
newhtml
while
-lambda
set
for
forof
throw
-foreach
if
try/except/else
-try/except
\begin
gerrit
nopagenumbers
diff --git a/.config/i3/config b/.config/i3/config
index 6b0bcbf..fdbc394 100644
--- a/.config/i3/config
+++ b/.config/i3/config
@@ -8,12 +8,12 @@ gaps inner $inner_gaps
gaps outer $outer_gaps
# border color
-client.focused #222222 #222222 #f0f0f0 #111111 #222222
-client.focused_inactive #050505 #050505 #f0f0f0 #050505 #050505
-client.unfocused #050505 #050505 #f0f0f0 #050505 #050505
-client.urgent #050505 #ac8a8c #f0f0f0 #ac8a8c #ac8a8c
-client.placeholder #000000 #0c0c0c #f0f0f0 #050505 #050505
-client.background #c7c5ca
+client.focused #262427 #262427 #fdf9f7 #262427 #262427
+client.focused_inactive #121213 #121213 #fdf9f7 #121213 #121213
+client.unfocused #121213 #121213 #fdf9f7 #121213 #121213
+client.urgent #121213 #de9dac #fdf9f7 #de9dac #de9dac
+client.placeholder #000000 #0c0c0c #fdf9f7 #121213 #121213
+client.background #f9ece8
# Replace window decorations with a border
for_window [class=".*"] border pixel 0
@@ -44,9 +44,10 @@ exec "xbanish &"
exec "redshift &"
exec "dunst &"
exec "flashfocus &"
-exec "xbindkeys -f ~/.config/xb.rc"
exec "xset r rate 250 40"
exec "autocutsel &"
+exec "xbindkeys -f ~/.config/xbindkeys/main"
+exec "xbindkeys -f ~/.config/xbindkeys/delay"
# split in horizontal orientation
bindsym $mod+bar split h
@@ -104,6 +105,4 @@ for_window [window_type=notification] floating enable
for_window [class="Unturned.x86_64"] floating disable
for_window [class="Unturned.x86_64"] fullscreen disable
-for_window [class="Minecraft.*"] floating enable
-for_window [class="Minecraft.*"] fullscreen enable
diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf
index 6b7fdf9..8bbe4f5 100644
--- a/.config/mpd/mpd.conf
+++ b/.config/mpd/mpd.conf
@@ -1,23 +1,29 @@
-music_directory "~/music"
-playlist_directory "~/music/playlists"
-log_file "~/.local/mpd/log"
+# See: /usr/share/doc/mpd/mpdconf.example
+music_directory "/mnt/e/mpd/music"
+playlist_directory "/mnt/e/mpd/playlists"
-auto_update "yes"
-bind_to_address "127.0.0.1"
-restore_paused "yes"
+pid_file "/mnt/e/mpd/mpd.pid"
+db_file "/mnt/e/mpd/mpd.db"
+state_file "/mnt/e/mpd/mpdstate"
+
+auto_update "yes"
+bind_to_address "*"
+port "6600"
+restore_paused "yes"
user "loek"
group "users"
-default_permissions "read,add,control,admin"
+default_permissions "read,add,control,admin"
-input {
- plugin "curl"
-}
+# input {
+# plugin "curl"
+# }
audio_output {
- type "pulse"
- name "pulse audio"
+ type "pulse"
+ name "pulse audio"
+ # server "127.0.0.1"
}
audio_output {
@@ -25,11 +31,12 @@ audio_output {
name "icecast mpd stream"
host "localhost"
port "8000"
- mount "/mnt/mpd"
+ mount "/mpd.ogg"
user "source"
password "sSJKfSicDF8"
bitrate "320"
format "48000:24:2"
- encoding "mp3"
+ encoding "ogg"
+ protocol "icecast2"
}
diff --git a/.config/ncmpcpp/config b/.config/ncmpcpp/config
index e68c10f..0afd73a 100644
--- a/.config/ncmpcpp/config
+++ b/.config/ncmpcpp/config
@@ -1,6 +1,6 @@
mpd_host = "127.0.0.1"
mpd_port = "6600"
-mpd_music_dir = "/home/loek/music"
+mpd_music_dir = "/mnt/e/mpd/music"
mpd_connection_timeout = "5"
mpd_crossfade_time = "1"
ncmpcpp_directory="/home/loek/.config/ncmpcpp"
diff --git a/.config/nvim/bliss-lightline.vim b/.config/nvim/bliss-lightline.vim
new file mode 100644
index 0000000..aac8433
--- /dev/null
+++ b/.config/nvim/bliss-lightline.vim
@@ -0,0 +1,25 @@
+let s:bg = [ '#121213', 'NONE' ]
+let s:fg = [ '#fdf9f7', 'NONE' ]
+let s:mode = [ '#222222', 'NONE' ]
+let s:faint = [ '#393b3b', 'NONE' ]
+let s:none = [ 'NONE', 'NONE' ]
+let s:test = [ '#ff00ff', 'NONE' ]
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+let s:p.normal.left = [ [ s:fg, s:mode ], [ s:faint, s:bg ] ]
+let s:p.normal.right = [ [ s:faint, s:bg ] ]
+let s:p.normal.middle = [ [ s:none, s:none ] ]
+let s:p.normal.error = [ [ s:test, s:test ] ]
+let s:p.normal.warning = [ [ s:test, s:test ] ]
+let s:p.inactive.left = copy(s:p.normal.left)
+let s:p.inactive.right = copy(s:p.normal.right)
+let s:p.inactive.middle = copy(s:p.normal.middle)
+let s:p.insert.left = copy(s:p.normal.left)
+let s:p.replace.left = copy(s:p.insert.left)
+let s:p.visual.left = copy(s:p.insert.left)
+let s:p.tabline.left = copy(s:p.normal.middle)
+let s:p.tabline.tabsel = [ [ s:fg, s:faint ] ]
+let s:p.tabline.middle = copy(s:p.normal.middle)
+let s:p.tabline.right = copy(s:p.normal.middle)
+
+let g:lightline#colorscheme#bliss#palette = lightline#colorscheme#flatten(s:p)
diff --git a/.config/nvim/coc-settings.json b/.config/nvim/coc-settings.json
index 0dcf343..b98f17d 100644
--- a/.config/nvim/coc-settings.json
+++ b/.config/nvim/coc-settings.json
@@ -4,6 +4,19 @@
"command": "clangd",
"rootPatterns": ["compile_flags.txt", "compile_commands.json"],
"filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"]
+ },
+ "dart": {
+ "command": "dart",
+ "args": [
+ "/opt/dart-sdk/bin/snapshots/analysis_server.dart.snapshot",
+ "--lsp",
+ "--client-id",
+ "vim",
+ "--client-version",
+ "coc.nvim"
+ ],
+ "filetypes": ["dart"],
+ "trace.server": "verbose"
}
}
}
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
index 873f0fa..b07548e 100644
--- a/.config/nvim/init.vim
+++ b/.config/nvim/init.vim
@@ -29,12 +29,12 @@ hi! link CocFloating SneakScope
cabbrev help tab help
autocmd BufNewFile,BufRead *.jdscn set syntax=json
-" if ! filereadable(expand('~/.config/nvim/autoload/plug.vim'))
-" echo "Downloading junegunn/vim-plug to manage plugins..."
-" silent !mkdir -p ~/.config/nvim/autoload/
-" silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim
-" autocmd VimEnter * PlugInstall
-" endif
+if ! filereadable(expand('~/.config/nvim/autoload/plug.vim'))
+ echo "Downloading junegunn/vim-plug to manage plugins..."
+ silent !mkdir -p ~/.config/nvim/autoload/
+ silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim
+ autocmd VimEnter * PlugInstall
+endif
" plugged
call plug#begin('~/.config/nvim/plugged')
@@ -63,6 +63,9 @@ Plug 'lervag/vimtex'
Plug 'pangloss/vim-javascript'
Plug 'hail2u/vim-css3-syntax'
Plug 'octol/vim-cpp-enhanced-highlight'
+Plug 'dart-lang/dart-vim-plugin'
+Plug 'bartlomiejdanek/vim-dart'
+Plug 'natebosch/dartlang-snippets'
" 'vim=ide'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
@@ -81,6 +84,7 @@ Plug 'scheakur/vim-scheakur'
Plug 'mkarmona/materialbox'
Plug 'morhetz/gruvbox'
Plug 'co1ncidence/mountaineer'
+Plug 'co1ncidence/bliss'
call plug#end()
" keybinds
@@ -167,7 +171,7 @@ map <leader>.v :tabnew ~/.config/nvim/init.vim<cr>
map <leader>.c :tabnew ~/.config/picom.conf<cr>
map <leader>.z :tabnew ~/.zshrc<cr>
map <leader>.i :tabnew ~/.config/i3/config<cr>
-map <leader>.p :tabnew ~/.config/polybar/config.ini<cr>
+map <leader>.p :tabnew ~/.config/polybar/config<cr>
map <leader>.x :tabnew ~/.config/xb.rc<cr>
let g:which_key_map['.'] = {
\ 'name': '+config',
@@ -183,9 +187,9 @@ cnoreabbrev W w
cnoreabbrev sudow w !sudo tee %
" colorscheme thingers
-colorscheme mountaineer
+colorscheme bliss
let g:lightline = {
- \ 'colorscheme': 'mountaineer',
+ \ 'colorscheme': 'bliss',
\ 'mode_map': {
\ 'n' : 'norm',
\ 'i' : 'ins',
@@ -215,7 +219,7 @@ let g:lightline = {
\ 'right': [ ]
\ },
\ }
-source $HOME/.config/nvim/mountaineer-lightline.vim
+source $HOME/.config/nvim/bliss-lightline.vim
hi! SignColumn guibg=NONE ctermbg=NONE
" vimtex config
diff --git a/.config/picom.conf b/.config/picom.conf
index 73aa2fc..c0a831e 100644
--- a/.config/picom.conf
+++ b/.config/picom.conf
@@ -27,8 +27,7 @@ shadow-offset-x = -48;
shadow-exclude = [
"!I3_FLOATING_WINDOW@:c && _NET_WM_WINDOW_TYPE@:32a *= '_NET_WM_WINDOW_TYPE_NORMAL'",
- "class_g = 'firefox' && !I3_FLOATING_WINDOW@:c",
- "class_g = 'conky'"
+ "class_g = 'firefox' && !I3_FLOATING_WINDOW@:c"
]
wintypes: {
diff --git a/.config/polybar/config b/.config/polybar/config
index b7941e8..84a2bb3 100644
--- a/.config/polybar/config
+++ b/.config/polybar/config
@@ -98,9 +98,9 @@ pseudo-transparency = false
[color]
-bg = #050505
-fg = #f0f0f0
-fg-alt = #050505
+bg = #121213
+fg = #fdf9f7
+fg-alt = #121213
alpha = #00000000
diff --git a/.config/polybar/onstart.sh b/.config/polybar/onstart.sh
deleted file mode 100644
index 033cec0..0000000
--- a/.config/polybar/onstart.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-# Tray below bar :(
-sleep 1
-xdo raise -n Polybar -n tray
diff --git a/.config/polybar/player-mpris-simple.sh b/.config/polybar/player-mpris-simple.sh
deleted file mode 100755
index 938ac21..0000000
--- a/.config/polybar/player-mpris-simple.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-player_status=$(playerctl status 2> /dev/null)
-
-if [ "$player_status" = "Playing" ] || [ "$player_status" = "Paused" ]; then
- echo "$(playerctl metadata artist) - $(playerctl metadata title)" | awk -v len=60 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }'
-else
- echo ""
-fi
diff --git a/.config/rofi/pywal.rasi b/.config/rofi/pywal.rasi
index e73f155..9ebbb47 100644
--- a/.config/rofi/pywal.rasi
+++ b/.config/rofi/pywal.rasi
@@ -1,6 +1,6 @@
* {
- background-color: #050505;
- text-color: #f0f0f0;
+ background-color: #121213;
+ text-color: #f4e0d8;
spacing: 0;
width: 720px;
}
@@ -15,8 +15,6 @@ prompt {
}
textbox {
- background-color: #050505;
- border-color: #050505;
padding: 8px 16px;
}
@@ -35,6 +33,6 @@ element {
}
element selected {
- background-color: #ac8a8c;
- text-color: #050505;
+ background-color: #AF9DDE;
+ text-color: #121213;
}
diff --git a/.config/startpage/style.css b/.config/startpage/style.css
index 2cd20bb..9eefe45 100644
--- a/.config/startpage/style.css
+++ b/.config/startpage/style.css
@@ -1,20 +1,20 @@
:root {
- --color0: #050505;
- --color1: #AC8A8C;
- --color2: #8AAC8B;
- --color3: #ACA98A;
- --color4: #8F8AAC;
- --color5: #AC8AAC;
- --color6: #8AABAC;
- --color7: #e7e7e7;
- --color8: #676767;
- --color9: #AC8A8C;
- --color10: #8AAC8B;
- --color11: #ACA98A;
- --color12: #8F8AAC;
- --color13: #AC8AAC;
- --color14: #8AABAC;
- --color15: #f0f0f0;
+ --color0: #121213;
+ --color1: #DE9DAC;
+ --color2: #9DDEAF;
+ --color3: #DEDD9D;
+ --color4: #9DACDE;
+ --color5: #AF9DDE;
+ --color6: #9DCCDE;
+ --color7: #f4e0d8;
+ --color8: #393b3b;
+ --color9: #F7AFC0;
+ --color10: #AFF7C3;
+ --color11: #F7F6AF;
+ --color12: #AFC0F7;
+ --color13: #C3AFF7;
+ --color14: #AFE3F7;
+ --color15: #f9ece8;
}
html, body {
diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs
index f7c6dec..df754e6 100644
--- a/.config/user-dirs.dirs
+++ b/.config/user-dirs.dirs
@@ -7,7 +7,7 @@
#
XDG_DOWNLOAD_DIR="$HOME/dl"
XDG_DOCUMENTS_DIR="$HOME/docs"
-XDG_MUSIC_DIR="$HOME/music"
+XDG_MUSIC_DIR="$HOME/"
XDG_DESKTOP_DIR="$HOME/"
XDG_TEMPLATES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
diff --git a/.config/xb.rc b/.config/xbindkeys/main
index 3a60d41..c5a6c79 100644
--- a/.config/xb.rc
+++ b/.config/xbindkeys/main
@@ -8,8 +8,6 @@
Mod4 + Return
"bwmenu"
Mod4 + p
-"flost fzmp -A"
- Mod4 + a
"maim -sb 4 -c 255,255,255 | xclip -selection clipboard -t image/png"
Print
diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc
index fdd2203..36da877 100644
--- a/.config/zathura/zathurarc
+++ b/.config/zathura/zathurarc
@@ -8,8 +8,29 @@ set selection-clipboard clipboard
map <C-i> recolor
set recolor "true"
-set default-bg rgb(5,5,5)
-set recolor-lightcolor rgba(240,240,240,0)
-
set recolor-reverse-video "true"
set recolor-keephue "true"
+
+
+set default-bg "#121213"
+set statusbar-bg "#121213"
+set inputbar-bg "#121213"
+set completion-highlight-fg "#121213"
+set completion-bg "#121213"
+set notification-error-fg "#121213"
+set notification-warning-fg "#121213"
+set notification-fg "#121213"
+
+set default-fg "#f9ece8"
+set inputbar-fg "#f9ece8"
+set completion-fg "#f9ece8"
+set statusbar-fg "#f9ece8"
+set recolor-lightcolor rgba(2249,236,232,0)
+
+set notification-error-bg "#DE9DAC"
+set notification-warning-bg "#DE9DAC"
+set completion-highlight-bg "#DE9DAC"
+set highlight-color "#DE9DAC"
+
+set highlight-active-color "#C3AFF7"
+set notification-bg "#C3AFF7"