首页 > 解决方案 > 为什么我的警告命令会删除 .json 文件中的所有内容?(discord.py)

问题描述

我的警告命令应该在 3 个警告后将成员静音一小时,但是当它使成员静音时,命令停止工作并且 .json 文件被清除。有谁知道为什么?


@client.command()
@commands.has_permissions(manage_roles = True)
async def warn(ctx, member : discord.Member, *, reason=None):
    with open("warned_members.json", "r") as f:
        warned_ones = json.load(f)

    try:
        with open("warned_members.json", "r") as f:
           if warned_ones[str(member)] == 1 or 2 or 3:
               pass
    except:
        with open("warned_members.json", "w") as f:
            warned_ones[str(member)] = 1
            json.dump(warned_ones, f, indent=5)
            warn_embed = discord.Embed(title='Member Warned', description=f"{member} has been warned.")
            warn_embed.add_field(name='Reason', value=f"{reason}")
            await ctx.send(embed=warn_embed)
            return
    if warned_ones[str(member)] == 1:
        warned_ones[str(member)] = 2
        with open("warned_members.json", "w") as f:
            json.dump(warned_ones, f, indent=5)
            warn_embed = discord.Embed(title='Member Warned', description=f"{member} has been warned.")
            warn_embed.add_field(name='Reason', value=f"{reason}")
            await ctx.send(embed=warn_embed)
            return
    if warned_ones[str(member)] == 2:
        try:
            muted_role = discord.utils.get(ctx.guild.roles, name="Muted")
            time = 3600
            await member.add_roles(muted_role, reason=None, atomic=True)
            warned_ones.pop(str(member))
            with open("warned_members.json", "w") as f:
                json.dump(warned_ones, f, indent=5)
                warn_embed = discord.Embed(title='Member Muted', description=f"{member} has been muted for 1 hour.")
                warn_embed.add_field(name='Reason', value=f"3 warns reached.")
                await ctx.send(embed=warn_embed)
                await asyncio.sleep(time)
        except:        
            await ctx.send("Muted role not found")

标签: pythondiscord.py

解决方案


推荐阅读