【发布时间】:2021-04-13 07:04:36
【问题描述】:
我想添加一个事件,如果用户在歌曲仍在播放时离开,我的音乐机器人会立即离开语音频道。如果频道中有多个用户,机器人当然应该留在频道中。我在那里只有一种方法,但需要帮助。我会尝试以下方法:
async def check_member(self, ctx):
channel = ctx.author.voice.channel
member_count = len(voice_channel.members)
if member_count == 1:
await channel.disconnect
但这似乎不起作用。 我知道事实上有一个 similar post 但这对我也不起作用,因为我定义了一些不同的东西。
我的第二次尝试是:
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()
(也没有用。)
定义does not work:我现在以不同的方式构建函数:
@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()
现在这是一个完全不同的计数。我想要做的是每 2 秒循环一次 commands.Cog.listener() 函数。对于测试,我播放了一首歌曲,并在机器人开始播放后立即离开。我以为机器人也会离开频道,但事实并非如此。我的日志中没有输出表明我定义了错误。
【问题讨论】:
-
描述“不起作用”?错误?奇怪的行为?另外,您能否添加更多相关代码,例如您如何使用此功能?
-
@stijndcl 编辑了帖子。总结一下:没有错误,但机器人也没有离开频道。
-
ctx参数怎么填?这是一项任务,没有像命令那样的调用上下文,默认情况下 Discord 不会填写它(因为它不存在)。此外,您没有收到任何错误,因为您使用的是默认情况下不显示错误的任务。任务需要自定义错误处理程序。 -
他可能在
Task.start(*args)中传递了ctx参数。此外,您的代码根本没有任何意义。
标签: asynchronous discord discord.py youtube-dl