Discord.py(重写)如何检查机器人是否已在您要求其加入的频道中?



我在让我的机器人检查它是否已经在被要求加入的频道中时遇到了一点麻烦。

举个例子,这是一段代码:

async def _sound(self, ctx:commands.Context):
voice_channel = None
if ctx.author.voice != None:
voice_channel = ctx.author.voice.channel
if voice_channel != None:
vc = await voice_channel.connect()
vc.play(discord.FFmpegPCMAudio('sound.mp3'))
await asyncio.sleep(5)
await vc.disconnect()

我面临的问题是,如果我在机器人仍在语音通道中使用命令>sound,我会收到一条错误消息,指出机器人已经在通道中。我尝试比较客户端通道和用户通道,如果它们相同,则断开连接,然后重新连接以避免错误,但我无法正确处理。这是我尝试过但没有奏效的:

voice_client = ctx.voice_client
if voice_client.channel.id == voice_channel.id:
await voice_channel.disconnect
vc = await voice_channel.connect()
vc.play(discord.FFmpegPCMAudio('sound.mp3'))
asyncio.sleep(4)
await vc.disconnect()

你可以通过ctx.voice_client获取该公会中机器人的VoiceClient(如果有的话(。 然后,您可以在通道之间移动该客户端(如果它已经存在,则不会执行任何操作(,或者如果它不存在,则通过voice_channel.connect创建新客户端:

@commands.command()
async def _sound(self, ctx):
if ctx.author.voice is None or ctx.author.voice.channel is None:
return
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
vc = await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
vc = ctx.voice_client
vc.play(discord.FFmpegPCMAudio('sound.mp3'))
await asyncio.sleep(5)
await vc.disconnect()

最新更新