所以事情是,我正在用python.py在python中创建一个不和谐的机器人,并且正在通过将某人的用户ID放在json文件中来使某人静音。
@client.command()
async def mute(user):
with open("muted.json", 'r') as f:
data = json.load(f)
if not user.id in data:
data[user.id] = {}
else:
await client.send_message(message.channel, "The user is already muted")
在“如果data.user.id中没有user.id”,则表示“ AttributeError:'str'对象没有属性'id'” 我该如何解决?
答案 0 :(得分:1)
默认情况下,命令的所有参数都是字符串。如果要库为您转换它们,则必须通过提供converter并带有类型注释来告诉它要将其转换为哪种类型。如果要引用调用命令的message
,则还必须告诉库将invocation context传递到命令回调中。
@client.command(pass_context=True)
async def mute(ctx, user: discord.User):
with open("muted.json", 'r') as f:
data = json.load(f)
if not user.id in data:
data[user.id] = {}
else:
await client.send_message(message.channel, "The user is already muted")
值得注意的是,该命令实际上并没有执行任何操作。它从文件创建字典,对其进行修改,然后在函数结束时将其丢弃。相反,您应该具有一个模块级data
字典,该字典必须加载一次,然后在您对其进行修改时进行保存。