首页 > 解决方案 > Python列表转换或范围?(或者可能是 Discord py 特定问题)

问题描述

我问过关于如何匹配列表中的元素的上一个问题(在这个问题上帮助我可能很重要):

在 Python 中比较列表的匹配元素

我想使用J上一个问题的我想要的结果来填充 embed.field.names 或嵌入的描述。但问题是它只是添加一个带有第一个结果的字段并发送嵌入,然后发送另一个带有下一个结果的嵌入,依此类推。in 参数尚未使用,page = 1但我想将其用于页码,因此我可以在单个嵌入中一次查看 25 个。

我希望这是有道理的,并感谢任何帮助我的人:)

    async def test(self, ctx, page = 1):
        scan = f"privatelink"
        async with aiohttp.ClientSession() as cs:
            async with cs.get(scan) as r:
                try: bag = ast.literal_eval(await r.text())
                except: bag = json.loads(await r.text())
        scan2 = 'privatelink'
        async with aiohttp.ClientSession() as cs:
            async with cs.get(scan2) as r:
                c = json.loads(await r.text())
        if bag == []:
            await ctx.send("None")
            return
        bag = bag[0]['items']
        emj = c['smiley']
        nam = c['words']
        for x in emj:
            if x in bag:
                for x in [emj.index(x)]:
                    J = c['words'][x]
                    e = discord.Embed(title=f"Test", color=discord.Colour(value=1111111), 
                    description=f'')
                    e.add_field(name=J, value=f"")
                    await ctx.send(embed=e)

我只想在同一嵌入消息中包含多达 25 个结果。我不希望机器人为每个结果发送新消息。

标签: pythonlistdiscorddiscord.pydiscord.py-rewrite

解决方案


你的逻辑大错特错了。您为循环中的每个 x 创建了一个新的嵌入,并将其发送到循环中。如果您在循环之前创建嵌入并在循环完成时发送它,您将拥有一个包含多个字段的嵌入

e = discord.Embed(title=f"Test", color=discord.Colour(value=1111111), 
    description=f'')

for x in [emj.index(x)]:
    J = c['words'][x]
    e.add_field(name=J, value=f"")

await ctx.send(embed=e)

您可能还需要注意在嵌套循环中使用相同的变量名如果您在 for x 循环中有一个 for x,您将更改 x,这会造成混淆。相反,您可以拥有一个“用于表情符号中的表情符号”,然后嵌套一个用于 [emj.index(x)] 中的 x 我希望我正确理解了您的问题


推荐阅读