我正试图创建一个discord bot,让人们获胜,然后将其存储到json文件中。我什么时候运行命令?win@我遇到了一个错误,在错误中显示了他们的id。我相信这是因为他们的id不在json文件中。然而,我希望我的代码为他们的id创建一个条目,如果它不在json文件中,那么它就会获胜。这是我的职能和命令。
开放式赢得
async def open_wins(user):
users = await get_win_data()
if str(user.id) in users:
return False
users[str(user.id)] = {"Wins": 0}
with open('leaderboard.json',"w") as f:
json.dump(users,f)
return True
获取获胜数据
async def get_win_data():
with open("leaderboard.json", "r") as f:
users = json.load(f)
return users
获胜代码
@client.command()
@commands.has_role("Draft Manager")
async def win(ctx,member: discord.Member = None ):
if not member:
member = ctx.author
await open_wins(member)
users = await get_win_data()
user = member
onewin = 1
await ctx.send(f"You just gained {onewin} win ")
users[str(user.id)]["Wins"] += onewin
with open("leaderboard.json", "w") as f:
json.dump(users, f, indent=4)
这是我的json文件
{
"325837218222440460": {
"Wins": 1
}
}
我想注意的是,获胜命令只有在我这样做的时候才有效";?获胜";但当我这样做的时候";?win<用户>quot;那是我出错的时候。
只有当member
为None时才使用await open_wins(member)
。但是如果你使用";?win<用户>";,@user
可能仍未记录到您的文件中。因此,在所有情况下都需要使用await open_wins(member)
函数。
@client.command()
@commands.has_role("Draft Manager")
async def win(ctx,member: discord.Member = None ):
if not member:
member = ctx.author
await open_wins(member)
users = await get_win_data()
user = member
onewin = 1
await ctx.send(f"You just gained {onewin} win ")
users[str(user.id)]["Wins"] += onewin
with open("leaderboard.json", "w") as f:
json.dump(users, f, indent=4)