diff --git a/src/plugins/fullSearchContext/README.md b/src/plugins/fullSearchContext/README.md new file mode 100644 index 000000000..4bc5feb5a --- /dev/null +++ b/src/plugins/fullSearchContext/README.md @@ -0,0 +1,5 @@ +# FullSearchContext + +Makes the message context menu in message search results have all options you'd expect. + +![](https://github.com/user-attachments/assets/472d1327-3935-44c7-b7c4-0978b5348550) diff --git a/src/plugins/fullSearchContext/index.tsx b/src/plugins/fullSearchContext/index.tsx new file mode 100644 index 000000000..8679c22b9 --- /dev/null +++ b/src/plugins/fullSearchContext/index.tsx @@ -0,0 +1,85 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * 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 { migratePluginSettings } from "@api/Settings"; +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import type { ChannelRecord, MessageRecord } from "@vencord/discord-types"; +import { findByPropsLazy } from "@webpack"; +import { ChannelStore, ContextMenuApi, i18n, UserStore } from "@webpack/common"; +import type { MouseEvent } from "react"; + +const { useMessageMenu } = findByPropsLazy("useMessageMenu"); + +function MessageMenu({ message, channel, onHeightUpdate }: { + message: MessageRecord; + channel: ChannelRecord; + onHeightUpdate: any; +}) { + const canReport = message.author.id !== UserStore.getCurrentUser()!.id && !message.author.system; + + return useMessageMenu({ + navId: "message-actions", + ariaLabel: i18n.Messages.MESSAGE_UTILITIES_A11Y_LABEL, + + message, + channel, + canReport, + onHeightUpdate, + onClose: () => { ContextMenuApi.closeContextMenu(); }, + + textSelection: "", + favoriteableType: null, + favoriteableId: null, + favoriteableName: null, + itemHref: undefined, + itemSrc: undefined, + itemSafeSrc: undefined, + itemTextContent: undefined, + }); +} + +migratePluginSettings("FullSearchContext", "SearchReply"); +export default definePlugin({ + name: "FullSearchContext", + description: "Makes the message context menu in message search results have all options you'd expect", + authors: [Devs.Ven, Devs.Aria], + + patches: [{ + find: "onClick:this.handleMessageClick,", + replacement: { + match: /this(?=\.handleContextMenu\(\i,\i\))/, + replace: "$self" + } + }], + + handleContextMenu(event: MouseEvent, message: MessageRecord) { + const channel = ChannelStore.getChannel(message.channel_id); + if (!channel) return; + + event.stopPropagation(); + + ContextMenuApi.openContextMenu(event, contextMenuProps => ( + + )); + } +}); diff --git a/src/plugins/searchReply/README.md b/src/plugins/searchReply/README.md deleted file mode 100644 index b06798f74..000000000 --- a/src/plugins/searchReply/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# SearchReply - -Adds a reply button to search results. - -![the plugin in action](https://github.com/Vendicated/Vencord/assets/45497981/07e741d3-0f97-4e5c-82b0-80712ecf2cbb) - diff --git a/src/plugins/searchReply/index.tsx b/src/plugins/searchReply/index.tsx deleted file mode 100644 index e75cff09f..000000000 --- a/src/plugins/searchReply/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * 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 { findGroupChildrenByChildId, type NavContextMenuPatchCallback } from "@api/ContextMenu"; -import { ReplyIcon } from "@components/Icons"; -import { Devs } from "@utils/constants"; -import definePlugin from "@utils/types"; -import type { MessageRecord } from "@vencord/discord-types"; -import { findByCodeLazy } from "@webpack"; -import { ChannelStore, i18n, Menu, Permissions, PermissionStore, SelectedChannelStore } from "@webpack/common"; - -const replyToMessage = findByCodeLazy(".TEXTAREA_FOCUS)", "showMentionToggle:"); - -const messageContextMenuPatch = ((children, { message }: { message: MessageRecord; }) => { - // make sure the message is in the selected channel - if (SelectedChannelStore.getChannelId() !== message.channel_id) return; - const channel = ChannelStore.getChannel(message.channel_id); - if (!channel) return; - if (!channel.isPrivate() && !PermissionStore.can(Permissions.SEND_MESSAGES, channel)) return; - - // dms and group chats - const dmGroup = findGroupChildrenByChildId("pin", children); - if (dmGroup && !dmGroup.some(child => child?.props?.id === "reply")) { - const pinIndex = dmGroup.findIndex(c => c?.props.id === "pin"); - dmGroup.splice(pinIndex + 1, 0, ( - { replyToMessage(channel, message, e); }} - /> - )); - return; - } - - // servers - const serverGroup = findGroupChildrenByChildId("mark-unread", children); - if (serverGroup && !serverGroup.some(child => child?.props?.id === "reply")) { - serverGroup.unshift(( - { replyToMessage(channel, message, e); }} - /> - )); - return; - } -}) satisfies NavContextMenuPatchCallback; - - -export default definePlugin({ - name: "SearchReply", - description: "Adds a reply button to search results", - authors: [Devs.Aria], - contextMenus: { - "message": messageContextMenuPatch - } -}); diff --git a/src/plugins/userVoiceShow/components.tsx b/src/plugins/userVoiceShow/components.tsx index 0f9d4e9e0..db75a8384 100644 --- a/src/plugins/userVoiceShow/components.tsx +++ b/src/plugins/userVoiceShow/components.tsx @@ -105,7 +105,7 @@ function VoiceChannelTooltip({ channel }: VoiceChannelTooltipProps) { @@ -170,6 +170,7 @@ export const VoiceChannelIndicator = ErrorBoundary.wrap(({ userId }: VoiceChanne } tooltipClassName={cl("tooltip-container")} + tooltipContentClassName={cl("tooltip-content")} > {props => isLocked ? diff --git a/src/plugins/userVoiceShow/index.tsx b/src/plugins/userVoiceShow/index.tsx index 1559259f5..0c4fe6d10 100644 --- a/src/plugins/userVoiceShow/index.tsx +++ b/src/plugins/userVoiceShow/index.tsx @@ -32,7 +32,7 @@ const settings = definePluginSettings({ default: true, restartNeeded: true }, - showInVoiceMemberList: { + showInMemberList: { type: OptionType.BOOLEAN, description: "Show a user's Voice Channel indicator in the member and DMs list", default: true, @@ -82,12 +82,12 @@ export default definePlugin({ match: /\.subtext,children:.+?}\)\]}\)(?=])/, replace: "$&,$self.VoiceChannelIndicator({userId:arguments[0]?.user?.id})" }, - predicate: () => settings.store.showInVoiceMemberList + predicate: () => settings.store.showInMemberList } ], start() { - if (settings.store.showInVoiceMemberList) { + if (settings.store.showInMemberList) { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition addDecorator("UserVoiceShow", ({ user }) => user == null ? null : ); } diff --git a/src/plugins/userVoiceShow/style.css b/src/plugins/userVoiceShow/style.css index b4cc00631..3e36df217 100644 --- a/src/plugins/userVoiceShow/style.css +++ b/src/plugins/userVoiceShow/style.css @@ -15,7 +15,13 @@ } .vc-uvs-tooltip-container { - max-width: 200px; + max-width: 300px; +} + +.vc-uvs-tooltip-content { + display: flex; + flex-direction: column; + gap: 6px; } .vc-uvs-guild-name { @@ -31,7 +37,5 @@ .vc-uvs-vc-members { display: flex; - margin: 8px 0; - flex-direction: row; gap: 6px; }