Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的Discord XP机器人不是';识别JSON文件中的用户数据?_Python_Discord_Discord.py - Fatal编程技术网

Python 我的Discord XP机器人不是';识别JSON文件中的用户数据?

Python 我的Discord XP机器人不是';识别JSON文件中的用户数据?,python,discord,discord.py,Python,Discord,Discord.py,我的机器人没有按计划工作。 关于机器人的上下文,我几乎完全遵循了YouTuber的教程(体验的算法除外)—— 我添加了打印功能,以便跟踪触发了哪些功能。 第一次,它成功了。当我输入频道时,用户数据会在我的users.json文件中弹出。但是,在第二次键入任何内容时,会发生以下情况: 它显示相同的数据被输入两次!我很困惑,因为一切都是一样的。我会在这里发布机器人的完整代码。请帮助我使机器人可以使用。 (我删除了服务器ID和通道ID,因此请关注函数)要求键是字符串,因此当您使用json.dump时

我的机器人没有按计划工作。
关于机器人的上下文,我几乎完全遵循了YouTuber的教程(体验的算法除外)——

我添加了打印功能,以便跟踪触发了哪些功能。 第一次,它成功了。当我输入频道时,用户数据会在我的users.json文件中弹出。但是,在第二次键入任何内容时,会发生以下情况:

它显示相同的数据被输入两次!我很困惑,因为一切都是一样的。我会在这里发布机器人的完整代码。请帮助我使机器人可以使用。
(我删除了服务器ID和通道ID,因此请关注函数)

要求键是字符串,因此当您使用
json.dump
时,它会将整数ID转换为字符串。但是,当您使用
json.load
加载该字典时,它将保留一个字符串,因此当您从文件加载它时,
用户
字典将具有字符串键。然后,当您检查用户ID是否在字典中时,它是按整数计算的,所以不是,它将整数ID作为字典的键添加到新的初始值中。此时,字典中有相同ID的整数和字符串版本。当您使用
json.dump
将其写回文件时,它会再次将整数ID转换为字符串,从而产生屏幕截图中显示的内容。

您应该询问在显示的json中从何处获取user.ID?如果您检查它,它应该存在于您读写的json中。据我所见,json中没有id。其中所有的大部分数字都是用户id@MarkusRosjat,这些在图像中突出显示了它的工作原理!非常感谢,我听了你的建议,把所有的user.id都改成了str(user.id),现在它工作起来很有魅力!
async def update_user(users, user):
    if not user.id in users:
        print('added new user')
        users[user.id] = {}
        users[user.id]['experience'] = 0
        users[user.id]['level'] = 1

async def add_xp(users, user, exp):
    print('added exp')
    users[user.id]['experience'] += exp