I am coding a multipurpose Discord bot, but all my commands all terminate when the server they run in is not in my dict data
. This is great, but it terminates even when the server is in that dict.
When I run /setup
(the command to add your server to my dict), the entry gets added fine, but when I run it again, instead of resetting the existing entry to my template, it adds a new entry. Why is this? My code is below.
# to load the datadef load_data(): global data with open("data.json", "r") as f: data = json.load(f)#to savedef load_data(): global data with open("data.json", "w") as f: data = json.dump(f)# setup command@bot.tree.command(name="setup", description="Resets all settings, but can fix errors. ")@commands.has_permissions(manage_guild=True)async def setup(interaction: discord.Interaction): load_data() data[interaction.guild.id] = templates["guild"] save_data(data) await interaction.response.send_message("All settings have been reset. ")# on message@bot.eventasync def on_message(message): load_data() author_id = message.author.id guild_id = message.guild.id try: guild_data = data[guild_id] except KeyError: print("guild is not set up") return if message.author == bot.user: return try: member = data[guild_id]["members"][author_id] except KeyError: member = templates["member"] asyncio.run(leveling.on_message(self, message)) #run the on_message block in a cog save_data(data)
And here's my template JSON:
{"guild":{"settings": {"leveling": {"notify_channel": "","notify_message": "","timeout": 0,"xp_by_message": 5 },"antiraid": {"bans_per_min": 999,"kicks_per_min": 999,"channel_delete_per_min": 999 } },"members": {}},"member": {"leveling": {"level": 0,"xp": 0,"messages": 0,"last_message": 0 } }}