我在用Python开发一个Discord bot,它将YouTube上的音乐排队,我正在研究在播放器停止时自动对歌曲进行排队的方法,而所有的代码都能完美地工作,唯一的问题是我不能每隔15秒检查一下播放器是否正在播放
async def cmd_autoqueue(self,message, player,channel,author, permissions, leftover_args):
print("autoq ran")
if started == True:
if player.is_stopped:
await self.cmd_autoqadd(player, channel, author, permissions,leftover_args,song_url=last_url)
threading.Timer(15.0,await self.cmd_autoqueue(message, player,channel,author, permissions, leftover_args)).start()
我确实意识到了
^{pr2}$调用函数,如果我想把它作为以后调用的函数传递,我会使用lambda:但是,async lambda?在
同样开始布尔值是由其他东西来管理的,所以它在这里是为了“如果”,在这个问题中
解决方案:
async def cmd_autoqueue(self,message, player,channel,author, permissions, leftover_args):
global started
print("loop")
if started == True:
await asyncio.sleep(15)
if player.is_stopped:
await self.cmd_autoqadd(player, channel, author, permissions,leftover_args,song_url=last_url)
await self.cmd_autoqueue(message, player,channel,author, permissions, leftover_args)
你可以利用loop.call\u稍后,返回一个异步兼容处理程序以取消任务。在
你的班级: definit(自身): 自循环=asyncio.get_event_循环() self.\u check_handler=无
要将一个函数(需要一些参数)作为参数传递给另一个不允许传递参数的函数,可以使用functools.partial. 在
相关问题 更多 >
编程相关推荐