我不断收到AttributeError:“ Bot”对象没有属性“ fetch_member”错误

时间:2020-09-15 02:54:22

标签: python python-3.x discord discord.py

我正在尝试在多服务器机器人上制作全球XP排行榜。

如果我只有entry[0],它将把他们的ID发布到嵌入中。

请帮助高级<3

class Menu(ListPageSource):
    def __init__(self, ctx, data):
        self.ctx = ctx

        super().__init__(data, per_page=10)

    async def write_page(self, menu, offset, fields=[]):
        offset = (menu.current_page*self.per_page) + 1
        len_data = len(self.entries)

        embed = Embed(title="XP Leaderboard", description="See who is on top!", colour=self.ctx.author.colour)
        embed.set_thumbnail(url=self.ctx.guild.me.avatar_url)
        embed.set_footer(text=f"{offset:,} - {min(len_data, offset+self.per_page-1):,} of {len_data:,} members.")
        
        for name, value in fields:
            embed.add_field(name=name, value=value, inline=False)

        return embed

    async def format_page(self, menu, entries):
        offset = (menu.current_page*self.per_page) + 1
        fields = []
        table = ("\n".join(f"{idx+offset}. {self.ctx.bot.fetch_member(entry[0]).display_name} (XP: {entry[1]} | Level {entry[2]})" 
                for idx, entry in enumerate(entries)))

        fields.append(("Ranks", table))

        return await self.write_page(menu, offset, fields)

更新: 更新了我的表字符串,现在出现此错误,但仍然不知道如何解决。

        table = ("\n" +  f"{idx+offset}. {await self.ctx.bot.fetch_user(entry[0]).display_name} (XP: {entry[1]} | Level {entry[2]}" 
                 for idx, entry in enumerate(entries))```
```py
<async_generator object Menu.format_page.<locals>.<genexpr> at 0x04A49A90>

(嵌入中发送的^)

3 个答案:

答案 0 :(得分:0)

您所做的是一个生成器。您需要列表理解:

table = [x.do_stuff() for x in some_iterable]

这是一个生成器:

a = (x.do_stuff() for x in some_iterable)

答案 1 :(得分:0)

fetch_member是一种Guild对象方法,您可以使用bot.get_guild

答案 2 :(得分:0)

通过导入我的导入文件所在的“ from lib.bot import bot”来解决此问题,

        table = ("\n".join(f"{idx+offset}. {bot.get_user(entry[0]).name} (XP: {entry[1]} | Level: {entry[2]})"
                   for idx, entry in enumerate(entries)))