From f75f88786118640dd72b40adf587a725493aa8a0 Mon Sep 17 00:00:00 2001 From: Sofia Lima Date: Sat, 15 Apr 2023 01:58:22 +0000 Subject: [PATCH] feat(plugin): ShowMeYourName (#901) --- src/plugins/showMeYourName/index.tsx | 81 +++++++++++++++++++++++++++ src/plugins/showMeYourName/styles.css | 11 ++++ 2 files changed, 92 insertions(+) create mode 100644 src/plugins/showMeYourName/index.tsx create mode 100644 src/plugins/showMeYourName/styles.css diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx new file mode 100644 index 00000000..30958102 --- /dev/null +++ b/src/plugins/showMeYourName/index.tsx @@ -0,0 +1,81 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Sofia Lima + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +import "./styles.css"; + +import { definePluginSettings } from "@api/settings"; +import { Devs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; +import { Message } from "discord-types/general"; + +interface UsernameProps { + author: { nick: string }; + message: Message; + withMentionPrefix?: boolean; + isRepliedMessage: boolean; +} + +const settings = definePluginSettings({ + mode: { + type: OptionType.SELECT, + description: "How to display usernames and nicks", + options: [ + { label: "Username then nickname", value: "user-nick", default: true }, + { label: "Nickname then username", value: "nick-user" }, + { label: "Username only", value: "user" }, + ], + }, + inReplies: { + type: OptionType.BOOLEAN, + default: false, + description: "Also apply functionality to reply previews", + }, +}); + +export default definePlugin({ + name: "ShowMeYourName", + description: "Display usernames next to nicks, or no nicks at all", + authors: [Devs.dzshn], + patches: [ + { + find: ".withMentionPrefix", + replacement: { + match: /(?<=onContextMenu:\i,children:)\i\+\i/, + replace: "$self.renderUsername(arguments[0])" + } + }, + ], + settings, + + renderUsername: ({ author, message, isRepliedMessage, withMentionPrefix }: UsernameProps) => { + try { + const { username } = message.author; + const { nick } = author; + const prefix = withMentionPrefix ? "@" : ""; + if (username === nick || isRepliedMessage && !settings.store.inReplies) + return prefix + nick; + if (settings.store.mode === "user-nick") + return <>{prefix}{nick} {username}; + if (settings.store.mode === "nick-user") + return <>{prefix}{username} {nick}; + return prefix + username; + } catch { + return author?.nick; + } + }, +}); diff --git a/src/plugins/showMeYourName/styles.css b/src/plugins/showMeYourName/styles.css new file mode 100644 index 00000000..7a1455d9 --- /dev/null +++ b/src/plugins/showMeYourName/styles.css @@ -0,0 +1,11 @@ +.vc-smyn-suffix { + color: var(--text-muted); +} + +.vc-smyn-suffix::before { + content: "("; +} + +.vc-smyn-suffix::after { + content: ")"; +}