我正在尝试为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
正如我所说,它非常*很慢。我认为必须有一些更好的方法来做到这一点,而不是获取服务器中每个频道的完整历史记录,只计算用户发送消息的时间,但我很难过。有人有任何帮助吗?
答案 0 :(得分:0)
您可以对代码应用更多优化,以使其更快,因为您正在访问所有文本渠道中发送的每条消息,甚至文档声明将限制设置为{{1这是一个缓慢的操作:
limit (Optional[int])
- 要检索的邮件数。如果是None
, 检索通道中的每条消息。但请注意,这样会 让它运转缓慢。
然而,仍然可以进行一些小的优化,例如在开始时不创建三个成员列表,并使用集合模块进行简单计数。
None