我正在制作一个连接到呼叫者当前所在的语音通道的不和谐机器人。我正在使用 connect() 库调用来连接机器人。 根据 Discord API 文档,connect() 必须返回一个 VoiceProtocol。然而,调用挂起并且从未真正返回任何东西。
有一个2021年的旧帖,问同样的问题,没有任何具体的解决方案。
例如:
caller = ctx.author.voice
if caller is None:
await ctx.send("You are not connected to a voice channel")
return
else:
await caller.connect(timeout=.5, reconnect=False, self_mute=False, self_deaf=True)
await ctx.send("This line never executes")
即使调用没有返回任何内容,它仍然将机器人连接到语音通道而不会引发任何异常。
我想知道以前是否有人遇到过这个问题。
编辑: is_connected() 库调用也返回 False。所以,虽然机器人确实连接到语音通道,但它认为它没有连接。
@commands.command()
async def isconnected(self, ctx):
voice = discord.utils.get(ctx.bot.voice_clients, guild=ctx.guild)
print("is_connected(): ", voice.is_connected())
_id = voice.channel.id
print("bot is connected to channel: " + str(ctx.bot.get_channel(_id)))
voice2 = discord.utils.get(self.client.voice_clients, guild=ctx.guild)
print("is_connected(): ", voice2.is_connected())
_id2 = voice2.channel.id
print("bot is connected to channel: ", str(ctx.bot.get_channel(_id2)))
@commands.command()
async def join(self, ctx):
caller = ctx.message.author.voice
if caller is None:
await ctx.send("You are not connected to a voice channel")
return
await caller.channel.connect(timeout=5, reconnect=False, self_mute=False, self_deaf=True)
print("Never executes")
我在 discord-py 2.1.0 中也遇到了这个问题。升级到最新版本为我解决了这个问题。这是我用 pip 升级时运行的命令:
pip install -U --upgrade-strategy eager discord-py
我进一步调查了为什么会发生这种情况,但无法确定根本原因。 2.1.0 和 2.2.2 中 VoiceChannel 的实现都实现了 Connectable 协议,这两个版本之间似乎没有变化。如果其他人能找出根本原因,我会洗耳恭听。