如何使用 discord.py 中的参数循环异步函数?
How to loop an async function with parameters in 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(按照 Ł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)
我没有做我正在做的事情,而是使用 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)
我有一个要无限循环的异步函数。
@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)
我没有做我正在做的事情,而是使用 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)