gpt4 book ai didi

python - 如何让 discord 机器人在 x 分钟不活动后离开语音 channel ?

转载 作者:行者123 更新时间:2023-12-05 08:49:36 24 4
gpt4 key购买 nike

我正在尝试使用 discord.py 在 discord 上制作一个音乐机器人。但是,我希望机器人让语音 channel 在一段时间内处于非事件状态,例如 5 分钟。不活动是指机器人没有播放任何歌曲。

用于开始歌曲的命令是

voice.play(discord.FFmpegPCMAudio(audio))

voice.stop()停止播放歌曲

voice objectdiscord.VoiceClient

最佳答案

嘿,我知道这个帖子已经快一年了,但我认为我得到了一个代码,值得发布给仍然有这个问题的任何人。

@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):

if not member.id == self.bot.user.id:
return

elif before.channel is None:
voice = after.channel.guild.voice_client
time = 0
while True:
await asyncio.sleep(1)
time = time + 1
if voice.is_playing() and not voice.is_paused():
time = 0
if time == 600:
await voice.disconnect()
if not voice.is_connected():
break

首先,我发现最好将它放在 on_voice_state_update 事件中,因为将它放在播放命令的 after 语句中会导致它在每次歌曲结束时运行该循环。

(如果您了解此代码的工作原理,则无需阅读其余部分,我将对其进行解释。)

好的,首先我们检查我们的机器人是否是触发事件的机器人:

if not member.id == self.bot.user.id:
return

之后我们检查它是否是一个加入事件:

elif before.channel is None:

如果前面的 channel 是 none,这意味着机器人不在语音 channel 中,那么它加入了我们正在寻找的 channel 。

然后如果它首先进入 elif 语句,它会声明变量 voice。我发现获得它的最快方法是使用类似 voice = after.channel.guild.voice_client 的 after 语句,这应该可以让您访问公会语音客户端!

然后我们进入代码的主要部分!这是机器人将运行的循环,用于检查机器人是否正在播放:

    time = 0
while True:
await asyncio.sleep(1)
time = time + 1
if player.is_playing or player.is_paused:
time = 0
if time == 600:
await voice.disconnect()
if not player.is_connected:
break

因此,我们创建了一个名为 time 的变量,它会在检测到机器人未在播放时每秒加 1,并确认机器人实际上并未暂停……然后,如果机器人再次开始播放,它会返回到零。但如果它达到 600,也就是 10 分钟,它会断开机器人与 channel 的连接,然后它会中断循环。

哦,别担心 @commands.Cog.listener() 这只是因为我在 cog 中使用它。如果不是,则应将其更改为 @client.event 并将 self 从函数语句中删除。

抱歉,我一直在教程模式下,我只是想向人们解释我的代码,哈哈。

关于python - 如何让 discord 机器人在 x 分钟不活动后离开语音 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63658589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com