我有一个想要无限循环的异步函数。
@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(如 Łukasz Kwieciński 所建议的)创建了一个后台循环,然后从命令函数调用该后台循环函数。
感谢 Łukasz Kwieciński 再次帮助我
@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)
答案 0 :(得分:0)
我没有做我正在做的事情,而是使用了 discord.ext.task(根据 Łukasz Kwieciński 的建议)创建了一个后台循环,然后从命令函数中调用了该后台循环函数。
感谢 Łukasz Kwieciński 再次帮助我
tempurl = "bbbb"
@tasks.loop(seconds=30)
async def catSend(ctx):
global tempurl
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)