我检查用户是否在表中的代码:@client.eventasync def on_message(ctx): id = ctx.author.id with open('coins.json') as coins: coinData = json.load(coins) with open('shop.json') as shop: shopData = json.load(shop) await client.process_commands(ctx) if id in coinData: print('exists') else: coinData["players"][id] = 0 with open('coins.json', 'w') as coins: json.dump(coinData, coins)它正在读取的 JSON 文件:{"players": {"325616103143505932": 0}}当有人发送消息时会发生什么:{"players": {"325616103143505932": 0, "325616103143505932": 0}}而且它不会在控制台中打印“存在”,无论该人发送了多少消息,但它只添加了两次键值对。
1 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
在 python 中,字符串值和整数值是不同的。
>>> a = 1
>>> b = '1'
>>> a == b
False
因此,您应该将现有的 json 文件转换为使用整数 ID(通过删除引号)或使用str()将整数 ID 转换为字符串。
这里使用的是字符串转换(对于整数,您无需更改任何内容,只需更新您的文件):
@client.event
async def on_message(ctx):
id = str(ctx.author.id) # this line
with open('coins.json') as coins:
coinData = json.load(coins)
with open('shop.json') as shop:
shopData = json.load(shop)
await client.process_commands(ctx)
if id in coinData:
print('exists')
else:
coinData["players"][id] = 0
with open('coins.json', 'w') as coins:
json.dump(coinData, coins)
添加回答
举报
0/150
提交
取消