当前位置: 首页 > 知识库问答 >
问题:

用户离开后,如何断开discord bot与语音通道的连接?

潘秦斩
2023-03-14

我想添加一个事件,如果用户在歌曲仍在播放时离开,我的音乐机器人会立即离开语音频道。如果频道中有多个用户,机器人当然应该留在频道中。我只有一种方法,但需要帮助。我会尝试以下操作:

async def check_member(self, ctx):
    channel = ctx.author.voice.channel
    member_count = len(voice_channel.members)
    if member_count == 1:
        await channel.disconnect

但不知怎么的,这似乎不起作用。我知道事实上,有一个类似的职位,但这并不适用于我太多,因为我定义了一些不同的事情。

我的第二次尝试是:

    async def check_member(self, ctx):
        channel = ctx.author.voice.channel
        member_count = len(channel.members)
        client = ctx.guild.voice_client
        if member_count == 1:
            await client.disconnect()

(也不起作用。)

定义不起作用:我现在以不同的方式构建函数:

    @tasks.loop(seconds=2)
    async def check(self, ctx):
        voice_channel = ctx.author.voice.channel
        member_count = len(voice_channel.members)
        client = ctx.guild.voice_client
        if member_count == 1:
            await client.disconnect()

这是一个完全不同的计数。我试图做的是循环命令。齿轮listener()函数每2秒执行一次。为了测试,我播放了一首歌,在机器人开始播放后立即离开。我以为机器人也会离开海峡,但它没有。我的日志中没有输出我定义了错误的内容。

共有1个答案

欧阳飞章
2023-03-14

循环有点效率低下,您可以简单地使用on_voice_state_update事件

async def on_voice_state_update(member, before, after):
    voice_state = member.guild.voice_client
    # Checking if the bot is connected to a channel and if there is only 1 member connected to it (the bot itself)
    if voice_state is not None and len(voice_state.channel.members) == 1:
        # You should also check if the song is still playing
        await voice_state.disconnect()

参考:

  • on_voice_state_update
 类似资料:
  • 这是我命令的代码部分!虽然只有这一部分我不能很好地理解!我正试图让机器人在队列结束后离开! 它说和工作只是让机器人离开语音通道是我无法解决的问题!我尝试了以下方法: 编辑:

  • 我正在开发一个播放音乐的discord机器人。我已经设法让机器人离开通道,但服务器中的任何人都可以断开它。 我试图添加一个if语句,该语句要求命令作者的语音通道连接等于该帮会中机器人的语音通道连接。 这返回: 我在留档上找不到任何定义机器人连接到哪个公会的语音频道的东西。

  • 我在挑拨离间。v12上的js Bot,包括一个静音命令,用于静音您所在的整个语音频道。问题是当有人离开频道时,他们保持沉默。我正试图用一个简单的事件来解除此人的静音,但我不理解和和。我搜索了很多,但我只能找到一个适合加入风投的,而不是离开风投的。以下是我到目前为止得到的信息: 静音命令: 取消静音事件: 谢谢你花时间帮助我!:)

  • 我想制造一个播放音频文件的不和谐机器人。现在,它加入语音通道并播放音频文件,但之后拒绝离开。我的代码在下面。谁能建议一些修复,使我的机器人将离开语音频道?

  • 我正在为我的discord服务器构建一个机器人来播放YouTube视频,因为我还没有在网上找到一个可靠的机器人。 在我输入后,机器人会连接到我的语音频道!播放{url}命令,但即使url有效,也会立即离开。 我的代码如下: 我尝试过在我的PC上使用一个硬编码的文件,但我得到了相同的结果,机器人一连接就离开了语音通道。 我确实通过在cmd窗口中运行命令来验证ffmpeg和youtube-dl是否正常

  • 我用的是Netty 3.9 我有一个客户场景,我必须按照这个顺序进行操作 连接 发送1条消息 接收1消息 断开连接 由于连接和断开连接是一项成本高昂的操作,我希望尽可能多地重用Netty级别的对象。 所以我做以下事情 上面的代码生成了java.nio.channels。ClosedChannel异常,可能是因为套接字已关闭。但是Netty中没有api,我可以使用它断开与服务器的连接,并且仍然保留套