【问题标题】:Discord.py meme command takes a lot of timeDiscord.py meme 命令需要很多时间
【发布时间】:2021-07-10 02:27:32
【问题描述】:

我在 discord.py 中制作了一个机器人,并使用 asyncpraw 有一个完整的 meme 命令(praw 不起作用)。但是模因出现需要花费大约 8 到 10 秒的时间。有什么办法可以减少时间吗?这是代码:-

@client.command(aliases=['memes'])
async def meme(ctx):
    subreddit = await reddit.subreddit("memes")
    all_subs = []
    top = subreddit.top(limit = 200)
    async for submission in top:
      
      all_subs.append(submission)
    
    random_sub = random.choice(all_subs)
    name = random_sub.title
    url = random_sub.url
    ups = random_sub.score
    link = random_sub.permalink
    comments = random_sub.num_comments
    embed = discord.Embed(title=name,url=f"https://reddit.com{link}", color=ctx.author.color)
    embed.set_image(url=url)
    embed.set_footer(text = f"????{ups} ????{comments}")
    await ctx.send(embed=embed)
    

【问题讨论】:

    标签: discord discord.py praw asyncpraw


    【解决方案1】:

    这需要一段时间,因为每次执行命令时,它总是会生成一个可供选择的提交列表,但随后该列表在命令执行后消失,这意味着 您每次执行命令都会生成 200 个帖子,只是为了从中挑选一个

    如果您想要更高效、更快的方法,请将其设为单独的函数!

    all_subs = []
    
    
    async def gen_memes():
        subreddit = await reddit.subreddit("memes")
        top = subreddit.top(limit = 200)
        async for submission in top:
          all_subs.append(submission)
    
    
    @client.event
    async def on_ready():
        await gen_memes()  # generate memes when bot starts
    
    @client.command(aliases=['memes'])
    async def meme(ctx):
        random_sub = random.choice(all_subs)
        all_subs.remove(random_sub)
        name = random_sub.title
        url = random_sub.url
        ups = random_sub.score
        link = random_sub.permalink
        comments = random_sub.num_comments
        embed = discord.Embed(title=name,url=f"https://reddit.com{link}", color=ctx.author.color)
        embed.set_image(url=url)
        embed.set_footer(text = f"?{ups} ?{comments}")
        await ctx.send(embed=embed)
        
        if len(all_subs) <= 20:  # meme collection running out owo
            await gen_memes()
    

    当然这不是最有效的方式,如果你想在一定的时间间隔内重新填充你的表情包,你可以使用discord.ext.tasks

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2019-07-30
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多