技术问询:能否列出特定日期前后或当天加入服务器的成员?
如何列出特定日期范围内加入服务器的成员
当然可以实现这个功能,不同类型的服务器(比如Discord、Minecraft等)有不同的操作方案,以下是常见场景的具体实现方式:
Discord 服务器
自行开发机器人实现
通过Discord API获取成员的joined_at时间字段,与目标日期对比后筛选:
- 先将目标日期转换为UTC时间戳(例如
2024-05-20对应的起始时间戳) - 遍历服务器所有成员,提取每个成员的
joined_at时间 - 根据需求筛选:
- 特定日期之前:
joined_at早于目标日期的0点UTC时间 - 特定日期之后:
joined_at晚于目标日期的23:59:59 UTC时间 - 当天加入:
joined_at的日期部分与目标日期完全匹配
- 特定日期之前:
示例代码片段(基于discord.py库):
import discord from datetime import datetime @client.command() async def filter_members(ctx, target_date: str, filter_type: str): # 解析目标日期为UTC时间 parsed_date = datetime.strptime(target_date, "%Y-%m-%d").replace(tzinfo=datetime.timezone.utc) filtered = [] for member in ctx.guild.members: if not member.joined_at: continue if filter_type == "before": if member.joined_at < parsed_date: filtered.append(member.display_name) elif filter_type == "after": # 取目标日期的23:59:59作为截止时间 end_date = parsed_date.replace(hour=23, minute=59, second=59) if member.joined_at > end_date: filtered.append(member.display_name) elif filter_type == "on": if member.joined_at.date() == parsed_date.date(): filtered.append(member.display_name) await ctx.send(f"符合条件的成员:\n{', '.join(filtered) if filtered else '无'}")
使用现有管理机器人
多数Discord管理机器人(如Carl-bot、MEE6)自带成员筛选功能:
- 打开机器人的管理面板,找到「成员统计」或「筛选」模块
- 输入目标日期,选择筛选条件(之前/之后/当天),即可生成对应成员列表
Minecraft 服务器
借助插件实现
使用Spigot/Bukkit生态的插件(如AdvancedBan或自定义开发的小型插件):
- 登录服务器后台,打开插件控制台
- 执行插件提供的筛选命令,例如自定义插件的
/listjoined <date> <filter>,其中<filter>可选before/after/on
直接查询数据文件
服务器的usercache.json文件中存储了玩家的firstJoined时间戳,可通过脚本或手动提取对比:
- 导出
usercache.json文件 - 编写简单脚本(如Python)解析时间戳,筛选符合日期条件的玩家名称
内容的提问来源于stack exchange,提问作者Heko
相关产品推荐
相关产品推荐

