-
-
Notifications
You must be signed in to change notification settings - Fork 477
Open
Labels
bugSomething isn't workingSomething isn't workingon holdpriority: mediumMedium PriorityMedium Priority
Milestone
Description
Summary
Bot hangs when trying to connect to restricted VC
Reproduction Steps
- Create a VC
- Forbid the bot to connect to it
- Run the
connect
command
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
- I have searched the open issues for duplicates.I have shown the entire traceback, if possible.I have removed my token from display, if visible.To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.
Additional Context
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingon holdpriority: mediumMedium PriorityMedium Priority
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
NeloBlivion commentedon Jun 18, 2023
Narrowed down issue to
Guild.change_voice_state
not raising any errors. Currently the default timeout forconnect
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.NeloBlivion commentedon Jun 18, 2023
I'm not knowledgable enough with voice to investigate further, but essentially:
VoiceChannel.connect
-> Creates aVoiceClient
, stores it and runsVoiceClient.connect
prepare_handshake
which logs"Starting voice handshake..."
as DEBUGVoiceClient.voice_connect
toGuild.change_voice_state
which gets the guild's websocket to connect withDiscordWebSocket.voice_state
which 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_handshake
in 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.
Lulalaby commentedon Jun 18, 2023
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.