From 0ad2557275eccd7ecac4179c1bcb8e90a98e2aed Mon Sep 17 00:00:00 2001 From: OTKUSteyler Date: Tue, 7 Apr 2026 00:29:44 +0200 Subject: [PATCH] Update index.ts --- src/core/plugins/maxverstappen/index.ts | 54 ++++++++++++++++--------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/core/plugins/maxverstappen/index.ts b/src/core/plugins/maxverstappen/index.ts index b2a1462..6940b3e 100644 --- a/src/core/plugins/maxverstappen/index.ts +++ b/src/core/plugins/maxverstappen/index.ts @@ -2,23 +2,26 @@ import { defineCorePlugin } from ".."; import { findByProps } from "@metro"; import { logger } from "@lib/utils/logger"; -// Get DCDSoundManager the same way as enhancements plugin const { ReactNative } = window as any; const { DCDSoundManager } = ReactNative?.NativeModules || {}; const AUDIO_URL = "https://github.com/OTKUSteyler/GoonCord/raw/refs/heads/main/src/core/plugins/maxverstappen/Max%20Verstappen.mp3"; -const SOUND_ID = 6972; // different id from enhancements (6971) -const TRIGGER_CHANCE = 0.33; +const SOUND_ID = 6972; +const TRIGGER_CHANCE = 0.33; const MAX_PATTERN = /\bmax\s*verstappen\b/i; let isPlaying = false; let timeoutId: NodeJS.Timeout | null = null; +let onMessageCreate: ((e: any) => void) | null = null; +let onMessageSend: ((e: any) => void) | null = null; + function shouldTrigger(): boolean { return Math.random() < TRIGGER_CHANCE; } function checkText(text: string): boolean { + if (!text) return false; return MAX_PATTERN.test(text) && shouldTrigger(); } @@ -28,14 +31,12 @@ async function playAudio() { return; } - // Stop if already playing if (isPlaying) { if (timeoutId) clearTimeout(timeoutId); DCDSoundManager.stop(SOUND_ID); isPlaying = false; } - // Prepare then play DCDSoundManager.prepare(AUDIO_URL, "music", SOUND_ID, async (error: any, sound: any) => { if (error) { logger.error("[MaxVerstappen] Failed to prepare sound:", error); @@ -84,21 +85,33 @@ export default defineCorePlugin({ return; } - FluxDispatcher.subscribe("MESSAGE_CREATE", ({ message }: any) => { - if (!message?.content) return; - if (checkText(message.content)) { - logger.log("[MaxVerstappen] Triggered!"); - playAudio(); + + onMessageCreate = ({ message }: any) => { + try { + if (!message?.content) return; + if (checkText(message.content)) { + logger.log("[MaxVerstappen] Triggered on received message!"); + playAudio(); + } + } catch (e) { + logger.error("[MaxVerstappen] Error in MESSAGE_CREATE handler:", e); } - }); + }; - FluxDispatcher.subscribe("MESSAGE_SEND", ({ message }: any) => { - if (!message?.content) return; - if (checkText(message.content)) { - logger.log("[MaxVerstappen] Triggered on sent message!"); - playAudio(); + onMessageSend = ({ message }: any) => { + try { + if (!message?.content) return; + if (checkText(message.content)) { + logger.log("[MaxVerstappen] Triggered on sent message!"); + playAudio(); + } + } catch (e) { + logger.error("[MaxVerstappen] Error in MESSAGE_SEND handler:", e); } - }); + }; + + FluxDispatcher.subscribe("MESSAGE_CREATE", onMessageCreate); + FluxDispatcher.subscribe("MESSAGE_SEND", onMessageSend); logger.log("[MaxVerstappen] Enabled"); }, @@ -116,10 +129,13 @@ export default defineCorePlugin({ const FluxDispatcher = findByProps("dispatch", "subscribe"); if (FluxDispatcher) { - FluxDispatcher.unsubscribe("MESSAGE_CREATE"); - FluxDispatcher.unsubscribe("MESSAGE_SEND"); + if (onMessageCreate) FluxDispatcher.unsubscribe("MESSAGE_CREATE", onMessageCreate); + if (onMessageSend) FluxDispatcher.unsubscribe("MESSAGE_SEND", onMessageSend); } + onMessageCreate = null; + onMessageSend = null; + logger.log("[MaxVerstappen] Disabled"); }, });