如何获取所有处于Timeout状态成员的列表及其剩余时长?
获取Discord超时(Timeout)成员列表及剩余时长的实现思路
思路一:基于Discord官方SDK开发自定义脚本/机器人
这是最直接精准的方案,适合有基础开发能力的用户:
- 遍历目标服务器所有成员:通过SDK提供的成员获取接口(比如discord.py的
guild.members、discord.js的guild.members.fetch())拉取全量成员,注意必须开启机器人的「服务器成员意图」权限。 - 筛选超时状态成员:检查每个成员的
communication_disabled_until属性——如果该属性存在且对应的UTC时间晚于当前时间,说明成员正处于Timeout状态。 - 计算剩余时长:用
communication_disabled_until的时间减去当前UTC时间,得到的差值就是剩余超时时长,注意时区转换避免误差。
附一段discord.py的极简示例代码:
import discord from datetime import datetime # 配置机器人权限 intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents) @client.event async def on_ready(): # 替换为你的服务器ID和机器人令牌 target_guild = client.get_guild(1234567890) timeout_list = [] for member in target_guild.members: if member.communication_disabled_until and member.communication_disabled_until > datetime.utcnow(): remaining_time = member.communication_disabled_until - datetime.utcnow() timeout_list.append(f"{member.name}(ID:{member.id})剩余时长:{str(remaining_time)}") print("当前处于Timeout状态的成员:\n" + "\n".join(timeout_list)) await client.close() client.run("YOUR_BOT_TOKEN_HERE")
思路二:直接调用Discord REST API
如果不想用SDK,也可以直接通过HTTP请求实现:
- 拉取服务器成员:调用
GET /guilds/{guild_id}/members接口,通过limit和after参数分页获取全量成员(单页最多拉取1000个)。 - 筛选并计算:对每个返回的成员对象,检查
communication_disabled_until字段,若该字段存在且大于当前UTC时间,计算时间差得到剩余时长。 - 注意:请求头必须携带
Authorization: Bot 你的机器人令牌,且机器人需要拥有「服务器成员意图」权限。
思路三:利用服务器审核日志(手动/半自动化)
如果没有开发能力,适合小规模服务器临时使用:
- 打开服务器设置的「审核日志」,筛选「更新成员」事件,找到包含「设置超时」操作的记录。
- 对应记录里的成员就是被Timeout的用户,但审核日志不会显示剩余时长,需要手动进入成员资料页查看当前超时状态的剩余时间。
内容的提问来源于stack exchange,提问作者Sans
相关产品推荐
相关产品推荐

