/* * 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, User } from "discord-types/general"; interface UsernameProps { author: { nick: string; }; message: Message; withMentionPrefix?: boolean; isRepliedMessage: boolean; userOverride?: User; } 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" }, ], }, displayNames: { type: OptionType.BOOLEAN, description: "Use display names in place of usernames", default: false }, 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, Devs.TheKodeToad], patches: [ { find: ".withMentionPrefix", replacement: { match: /(?<=onContextMenu:\i,children:)\i\+\i/, replace: "$self.renderUsername(arguments[0])" } }, ], settings, renderUsername: ({ author, message, isRepliedMessage, withMentionPrefix, userOverride }: UsernameProps) => { try { const user = userOverride ?? message.author; let { username } = user; if (settings.store.displayNames) username = (user as any).globalName || username; const { nick } = author; const prefix = withMentionPrefix ? "@" : ""; if (username === nick || isRepliedMessage && !settings.store.inReplies) return prefix + nick; if (settings.store.mode === "user-nick") return <>{prefix}{username} {nick}; if (settings.store.mode === "nick-user") return <>{prefix}{nick} {username}; return prefix + username; } catch { return author?.nick; } }, });