我正在用Python制作一个discord的机器人.我使用一个JSON文件来存储我的机器人所在的服务器的设置.(例如:模块).当有人运行/Level切换命令时,它会将‘LEVEL_MODULE’值从0修改为1.(0表示打开,1表示关闭.)它确实可以工作,但有一个问题:It clears every other value.我希望这些值保持不变,如果用户禁用了审核模块(1),而有人切换了一个模块,则该值不应该返回到0.它应该only编辑该值.我在互联网上搜索了很长时间,想知道如何在不删除或更改所有其他值的情况下编辑此值,但我没有找到答案.有什么主意吗?拜托了,谢谢你.

记住:它应该ONLY编辑这个值,而不是其他所有东西.不应该发生的是,如果用户具有混合切换,则在切换模块时不应该使用其缺省值.

代码:

levelmds = app_commands.Group(name="leveling", description="Toggle leveling cmds")

@levelmds.command(name="toggle", description="Toggle the leveling module.")
@commands.has_permissions(administrator = True)
async def count_steam(interaction: discord.Interaction):
    if not interaction.user.guild_permissions.administrator:
        await interaction.response.send_message(":x: Only administrators can execute this command.")
    else:
            with open("database\\wae.json", encoding="utf-8") as f:
                data = json.load(f)
            if str(interaction.guild.id) in data:
                lvlmod = data[str(interaction.guild.id)]['level_module']
                if lvlmod == 0:
                    with open("database\\wae.json", encoding="utf-8") as f:
                        data = json.load(f)
                    data[str(interaction.guild.id)] = {}
                    data[str(interaction.guild.id)]['level_module'] = 1
                    with open("database\\wae.json", "w+") as fa:
                        json.dump(data, fa)
                    await interaction.response.send_message("✅ Successfully disabled the Leveling module.")
                else:
                    with open("database\\wae.json", encoding="utf-8") as f:
                        data = json.load(f)
                    data[str(interaction.guild.id)] = {}
                    data[str(interaction.guild.id)]['level_module'] = 0
                    with open("database\\wae.json", "w+") as fa:
                        json.dump(data, fa)
                    await interaction.response.send_message("✅ Successfully enabled the Leveling module.")                 


bot.tree.add_command(levelmds)

我的JSON文件:

{"1172011084274733076": {"level_module": 0, "moderation_module": 0, "test": 1}}

执行该命令后的结果:

enter image description here

文本格式:

{"1172011084274733076": {"level_module": 1}}

推荐答案

您正在创建一个新字典,其中包含以下行:

data[str(interaction.guild.id)] = {}

所以你才会把其他 keys 弄丢了.


无论如何,I highly recommend you to use a database instead of a JSON file,因为如果机器人接收到大量流量,可能会出现问题.如果您喜欢JSON文件的工作方式,您可以try MongoDB.

Python相关问答推荐

Python主进程和分支进程如何共享gc信息?

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

当多个值具有相同模式时返回空

如何删除索引过go 的lexsort深度可能会影响性能?' &>

如何在Windows上用Python提取名称中带有逗号的文件?

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

数据抓取失败:寻求帮助

如何在python polars中停止otherate(),当使用when()表达式时?

ODE集成中如何终止solve_ivp的无限运行

Python解析整数格式说明符的规则?

在np数组上实现无重叠的二维滑动窗口

如何使用Python以编程方式判断和检索Angular网站的动态内容?

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

未知依赖项pin—1阻止conda安装""

如何启动下载并在不击中磁盘的情况下呈现响应?

需要帮助重新调整python fill_between与数据点

基于Scipy插值法的三次样条系数

我对这个简单的异步者的例子有什么错误的理解吗?

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

按条件计算将记录拆分成两条记录