aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/showMeYourName/index.tsx81
-rw-r--r--src/plugins/showMeYourName/styles.css11
2 files changed, 92 insertions, 0 deletions
diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx
new file mode 100644
index 0000000..3095810
--- /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 <https://www.gnu.org/licenses/>.
+*/
+
+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} <span className="vc-smyn-suffix">{username}</span></>;
+ if (settings.store.mode === "nick-user")
+ return <>{prefix}{username} <span className="vc-smyn-suffix">{nick}</span></>;
+ 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 0000000..7a1455d
--- /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: ")";
+}