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

如何在Embed中整洁展示JSON文件内的消息统计数据?

解决Discord Embed整洁展示消息统计数据的问题

先修正JSON格式问题

你提供的JSON数据中,"Slim Beatbox": 26,末尾多了一个逗号,这会导致JSON解析报错。可以通过修改统计代码让json.dump自动生成合法的JSON,避免手动修改的麻烦。

核心解决方案:遍历数据格式化Embed内容

不要直接将JSON字符串嵌入到Embed里,而是读取JSON后遍历数据,用Markdown格式构建整洁的展示内容。

示例:添加展示统计的命令

import discord
import json

@bot.command()
async def show_stats(ctx):
    # 读取统计数据
    with open('message_count.json', 'r') as f:
        message_count = json.load(f)
    
    # 获取当前服务器的统计记录
    guild_stats = message_count.get(ctx.guild.name)
    if not guild_stats:
        await ctx.send("该服务器暂无消息统计数据")
        return
    
    # 按消息数从多到少排序(可选)
    sorted_stats = sorted(guild_stats.items(), key=lambda x: x[1], reverse=True)
    # 构建每行的展示文本
    stats_text = "\n".join([f"**{username}**: {count} 条消息" for username, count in sorted_stats])
    
    # 创建并发送Embed
    embed = discord.Embed(
        title=f"{ctx.guild.name} 消息统计",
        description=stats_text,
        color=discord.Color.dark_blue()
    )
    await ctx.send(embed=embed)

运行!show_stats命令后,Embed会以清晰的列表形式展示每个用户的消息数,没有任何JSON多余符号。

优化原统计代码

原代码的try-except可以用dict.get()简化,同时去掉不必要的全局变量,避免潜在问题:

@bot.listen()
async def on_message(message):
    if message.author.bot:
        return
    
    with open('message_count.json', 'r') as f:
        message_count = json.load(f)
    
    guild_name = message.guild.name
    # 初始化服务器统计条目
    if guild_name not in message_count:
        message_count[guild_name] = {}
    
    username = message.author.name
    # 更新消息数,不存在则设为1
    message_count[guild_name][username] = message_count[guild_name].get(username, 0) + 1
    
    # 写入JSON,自动生成合法格式
    with open('message_count.json', 'w') as f:
        json.dump(message_count, f, indent=4)

内容的提问来源于stack exchange,提问作者superhackedmonkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:10:26