如何通过命令更新JSON的Log_Number?Discord机器人问题求助
问题分析与解决方案
核心问题
你只是将data["Log_Number"]的值取出赋值给log_number并加1,但没有把更新后的数值存回data字典,写入JSON文件的依然是原始数据,所以不会看到数值变化。
其他潜在问题
- 类内异步方法
dataExists缺少self参数,不符合Python类方法定义规范 try:语句后多了一个无效反引号`,属于语法错误- 类内的
growlog命令方法缩进错误,导致装饰器无法正确作用于方法 - 你的JSON文件末尾存在多余逗号,部分JSON解析器会因此报错
修正后的完整代码
import json import discord from discord.ext import commands from datetime import datetime Weed_Data = "weed_data.json" # 确保文件路径正确 class Weed(commands.Cog): def __init__(self, bot): self.bot = bot ## Data Check async def dataExists(self, ctx): # 添加self参数 try: # 移除多余的反引号 with open(Weed_Data, 'r') as f: data = json.load(f) print("[Data Loaded]") return data except Exception as e: await ctx.send(f'**[ERROR]** File __"{Weed_Data}"__ doesn\'t exist or cannot be loaded: {str(e)}') return None @commands.command() async def growlog(self, ctx, *, message = None): # 修正方法缩进 data = await self.dataExists(ctx) # 类内方法调用需用self if not data: return if message is None: await ctx.send("Failed To Send Grow Log -> [Include Message]") return channel = self.bot.get_channel(data["logchannel_id"]) if not channel: await ctx.send("**[ERROR]** Log channel not found!") return embed = discord.Embed( title=f'<:weed:757471331645128775> Grow Log - {data["Log_Number"]}', description=message, color=discord.Color.orange(), timestamp=datetime.now() ) embed.set_footer(text=f'• Grow Log') await channel.send(embed=embed) # 关键修正:直接更新字典内的Log_Number值 data["Log_Number"] += 1 with open(Weed_Data, 'w') as j: json.dump(data, j, indent=4) print(" - [Data Saved]")
修正后的JSON文件(移除多余逗号)
{ "Log_Number": 1, "logchannel_id": 1234567890 # 确保该字段存在,否则get_channel会报错 }
关键修正点说明
- 直接修改
data["Log_Number"]的值,无需额外变量,确保更新后的数据能被写入文件 - 类内方法调用必须通过
self,保证方法能访问类实例的属性 - 修复语法错误与缩进问题,确保代码可正常运行
- 添加日志频道不存在的判断,避免无意义报错
内容的提问来源于stack exchange,提问作者Masked Gamer
相关产品推荐
相关产品推荐

