首页 > 解决方案 > 不和谐机器人独自离开语音频道

问题描述

我正在寻找让我的机器人在单独在语音通道中时断开连接的代码,即使它正在播放音乐也是如此。我尝试了不同的代码,但它们不起作用。这就是我所拥有的,但每当它检测到事件时我都会收到错误消息。(它在一个齿轮中),我想在一个名为 music(Music._leave) 的类中使用另一个名为 _leave 的命令

@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
    if before.channel and len(before.channel.members) == 1:
        voice = get(bot.voice_clients, guild=member.guild)
        if voice is None:
            return
        else:
            #use _leave command

_离开代码:

@commands.command(name='leave', aliases=['l'])
async def _leave(self, ctx: commands.Context):

    if not ctx.voice_state.voice:
        embedVar = discord.Embed(title="",
                                 description='Not connected to any voice channel.',
                                 color=0x000000)
        return await ctx.send(embed=embedVar)

    await ctx.voice_state.stop()
    del self.voice_states[ctx.guild.id]

标签: pythondiscorddiscord.py

解决方案


Guild.voice_client可以是如果机器人没有连接到语音通道,你可以用一个简单的语句None来检查它if

@client.event
async def on_voice_state_update(member, before, after):
    voice_state = member.guild.voice_client
    if voice_state is None:
        # Exiting if the bot it's not connected to a voice channel
        return 

    if len(voice_state.channel.members) == 1:
        await voice_state.disconnect()

还要确保启用intents.voice_states

参考:


推荐阅读