使用discord.py在discord服务器中找到“前10名”用户的最佳(即最快)方式是什么

时间:2018-03-20 03:18:22

标签: python discord discord.py

我正在尝试为Python discord bot添加一些基本的stat-bot功能。我确实已经有一种非常慢的方式。我希望机器人能够在最多2或3秒内响应,但即使在我的小型个人服务器中,只需用我的代码计算它就花了很长时间:

@bot.command(pass_context=True)
@is_Admin()
async def top10(ctx):
    """Prints a pretty graph of top 10 users in the server"""
    server = ctx.guild
    users = [[0 for x in range(0, len(server.members))] for x in range(0, 2)] 
    users[0] = [u.id for u in server.members]
    h = 0
    for channel in server.text_channels:
        hist = await channel.history(limit=None).flatten()
        for message in hist:
            au = message.author
            if au.bot == False:
                try:
                    i = users[0].index(au.id)
                    users[1][i] += 1
                except ValueError as e:
                    pass

正如我所说,它非常*很慢。我认为必须有一些更好的方法来做到这一点,而不是获取服务器中每个频道的完整历史记录,只计算用户发送消息的时间,但我很难过。有人有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

您可以对代码应用更多优化,以使其更快,因为您正在访问所有文本渠道中发送的每条消息,甚至文档声明将限制设置为{{1这是一个缓慢的操作:

  

limit (Optional[int]) - 要检索的邮件数。如果是None,   检索通道中的每条消息。但请注意,这样会   让它运转缓慢。

然而,仍然可以进行一些小的优化,例如在开始时不创建三个成员列表,并使用集合模块进行简单计数。

None