如何在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
相关产品推荐
相关产品推荐

