IsVoiceEnabledForUserIdAsync always returns true

Currently, as of 1/7/2026, VoiceChatService:IsVoiceEnabledForUserIdAsync() will always return true for voice-eligible users, even if they have voice chat disabled.

For whatever reason, Roblox changed how you enable voice chat. Unlike all the other communication options, the toggle is no longer available in your account settings - instead, now you have to toggle it through the in-game esc menu, which is a bit confusing.

I’m unsure if this is an A/B test, or if it’s only available to specific age groups, but this is how it currently works for me.

image

Ever since this change rolled out, it seems that calling IsVoiceEnabledForUserIdAsync on any user who is eligible for voice will always return true, even if they have voice disabled in the in-game esc menu. It will only ever return false if the user is not eligible for voice.

Another problem with this change is that, even if IsVoiceEnabledForUserIdAsync is updated to account for this new menu setting, nobody is expecting the user’s voice status to change at runtime. I would imagine most games which check voice status just check IsVoiceEnabledForUserIdAsync once and that’s it. Perhaps we should get some new event that fires if the user’s chat features are updated? Especially since you can now complete an age check in-game to gain access to chat features.


Repro

  1. Have an account which is eligible to use voice chat.

  2. Join any game, that you have edit access to, and allows voice chat.

  3. Make sure “Voice Chat” is set to Disconnected in the in-game esc menu.

  4. Open the developer console, go to the server log, and run print(game:GetService("VoiceChatService"):IsVoiceEnabledForUserIdAsync(USER_ID)) with your user ID. This should incorrectly print true, even though you have voice chat disabled.


System information

OS: Windows 10
CPU: Intel(R) Core™ i7-6700 CPU @ 3.40GHz
Memory: 16 GB
GPU: NVIDIA GeForce GTX 1660 Ti


Expected behavior

If voice chat is disabled, IsVoiceEnabledForUserIdAsync should return false.

1 Like

Hi, thanks for the report. We recently replaced the account voice chat setting with new in-experience controls to give users more flexibility on when they want to use voice chat.

We’re taking a look at IsVoiceEnabledForUserIdAsync and are figuring out how to expand its functionality and support a wider range of use cases. I’ll give you an update once the changes are merged in.

1 Like

They did remove the in runtime Unlock Chat button from TCS, so they might change this too

I guess this function would return true even if you failed to connect to the voice chat server as well, seeing as it was just based on your communication settings. Would script connections on the VCS for when players connect and disconnect to the VC server work better? There’s a few enums in VoiceChatState, presumably used internally, that might be good for state changes

Having a simple property or a method that returns an enum would be ideal, rather than another UserInputService situation where there are several methods that need to be used in a weird order to check if the player’s voice will be heard or not.

Something like Player.VoiceChatState or VCS:GetVoiceStateForPlayer() maybe

1 Like

All the voice chat stuff seemed a little detached from the Player instance, which is why I wouldn’t think they’d go with a property on the player, and getting changes to that state solely using a function like that would require you to poll it continuously