如何在Discord.py中将斜杠命令拆分至独立文件?
将Discord斜杠命令迁移至独立文件的实现方案
一、调整项目文件结构
先给项目新增一个commands目录,用来存放拆分后的命令文件,最终结构如下:
你的项目根目录/ ├── main.py ├── bot.py ├── commands/ │ ├── __init__.py # 空文件即可,用于标记Python包 │ └── nick_commands.py # 存放昵称相关斜杠命令 └── Nick_Handler.py # 原有的昵称处理逻辑文件
二、编写独立命令文件(以nick_commands.py为例)
把原来写在bot.py里的斜杠命令迁移到这个文件中,基础版代码示例:
import discord from discord import app_commands from Nick_Handler import Nick_Handler # 定义单个斜杠命令 @app_commands.command( name="changenick", description="修改你的昵称,需等待管理员审核" ) @app_commands.describe(nickname="你的新昵称") async def change_nick(interaction: discord.Interaction, nickname: str): # 用interaction.client替代原有的bot实例 await Nick_Handler.ChangeNick(interaction, interaction.client, nickname) # Discord.py约定的加载函数,会被bot自动调用 def setup(bot): bot.tree.add_command(change_nick)
如果需要把同类型命令归类成命令组(比如/nick change),可以用app_commands.Group优化结构:
import discord from discord import app_commands from Nick_Handler import Nick_Handler class NickCommands(app_commands.Group): def __init__(self, bot): super().__init__(name="nick", description="昵称管理相关命令") self.bot = bot @app_commands.command(name="change", description="修改你的昵称,需等待管理员审核") @app_commands.describe(nickname="你的新昵称") async def change_nick(self, interaction: discord.Interaction, nickname: str): await Nick_Handler.ChangeNick(interaction, self.bot, nickname) def setup(bot): bot.tree.add_command(NickCommands(bot))
三、修改bot.py加载命令文件
在run_discord_bot函数中添加命令加载逻辑,同时同步斜杠命令到Discord:
import discord from discord.ext import commands import os TOKEN = "你的机器人令牌" def run_discord_bot(): bot = commands.Bot(command_prefix=";", intents=discord.Intents.all()) @bot.event async def on_ready(): print(f'{bot.user} 已启动运行') # 遍历commands目录,加载所有命令文件 for filename in os.listdir("./commands"): if filename.endswith(".py") and filename != "__init__.py": # 加载扩展文件,格式为"commands.文件名"(去掉.py后缀) await bot.load_extension(f"commands.{filename[:-3]}") # 同步斜杠命令到Discord(全局命令同步可能需要几分钟生效) # 若要快速同步到指定服务器,可添加guild参数:guild=discord.Object(id=你的服务器ID) await bot.tree.sync() print("斜杠命令已同步至Discord") # 保留原有的其他事件逻辑 bot.run(TOKEN)
四、验证运行
- 确保所有文件保存完毕
- 运行
main.py启动机器人,控制台会输出机器人启动和命令同步的提示 - 在Discord服务器中即可使用拆分后的斜杠命令
内容的提问来源于stack exchange,提问作者MAB
相关产品推荐
相关产品推荐

