Discord.py表情包命令需要很长时间 [英] Discord.py meme command takes a lot of time

查看:7
本文介绍了Discord.py表情包命令需要很长时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在discord.py中制作了一个机器人,并使用asyncpraw创建了一个完全有效的表情包命令(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)
    

推荐答案

它需要一段时间,因为每次执行命令时,它总是会生成一个提交列表以供选择,但在命令执行后该列表就消失了,这意味着您每次执行命令时都会生成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

这篇关于Discord.py表情包命令需要很长时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆