如何使用discord.py中的参数循环异步函数?

2024-04-28 06:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个异步函数,我想无限循环

@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所建议的那样)创建一个后台循环,然后从命令函数调用该后台循环函数

感谢乌卡斯·克维茨基再次帮助我

@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)

Tags: orloopurlsubmissionnewasyncifawait
1条回答
网友
1楼 · 发布于 2024-04-28 06:18:29

我没有做我正在做的事情,而是使用discord.ext.task(如Ł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)

相关问题 更多 >