You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py invites接口approximate_presence_count长期运行变慢问题

核心摘要:每10秒查询一次邀请链接的approximate_presence_count字段,程序长时间运行后接口逐渐无法检测到在线状态变化,寻求修复方案。

实现目标

  • 开发Discord机器人,监控所在的多个成员规模大于100的服务器的在线(及其他状态)成员数量
  • 机器人不加入任何目标服务器,仅需每10秒左右完成一次成员数记录
  • 明确说明:该需求不存在方向偏差,不考虑让机器人加入目标服务器的方案,仅通过邀请链接的approximate_presence_count字段获取所需数据

现有实现逻辑

  • 为每个目标服务器生成永久邀请链接,通过tasks.loop每10秒查询对应邀请的approximate_presence_count值,将结果追加写入文本日志文件
  • 搭建小型测试服务器,邀请多名测试人员反复上下线,用于验证成员计数功能的准确性
  • 开发者后台已开启所有intents权限,问题与intents配置无关

故障现象

  • 在小型测试服务器环境测试时,机器人连续运行约24小时后,测试人员上下线触发的approximate_presence_count状态变化检测延迟持续升高,该问题已在多日重复测试中稳定复现
  • 虽然Discord后端负载波动本身会导致approximate_presence_count更新存在小幅延迟波动,但延迟随运行时间线性升高的趋势非常明确
  • 连续运行20-24小时后,approximate_presence_count字段基本失去作用,几乎无法检测到在线状态变化
  • 预期表现:用户上下线到approximate_presence_count数值更新的延迟保持在稳定区间
  • 实际表现:用户上下线到approximate_presence_count数值更新的延迟随程序运行时长逐渐升高

已尝试的排查操作

  • 测试过不在每次logger循环执行时重新拉取邀请信息的实现方式,问题未得到解决
  • 更换多个网络环境、多台测试设备运行程序,均能复现该问题

最小可复现代码

import discord
import datetime
from discord.ext import tasks

TOKEN = 'removed'
INTENTS = discord.Intents.all()
links = ['discord.gg/foobarbaz','discord.gg/fillertext'] # 已隐去真实邀请链接

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] # 获取邀请对象
    counts = [getattr(i, 'approximate_presence_count') for i in invites] # 提取在线人数计数
    
    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)

注:原提取代码缺失datetime模块导入,上述代码补全了该必要导入,核心业务逻辑与原代码完全一致。

补充说明

approximate_presence_count的正常延迟范围

故障未出现的测试阶段,用户上下线到approximate_presence_count数值更新的延迟在5-40秒区间,仅约1%的请求延迟最高可达60秒。

请求频率说明

当前机器人共监控6个邀请链接,平均向Discord发起请求的频率为0.6次/秒。正如评论区EricJin提到的,该频率触发接口限流的可能性极低。


内容的提问来源于stack exchange,提问作者iteratedwalls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:18:55