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

Python开发的Discord Bot排行榜命令无响应求助

问题分析与解决方案

你的Discord Bot执行.lb/.lbs命令无输出,核心是代码存在几个关键错误导致命令执行中断,以下是具体问题和修复方案:

关键错误点

  1. 变量名拼写错误
    在排行榜循环中,计算用户总金额的变量是total_amount,但后续赋值字典和列表时误用了未定义的total_amt,直接触发NameError,导致命令中途停止。

  2. 异步方法未加await
    client.fetch_user(id_)是异步函数,必须用await获取用户对象,否则得到的是协程对象,访问member.name会触发属性错误。

  3. 类名大小写错误
    discord.color.random()应为discord.Color.random(),类名首字母需大写,否则会抛出属性错误。

  4. 冗余文件操作
    lbs命令开头的with open('mainbank.json', 'r') as f:完全多余,get_bank_data()已经负责读取文件,重复打开属于无效操作。

修复后的lbs命令代码

@client.command(aliases = ["lb"])
async def lbs(ctx, x = 3):
    users = await get_bank_data()

    leader_board = {}
    total = []

    # 遍历用户数据,构建金额-用户ID映射
    for user_id in users:
        user_data = users[user_id]
        total_amount = user_data["wallet"] + user_data["bank"]
        # 处理重复金额:用列表存储多个用户ID,避免覆盖
        if total_amount not in leader_board:
            leader_board[total_amount] = []
        leader_board[total_amount].append(int(user_id))
        total.append(total_amount)

    # 去重并按金额降序排序,取前x个金额
    total = sorted(list(set(total)), reverse=True)[:x]

    em = discord.Embed(title=f"Top {x} Richest People", 
                       description="This is decided on the basis of raw money in the bank and wallet", 
                       color=discord.Color.random())
    
    index = 1
    for amt in total:
        user_ids = leader_board[amt]
        for user_id in user_ids:
            try:
                member = await client.fetch_user(user_id)
                name = member.name
            except discord.NotFound:
                # 处理用户已退出服务器的情况
                name = f"用户ID: {user_id}"
            em.add_field(name=f"{index}. {name}", value=f"{amt}", inline=False)
            index += 1
            if index > x:
                break
        if index > x:
            break
    await ctx.send(embed=em)

额外优化说明

  • 新增重复金额处理逻辑,避免多个用户总金额相同时覆盖字典值
  • 添加try-except捕获用户不存在的情况,防止因用户退出服务器导致命令失败
  • 对总金额列表去重后再取前x个,确保排行榜显示正确数量的用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:27:24