new plugin: BetterSettings ~ improves Discord's settings (#2222)

- makes opening settings much faster
- removes the scuffed transition animation
- organises the settings cog context menu into categories

Co-authored-by: Vendicated <vendicated@riseup.net>
This commit is contained in:
Kyuuhachi 2024-03-16 02:19:26 +01:00 committed by GitHub
parent f3ee43fe66
commit 6140b95814
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 199 additions and 20 deletions

View file

@ -16,11 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { findGroupChildrenByChildId } from "@api/ContextMenu";
import { Settings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { React, SettingsRouter } from "@webpack/common";
import { React } from "@webpack/common";
import gitHash from "~git-hash";
@ -30,23 +29,6 @@ export default definePlugin({
authors: [Devs.Ven, Devs.Megu],
required: true,
contextMenus: {
// The settings shortcuts in the user settings cog context menu
// read the elements from a hardcoded map which for obvious reason
// doesn't contain our sections. This patches the actions of our
// sections to manually use SettingsRouter (which only works on desktop
// but the context menu is usually not available on mobile anyway)
"user-settings-cog"(children) {
const section = findGroupChildrenByChildId("VencordSettings", children);
section?.forEach(c => {
const id = c?.props?.id;
if (id?.startsWith("Vencord") || id?.startsWith("Vesktop")) {
c!.props.action = () => SettingsRouter.open(id);
}
});
}
},
patches: [{
find: ".versionHash",
replacement: [
@ -75,6 +57,12 @@ export default definePlugin({
},
replace: "...$self.makeSettingsCategories($1),$&"
}
}, {
find: "Messages.USER_SETTINGS_ACTIONS_MENU_LABEL",
replacement: {
match: /(?<=function\((\i),\i\)\{)(?=let \i=Object.values\(\i.UserSettingsSections\).*?(\i)\.default\.open\()/,
replace: "$2.default.open($1);return;"
}
}],
customSections: [] as ((SectionTypes: Record<string, unknown>) => any)[],