我正在尝试创建一个命令(<;MF_add),该命令向成员的json值添加一个点,并且只有管理员可以使用该点。 这是我现在的代码:
@client.command()
@commands.has_permissions(administrator = True)
async def MF_add(ctx, user: discord.Member):
with open ("MF Points.json", "r") as f:
users = json.load(f)
await client.get_user(user_id)
user = client.get_user(user_id)
if user in users:
users["{user.mention}"]["points"] += 1
await ctx.message.channel.send(f"You have given {member.mention} 1 MF point.")
with open("MF Points.json", "w") as f:
json.dump(users, f, indent = 4)
它没有给出任何错误,但也完全没有响应
谢谢你的帮助
实际上,您没有在此处生成命令,
@commands.has_permissions(administrator = True)
不是用来生成新命令的。在它前面需要一个@bot.command()
,如:这将解决您的问题,我相信,现在谈谈您的程序,因为它根本不会像您期望的那样运行(或者它只会出错):
["{user.mention}"]
当您看到用户的键只不过是一个字符串时,您需要在它前面添加一个f,以便它在用户中实际查找一个提及值我已经将您的大部分代码重写为我认为应该可以工作的代码:
请注意,由于不知道您实际想要用这段代码实现什么/您想要引入哪些其他函数,我不太确定这是最好的方法。但你应该能够以此为基础来解决问题
注意:我将键转换为字符串,因为json不喜欢int键,但是如果您使用自定义对象挂钩,您可以使用int键(我让您了解一下,这可能不适用于您的用例)
首先,我建议您使用SQLLite而不是JSON。JSON不是一个数据库。您确实应该避免使用它来存储可能经常更改的用户数据
关于您目前得到的内容,JSON的使用与字典类似。它使用键和值。我高度怀疑if语句
if user in users:
是否返回true。您应该(使用打印语句)检查if语句是否正常工作相关问题 更多 >
编程相关推荐