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

当使用Discord.py创建机器人时,如何让我的音乐机器人在观众离开时离开?

司空瑾瑜
2023-03-14

今天我开始为discord with discord创建自己的音乐机器人。皮耶。我使用命令扩展来实现更简单的结构。

到目前为止,我已经创建了加入和离开语音频道的命令(删除了安全检查):

@bot.command()
async def join(ctx):
  v_channel = ctx.message.author.voice.channel
  await v_channel.connect()

@bot.command()
async def leave(ctx):
  player = ctx.message.guild.voice_client
  await player.disconnect()

现在我想实现一个功能,以便如果观众(非机器人成员)离开语音频道,机器人也离开。如果“召唤”机器人的用户离开了,但其他成员仍在语音通道中,机器人不得离开。

我想过用这样的东西:

@bot.event
async def on_voice_state_update():
    If len(ctx.channel.members) == 1 and ctx.channel.members[0].bot:
       ctx.channel.disconnect()

但是我不确定如何把它们都放在一起,以及如何获得通道上下文。我更喜欢准确地检查音乐机器人语音客户端,因为服务器上有多个机器人。on_voice_state_update()似乎是全局的,你得到的唯一上下文是用户X在服务器上的某个地方留下了一个频道。

你有一个优雅的想法吗?

共有1个答案

步联
2023-03-14

我会这样做:

@bot.event
async def on_voice_state_update(member, prev, cur):
    if bot.user in prev.channel.members and len([m for m in prev.channel.members if not m.bot]) == 0:
        channel = discord.utils.get(bot.voice_clients, channel=prev.channel)
        await channel.disconnect()

参考资料:

  • on\u voice\u state\u update()
  • utils。get()
  • 客户端。语音客户端
  • VoiceClient。频道
  • 语音频道。成员
  • 成员。bot
 类似资料:
  • 我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带

  • 我正在开发一个名为Amadeus的discord机器人。Amadeus在收到命令时播放音乐。。。好他将。现在,当我还在为他工作时,他只演奏一首歌。当他连接到语音频道并完美地播放歌曲时,他不会在歌曲结束后离开语音频道。不知为什么,我想它从来没有检测到这首歌的结束?感谢您的帮助

  • 我为机器人制作了加入语音频道的代码, 当任何用户键入“离开”时,我希望机器人离开它所在的服务器。我该怎么做?

  • 我用Java(Discord JDA)制作了一个Discord音乐机器人,我一直试图让机器人在一段时间后(例如1分钟)离开一个语音通道,但我真的很挣扎。有什么帮助吗?

  • 我最近制作了我的第一个discord机器人,我终于用下面的代码获得了通过机器人播放的音频。但是,如果与bot处于同一频道的人再次使用同一命令,bot将停止播放其音频并离开该频道。此外,我将如何使它,使机器人无法切换频道之前,它已经完成播放其音频。(注意:bot从包含mp3文件的URL播放音频,而不是使用YouTube插件,因为我只希望它为一些私人服务器播放特定内容)以下是代码: 非常感谢您的帮助。

  • 我需要帮助,让我的discord机器人通过Python API的事件离开语音通道。我已经创建了一个事件,使我的机器人加入一个语音频道,如果在5秒后只有一个人出现在该频道,这部分工作。然后,如果另一个人加入或离开,我需要我的机器人离开频道。我一直想不出如何让它离开。任何帮助都将不胜感激!下面是我的方法现在的样子,需要“离开语音频道”评论的帮助: