Merge branch 'dev' into stickercopy

This commit is contained in:
byeoon 2025-01-31 15:20:42 -05:00 committed by GitHub
commit ddb504a28d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 52 additions and 21 deletions

View file

@ -37,13 +37,9 @@ export default definePlugin({
{ {
find: ".handleSendMessage,onResize", find: ".handleSendMessage,onResize",
replacement: { replacement: {
// FIXME: Simplify this change once all branches share the same code // https://regex101.com/r/hBlXpl/1
// props.chatInputType...then((function(isMessageValid)... var parsedMessage = b.c.parse(channel,... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply); match: /let (\i)=\i\.\i\.parse\((\i),.+?let (\i)=\i\.\i\.getSendMessageOptions\(\{.+?\}\);(?<=\)\(({.+?})\)\.then.+?)/,
// Lookbehind: validateMessage)({openWarningPopout:..., type: i.props.chatInputType, content: t, stickers: r, ...}).then((function(isMessageValid) replace: (m, parsedMessage, channel, replyOptions, extra) => m +
match: /(\{openWarningPopout:.{0,100}type:this.props.chatInputType.+?\.then\((?:async )?)(\i=>\{.+?let (\i)=\i\.\i\.parse\((\i),.+?let (\i)=\i\.\i\.getSendMessageOptions\(\{.+?\}\);)(?<=\)\(({.+?})\)\.then.+?)/,
// props.chatInputType...then((async function(isMessageValid)... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply); if(await Vencord.api...) return { shoudClear:true, shouldRefocus:true };
replace: (_, rest1, rest2, parsedMessage, channel, replyOptions, extra) => "" +
`${rest1}${rest1.includes("async") ? "" : "async "}${rest2}` +
`if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${extra},${replyOptions}))` + `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${extra},${replyOptions}))` +
"return{shouldClear:false,shouldRefocus:true};" "return{shouldClear:false,shouldRefocus:true};"
} }
@ -53,8 +49,7 @@ export default definePlugin({
replacement: { replacement: {
match: /let\{id:\i}=(\i),{id:\i}=(\i);return \i\.useCallback\((\i)=>\{/, match: /let\{id:\i}=(\i),{id:\i}=(\i);return \i\.useCallback\((\i)=>\{/,
replace: (m, message, channel, event) => replace: (m, message, channel, event) =>
// the message param is shadowed by the event param, so need to alias them `const vcMsg=${message},vcChan=${channel};${m}Vencord.Api.MessageEvents._handleClick(vcMsg,vcChan,${event});`
`const vcMsg=${message},vcChan=${channel};${m}Vencord.Api.MessageEvents._handleClick(vcMsg, vcChan, ${event});`
} }
} }
] ]

View file

@ -8,6 +8,7 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import definePlugin from "@utils/types"; import definePlugin from "@utils/types";
import { findComponentByCodeLazy } from "@webpack"; import { findComponentByCodeLazy } from "@webpack";
import { UserStore, useStateFromStores } from "@webpack/common";
import { ReactNode } from "react"; import { ReactNode } from "react";
const UserMentionComponent = findComponentByCodeLazy(".USER_MENTION)"); const UserMentionComponent = findComponentByCodeLazy(".USER_MENTION)");
@ -34,14 +35,19 @@ export default definePlugin({
} }
], ],
UserMentionComponent: ErrorBoundary.wrap((props: UserMentionComponentProps) => ( UserMentionComponent: ErrorBoundary.wrap((props: UserMentionComponentProps) => {
<UserMentionComponent const user = useStateFromStores([UserStore], () => UserStore.getUser(props.id));
if (user == null) {
return props.originalComponent();
}
return <UserMentionComponent
// This seems to be constant // This seems to be constant
className="mention" className="mention"
userId={props.id} userId={props.id}
channelId={props.channelId} channelId={props.channelId}
/> />;
), { }, {
fallback: ({ wrappedProps: { originalComponent } }) => originalComponent() fallback: ({ wrappedProps: { originalComponent } }) => originalComponent()
}) })
}); });

View file

@ -50,9 +50,9 @@ export default definePlugin({
{ {
find: "#{intl::FRIENDS_SECTION_ONLINE}", find: "#{intl::FRIENDS_SECTION_ONLINE}",
replacement: { replacement: {
match: /(\(0,\i\.jsx\)\(\i\.\i\.Item,\{id:\i\.\i)\.BLOCKED,className:([^\s]+?)\.item,children:\i\.\i\.string\(\i\.\i#{intl::BLOCKED}\)\}\)/, match: /,{id:(\i\.\i)\.BLOCKED,show:.+?className:(\i\.item)/,
replace: "$1.IMPLICIT,className:$2.item,children:\"Implicit\"}),$&" replace: (rest, relationShipTypes, className) => `,{id:${relationShipTypes}.IMPLICIT,show:true,className:${className},content:"Implicit"}${rest}`
}, }
}, },
// Sections content // Sections content
{ {

View file

@ -41,13 +41,25 @@ const settings = definePluginSettings({
restartNeeded: true, restartNeeded: true,
type: OptionType.BOOLEAN, type: OptionType.BOOLEAN,
default: true default: true
},
applyColorOnlyToUsersWithoutColor: {
description: "Apply colors only to users who don't have a predefined color",
restartNeeded: false,
type: OptionType.BOOLEAN,
default: false
},
applyColorOnlyInDms: {
description: "Apply colors only in direct messages; do not apply colors in servers.",
restartNeeded: false,
type: OptionType.BOOLEAN,
default: false
} }
}); });
export default definePlugin({ export default definePlugin({
name: "IrcColors", name: "IrcColors",
description: "Makes username colors in chat unique, like in IRC clients", description: "Makes username colors in chat unique, like in IRC clients",
authors: [Devs.Grzesiek11], authors: [Devs.Grzesiek11, Devs.jamesbt365],
settings, settings,
patches: [ patches: [
@ -70,10 +82,28 @@ export default definePlugin({
calculateNameColorForMessageContext(context: any) { calculateNameColorForMessageContext(context: any) {
const id = context?.message?.author?.id; const id = context?.message?.author?.id;
return calculateNameColorForUser(id); const colorString = context?.author?.colorString;
const color = calculateNameColorForUser(id);
if (settings.store.applyColorOnlyInDms && !context?.channel?.isPrivate()) {
return colorString;
}
return (!settings.store.applyColorOnlyToUsersWithoutColor || !colorString)
? color
: colorString;
}, },
calculateNameColorForListContext(context: any) { calculateNameColorForListContext(context: any) {
const id = context?.user?.id; const id = context?.user?.id;
return calculateNameColorForUser(id); const colorString = context?.colorString;
const color = calculateNameColorForUser(id);
if (settings.store.applyColorOnlyInDms && !context?.channel?.isPrivate()) {
return colorString;
}
return (!settings.store.applyColorOnlyToUsersWithoutColor || !colorString)
? color
: colorString;
} }
}); });

View file

@ -25,9 +25,9 @@ export default definePlugin({
settings, settings,
patches: [ patches: [
{ {
find: "_ensureAudio(){", find: "ensureAudio(){",
replacement: { replacement: {
match: /(?=Math\.min\(\i\.\i\.getOutputVolume\(\)\/100)/, match: /(?=Math\.min\(\i\.\i\.getOutputVolume\(\)\/100)/g,
replace: "$self.settings.store.notificationVolume/100*" replace: "$self.settings.store.notificationVolume/100*"
}, },
}, },