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

如何在Discord.py单个Python文件中添加多个命令及解决命令未找到问题

解决Discord.py单个文件中多命令加载失败的问题

嘿,我看你遇到的问题了——单个文件里.repeat命令正常,但.server却提示找不到,分开文件就都能运行,这大概率是命令注册环节的小问题,咱们一步步来排查解决:

可能的原因&解决方案

1. 先确认代码缩进是否绝对正确

新手很容易在缩进上踩坑,如果@client.command()装饰器下面的server函数缩进不对(比如混合了空格和制表符,或者缩进层级错了),会导致这个命令根本没被Bot注册。你可以对比.repeat命令的缩进,确保server函数的每一行都和它保持一致的缩进规则。

2. 添加启动验证,确认命令是否真的被加载

给你的Bot加一个on_ready事件,启动时打印所有已加载的命令,这样就能直观看到.server有没有被成功注册:

@client.event
async def on_ready():
    print(f'Logged in as {client.user} (ID: {client.user.id})')
    print('------')
    print("已加载的命令列表:")
    for cmd in client.commands:
        print(f"- {cmd.name}")

启动机器人后,如果终端输出里没有server,那肯定是代码的缩进或装饰器出了问题;如果有server,那再试.server命令应该就正常了。

3. 优化代码细节,避免潜在问题

虽然不是导致命令找不到的直接原因,但有些细节可以帮你避免后续的其他问题:

  • 不要用Python内置关键字(比如id)作为变量名,改成guild_id更稳妥
  • 处理空值情况(比如服务器没有描述、没有图标时,避免出现空字符串报错)

修改后的完整代码示例

import discord
from discord.ext import commands

# 开启命令大小写不敏感,方便输入
client = commands.Bot(command_prefix=".", case_insensitive=True)

@client.event
async def on_ready():
    print(f'Logged in as {client.user} (ID: {client.user.id})')
    print('------')
    print("已加载的命令列表:")
    for cmd in client.commands:
        print(f"- {cmd.name}")

@client.command()
async def repeat(ctx, *args):
    for arg in args:
        await ctx.send(arg)

@client.command()
async def server(ctx):
    guild = ctx.guild
    name = str(guild.name)
    # 处理服务器没有描述的情况
    description = str(guild.description) if guild.description else "无描述"
    owner = str(guild.owner)
    # 替换内置关键字id为guild_id
    guild_id = str(guild.id)
    region = str(guild.region)
    member_count = str(guild.member_count)
    # 处理服务器没有图标的情况
    icon_url = str(guild.icon_url) if guild.icon_url else ""
    
    embed = discord.Embed(
        title = f"{name} 服务器信息",
        description = description,
        color=discord.Color.dark_red()
    )
    if icon_url:
        embed.set_thumbnail(url=icon_url)
    embed.add_field(name="服务器所有者", value=owner, inline=True)
    embed.add_field(name="服务器ID", value=guild_id, inline=True)
    embed.add_field(name="服务器区域", value=region, inline=True)
    embed.add_field(name="成员数量", value=member_count, inline=True)
    await ctx.send(embed=embed)

client.run('[你的Bot Token]')

最后再试一次

运行修改后的代码,先看终端的已加载的命令列表里有没有server,如果有,再去Discord里输入.server,应该就能正常返回服务器信息了。如果还是不行,可以尝试完全关闭终端后重新运行脚本,或者重新安装指定版本的discord.py:pip install discord.py==1.4.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:22:38