Discord.py 使用 cs 和 AIOHTTP 的 Meme 命令

Discord.py Meme Command with cs and AIOHTTP

@client.command(aliases=['memes'])
async def meme(ctx):
    embed = discord.Embed(title="Meme", description=None)

    async with aiohttp.ClientSession() as cs:
        async with cs.get('https://www.reddit.com/r/wholesomememes/new.json?sort=hot') as r:
            res = await r.json()
            embed.set_image(url=res['data']['children'] [random.randint(0, 25)]['data']['url'])
            await ctx.send(embed=embed, content=None)

我从一个 Whosebug 问题中找到了这段代码,我真的很想知道它是如何工作的。我觉得它可以提高我对 discord.py 的理解:> 所以如果你不介意并且有时间和知识,请回答! :D

所有这一切都是向给定的 url 发送一个 GET 请求,它本身是 returns JSON 数据。如果您通过任何浏览器发送请求,您将看到您收到 JSON 格式的数据。例如,如果您使用 Firefox,它会自动为您提供将其作为 JSON object 检查的选项。为了更好地理解,您可以单击 Keys

['data']['children'] [random.randint(0, 25)]['data']['url']

所以你进入数据 -> children -> 选择一个随机数 -> 数据 -> url 您会看到最终结果是一个 url 字符串,它将您定向到一张 meme 图片。

代码片段的最后一步是它发送 url 你刚刚到达某个地方(我猜是不和谐的聊天)