如何修复"命令引发异常:KeyError:"427924596164132864"discord.py



我正试图创建一个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)

最新更新