You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py编写用户信息存储代码报AttributeError错误求助

报错根因

你报错的AttributeError: 'str' object has no attribute 'author'来源于最后一行代码:

await client.process_commands(msg)

你这里传入的msg是你命令定义的第二个参数message,是用户执行命令时传入的纯字符串内容,而client.process_commands要求传入的参数是discord.py的Message对象(包含发送者、频道、内容等完整属性),你传入字符串自然找不到author属性。
而且在命令回调函数内部不需要手动调用process_commands,框架会自动处理命令触发逻辑,直接删掉这行即可解决当前报错。

其他代码问题排查

你现有代码还有多处逻辑错误,会导致后续运行异常:

  • save_name函数未正确调用:你只写了save_name没有传参执行,修改为save_name(names, ctx.author)才会触发用户信息存储逻辑,且修改names字典后需要重新写入names.json文件,否则修改不会持久化。
  • 文件操作逻辑冗余错误:with open上下文管理器会自动关闭文件,不需要额外调用close()方法;判断文件为空的逻辑存在指针偏移问题,建议直接用try-except处理json加载逻辑更稳妥。
  • 变量名错误:save_name内部的print语句使用了未定义的users变量,你实际存储用户信息的变量是names,会触发NameError。
  • 命令参数限制:你当前定义的message参数只能接收单个单词,如果需要接收多词内容,需要修改为async def His(ctx, *, message):。

相关参数说明

  • ctx:discord.py命令的第一个固定参数,为Context上下文对象,包含触发命令的所有相关信息:
    • ctx.author:触发命令的用户对象,可获取用户id、昵称等属性
    • ctx.send():向命令触发的频道发送消息
    • ctx.message:触发命令的原始Message对象,即你之前传错给process_commands的正确参数类型
  • 命令的自定义参数:你定义的第二个参数message是框架自动提取的用户传入的命令内容,默认按空格分割参数,加*前缀可以匹配所有后续内容为一个字符串。

修正后参考代码

import json
import os

@client.command()
async def His(ctx, *, message):
    # 初始化json文件逻辑
    if not os.path.exists("names.json") or os.stat("names.json").st_size == 0:
        with open("names.json", "w", encoding="utf-8") as f:
            json.dump({}, f)
    
    # 读取现有用户数据
    with open("names.json", "r", encoding="utf-8") as f:
        names = json.load(f)
    
    # 存储用户信息函数
    def save_name(names, user):
        user_id = str(user.id)
        if user_id not in names:
            names[user_id] = {}
        names[user_id]["names"] = 0
        # 打印测试
        print(names[user_id]["names"])
        # 写入修改后的数据到文件
        with open("names.json", "w", encoding="utf-8") as f:
            json.dump(names, f, indent=2, ensure_ascii=False)
    
    # 调用存储函数
    save_name(names, ctx.author)
    # 回应用户
    await ctx.send(message)

内容的提问来源于stack exchange,提问作者Baam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:02