You need to enable JavaScript to run this app. discord.py 无需指定用户标识 批量读取JSON内所有用户最后发言时间
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 13:36:03