You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令更新JSON的Log_Number?Discord机器人问题求助

问题分析与解决方案

核心问题

你只是将data["Log_Number"]的值取出赋值给log_number并加1,但没有把更新后的数值存回data字典,写入JSON文件的依然是原始数据,所以不会看到数值变化。

其他潜在问题

  1. 类内异步方法dataExists缺少self参数,不符合Python类方法定义规范
  2. try:语句后多了一个无效反引号`,属于语法错误
  3. 类内的growlog命令方法缩进错误,导致装饰器无法正确作用于方法
  4. 你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:33:24