在discord.py中如何循环执行带参数的异步函数?
我有一个需要无限循环执行的异步函数,代码如下:
@client.command() async def cat(ctx): tempurl = "b" subreddit = await reddit.subreddit("cats") allSubmissions = [] new = subreddit.new(limit = 1) async for submission in new: allSubmissions.append(submission) randomSub = random.choice(allSubmissions) url = randomSub.url if tempurl != url: if url.endswith('.jpg') or url.endswith('.jpeg') or url.endswith('.png'): tempurl = url print("\n"+url) await ctx.send(url) loop = asyncio.get_event_loop() loop.run_until_complete(cat()) loop.close()
使用loop.run_until_complete(cat())执行时抛出错误:TypeError: cat() missing 1 required positional argument: 'ctx'
尝试查找带参数异步函数的循环执行方法,未找到相关解决方案。
解决方案
无需沿用原有写法,使用discord.ext.task创建后台循环,再从命令函数中调用该后台循环函数即可,代码如下:
@tasks.loop(seconds=30) async def catSend(ctx): tempurl = "bbbb" subreddit = await reddit.subreddit("cats") allSubmissions = [] new = subreddit.new(limit = 1) async for submission in new: allSubmissions.append(submission) randomSub = random.choice(allSubmissions) url = randomSub.url if tempurl != url: if url.endswith('.jpg') or url.endswith('.jpeg') or url.endswith('.png'): tempurl = url print(url) await ctx.send(url) else: tempurl = url @client.command() async def cat(ctx): catSend.start(ctx)
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

