Restricted VC causes the bot to hang
Summary
Bot hangs when trying to connect to restricted VC
Reproduction Steps
- Create a VC
- Forbid the bot to connect to it
- Run the
connectcommand
Minimal Reproducible Code
import os
import discord
intents = discord.Intents.default()
intents.voice_states = True
bot = discord.Bot(intents=intents)
@bot.command()
async def connect(ctx):
await ctx.author.voice.channel.connect()
await ctx.respond("Connected")
bot.run(os.getenv("BOT_TOKEN"))
Expected Results
I'd expect a permission error raised
Actual Results
The execution hangs
Intents
default() + voice_states
System Information
- Python v3.11.2-final
- py-cord v2.4.1-final
- aiohttp v3.8.4
- system info:
Linux 4.14.232-QuicksilveR™-ReloadedOS-Edition #1 SMP PREEMPT Wed May 26 07:08:17 UTC 2021
Checklist
- [X] I have searched the open issues for duplicates.
- [X] I have shown the entire traceback, if possible.
- [X] I have removed my token from display, if visible.
Additional Context
No response
Narrowed down issue to Guild.change_voice_state not raising any errors. Currently the default timeout for connect is 60 seconds; as a temporary fix, if you change this to something lower (e.g. 5 seconds) it will raise a TimeoutError which you can handle.
I'm not knowledgable enough with voice to investigate further, but essentially:
VoiceChannel.connect-> Creates aVoiceClient, stores it and runsVoiceClient.connect- This runs
prepare_handshakewhich logs"Starting voice handshake..."as DEBUG - We chain through
VoiceClient.voice_connecttoGuild.change_voice_statewhich gets the guild's websocket to connect with - This finally leads to
DiscordWebSocket.voice_statewhich attempts to send the payload and should DEBUG log"Updating our voice state...", however this never happens; the last DEBUG that comes through is fromprepare_handshakein step 2.
I noticed that there's never an exception listed in the docs for lack of permissions when using connect, so maybe this is intentional behavior from Discord? If so, perhaps we should implement a library side error to be more helpful. But again, I know very little about voice and how it is meant to operate; someone with more experience may look into this further.
Temporary taking this over.
Gonna check up with the gateway implementation on discords side, ask the gw team if needed, and follow up here again with findings.
I'm not sure that this is intentional.