Fix vcDoubleClick, add support for stage channels (#158)

This commit is contained in:
Nico 2022-10-25 10:53:06 +02:00 committed by GitHub
parent 6c38362401
commit 559edbfffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 14 deletions

View File

@ -17,6 +17,7 @@
*/
import { Flex } from "../components/Flex";
import { Devs } from "../utils/constants";
import { ModalContent, ModalFooter, ModalHeader, ModalRoot, ModalSize, openModal } from "../utils/modal";
import definePlugin, { OptionType } from "../utils/types";
import { Settings } from "../Vencord";
@ -41,10 +42,7 @@ export default definePlugin({
name: "Average React Enjoyer",
id: 1004904120056029256n
},
{
name: "D3SOX",
id: 201052085641281538n
},
Devs.D3SOX,
],
options: {
hideUnreads: {

View File

@ -27,18 +27,29 @@ const timers = {} as Record<string, {
export default definePlugin({
name: "vcDoubleClick",
description: "Join VCs via DoubleClick instead of single click",
authors: [Devs.Ven],
authors: [
Devs.Ven,
Devs.D3SOX,
],
patches: [
{
find: "VoiceChannel.renderPopout",
replacement: {
match: /onClick:function\(\)\{(e\.handleClick.+?)}/g,
// hack: this is not a react onClick, it is a custom prop handled by Discord
// thus, replacin this with onDoubleClick won't work and you also cannot check
// e.detail since instead of the event they pass the channel.
// do this timer workaround instead
replace: "onClick:function(){Vencord.Plugins.plugins.vcDoubleClick.schedule(()=>{$1}, e)}",
},
// hack: these are not React onClick, it is a custom prop handled by Discord
// thus, replacing this with onDoubleClick won't work, and you also cannot check
// e.detail since instead of the event they pass the channel.
// do this timer workaround instead
replacement: [
// voice channels
{
match: /onClick:(.*)function\(\)\{(e\.handleClick.+?)}/g,
replace: "onClick:$1function(){Vencord.Plugins.plugins.vcDoubleClick.schedule(()=>{$2}, e)}",
},
// stage channels
{
match: /onClick:(\w+)\?void 0:this\.handleClick,/g,
replace: "onClick:$1?void 0:(...args)=>Vencord.Plugins.plugins.vcDoubleClick.schedule(()=>{this.handleClick(...args);}, args[0]),",
}
],
},
{
find: 'className:"channelMention",iconType:(',
@ -50,7 +61,8 @@ export default definePlugin({
],
schedule(cb: () => void, e: any) {
const id = e.props.channel.id as string;
// support from stage and voice channels patch
const id = e?.id ?? e.props.channel.id as string;
// use a different counter for each channel
const data = (timers[id] ??= { timeout: void 0, i: 0 });
// clear any existing timer

View File

@ -84,5 +84,9 @@ export const Devs = Object.freeze({
Nuckyz: {
name: "Nuckyz",
id: 235834946571337729n
},
D3SOX: {
name: "D3SOX",
id: 201052085641281538n
}
});