diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 37703bd4..7011b06b 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -10,7 +10,7 @@ import { definePluginSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { RelationshipStore } from "@webpack/common"; +import { GuildMemberStore, RelationshipStore } from "@webpack/common"; import { Message, User } from "discord-types/general"; interface UsernameProps { @@ -19,6 +19,7 @@ interface UsernameProps { withMentionPrefix?: boolean; isRepliedMessage: boolean; userOverride?: User; + guildId: string; } const settings = definePluginSettings({ @@ -28,6 +29,7 @@ const settings = definePluginSettings({ options: [ { label: "Username then nickname", value: "user-nick", default: true }, { label: "Nickname then username", value: "nick-user" }, + { label: "Nickname only", value: "nick" }, { label: "Username only", value: "user" }, ], }, @@ -66,9 +68,12 @@ const settings = definePluginSettings({ }, }); -function getUsername(user: any): string { +function getUsername(user: any, guildId: string): string { const friendName = RelationshipStore.getNickname(user.id); + const guildNick = GuildMemberStore.getNick(guildId, user.id); + if (settings.store.preferFriend && friendName) return friendName; + if (settings.store.mode === "nick" && guildNick) return guildNick; if (settings.store.displayNames) return user.globalName || user.username; return user.username; } @@ -82,16 +87,16 @@ export default definePlugin({ find: '"BaseUsername"', replacement: { /* TODO: remove \i+\i once change makes it to stable */ - match: /(?<=onContextMenu:\i,children:)(?:\i\+\i|\i)/, - replace: "$self.renderUsername(arguments[0])" + match: /(?<=onContextMenu:\i,children:)(?:\i\+\i|\i)(?=.*?contextGuildId:(\i))/, + replace: "$self.renderUsername({ ...arguments[0], guildId: $1 })", } }, { find: "._areActivitiesExperimentallyHidden=(", predicate: () => settings.store.memberList, replacement: { - match: /(?<=user:(\i),currentUser:\i,nick:)\i/, - replace: "$self.getUsername($1)" + match: /(?<=user:(\i),currentUser:\i,nick:)\i(?=.*?guildId:(\i))/, + replace: "$self.getUsername($1,$2)" }, }, { @@ -99,8 +104,8 @@ export default definePlugin({ predicate: () => settings.store.voiceChannelList, replacement: [ { - match: /(?<=children:\[)null!=\i\?\i:\i\.\i\.getName\((\i)\)/, - replace: "$self.getUsername($1)" + match: /(?<=children:\[)null!=\i\?\i:\i\.\i\.getName\((\i)\)(?=.*?contextGuildId:(\i))/, + replace: "$self.getUsername($1,$2)" }, ] }, @@ -109,18 +114,18 @@ export default definePlugin({ predicate: () => settings.store.emojiReactions, replacement: [ { - match: /\i\.\i\.getName\(\i,null==.{0,15},(\i)\)/g, - replace: "$self.getUsername($1)" + match: /\i\.\i\.getName\((\i),null==.{0,15},(\i)\)/g, + replace: "$self.getUsername($2,$1)" }, ] }, ], settings, getUsername, - renderUsername: ErrorBoundary.wrap(({ author, message, isRepliedMessage, withMentionPrefix, userOverride }: UsernameProps) => { + renderUsername: ErrorBoundary.wrap(({ author, message, isRepliedMessage, withMentionPrefix, userOverride, guildId }: UsernameProps) => { try { const user = userOverride ?? message.author; - const username = getUsername(user); + const username = getUsername(user, guildId); const { nick } = author; const prefix = withMentionPrefix ? "@" : "";