Discord.py meme 命令需要很多时间
Discord.py meme command takes a lot of time
我正在 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)
这需要一段时间,因为每次执行命令时,它总是会生成一个提交列表以供选择,但是在命令执行后列表就消失了,这意味着你每次执行命令都会生成 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 制作一个机器人,并且有一个使用 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)
这需要一段时间,因为每次执行命令时,它总是会生成一个提交列表以供选择,但是在命令执行后列表就消失了,这意味着你每次执行命令都会生成 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
!