能否通过Discord.py rewrite获取其他Discord用户的延迟(ping)?
关于discord.py检测其他用户延迟的问题
嘿,这个需求挺常见的,但很遗憾地告诉你:discord.py里没有直接获取其他用户延迟的方法,也不存在类似Mention.latency这样的属性/函数。
为什么做不到?
原因其实出在Discord的API本身:用户的延迟是其本地客户端和Discord服务器之间的连接状态数据,这个信息只有用户自己的客户端能获取到,Discord并不会把普通用户的延迟数据开放给机器人调用。
而你当前用的client.latency,是机器人自己的客户端和Discord网关之间的心跳往返时间,反映的是机器人自身的连接状态,和其他用户的延迟完全不相关。
替代方案:模拟交互延迟
如果你想做一个类似“检测用户延迟”的功能,只能退而求其次,通过机器人和用户的消息交互来计算一个近似的延迟值——这其实是机器人发送消息到服务器转发的往返时间,不是用户真实的客户端延迟,但可以作为一个参考。
示例代码如下:
import time import discord from discord.ext import commands @client.command() async def userping(ctx, member: discord.Member): # 记录开始时间 start = time.time() # 发送临时消息触发交互 temp_msg = await ctx.send(f"正在检测 {member.mention} 的延迟...") # 计算时间差并转换为毫秒 interaction_latency = round((time.time() - start) * 1000) # 编辑消息展示结果 await temp_msg.edit(content=f"{member.mention} 的交互延迟约为 {interaction_latency}ms")
注意:这个值受服务器负载、网络环境等多种因素影响,只能作为参考,不是用户真实的客户端延迟。
内容的提问来源于stack exchange,提问作者Saikat Das
相关产品推荐
相关产品推荐

