discord.py 无需指定用户标识 批量读取JSON内所有用户最后发言时间
无指定标识批量读取users.json全量用户发言记录的实现
实现原理
通过json.load()读取文件得到的users是标准Python字典:
- 外层的键就是字符串格式的用户ID
- 每个键对应的 value 是存了
lmessage字段的用户信息子字典
完全不需要提前传入某个具体用户的标识,直接遍历字典的全量键值对,就能拿到所有用户ID和对应的最后发言时间。
可直接复用的指令代码
基于你现有的discord.py机器人逻辑,可以直接新增一个无参数指令,不需要传任何用户标识就能查询全量记录:
@client.command() async def alllastmess(ctx): # 加encoding参数避免Windows本地环境读文件乱码 with open('users.json', 'r', encoding='utf-8') as f: users = json.load(f) # 拼接结果 result = ["==== 所有用户最后发言时间记录 ===="] for user_id, user_detail in users.items(): # 用get取值,避免个别条目缺lmessage字段时直接崩溃 last_time = user_detail.get("lmessage", "无记录") result.append(f"用户ID {user_id}: {last_time}") full_text = "\n".join(result) # 适配Discord单条消息最多2000字符的限制,超长自动切分发送 for i in range(0, len(full_text), 2000): await ctx.send(full_text[i:i+2000])
实用调整提示
- 如果存储的用户量很大,直接发长文本容易触发机器人的消息频率限制,可以把整理好的全量结果存成临时txt文件,以附件形式发到频道
- 现有单用户查询指令可以加个兜底:如果调用时没传
member参数,就默认取发这条指令的用户ID查询,避免用户漏传参数时报错 - 读取文件时固定加
encoding='utf-8'参数,避免不同系统环境下读取JSON出现中文乱码、字段解析失败的问题
内容的提问来源于stack exchange,提问作者Anika
相关产品推荐
相关产品推荐

