返回

python-discord.py 邀请 -approximate_presence_count API 逐渐变慢

发布时间:2022-08-31 23:48:06 341
# node.js

TL/DR:

我approximate_presence_count每 10 秒查询一次邀请链接,它会在很长一段时间内逐渐停止检测存在变化。我怎样才能解决这个问题?

目标

我正在编写一个不和谐的机器人,它监视我所属的几个大型(> 100 个成员)服务器中的在线(和其他状态)成员的数量。该机器人不是任何相关服务器的成员,并且应该每 10 秒左右记录一次成员的数量。

这不是XY 问题,我不希望机器人成为服务器的成员,而只是希望它approximate_presence_count从邀请链接中使用。

方法

为此,我创建了到每个服务器的永久邀请链接,并查询它们的approximate_presence_count每隔10秒通过tasks.loop

此外,我有一个小型测试服务器,其中有几个朋友登录和注销,以测试成员计数是否正常。

开发人员门户中启用了所有意图。这不是一个意图相关的问题。

问题

在我的小型测试服务器上进行测试期间,在大约24小时内运行bot的同时,我注意到它在检测approximate_presence_count在我的一个朋友登录或注销discord之后。我在不同的日子里重复了这一点。虽然approximate_presence_count要在任何给定的时间进行更新,可能是由于不协调的后端具有可变的负载量,这种趋势是恒定的。

大约20-24小时后approximate_presence_count变得几乎无用,很少检测到任何更改。

预期结果:登录/注销和更改之间的延迟approximate_presence_count保持不变

实际结果:登录/注销和更改之间的延迟approximate_presence_count逐渐增加

我试过的

除了下面的代码外,我还尝试了不每次都获取邀请logger

我可以在多个网络和多台机器上复制信息。

最小可复制示例

下面的代码是从bot中提取的,应该只是相关组件。提取过程中可能会有错误,但要点不变。

import discord
from discord.ext import tasks

TOKEN='removed'
INTENTS=discord.Intents.all()
links=['discord.gg/foobarbaz','discord.gg/fillertext']#real invites removed

client = discord.Client(intents=INTENTS)

@tasks.loop(seconds=10)
async def logger():
  invites=[await client.fetch_invite(i,with_counts=True)for i in links]#invite objects
  counts=[getattr(i,'approximate_presence_count')for i in invites]#presence counts
  
  with open('logs.txt','a') as file:
    file.write(datetime.datetime.today().strftime("%d/%m/%Y, %H:%M:%S ")+','.join(map(str,counts))+'\n')

@client.event
async def on_ready():
  logger.start()

client.run(TOKEN)

最终注释

中的预期延迟approximate_presence_count

在我的测试中,当没有出现此问题时,登录/注销和approximate_presence_count在5到40秒之间,每100个中可能有1个达到60秒。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像