Discord机器人进入语音频道后程序阻塞问题求助
Discord机器人进入语音频道后程序阻塞问题求助
嘿,我看到你遇到了Discord机器人进语音频道后程序卡住的麻烦,咱们一起来琢磨下解决办法~
你提到机器人能成功进入语音频道,但代码执行到await ctx.author.voice.channel.connect()就停住了,后面发送消息、删除消息的逻辑完全没跑起来;而且在频道的Debug面板里看不到机器人的 incoming data,虽然肉眼能看到它在频道里。你已经尝试重装PyNaCl和discord.py[voice],但问题还是没解决。
先把你的代码贴出来方便参考:
@commands.command() async def join(self, ctx): if ctx.author.voice is None: return await ctx.send("You are not connected to a VC!") await ctx.author.voice.channel.connect() #it stops here msgg = await ctx.send('Connected!') await asyncio.sleep(5) await msgg.delete()
给你几个排查方向,你可以挨个试试:
- 先确认discord.py的版本是不是最新稳定版,旧版本的语音模块偶尔会有这类阻塞问题。执行
pip install --upgrade discord.py[voice]升级,注意看安装过程有没有报错,确保PyNaCl也被正确安装。 - 检查机器人的权限配置!除了「连接语音频道」权限,还要确保它拥有「发言」权限,有时候权限不足会导致连接后底层初始化卡住,表面上看进了频道,但实际没完成连接流程。
- 给
connect()方法加个超时参数试试,比如await ctx.author.voice.channel.connect(timeout=30.0),设置一个超时时间,如果真的是连接过程卡住,会抛出超时异常,帮你定位问题。 - 排查代码里有没有同步阻塞操作!比如如果代码里用了
time.sleep()而不是asyncio.sleep(),会直接卡住整个异步事件循环,导致后续的异步任务没法执行。 - 开启调试日志看看细节,添加这段代码在机器人启动前,能输出更详细的连接过程日志,说不定能找到卡住的原因:
import logging logging.basicConfig(level=logging.DEBUG)
备注:内容来源于stack exchange,提问作者Sphe
相关产品推荐
相关产品推荐

