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

