My warn command is supposed to mute a member for an hour after 3 warns, but when it muted the member, the command stops working and the .json file gets cleared. Does anyone know why?
@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")