From 4e32d164ab94981ecb0f36fd4ab4013e93c4e42e Mon Sep 17 00:00:00 2001
From: freya02 <41875020+freya022@users.noreply.github.com>
Date: Thu, 14 Nov 2024 15:52:48 +0100
Subject: [PATCH] Prevent firing voice state update events if member is not
 cached

---
 .../dv8tion/jda/internal/handle/VoiceStateUpdateHandler.java  | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/main/java/net/dv8tion/jda/internal/handle/VoiceStateUpdateHandler.java b/src/main/java/net/dv8tion/jda/internal/handle/VoiceStateUpdateHandler.java
index a5b114bc0a..b3bf1e2258 100644
--- a/src/main/java/net/dv8tion/jda/internal/handle/VoiceStateUpdateHandler.java
+++ b/src/main/java/net/dv8tion/jda/internal/handle/VoiceStateUpdateHandler.java
@@ -103,7 +103,9 @@ private void handleGuildVoiceState(DataObject content)
 
         DataObject memberJson = content.getObject("member");
         MemberImpl member = getJDA().getEntityBuilder().createMember((GuildImpl) guild, memberJson);
-        if (member == null) return;
+        // Only fire the events below if the member is cached
+        // If the member isn't cached, we would be firing every event that doesn't correspond to the default voice state
+        if (guild.getMemberById(member.getIdLong()) == null) return;
 
         GuildVoiceStateImpl vState = (GuildVoiceStateImpl) member.getVoiceState();
         if (vState == null)